尽管RVO不需要复制构造函数,但此代码在VS2010中发出error C2248: 'A::A' : cannot access private member declared in class 'A'
。为了证明这一点,只需将下面的声明A(const A&);
公开,即使没有copy构造函数的定义,代码也可以毫无问题地执行。
class A
{
int i;
A(const A&);
public:
A() : i(1) {}
};
A f() { return A(); }
int main()
{
A a;
a = f();
}
最佳答案
仅仅因为您的程序实际上并未最终调用复制构造函数,并不意味着可以省略它。声明但未定义它只是通过使函数在编译期间(而不是在链接期间)可用来“欺骗”编译器,因此,一旦对它的调用被优化,一切都会“起作用”。但是RVO是对性能的优化,您的程序必须编写成在没有RVO的情况下正确无误。
关于c++ - 当下面的代码中复制构造函数为私有(private)时,为什么会出现错误C2248?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15972478/