void foo() try {} catch (...) {}
// OK, function-try-block
[]() try {} catch (...) {} ();
// error: expected ‘{’ before ‘try’
[]() { try {} catch (...) {} } ();
// OK, extra curly braces`
为什么不允许第二种变体?
答案 0 :(得分:9)
最初,引入了function-try-blocks以捕获在子对象的构造函数或析构函数中抛出的异常。语法扩展到普通函数以保持一致性。
当然,可以为lambdas引入这样的语法。然而,与构造函数和析构函数相反,没有实际优势,只需将try-block封装在另一对{ }
中,除了后者看起来不那么模糊。