首頁 >後端開發 >C++ >為什麼 C 編譯器不能從預設函數參數推導出模板類型參數?

為什麼 C 編譯器不能從預設函數參數推導出模板類型參數?

Susan Sarandon
Susan Sarandon原創
2024-11-05 07:55:02574瀏覽

Why Can't C   Compilers Deduce Template Type Parameters from Default Function Arguments?

為什麼編譯器不能從預設函數參數推導出模板類型參數?

儘管看似邏輯假設,C 編譯器無法自動推斷模板預設函數參數的型別參數。由於不同的原因,這在 C 03 和 C 11 中都成立。

在C 03 中,編譯器的無能源於顯式語言規範(第14.8.2/17 節):「模板類型參數不能是從函數預設參數的類型推導出來。」

在C 11 中,雖然可以指定預設模板參數,但必須明確提供。預設函數參數本身仍然無法用於模板參數推導:

<code class="cpp">void bar(int a, T b = 0.0f) { } // C++11</code>

C 11 標準(14.8.2.5/5) 定義了非推導上下文,其中包括:

  • “函數參數的參數類型中使用的模板參數,函數參數具有預設參數,該參數正在執行參數推導的呼叫中使用。參數來避免編譯錯誤。

以上是為什麼 C 編譯器不能從預設函數參數推導出模板類型參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn