#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”调用第二个构造函数。我认为它只会调用第一个构造函数,不带参数,并显示 0。
也许我遗漏了一些明显的东西......
最佳答案
第二个构造函数是复制构造函数,当您按值将参数传递给函数时,它会被复制,从而调用复制构造函数。
第一个构造函数(默认构造函数)仅在从头开始创建对象时调用,并且不带任何参数。
关于c++ - 奇怪的构造函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37900187/