C ++:int x [+30]是一个有效的声明吗?

时间:2016-02-24 15:46:20

标签: c++ arrays pointers initialization operators

这些天我一直在研究阵列。我以这种方式遇到了一个数组的声明和元素的初始化:

int x[+30];
x[+1]=0;

这让我有些困惑。我记得这个概念,当我们写:

x[n]=0;

然后就意味着:

*(x+n)=0;

然后写x[+1]意味着*(x++1),这似乎无效。请纠正我在理解这个概念时所犯的错误。

2 个答案:

答案 0 :(得分:10)

x[n]表示*((x)+(n))(请注意黑板),x[+1]表示*((x)+(+1))。这是有效的。

N3337 5.2.1订阅

  

表达式E1 [E2]与*((E1)+(E2))相同(根据定义)

答案 1 :(得分:7)

+加号可以作为一元运算符。它通常没有效果,但结果是它在数字被解决之前被删除。例如:

int x[+30];

转换为

int x[operator+(30)];

然后变成

int x[30];

因此,这个表达

x[+1] = 0;

只需解析为

x[1] = 0;

它不会解析为*(x ++ 1),特别是因为它在c ++中不是有效的语法。