这行简单的代码和最新的 clang++ 让我玩得很开心
#include <stdio.h>
#include <string>
using std::u16string;
int main ( int argc, char** argv )
{
u16string s16 = u"鵝滿是快烙滴好耳痛";
return EXIT_SUCCESS;
}
Ben-iMac:Desktop Ben$ clang++ -std=c++0x -stdlib=libc++ main.cpp -o main
main.cpp:15:21: error: use of undeclared identifier 'u'
u16string s16 = u"鵝滿是快烙滴好耳痛"
最佳答案
clang 的最新发布 版本,来自 llvm.org 的 v2.9 或 Apple 的 clang 3.0,不支持 Unicode 字符串文字。最新的可用版本,基于主干源构建,支持 Unicode 字符串文字。
clang 的下一个 llvm.org 版本(即 3.0)将支持 Unicode 字符串文字语法,但不支持 ASCII 以外的任何源文件编码。因此,即使使用 llvm.org 版本,您也无法在源代码中逐字输入这些字符并将它们转换为 UTF-16 编码的字符串值。相反,您必须使用\u 转义符。同样,主干顶部确实支持 UTF-8 源代码,但它没有及时放入当前正在测试的 llvm.org 3.0 版本。之后的下一个版本(6 个月左右)应该对 UTF-8 源代码(但不是其他源编码)有更好的支持。
编辑:Xcode 4.3 版的 clang 确实具有这些功能。
编辑:现在 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 之间进行转换的能力(尽管设置起来并不十分方便...)。
关于c++ - clang++ 和 u16string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256258/