在这段代码中:
#include <iostream>
using std::cout;
class Foo {
public:
Foo(): egg(0) {}
Foo(const Foo& other): egg(1) {}
int egg;
};
Foo bar() {
Foo baz;
baz.egg = 3;
return baz;
}
int main(void) {
Foo spam(bar());
cout << spam.egg;
return 0;
}
输出是3
,而我期望它是1
。
这意味着复制构造函数不会在该行中调用Foo spam(bar())
。
我想这是因为该bar
函数不返回引用。
你能解释一下初始化时到底发生了spam
什么吗?
如果这是一个愚蠢的问题,我提前道歉。
谢谢!