我使用外部库中的函数,其界面如下:void f(int timeout);
。
其中timeout
以毫秒为单位。为了使我的代码更具可读性,我希望以这样的形式使用chrono
:
f(std::chrono::milliseconds(10).count());
是否有std::chrono::milliseconds(10).count() != 10
?
是任何"水下岩石"阻止现代编译器(clang,gcc,VC ++)将f(std::chrono::milliseconds(10).count())
转换为f(10)
?
答案 0 :(得分:2)
- 有可能
醇>std::chrono::milliseconds(10).count() != 10
?
没有。您正在使用的duration
constructor会:
3)构造一个
r
刻度的持续时间。
和count()
只是:
返回此持续时间的刻度数。
- 是任何"水下岩石"阻止现代编译器(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 :(得分:1)
没有。但要注意结果不是毫秒,而是滴答声。因此,std::chrono::seconds(10).count()
也是10.因此,您可能希望先对std::chrono::milliseconds
变量进行分配。
不,因为该方法是constexpr
。所以任何好的编译器都应该尊重它。