この例を考えてみます。メンバ初期化子リストの参照メンバのコンストラクタを呼び出す方法は?
class C {};
class B {
public:
B(C& c) : c_(c) {};
private:
C& c_;
};
class A {
public:
A(C& c) : b(c) {};
private:
B& b;
};
A
クラスB
の基準部材b
を有しています。 B
には、クラスC
の参照を取るコンストラクタがあります。 A
のコンストラクタは、クラスC
の参照を受け取り、c
で後者のコンストラクタを呼び出すことによってb
を初期化しようとします。
しかし、打ち鳴らすには、次のメッセージを表示して文句を言う:
wtf.cpp:12:13: error: non-const lvalue reference to type 'B' cannot bind to a value of unrelated type 'C'
A(C& c) : b(c) {};
^~
1 error generated.
それは打ち鳴らすが、私はb
からc
を割り当てたと思ったほとんどかのように聞こえるが、私の意図はc
でB
のコンストラクタを呼び出すことです。私はここで間違って何をしていますか?
を'を参照してください。 'A :: b' *は参考にする必要がありますか?どうして? –
'A'は' B'への参照を持っています。 'B 'はどこにその参照をバインドしようとしていますか?その生涯は何ですか? –
あなたはhttps://ideone.com/eW2nwZのような何かを非常に危険にする可能性があります。 – Stargateur