参照の配列と 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 サイトの他の関連記事を参照してください。