您可以在C++ 11中分別使用字符串前綴u8
/u
/U
來編寫UTF-8/16/32字符串文字。編譯器如何解釋這些新類型的字符串文字中包含非ASCII字符的UTF-8文件?我知道標準沒有指定文件編碼,單單這一事實就會使源代碼中的非ASCII字符的解釋完全不確定的行爲,使得該功能不那麼有用。文件編碼如何影響C++ 11字符串文字?
我知道您仍然可以使用\uNNNN
轉義單個unicode字符,但是對於通常包含多個unicode字符的俄文或法文句子來說,這樣的讀法不太可讀。
我從各種來源得知,u
應該等效於當前Windows實現上的L
,以及上的例如L
。 Linux實現。因此,考慮到這一點,我也想知道所要求的行爲是什麼舊字符串文字修飾...
的代碼樣本猴子:
string utf8string a = u8"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
string utf16string b = u"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
string utf32string c = U"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
在一個理想的世界中,所有的這些字符串會產生相同的內容(如轉換後的字符),但是我使用C++的經驗告訴我,這是絕對實現定義的,可能只有第一個會按照我的意願來做。
你需要在這些文字前加上一個'const'。 –
@尼科爾號甚至假設你的意思是宣佈的變量,不。 –
@尼科爾:爲什麼是誰? 'char x [] =「a」; x [0] = b;' –