c ++ 11使用chrono作为语法糖

时间:2016-04-25 14:09:04

标签: c++ c++11

我使用外部库中的函数,其界面如下:void f(int timeout);。 其中timeout以毫秒为单位。为了使我的代码更具可读性,我希望以这样的形式使用chrono

f(std::chrono::milliseconds(10).count());
  1. 是否有std::chrono::milliseconds(10).count() != 10

  2. 是任何"水下岩石"阻止现代编译器(clang,gcc,VC ++)将f(std::chrono::milliseconds(10).count())转换为f(10)

2 个答案:

答案 0 :(得分:2)

  
      
  1. 有可能std::chrono::milliseconds(10).count() != 10
  2.   

没有。您正在使用的duration constructor会:

  

3)构造一个r刻度的持续时间。

count()只是:

  

返回此持续时间的刻度数。

  
      
  1. 是任何"水下岩石"阻止现代编译器(clang,gcc,VC ++)将f(std::chrono::milliseconds(10).count())转换为f(10)
  2.   

不。 duration构造函数是constexpr,就像您正在使用的count()成员函数一样 - 对于编译器而言,这应该是一个非常简单的优化。

  

使我的代码更具可读性[...]

就个人而言,我觉得这是有问题的。如果f()本身采用 duration,那么f(std::chrono::milliseconds(10))本身肯定比仅仅f(10)更好,而且无论你有多长时间,都会带来额外的好处传入将正常工作。但如果只是采用int,你只需要输入更多的内容就可以给自己带来安全感。因此,我不确定它是否更好,个人而言。

答案 1 :(得分:1)

  1. 没有。但要注意结果不是毫秒,而是滴答声。因此,std::chrono::seconds(10).count()也是10.因此,您可能希望先对std::chrono::milliseconds变量进行分配。

  2. 不,因为该方法是constexpr。所以任何好的编译器都应该尊重它。