gpt4 book ai didi

c++ - 我应该预防性地 move 可调用对象(例如 lambda 吗?)

转载 作者:行者123 更新时间:2023-12-02 01:26:16 25 4
gpt4 key购买 nike

我有一个计时器的精简示例,我希望可以使用任何类型的可调用来实例化它。为了提高效率,是否建议预防性地将可调用对象移至数据成员中?

#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;
}

如果我 move 或复制 lambda,我在程序集中看不到任何差异。它有什么区别吗?

最佳答案

您的 lambda 仅具有引用捕获。 move 左值引用与复制它的作用完全相同。如果您有[=]捕获,则该 move 实际上会执行一些操作。

一般情况下是否这样做的答案是:“视情况而定”。 W.r.t.性能:测量。

关于c++ - 我应该预防性地 move 可调用对象(例如 lambda 吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74560021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com