【发布时间】:2012-09-10 16:07:59
【问题描述】:
有时我在 C++ 中看到不同的数组访问样式,并认为它可能与程序集寻址模式有关:
C++:
int * aa=new int[2];
0[aa]=15; //a little different than aa[0]
1[aa]=15;
aa[0]=15;
aa[1]=15;
printf("%d %d \n",aa[0],aa[1]);
组装:
__asm
{
mov aa[0],ebx
mov aa[1],eax
mov 0[aa],ebx
mov 1[aa],eax
}
这种 C++ 数组访问表示法是标准吗?如果是,它是从程序集寻址模式派生的吗?
当我尝试 [aa]1=5; 时,编译器给出了
- “未找到aa属性”,
- “缺少';'在“常数”之前”
-
“左操作数必须是左值”。
//当我尝试指针运算时,
*(aa+1)=0//不报错
*(aa+0)=0//没有错误:)
运算符 [] 重载的规则是否相同?
MSVC++ 2010
谢谢。
【问题讨论】:
-
两者无关 - C 比 80x86 早了很多年。
-
你在哪里看到像
0[aa]=15这样的东西在真正的C++代码中?这是合法的,但大多数人不会使用它,除非他们抽的是不合法的东西
标签: c++ arrays pointers assembly