C ++ Primer告诉我s[s.size()]
应该是不可预测的。
但是我尝试了很多次,并将其插入到其他代码中,s[0]
始终是一个空字符串。但是当s
不是空字符串时,尝试访问s[size()]
会抛出错误。
为什么空字符串特殊?
答案 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()
成正确大小的字符串。