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

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

Susan Sarandon
發布: 2024-11-03 16:49:30
原創
532 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板