C/C++中十六进制转义码中的位数

Geo*_*Geo 16 c++ unicode escaping

我和我的一位同事有争执.她说以下内容:

char* a = "\x000aaxz";
Run Code Online (Sandbox Code Playgroud)

将/可以被编译器看作"\ x000aa".我不同意她的意见,因为我认为你可以拥有最多4个十六进制字符\x.你有超过4个十六进制字符吗?

谁在这?

Pot*_*ter 30

§2.13.2/ 4:

escape\xhhh由反斜杠后跟x后跟一个或多个十六进制数字组成,这些数字用于指定所需字符的值.十六进制序列中的位数没有限制.八进制或十六进制数字序列由分别不是八进制数字或十六进制数字的第一个字符终止.

她是对的.

但是,您可以通过eager catenation提前终止它:文字序列"\x000a" "axz"指定一个四字符的字符串文字.(2.13.4/3)

另请注意,Unicode 使用21位代码点 ; 它不会停留在16位.

  • 当转义序列之后的字符碰巧是有效的十六进制数字时,我已经多次被无限的十六进制文字所咬. (2认同)