在C語言中,當調用的函數沒有原型時,編譯器執行默認參數升級。默認參數促銷何時發生?
但是C++怎麼樣?默認參數促銷何時會發生?
在C++ 11標準5.2.2/7:
當存在對於給定的參數沒有參數,該參數是 以這樣的方式使得接收功能能夠獲得值傳遞 通過調用va_arg(18.10)的論點。 [注意:此段 不適用於傳遞給函數參數包的參數。 函數參數包在模板實例化 (14.5.3)期間展開,因此實際調用功能模板專用化時,每個此類參數都有相應的參數。結束符 參數表達式執行了左值到右值(4.1),數組到指針(4.2)和 函數到指針(4.3)的標準轉換。具有(可能是cv合格)類型 std :: nullptr_t的參數被轉換爲void *(4.10)類型。在這些 轉換之後,如果參數沒有算術,枚舉,指針,成員指針或類類型,則該程序是格式不正確的。 傳遞具有非平凡複製構造函數,非平凡移動構造函數, 或非平凡析構函數,並且沒有相應參數的類類型(第9章) 的潛在評估參數是 有條件地支持實現定義語義。如果參數 的整數或枚舉類型受 積分促銷(4.5)或浮點類型( )影響的浮點促銷(4.6),則參數的值爲 轉換爲促銷在通話之前鍵入。這些促銷活動是 ,被稱爲默認參數促銷活動。
該段落仍未指定默認參數提升何時發生。沒有明確的邏輯,這一段可能會說得太多。我努力概述邏輯但失敗了。我不熟悉調用va_arg的。
希望你能幫助我。