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

Objective-C++中Lambda捕获初始化器的兼容性问题咨询

Objective-C++ Lambda捕获初始化器的异常行为及相关疑问

问题场景

将以下代码写入.mm文件并使用g++ -std=c++17编译:

int x;
auto a = [c = x]{};

编译器抛出错误:

error: 'c' was not declared in this scope

这一报错表明,Objective-C++环境下似乎不支持带捕获初始化器的Lambda语法。

异常行为的实验验证

进一步测试发现,若提前在外部作用域声明变量c,代码可成功编译:

int x;
int c;
auto a = [c = x]{};

但此时的行为与纯C++完全不符:外部的c和x都会被Lambda捕获,且捕获时c会被赋值为x的值。以下代码的返回值为2,可验证该结论:

int x = 1;
int c;
auto a = [c = x]{return c+x;};

int main() {
    return a();
}

疑问

目前未找到任何官方或非官方文档对该现象进行说明,特此咨询:

  • 是否存在相关文档可以解释此行为?
  • 这是编译器的实现问题,还是Objective-C++的语言限制?

内容的提问来源于stack exchange,提问作者Fabio A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:02:02