在lambda表达式中,如果没有参数声明,括号可以省去。
auto HelloWorld = [](){std::cout<<"Hello, World"<<std::endl;};
可写成
auto HelloWorld = []{std::cout<<"Hello, World"<<std::endl;};
可是当我们添加对函数的修饰符时,例如mutable
std::string s1 = "abc";
auto withParen = [s1 = std::move(s1)] () mutable {
s1 += "d";
std::cout << s1 << '\n';
};
这样是正确的。
而
std::string s2 = "abc";
auto noSean = [s2 = std::move(s2)] mutable { // Currently a syntax error.
s2 += "d";
std::cout << s2 << '\n';
};
是错误的。
C++ 23 会解决这个问题。