首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-08-14 
类的 值类型的返回?求大神解答。谢谢。比如class A{public:A(int i):i(1){}private:int i}A fun(){return

类的 值类型的返回?求大神解答。谢谢。
比如
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这个常量。

那么类返回的又是什么东西? 求老手们解释解释一下。
查了满多书,都没怎么讲这个东西,
还是它们讲了,我忽略了?

[解决办法]
2L正解,楼主问的是左值右值的问题
------解决方案--------------------


引用:
比如
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这个常量。

那么类返回的又是什么东西? 求老手们解释解释一下。
查了满多书,都没怎么讲这个东西,
还是它们讲了,我忽略了?

热点排行