为什么不能将类初始化成员声明为auto?

时间:2014-05-27 15:55:33

标签: c++ c++11 lambda

在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)或者由更深层次的选择设置的限制(比如静态输入的语言等)?

0 个答案:

没有答案