为什么未初始化的const成员在C中的处理方式与在C ++中的处理方式不同?

时间:2014-06-23 09:40:38

标签: c++ c const

我正在为我正在链接的lib包含一个C头。 标头有一个结构foo,我想要声明一个新变量bar。 我收到编译器错误:

 error: uninitialized const member in "struct foo"

这些成员需要初始化是有道理的,因为以后不能为它们分配值。但是使用这个库的C程序完全相同,它可以工作。 C和C ++标准有区别吗?

这只是一个样本。实际上我指的是来自mtd_dev_info(mtd-utils)的结构libmtd.hhttp://mtd-utils.sourcearchive.com/documentation/1.4.4/libmtd_8h_source.html

标题中的结构:

struct foo
{
    int major;
    int minor;
    int type;
    const char type_str[15];
    const char name[15];
};

我的C ++应用程序:

int main (int argc, const char ** argv)
{
  foo bar; 
}

1 个答案:

答案 0 :(得分:3)

需要填写这些字段,因为它们是

这意味着以后不会分配它们 - 而其他字段可以在程序的后续步骤中获得值(因为它们是可变的)。

C只是认为在这个编译单元中可以修改未定义值的const字段是可以的。