Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

7年前关闭。



Improve this question




对于嵌入式项目,我想使用std::chrono::seconds表示超时值,尤其是出于类型安全性的原因。这要求std::chrono::seconds可以从无符号int类型快速构造,并且按值传递也必须非常快。是这样吗

最佳答案

更新。似乎有时我会费心检查标准。

这是标准关于持续时间拷贝构造的说明。

20.11.5.1
持续时间构造函数

template <class Rep2, class Period2>
constexpr duration(const duration<Rep2, Period2>& d);


duration_cast<duration>(d).count()

20.11.5.7 duration_cast
template <class ToDuration, class Rep, class Period>
constexpr ToDuration duration_cast(const duration<Rep, Period>& d);


ratio_divide<Period, typename ToDuration::period>


ToDuration(static_cast<typename ToDuration::rep>(d.count()))

20.11.5.2持续时间观察者



从这一切来看,除非我弄错了,否则复制构造函数应该从原始拷贝获取rep,将其static_casts转换为新的rep类型(在这种情况下是相同的),并使用rep构造函数构造新的duration对象。至少是有效的。如果该实现还执行其他操作,那么请考虑将其丢弃。

不幸的是,我在标准中找不到对成员数据的限制,但是霍华德·辛南特(Howard Hinnant)链接的document可能比cppreference.com更可信,它指出:



听起来不错,如果性能很重要,请分析您的代码。如果没关系,这个问题毫无意义。

旧答案...

根据cppreference.com



因此,是的,值(value)传递似乎很快。正如我在评论中所建议的那样,std::chrono::duration<unsigned int>应该稍微更高效,并且只要原始unsigned int不溢出,您就不必担心溢出。

关于c++ - std::chrono::seconds是轻量级的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21626236/

10-12 15:02