【发布时间】:2013-10-29 12:03:56
【问题描述】:
这个程序
#include <iostream>
#include <locale>
int main () {
std::isxdigit(std::cin.peek(), std::cin.getloc());
}
当使用 gcc 或 clang 使用 libstdc++ 编译时,我会抛出 std::bad_cast 类型的异常。用VS2010可以正常运行。
我明白这里发生了什么。 peek() 返回 int 以适应带外 EOF 值。语言环境不需要有ctype<int> 方面(他们在VS 中确实有这个方面,也许作为扩展)。如果语言环境没有执行功能的方面,它将抛出bad_cast。
但这不应该按照原始<ctype.h> 的精神工作吗?这是标准的缺陷吗?是否有普遍接受的解决方法?我知道我可以自己检查 EOF 并转换为相关的字符类型,但我不想重新发明轮子。
【问题讨论】:
标签: c++ locale facet libstdc++