在阅读了关于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()
?
该标准的任何引用都将受到赞赏。
答案 0 :(得分:3)
21.4.1.7
basic_string
访问者
const charT* c_str() const noexcept;
const charT* data() const noexcept;
1 返回:指针
p
,p + 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)
)。