C++標準庫中有一些標準的基類層面,其默認行爲依賴於經典的「C」語言環境(std::locale::classic()
)。如果您的程序需要特定於文化的功能,那麼切換到派生類構面(也稱爲byname
構面)的行爲取決於構造中指定的區域設置時,可以合理地進行切換。何時應該使用派生類facet來代替基類facet?
例如,std::ctype
提供經典的 「C」 字符分類:
§22.4.1.3.3
static const mask* classic_table() noexcept;
返回:一個指針,指向大小
table_size
的陣列的初始元件,其代表「C」語言環境中的字符分類
這是否意味着的行爲在功能上與它所安裝的語言環境不同。例如,假設我有日語語言環境:
std::locale loc("ja_JP");
我想用一個對日語字符進行字符分類的方面。性格分類是什麼std::ctype
是:
auto& f = std::use_facet<std::ctype<char>>(loc);
威爾f
的ctype
方法基礎上,日語語言環境,還是經典的‘C’的一個分類字符?我的第一個猜測是基於上面標準報價的「C」語言環境,但實際上它是日語語言環境。我想知道爲什麼報價不符合這裏發生的事情。
這裏是我的問題:
爲什麼標準說
ctype
執行「C」字符分類時CTYPE基礎上與它正在使用的語言環境實際分類?由於上述情況屬實,派生類的方面在哪裏?爲什麼我應該在基類已經使用我想要的語言環境時使用派生類facet?
你的默認構造是什麼意思?方面不能默認構造(至少我認爲)... – 0x499602D2
@ 0x499602D2'新的std :: ctype'調用默認的構造函數 –
Cubbi
哦是的。謝謝 – 0x499602D2