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

时间:2008-10-01 19:38:09

标签: c++ arrays

我不确定该术语是否实际上是“阵列加法”。

我正在尝试了解以下行的内容:

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

int var[3]有什么不同?

我已经使用Java好几年了,所以如果使用Java友好的词语解释我会很感激。

编辑:感谢所有帮助过我的人,Occam的剃刀适用于此。

6 个答案:

答案 0 :(得分:8)

没有什么不同。 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

答案 1 :(得分:0)

  

int var[3]有什么不同?

我无法看到。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

有人可能在编写char数组时编写这样的数组,以便为​​终止0添加空间。

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

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

答案 5 :(得分:0)

这将创建一个包含3个整数的数组。你是对的,只要值是编译时常量,你是否将其表示为2 + 13没有区别。

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

只有在使用初始化列表时才会发生零填充。否则,无法保证数组具有任何特定值。

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