C++指针访问类似于程序集

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

谢谢.

Mar*_*som 5

这是众所周知的C和C++的怪癖,他们并不关心方括号中的表达式的哪一半[].他们都评估相同的等价表达式:

*(0+aa)=15;
Run Code Online (Sandbox Code Playgroud)