Mic*_*ser 2 c++ std c++-chrono
在文件/usr/include/c++/4.8中的gcc 4.84中我们有
namespace std
{
typedef duration<int64_t, nano> nanoseconds;
Run Code Online (Sandbox Code Playgroud)
为什么纳秒的表示类型是有符号整数类型?为什么不签名?我们什么时候可以有一个负值的持续时间对象?
我们什么时候可以有一个负值的持续时间对象?
任何时候你想表示一个负面的持续时间!
例如"提前十秒" std::chrono::seconds(-10),如果你把它添加到某些,time_point t那么你得到的time_point 是十秒之前t.
标准说"A duration类型测量两个时间点之间的时间(time_points)." 它并没有说它只能测量非减少时间点之间的时间.这意味着它可以用来衡量之间的时间t1,t2甚至是t2 < t1.要做到这一点,你需要一个负值.
如果持续时间无法签名,那么,为了表示一个意味着"更早"而不是"更晚"的偏移,你必须使用类似的std::pair<bool, duration>地方,bool无论是正偏移还是负偏移,然后你必须做:
chrono::time_point adjust(chrono::time_point t, pair<bool, duration> offset)
{
if (offset.first) // positive
return t + offset.second;
else // negative
return t - offset.second;
}
Run Code Online (Sandbox Code Playgroud)
这是愚蠢的.通过使用有符号整数,语言和硬件已经更加明确和有效地支持了这一点.
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |