C ++如何解决此返回类型?

时间:2013-02-05 21:31:58

标签: c++ boost namespaces operator-overloading return

我正在阅读this article about parallel programming并且我遇到了return声明,我不太明白。我读过关于namespacesBoost::Chrono::steady_clock的内容,虽然我从未在实践中使用过,但我理解他们的目的。

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

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

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

The full code can be found here

5 个答案:

答案 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并不熟悉,但我谨慎地endstart重载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()方法。

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