返回中使用了什么构造函数或运算符(C++)

cib*_*en1 4 c++ return copy-constructor assignment-operator

我运行此代码来试验复制构造函数和赋值运算符

class AClass {

    private:
        int a;

    public:
        AClass (int a_) : a(a_) {  
            cout << " constructor AClass(int) " << a << endl;
        }

        AClass(const AClass & x) : a(x.a) { 
            cout << " copy constructor AClass(const AClass &) " << a << endl;
        }

        AClass & operator=(const AClass & x) { 
                a = x.a;
                cout << " AClass& operator=(const AClass &) " << a - endl;
                return *this;
        }
};

AClass g () {
    AClass x(8);
    return x;
}

int main () {

    cout << " before AClass b = g() " << endl;
    AClass b = g();
    cout << " after" << endl;

    cout << " before AClass c(g()) " << endl;
    AClass c  (g());
    cout << " after" << endl;
}
Run Code Online (Sandbox Code Playgroud)

并发现return x; 为什么没有出现任何消​​息 不应该调用复制构造函数或运算符吗?

这是输出:

 before AClass b = g() 
 constructor AClass(int) 8
 after

 before AClass c(g()) 
 constructor AClass(int) 8
 after

Fre*_*son 6

在这种情况下,允许编译器忽略复制.这称为返回值优化.