2010-06-15 115 views

回答

13

這是一個演員。任何定義此類型的類都可以在需要std::string的任何地方使用。例如,

class Foo { 
public: 
    operator std::string() const { return "I am a foo!"; } 
}; 
... 
Foo foo; 
std::cout << foo; // Will print "I am a foo!". 

演員運營商幾乎總是一個壞主意,因爲總是爲更好的方法來達到同樣的效果。在上述情況下,您最好定義operator<<(std::ostream&, const Foo&)

+9

我反對術語「永遠」,它太絕對了。我認爲「通常」會是一個更好的術語。 – 2010-06-15 13:26:57

+1

馬丁,我沒有說「永遠」。我幾乎總是說「這不是絕對的」,而且IMO比「通常」更接近真相。 – 2010-06-16 01:48:16

+10

Loki,你自己的評論太絕對了。應該總是避免使用術語「總是」,還是應該避免使用術語「總是」? – Alyoshak 2012-07-25 01:18:31

20

它是一個conversion operator,它允許對象顯式或隱式地轉換爲std :: string。當發生這樣的轉換時,調用操作符並且轉換的結果是調用的結果。

作爲隱式轉換的示例,假設您有一個接受類型std::stringconst std::string&的函數,但不包含給定的對象類型。將對象傳遞給該函數會導致轉換運算符被調用,並將結果傳遞給函數而不是類型。

相關問題