【问题标题】:integer indexed with a string in c++ [duplicate]在c ++中用字符串索引的整数[重复]
【发布时间】:2012-12-31 23:12:03
【问题描述】:

可能重复:
In C arrays why is this true? a[5] == 5[a]

这怎么可能是有效的 C++?

void main()
{
  int x = 1["WTF?"];
}

在 VC++10 上编译,在调试模式下,x 的值在语句之后是 84。

发生了什么事?

【问题讨论】:

  • 这肯定是几十个问题的重复...
  • 看看here
  • 一个更好的问题是对于一些重载operator [](int) 的用户定义类型是否可行:5[myType()]
  • @paul23 内在缩放器是编译器的捷径。所以不直接。然而……永远不要说永远。查看this useless piece of code,它有一个int* 的演员表操作符。它完全按照你的想法去做。美好时光。
  • 我有时会使用索引变量来查看对等程序员面孔的双重看法。你知道,一个复杂的 for 循环并埋在它的中间:i++[arName] 等等。让他们保持警觉 =P

标签: c++ string indexing integer int


【解决方案1】:

数组下标运算符是可交换的。相当于int x = "WTF?"[1]; 这里,"WTF?" 是一个由 5 个chars 组成的数组(它包括空终止符),[1] 给了我们第二个字符,即'T' - 隐式转换为int 它给出值 84。

题外话:代码 sn-p 不是有效的 C++,实际上 - main 必须返回 int

您可以在此处阅读更深入的讨论:In C arrays why is this true? a[5] == 5[a]

【讨论】:

  • +1 表示 main 必须返回 int :)
  • 好吧,它是有效的 Microsoft C++,因为它可以编译 :)
【解决方案2】:
int x = 1["WTF?"];

等于

int x = "WTF?"[1];

84 是“T”ASCII码

【讨论】:

    【解决方案3】:

    之所以如此,是因为当内置运算符[] 应用于指针和int 时,a[b] 等价于*(a+b)。其中(加法可交换)等价于*(b+a),根据[] 的定义,后者等价于b[a]

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      相关资源
      最近更新 更多