在 A 类中,counter b(5);
不起作用。
while counter a;
(默认构造函数的调用)有效。
为什么?实例变量不能调用参数化构造函数吗?
class counter {
private:
int value;
public:
counter() { this->value = 0; }
counter(int value) { this->value = value; }
};
class A {
private:
// works
counter a;
// works (since C++11)
int x = 5;
// doesn't work
counter b(5);
};
int main()
{
// works
counter myCounter;
// works as well
counter mySecondCounter(5);
return 0;
}
最佳答案
如果允许,counter b(5);
在技术上声明了一个名为 b
的函数,该函数返回一个 counter
对象,并采用一个整数参数。
虽然这很可能不是编码人员的意图,但这就是不允许这样做的原因。
Bjarne 对类内初始化器的这条规则是这样说的:
我们可以在类声明中为非静态数据成员指定一个初始值设定项。例如:
class A {
public:
int a {7};
int b = 77;
};
由于与解析和名称查找相关的相当晦涩的技术原因,{}
和 =
初始值设定项
表示法可用于类内成员初始值设定项,但()
表示法不能。
关于c++ - C++私有(private)区实例变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43775959/