C++ move semantics: why copy assignment operator=(amp;) is called instead of move assignment operator=(amp;amp;)?(C++移动语义:为什么调用复制赋值操作符=(amp;)而不是移动赋值操作符=(amp;amp;)?)
                            本文介绍了C++移动语义:为什么调用复制赋值操作符=(&;)而不是移动赋值操作符=(&;&;)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
我有以下代码:
#include <cstdio>
#include <iostream>
using std::cout;
struct SomeType {
  SomeType() {}
  SomeType(const SomeType &&other) {
    cout << "SomeType(SomeType&&)
";
    *this = std::move(other);
  }
  void operator=(const SomeType &) {
    cout << "operator=(const SomeType&)
";
  }
  void operator=(SomeType &&) {
    cout << "operator=(SomeType&&)
";
  }
};
int main() {
  SomeType a;
  SomeType b(std::move(a));
  b = std::move(a);
  return 0;
}
我希望Move构造函数调用Move赋值操作符。以下是该程序的输出:
SomeType(SomeType&&)
operator=(const SomeType&)
operator=(SomeType&&)
如您所见,Move赋值运算符被成功调用,但在向Move构造函数内部*this赋值时调用不成功。为什么会发生这种情况,我能以某种方式修复它吗?
推荐答案
您的Move构造函数接受const SomeType&&而不是SomeType&&。不能调用采用const SomeType&&类型的值的SomeType&&(移动构造函数)的函数。
尝试创建一个接受SomeType&&的移动构造函数。
这篇关于C++移动语义:为什么调用复制赋值操作符=(&;)而不是移动赋值操作符=(&;&;)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:C++移动语义:为什么调用复制赋值操作符=(&;)而不是移动赋值操作符=(&;&;)?
				
        
 
            
        
             猜你喜欢
        
	     - DoEvents 等效于 C++? 2021-01-01
 - 如何提取 __VA_ARGS__? 2022-01-01
 - XML Schema 到 C++ 类 2022-01-01
 - 哪个更快:if (bool) 或 if(int)? 2022-01-01
 - OpenGL 对象的 RAII 包装器 2021-01-01
 - 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
 - 将 hdc 内容复制到位图 2022-09-04
 - 将函数的返回值分配给引用 C++? 2022-01-01
 - 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
 - GDB 不显示函数名 2022-01-01
 
						
						
						
						
						