C++编译时表达式作为数组大小

C++ compile-time expression as an array size

本文关键字:数组 编译 表达式 C++      更新时间:2023-10-16

我不确定该术语是否真的是"数组添加"。

我试图了解以下行的作用:

int var[2 + 1] = {2, 1};

这与int var[3]有何不同?

我已经使用Java好几年了,所以如果用Java友好的词来解释,我将不胜感激。

编辑:成千上万的感谢所有帮助过我的人,奥卡姆剃刀在这里适用。

没有什么不同。 C++允许在数组声明的下标中使用表达式(甚至是非常量表达式)(有一些限制;除了多维数组的初始下标之外的任何内容都必须是常量)。

int var[]; 非法int var[] = {2,1}; 自动调整为 2int var[3] = {2,1}; 等效于 {2,1,0}:未指定的任何内容均为零int var[3]; 但是,如果没有初始值设定项,则不会将任何内容初始化为零

也许您正在阅读的代码会写2 + 1而不是3以提醒尾随0是有意的。

它与int var[3]有任何不同。编译器将在编译期间评估2 + 1并将其替换为3

这与int var[3]有何不同?

我看不见。

它没有任何不同; 它是int var[3] .

有人在写入数组时可能会这样写数组char以便为终止0添加空间。

char four[4 + 1] = "1234";  

使用 int 数组似乎没有任何意义。

var[2 + 1]var[3]没有什么不同。作者可能想强调 var 数组将包含 2 个数据项和一个终止零。

这将创建一个包含 3 个整数的数组。你是对的,无论你把它表达为
2 + 1还是3都没有区别,只要这个值是编译时常量。

=的右侧是一个初始值设定项列表,它告诉编译器如何填充数组。第一个值是 2 ,第二个1,第三个值0,因为没有指定更多的值。

仅当使用初始值设定项列表时,才会发生零填充。否则,不能保证数组具有任何特定值。

我已经看到用 char 数组完成了此操作,以强调一个char是为字符串终止符保留的,但从不为int数组保留的。