我只是在浏览 C++ 中的基本 OOP 概念,并遇到了以下问题:
class A{
public:
int i(20); //line 1
};
int main()
{
int j(20);
cout<<j<<endl;
A obj;
cout<<obj.i<<endl;
}
编译时出现以下错误line1
(在 gcc 和 MSVC++ 中都试过),
expected identifier before numeric constant
我知道如何为 a 分配默认值non-static member
(可以从 C++11 开始以不同的方式完成),但我不明白为什么只有这种默认值初始化是不可能的,因为做同样的初始化(对于正常变量)其他任何地方都是有效的。
这种限制的原因可能是什么?
编辑:
从提供的链接和答案来看,这是因为“在某些情况下它可能读作函数声明。由于这种歧义,它是不允许的。”
但考虑以下情况:
//global scope
struct B{
int j;
};
int B = 10;
int object(B);
这也是一个类似的情况,int object(B)
可以理解为一个以函数object
为B object
参数并带有int
返回类型的函数。我试过了gcc
,MSVC++
并且对象被视为int variable
. 为什么在这种情况下不受限制?