鱼C论坛

 找回密码
 立即注册
查看: 4547|回复: 6

为什么返回的引用变量给了结构体

[复制链接]
发表于 2013-7-20 13:34:23 | 显示全部楼层 |阅读模式
10鱼币
#include <iostream>
using namespace std;
struct sysop
{
char name[26];
char quote[64];
int uesd;
};

const sysop & use(sysop & sysopref);
int main()
{
sysop looper =
{
  "Rick \"Fortran\" Looper",
  "I'm a goto kind of guy.",
  0
};

cout << "&looper = "<< &looper << endl;
sysop copycat;
copycat = use(looper);                                // 为什么use返回的引用变量给了结构体copycat ?
return 0;
}


const sysop & use(sysop & sysopref)
{
cout << sysopref.name << " says: \n";
cout << sysopref.quote << endl;
sysopref.uesd++;

return sysopref;
}



有人知道吗?为什么 use() 返回的引用赋值给结构体,而不是给引用型变量。
比如 再定义:   sysop & coy = use(looper);
                         这样不行。

搞糊涂了,求帮助~~


最佳答案

查看完整内容

use函数中的参数sysopref是结构looper的引用,是它的另一个名字,这使得use函数可以修改结构looper,返回引用所指的还是结构looper(已被函数修改),返回既然是结构当然就可以赋给同类型的结构copycat了,如果再赋给引用变量,那就是引用的引用了(结构looper又多了一个名字),只不过use函数的返回引用是加了const的,所以不能赋给没加const的结构copycat了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-20 13:34:24 | 显示全部楼层
本帖最后由 只爱你一人 于 2013-7-20 15:15 编辑

use函数中的参数sysopref是结构looper的引用,是它的另一个名字,这使得use函数可以修改结构looper,返回引用所指的还是结构looper(已被函数修改),返回既然是结构当然就可以赋给同类型的结构copycat了,如果再赋给引用变量,那就是引用的引用了(结构looper又多了一个名字),只不过use函数的返回引用是加了const的,所以不能赋给没加const的结构copycat了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-20 14:30:54 | 显示全部楼层
把const sysop & use(sysop & sysopref)改为
sysop & use(sysop & sysopref);
原先传回的const 引用只能给const引用,不能给非const引用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-20 16:28:29 | 显示全部楼层
3楼已经说的很详细了,请参考! 为什么不能赋值给另一个引用 是因为你的返回值是const的。不能把const类型的指针或者引用赋值给非const的。

因为const类型的指针或者引用表示不可改变,而没有const限定的话表示你可以随意更改,这样不安全。所以不能这么赋值。但是反过来是可以的。因为原来可以随意更改的东西变成不可更改的东西是安全的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-20 16:32:47 | 显示全部楼层

谢谢,明白了。谢谢你的用心。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-20 16:33:29 | 显示全部楼层
编程难 发表于 2013-7-20 16:28
3楼已经说的很详细了,请参考! 为什么不能赋值给另一个引用 是因为你的返回值是const的。不能把const类型的 ...

谢谢你的回答,我明白了。恍然大悟啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-20 16:34:14 | 显示全部楼层
仰望天上的光 发表于 2013-7-20 14:30
把const sysop & use(sysop & sysopref)改为
sysop & use(sysop & sysopref);
原先传回的const 引用只能 ...

谢谢版主。支持鱼c
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-18 20:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表