不可能的C++数组索引

Pil*_*ard 4 c++ arrays indexing g++

可能重复:
在C数组中为什么这是真的?a [5] == 5 [a]
通过C和C++中的索引[array]访问数组

我刚刚发现了我的代码中似乎是一个错误,但不仅仅是编译,它最初也能正常工作......

考虑以下代码snipet:

#include <string>
#include <iostream>
using namespace std;

class WeirdTest
{
public:
    int value;
    string text;
    WeirdTest() : value(0),
                  text("")
    {}
    virtual ~WeirdTest()
    {}
    void doWeirdTest()
    {
        value = 5;
        string name[] =
        {
            "Zero",
            "One",
            "Two",
            "Three",
            "Four",
            "Five"
        };
        text = value[name];
        cout << "text: " << text << endl;
    }
};
int main(int argc, char** argv)
{
    WeirdTest test;
    test.doWeirdTest();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而不是text=value[name];它应该是,text=name[value];但编译器不会抱怨,并且得到的二进制代码完全相同,无论"bug"是否在这里.我正在使用g ++ 4.6.3进行编译,如果有人知道这里发生了什么,我将非常感激.这可能是我错过的标准吗?可能是C++ 0x中的自动错误修复?;)

非常感谢,

干杯!

Som*_*ame 9

是的,这是一个奇怪的"功能".实际上会发生的是编译器转换为a[i]into *(a + i),因此数组索引和数组地址实际上是可以互换的.

请注意,仅在operator []未过载时才有效.