[英]How does C++ resolve this return type?
我正在閱讀關於並行編程的這篇文章 ,我遇到了一個我不太了解的return
聲明。 我已經閱讀過名稱空間和Boost :: Chrono :: steady_clock ,雖然我從來沒有在實踐中使用過 ,但我理解他們的目的。
這是run_tests
函數中的代碼行,讓我感到困惑:
return boost::chrono::duration <double, boost::milli> (end - start).count();
這到底發生了什么? 不應該在.count()
之前出現對象名稱嗎? 在Chrono中是否有一些-
運算符超載?
boost::chrono::duration
是類模板的名稱。
boost::chrono::duration <double, boost::milli>
是類模板的實例化,即類。
boost::chrono::duration <double, boost::milli> (end - start)
創建該類型的臨時對象,使用表達式end-start
的值初始化。
boost::chrono::duration <double, boost::milli> (end - start).count()
調用臨時對象的.count()
方法。
return boost::chrono::duration <double, boost::milli> (end - start).count();
返回.count()
方法的結果。
這么多: boost::chrono::duration <double, boost::milli> (end - start)
正在構造一個對象,就像int(x)
一樣。
然后在該(臨時)對象上調用.count()
,並從中返回返回的內容。
這里有三個部分。 第一部分是簡單的end - start
。 我不熟悉Boost,但是我打算end
並start
重載operator-()
來減去兩次並產生一個boost:chrono:duration<>
object。
然后將此對象傳遞給boost::chrono::duration<double, boost::milli>
的構造函數。 我猜這可以用來將持續時間從提供的減法格式轉換為在此模板中看到的格式,即表示毫秒的double
精度持續時間。
最后,在此boost::chrono::duration
對象上調用方法.count()
,該對象可能會將持續時間的值作為數字返回(我猜是double
)。
實際上, duration
是一種數據類型, (end - start)
求值為構造函數的參數。
然后在構造的對象上調用count()
,它碰巧返回一個double
,這是duration
的第一個typename
參數。 ( duration <double, boost::milli>
)
代碼首先構造一個類型為boost::chrono::duration<double, boost::milli>
的臨時未命名對象,傳遞任何end - start
是該對象的構造函數。
然后它在這個新的未命名對象上調用count()
方法。
該方法返回的是該函數返回的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.