c++ - 为什么 try..catch block 需要大括号?

标签 c++ syntax try-catch

虽然在 if ... else 等其他语句中,如果 block 中只有一条指令,您可以避免使用大括号,但您不能使用 try ... catch block 来做到这一点:编译器不会购买它。例如:

try
    do_something_risky();
catch (...)
    std::cerr << "Blast!" << std::endl;

使用上面的代码,g++ 只是说它在 do_something_risky() 之前需要一个“{”。为什么 try ... catch 和 if ... else 之间的这种行为差异?

谢谢!

最佳答案

直接来自 C++ 规范:

try-block:
    try compound-statement handler-seq

如您所见,所有 try-block 都需要一个 compound-statement。根据定义,复合语句是用大括号括起来的多个语句。

在复合语句中包含所有内容可确保为 try block 生成新范围。在我看来,这也使所有内容都更易于阅读。

您可以在 C++ Language Specification 的第 359 页自行查看。

关于c++ - 为什么 try..catch block 需要大括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008937/

相关文章:

c++ - 计算将具有 n 个元素的集合分成 k 个子集的分区数

c++ - 将值加倍时的加法与乘法与左移运算

c++ - 如何在QPalette中使用QPROPERTY?

scala.util.Try : How to get Throwable value? 模式匹配?

c# - 我可以在 readline 中只接受 2 个数字吗?

c# - 捕获所有异常以进行详细记录 - 优点和缺点

C++11 constexpr 函数编译器错误与三元条件运算符 (? :)

python - 正确的方法提示 '->' python函数中的多个返回类型

c++ - 如何使用常量引用访问 vector<int*> 的元素?

java - 银行账户无法使用