2012-02-29 95 views
0

爲什麼轉換構造函數沒有爲i2隱式調用?將轉換構造函數與運算符重載結合

class NumString 
{ 
    public: 
     NumString(const char* s) 
     { 
     } 

     int operator*(int i) 
     { 
      return 42; 
     } 
}; 


int main(void) 
{ 
    int i1 = (NumString) "string" * 2; //OK 
    int i2 = "string" * 2;    //ERROR 
} 

回答

5

因爲在沒有任何用戶定義類型參與的情況下,編譯器不會調用用戶定義的轉換。

5

表達式"string" * 2只涉及const char *int,爲什麼編譯器會以任何方式考慮NumString

如果它像你期望的那樣工作,如果多個類有一個合適的轉換構造函數,那麼編譯器將如何選擇正確的轉換?