为什么lambda没有函数try-block?

sms*_*sms 23 c++ language-lawyer c++11 c++14

void foo() try {} catch (...) {}
// OK, function-try-block
Run Code Online (Sandbox Code Playgroud)

[]() try {} catch (...) {} ();
// error: expected ‘{’ before ‘try’
Run Code Online (Sandbox Code Playgroud)

[]() { try {} catch (...) {} } ();
// OK, extra curly braces`
Run Code Online (Sandbox Code Playgroud)

为什么不允许第二种变体?

Col*_*mbo 9

最初,引入了函数 - 尝试块,以便能够捕获构造函数或子对象的析构函数中抛出的异常.语法扩展到普通函数以保持一致性.

当然,可以为lambdas引入这样的语法.然而,与构造函数和析构函数相反,除了简单地将try-block包含在另一对中{ }之外,没有实际优势,除了后者看起来不那么模糊.

  • 一个可能的优点是这样的东西:`const auto x = ([] try {...} catch {...}) ();`能够在外部作用域中编写catch块。 (3认同)