2014-09-24 90 views
1

我一直在閱讀有關轉換操作符,但我仍然不確定何時調用轉換操作符。考慮下面的例子:如何知道何時調用轉換操作符

class foo 
{ 
public: 
    operator char*() 
    { 
     return "SomeText"; 
    } 
}; 


foo d; 
const char* m = static_cast<char*>(d); 

爲什麼用這個轉換調用轉換運算符?哪個運營商正在呼叫它?

+2

爲什麼你的轉換操作符不會被調用?你明確要求從你的對象'd'轉換到'char *'。 – 2014-09-24 07:39:59

+0

我的印象是,只有在對象實例之前放置操作符時纔會調用轉換操作符 – Rajeshwar 2014-09-24 07:41:45

+0

轉換函數不是「操作符」,儘管其名稱中帶有關鍵字「操作符」。 – 2014-09-24 07:48:24

回答

1

static_cast文檔

援引如果new_type類型的臨時對象可以聲明與expression初始化 ,如由new_type Temp(expression);,這可能涉及 隱式轉換,向new_type或所述構造函數的調用請撥 給用戶定義的轉換運算符,然後 static_cast<new_type>(expression)計算並返回該 臨時對象的值。

而且這不是T.C.的運營商。注意到,這是一個conversion function

相關問題