問題:
儘管能夠定義如下類模板預設參數,如以下類別模板參數所示:
<code class="cpp">template <typename T = int> class Foo { };</code>
為什麼有必要在下面的例子中實例化類別時指定模板參數?
<code class="cpp">Foo<int> me;</code>
答案:
與問題所暗示的相反,沒有必要明確指定使用預設範本參數定義類別範本時的範本參數。從C 17 開始,以下程式碼有效:
<code class="cpp">Foo me;</code>
但是,在C 17 之前,需要以下語法:
<code class="cpp">Foo<> me;</code>
這意味著模板參數必須是即使它們是空的也存在。此行為類似於使用單一預設參數呼叫函數,其中 foo() 和不帶參數的 foo 都是有效表達式,但只有前者會呼叫該函數。
透過引入預設模板參數,C 11透過提供一種為模板參數設定預設值的方法,可以更輕鬆地使用類別模板。此外,正如 C 11 和 C 17 之間的行為變化所證明的那樣,這種語法隨著時間的推移而不斷發展以提高可用性。
以上是為什麼在 C 中使用預設模板參數時仍然需要指定模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!