【发布时间】:2018-01-26 04:02:01
【问题描述】:
持续时间中存储的唯一数据是 Rep 类型的滴答计数。
但是,我注意到例如:
this_thread::sleep_for 通过 const ref 获取 sleep_duration。
future::wait_for 同样通过 const ref 获取 duration。
等等
(1) 有什么特殊原因说明它们不是按值传递的吗?
(1a) 通过 const 引用传递是否会影响一些可能的 constexpr 优化?
【问题讨论】:
-
Re (1a):您是作为一般准则还是在
thread::sleep_for和future::wait_for的上下文中询问?如果您在后者的上下文中询问,那对我来说根本没有意义。您无法优化预期会在一定时间内执行某项操作的函数。 -
@RSahu 让我想到的是,如果我调用
this_thread::sleep_for(10ms),编译器将不得不将10ms存储在某个地方,例如在堆栈上,然后将其地址传递给sleep_for然后将从地址中提取 10 并将其传递给底层的睡眠函数。而按值传递10ms会将其传递到寄存器中,从而避免不必要的写入/读取。最后它可能会被编译器优化掉,所以我可能不应该担心。 -
也许我应该把它作为一个单独的问题来问
-
既然你已经解释过了,你的问题就说得通了。尽管与您传递给上述函数的持续时间相比,您提到的所有操作所花费的时间在今天的硬件中很可能会减少。
标签: c++11 pass-by-reference constexpr pass-by-value