在研究18 Essential C++ Interview Questions时,我发现了一个带有以下(奇怪)陈述的问题:
std::cout << (1 + 3)[a] - a[0] + (a + 1)[2];
答案然后解释为(1+3)[a] is the same as a[1+3]
,这对我来说仍然很奇怪。
我可以问一下这个历史吗?为什么会如此以及如何允许这样做?
答案 0 :(得分:14)
在C中,a[i]
定义为*(a + i)
。根据此定义,您可以看到a[i]
和i[a]
的含义相同。
C ++继承了这个&#34;功能&#34;但是,从C开始,请注意在C ++中:
i[a]
和a[i]
只有在不调用重载运营商的情况下才意味着同样的事情;例如,如果a
的类型为std::vector<int>
,则您发布的代码将无效。a[i]
与*(a + i)
不同,因为前者并不总是左值。