在C中,以下代码有效,但在C ++中,它要求您初始化它。
const size_t s;
在C中,你必须去除constness然后再初始化它,但它不能保证工作。但是,如果他们允许这个功能存在,那么他们必须有充分的理由。那么为什么C ++会发生这种变化?
答案 0 :(得分:4)
在C中,const
关键字不是真正的const。这就是你使用preprocesser创建真正的const值的原因。
#define CONST_PREPROCESSOR 5
const int const_keyword = 5;
int myarray[CONST_PREPROCESSOR]; // valid
int myarray[const_keyword]; // compile error in C - valid in C++
在C ++中,const
关键字已得到改进,您可以声明实际的const值。这就是为什么必须在编译代码之前对其进行初始化。
答案 1 :(得分:2)
没有理由,真的。 C ++倾向于安全性,C正交性。但
对于未初始化的const
,您无法合法地做任何事情
C中的变量除了取其地址;任何修改它的尝试
或读取它是未定义的行为。
答案 2 :(得分:1)
在C中,你必须剥离constness然后再初始化它,但不能保证它能工作。
这是未定义的行为,因此任何事情都可能发生,包括程序崩溃。
但是,如果他们允许此功能存在,那么他们肯定有充分的理由
您错误地认为C语言中的所有内容背后都有合理的理由。更可能的是,const size_t s;
是允许的,因为语法碰巧被指定为 - 它不会将const类型限定符与其他类型限定符(例如volatile)区别开来。
那么为什么C ++会发生这种变化?
可能是因为声明一个未初始化的常量没有任何意义。