考虑以下两个字符串:

wchar_t* x = L"xy\x588xla";
wchar_t* y = L"xy\x588bla";

阅读此内容后,您会期望两个字符串文字都相同,只是一个字符-'x'而不是'b'
事实证明并非如此。第一个字符串编译为:
y = {'x', 'y', 0x588,  'x', 'l', 'a' }

第二个实际上是:
x = {'x', 'y', 0x588b, 'l', 'a' }

它们的长度甚至不一样!
是的,'b'被十六进制表示('\xNNN')字符占用了。

至少,这可能会引起手写字符串的困惑和细微的错误(您可能会说unicode字符串不属于代码主体)

但是,更严重的问题(也是我现在面临的问题)是自动生成的代码。似乎没有任何方法可以表达这一点:{'x', 'y', 0x588, 'b', 'l', 'a' }作为文字字符串,而无需诉诸以十六进制表示形式写入整个字符串,这是浪费且难以理解的。

有办法解决这个问题吗?
这样的语言是什么意思?

最佳答案

一种简单的方法是使用编译时字符串文字串联,因此:

wchar_t const* y = L"xy\x588" L"bla";

关于c++ - C/C++ : Inherent ambiguity of "\xNNN" format in literal strings,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15421722/

10-11 16:25