2012-11-29 66 views
0

鋸從圖書館爲什麼上面定義的轉換運算符爲什麼以下定義了一個演員操作符?

operator const wchar_t*() const 

任何人都可以向我解釋的頭定義?

+4

因爲這就是語言定義所說的?請澄清你在問什麼。 –

+0

您可以定義一個名稱爲類型名稱的運算符,因此它是一個演員操作符IMO並不令人感到意外。 –

+0

這聽起來像「雞爲什麼過馬路?」題。你能否澄清你想問什麼? 「爲什麼這個語法被解釋爲轉換運算符?」 「他們爲什麼需要轉換操作員?」其他一些「爲什麼?」 – AnT

回答

1

形式爲operator typename()的任何成員函數都是轉換函數。

const wchar_t*是一個類型名稱,因此operator const wchar_t*()是一個轉換函數。

1

例如,您要將一個對象投射到wchar_t *,則會提供此運算符。

例如

MyString a("hello"); // is a string hold ansi strings. but you want change into wide chars. 
wchar* w = (wchar_t*)a; // will invoke the operator~ 
1

它的語言的語法。 C++允許你創建你自己的Operators

例如:

struct A { 
    bool operator==(const int i); 
    bool operator==(const char c); 
    bool operator==(const FOO& f); 
} 

這允許使用可以方便地比較我們的類型的,看起來語法更好。 A a; if(a == 5) {}替代方案是實施一個equals(int value)方法遍佈,看起來像A a; if(a.equals(5)) {}

鑄造也是如此。

struct Angle { 
    float angle; 
    operator const float() const {return angle;} 
} 

Angle theta; 
float radius = 1.0f; 
float x = radius*cos(theta); 
float y = radius*sin(theta); 

總之,它只是語言的一個很好的功能,使我們的代碼看起來更好,更可讀。

+0

請不要建議人們在C++中使用C風格的演員表 –

+0

我根本不需要演員演員。 C++會爲我做一個隱式投射。 – andre

相關問題