在C++中,try块中的语句是否在throw语句之后执行(在引发Exception的情况下)?

but5z9lq  于 2022-12-30  发布在  其他
关注(0)|答案(3)|浏览(159)

请告诉我throw语句之后是否执行了任何内容。
例如,在下面的代码中,如果不执行“10//0”,为什么IDE会引发错误?

void check_exception()

{

    char a = 'A';
    char b = 'B';
    try
    {
        if (a == 'A')
            throw "Hello";
        
        cout << "\nLet's check if this line is printed or not";
        cout << "\nB is : " << b << " A has been thrown : " << 10/0;
        
    }
    catch (const char* check)
    {
        cout << "\n\nReceived exception " << check;
    }
}
njthzxwz

njthzxwz1#

如果throw之后的代码被调用,那么它就不应该被执行,唯一的例外是如果有一个合适的catch,那么它就会被执行。C#也是如此。无论如何,你不应该直接在try/catch块中执行throw

r7knjye2

r7knjye22#

因为throw语句将搜索匹配的catch异常,所以没有输出任何内容,throw语句后面没有execute语句,我认为您必须将catch更改为:(char const* s)(const char [])或类似的内容...我不记得了,但如果您需要,我可以在今天晚上为您搜索它...我已经检查了相同的catch异常

wvt8vs2t

wvt8vs2t3#

请告诉我throw语句之后是否执行了任何内容。
明确声明:没有。

    • BUT**:所有自动对象的析构函数将在堆栈展开时正确调用。

例如,在下面的代码中,如果不执行"10//0",为什么IDE会引发错误?
IDE只是警告您一个明显的bug,它没有做任何控制流分析,只是在生成代码时看到了bug。

相关问题