2

我正在阅读这篇关于并行编程的文章,我遇到了一个return我不太理解的声明。我已经阅读了有关命名空间Boost::Chrono::steady_clock的信息,尽管我从未在实践中使用过它们,但我了解它们的用途。

这是run_tests函数中让我感到困惑的代码行:

return boost::chrono::duration <double, boost::milli> (end - start).count();

这里到底发生了什么?对象名称不应该放在前面.count()吗?-Chrono中的运算符是否有一些重载?

完整的代码可以在这里找到

4

5 回答 5

9
       boost::chrono::duration

是类模板的名称。

       boost::chrono::duration <double, boost::milli>

是一个类模板的实例化,也就是一个类。

       boost::chrono::duration <double, boost::milli> (end - start)

创建该类型的临时对象,使用表达式的值进行初始化end-start

       boost::chrono::duration <double, boost::milli> (end - start).count()

调用.count()临时对象的方法。

return boost::chrono::duration <double, boost::milli> (end - start).count();

返回.count()方法的结果。

于 2013-02-05T21:36:48.033 回答
6

This much:boost::chrono::duration <double, boost::milli> (end - start)是在构造一个对象,很像int(x)

然后.count()在该(临时)对象上调用,并且从中返回的是返回的内容。

于 2013-02-05T21:34:56.037 回答
2

这里分为三个部分。第一部分是简单的end - start。我不熟悉 Boost,但我敢打赌endstart做超载operator-()以减去两次并产生一个boost:chrono:duration<>对象。

然后将该对象传递给 的构造函数boost::chrono::duration<double, boost::milli>。我猜想这用于将持续时间从减法提供的任何格式转换为在此模板中看到的格式,即double表示毫秒的精度持续时间。

最后,.count()在这个boost::chrono::duration对象上调用该方法,它可能将持续时间的值作为一个数字返回(我猜是一个double)。

于 2013-02-05T21:35:37.577 回答
1

实际上duration是一种数据类型,(end - start)计算为构造函数的参数。

然后count()在构造的对象上调用,它恰好返回 a double,这是 的第一个typename参数duration。( duration <double, boost::milli>)

于 2013-02-05T21:35:33.770 回答
1

代码首先构造一个临时的未命名类型的对象boost::chrono::duration<double, boost::milli>,将任何end - start内容传递给该对象的构造函数。

count()然后它在这个新的、未命名的对象上调用该方法。

该方法返回的内容就是该函数返回的内容。

于 2013-02-05T21:36:24.320 回答