首页 > 后端开发 > C++ > 正文

为什么不能用 C 中的 `const int` 变量初始化数组大小?

Susan Sarandon
发布: 2024-10-28 05:29:02
原创
623 人浏览过

Why Can't Array Sizes Be Initialized with `const int` Variables in C  ?

为什么有时会强制使用 Const Int 来限制数组大小?

在 C 中,可以使用常量整数指定数组大小。然而,这种灵活性是有局限性的,如以下示例所示:

<code class="cpp">const int size = 2;
int array[size] = {0}; // Allowed</code>
登录后复制
<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0}; // Compile Error</code>
登录后复制

为什么第一个示例编译成功而第二个示例失败?

说明

C 标准根据用于初始化大小的表达式的性质规定了这些数组大小限制。

常量表达式

在第一个示例中, const int size = 2;是一个常量表达式,因为 size 的值在编译时已知。由于编译器知道数组大小,因此可以在编译期间分配必要的内存。

非常量表达式

在第二个示例中,const int size = a;不是常量表达式,因为 a 的值直到运行时才确定。这可以防止编译器在编译期间知道数组大小,从而无法在编译时分配内存。

不变性是不相关的

请注意,第二个示例仍然具有有效的大小常量值,但是编译器不考虑这一点。规则重点关注所使用的表达式类型,int a = 2;使用可变变量,使其成为非常量表达式。

流分析复杂性

允许编译时分配的运行时初始化将需要流分析。编译器需要区分以下表达式:

<code class="cpp">int a = 2;
const int size = a;</code>
登录后复制

<code class="cpp">int a = foo();
const int size = a;</code>
登录后复制

,其中大小表达式相同,但实际值取决于运行时行为。 C 委员会认为这种复杂性是不必要的。

以上是为什么不能用 C 中的 `const int` 变量初始化数组大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!