为什么C ++引入duration_cast而不是使用static_cast?

时间:2017-05-31 00:54:02

标签: c++ casting duration

我正在查看一些使用duration_cast的代码。看着它我想知道为什么没有使用static_cast,因为static_cast生活中的目的是在类型之间进行转换。

为什么C ++需要一个新的运算符来在不同时间之间进行转换?为什么没有使用static_cast

也许我不理解C ++在毫秒,微秒,纳秒等之间的差异。出于某种原因,我认为答案很明显或在Stack Overflow上讨论,但我没有发现它(还)。

2 个答案:

答案 0 :(得分:5)

在没有精度损失风险的情况下,已经有时间间隔的直接转换。如果存在精度损失的风险,则需要duration_cast

因此,{p> duration_cast不是故意转换的操作员。

static_cast不合适,因为不同的持续时间类型不相关。它们完全是不同的类,恰好支持相同的概念。

e.g:

#include <chrono>

int main()
{
  using namespace std::literals;

  // milliseconds    
  auto a = 10ms;

  // this requires a duration-cast
  auto lossy = std::chrono::duration_cast<std::chrono::seconds>(a);

  // but this does not
  auto not_lossy = std::chrono::nanoseconds(a);
}

答案 1 :(得分:2)

多年来我一直在重新审视这个问题,我现在认为这可能是我的设计错误。

我目前正在尝试更多地依赖显式转换语法来进行不应隐式进行的转换,而不是&#34;命名转换语法&#34;。

例如:

https://howardhinnant.github.io/date/date.html#year

year y = 2017_y;
int iy = int{y};  // instead of iy = y.to_int()