我有此代码:
代码的输出是:
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?
起初,我也许是个举动。 然后我构建了一个,似乎编译器没有在使用它。
谁能告诉我发生了什么事?谢谢!
答案 0 :(得分:4)
我认为您正在使赋值运算符与复制构造函数混淆。
Int two = zero;
将导致复制构造函数被调用。
two = zero
或two = 1
将导致调用赋值运算符。
https://techdifferences.com/difference-between-copy-constructor-and-assignment-operator.html