C 中的隱式轉換
在最近關於C 中隱式轉換的討論中,出現了關於單一操作中多個轉換的適用性的問題。為了闡明這個概念,讓我們檢查以下程式碼:
<code class="cpp">#include <string> struct A { A( const std::string & s ) {} }; void func( const A & a ) { } int main() { func( "one" ); // error func( A("two") ); // ok func( std::string("three") ); // ok }</code>
如最初所述,第一個函數呼叫是一個錯誤,因為沒有從 const char* 到 A 的直接轉換。存在到 A 的字串,利用它需要兩次連續轉換。
依據C 標準(SC22-N-4411.pdf),第12.3.4 節標題為「轉換」:
」最多一個使用者定義的轉換(建構子或轉換函數)隱式應用於單一值。然後轉換為A)到參數“one”的隱式轉換。
因此,第一個函數呼叫的原始斷言將結果錯誤是正確的。 C 標準明確規定只允許一種隱式使用者定義轉換,從而阻止編譯器執行必要的步驟來滿足函數的參數類型。
以上是C 中的單一操作可以套用多個隱式轉換嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!