来自 llvm.org 或 Apple 的 clang 3.0的最新版本clang,v2.9 不支持 Unicode 字符串文字。从主干源代码构建的最新可用版本确实支持 Unicode 字符串文字。
clang 的下一个 llvm.org 版本(即 3.0)将支持 Unicode 字符串文字语法,但不支持 ASCII 以外的任何源文件编码。因此,即使使用该 llvm.org 版本,您也无法在源代码中逐字输入这些字符并将它们转换为 UTF-16 编码的字符串值。相反,您必须使用 \u 转义。同样,主干顶部确实支持 UTF-8 源代码,但它没有及时用于当前正在测试的 llvm.org 3.0 版本。之后的下一个版本(在 6 个月左右)应该对 UTF-8 源代码(但不是其他源编码)有更好的支持。
编辑:clang 的 Xcode 4.3 版本确实具有这些功能。
编辑:现在 LLVM.org 的 3.1 版本拥有它们
所以 clang 现在完全支持以下内容:
#include <string>
int main() {
std::u16string a = u"鵝"; // UTF-8 source is transformed into UTF-16 literal
std::u32string b = U"滿"; // UTF-8 source is transformed into UTF-32 literal
}
事实证明,该标准实际上并不需要 iostreams 库中对 char16_t 和 char32_t 的太多支持,因此您可能必须转换为另一种字符串类型才能充分利用它。至少需要在这些和更有用的 std::string 之间进行转换的能力(尽管设置起来不太方便......)。