我想知道为什么= 捕获默认模式禁止this在C++ lambda表达式的捕获列表中.
那是,
[=, this]{ }; // error
[&, this]{ }; // OK
Run Code Online (Sandbox Code Playgroud)
这由C++ 11 5.1.2/8指定.
- 如果lambda-capture包含一个捕获默认值为&,则lambda-capture中的标识符不应以&开头.
- 如果lambda-capture包含一个=的capture-default,则lambda-capture不应该包含这个,并且它包含的每个标识符都应以&开头.
问:这条规则有什么理由或背景故事吗?
this只能通过复制捕获,永远不能通过引用捕获.即使您只指定了[&],this如果使用了odr ,也可以通过复制隐式捕获.因此,[=, this]是一个错误,因为=已经this通过副本隐式捕获,而&in [&, this]表示通过引用捕获并且不隐式捕获this(除非它使用了odr)
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |