为什么需要在C ++中初始化const变量?

时间:2014-09-15 13:24:07

标签: c++ c const

在C中,以下代码有效,但在C ++中,它要求您初始化它。

const size_t s;

在C中,你必须去除constness然后再初始化它,但它不能保证工作。但是,如果他们允许这个功能存在,那么他们必须有充分的理由。那么为什么C ++会发生这种变化?

3 个答案:

答案 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 ++会发生这种变化?

可能是因为声明一个未初始化的常量没有任何意义。