0

RVO はコピー コンストラクターを必要としませんが、このコードはerror C2248: 'A::A' : cannot access private member declared in class 'A'VS2010 で生成されます。これを証明するには、A(const A&);以下の宣言を public にするだけで、コピー コンストラクターの定義がなくても、コードは問題なく実行されます。

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

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

};

A f() { return A(); }

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

1 に答える 1