我正在阅读this article about parallel programming并且我遇到了return
声明,我不太明白。我读过关于namespaces和Boost::Chrono::steady_clock的内容,虽然我从未在实践中使用过,但我理解他们的目的。
这是run_tests
函数中的代码行,让我感到困惑:
return boost::chrono::duration <double, boost::milli> (end - start).count();
这到底发生了什么?对象名称不应该出现在.count()
之前吗? Chrono中的-
运算符是否有一些超载?
答案 0 :(得分: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()
方法的结果。
答案 1 :(得分:6)
这么多:boost::chrono::duration <double, boost::milli> (end - start)
正在构建一个对象,就像int(x)
那样。
然后在该(临时)对象上调用.count()
,并从中返回返回的内容。
答案 2 :(得分:2)
这里有三个部分。第一部分是简单的end - start
。我对Boost并不熟悉,但我谨慎地end
和start
重载operator-()
来减去两次并生成一个boost:chrono:duration<>
对象。
然后将此对象传递给boost::chrono::duration<double, boost::milli>
的构造函数。我猜这可以将持续时间从减法提供的格式转换为此模板中的格式,即double
- 表示毫秒的精度持续时间。
最后,在.count()
对象上调用方法boost::chrono::duration
,这可能会将持续时间的值作为数字返回(我猜是double
)。
答案 3 :(得分:1)
实际上duration
是一种数据类型,(end - start)
计算构造函数的参数。
然后在构造的对象上调用count()
,它恰好返回double
,这是typename
的第一个duration
参数。 (duration <double, boost::milli>
)
答案 4 :(得分:1)
代码首先构造一个类型为boost::chrono::duration<double, boost::milli>
的临时未命名对象,将任何end - start
传递给该对象的构造函数。
然后在这个新的未命名对象上调用count()
方法。
该方法返回的是该函数返回的内容。