为什么这段代码无法编译?如果我将拷贝构造函数的访问级别更改为public,它将会正常并打印“Foo :: Foo(int)”。如果我写“Foo实例(0);”而不是“Foo实例= 0;”它也会好的。为什么?这种行为有什么意义?带有一个参数的私有拷贝构造函数和构造函数
#include <iostream>
struct Foo
{
public:
int i;
Foo(int i) : i(i) { std::cout << "Foo::Foo(int) \n"; }
private:
Foo(const Foo&) { std::cout << "Foo::Foo(const Foo&) \n"; }
};
int main()
{
Foo instance = 0;
}
但它会打印出 “富::美孚(INT)”。它是编译器优化吗? – FrozenHeart
@NikitaTrophimov是的,复制构造函数必须是可见的,但它不必被调用。 –
@NikitaTrophimov请参阅http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization –