3,更简单,++a,如果你引用了就是返回了a的地址,此时a已经加1,完全可以,但是如果是a++,你返还的是a加1之前的数值,换句话说此时a已经不是a,而是a+1,但是你如果引用,那么又是它的地址,而地址下是a+1,那么后++就和前++没有任何区别,这样做是没有意义的,能明白吗?
4,你去了当然有用,看你怎么用了,引用不是强迫你用,但是要看你想实现什么功能,举++的例子,你定义函数时必定起传地址,但是如果你返还不传引用而是传值,那么你想(++a)++,有意义吗?很显然没,应为括号里的++a是常量,这就和3+1一样
5,看了上面的东西,如果你理解了,这个问题就不是问题了,还是地址的问题
函数返回值是引用或者是指针类型的时候,返回值可以作为左值。例子:一、int *value=new intint *find(int a){*value=areturn value}void main(){cout<<(*find(100)=1000)<<endl等价于int *temp= find (100)*temp=1000cout<<*value<<endlsystem("pause")}运行结果如下: 二、int *value=new intint &find(int a){*value=areturn *value}void main(){cout<<(find(100)=1000)<<endl等价于int &temp=find(100)temp=1000cout<<*value<<endlsystem("pause")}运行结果如下: 但是如果返回值是按值返回的话:int value=new intint find(int a){value=areturn value}void main(){cout<<(find(100)=1000)<<endlcout<<value<<endlsystem("pause")}会出现编译错误:提示不能作为左值的错误! 综上所述:按值返回的返回值不能作为左值,因为对临时变量(接收返回值的临时变量,编译器自动生成)来说,C++规定这种返回类型的临时变量不能作为左值,因为操作这样的临时变量并不能对实际的变量产生影响。.....一个返回的是对象的引用,一个返回的是类的对象...看你怎么用了...好吧,... 返回类的对象的不用说了吧.和返回int型,float型什么的都一样. 主要是返回引用的.
返回引用时,没有复制返回对象,返回的是对象本身.
string &shorterString(string &s1,string &s2)
{
return s1.size()<s2.size()? s1:s2//返回
//的是s1,或者s2.是你传递引用类型形参.
//看了下面的两个函数你会发现,传递的形参里
//至少有一个是引用. .是用来被返回的.
}
不要返回局部对象的引用.
const string &manip(const string&s)
{
string ret=s
return ret// 错误,ret为局部对象.
}
引用返回左值.(这个是和返回类对象的一个很大的区别)
char &get_val(string &str,int ix)
{
return str[ix]
}
int main()
{
string s("a value")
cout<<s<<endl
get_val(s,0)='A' // 这里可以用来赋值的,
cout<<s<<endl
return 0
}
上面的例子内容,摘自<<C++ Primer>>