c ++ - try块后是否需要立即写入catch块?

Ine*_*nce -3 c++ error-handling exception-handling try-catch c++11

我的编译器给出了以下代码的错误:

#include <iostream>
#include <stdexcept>

using namespace std;


void test()
{
     throw runtime_error("Error");
}

int main()
{
     try
     {
          test();
     }

     for (int i = 0; i < 10; i++)
     {

     }

     catch (exception& e)
     {
          cout << e.what();
     }
}
Run Code Online (Sandbox Code Playgroud)

它说"错误:预期'捕获'之前'('令牌',它指的是for循环初始化中的'(').

在try块之后我是否必须立即编写catch块?我认为如果在try块中抛出一个错误,程序将冒出来,直到它找到一个合适的catch块.为什么这不适用于此?

Yak*_*ont 7

是的,它确实.是的,我的意思是.


要明确一点,因为有些人似乎对以上简短的答案感到困惑:

一个 catch块确实需要一个try块之后要立即写入.

还有一个次要问题:

我认为如果在try块中抛出一个错误,程序将冒出来,直到它找到一个合适的catch块.为什么这不适用于此?

因为你只能在try块之后立即写一个catch块.其他任何事情都是形成不良的计划.

  • @InertialIgnorance答案是肯定的.解释是yes表示它(catch块)确实(需要在try块之后立即写入).所以"是的,是的,它确实"是对你的问题的完整答案.你的帖子的其余部分是基于错误的假设,你可以把它写在别的地方.你不能,没有"应该发生什么".可能有另一种语言,其中catch块不会被强制与try块相邻,但这不是C++,它的行为不是我有资格谈论的. (4认同)
  • @SergeyA是的,或多或少,远不止更少,因为少即是30,而更多可以是30,而三十是我能做的最少. (2认同)