gla*_*des 2 c++ lambda move-semantics
我有一个计时器的精简示例,我希望可以使用任何类型的可调用来实例化它。为了提高效率,是否建议预防性地将可调用对象移至数据成员中?
#include <concepts>
#include <cstdio>
#include <string>
#include <utility>
template <std::invocable Cb>
class timer {
public:
timer(Cb cb)
: cb_ { std::move(cb) }
{
}
auto call()
{
cb_();
}
private:
Cb cb_;
};
int main()
{
std::string something_to_print = "Hello World!\n";
timer some_timer([&]() { printf(something_to_print.c_str()); });
some_timer.call();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果移动或复制 lambda,我看不到程序集有任何差异。它有什么区别吗?
您的 lambda 仅具有参考捕获。移动左值引用与复制它的作用完全相同。如果你有[=]
捕获,这个举动实际上会产生一些作用。
是否这样做的答案一般是:“视情况而定”。Wrt 性能:测量。