**关闭。**这个问题是not reproducible or was caused by typos。目前不接受答复。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
4年前关闭。
Improve this question
我在下面的代码中发现没有抛出异常,也没有发生错误。问题是,为什么这种情况没有发生。然而,根据评论,这是一个糟糕的问题,无论你如何看待它。一些研究本可以指出以下几点:
- 有一个函数叫做指针衰减How do function pointers in C work?
- 即使名称mightGoWrong未声明,仍然不会抛出Exception,因此也不会被捕获。它会直接导致编译器错误。
- 更多关于stackoverflow的研究会指出:How to throw a C++ exception
#include <iostream>
using namespace std;
void mightGoWrong() {
bool error = true;
if (error) {
throw 8;
}
}
int main () {
try {
mightGoWrong;
}
catch(int error) {
cout << "The error code is: " << error << endl;
}
cout << "Still running" << endl;
return 0;
}
4条答案
按热度按时间hc2pp10m1#
try
-块中的mightGoWrong;
-语句不引用变量,而是引用函数mightGoWrong()
;请注意,您不调用函数,而只是使用它的名称,而不将其分配给其他对象;正如符号mightGoWrong
所知,它只是一个“No操作”,可能会产生一些警告,但不会在编译时产生错误,并且-因为它不会调用函数-它不会在运行时抛出任何东西。试试
mightGoWrong()
,看看会发生什么。qhhrdooz2#
命名不存在的变量不会导致异常;它会导致编译程序失败。
但你不会这么做的。你在命名一个函数。你没有调用它,也没有对它做任何事情,但是命名它是法律的的,是一个“无操作”,即。一个毫无用处的声明。
这有点像这样做:
完全没有意义(并且您的编译器可能会发出警告),但不是非法的!
既然毫无意义为什么不违法呢?好吧,没什么大原因。班宁它是没有意义的。
njthzxwz3#
你不调用
mightGoWrong
,所以它不执行抛出mightGoWrong;
不是无效访问,它只是返回函数的地址我们不像在Java中虚拟机自己抛出异常,在C++中异常必须显式抛出
xzlaal3s4#
我注意到未声明的变量不会导致异常
从语言的Angular 来看,不存在“未声明变量”这样的东西。当标识符被声明为变量时,它就是一个变量。如果某个东西没有被声明,那么它就不是变量。
无论如何,如果你使用了一个未声明的 identifier,那么这个程序就是病态的。标准并没有说格式错误的程序会抛出异常,因此您的期望是错误的。事实上,标准并不要求格式错误的程序被成功编译,而且在未声明标识符的情况下,我不希望任何编译器这样做。
mightGoWrong
既不是未声明的,也不是变量。它被声明为一个函数。mightGoWrong;
的行为是不抛出异常。事实上,这种说法没有任何效果。虽然这样的语句是格式良好的,但它们很少是程序员想要的,因此可能会导致编译器向程序员发出警告。在本例中,您可能会看到: