读书人

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

发布时间: 2013-08-14 14:27:55 作者: rapoo

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

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

读书人网 >C++

热点推荐