hus*_*sik 0 c++ arrays assembly pointers
有时我在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]);
Run Code Online (Sandbox Code Playgroud)
部件:
__asm
{
mov aa[0],ebx
mov aa[1],eax
mov 0[aa],ebx
mov 1[aa],eax
}
Run Code Online (Sandbox Code Playgroud)
这个C++数组访问符号是标准吗?如果是,它是从汇编寻址模式派生的吗?
当我尝试时[aa]1=5;,编译器给出
"左操作数必须是l值".
//当我尝试指针算术时,
*(aa + 1)= 0 //没有错误
*(aa + 0)= 0 //没有错误:)
对于运算符[]重载,此规则是否相同?
MSVC++ 2010
谢谢.
这是众所周知的C和C++的怪癖,他们并不关心方括号中的表达式的哪一半[].他们都评估相同的等价表达式:
*(0+aa)=15;
Run Code Online (Sandbox Code Playgroud)