VS2013 字符文本不能作为 MSDN 的规范工作

VS2013 character literal doesn't work as MSDN's specification

本文关键字:范工作 工作 MSDN 文本 字符 不能 VS2013      更新时间:2023-10-16

>MSDN https://msdn.microsoft.com/en-us/library/69ze775t.aspx 描述 VS 字符文字如下:

文本中的多个字符根据需要填充从高>到低顺序的相应字节。若要创建 char 值,编译器将采用低位字节。

根据文档,以下结果应该是我想要的。

unsigned int i = '1234'; // i = 0x34333231, memory[low->high] [0x31, 0x32, 0x33, 0x34]

但是,当转义序列出现时,情况发生了变化,这是我在电脑上所做的结果。

unsigned int i = '1234'; // i = 0x34333231
unsigned int j = '1234'; // j = 0x01020304 <- ???????

等一下,这里刚刚发生了什么?我期待着变体 j 是0x04030201。高阶到低阶的东西在哪里?我自己想不通。

这应该是我的第一个问题。为什么编译器在发生八进制转义时不会从高阶填充内存到低阶内存?

然而,这并不是故事的全部,我将在这里展示一些更有趣的东西

unsigned int k = '01011001'; // k = 0x31403041 memory[low->high] [0x41 0x30 0x40 0x31] ??what the hell
unsigned int l = '01011100'; // l = 0x40304131 memory[low->high] [0x31 0x41 0x30 0x40] ??what the hell again

到目前为止,我完全迷失了。我什至无法从这些测试用例中得出一个简单的规则。

没有人知道这个问题吗?谢谢。

我认为这里没有矛盾。使用字符文本将值分配给int类型时,它们的处理方式与分配给wchar_t 相同。唯一的区别是,int占用四个字节,wchar_t占用两个字节(通常)。请参阅文档页面中的以下示例:

wchar_t w1 = L'100';   // L'@'
wchar_t w2 = L'1000';  // C4066 L'@', 0 ignored 
wchar_t w3 = L'09';   // C4066 L'', 9 ignored
wchar_t w4 = L'89';   // C4066 L'', 89 ignored
wchar_t w5 = L'qrs';   // C4129, C4066 L'q' escape, rs ignored
wchar_t w6 = L'x0050'; // L'P'
wchar_t w7 = L'x0pqr'; // C4066 L'', pqr ignored