关于函数返回类类型可否作为左值

#include<iostream>
#include<ostream>
#include<string>
using namespace std;

class A
{
friend ostream& operator<<(ostream& out, const A & a)
{
out<<a.str;
return out;
}

public:
string str;
A(string s):str(s){}
A& operator=(const A&);
A& operator+=(const A&a)
{
this->str+=a.str;
return *this;
}

};

A operator +(const A& lhs,const A& rhs)
{
A temp(lhs.str);
temp+=rhs;
return temp;
}

A& A::operator =(const A&a)
{
this->str=a.str;
return *this;
}

void main()
{
A a("hello_");
A aa("world");
cout<<a+aa<<endl;
}

 

以上是一个类A,其只有一个数据成员为std::string类型的str,该类重载了运算符+ += = 以及<<  其中+的返回值为A型的值,现在看下主函数定义了两个A的实例a和aa,a+aa返回一个A的值,并被输出。程序没什么大问题,输出结果是:hello_world。

           随后突发奇想,把主函数改成:

 void main()

{
A a("hello_");
A aa("world");
a+aa=a;
}   结果编译竟然通过,也就是说返回的A值竟然可以被赋值,那么到底算不算左值呢?

 

    然后就做了个实验:

 void main()

{
int i=7;

&(i++);
} 这时报错说&需要一个左值,(i++返回的是一个值而不是引用),于是我试了一下&(a+aa)结果编译通过,也就是说a+aa的返回值是一个左值。

    可是为什么呢?明明返回的就只是一个A型的值,却能够当左值用?

    下面是main方法  大家看看运行后会输出啥?再跟之前的第一个main方法对比下

void main()
{
A a("hello_");
A aa("world");
A* pa = &(a+aa);
cout<<(*pa)<<endl;
}   这里的输出是:                                

   

谁能解释一下为什么输出是空呢??           好困惑。。

转载于:https://www.cnblogs.com/cs-jin-note/archive/2012/06/17/2552867.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值