c++ - 如果我传递一个右值,为什么在 std::move 中需要 static_cast 和 std::remove_reference?
问题描述
我试图了解更多的移动语义。现在这是一个可能的实现std::move
:
template <typename T>
typename std::remove_reference<T>::type&& move_(T&& obj)
{
return static_cast<typename std::remove_reference<T>::type&&>(obj);
}
但我对其进行了一些编辑以了解其工作原理:
template <typename T> typename std::remove_reference<T>::type&& move_(T&& obj) { if(std::is_lvalue_reference<decltype(obj)>::value) return static_cast<typename std::remove_reference<T>::type&&>(obj); return obj; // dones't work? // return (string&&)obj; // ok works } auto s = move_(std::string("Hi there!")); // passing an rvalue cause instantiating: `string&&(string&&){}`.
但是为什么我不能直接返回实例化后obj
的哪个呢?rvalue-reference type
解决方案
推荐阅读
- node.js - 为什么我的 HTTPS 选项在我的模块中失败?
- windows - 如何释放由 Windows 内核驱动程序中的 RtlQueryRegistryValues 分配的内存
- html - 无法在 Safari 中设置“全部:未设置”按钮的文本颜色
- regex - Solr 在文件名上应用正则表达式以搜索不区分大小写
- python - ElementTree 的 .write() 将带有 " 的字符串更改为 "
- laravel - Laravel 更新对象后没有返回正确的外键
- javascript - 从顶部和底部偏移固定 div
- javascript - VueJs 中的 Highmaps .... 将 State 传递给 mapOptions
- python - 使用python从不同的excel文件中添加数据
- stata - 检查变量是否在减少