我在C++中有一个(生成的)文字字符串,可能包含需要使用\x表示法转义的字符.例如:
char foo[] = "\xABEcho";
Run Code Online (Sandbox Code Playgroud)
但是,g ++(版本4.1.2,如果它很重要)会抛出一个错误:
test.cpp:1: error: hex escape sequence out of range
Run Code Online (Sandbox Code Playgroud)
编译器似乎将Ec字符视为前一个十六进制数字的一部分(因为它们看起来像十六进制数字).由于四位十六进制数不适合a char,因此会引发错误.显然,对于宽字符串文字L"\xABEcho",第一个字符是U + ABEC,其次是L"ho".
在过去的几十年里,这似乎发生了变化,我从未注意到.我几乎可以肯定旧的C编译器只会考虑两个十六进制数字\x,而不再看了.
我可以想到一个解决方法:
char foo[] = "\xAB""Echo";
Run Code Online (Sandbox Code Playgroud)
但那有点难看.所以我有三个问题:
这什么时候改变了?
为什么编译器只接受> 2位十六进制转义为宽字符串文字?
有没有比上述更难的解决方法?