我希望以下代码能两次打印copy called
。一次用于创建f2
,一次用于创建f3
。但是由于某种原因,它只能打印一次。为什么是这样?是否正在进行某种类型的优化?如果是这样,有没有办法在没有编译器标志的情况下将其禁用?
struct Foo
{
Foo() = default;
Foo(Foo const&) { std::cout << "copy called" << std::endl; }
};
Foo test()
{
Foo f1;
Foo f2(f1);
return f2;
}
int main()
{
Foo f3(test());
}