char val ='abcd'。使用多字符char

时间:2014-12-21 14:29:00

标签: c++ char

我对编译器如何处理具有多个字符的char变量感到困惑。我知道char是1个字节,它可以包含一个字符,如ASCII。

但是当我尝试时:

char _val = 'ab';
char _val = 'abc';
char _val = 'abcd';

它们编译得很好,当我打印_val时,它总是打印最后一个字符。但是当我做的时候

char _val = 'abcde';

然后我遇到了编译错误:

  

错误1错误C2015:常量中的字符太多

所以我的问题是:

  1. 为什么编译器总是在使用多个字符时使用最后一个字符?在这种情况下编译器机制是什么。
  2. 当我输入5个字符时,为什么会出现太多字符错误。 2个字符比char可以处理的更多,为什么5?
  3. 我正在使用Visual Studio 2013。

    谢谢。

1 个答案:

答案 0 :(得分:9)

[lex.ccon] / 1:

  

包含多个c-char的普通字符文字是a   多字符文字。多字符文字[..] 是有条件支持的,类型为int,和   具有实现定义的值。


  

为什么编译器总是在多个时使用最后一个字符   字符用于?在这种情况下,编译器机制是什么。

大多数编译器只是按顺序将字符值移动到一起:这样,最后一个字符占据最低有效字节,倒数第二个字符占据最不重要字符旁边的字节,依此类推。
'abc'等同于'c' + ((int)'b')<<8) + (((int)'a')<<16)Demo)。

将此int转换回char将具有实现定义的值 - 可能只是从int模256的值中获得。这只会给你最后一个字符。

  

当我输入5个字符时,为什么会出现太多字符错误。 2   字符比char可以处理的更多,为什么5?

因为在您的计算机上int可能大四个字节。如果以上确实是编译器排列多字符常量的方式,则他不能将五个char值放入int