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

utk*_*867 5 c++ arrays pointers initialization operators

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

int x[+30];
x[+1]=0;
Run Code Online (Sandbox Code Playgroud)

这让我有点困惑.我有这个概念,当我们写:

x[n]=0;
Run Code Online (Sandbox Code Playgroud)

那意味着:

*(x+n)=0;
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*CAT 10

x[n]意思是*((x)+(n))(注意布莱克斯)和x[+1]手段*((x)+(+1)).这是有效的.

N3337 5.2.1订阅

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

  • 好黑板! (5认同)
  • 非常好的blackets.我几乎得到了相同的. (2认同)

Xir*_*ema 7

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

int x[+30];
Run Code Online (Sandbox Code Playgroud)

转换为

int x[operator+(30)];
Run Code Online (Sandbox Code Playgroud)

然后变成了

int x[30];
Run Code Online (Sandbox Code Playgroud)

因此,这个表达

x[+1] = 0;
Run Code Online (Sandbox Code Playgroud)

只会解决为

x[1] = 0;
Run Code Online (Sandbox Code Playgroud)

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