首頁 >後端開發 >C++ >C 中的單一操作可以套用多個隱式轉換嗎?

C 中的單一操作可以套用多個隱式轉換嗎?

Linda Hamilton
Linda Hamilton原創
2024-11-02 22:22:291051瀏覽

Can Multiple Implicit Conversions Be Applied in a Single Operation in C  ?

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

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