0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于右值引用的一点理解

冬至子 来源:鸣鸣锣的小屋 作者:Maxwell Luo 2023-07-21 17:38 次阅读

>>> 背景

我们知道对于一些C++内建类型来说,ostream类的操作符<<都提供了输出到标准输出流的方法,只需要像下面这样就能输出到终端窗口了。

int num = 1;
string str = "number";
cout < < str < < " is " < < num;

但是对于自建类的话,就需要其他的手段输出想要的内容了。通过重载<<操作符并声明为ostream类的友元是常见的方法。下面就是一种常见的书写范式。

class Persion
{
private:
    string name;
    int age;


public:
    Persion() = delete;
    Persion(string a_name, int a_age) : 
        name(a_name), age(a_age) {}
    friend ostream& operator< < (ostream& os, Persion& per)
    {
        os < < "(lvalue)A persion object with name: " < < per.name < < ", age: " < < per.age;
        return os;
    }
};

>>> 问题

我在使用下面这串代码对重载的效果进行测试的时候,编译器报出了问题,它告诉把右值赋给了要求左值引用的参数

cout < < Persion("maxwell", 18) < < endl;

图片

>>> 解决方案

C++11之后,使用&来声明左值引用,使用&&来声明右值引用。在上述测试语句中,Persion( "maxwell" , 18 )是一个临时变量,属于右值。因此,如果想要上述测试语句通过,还需要对类补充一个右值引用的成员函数。如下所示。

class Persion
{
    // ...
    friend ostream& operator< < (ostream& os, Persion&& per)
    {
        os < < "(rvalue)A persion object with name: " < < per.name < < ", age: " < < per.age;
        return os;
    }
};
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++语言
    +关注

    关注

    0

    文章

    147

    浏览量

    6992
收藏 人收藏

    评论

    相关推荐

    请问各位大侠关于开关电源哪些书讲的比较容易理解一点啊,谢谢

    请问各位大侠关于开关电源哪些书讲的比较容易理解一点啊,谢谢
    发表于 06-17 20:46

    STM32的一点资料

    给新手的一点关于STM32的学习资料!
    发表于 08-15 10:48

    关于通信原理的一点总结

    关于通信原理的一点总结
    发表于 08-20 10:00

    有没有什么好的方法来理解引用句柄

    求教各位,对于各种引用句柄,如VI引用句柄,控件引用句柄等有没有什么好理解一点的方法,用在什么地方,看书上感觉
    发表于 06-03 13:29

    关于光立方的驱动的一点看法

    本帖最后由 ntmusic 于 2013-9-7 11:10 编辑 首先,我没有自己做过光立方,所以在这里有点班门弄虎了但是,虽然没有做过实物,但关于光立方的驱动我还是有一点点研究的个好的光
    发表于 09-07 09:42

    关于看门狗的一点经验程序

    关于看门狗的一点经验程序跑飞时可以通过看门狗复位,尝试恢复系统的工作,本文对stm32的Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图
    发表于 07-30 06:37

    一点开环与闭环概念的理解

    一点概念的理解
    发表于 11-12 06:42

    一点接地,什么是一点接地,一点接地应注意的问题

    一点接地,什么是一点接地 一点接地的形式如下图所示,图中将各级内部的接地元件,即本级电路的发射极,基极和集电极的所有接
    发表于 09-30 11:35 2.7w次阅读
    <b class='flag-5'>一点</b>接地,什么是<b class='flag-5'>一点</b>接地,<b class='flag-5'>一点</b>接地应注意的问题

    关于画高频PCB板的一点心得

    关于画高频PCB板的一点心得,感兴趣的小伙伴们可以看看。
    发表于 07-26 16:29 0次下载

    路灯蓝光危害你造吗?专家建议“冷一点,暗一点

    美国医学会(AMA)最近接受了关于街道照明的正式政策声明:冷一点、暗一点。其在声明中称,对于晚上户外照明,尤其是街道照明,其色温不应超过3000开尔文(K)。较高的色温光照越白,同
    发表于 11-18 08:59 3363次阅读

    C++基础语法中的引用、封装和多态

    引用 引用就是必须绑定到
    的头像 发表于 09-12 09:58 1315次阅读

    一点理解之 CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库

    一点理解之 CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
    发表于 11-30 19:51 10次下载
    <b class='flag-5'>一点</b><b class='flag-5'>理解</b>之 CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库

    关于连接量子比特的一点:量子计算

    关于连接量子比特的一点:量子计算
    的头像 发表于 01-04 11:17 1035次阅读
    <b class='flag-5'>关于</b>连接量子比特的<b class='flag-5'>一点</b>:量子计算

    什么是左呢?左右和左右引用

    什么是左呢?种极不严谨的理解为:在赋值的时候,能够被放到等号左边的为左
    的头像 发表于 07-18 15:39 3187次阅读
    什么是左<b class='flag-5'>值</b>、<b class='flag-5'>右</b><b class='flag-5'>值</b>呢?左右<b class='flag-5'>值</b>和左右<b class='flag-5'>值</b><b class='flag-5'>引用</b>

    大功率贴片电感的电感偏大一点可以用吗

    电子发烧友网站提供《大功率贴片电感的电感偏大一点可以用吗.docx》资料免费下载
    发表于 09-20 11:33 0次下载