繁体   English   中英

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

[英]c++11 use chrono as syntactic sugar

我使用来自外部库的函数,其接口如下: 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) “水下岩石”?

  1. std::chrono::milliseconds(10).count() != 10吗?

不。您使用的duration构造函数可以:

3)构造一个带有r滴答的持续时间。

count()简单地:

返回此持续时间的滴答数。


  1. 是否有任何阻止现代编译器(clang,gcc,VC ++)将f(std::chrono::milliseconds(10).count())f(10) “水下岩石”?

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


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

我个人认为这值得怀疑。 如果f()本身花费了一个duration ,则f(std::chrono::milliseconds(10))本身肯定比仅f(10)更好,而且附加的好处是无论您传递的持续时间如何都能正常工作。 但是,如果只需要输入int ,您就可以通过输入更多内容来给自己一种安全的错觉。 所以我不确定个人情况是否会更好。

  1. 不。但是请注意结果不是毫秒,而是滴答声。 因此std::chrono::seconds(10).count()也为10。因此,您可能想先对std::chrono::milliseconds变量进行赋值。

  2. 不可以,因为该方法是constexpr 因此,任何好的编译器都应该尊重这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM