如果我重载+运算符,我可以使用它(假设类是className)
className operator+(className & c) { // version 1
className T;
...
return T;
}
我也可以使用
className operator+(className & c) { // version 2
....
return *this;
}
这是我的问题:
在版本2中,我返回引用或就是这样?为什么呢?
版本1和版本2,哪个更好?
我们经常写overloading =,<<通过引用返回,使用chain = /<< ,但为什么没有参考我们不能使用chain = /<&lt ;,什么是复制品真的意思?
另一个问题是,我在有效的c ++中看到:“尽可能使用const”和“更喜欢使用pass by reference”,这是否意味着我尽可能多地编写类函数声明使用const和reference?
如果我这样写:
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);
答案 0 :(得分:1)
在版本2中,我返回引用或就是这样?为什么呢?
没关系,这是错的。
版本1和版本2,哪一个更好?
版本1.第二个修改了this
对象,因此编写x + y
会修改x
,这没有用。
我们经常写overloading =,&lt;&lt;通过引用返回,使用chain = /&lt;&lt; ,但为什么没有引用我们不能使用chain = /&lt;&lt ;,什么是复制品真正的意思?
没有引用,你只是返回一个副本 - 一个临时 - 所以链接在那些情况下没有意义。编写一个链式=
会将调用应用于另一个对象,而不是调用=
的对象。
另一个问题是,我在&lt;&gt;:“尽可能使用const”和“更喜欢使用引用传递”,这是否意味着我尽可能多地编写类函数声明使用const和引用? / p>
不是真的。在有意义的时候使用它们。例如,operator +
为const
是有意义的,因为您不应修改参数。这也会给版本2带来编译错误(这很好)。
至于引用传递 - 对于大型对象 - 对于int
或float
- 如果你没有在里面修改它,则应该首选它。