std :: string总是以C ++ 11为空终止?

Herb Sutter在他的网站2008年的一篇文章中指出:

有一个积极的build议,在C ++ 0x中进一步收紧,并要求空终止,并可能禁止写入时复制的实现,为并发相关的原因。 以下是论文: http : //www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html 。 我认为本文中的一个或两个提案很可能会被采纳,但是我们将在下一次或两次会议上看到。

我知道C ++ 11现在可以保证std :: string的内容是连续存储的,但是他们是否在最后的草稿中采用了上面的内容?

现在是否可以安全地使用像&str[0]这样的东西?

是。 根据C ++ 0x FDIS 21.4.7.1/1,必须返回std::basic_string::c_str()

一个指针p ,使得p + i == &operator[](i)对于[0,size()]每个i

这意味着给定一个stringss.c_str()返回的指针必须与string中的初始字符地址( &s[0] )相同。