ホームページ > バックエンド開発 > C++ > C で参照の配列を宣言できないのはなぜですか?

C で参照の配列を宣言できないのはなぜですか?

DDD
リリース: 2024-12-04 17:10:13
オリジナル
168 人が閲覧しました

Why Can't You Declare an Array of References in C  ?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート