string a = "asdf";
cout<<&a[0];
cout<<a[0];
Run Code Online (Sandbox Code Playgroud)
为什么这两个输出不同?为什么&a[0]不是地址而是整个字符串?
AnT*_*AnT 13
&a[0]有类型char *.Stream运算符<<被故意重载为const char *参数,以输出从该地址开始的以零结尾的字符串(C样式字符串).例如,如果你这样做
const char *p = "Hello World!";
cout << p;
Run Code Online (Sandbox Code Playgroud)
这是重载的版本<<,确保"Hello World!"字符串本身被发送到输出,而不是指针值.
这正是使您的代码输出整个字符串的原因.由于C++ 11 std::string对象需要将其数据存储为以零结尾的字符串,&a[0]因此只是指向存储在a对象中的字符串开头的指针.