2

下部に更新します。

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 )
}

そしてそれは働いています。明日、これから学んだことを回答として投稿します。

4

2 に答える 2