C++11 为什么不';通过标准库中的值传递的t std::chrono::duration实例?

C++11 为什么不';通过标准库中的值传递的t std::chrono::duration实例?,c++11,pass-by-reference,constexpr,pass-by-value,C++11,Pass By Reference,Constexpr,Pass By Value,根据: 持续时间中存储的唯一数据是Rep类型的勾号计数 但是,我注意到,例如: 按常量ref获取睡眠持续时间 同样,按常量ref计算持续时间 等等 (1) 有没有特别的原因来解释为什么它们不是通过值传递的 (1a)通过常量引用传递是否会悲观一些可能的constexpr优化?这是一个判断调用。与函数将要执行的操作(睡眠)相比,“内置”持续时间的常见情况的成本很小。而且我不想考虑包含定制Rep的定制持续时间的传递值的成本,该定制持续时间可能需要昂贵的复制成本(例如BigNum)。Re(1a):您是想

根据:

持续时间中存储的唯一数据是Rep类型的勾号计数

但是,我注意到,例如:

按常量ref获取睡眠持续时间

同样,按常量ref计算
持续时间

等等

(1) 有没有特别的原因来解释为什么它们不是通过值传递的


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

这是一个判断调用。与函数将要执行的操作(睡眠)相比,“内置”持续时间的常见情况的成本很小。而且我不想考虑包含定制
Rep
的定制持续时间的传递值的成本,该定制持续时间可能需要昂贵的复制成本(例如BigNum)。

Re(1a):您是想将其作为一般准则还是在
thread::sleep_for
future::wait_for
的上下文中?如果你是在后一种情况下问这个问题,对我来说毫无意义。你不可能优化一个函数,因为它需要在一定的时间内做一些事情。@RSahu让我思考的是,如果我调用
this\u thread::sleep\u(10ms)
编译器必须将
10ms
存储在堆栈上的某个地方,然后获取它的地址并将其传递给的
sleep\u,然后它将从地址中提取10并将其传递给底层的sleep函数。然而,通过值传递
10ms
将在寄存器中传递它,从而避免不必要的写入/读取。最后,它可能会被编译器优化掉,所以我可能不必担心。也许我应该把它作为一个单独的问题来问。既然你已经解释了,你的问题是有意义的。虽然您提到的所有操作所花费的时间与您传递给上述功能的时间相比,很可能会在今天的硬件中逐渐消失。啊,所以这是您的错。。。谢谢霍华德很好,关于大脚怪。。。我是说BigNum