在研究18个基本C++面试问题时,我发现了一个带有以下(奇怪)声明的问题:
std::cout << (1 + 3)[a] - a[0] + (a + 1)[2];
Run Code Online (Sandbox Code Playgroud)
然后答案解释了,(1+3)[a] is the same as a[1+3]这对我来说仍然很奇怪.
我可以问一下这个历史吗?为什么会如此以及如何允许这样做呢?
Bri*_*ian 14
在C中,a[i]定义为*(a + i).根据这个定义,您可以看到a[i]并且i[a]意味着同样的事情.
C++从C继承了这个"特性",但请注意在C++中:
i[a]a[i]如果他们不调用重载运算符,那只是意思相同; 例如,如果a有类型,您发布的代码将无效std::vector<int>.a[i]因此不相同*(a + i).