2011-11-24 9 views
5

Mam piekło czasu z tej prostej linii kodu i najnowszej brzękiem ++dzyń ++ i u16string

#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"鵝滿是快烙滴好耳痛" 
+1

Czy jesteś pewien, że Clang obsługuje nowe literały ciągu znaków Unicode? –

Odpowiedz

5

Najnowsze wersje wydane wersje clang, v2.9 z llvm.org lub Apple clang 3.0, nie obsługują literałów łańcuchowych Unicode. Najnowsza wersja dostępna w wersji, zbudowana ze źródła głównego pnia, obsługuje literały łańcuchów znaków Unicode.

Następna wersja cll (llv, 3.0) llvm.org będzie obsługiwać składnię literową w standardzie Unicode, ale nie obsługuje żadnego kodowania plików źródłowych poza ASCII. Nawet z tym wydaniem llvm.org nie będziesz mógł wpisać tych znaków dosłownie w swoim źródle i przekonwertować je na zakodowaną wartość ciągu UTF-16. Zamiast tego będziesz musiał użyć \ u ucieczek. Znowu, góra bagażnika obsługuje kod źródłowy UTF-8, ale nie dostał się w porę do wydania llvm.org 3.0, które jest obecnie testowane. Następne wydanie po tym (w ciągu 6 miesięcy) powinno lepiej obsługiwać kod źródłowy UTF-8 (ale nie inne kodowania źródłowe).

Edytuj: Wersja klang Xcode 4.3 ma te funkcje.

Edit: A teraz 3,1 uwolnienie od LLVM.org ma je

Więc dzyń teraz w pełni obsługuje następujące:

#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 
} 

Okazuje się średnia faktycznie nie wymagają dużego wsparcia dla char16_t i char32_t w bibliotece iostreams, więc prawdopodobnie będziesz musiał przekonwertować na inny typ łańcucha, aby uzyskać wiele korzyści z tego. Konieczna jest przynajmniej możliwość konwersji między tymi i bardziej użytecznymi std :: string (choć nie jest to wygodne, aby je skonfigurować ...).

Powiązane problemy