为什么s [0]是C ++中空字符串s的空字符串?

时间:2017-02-25 15:24:57

标签: c++ c++11

C ++ Primer告诉我s[s.size()]应该是不可预测的。

但是我尝试了很多次,并将其插入到其他代码中,s[0]始终是一个空字符串。但是当s不是空字符串时,尝试访问s[size()]会抛出错误。

为什么空字符串特殊?

1 个答案:

答案 0 :(得分:6)

对字符串的成员访问会产生字符,而不是字符串。

C ++ 11保证s[s.size()]为0. C ++ 17甚至允许你s[s.size()],只要你写的是0:< / p>

  

[关于operator[](size_type pos):]

     

需要pos <= size()

     

如果*(begin() + pos),则返回pos < size()。否则,返回对类型对象的引用   值charT的{​​{1}},将对象修改为charT()以外的任何值会导致未定义的行为。

charT()是&#34;零&#34;的标准。)

在C ++ 17之前,最后一句并没有包含“charT()&#34;以外的任何值的单词&#34;”。这是过于严格的限制,例如禁止charT()成正确大小的字符串。