虽然在 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/