Pil*_*ard 4 c++ arrays indexing g++
我刚刚发现了我的代码中似乎是一个错误,但不仅仅是编译,它最初也能正常工作......
考虑以下代码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中的自动错误修复?;)
非常感谢,
干杯!
是的,这是一个奇怪的"功能".实际上会发生的是编译器转换为a[i]into *(a + i),因此数组索引和数组地址实际上是可以互换的.
请注意,仅在operator []未过载时才有效.
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |