2017-10-20 9 views
-1

デフォルトのコンストラクタ引数でコンストラクタを呼び出すと、オブジェクトが構築されません。コピーとベースコンストラクタで初期化されないC++

class cl{ 
private: 
public: 
    cl(){cout << "Default used" << endl;}; 
    cl(const cl & cl_object) {cout << "Copy used" << endl;}; 
    cl & operator=(const cl & cl_object){cout << "Assignment used" << endl; return *this;}; 
}; 

私が書く:

cl(cl()); 

メッセージは表示されませんされます。

質問: 1)なぜオブジェクトが構築されないのですか? 2)コピーコンストラクタが使用されないのはなぜですか?

+0

@ NathanOliverこれが重複していることを説明できますか? – Nameless

+0

答えと同様、 'cl(cl());'は関数を宣言します。それは関数であり、変数ではないので、何も構築しないので、コンストラクタ呼び出しを見ないことになります。 – NathanOliver

+0

@ NathanOliverしたがって、cl()を使用して正しく理解している場合は、 cl(cl())を使ってオブジェクトを構築するだけです。関数を宣言します。しかし、関数を宣言すると、戻り値の型を指定していないので、コンパイラはエラーを出力してはいけませんか? – Nameless

答えて

1

ほとんどの厄介な解析

cl(cl()); 

は、関数の宣言として解析されます。

+0

戻り値の型を指定しなかったので、コンパイラはエラーを出力しませんか? – Nameless

+0

クラスclの引数を持つclという関数です。しかし、まだ戻り値の型はありません。私のコンパイラでは、戻り値の型を指定しなければエラーを返します。では、ここで何が起こるのですか? – Nameless

+0

は 'c1 c1()'として解析され、 'c1'(クラス' c1'を隠す)を戻り値の型 'c1'(クラス)で機能させます。 – Jarod42

関連する問題