C ++编译时表达式作为数组大小
时间:2020-03-06 14:59:40 来源:igfitidea点击:
我不确定该术语是否实际上是"数组加法"。
我试图了解以下行的作用:
int var[2 + 1] = {2, 1};
这和int var [3]
有何不同?
我已经使用Java几年了,因此,如果使用Java友好的单词进行解释,我将不胜感激。
编辑:感谢所有帮助过我的人,Occam的Razor在这里适用。
解决方案
How is that different from int var[3]?
我绝对看不到。
它与" int var [3]"不同。编译器将评估" 2 + 1",并在编译过程中将其替换为" 3"。
var [2 + 1]与var [3]没有区别。作者可能想强调一下,var数组将包含2个数据项和一个终止的零。
没什么两样。它是" int var [3]"。
有人在写char
数组时可能会这样写他们的数组,以便为终止0
添加空间。
char four[4 + 1] = "1234";
使用int
数组似乎没有任何意义。
这将创建一个由3个整数组成的数组。没错,无论我们表达为
只要该值是编译时常数,则为" 2 + 1"或者" 3"。
==的右侧是一个初始化列表,它告诉编译器如何填充数组。由于没有指定更多的值,因此第一个值为" 2",第二个为" 1",第三个为" 0"。
零填充仅在使用初始化程序列表时发生。否则,不能保证该数组具有任何特定值。
我已经看过用char数组完成此操作,以强调一个char
保留给字符串终止符,但从来没有保留给int
数组。
没什么两样C ++允许在数组声明的下标中使用表达式(甚至是非常数表达式)(有一些限制;多维数组上除初始下标之外的任何其他内容都必须是常量)。
int var[]; // illegal int var[] = {2,1}; // automatically sized to 2 int var[3] = {2,1}; // equivalent to {2,1,0}: anything not specified is zero int var[3]; // however, with no initializer, nothing is initialized to zero
也许我们正在阅读的代码写的是" 2 + 1"而不是" 3",以提醒我们尾随的" 0"是有意的。