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

Why are uninitialized const members handled differently in C than in C++?

本文关键字:c++ 处理 方式不 初始化 const 成员 为什么      更新时间:2023-10-16

我正在为我链接的库包括一个C头。头文件有一个结构体foo,我想为它声明一个新的变量bar。我得到编译器错误:

 error: uninitialized const member in "struct foo"

这些成员需要初始化是有意义的,因为它们不能稍后赋值。但是使用这个库的C程序做了完全相同的事情,而且它能工作。C和c++标准有什么不同吗?

这只是一个样品。实际上,我指的是libmtd.h (mtd-utils)中的结构体mtd_dev_info。http://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; 
}

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

这意味着以后不给它们赋值——而其他字段可以在程序的后面步骤中获得值(因为它们是可变的)。

C只是认为在本编译单元中使用未定义值的const字段是可以的。