|
|
1
7
只是一个简短的迟来的回答:如果所讨论的类是可移动的,那么移动是非常便宜的,并且如果可以,您总是从所有参数中移动,那么按值传递参数可能是一个选项:
如果tree是可移动的,并且传递了一个rvalue ref作为实际参数,那么函数的参数将在可能的情况下用tree的move构造函数初始化,否则用copy构造函数初始化。然后,函数可以以适当的方式(比如说,移动它们的内部结构)使用它的参数做任何它想做的事情。 与大量重载版本相比,它在传递rvalue引用参数时确实需要额外的移动,但我认为它通常更好。
|
|
2
4
首先,我不明白为什么operator+会修改参数(这不是一个典型的不可变二叉树实现),所以r值和l值引用之间没有区别。但是假设子树有一个指向父树的指针或者类似的东西。 从您展示的使用示例来看,似乎有一个从double到tree的隐式转换。在这种情况下,不需要使用“cast and forward”用例,编译器将找到用户定义的转换。 非移动重载不是最终生成一个新实例进入新树吗?如果是这样的话,我想你可以把剩下的四个箱子中的三个作为转发商。
当然,可以使用宏来帮助生成每个操作符的三个(或七个)转发版本。
编辑:重新显示未能使用隐式转换的运算符:
|
|
|
3
3
您应该将它们定义为成员函数,这样就不必将lvalue或rvalue作为主要单元进行重载(无论如何,这是不必要的),也就是说,
因为第一个的l或r值是不相关的。 此外,如果构造函数可用,编译器将自动为您构造。如果树是从double构造的,那么您可以在这里自动使用double,并且double将是一个适当的rvalue。这只是两种方法。 |
|
|
4
1
r值和l值引用之间没有区别,所以您不需要同时定义
如果运算符+按值获取树参数,则需要区分rvalues和lvalues
|
|
|
Noah Wilder · Swift中元组的操作符重载 8 年前 |
|
|
Salman · 指向具有数组索引运算符重载的类的指针 8 年前 |
|
|
Nom OnTheCookie · 使用向量重载C++输出 8 年前 |
|
|
J. Doe · C++重载:从友元函数切换到成员函数 8 年前 |
|
|
Ana · 使用操作符重载添加存储在vector中的类对象 8 年前 |
|
|
Matthew · 重载运算符|用于固定大小的阵列? 8 年前 |
|
|
Martin Žid · 重载运算符+=具有两个类 8 年前 |