更新在底部。
我想让 void tree::operator = ( tree t ) 使用右值。(在这种情况下,一般来说,由于效率,我想以不同的方式处理它们)
我已经对其进行了编码,使用 std::move 来确保它将使用右值,但编译器说它不知道选择哪个运算符。他不应该使用右值选择那个吗?
代码:
void tree::operator = ( tree&& t )
{
std::swap(this->pntr, t.pntr);
}
void tree::operator = ( tree t )
{
*this = std::move(t);
}
编译器错误:
tree.cpp:23:9: error: use of overloaded operator '=' is ambiguous (with operand types 'tree' and 'typename remove_reference<tree &>::type' (aka 'tree'))
*this = std::move(t);
~~~~~ ^ ~~~~~~~~~~~~
tree.cpp:16:12: note: candidate function
void tree::operator = ( tree&& t )
^
tree.cpp:21:12: note: candidate function
void tree::operator = ( tree t )
^
1 error generated.
我正在使用 clang-503.0.38。(但使用 gcc 4.8 是同样的错误)
更新
好的,现在我有:
tree& tree::operator = ( tree&& t )
{
std::swap(this->pntr, t.pntr);
}
tree& tree::operator = ( const tree & t )
{
*this = tree(t); // tree:tree( const tree& t )
}
它正在工作。明天我将发布我从中学到的东西作为答案。