gpt4 book ai didi

c++ - 为什么不能使用 '( )' 为类的非静态数据成员赋予默认值?

转载 作者:行者123 更新时间:2023-11-30 03:29:32 25 4
gpt4 key购买 nike

<分区>

我刚刚了解了 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

我知道如何为非静态成员分配默认值(这可以通过不同方式从 C++11 on wards 完成),但我无法理解为什么只这种默认值初始化是不可能的,因为在其他任何地方进行相同的初始化(对于普通变量)都是有效的。

这种限制的原因可能是什么?

已编辑:

从提供的链接和答案来看,这是因为“在某些情况下,它可能会读作函数声明。由于这种歧义,这是不允许的。”

但请考虑以下情况:

//global scope
struct B{
int j;
};

int B = 10;

int object(B);

这也是一个类似的情况,其中 int object(B) 可能被理解为一个以 B object 为参数的函数 object 并且使用 int 返回类型。我在 gccMSVC++ 中尝试过,对象被视为 int 变量。为什么在这种情况下不限制?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com