相关疑难解决方法(0)

什么时候C++编译器开始考虑字符串文字字符转义中的两个以上十六进制数字?

我在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位十六进制转义为宽字符串文字?

  • 有没有比上述更难的解决方法?

c++ string escaping literals

55
推荐指数
4
解决办法
1万
查看次数

标签 统计

c++ ×1

escaping ×1

literals ×1

string ×1