@CrazyHenry
2018-01-31T16:17:47.000000Z
字数 857
阅读 1199
ccccC++Primer
- Author:李英民 | Henry
- E-mail: li
_
yingmin@
outlookdot
com- 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