C 隱式轉換:澄清
最近,對先前有關C 中替代轉換的答案的評論引發了有關隱式轉換準確性的問題。為了提供澄清,我們將檢查以下程式碼段:
#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 }
最初,斷言第一個函數呼叫會導致錯誤,因為不存在從 const char * 到 A 的直接轉換。但是,存在從字串到 A 的轉換。利用此轉換將涉及多個步驟,這通常是被禁止的。 g 4.4.0 和 Comeau 編譯器支援這一斷言。
經過進一步調查,C 標準(12.3.4) 闡明了這個問題,指出最多有一個用戶定義的轉換(構造函數或轉換函數)可以隱式應用於單一值。此裁決與觀察到的行為一致,並澄清了隱式轉換的限制。
總而言之,單一值只允許一次隱式使用者定義轉換。在提供的程式碼中,呼叫 func("one") 失敗,因為它需要多次隱式轉換,這是不允許的。
以上是C 中的隱式轉換可以涉及多個使用者定義的轉換嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!