@CrazyHenry
2018-01-31T08:17:47.000000Z
字数 857
阅读 1419
ccccC++Primer
- Author:李英民 | Henry
- E-mail: li
_yingmin@outlookdotcom- Home: https://liyingmin.wixsite.com/henry
快速了解我: About Me
转载请保留上述引用内容,谢谢配合!
const string &s = "Hello";
这段代码执行后,对象s和字面量"Hello"的字符是同一段内存吗?
为什么引出这个问题?因为曾经有这样的情景:
const int i = 10;const int &ri = i;cout<<&i<<endl;cout<<&ri<<endl;
发现i和ri所指的同一段内存!
但是,string类型就不同了!因为string和char []本就不是同一种类型,这个时候会生成一个临时量,然后再绑定s。
const char *p = "Hello";const string &s = p;cout<<&p[0]<<endl;cout<<&s[0]<<endl;cout<<s<<endl;cout<<static_cast<const void*>(p)<<endl;cout<<&s<<endl;cout<<static_cast<const void*>(&s[0])<<endl;

就类似曾经的这段代码:
double d = 2.2;const int &ri = d;
等价于
double d = 2.2;const int i = d;const int &ri = i;//这时的i和d并不是同一段内存//ri所指的内存只能通过ri获取,并且确实具有const属性,不是ri自相情愿
自相情愿
int i = 10;const int &ri = i;cout<<&i<<endl;cout<<&ri<<endl;//ri与i指向同一片内存//但是ri是一厢情愿,i可以通过其他途径修改i = 80;//ri = 90;//error,不能通过ri修改cout<<ri;//显示80
