2017-08-17 84 views
2

cppreference.com标准库中的值为什么不是std :: chrono :: duration实例传递的值?

存储在时间的唯一数据类型代表的蜱计数

不过,我已经注意到,例如:

this_thread::sleep_for需要sleep_duration通过const ref。

future::wait_for同样需要duration通过const ref。

(1)为什么它们没有通过值传递的任何特定原因?

(1a)通过const引用是否会传递一些可能的constexpr优化?

+0

Re(1a):你是在作为一般指南还是在'thread :: sleep_for'和'future :: wait_for'的上下文中提问?如果你在后者的背景下提出要求,那对我来说是毫无意义的。你不可能优化一个预计会在某段时间内做某事的函数。 –

+0

@RSahu让我思考的事情是,如果我调用'this_thread :: sleep_for(10ms)',编译器将不得不在某处存储'10ms',例如在堆栈上,然后将其地址传递给'sleep_for'然后从地址中提取10并将其传递给底层的睡眠功能。然而,按值传递'10ms'会将其传递到寄存器中,从而避免不必要的写入/读取。最终它可能会被编译器优化掉,所以我可能不应该担心。 –

+0

也许我应该问它作为一个单独的问题 –

回答

5

这是一个判断呼叫。 “内置”持续时间的常见情况的成本与功能要做的(睡眠)成本相比较小。而且我不想考虑包含自定义Rep的自定义持续时间传递值的传递成本(例如,BigNum)可能很昂贵。

+2

啊,所以这是你的错......谢谢霍华德。 ;)好点,关于BigFoot ...我的意思是BigNum –

相关问题