当字符改变时,为什么std::string的大小会改变?

Why does the size of this std::string change, when characters are changed?

本文关键字:改变 string std 字符 为什么      更新时间:2023-10-16

我有一个问题,其中字符串的大小受到''字符存在的影响。我在SO里找遍了,还是找不到答案。

下面是代码片段。

int main()
{
  std::string a = "123123shai";
  std::cout << a.length();
}
http://ideone.com/W6Bhfl

本例中的输出是

6

同样的程序用不同的字符串用数字代替字符

int main()
{
  std::string a = "123123123";
  std::cout << a.length();
}
http://ideone.com/mtfS50

给出

的输出
8

到底发生了什么?''字符的存在如何改变行为?

序列12在字符串(或字符)文字中使用时是一个八进制转义序列。它是八进制数12,对应于ASCII换行('n')字符。

这意味着你的第二个字符串实际上等于"123123n3"(加上实际的字符串终止符)。

如果您尝试打印字符串的内容,将会非常清楚。

八进制序列长度为一到三位数字,编译器会使用尽可能多的数字。

如果您检查ideone的颜色,您将看到12具有不同的颜色。这是因为这是一个八进制的字符。