2017-08-17 51 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 –

相關問題