2011-09-26 32 views
15

新的C++ 11標準提到了一個標頭<cuchar>,推測類似於C99的<uchar.h>`<cuchar>`提供了什麼,它在哪裏記錄?

現在,我們知道C++ 11帶來了專門爲UTF16和UTF32設計的new character types and literals,但我並不認爲該語言實際上包含將(依賴於系統的)窄多字節編碼轉換爲Unicode編碼。然而,我剛剛遇到<cuchar>的標題摘要,其中提到了功能mbrtoc16/c16rtombrmbrtoc32/c32rtombr,似乎這樣做。

不幸的是,該標準沒有提到除標題摘要之外的那些功能。這些功能在哪裏定義,他們真正做了什麼,我可以在哪裏閱讀更多關於它們的內容?這是否意味着現在可以完全用標準C++來使用正確的Unicode,而不需要任何額外的庫?

+0

在C標準? –

+0

@ R.MartinhoFernandes:我沒有 - 你有什麼細節?即使只是Web引用? –

+0

哎呀,我似乎無法找到那些最新的C99草案(N1124)。事實上,我甚至找不到任何提及'uchar.h'。 –

回答

5

這些描述在WG21 paper from 2005中,但描述不在最終的標準中。它們記錄在ISO/IEC 19769:2004(擴展程序中,用於編程語言C以支持新的字符數據類型)(draft),C++ 11標準引用該擴展。

的文本太長,張貼在這裏,但這些簽名:

size_t mbrtoc16(char16_t * pc16, const char * s, size_t n, mbstate_t * ps); 
size_t c16rtomb(char * s, char16_t c16, mbstate _t * ps); 
size_t mbrtoc32(char32_t * pc32, const char * s, size_t n, mbstate_t * ps); 
size_t c32rtomb(char * s, char32_t c32, mbstate_t * ps); 

功能多字節字符和UTF-16或UTF-32字符,分別類似於mbrtowc之間的轉換。沒有非重入版本,說實話,誰需要它們?

+0

您是否擁有FDIS(表79)? –

+0

@KerrekSB FDIS只包含名稱的表格。編輯:找到他們! –

+0

感謝您的更新 - 關於他們應該做什麼的文檔以及他們如何操作?它完全像'mbsrtowcs'嗎? (有趣的是,只有可重入版本。)*編輯:*哦,不,等等,就像'mbrtowc'。不是字符串,只是單個字符。 –

1

可能是我知道的最好的文檔是n1326,將TR19769添加到C標準庫的建議[編輯:雖然看着它,但R.Martinho Fernandes引用的N1010似乎有很多相同]。

+0

謝謝......雖然現在我覺得我理解*少*。那些宏是什​​麼?它們是否影響編譯器翻譯編碼的方式?嗯.... –

+0

@ R.MartinhoFernandes:不是根據鏈接的文件。它說**如果宏被定義,那麼'char32_t'是UTF32編碼的; *否則*編碼是實現定義的。這是否意味着如果我設置宏,編譯器必須生成UTF32,否則它不會? –

+2

@KerrekSB似乎C++ 11標準要求'char16_t'和'char32_t'的字符和字符串是UTF-16和UTF-32,所以在C++中應該定義宏。 –

相關問題