在C ++中你可以这样做:
struct A
{
int a, b;
double k = 3; // OK
};
但不是这个
struct A
{
int a, b;
auto f = [this]() {return this->a + this->b; }; // Error
};
编译器通知我们错误
非静态数据成员声明为'auto'
告诉我们这样做
struct A
{
int a, b;
function<int(void)> f = [this]() { return this->a + this->b; }; // OK
};
我想问一些对此的见解。特别是为什么(简单的回答是标准明确不允许根据某些经文)
换句话说:类成员初始化中是否包含足够的成员类型?
我知道在类成员初始化中是syntactic sugar,但这是编译器可以收集附加信息的情况,但由于设计选择而无法这样做? (很像在C ++ 11之前缺少auto
)或者由更深层次的选择设置的限制(比如静态输入的语言等)?