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

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

Susan Sarandon
Susan Sarandon原創
2024-10-31 22:09:021066瀏覽

Can Multiple Implicit User-Defined Conversions Be Applied in C  ?

C 隱式轉換:澄清

在最近的討論中,C 中隱式轉換的有效性受到質疑。具體來說,問題圍繞著是否允許多個隱式使用者定義轉換而展開。為了闡明這個問題,讓我們檢查以下程式碼:

<code class="cpp">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 標準證實了這一點:

<code class="cpp">4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.</code>

在這種情況下,兩個隱式轉換(字串到const char 和const char 到A)的存在違反了此規則,導致編譯器錯誤。因此,C 中禁止多個隱式使用者定義轉換的斷言是準確的。

以上是C 中可以套用多個隱式使用者定義轉換嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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