4
這個程序「CTYPE」 功能引發的std :: bad_cast
#include <iostream>
#include <locale>
int main() {
std::isxdigit(std::cin.peek(), std::cin.getloc());
}
當用gcc或使用鏗鏘++的libstdc編譯對我拋出std::bad_cast
類型的異常。它通常與VS2010一起運行。
我明白這裏發生了什麼。 peek()
返回int
以適應帶外EOF值。語言環境不需要具有ctype<int>
構面(它們在VS中具有此方面,可能作爲擴展)。如果語言環境沒有執行功能的方面,則會拋出bad_cast
。
但是,不應該按照原始<ctype.h>
的精神工作嗎?這是標準中的缺陷嗎?是否有一個普遍接受的解決方法?我知道我可以自己檢查EOF並投射到相關的字符類型,但我寧願不要重新發明輪子。
曾經有一種習慣於使用'ctype'函數和EOF。我明白爲什麼這個習語在現場土地上不起作用。我問,標準委員會成員是否知道他們在破產時做了什麼,以及他們或其他人是否想到替代方案。用EOF檢查器包裝這些功能的解決方案不會讓我感到特別優雅。如果每個人都需要包裝這些功能,爲什麼包裝版本不是標準的一部分? –