1

如果我重载 + 运算符,我可以使用它(假设类是 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. 我们经常写重载=,<<返回引用,使用链=/<<,但是为什么没有引用我们不能使用链=/<<,复制的真正含义是什么?

  4. 另一个问题是,我在有效的 c++ 中看到:“尽可能使用 const”和“首选使用传递引用”,这是否意味着我编写类函数声明时尽可能使用 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?? 

打印(iArray,numInts);

4

1 回答 1

1

在版本 2 中,我返回参考还是就这样?为什么?

没关系,错了。

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

版本 1。第二个修改了this对象,所以写x + y会 modify x,这没有意义。

我们经常写重载=,<<通过引用返回,使用链=/<<,但是为什么没有引用我们不能使用链=/<<,复制的真正含义是什么?

没有引用,你只是返回一个副本——一个临时的——所以在这些情况下链接是没有意义的。编写链式=调用会将调用应用于不同的对象,而不是=被调用的对象。

另一个问题是,我在 <> 中看到:“use const as possible”和“prefer use pass by reference”,这是否意味着我编写类函数声明时尽可能使用 const 和引用?

并不真地。在有意义的时候使用它们。例如,你的存在是有意义的operator +const因为你不应该修改参数。这也会导致版本 2 的编译器错误(这很好)。

至于通过引用传递 - 它应该是大型对象的首选 - 对于一个intfloat- 如果您没有在内部修改它,则按值传递。

于 2012-10-20T06:34:15.257 回答