VS 2015未报告的错误:十六进制字符说明符

时间:2019-06-23 08:47:04

标签: c++ char

我想要这个:char c = '\x20' ; 但是我误输入了:char c = 'x20';

VS2015编译器报告警告'converting integer to char',没有错误,代码已运行,但c的值为48(十进制)。任何人都可以解释错误的格式转换是如何工作的,假设它是有效的格式(我认为不是这样)。还是这可能是VS15无法识别的错误?

1 个答案:

答案 0 :(得分:1)

'x20'多字符文字。根据{{​​3}}:

  

不以u8uUL开头的字符文字是   普通字符文字。普通字符文字   包含一个在执行字符中可表示的 c-char   集的类型为char,其值等于   执行字符集中 c-char 的编码。   包含多个 c-char 的普通字符文字是多字符文字。多字符文字或   包含单个 c-char 的普通字符文字,不包含   在执行字符集中可以表示,是   有条件支持,类型为int,并且具有   实施定义的值。

因此,从标准的角度来看,您的实现支持此条件支持的构造,并且您会获得类型为int的实现定义的值,将其转换为类型char时会得出{{ 1}}。


[lex.ccon]/2

  

Microsoft特定

     

文字中的多个字符根据需要填充相应的字节   从高阶到低阶要创建一个char(48)值,编译器   接受低位字节。要创建一个charwchar_t值,   编译器采用低阶字。编译器警告   如果在分配的字节上方设置了任何位,则结果将被截断或   字。

char16_t

在您的情况下,您使用char c0 = 'abcd'; // C4305, C4309, truncates to 'd' wchar_t w0 = 'abcd'; // C4305, C4309, truncates to '\x6364' 。编译器采用低位字节'x20',在ASCII编码下为'0'

相关问题