c++ - 了解 C++ 中的复制构造函数

标签 c++ operator-overloading copy-constructor

<分区>

我想了解 C++ 中复制构造函数的概念。我编写了以下程序:

#include<iostream>
using namespace std;

class Box{
    private:
        int d;
    public:
        Box(int i){
            cout << "Constructor" << endl;
            d = i;
        }
        Box(const Box &old){
            cout << "Copy Constructor" << endl;
            d = old.d;
        }
        int getd(){
            return d;
        }
        ~Box(){
            cout << "Destructor" << endl;
        }
        Box operator+(const Box& op){
            Box c(15);
            c.d = d + op.d;
            return c;
        }
};

int main(){
    Box a(10);
    Box b = a;
    Box c = a+b;
    cout << c.getd() << endl;
    return 0;
}

这个程序的输出如下:

Constructor
Copy Constructor
Constructor
20
Destructor
Destructor
Destructor

我不明白为什么没有在 main 函数的第三行调用复制构造函数。我认为应该调用复制构造函数,因为 operator+ 函数按值返回。

最佳答案

编译器正在优化此处的复制构造函数调用,因为标准明确允许“删除”该复制。真的,这样的文案有什么意义?

虽然你是绝对正确的,因为它是一个调用复制构造函数的机会,并且编译器可以做到这一点。事实上,标准确实要求在这里调用复制构造函数是有效的。

关于c++ - 了解 C++ 中的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488080/

相关文章:

c++ - 为什么类型知识随着 Boost::MPL 消失了?

c++ - 取消引用无效迭代器时强制抛出异常

c++ - 重载 C++ 赋值运算符

c++ - 关于C++函数对象的问题

c++ - 拷贝构造函数、析构函数和临时变量

c++ - 通过函数打开流

c++ - 套接字描述符在分配后关闭

c++ - 实现自己的 realloc

c++ - operator= 在 C++ 中重载

c++ - 不允许赋值和按值传递