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

时间:2016-08-07 18:06:47

标签: c++ c++11 c++14 language-lawyer

void foo() try {} catch (...) {}
// OK, function-try-block

[]() try {} catch (...) {} ();
// error: expected ‘{’ before ‘try’

[]() { try {} catch (...) {} } ();
// OK, extra curly braces`

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

1 个答案:

答案 0 :(得分:9)

最初,引入了function-try-blocks以捕获在子对象的构造函数或析构函数中抛出的异常。语法扩展到普通函数以保持一致性。

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