時々、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
ありがとうございました。