sty*_*fly 9 c++ arrays syntax pointers subscript-operator
据我所知,可以编写以下代码:
char *a = new char[50];
for (int i = 0; i < 50; ++i) {
i[a] = '5';
}
Run Code Online (Sandbox Code Playgroud)
它汇编.有用.它完全一样
char *a = new char[50];
for (int i = 0; i < 50; ++i) {
a[i] = '5';
}
Run Code Online (Sandbox Code Playgroud)
是因为:
a[b]
*(a + b)
默认情况下实现为宏,并且两个代码示例都有效的事实只是一个事故/编译器特定的事实可以合理地假设添加应该是可交换的,但是如果我们operator[]
以这种方式实现,我们已经做了其他可交换的东西,可能不是我们想要的东西.
有趣的是,没有pointer[pointer]
运营商,因此operator[]
不是宏.
我知道这很糟糕.我知道阅读代码的人会感到困惑.但是我想知道这是不是偶然发生,它不会在一个遥远的地方工作,那里的独角兽有七条腿,而左边的脸颊上有角.
use*_*016 12
除非为类(13.5.5)声明它,否则下标运算符
[]
的解释方式E1[E2]
与*((E1)+(E2))
.由于适用的转换规则+
,ifE1
是数组和E2
整数,因此E1[E2]
引用的是E2
-th成员E1
.因此,尽管它的外观不对称,下标是可交换操作.
归档时间: |
|
查看次数: |
557 次 |
最近记录: |