亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++隱式轉換

C ++隱式轉換

C++
慕容森 2019-12-06 11:06:49
關于我最近的答案“ 在C ++中還可以使用其他有用的強制轉換”的幾點評論表明,我對C ++轉換的理解是錯誤的。為了澄清問題,請考慮以下代碼:#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}我的斷言是,第一個函數調用是一個錯誤,因為沒有從const char *到A的轉換。從字符串到A的轉換,但是使用此轉換將涉及多個轉換。我的理解是不允許這樣做,這似乎已由g ++ 4.4.0和Comeau編譯器確認。使用Comeau時,出現以下錯誤:"ComeauTest.c", line 11: error: no suitable constructor exists       to convert from "const char [4]" to "A"      func( "one" );                    // error如果您可以在此處或原始答案中指出我錯了,最好參考C ++標準,請這樣做。C ++標準的答案似乎是:最多將一個用戶定義的轉換(構造函數或轉換函數)隱式應用于單個值。感謝Abhay提供報價。
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

我認為Sharptooth的答案很準確。標題為“轉換”的C ++標準(SC22-N-4411.pdf)第12.3.4節明確規定,僅允許進行一次隱式的用戶定義轉換。

1類對象的類型轉換可以由構造函數和轉換函數指定。這些轉換稱為用戶定義的轉換,用于隱式類型轉換(第4章),初始化(8.5)和顯式類型轉換(5.4、5.2.9)。

2用戶定義的轉換僅適用于明確的轉換(10.2,12.3.2)。轉換遵守訪問控制規則(第11條)。歧義解決后將應用訪問控制(3.4)。

3 [注意:有關在函數調用中使用轉換的討論以及下面的示例,請參見13.3。—尾注]

4最多將一個用戶定義的轉換(構造函數或轉換函數)隱式應用于單個值。


查看完整回答
反對 回復 2019-12-06
?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

C ++編程語言(第4版)(第18.4.3節)說:


只有一個級別的用戶定義的隱式轉換是合法的


該“用戶定義的”部分聽起來似乎是允許的,如果某些隱式轉換位于本機類型之間,則可以允許進行多次隱式轉換。


查看完整回答
反對 回復 2019-12-06
  • 3 回答
  • 0 關注
  • 661 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號