C++ c++;try-except语句

C++ c++;try-except语句,c++,windows,try-catch,try-except,C++,Windows,Try Catch,Try Except,我偶然看到这篇关于检测VMWare或虚拟PC的文章 我看到他们使用了某种“尝试除外”语句。 所以我在MSDN上查了一下: 我不明白为什么我会用一个尝试,而不是一个好的老尝试捕获。 它是否只是提供了有关异常的其他信息? 如果是这样,我可以在使用附件中的代码时使用try-catch,对吗? 谢谢:( > P)MSDN通常不清楚,但代码< >代码> >代码> >除< /COD> >之外的异常不是C++异常,而是系统异常。像分段错误之类的东西。\uuuu try/\uuu除了是一种try/捕获,用于另

我偶然看到这篇关于检测VMWare或虚拟PC的文章

我看到他们使用了某种“尝试除外”语句。
所以我在MSDN上查了一下:

我不明白为什么我会用一个尝试,而不是一个好的老尝试捕获。 它是否只是提供了有关异常的其他信息?
如果是这样,我可以在使用附件中的代码时使用try-catch,对吗?

谢谢:(

> P)MSDN通常不清楚,但代码< >代码> >代码> >除< /COD> >之外的异常不是C++异常,而是系统异常。像分段错误之类的东西。

\uuuu try
/
\uuu除了
是一种
try
/
捕获
,用于另一种异常。您可以捕获硬件异常,如浮点违例、指针引用错误等,而不是C++异常。这被称为结构化异常处理(Structured Exception Handling,简称SEH),如果您知道应该在哪里查找,那么MSDN在这方面有很多内容


在这种情况下,他们使用它来检测无效指令。这是他们试图执行x86不支持的指令的地方,虚拟机使用这些指令。如果你在一个真正的CPU上运行,那么你会得到一个无效的指令异常,如果你在一个虚拟机上运行,你只需要与它对话。

除了之外,
\u都是其中的一部分,这是一个不同于标准的异常处理模型,当它处理与软件相同的硬件异常时,请参见信息链接。

< P>微软在C++ C++标准开始包含异常之前,为微软C++创建了结构化异常处理。因此,在Windows上,存在的所有异常都是SEH异常,但并非所有这些异常都是C++异常。

一个Ty/y~除是一个捕获SEH异常的方法(意外地,也就是C++异常)。尝试/catch是捕获C++异常的方法。我还记得不能在一个函数中同时使用这两个函数是有限制的,但解决这个问题很容易


对于使用,只需对任何异常使用try/catch即可。如果有人显式地向您抛出SEH异常(除零、空指针解引用等),捕获它并尽快将其转换为常规程序流,例如将其转换为常规异常或停止软件。

,这是针对Windows引发的异常的异常处理机制。它们与C++异常不一样。 这可能会有帮助。特别是Q3。好的,所以我知道“我可以用try-catch代替try-except”的答案是否定的:)@伊多夫:当然。它们是根本不同的系统。