网站首页 文章专栏 请教一个基础的关于右值引用和赋值的问题
请教一个基础的关于右值引用和赋值的问题
编辑时间:2019-09-20 09:41:09 作者:lijixiang2010 5条评论


    出自:purecpp.cn

    地址: www.purecpp.cn

    转载请注明出处!


来说两句吧
登录才能发表评论。
最新评论
  • qicosmos
    zephyr 2019-09-20 10:20:03
    在右值版的setData内部,data已经成为一个左值了。这部分的解释可以看看C++ primer或CPL关于完美转发的章节
  • qicosmos
    star 2019-09-20 10:24:10

    在函数调用时,参数的初始化也相当于建立了一个临时变量进行赋值,再用这个变量(参数)赋给你要的变量,所以此时在函数内,还需再使用移动语义赋值

  • qicosmos
    star 2019-09-20 10:25:27

    这个应该和完美转发没关系,转发的构成条件是需要模板的参数的。

    template<class T>

    void setdata(T&& a){}

  • qicosmos
    infancy 2019-09-23 20:21:54

    在右值版本的 setData 函数里, data 的类型(type)是右值引用类型, 但值类别(value category https://zh.cppreference.com/w/cpp/language/value_category)是左值(data 这个变量有名字, 你也可以取它的地址). 具体可以看看Modern Effecttive C++》的第五章, std::move 的实现, 想一下触发移动语义的条件.

  • qicosmos
    qicosmos 2019-09-24 08:53:50

    具名变量是左值,在void setData(std::vector<int>&& data)函数体中,data变成左值了需要move,如果需要用完美转发需要用universal reference

Absolutely

purecpp

一个很酷的modern c++开源社区


[社区开源项目列表,点击前往]


purecpp社区自2015年创办以来,以“Newer is Better”为理念,相信新技术可以改变世界,一直致力于现代C++研究、应用和技术创新,期望通过现代C++的技术创新来提高企业生产力和效率。


社区坚持只发表原创技术文章,已经累计发表了一千多篇原创C++技术文章;


组织了十几场的C++沙龙和C++大会,有力地促进了国内外C++开发者之间的技术交流;


开源了十几个现代C++项目,被近百家公司所使用,有力地推动了现代C++在企业中的应用。


期待更多的C++爱好者能参与到社区C++社区的建设中来,一起为现代C++开源项目添砖加瓦,一起完善C++基础设施和生态圈。


微信公众号:purecpp, 社区邮箱: purecpp@163.com


友情链接