2016-06-18 39 views
-2

このクラスのオブジェクトが引数として引数として渡されたときに、クラスAのコンストラクタが呼び出されないのはなぜですか?コンストラクタが呼び出されないのはなぜですか?

class A 
{ 
public: 
    A() 
    { 
     cout << "A\n"; 
    } 
}; 

void f_n(A val) 
{ 

} 

int main() 
{ 
    A a; 
    f_n(a); 
    return 0; 
} 
+4

コピーコンストラクタが代わりに呼び出されるためです。 - https://ideone.com/vmI74wを参照してください –

+0

コンストラクタが呼び出されていないことをどのように知っていますか? – juanchopanza

答えて

0

これは、このコンテキストでコピーコンストラクタが使用されているためです。それを確認するには、明示的な実装を追加:

A(A const&) 
{ 
    std::cout << "A const&\n"; 
} 

をあなたは1を定義していないが、コンパイラはあなたのためのコピーコンストラクタを合成します。しかし、生成されていない場合はcasesがあります。

関連する問題