【问题标题】:C++ operator[] magic [duplicate]C++ 运算符 [] 魔法 [重复]
【发布时间】:2019-02-08 06:55:58
【问题描述】:

我遇到了一种奇怪的方式来调用数组的元素,并认为这是一个错误,但它确实有效。你能解释一下它是如何工作的吗?

#include <iostream>
int main()
{
  int a[] = {1,2,3,4};
  std::cout << 1[a];
}

【问题讨论】:

标签: c++


【解决方案1】:

表达式a[b] 等价于*(a + b) 所以在你的例子中我们有:

1[a]可以写成*(1 + a)*(a + 1)一样,最后和a[1]一样

【讨论】:

  • 根据我大脑最头疼的解析,第一句是“表达式a[b]相当于*(a + b)”,没有限制“在你的例子中”,这不一定是真的。例如,如果astd::vector,则a[b](通常)等价于a.operator[](b),而*(a + b) 不会编译。不过还是+1。 :)
  • 你是对的,operator[] 可以重载然后上面的可能不成立。
【解决方案2】:
BaseAddr[ Offset ] = *( BaseAddr + Offset )
Offset[ BaseAddr ] = *( Offset + BaseAddr ) = *( BaseAddr + Offset )

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 2012-12-22
    • 2016-09-26
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2015-09-18
    相关资源
    最近更新 更多