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

Why do you need to initialize a const variable in C++?

本文关键字:初始化 常量 变量 C++ 为什么      更新时间:2023-10-16

在C中,以下代码是有效的,但在C++中,它需要初始化它。

const size_t s;

在C中,您必须去掉常量,然后稍后对其进行初始化,但不能保证它能工作。然而,如果他们允许这个功能存在,那么他们一定有充分的理由。那么,为什么C++会发生这种变化呢?

在C中,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关键字得到了改进,您可以声明实常量值。这就是为什么在编译代码之前必须对其进行初始化。

没有理由,真的。C++支持安全性、C正交性。但是对于未初始化的const,您在法律上无能为力C中的变量,除非取其地址;任何修改它的尝试或者读取它是未定义的行为。

在C中,您必须去掉常量,然后稍后对其进行初始化,但不能保证它能工作。

这是未定义的行为,所以任何事情都可能发生,包括程序崩溃。

然而,如果他们允许这个功能存在,那么他们一定有充分的理由

您错误地认为C语言中的所有内容背后都有合理的理由。更可能的是,const size_t s;之所以被允许,只是因为语法恰好是这样指定的——它不会将const类型限定符与其他类型限定符(如volatile)区别对待。

那么,为什么C++会发生这种变化呢?

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