关于std :: basic_string的底层存储

时间:2014-11-17 14:57:39

标签: c++11 memory stdstring

在阅读了关于cppreference的std::basic_string的说明后,我不确定以下关于std::basic_string的基础存储的两个问题:

1)从C ++ 11开始,std::basic_string的连续性是否延伸到终止空字符?请注意,str[str.size()]返回对终止空字符的引用。但我想确定这是否是str[str.size() - 1]之后的那个。

2)从C ++ 11开始,data()c_str()变得相同。但它是否支持data() == c_str() == &front()

该标准的任何引用都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

  

21.4.1.7 basic_string访问者

     

const charT* c_str() const noexcept;

     

const charT* data() const noexcept;

     

1 返回:指针pp + i == &operator[](i)中每个i的{​​{1}}。

     

2 复杂性:恒定时间。

这实际上要求终止[0,size()]与字符序列一起存储(它强加NUL operator[] s[s.size()]没有做任何花哨的额外要求,尽管纯文本 21.4.5 似乎给了它一些自由度。)

它还明确要求s.c_str() == &s[0],这反过来意味着s.c_str() == &s.front()front()被定义为operator[](0))。