1. ホーム
  2. c++

[解決済み] なぜ参照の配列は不正なのですか?

2022-05-08 11:32:27

質問

次のコードはコンパイルできません。

int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};

C++の規格ではどうなっているのでしょうか?

以下のように、参照を含むクラスを宣言し、そのクラスの配列を作成することができるのは知っています。 しかし、私はなぜ上のコードがコンパイルできないのか、本当に知りたいのです。

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;
  //typedef const int &  cintref;
  cintref arr[] = {a,b,c,8};
}

を使用することが可能です。 struct cintref ではなく const int & を使用すると、参照の配列をシミュレートすることができます。

どのように解決するのですか?

規格についてのご質問ですが、私は以下のものを引用することができます。 C++標準§8.3.2/4 :

参考文献への言及はしないものとする。 リファレンスの配列はありません また、参照へのポインタもありません。

それは、リファレンスがオブジェクトではなく、メモリを占有しないため、アドレスを持たないからです。オブジェクトのエイリアスだと思えばいい。何もない配列を宣言しても、あまり意味がない。