【发布时间】:2018-11-28 04:50:11
【问题描述】:
如果两个 lambda 都没有捕获任何内容,我可以从三元运算符返回一个 lambda。
auto lambda1 = 1==1
? [] (int a) {std::cout << "First\n";}
: [] (int a) {std::cout << "Second\n";};
auto lambda2 = 1==2
? [] (int a) {std::cout << "First\n";}
: [] (int a) {std::cout << "Second\n";};
lambda1(10);
lambda2(10);
这很好用。
但这不是
int n = 10;
auto lambda3 = 1==1
? [&n] (int a) {std::cout << "First\n";}
: [&n] (int a) {std::cout << "Second\n";};
auto lambda4 = 1==2
? [&n] (int a) {std::cout << "First\n";}
: [&n] (int a) {std::cout << "Second\n";};
lambda3(10);
lambda4(10);
错误是main.cpp:20:18: error: operands to ?: have different types 'main()::<lambda(int)>' and 'main()::<lambda(int)>' ? [&n] (int a) {std::cout << "First\n";}
我想知道为什么捕获相同的变量会改变 lambda 的类型?
【问题讨论】: