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