簡體   English   中英

C ++如何解決此返回類型?

[英]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,但是我打算endstart重載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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM