在C++中捕捉类型错误

4

我该如何检查结果是否为正确的类型(int、float、double等),并在不是这种类型时抛出和捕获异常?

谢谢大家,

Vlad。

3个回答

5

你能否详细说明是什么导致了“结果”,这样你可能能够确定你需要什么,更有可能以更好的方式得到它。

如果你只想检查类型,请使用typeid。更多信息请参见此处

按照丹尼尔编辑帖子的模式,在陈述其他内容后实际回答问题...

来自我的另一个评论:

在你得到结果之前,你必须这样做。在溢出之后进行检查是不明智的。在添加数字之前,先检查它们是否会溢出,或者限制输入小于类型最大值的一半


4

在C++的运行时期无法知道这些问题,因为它们是编译时期的错误。

回答你的第二个问题,你需要手动检查缓冲区溢出/下溢或使用更合适的数据类型。


5
+1,但实际上恰恰相反——几乎没有不知道在运行时的方法,否则代码就无法编译;-) - Michael Krelin - hacker
除非使用模板实例,否则模板参数可以是任何类/类型,甚至是在编写模板时不存在的类/类型。 - suszterpatt
2
但是模板不仅在运行时存在,它们也在编译时生成。 - Daniel A. White
这完全取决于他得到这个结果的方式。如果它是从其他地方获取的指向某个被强制转换为void*的东西的指针,除非有人告诉你,否则你将不知道它的真实类型。 - Adam W

0

2
dynamic_cast 不适用于内置类型。它仅适用于指向多态类型的引用/指针。 - Cătălin Pitiș
这就是为什么我说你最接近的方法是dynamic_cast(注意不是“答案是dynamic_cast”,请注意区别)。我提到dynamic_cast是因为我不确定OP是在询问仅仅内置类型还是更大的类型集合。 - Matthew Iselin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接