Pre*_*nik 6 c++ lambda capture c++11
我注意到允许一个人使用未在lambda中捕获的变量的编译时特性,例如call sizeof,decltypefunctions,例如:
#include <iostream>
void f ()
{
}
int main()
{
int y = 13;
auto x = []{ return sizeof (decltype (y));};
std::cout << x () << '\n';
}
Run Code Online (Sandbox Code Playgroud)
由于这两个g++和clang++没有错误编译这个节目,我想这是标准允许.
这似乎有点误导我,即使我想不出任何会导致错误的特殊恶意案件.但我想知道这个功能的实际用例是什么?
小智 5
您可以使用此示例的一个简单示例是,如果您有一个lambda,您希望以相同的类型执行计算y,因为您将分配结果y.
此外,认为它周围的其他方法:什么是捕获的好处y的[=]{ return x + sizeof (y);}?这样做绝对没有意义,因为y实际上并没有在lambda中使用.捕获y只会增加完全没有意义的开销.不仅如此,它甚至可能使编译器的内部工作复杂化,因为它们不再能够简单地优化y掉,sizeof(y)不再在语义上等同于sizeof(int).
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |