超载操作员难题:返回 *此或临时变量
overloading operator puzzle: return *this, or temporary variable?
如果我超载 运算符,我可以使用此(假设类是className)
className operator+(className & c) { // version 1
className T;
...
return T;
}
我也可以使用
className operator+(className & c) { // version 2
....
return *this;
}
这是我的问题:
在版本2中,我返回推荐还是这样?为什么?
版本1和版本2,哪个更好?
我们经常写Overloading =,<<通过参考返回,使用链=/<<,但是为什么没有参考我们不能使用链=/<<,副本的真正含义是什么?
另一个问题是,我在有效的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的编译器错误(很好)。至于通过参考通过 - 对于大型对象,它应该首选 - 对于
int
或float
-如果您不在内部进行修改,请按值通过。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何超载分配运算符,该操作员总计两个实例变量
- 超载操作员难题:返回 *此或临时变量