gpt4 book ai didi

c++ - inline void addTask(Task task) vs inline void addTask(const Task &task)

转载 作者:行者123 更新时间:2023-11-28 00:20:38 27 4
gpt4 key购买 nike

<分区>

我过去常常通过 const & 或至少通过 & 来传递每个复杂结构。但是有了新的 std::move 语义和编译器今天提供的所有优化,它仍然是一个选择吗?

考虑这样的例子:

struct Task{
unsigned timeMS;
void(*function)(unsigned, unsigned) = 0;
Task(unsigned timeMS, void(*function)(unsigned, unsigned))
: timeMS(timeMS), function(function){}
};

class Timeline{
std::vector<Task> tasks;
...
};

class App{
...
public:
inline void addTask1(const Task &task){ timeline.add(Task); }
inline void addTask2(Task &task){ timeline.add(Task); }
inline void addTask3(Task task){ timeline.add(Task); }
};

addTask1、addTask2、addTask3 中的哪一个是可行的方法?假设 App::addTask() 是一个经常使用的方法。

我想 const & 需要创建一个拷贝,但我了解到事情并不像看起来那么简单。提及 RVO ( http://en.wikipedia.org/wiki/Return_value_optimization ) 就足够了 - 我确信还有更多的事情需要考虑(我还没有意识到)。

我知道 inline 实际上只是对编译器的建议,而不是命令。但它是否改变了 const & vs & vs by value 战斗?

我正在使用 VC++ 2013,我不太关注 gcc。

附言请注意,App::addTask 调用 Timeline::add,后者调用 vector::push_back。所以参数被传递了不止一次 - 我是否应该使 App::addTaskTimeline::add 具有相同的“类型”( const & vs & vs by value).

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