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


    出自:purecpp

    地址: www.purecpp.org

    转载请注明出处!


来说两句吧
登录才能发表评论。
最新评论
  • 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++开源社区


这里有创新的idea,这里有最酷的modern c++代码,这里有很棒的modern c++开源项目。purecpp社区邮箱 purecpp@163.com
友情链接