【问题标题】:How does C++ resolve this return type?C++ 如何解析这个返回类型?
【发布时间】:2013-01-20 23:00:27
【问题描述】:
【问题讨论】:
标签:
c++
boost
namespaces
operator-overloading
return
【解决方案1】:
其实duration是一种数据类型,(end - start)求值为构造函数的参数。
然后在构造对象上调用count(),它恰好返回一个double,这是duration的第一个typename参数。 (duration <double, boost::milli>)
【解决方案2】:
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() 方法的结果。
【解决方案3】:
代码首先构造一个boost::chrono::duration<double, boost::milli> 类型的临时未命名 对象,将end - start 的任何内容传递给该对象的构造函数。
然后它在这个新的、未命名的对象上调用count() 方法。
无论该方法返回什么,该函数都返回什么。
【解决方案4】:
这里分为三个部分。第一部分是简单的end - start。我不熟悉 Boost,但我敢打赌 end 和 start 会重载 operator-() 以减去两次并生成 boost:chrono:duration<> 对象。
这个对象随后被传递给boost::chrono::duration<double, boost::milli> 的构造函数。我猜想这用于将持续时间从减法提供的任何格式转换为在此模板中看到的格式,即double-precision 持续时间,表示毫秒。
最后,在这个boost::chrono::duration 对象上调用.count() 方法,它可能将持续时间的值作为数字返回(我猜是double)。
【解决方案5】:
这么多:boost::chrono::duration <double, boost::milli> (end - start) 正在构造一个对象,就像 int(x) 所做的那样。
然后在那个(临时)对象上调用.count(),然后返回的就是返回的内容。