考虑以下两个字符串:
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/