为什么(1 + 3)[a]与[1 + 3]相同?

时间:2017-02-04 01:06:39

标签: c++

在研究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],这对我来说仍然很奇怪。

我可以问一下这个历史吗?为什么会如此以及如何允许这样做?

1 个答案:

答案 0 :(得分:14)

在C中,a[i]定义为*(a + i)。根据此定义,您可以看到a[i]i[a]的含义相同。

C ++继承了这个&#34;功能&#34;但是,从C开始,请注意在C ++中:

  • i[a]a[i]只有在不调用重载运营商的情况下才意味着同样的事情;例如,如果a的类型为std::vector<int>,则您发布的代码将无效。
  • 在C ++ 14及更高版本中,a[i]*(a + i)不同,因为前者并不总是左值。