2

パッチが gcc に投稿され、g++ に vector subscripting と呼ばれるものを提供します (gcc には既にありました)。

aが配列でiint の場合、はi[a]有効で に等しいa[i]

double a[]{0.0, 1.0, 2.0, 3.0}; // C++11 style but would work in C++98 style too.
assert(a[2] == 2.0);
assert(2[a] == 2.0);

それで、これは合法で標準的な C/C++ ですか、それとも gcc 拡張機能ですか?

実際、Google は、MS Developer Studio にもこれがあることを示しています。私はC++標準を調べましたが、見当たりませんでした。

4

3 に答える 3

11

パッチは;i[a]と同等であることとは何の関係もありません。a[i]どちらの言語でも、常にそうでした。ユーザー定義型が含まれていない限り、a[i]は と同等であると定義され*(a+i)、加算は交換可能です。

このパッチは、ベクトル処理命令をサポートするための GCC 言語拡張であるベクトル データ型(C++ クラス テンプレートと混同しないでください) に関するものです。std::vectorパッチ ノートによると、これらは C の配列のように添字可能でしたが、C++ ではできませんでした。このパッチはその機能を C++ に追加します。

于 2012-04-18T14:44:17.387 に答える
5

Cでは、これは、a[b]と同等であるという事実*(a + b)に基づいています。これは、もちろん可換であるため+同じ*(b + a)です。

于 2012-04-18T14:42:19.337 に答える
3

はい、これは合法です。ベクトル要素は標準によってメモリ内で連続していることが保証されているためです。

ご了承ください:

a[i] == i[a] == *(a+i)
于 2012-04-18T14:40:19.087 に答える