全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

关于右值引用的一点理解

时间:2023-07-21 17:38

人气:

作者:admin

标签:   右值  一点  关于  用的 

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

>>> 背景

我们知道对于一些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;
    }
};
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信