8

考虑这两个字符串:

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

阅读本文后,您会期望两个字符串文字都是相同的,除了一个字符 - an'x'而不是 a 'b'
事实证明,情况并非如此。第一个字符串编译为:

y = {'x', 'y', 0x588,  'x', 'l', 'a' }

第二个实际上是:

x = {'x', 'y', 0x588b, 'l', 'a' }

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

至少,这可能会导致手写字符串中的混淆和细微错误(您可能会争辩说 unicode 字符串不属于代码主体)

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

有什么办法解决这个问题吗?
这种行为的语言有什么意义?

4

1 回答 1

14

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

wchar_t const* y = L"xy\x588" L"bla";
于 2013-03-14T22:54:19.563 回答