C++字符串的内部缓冲区地址未定义的行为

igg*_*ggy 3 c++11

在c ++ 11标准下是否存在以下未定义的行为:

(试图获取字符串的内部缓冲区的地址)

std::string s;
... = &s[0];
Run Code Online (Sandbox Code Playgroud)

例如什么时候s是空的?

我知道我们有c_str(), data(),但不过.

注意

这是来自与某人的辩论,这不是为了促进hacky编码

Rei*_*ica 7

在C++ 11中,代码定义明确,但可能无法达到预期效果.确切的影响是,根据21.4.5/2:

返回: *(begin() + pos) if pos < size(),否则引用T具有值 的类型的对象charT(); 参考值不得修改.

因此,如果字符串非空,则返回对内部缓冲区start的引用.如果它为空,则返回对char带有值的引用0,其位置为内存是实现细节.