You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么数组需要使用const类型的尺寸?

C++数组初始化:const尺寸与普通变量尺寸的差异解析

先来看这段能直观体现差异的代码:

const size_t size = 5;
int array[size]{1,2,3,4,5}; // 可以初始化,因为size是const类型
size_t another_size = 5;
int another_array[another_size]; // 无法执行int another_array[another_size]{1,2,3,4,5};
another_array[0] = 1;
another_array[1] = 9090;
another_array[2] = 76;
another_array[3] = 90;
another_array[4] = 100;

核心区别其实和C++对编译期常量的要求直接相关:

  • 用const size_t size = 5定义的尺寸,是编译阶段就能确定值的常量表达式。编译器在编译时就明确知道数组大小是5,所以完全支持用初始化列表{1,2,3,4,5}直接填充数组,这符合标准数组的初始化规则。
  • 而size_t another_size = 5是普通变量,哪怕初始值是5,它的实际值属于运行期确定的范畴(理论上可以被修改)。用这种变量定义的数组属于变长数组(VLA)——这是C99的特性,C++标准并未正式纳入,仅部分编译器(比如GCC)作为扩展支持。而VLA不允许用初始化列表直接初始化,因为编译器没法在编译阶段确定数组的实际大小,也就无法提前处理初始化列表的内容,只能在定义后逐个元素赋值。

说白了就是:编译器能不能在编译时敲定数组大小,直接决定了它是否支持列表式的直接初始化。

内容的提问来源于stack exchange,提问作者Art

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:27:32