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++ 中的有效语法。
这几天一直在研究数组。我以这种方式遇到了一个数组的声明和它的元素的初始化:
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++ 中的有效语法。