代码之家  ›  专栏  ›  技术社区  ›  Zebrafish

初始化带有圆括号()的构造函数参数的类成员[[副本]

  •  0
  • Zebrafish  · 技术社区  · 6 年前

    我能做到:

    int main()
    {
        int a(5);
    }
    

    但做不到:

    struct Foo
    {
        int a(5); // Error: expected a type specifier / Error: syntax error, 'constant'
    }
    

    我正在努力找回一些失去的知识,有人能告诉我不允许这样做的规则吗?我很确定这上面肯定有问题,我找不到。我唯一记得的是,委员会在类构造函数参数中争论(C++ 11,我认为),并引入了新的SigggLee括号构造函数初始化器,如int { 5 };但我想知道为什么int a(5);不允许在类内。这在C++中是否一直被禁止?

    1 回复  |  直到 6 年前
        1
  •  3
  •   T.C. Yksisarvinen    6 年前

    一种令人烦恼的动物。默认成员初始值设定项中的名称应该在完成的类中查找,因为它们应该模仿构造函数初始值设定项。与 () ,编译器将无法找出它正在解析的内容,因为它可以引用类中稍后声明的内容:

    struct X {
        int f(x); // function or data member?
        static const int x = 1;
    };