clang++ and u16string
clang++ and u16string
我用这行简单的代码和最新的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或苹果的clang 3.0,不支持Unicode字符串字面值。最新的可用版本,从主干源代码的顶部构建,支持Unicode字符串字面值。
clang的下一个llvm.org版本(即3.0)将支持Unicode字符串文本语法,但不支持ASCII以外的任何源文件编码。因此,即使使用llvm.org版本,您也不能在源代码中直接键入这些字符并将它们转换为UTF-16编码的字符串值。相反,您必须使用u转义。同样,top of trunk也支持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++ 11特性测试clang,例如:
http://clang.llvm.org/docs/LanguageExtensions.html cxx_unicode_literals
这里是状态页:
http://clang.llvm.org/cxx_status.html相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- GCC 问题与 static_cast<std::u16string>
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- clang++ and u16string