【发布时间】:2017-05-05 13:02:06
【问题描述】:
在默认初始化程序中使用“一次性”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 引入到类 A 的命名空间中。还有其他区别吗?
【问题讨论】:
-
就我个人而言,我会使用一个函数并在成员初始化列表中传入您需要计算的变量。否则,您需要依靠人们从不改变类中变量的顺序来保持它的工作。
-
您的带有 lambda 初始化的示例无法编译。
-
@vordhosbn:已修复失踪父母。
标签: c++ c++11 lambda data-members