所以我写了一些代码,我注意到,除了语法,类型和其他编译时错误,C++不会抛出任何其他异常。所以我决定用一个非常重要的程序测试了这一点:C++异常处理
#include<iostream>
int main() {
std::count<<5/0<<std::endl;
return 1
}
当我用G ++编译它,G ++给了我一个警告,说我被划分为0但它仍然编译的代码。然后当我运行它时,它会打印一些非常大的任意数字。当我想知道的是,C++如何处理异常?应该是一个非常简单的例子,当抛出异常并且程序应该终止时。
我是否必须将我的整个程序封装在一个巨大的try块中,然后捕获某些异常?我在Python中知道抛出异常时,程序将立即终止并打印出错误。 C++是做什么的?是否有运行时异常停止执行并终止程序?
谢谢,这是有道理的。另一个问题。如果不是使用std :: cout,我使用std :: cerr,会抛出异常,还是只打印到错误流?如果我创建自己的异常(可以说foo),并且在我的代码中,我会说throw foo,那么我的程序是否会立即被杀死,并且foo.what()会被打印出来?还是我必须明确告诉C++这样做? – user1413793
@ user1413793:如果你写入'std :: cerr',它只会打印到错误流。您可以通过命令行('>'vs'2>')通过重定向将输出流和错误流发送到不同的地方。如果你抛出一个异常,并且你没有在任何地方捕捉到它,程序将立即终止并打印一条错误消息。 (更确切的说,一个名为'std :: terminate'的函数将被调用,它的默认行为是终止程序并打印异常的消息。你可以通过调用'std :: set_terminate'来覆盖行为。有兴趣。) – HighCommander4