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.
相关产品推荐
相关产品推荐

