2011-08-02 16 views

回答

8

有兩種方式的用戶定義類型可以隱式轉換:

  1. 有轉換構造(例如, 「的std :: string ::串(常量字符* C_STRING)」)。
  2. 使用轉換運算符(例如「OldType :: operator NewType()const」)。

任何僅使用一個參數且不使用關鍵字「explicit」的構造函數都會定義一個隱式轉換(從參數的類型到正在構造的對象的類型)。標準字符串類有意不使用「顯式」來提供此轉換的便利。

7

因爲std :: string的構造函數需要const char *,C++會自動爲你構造一個臨時的字符串對象。

+7

重要的是,_non-explicit_構造函數。 – ildjarn

6

從技術上講,這是一個char const[6]但是,你應該能夠做到這一點,這要歸功於隱式轉換和std::string構造函數之一。

1

因爲有一個?隱式?使用std::string(char *)構造函數從char *轉換爲std::string

2

與您的問題有些相關:如果您在C++中有一段時間,您* 明確 * ly不希望編譯器像這樣改變類型,當兼容構造函數存在時,使用關鍵字「顯式「構造函數之前。然後它會給你一個編譯器錯誤。但是,您只能使用您創建的類型來執行此操作。不適用於像字符串的STL類型。

0

您的字符串文字是char const[6]

它的名稱衰減到const char*傳遞給函數。

然後,執行隱式轉換,因爲:

  • 該函數接受一個參考給const,這意味着一個rvalue可以綁定到它
  • const char*可以隱式轉換成std::stringrvalue
相關問題