网站首页 文章专栏 请教一个基础的关于右值引用和赋值的问题
在函数调用时,参数的初始化也相当于建立了一个临时变量进行赋值,再用这个变量(参数)赋给你要的变量,所以此时在函数内,还需再使用移动语义赋值
这个应该和完美转发没关系,转发的构成条件是需要模板的参数的。
如
template<class T>
void setdata(T&& a){}
在右值版本的 setData 函数里, data 的类型(type)是右值引用类型, 但值类别(value category https://zh.cppreference.com/w/cpp/language/value_category)是左值(data 这个变量有名字, 你也可以取它的地址). 具体可以看看《Modern Effecttive C++》的第五章, std::move 的实现, 想一下触发移动语义的条件.
具名变量是左值,在void setData(std::vector<int>&& data)函数体中,data变成左值了需要move,如果需要用完美转发需要用universal reference
purecpp
一个很酷的modern c++开源社区
purecpp社区自2015年创办以来,以“Newer is Better”为理念,相信新技术可以改变世界,一直致力于现代C++研究、应用和技术创新,期望通过现代C++的技术创新来提高企业生产力和效率。
社区坚持只发表原创技术文章,已经累计发表了一千多篇原创C++技术文章;
组织了十几场的C++沙龙和C++大会,有力地促进了国内外C++开发者之间的技术交流;
开源了十几个现代C++项目,被近百家公司所使用,有力地推动了现代C++在企业中的应用。
期待更多的C++爱好者能参与到社区C++社区的建设中来,一起为现代C++开源项目添砖加瓦,一起完善C++基础设施和生态圈。
微信公众号:purecpp, 社区邮箱: purecpp@163.com