为什么需要在C++中初始化常量变量
Why do you need to initialize a const variable in C++?
在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++会发生这种变化呢?
可能是因为声明一个未初始化的常量没有任何意义。
相关文章:
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 初始化常量字符* 数组
- 为什么MSVC14允许声明指向动态未初始化常量对象的指针
- C++初始化常量
- 在可变参数构造函数中初始化常量数组
- 使用数字初始化常量引用
- 如何在不初始化常量的情况下声明数组?
- 初始化常量静态 std::map unique_ptr作为值
- 为什么您可以初始化常量引用,但不能初始化来自右值的非常量引用
- 类中的初始化常量
- 如何初始化常量 CLSID
- 在类中初始化常量数组
- 在声明C++之后初始化常量变量
- C++初始化:常量全局与静态类成员的顺序
- 在头文件中声明并初始化常量
- 恒常性添加无效?错误:无法使用字符**初始化常量字符**
- 为什么我能够在构造函数中初始化常量
- 通过指针初始化常量矩阵<双精度,0,80>(来自 Dlib)
- C++构造函数:初始化常量引用时出现垃圾
- 用自身初始化C++常量变量