>>> 背景
我们知道对于一些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
发布评论请先 登录
相关推荐
关于光立方的驱动的一点看法
本帖最后由 ntmusic 于 2013-9-7 11:10 编辑
首先,我没有自己做过光立方,所以在这里有点班门弄虎了但是,虽然没有做过实物,但关于光立方的驱动我还是有一点点研究的一个好的光
发表于 09-07 09:42
关于看门狗的一点经验程序
关于看门狗的一点经验程序跑飞时可以通过看门狗复位,尝试恢复系统的工作,本文对stm32的Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图
发表于 07-30 06:37
一点接地,什么是一点接地,一点接地应注意的问题
一点接地,什么是一点接地
一点接地的形式如下图所示,图中将各级内部的接地元件,即本级电路的发射极,基极和集电极的所有接
发表于 09-30 11:35
•2.7w次阅读
路灯蓝光危害你造吗?专家建议“冷一点,暗一点”
美国医学会(AMA)最近接受了一项关于街道照明的正式政策声明:冷一点、暗一点。其在声明中称,对于晚上户外照明,尤其是街道照明,其色温不应超过3000开尔文(K)。较高的色温光照越白,同
发表于 11-18 08:59
•3363次阅读
一点理解之 CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
一点理解之 CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
发表于 11-30 19:51
•10次下载
评论