我想要这个:char c = '\x20' ;
但是我误输入了:char c = 'x20';
VS2015编译器报告警告'converting integer to char
',没有错误,代码已运行,但c的值为48(十进制)。任何人都可以解释错误的格式转换是如何工作的,假设它是有效的格式(我认为不是这样)。还是这可能是VS15无法识别的错误?
答案 0 :(得分:1)
'x20'
是多字符文字。根据{{3}}:
不以
u8
,u
,U
或L
开头的字符文字是 普通字符文字。普通字符文字 包含一个在执行字符中可表示的 c-char 集的类型为char
,其值等于 执行字符集中 c-char 的编码。 包含多个 c-char 的普通字符文字是多字符文字。。多字符文字或 包含单个 c-char 的普通字符文字,不包含 在执行字符集中可以表示,是 有条件支持,类型为int
,并且具有 实施定义的值。
因此,从标准的角度来看,您的实现支持此条件支持的构造,并且您会获得类型为int
的实现定义的值,将其转换为类型char
时会得出{{ 1}}。
Microsoft特定
文字中的多个字符根据需要填充相应的字节 从高阶到低阶要创建一个
char(48)
值,编译器 接受低位字节。要创建一个char
或wchar_t
值, 编译器采用低阶字。编译器警告 如果在分配的字节上方设置了任何位,则结果将被截断或 字。char16_t
在您的情况下,您使用char c0 = 'abcd'; // C4305, C4309, truncates to 'd'
wchar_t w0 = 'abcd'; // C4305, C4309, truncates to '\x6364'
。编译器采用低位字节'x20'
,在ASCII编码下为'0'
。