#include <iostream>
using namespace std;
class Foo
{
public:
Foo()
{
cout << 0;
}
Foo(Foo &f)
{
cout << 1;
}
};
void someFunction(Foo f) {};
int main()
{
Foo f1; //displays 0 (as expected)
Foo f2(f1); //displays 1 (as expected)
someFunction(f1); //displays 1 (why?)
someFunction(f2); //displays 1 (why?)
return 0;
}
関数「someFunctionは」第二のコンストラクタを呼び出して、なぜ私は理解していません。私は2番目のコンストラクタはコピーコンストラクタです奇妙なコンストラクタ行動
'someFunction'がかかる
はちょうどそうのように、のFooオブジェクトへの参照パラメータを持つ関数を宣言し、それを避けるために、パラメータのコピー。 'Foo(Foo&f)'はコピーコンストラクタとして使用できます。 'Foo(Foo const&f)'はより良いコピーコンストラクタになります。 –