C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了访问C 14 lambda捕获像结构成员大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
AFAIK,C 11/14在定义lambda时不允许原位定义新的返回类型.然而,似乎C 14 lambda捕获表达式基本上创建了一个或多个“成员”和一个operator()的匿名类型.那么为什么编译器不允许从lambda外面访问被捕获的成员.我的虚弱心灵不能处理C的复杂性,但它听起来像是一种合理的语言延伸?这是一个例子.
vector<string> words = { "Stack","Overflow" };
auto l = [w = words](){}; // almost like a C# anonymous type
cout << l.w[0]; // does not work.

解决方法

现状

当将lambda init-captures添加到语言时,这是讨论过的.目前的标准工作草案(N3797)说(在[expr.prim.lambda] p11)中)

该标准没有指定该成员的访问权限,因此不清楚这是否有效:

auto x = [n(0)] {};
int k = x.n; // ok?

初始化捕获的这个和其他一些规范问题导致了标准草案的国家机构意见GB3,由C核心工作组处理为core issue 1760.在讨论这个问题时,核心工作组决定了lambda的init捕获不应该是关闭对象的可访问成员.

第1760号决议(经CWG批准但尚未由全体委员会批准)的规定将改为说明:

这个新的措辞清楚地表明,init-capture不会添加一个关闭的对象的成员,而是像其他的lambda捕获一样.

作为语言扩展

使init捕获成为关闭类型的可访问成员当然是可能的(并且我在clang中初始化初始化捕获的实现在我实现了问题1760的解决之前).它也似乎是一个有用的功能,但它也允许在初始化捕获不可见的常见情况下违反lambda表达式的封装.

大佬总结

以上是大佬教程为你收集整理的访问C 14 lambda捕获像结构成员全部内容,希望文章能够帮你解决访问C 14 lambda捕获像结构成员所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: