Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
7年前关闭。
Improve this question
对于嵌入式项目,我想使用
20.11.5.7 duration_cast
20.11.5.2持续时间观察者
从这一切来看,除非我弄错了,否则复制构造函数应该从原始拷贝获取rep,将其static_casts转换为新的rep类型(在这种情况下是相同的),并使用rep构造函数构造新的duration对象。至少是有效的。如果该实现还执行其他操作,那么请考虑将其丢弃。
不幸的是,我在标准中找不到对成员数据的限制,但是霍华德·辛南特(Howard Hinnant)链接的document可能比cppreference.com更可信,它指出:
听起来不错,如果性能很重要,请分析您的代码。如果没关系,这个问题毫无意义。
旧答案...
根据cppreference.com
因此,是的,值(value)传递似乎很快。正如我在评论中所建议的那样,
想要改善这个问题吗?更新问题,以便将其作为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