首頁 >後端開發 >C++ >C 中的隱式轉換可以涉及多個使用者定義的轉換嗎?

C 中的隱式轉換可以涉及多個使用者定義的轉換嗎?

Susan Sarandon
Susan Sarandon原創
2024-11-03 16:49:30529瀏覽

Can Implicit Conversions in C   Involve Multiple User-Defined Conversions?

C 隱式轉換:澄清

最近,對先前有關C 中替代轉換的答案的評論引發了有關隱式轉換準確性的問題。為了提供澄清,我們將檢查以下程式碼段:

#include <string>

struct A {
    A( const std::string &amp; s ) {}
};

void func( const A &amp; 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中文網其他相關文章!

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