我想知道为什么=
捕获默认值模式禁止this
in 捕获列表 of C++ 拉姆达表达式.
That is,
[=, this]{ }; // error
[&, this]{ }; // OK
这是由 C++11 5.1.2/8 指定的。
- 如果 lambda-capture 包含捕获默认值 &,则
lambda 捕获中的标识符不得以 & 开头。
- 如果 lambda 捕获包含捕获默认值 =,则
lambda-capture 不应包含此及其包含的每个标识符
前面应加 &。
问:这个规定有什么理由或背景吗?
this
只能通过复制来捕获never引用。即使您仅指定[&]
, this
如果使用了 odr,则可以通过副本隐式捕获。所以,[=, this]
是一个错误,因为=
已经隐式捕获this
通过复制而&
in [&, this]
表示通过引用捕获并且不隐式捕获this
(除非使用了 odr)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)