据我所知,可以编写以下代码:
char *a = new char[50];
for (int i = 0; i < 50; ++i) {
i[a] = '5';
}
它编译。有用。它的作用与
char *a = new char[50];
for (int i = 0; i < 50; ++i) {
a[i] = '5';
}
难道仅仅是因为:
a[b]
默认情况下被实现为宏*(a + b)
,两个代码示例都有效的事实只是意外/编译器特定的- 它在某处标准化,并且此类算法的结果在每个平台上都应该相同
假设加法应该是可交换的是合理的,但如果我们operator[]
以这种方式实现,我们已经使其他东西可交换,这可能不是我们想要的。
有趣的事实是没有pointer[pointer]
运算符,所以operator[]
也不是宏。
我知道这很糟糕。我知道这会让阅读代码的人感到困惑。但我想知道这是否只是一个意外,它在独角兽有七只腿且左脸颊上有角的遥远土地上行不通。