2 qq 38025365 qq_38025365 于 2017.09.01 12:10 提问

这两个有什么区别?。。

string& const getname() { return name; } 和string getname() const{return name;}

5个回答

a29562268
a29562268   2017.09.01 13:03
已采纳

第一个返回的是一个string的别名 (通过二级地址拷贝到接收的字符串)并且函数地址是固定的(在常量区分配),第二个返回的是一个字符串(这块字符的首地址)这块内存分配在常量区。

yuan_mu
yuan_mu   2017.09.01 13:19

一直没有搞懂的问题 原来以为在栈里 函数调用结束后 就释放 所以不敢用 原来是放在了 常量区 学习

zhang_guyuan
zhang_guyuan   2017.09.04 15:56

第一个是引用,返回的时候不需要值拷贝;第二个是需要值拷贝的,即在返回的时候编译器需要创建一个对象作为中间变量。因此第一个的效率更高

CH1314QM
CH1314QM   2017.09.05 10:20

你这个是在类里面的成员函数拿出来的吧!前者返回值是string& const ,代表返回的是指向string类型的引用,且这个引用是const的,不能改变引用的指向,这个完全可以替代成string&,因为引用本身初始化后就是不能改变其指向的,这样的返回值不存临时string对象的构造,析构、拷贝等等效率比较高。第二个是const成员函数,其只能对用于const对象,返回值为string类型,存在临时string对象的构造,析构、拷贝,效率低!

qq_22203741
qq_22203741   2017.09.05 15:59

第一个是引用return的时候不需要拷贝,而第二个return的时候需要拷贝,至于const都是起安全保护作用的防止数据被更改

Csdn user default icon
上传中...
上传图片
插入图片