【发布时间】:2016-12-13 12:15:53
【问题描述】:
void foo() try {} catch (...) {}
// OK, function-try-block
[]() try {} catch (...) {} ();
// error: expected ‘{’ before ‘try’
[]() { try {} catch (...) {} } ();
// OK, extra curly braces`
为什么不允许使用第二种变体?
【问题讨论】:
-
@JVApen 是的。
-
@JVApen 它也可以用于非ctor函数,在这种情况下它相当于将函数的主体包装在一个try-catch块中,但缩进级别少了一个。它可以用于在调试构建中记录有关函数状态的信息,这种方式可以很容易地在正常构建中禁用,并且不像将 try-catch 块放在函数体中那样具有侵入性,但并不常见,因为语法看起来很奇怪。
-
它会在 try catch 中包装 lambda 初始化吗?可能不会。
-
@JustinTime function-try-block 还有一个特点 - 当
catch退出时,捕获到的任何异常都会自动重新抛出,异常不能被吞没。不像函数体内的try-catch,它可以。 -
@RemyLebeau 仅适用于构造函数和析构函数。
标签: c++ c++11 c++14 language-lawyer