You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何lambda表达式parameter-declaration-clause中名称查找无法找到init-captures?

Lambda捕获在参数声明中的名称查找疑问

请看以下示例代码:

int main() {
    const char* x;
    [x = 1] (decltype(-x) y) {};
}

测试多款编译器均拒绝编译该代码,原因是无法对指针应用一元负号运算符。

我无法理解为何标准要求这种行为。根据标准[expr.prim.lambda.capture]/6条款:

init-capture属于lambda表达式的lambda scope(见[basic.scope.lambda])。[...]

lambda scope在[basic.scope.lambda]中定义:

lambda表达式E引入一个lambda scope,该作用域始于E的lambda-introducer之后,延伸至E的compound-statement末尾。

lambda-introducer是方括号包裹的部分,因此似乎在[x = 1]的闭合方括号之后,对x的名称查找应找到init-capture,而非外围块作用域中声明的变量x。

但编译器显示,仍处于parameter-declaration-clause中时,对x的名称查找无法找到init-capture。我确信编译器是正确的,我的推理存在错误,但问题出在哪里呢?


内容的提问来源于stack exchange,提问作者Brian Bi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:52:34