返回自定义类型的函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011-02-12 18:39C++类中函数成员函数返回值类型 怎么理解 都是浮云啊。
a7025146|分类:C/C++|浏览1105次T :返回类类型
T f();
const T f();
T& f();
const T& f();
T f(); 返回一般的类类型,返回的类类型不能作为左值,但返回的类类型可以直接调用成员函数来修改,如function().set_Value(); 返回类类型调用复制构造函数。
const T f(); 此种类型与上述第一种相同,唯一不同的是返回的类类型不能调用成员函数来修改,因为有const 限定符。
T& f(); 返回类的引用可以作为左值,并且返回的类类型引用可以直接调用成员函数来修改,返回的类类型不会调用复制构造函数。
const T& f(); 不能作为左值,不能调用成员函数修改,不会调用复制构造函数。
问题:
T f();返回类类型调用复制构造函数怎么理解还有如果类中没有复制构造函呢怎么理解
T& f(); 返回类的引用可以作为左值,怎么做左值?并且返回的类类型引用可以直接调用成员函数来修改,怎么调用修改?返回的类类型不会调用复制构造函数。
哎理解不过来这两个类类型函数返回值到底怎么理解?谢谢各位!
精彩回答2011-02-12 21:43第一个问题的答复:T 是用户自定义的类型,因为是直接返回的值,而不是引用,所以编译器需要复制一份给调用的地方使用,因此就需要调用T 的拷贝构造函数,就是你说的复制构造函数。如果类中没有显示定义,那么编译器会使用其默认生产的拷贝构造函数,这个时候可能存在未定义行为,主要视T 的内部成员来定,如果有其他自定义类型,很可能默认的拷贝构造是不完整的。
第二个问题的答复:a=b ,a 就是左值,b 就是右值。1=100,1是一个具体的数字,不能作为左值。同样T 是一个具体的变量,因此不能作为左值。而T 的引用,即T&,可以更改其引用的对象,比如可以代表A ,同样可以代表B ,因此是可以作为左值的。
其实一个是返回值,一个是返回引用。和函数的传递值和传递引用的概念是一样的。