这两个有什么区别?。。

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

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

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

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

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

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