我正在使用带有
这似乎是省略复制构造函数的简单机会,因为在
-O2
的gcc。这似乎是省略复制构造函数的简单机会,因为在
bar
的副本中访问foo
字段的值没有任何副作用;但是复制构造函数确实被调用了,因为我得到了输出meep meep!
。#include <iostream>
struct foo {
foo(): a(5) { }
foo(const foo& f): a(f.a) { std::cout << "meep meep!\n"; }
int a;
};
struct bar {
foo F() const { return f; }
foo f;
};
int main()
{
bar b;
int a = b.F().a;
return 0;
}