不可能C++数组索引
Impossible C++ array indexing
可能的重复项:
在 C 数组中,为什么会这样?a[5] == 5[a]
在 C 和 C++ 中按索引[数组]访问数组
我刚刚在我的代码中发现了一个似乎是一个错误,但它不仅可以编译,而且最初也能按预期工作......
考虑以下代码狙击:
#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;
}
而不是text=value[name];
它应该被text=name[value];
但编译器不会抱怨,并且无论"错误"是否在这里,生成的二进制代码都是完全相同的。我正在使用g ++ 4.6.3进行编译,如果有人知道这里发生了什么,我将不胜感激。会不会是我错过的标准?也许在 C++0x 中自动修复错误?;)
多谢
干杯!
是的,这是一个奇怪的"功能"。实际上发生的情况是编译器将a[i]
转换为*(a + i)
,因此数组索引和数组地址实际上是可以互换的。
请注意,仅当operator []
未重载时,它才有效。
相关文章:
- 特征获取索引数组,其中向量中的值为真(不需要循环)
- 是否可以使用字符串或字符索引数组
- 为什么在使用字符索引数组时会出现这种不同的行为
- 在具有重复索引的索引数组处更改 ArrayFire 数组
- 使用索引数组订购 ArrayFire Array 的最佳方式
- C++ 中结构的动态索引数组
- 1索引数组上的qsort()正在扰乱索引
- C++ 索引数组打印和删除字符串名称 数组打印
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- openGL drawElements - 一个额外的三角形,使用索引数组
- 具有索引数组的地形(高度贴图)LOD
- 通过创建索引数组进行 C++ 排序
- OpenGL:两个顶点数组 + 两个索引数组
- 将索引数组排序为主数组
- 自动循环跳过某些索引数组
- 为静态强制转换的索引数组生成数组
- 重载枚举索引数组的std::get
- 使用c++中的第二个索引数组对数组进行排序
- 给定的零索引数组 &该数组的均衡索引
- CUDA:重新索引数组