为什么错误C2248当拷贝构造函数是私有的在下面的代码?(Why the error C2248 w

2019-10-17 23:56发布

此代码发出error C2248: 'A::A' : cannot access private member declared in class 'A'在VS2010,虽然RVO不需要拷贝构造函数。 为了证明这一点,只是把公开声明A(const A&); 下面,代码将执行没有问题,即使没有对拷贝构造函数的定义。

class A
{
    int i;
    A(const A&);

    public:
    A() : i(1) {}

};

A f() { return A(); }

int main()
{
    A a;
    a = f();
}

Answer 1:

只是因为你的程序没有结束实际调用拷贝构造函数并不意味着它允许忽略它。 但声明没有使连接在编译过程中可用,但不是函数定义,它只是“招数”的编译器,所以一旦调用它优化掉了,一切“的作品。” 但RVO是性能优化,你的程序必须写成这样,这是没有RVO存在正确的。



文章来源: Why the error C2248 when the copy constructor is private in the code below?