c/c++语言开发共享为什么使用const不允许变量大小的对象初始化

这是错误的,因为可能无法初始化可变大小的对象

int size = 4; int array[size] = {1}; 

size是一个变量,但是编译器在创建array时不知道它的值(在编译时是不是为size指定了初始值为4?)? 在此之后让size发生变化,为什么会出现问题呢? 我的意思是,这些是连续的指令,在声明数组之前可能会改变size的值?

第二个问题:为什么不允许这样做:

 const int size = 4; int array[size] = {1}; 

我宣称size为常量。 我知道const!=只读,并且将宏size声明为正确的方法。 但是,如果我保证使用const的编译器,我不会改变size的值,为什么不允许?

    第一个问题的答案是“因为语言规范是这样说的”。 虽然编译器可能能够推断出数组的大小,但这样做需要一些静态分析,当数组大小不是编译时常量表达式时,这不是一件容易的事。

    至于为什么不允许初始化VLA: 能想到的一个原因是,直到运行时才知道它们将包含多少个元素,因此VLA可能比其初始化列表更短,这将调用未定义的行为。 但是我无法确定这是否是(真正的原因)之一。

    第二个问题:为什么不允许这样做:

    允许的,除非的编译器的编写者生活在一个洞穴中(例如,微软的工程师们 – 他们的C编译器是一个罕见的例子,广泛使用的编译器仍然不支持C99,15年后它的标准化。 任何现代的,体面的C编译器都应该允许您使用C99中存在的可变长度数组。 已经实现C11的编译器可能会也可能不会选择支持VLA(因为它是最新标准的可选function)。

      以上就是c/c++开发分享为什么使用const不允许变量大小的对象初始化相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560188.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐