首頁 > 後端開發 > C++ > 省略號 (...) 標記在 C 11 可變參數範本中如何運作?

省略號 (...) 標記在 C 11 可變參數範本中如何運作?

Barbara Streisand
發布: 2024-10-30 01:03:28
原創
837 人瀏覽過

How does the ellipsis (...) token work in C  11 variadic templates?

可變參數模板和省略號(“...”)標記

在C 11 中,可變參數模板允許靈活數量的模板參數。定義可變參數範本時,省略號 (...) 標記起著至關重要的作用。

解包與打包

省略號的位置決定其功能:

  • 解包(右側): 在表達式的右側使用時,...解包模板參數包。解包模式以逗號分隔,取代實際函數呼叫中的省略號。
  • 打包(左側): 當放置在左側時,... 將參數打包到模板參數包。打包的參數在函數中可作為單一實體使用。

解包範例

考慮以下可變參數範本函數:

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&amp;&amp;... args )
{
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>
登入後複製

使用多個參數呼叫make_unique 時,省略號(在std::forward(Args>(args)... 中)允許函數接受可變數量的參數。省略號解壓縮Args 參數包,從而產生以下擴展表達式:

<code class="cpp">std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), ...</code>
登入後複製

模板和函數參數中的省略號位置

在模板參數列表中,省略號放置在中間,表示參數pack 在函數參數列表中繼續。有額外的模板參數(例如非可變參數)。打包到單一實體。參數初始化器建立陣列

定義從多個基底類別繼承的類別(透過公用Mixins... 語法)

以上是省略號 (...) 標記在 C 11 可變參數範本中如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板