超载操作员难题:返回 *此或临时变量

overloading operator puzzle: return *this, or temporary variable?

本文关键字:变量 操作员 难题 返回 超载      更新时间:2023-10-16

如果我超载 运算符,我可以使用此(假设类是className)

 className operator+(className & c) { // version 1
    className T;
    ...
    return T;
}

我也可以使用

className operator+(className & c) {   // version 2
    ....
    return *this;
}

这是我的问题:

  1. 在版本2中,我返回推荐还是这样?为什么?

  2. 版本1和版本2,哪个更好?

  3. 我们经常写Overloading =,<<通过参考返回,使用链=/<<,但是为什么没有参考我们不能使用链=/<<,副本的真正含义是什么?

  4. 另一个问题是,我在有效的C 中看到了:"尽可能使用const"answers"首选通过参考使用",这意味着我编写了类函数声明声明使用const和参考?

如果我这样写:

template<typename T> 
void Print(const T data[], const int & arraySize)  // i use the const, and &
{ 
   for(inti = 0; i < arraySize; ++i) 
   cout << data[i] << " "; 
   cout << endl; 
}

当我在main()函数中写入时,我写:

int iArray[14] = {7,3,32,2,55,34,6,13,29,22,11,9,1,5}; 
int numInts = 14;    // do I need to specify numInts is const?? 

print(iarray,numints);

在版本2中,我返回推荐或那样?为什么?

没关系,这是错误的。

版本1和版本2,哪个更好?

版本1.第二个修改this对象,因此编写x + y会修改x,这是没有意义的。

我们经常写Overloading =,&lt;&lt;通过参考返回,使用链=/&lt;&lt;,但是为什么没有参考,我们不能使用链=/&lt;&lt;,副本的真正含义是什么?

没有参考,您只是在返回副本 - 一个温度 - 因此在这些情况下链接是没有意义的。编写链式=会将呼叫应用于其他对象,而不是调用一个=

另一个问题是,我在&lt;>中看到:"尽可能使用const"answers"优先使用参考",这意味着我写了类函数声明声明使用const和参考?/blockquote>

不是真的。在有意义的情况下使用它们。例如,您的operator +const是有意义的,因为您不应该修改参数。这也将给出版本2的编译器错误(很好)。

至于通过参考通过 - 对于大型对象,它应该首选 - 对于intfloat-如果您不在内部进行修改,请按值通过。