std :: string getting(char*)而不是(const char*)

use*_*914 2 c++ string pointers std

std::string.c_str()返回一个(const char*)值.我用Google搜索,发现我可以执行以下操作:

std::string myString = "Hello World";
char *buf = &myString[0];
Run Code Online (Sandbox Code Playgroud)

这怎么可能?&myString[0]是一个类型的对象std::string,那么它如何工作?

Mik*_*our 9

&myString[0] 是一个类型的对象 std::string

不,不是.myString[0]是对字符串的第一个字符的引用; &myString[0]是指向该角色的指针.运算符优先级是指它的意思,&(myString[0])而不是(&mystring)[0].

请注意,以这种方式访问​​,不能保证字符串将被零终止; 因此,如果您在期望零终止字符串的C样式函数中使用它,那么您将依赖于未定义的行为.

  • @TonyD:不,C++ 11不保证连续存储的字符后面会有零; 只是`str [size]`将给出一个零值的引用,并且`c_str()`的结果将被终止. (6认同)
  • 见21.4.7.1:`const charT*c_str()const noexcept; const charT*data()const noexcept; 返回:指针p,使得p + i ==&operator [](i)为[0,size()]中的每个i.` - so`&p [i]`引用NUL终止的字符串(根据需要) c_str()`).(您可能需要阅读http://stackoverflow.com/questions/6077189/will-stdstring-always-be-null-terminated-in-c11) (2认同)