2 回答

TA貢獻2037條經驗 獲得超6個贊
locale 對象是不可變的,即在它們的生命周期中,它們的內容不可改變。所包含的 facet 不能進行修改或替換,同時 facet 不能增加或刪除。
鑒于以上特性,在使用 locale 時一般都是根據需要生成新的 locale 對象,然后選入IO流中。因此 locale 的構造函數就變得十分多樣,方便我們以各種形式構造所需要的locale 對象。
例如,需要 std::wostream 輸出中文,我們就需要 locale("chs") 中編碼轉換相關的功能,但若直接選擇 locale("chs"),輸出數字時也會進行轉換處理,例如將 1234 輸出為 "1,234"。為了避免這一轉換,就需要保留原 locale("C") 中除了字符相關的其他facet。如下處理即可
locale loc("chs", locale::ctype);
此函數以 global 對應的 locale (一般是 locale("C") ) 初始化 loc 并選擇 locale("chs") 的字符相關 facet ,這樣我們就可以用 loc 正確輸出中文,并保持輸出數字時不進行其他處理
其他可參閱 MSDN 中關于 locale 的構造函數說明,解釋很詳細,用法很簡單。
此外,locale 對象還可使用 combine 成員函數 選取其他 locale 中指定 facet 進行組合。總之接口多樣,不過也一定程度上增加了對 locale 學習的復雜性。
- 2 回答
- 0 關注
- 1587 瀏覽
添加回答
舉報