现在,C ++复制执行操作。不清楚为什么

时间:2018-09-24 19:39:07

标签: c++ operator-overloading

我有此代码:

代码的输出是:

cons intcons op + intcons; copycons op + intcons op + =; get_val 3

class declaration::

#include<iostream>
using namespace std;

class Int {
public:
// constructors
Int() : val_(0) { cout << "cons "; }
Int(int n) { val_ = n; cout << "intcons "; }
Int(const Int &v) : val_(v.val_) { cout << "copycons "; }
Int(Int &&v_) { val_ = v_.val_; cout << "mov ctor " ; };

// operations
int get_val() {
    cout << "get_val "; return val_;
}
Int operator+(const Int &v) {
    cout << "op+ ";
    return Int(val_ + v.val_);
}
Int & operator=(const Int &v) {
    cout << "op= ";
    if (this != &v) { 
        val_ = v.val_; 
    }
    return *this;
}
Int & operator+=(const Int &v) {
    cout << "op+= ";
    val_ += v.val_;
    return *this;
}
private:
int val_; // value stored in this Int

};

这是主要的:

int main(){
Int zero;
Int one = zero + 1;
cout << ";\n";
Int two = zero;
two += one + one;
cout << ";\n";
cout << two.get_val() + 1; cout << endl;
return 0;
}

我正在查看代码输出,我可以同意发生的每个操作以及每个输出。但我根本不清楚一件事。我想知道,为什么在输出的第一行中没有使用复制c'tor?

起初,我也许是个举动。 然后我构建了一个,似乎编译器没有在使用它。

谁能告诉我发生了什么事?谢谢!

1 个答案:

答案 0 :(得分:4)

我认为您正在使赋值运算符与复制构造函数混淆。 Int two = zero;将导致复制构造函数被调用。

two = zerotwo = 1将导致调用赋值运算符。

https://techdifferences.com/difference-between-copy-constructor-and-assignment-operator.html