C の参照配列 : 標準リファレンスで説明
次のコードを考えてみましょう。
int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8};
このコードコンパイルされません。なぜ?答えを見つけるために C 標準を調べてみましょう。
C 標準ガイダンス
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}; }
このアプローチ基本的に、 cintref クラスのオブジェクトの配列を作成することによって、参照の配列をシミュレートします。各オブジェクトは、対応する整数変数への参照を保持します。
以上がC で参照の配列を宣言できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。