当前位置: 首页 > 知识库问答 >
问题:

内联空格addWG(任务任务)vs内联空格addWG(常量任务

叶桐
2023-03-14

我曾经通过const传递每个复杂结构

考虑这样的例子:

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()是一种常用方法。

我猜常量

我知道inline实际上只是编译器的建议,而不是命令。但是它是否改变了常量

我正在与VC 2013合作,我不太关注gcc。

注意,App::addTask调用Timeline::add哪个调用vector::push_back。因此,参数被多次传递-我是否应该将App::addTaskTimeline::add都设置为相同的“类型”(const)


共有1个答案

廖永长
2023-03-14

是否传递值或const

当然,当通过值传递时,值碰巧是左值,也就是说,要移动它而不是复制它,您需要在传递时d::移动()它(无论如何不能省略进一步的复制):

void addTask3(Task task) { timeline.add(std::move(task)); }

顺便说一句,您省略了完美的转发版本:

template <typename T>
void addTask4(T&& task) { timeline.add(std::forward<T>(task)); }

该版本也不允许删除副本,但它可能有一个优势,即根据适当的转换在现场创建一个更昂贵的版本。

不过,我没有任何基准来确定差异。如果有人能提出一个体面的方法来衡量差异,我很乐意在我的基准套件中添加一个相应的基准,并用结果补充这个答案。

 类似资料:
  • 我正在将一些用于iOS和OSX的Ant构建转换为Gradle。创建了以下内容: 这可能很简单,但我做错了什么?如何从自定义类中调用exec任务?

  • 我尝试通过以下方式部署ElasticsearchSinkConnector POST/连接器 但是,当我通过以下方式检查状态时,它成功部署了 得到 /connectors/elasticsearch-sink/status 是空数组: 我找到了这个 Kafka 连接:没有为连接器创建任何任务 但是,我在里面尝试了这两个答案,都更改了名称,并删除了ElasticsearchSinkConnector

  • 问题内容: VS 哪种被认为是 正确的 (语法上)且性能最高的方法,为什么? 后一个示例中的语法对我来说似乎更合乎逻辑,但我的假设是JOIN会更快。 我看过查询计划,还无法从中解密任何内容。 查询计划1 查询计划2 问题答案: 两种语法有不同的用途。假设使用Join语法,则需要StockToCategory和Category表中的某些内容。如果每个类别的StockToCategory表中有多个条目

  • 要并行或异步运行一些东西,我可以使用ExecutorService:

  • 3.3.3 Android 任务 Android plugin 使用了同样的约定规则以和其他插件保持兼容,并且又添加了一些额外的引导任务: assemble 这个任务会汇集工程的所有输出。 check 这个任务会执行所有校验检查 connectedCheck 运行 checks 需要一个连接的设备或者模拟器,这些checks将会同时运行在所有连接的设备上。 deviceCheck 通过 API 连

  • 首先,我想说我已经看到了这个问题:camunda找不到id为task的任务,任务为null,这个问题不是我的问题。 我使用jersey构建了一个rest api,我使用的是camunda工作流引擎。 我使用了jersey-quickstart-grizzly maven archtype,然后定义了如下流程资源: 这是ProcessEngineManager.java: 在Xml中: 我在src/