我在编写代码时发现,除了语法、类型和其他编译时错误外,C++不会抛出任何其他异常。因此,我决定用一个非常简单的程序来测试一下:
#include<iostream>
int main() {
std::count<<5/0<<std::endl;
return 1
}
当我使用g++编译它时,g++警告我正在除以0。但它仍然编译了代码。然后当我运行它时,它打印出一个非常大的任意数字。我的问题是,C++是如何处理异常的?整数除以0应该是抛出异常并终止程序的一个非常微不足道的例子。我是否需要在try块中包含整个程序,然后捕获某些异常?我知道在Python中,当抛出异常时,程序会立即终止并打印出错误。C++会做什么?甚至有停止执行和杀死程序的运行时异常吗?
std::cerr
,它将简单地打印到错误流。你可以通过命令行重定向将输出流和错误流发送到不同的位置(>
vs2>
)。如果你throw
一个异常,并且你没有在任何地方捕获它,程序将立即终止并打印一个错误消息。(更准确地说,将调用一个名为std::terminate
的函数,其默认行为是终止程序并打印异常的消息。如果你感兴趣,可以通过调用std::set_terminate
来覆盖这种行为。) - HighCommander4