目录
内联函数
特点
使用方法
注意
Lambda 表达式
基本语法
示例1:使用 Lambda 表达式进行加法
示例2:在函数调用中使用匿名 lambda 函数
示例3:带参数捕获的 Lambda 表达式
其定义直接在每个调用点展开。这意味着编译器 会尝试将函数调用替换为函数本身的代码,这样可以减少函数调用的开销,尤其是在小型函数中
inline int add(int a, int b) {
return a + b;
}
int result = add(5, 3); // 编译器可能会将此替换为:int result = 5 + 3;
std::cout << "Result: " << result << std::endl;
Lambda 表达式是 C++11 引入的一种匿名函数的方式,它允许你在需要函数的地方内联地定义函数,而 无需单独命名函数
[capture clause](parameters) -> return_type {
// 函数体
// 可以使用捕获列表中的变量
return expression; // 可选的返回语句
}
// 定义一个简单的 Lambda 表达式进行加法
auto add = [](int a, int b) {
return a + b;
};
// 使用 Lambda 表达式计算两个数的和
int sum = add(10, 20);
std::cout << "Sum is: " << sum << std::endl;
使用一个函数来找出两个数中的较大数,这个函数将接受一个 lambda 函数 作为回调来比较这两个数。Lambda 函数将直接在函数调用时定义,完全是匿名的
// 函数,接受两个整数和一个比较的 lambda 函数
bool myCompare(int a, int b){
return a > b;
}
int getMax(int a, int b, bool(*compare)(int, int)) {
if (compare(a, b)) {
return a;
} else {
return b;
}
}
int x = 10;
int y = 20;
// 回调函数
int max = getMax(x, y, myCompare);
std::cout << "The larger number is: " << max << std::endl;
或者可以写成
// 函数,接受两个整数和一个比较的 lambda 函数
int getMax(int a, int b, bool(*compare)(int, int)) {
if (compare(a, b)) {
return a;
} else {
return b;
}
}
int x = 10;
int y = 20;
// 直接在函数调用中定义匿名 lambda 函数
int max = getMax(x, y, [](int a, int b) -> bool {
return a > b;
});
std::cout << "The larger number is: " << max << std::endl;
int x = 10;
int y = 20;
// 捕获 x 和 y 以便在 Lambda 内部使用
// 这里的捕获列表 [x, y] 表示 x 和 y 被按值捕获
auto sum = [x, y]() {
// x++;
// y++; 按值捕获,关注的是值本身,无法修改
return x + y;
};
std::cout << "Sum is: " << sum() << std::endl;
std::cout << "x is now: " << x << ", y is now: " << y << std::endl;
// 捕获所有外部变量按值捕获(拷贝)
int z = 30;
auto multiply = [=]() {
// x++;
// y++; 按值捕获,关注的是值本身,无法修改
return x * y * z;
};
count << x << "," << y << endl;
std::cout << "Product is: " << multiply() << std::endl;
std::cout << "x is now: " << x << ", y is now: " << y << std::endl;
// 捕获所有外部变量按引用捕获
auto modifyAndSum = [&]() {
x = 15; // 修改 x 的实际值
y = 25; // 修改 y 的实际值, 引用捕获可以修改
return x + y;
};
std::cout << "Modified Sum is: " << modifyAndSum() << std::endl;
std::cout << "x is now: " << x << ", y is now: " << y << std::endl;