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

析构函数

constC ++中的变量必须初始化,这意味着uninitialized const variable不可能,并且这是编译器错误。但是为什么它在C语言中也不一样呢?考虑以下可编译良好C的程序:

#include <stdio.h>
int main()
{
    const int a;
}

允许的原因是uninitialized const什么?如果C也遵循与C ++相同的规则,那不是很好吗?是否出于性能方面的考虑,每次调用函数且初始化需要时间时都需要初始化局部const变量?

蚂蚁

除其他事项外,差异可能源于总体上使用C语言进行初始化的更为轻松的方法,而不仅仅是针对const对象。例如,此代码在C ++中是非法的

goto over;
int a = 5;
over:;

因为它跳入了a绕过初始化的范围同时,在C中,此代码完全合法,其中变量的a值不确定over:

相同的逻辑适用于您的const int a声明。C语言仅认为未初始化的对象没什么大不了的,即使在以后不再可能将其设置为确定值的情况下也是如此。

C ++中严格的初始化要求的主要原因是在语言中引入了非平凡的初始化(构造函数),即无法有意义地绕过的初始化。标量对象及其在C ++中的初始化只是标记了一个更广泛概念的一小部分。

如果C也遵循与C ++相同的规则,那不是很好吗?

我没看到 C和C ++是实质上不同的语言。他们对待的方式也const完全不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Linux

为什么我需要在TensorFlow中初始化变量?

来自分类Java

为什么Final变量不需要在Java的main方法中初始化?

来自分类Dev

为什么struct缓冲区不需要初始化

来自分类Dev

为什么有时不需要在Lambda中捕获const变量?

来自分类Dev

为什么局部变量需要初始化,而字段却不需要初始化?

来自分类Java

Spring Boot->为什么我不需要在服务中捕获异常?

来自分类Dev

无法更改但需要在构造函数中初始化的C#变量

来自分类Dev

什么时候需要在Java中初始化变量?

来自分类Dev

为什么引用变量需要在定义时进行初始化?

来自分类Dev

为什么引用变量需要在声明时进行初始化

来自分类Dev

为什么C不支持使用if-else语句初始化const变量?

来自分类Dev

为什么非常数静态变量需要在类外部初始化?

来自分类Dev

符合Decodable的类不需要初始化

来自分类Dev

编写不需要初始化的固定功能

来自分类Dev

在C中初始化const变量

来自分类Dev

如何在类初始化中摆脱不需要的参数?

来自分类Dev

为什么我们不需要在React中绑定箭头功能?

来自分类Dev

什么时候不需要通过lambda执行来初始化惰性变量?

来自分类Dev

为什么我们不需要在self()中包含self?

来自分类Dev

为什么我不需要在cmake中调用`add_test`?

来自分类Dev

世博会初始化不需要的git repo

来自分类Dev

为什么包含main方法的类不需要在Java中公开?

来自分类Dev

为什么最终实例变量不需要初始化,而最终局部变量不需要初始化?

来自分类Dev

为什么不需要在构造函数中指定变量?

来自分类Dev

如果std :: make_unique从未被调用,为什么默认成员初始化中不需要该参数?

来自分类Dev

为什么我不需要32位密钥或NodeJS加密的初始化向量?

来自分类Dev

为什么我不需要在C#中实现这些抽象功能?

来自分类Dev

为什么在C#中不需要#include指令?

来自分类Dev

长时间ext4lazyinit会损坏驱动器吗?为什么要在ext4中初始化inode表(在NTFS中不需要任何初始化)?等等

Related 相关文章

  1. 1

    为什么我需要在TensorFlow中初始化变量?

  2. 2

    为什么Final变量不需要在Java的main方法中初始化?

  3. 3

    为什么struct缓冲区不需要初始化

  4. 4

    为什么有时不需要在Lambda中捕获const变量?

  5. 5

    为什么局部变量需要初始化,而字段却不需要初始化?

  6. 6

    Spring Boot->为什么我不需要在服务中捕获异常?

  7. 7

    无法更改但需要在构造函数中初始化的C#变量

  8. 8

    什么时候需要在Java中初始化变量?

  9. 9

    为什么引用变量需要在定义时进行初始化?

  10. 10

    为什么引用变量需要在声明时进行初始化

  11. 11

    为什么C不支持使用if-else语句初始化const变量?

  12. 12

    为什么非常数静态变量需要在类外部初始化?

  13. 13

    符合Decodable的类不需要初始化

  14. 14

    编写不需要初始化的固定功能

  15. 15

    在C中初始化const变量

  16. 16

    如何在类初始化中摆脱不需要的参数?

  17. 17

    为什么我们不需要在React中绑定箭头功能?

  18. 18

    什么时候不需要通过lambda执行来初始化惰性变量?

  19. 19

    为什么我们不需要在self()中包含self?

  20. 20

    为什么我不需要在cmake中调用`add_test`?

  21. 21

    世博会初始化不需要的git repo

  22. 22

    为什么包含main方法的类不需要在Java中公开?

  23. 23

    为什么最终实例变量不需要初始化,而最终局部变量不需要初始化?

  24. 24

    为什么不需要在构造函数中指定变量?

  25. 25

    如果std :: make_unique从未被调用,为什么默认成员初始化中不需要该参数?

  26. 26

    为什么我不需要32位密钥或NodeJS加密的初始化向量?

  27. 27

    为什么我不需要在C#中实现这些抽象功能?

  28. 28

    为什么在C#中不需要#include指令?

  29. 29

    长时间ext4lazyinit会损坏驱动器吗?为什么要在ext4中初始化inode表(在NTFS中不需要任何初始化)?等等

热门标签

归档