C++识别不同的运算符=
C++ Identify different of operator =
MyClass& operator=(const MyClass& other)
{
//Implement
return *this;
}
MyClass operator=(const MyClass& other)
{
//Implement
return *this;
}
void operator=(const MyClass& other)
{
//Implement
}
当我测试这些方法时,结果是一样的。在几乎本书中,我看到第一个方法(MyClass&(比第二个方法使用得更多。他们之间有什么不同?哪种方法真正正确且快速?一个方法返回地址,第二个返回值。
当我测试这些方法时,结果是一样的。
这取决于你如何测试你的课程,即:
void foo (MyClass& a);
MyClass a1;
MyClass a2;
foo(a1 = a2);
在第二个运算符实现(返回MyClass
(的情况下,上面的代码(在foo
内部(不会修改a1
实例,而是一个临时值。
在几乎本书中,我看到第一个方法(MyClass&(的使用次数超过第二种方法。
这是正确的,在分配运算符中返回对*this
的引用更正确
他们之间有什么不同?哪种方法真正正确且快速?
第一个版本是更快和正确的,因为它不做任何对象的复制,也更合适,因为这是原始类型的行为方式,即:
int n = 0;
int k = 10;
(n = k) = 1;
std::cout << n;
在输出中,您将得到1,因为(n = k)
返回对n
的引用。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 模板类无法识别友元运算符
- 在我的类中无法识别用户定义的文本运算符
- 类的unique_copy无法识别运算符<
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- 在调用运算符重载时识别调用上下文/用法C++
- 无法识别被覆盖<<运算符
- 运算符 + 无法识别类型
- 为什么我的重载乘法运算符没有被识别
- C++无法识别3points运算符
- 如何使用dynamic_cast运算符识别失败的强制转换
- <<未找到运算符和无法识别的转义序列
- 有人可以指出为什么我的变量无法识别以及为什么我不能重载我的运算符吗
- 包含标头时,'operator Apple'不是可识别的运算符或类型
- C++识别不同的运算符=
- 运算符可以识别右值吗
- 添加新运算符或类型时 #define 不是可识别的运算符或类型