C++编译时表达式作为数组大小
C++ compile-time expression as an array size
我不确定该术语是否真的是"数组添加"。
我试图了解以下行的作用:
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
数组保留的。