#include <iostream>
//全局变量
int g_num = 0;
class demo
{
public:
void test() {
int num_1 = 1;
int num_2 = 2;
int num_3 = 3;
std::cout << "lambda1 class\n";
auto lambda13 = [this] {
std::cout << this->num << std::endl;
};
lambda13();
}
int num = 0;
};
void lambdaTest()
{
//局部变量
int num_1 = 1;
int num_2 = 2;
int num_3 = 3;
std::cout << "lambda1:\n";
auto lambda1 = [=] {
//全局变量可以直接访问甚至修改
g_num = 10;
// num_1++; 不允许修改const值
//函数体内只能使用外部变量,而无法对它们进行修改
std::cout << num_1 << " "
<< num_2 << " "
<< num_3 << std::endl;
};
lambda1();
auto lambda11 = [=] () mutable {
// 使用mutable可以修改拷贝的值,但不能修改原值
std::cout << ++num_1 << " "
<< ++num_2 << " "
<< ++num_3 << std::endl;
};
lambda11();
lambda1();
std::cout << g_num << std::endl;
std::cout << "lambda2:\n";
auto lambda2 = [&] {
// 引用可以修改
g_num = 100;
num_1 = 10;
num_2 = 20;
num_3 = 30;
std::cout << num_1 << " "
<< num_2 << " "
<< num_3 << std::endl;
};
lambda2();
auto lambda12 = [=] () mutable {
std::cout << ++num_1 << " "
<< ++num_2 << " "
<< ++num_3 << std::endl;
};
lambda12();
std::cout << g_num << std::endl;
demo* tmp = new demo();
tmp->test();
}
void testExcept()
{
auto except = []()
{
throw 10;
};
try {
except();
} catch (...) {
std::cout << "捕获到了整形异常\n";
}
// 此程序运行会直接崩溃,except1 匿名函数指定了函数体中不发生任何异常,但函数体中却发生了整形异常
auto except1 = []() noexcept {
throw 10;
};
try {
except1();
} catch (...) {
std::cout << "捕获到了整形异常\n";
}
}
int main(int argc, char *argv[])
{
//lambdaTest();
//testExcept();
auto lmd = [=](int a, int b) ->int {
//a++;
//b++;
return a;
};
int a = 0;
int b = 0;
lmd(a,b);
return 0;
}
c++lambda表达式的几个例子
最新推荐文章于 2024-07-12 10:45:15 发布