如何解决是否在C ++编译时缓存了lambda?
分配lambda很昂贵。在MSVC上,我上次检查时分配了〜128个字节。这使得在循环中创建lambda成为严重的性能问题。
在Python中,所有文字都像constexpr
一样对待,它们被计算(如果需要,像x = 10 * 25
一样),然后在编译时进行缓存,并在需要时进行简单替换。
我想知道这是否是用C ++完成的,因为类似这样的东西...
for (auto thing: things)
[](auto x){ /* do stuff */ }(thing);
...看起来既可以多次分配lambda,又可以使用我上面介绍的自动缓存。
那么,这是C ++中的性能问题吗?将lambda存储在for循环之前的变量中并使用该变量还是更好呢?
解决方法
由于您的lambda不会被捕获并立即被调用,因此任何值得赞扬的编译器都会将lambda提升为静态函数,并以零开销内联该调用。
您确定不会将lambda与std::function
混淆吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。