类的 值类型的返回?求大神解答。谢谢。

大仙之道_贵在修行 2013-08-10 06:48:46
比如
class A
{
public:
A(int i):i(1){}
private:
int i;
};
A fun(){return A(1);}

这个函数到底返回的是什么东西。
是一个类的成员变量?还是一个临时的对象?

用A &a = fun()去接,这个明显是有问题的。
而用connst A &a = fun() 去接的时候没有问题。
也就是说它返回的是个常量。
难道说局部的对象返回的也是局部常量对象?
而常量对象又应该怎么解释?
怎么说明里面有哪些东西?

就像 int fun(){
int i = 1;
teturn i;}
实际返回的是1这个常量。

那么类返回的又是什么东西? 求老手们解释解释一下。
查了满多书,都没怎么讲这个东西,
还是它们讲了,我忽略了?
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
锋林 2013-08-10
  • 打赏
  • 举报
回复
引用 楼主 q339659207 的回复:
比如 class A { public: A(int i):i(1){} private: int i; }; A fun(){return A(1);} 这个函数到底返回的是什么东西。 是一个类的成员变量?还是一个临时的对象? 用A &a = fun()去接,这个明显是有问题的。 而用connst A &a = fun() 去接的时候没有问题。 也就是说它返回的是个常量。 楼主这个地方的理解有问题,fun()返回的是一个临时对象,而临时对象是一个右值(无法进行修改),所以只能使用指向const对象的引用。 至于临时对象为什么是一个右值,因为临时对象是没有指针或者引用或者变量名来标识的,所以对临时对象的修改是没有意义的,所以编译器拒绝这么做。 难道说局部的对象返回的也是局部常量对象? 而常量对象又应该怎么解释? 怎么说明里面有哪些东西? 就像 int fun(){ int i = 1; teturn i;} 实际返回的是1这个常量。 那么类返回的又是什么东西? 求老手们解释解释一下。 查了满多书,都没怎么讲这个东西, 还是它们讲了,我忽略了?
你怎么了熊吉 2013-08-10
  • 打赏
  • 举报
回复
2L正解,楼主问的是左值右值的问题
mujiok2003 2013-08-10
  • 打赏
  • 举报
回复
引用 4 楼 c19900911 的回复:
而当你用connst A &a = fun() ,这相当于给一个常量赋初值吗,当然ok
c19900911 2013-08-10
  • 打赏
  • 举报
回复
class A
{
public:
A(int i):i(1){}
private:
int i;
};
A fun(){return A(1);}

这个很好理解,fun() 函数返回的是一个临时的A对象,你用A &a = fun()去接当然不行,不能对一个临时值引用;而当你用connst A &a = fun() ,这相当于给一个常量赋初值吗,当然ok
大尾巴猫 2013-08-10
  • 打赏
  • 举报
回复
A fun();// 不管fun里面return的是啥,看fun前面的A ,那么最终fun()返回就是一个A的对象 A& fun(); //返回1个对象的引用
mujiok2003 2013-08-10
  • 打赏
  • 举报
回复
A fun(){return A(1);}
//表达式fun()的类型是A,是一个右值,只有const左值引用和右值引用可以绑定到它
A const& a = fun();
A&& b = fun();


你的疑虑是关于表达式的左值、右值属性,可以查查这方面的资料,最好自己领悟,有问题再来讨论。
  • 打赏
  • 举报
回复
返回一个类对象啊。 A f = fun();

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧