2017-02-25 145 views
-2

C++ Primer告诉我s[s.size()]应该是不可预知的。为什么s [0]是C++中空字符串s的空字符串?

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

为什么空字符串是特殊的?

+0

究竟是什么? – BlueWanderer

+3

请尝试更清楚地表达您的问题。 *“s [0]总是一个空字符串”*甚至没有意义,因为s [0]是一个char字符串,所以它永远不会是任何类型的字符串,也不会是空的。 –

+0

对不起,我的表达不清楚,因为英语不是我的母语,英语学习在我的国家并不普遍。 – RevolverOcelot

回答

6

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

C++ 11个保证s[s.size()]是0 C++ 17甚至允许你写入s[s.size()],只要你正在写的值0:

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

需要pos <= size()

返回*(begin() + pos) if pos < size()。否则,返回对 charT对象的引用,其值为charT(),其中将对象修改为除charT()以外的任何值都会导致未定义的行为。

charT()是standardese为 “零”。)

此前C++ 17的最后一句不包含词语 “比charT()之外的任何值”。这是过分限制的,例如,禁止将strcpy转换成正确大小的字符串。