当前位置: 首页 > 知识库问答 >
问题:

为什么这个格式错误的程序在g中编译得很好?[副本]

宁浩博
2023-03-14

我在这里读到了关于C默认初始化的内容。它说:

如果T是const限定类型,则它必须是具有用户提供的默认构造函数的类类型。

该链接上给出的示例是(我只显示了与我的问题相关的程序语句,其他我省略了):

struct T1 {};
int main()
{
    const T1 nd;    //  error: const class type with implicit ctor
}

但它在gcc 4.8.1上编译良好

因此,我认为成功编译上述程序的原因是结构T1中没有成员。因此,在这种情况下不会发生默认初始化。但如果我添加一个数据成员,如:

struct T1 { int a; };
int main()
{
    const T1 nd;    //  error: const class type with implicit ctor
}

然后编译器给出适当的错误消息,如下所示:

6 11 [Error] uninitialized const 'a' [-fpermissive]
2 8 [Note] 'const struct T1' has no user-provided default constructor
3 8 [Note] and the implicitly-defined constructor does not initialize 'int T1::a'

那么,声明不应该这样写吗?

如果T是具有至少一个数据成员的const限定类型,则它必须是具有用户提供的默认构造函数的类类型。

如果我错了,请纠正我

共有1个答案

林俭
2023-03-14

C标准在这方面非常清楚,从[dcl.init]:

如果程序调用常量限定类型的对象的默认初始化,T应为具有用户提供的默认构造函数的类类型。

因此,gcc在这方面不符合要求,CPPFerence是正确的。

 类似资料: