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

C++: int x[+30] is a valid declaration?

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

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

这让我有点困惑。我有一个想法,当我们写:

x[n]=0;

则表示:

*(x+n)=0;

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

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

N3337 5.2.1 订阅

The expression E1[E2] is identical (by definition) to *((E1)+(E2))

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

int x[+30];

转换为

int x[operator+(30)];

然后变成

int x[30];

因此,这个表达式

x[+1] = 0;

将简单地解析为

x[1] = 0;

它不会解析为 *(x++1),尤其是因为那不是 c++ 中的有效语法。