以下代码
class Foo
{
public:
Foo() {a = 1;};
Foo(const Foo&) :a(2) {};
int a;
};
Foo foo()
{
Foo a;
return a;
}
int main(int argc, char* argv[])
{
Foo f = foo();
std::cout << f.a << std::endl;
return 0;
}
在Mac(使用g++
)和VS2013上的工作方式不同。在Mac上它打印1
,而在Windows上打印2
。那么,当foo()
按值返回类对象时,为什么程序不会调用复制构造函数?
答案 0 :(得分:0)
此行为是由于在MAC中省略了额外的副本。也许,在Visual Studio中启用优化会带来类似的结果。