为什么未初始化的const成员在C和c++中的处理方式不同?
Why are uninitialized const members handled differently in C than in C++?
我正在为我链接的库包括一个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字段是可以的。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 是否可以在c++中处理字符串流中的各个元素
- 在多个核心中处理一个HTTP请求