为什么lambda没有函数try块

Why there is no function-try-block for lambda?

本文关键字:try 函数 lambda 为什么      更新时间:2023-10-16
void foo() try {} catch (...) {}
// OK, function-try-block

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

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

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

最初,引入函数try块是为了能够捕获子对象的构造函数或析构函数中抛出的异常。为了保持一致性,语法被扩展到了普通函数。

当然,可以为lambdas引入这样的语法。然而,与构造函数和析构函数相比,简单地将try块封装在另一对{ }中没有实际优势,只是后者看起来不那么晦涩。