私はこの単純なコードを持っています:
int a = 1, b = 2;
int* c[] = {&a,&b};
int& d[] = {a,b};
int x = *c[0]+d[1];
以下が機能する場合
int &d = a;
3行目と4行目でエラーが発生する理由がわかりません。:-s
それは私には本当に意味がありません:(
int& d[] = {a,b};
参照の配列を作成することはできません。C ++標準では許可されていません。許可するには、型メカニズム全体を書き直す必要があります。
int x = *c[0]+d[1];
d
を宣言する前の行にコンパイルエラーがあるため、コンパイラはのタイプを認識できないため、エラーが発生しますd
。
B b[2];
タイプの2つのオブジェクトを作成するため、 2回B
呼び出します。B()
b[1]=D();
タイプのオブジェクトを作成しますD
。クラス自体とそのBaseクラスのコンストラクターを呼び出し、結果として呼び出しB()
とD()
。作成されたオブジェクトは配列インデックスに格納されます1
。ただし、配列はB
Object Slicing型であるため、オブジェクトの派生メンバーはすべてスライスされます。基本的に、のオブジェクトは次b[1]
のタイプになりますB
b[1].print();
print()
オブジェクト型でメソッドを呼び出しますB
(なぜそれが型であるかについての上記の説明を参照してくださいB
)
最初の部分については、アルスの応答を参照してください。2番目の部分:
質問1
int& d[] = {a,b};
参照の配列を作成することはできません。配列にはオブジェクトが含まれています。インスタンス、プリミティブ、およびポインタはオブジェクトです。参照はそうではありません。
質問2、質問の変更により回答が省略されました。