在默认初始化程序中使用“一次性”lambda 和使用普通的旧成员函数有什么区别吗?
struct A
{
int i;
int j = [&]
// something non-trivial,
// that requires multiple
// statements and depends
// on upper data members
{
int f = 0;
for (int k = 0; k < i; ++k) {
f += k;
}
return f;
}();
A(int k) : i(k) { ; }
};
相对:
struct A
{
int i;
int J() const
{
int f = 0;
for (int k = 0; k < i; ++k) {
f += k;
}
return f;
}
int j = J();
A(int k) : i(k) { ; }
};
我唯一看到的是第二种方法的缺点:这里将额外的符号J
引入到 class 的命名空间中A
。还有其他区别吗?