参照の配列と C 標準
C では、次のコード スニペットのように、参照の配列を宣言しようとします。コンパイル エラーが発生します:
int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8};
これは C 標準によって明示的に禁止されており、次のように規定されています。 §8.3.2/4 には「参照への参照、参照の配列、および参照へのポインタがあってはなりません。」
参照の配列はなぜ違法ですか?
この禁止の理由は、参照の性質にあります。メモリを占有しアドレスを持つオブジェクトとは異なり、参照は他のオブジェクトのエイリアスです。これらは独立した存在ではなく、それ自体でメモリを占有することもありません。
したがって、参照の配列はオブジェクトへのポインタの配列となり、混乱が生じたり、メモリ管理の問題が発生する可能性があります。たとえば、参照によって指定されたオブジェクトが削除されると、参照はぶら下がり、配列に無効なデータが含まれる可能性があります。
参照配列のシミュレーション
struct cintref { cintref(const int &ref) : ref(ref) {} operator const int &() { return ref; } private: const int &ref; void operator=(const cintref &); }; int main() { int a=1,b=2,c=3; cintref arr[] = {a,b,c,8}; }
以上が参照の配列が C で禁止されているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。