2012-04-06 226 views
3

爲什麼這項工作做得很好:ostream的deferencing運營商<<

cout << "foo"; 

雖然這不?

(&cout)->operator<<("foo"); 

所以我想這件事情來覆蓋相關的IT工作正常數值。 (我正在使用MS Visual C++編譯器。)

回答

7

operator<<僅作爲有限數量類型的成員函數實現。對於其他類型的,它的實現爲一個全球性的過載,如:

std::ostream &operator<<(std::ostream &os, T const &t) { 
    // write the data here 
} 

您使用的將只與被實現爲成員函數,而不是全局重載工作的語法。

0

要獲得輸出爲cout << "foo";,您必須超載運營商<<

1

cout有一個重載的成員函數operator<<(const void *)。這是參數"foo"的最佳匹配。 (const char*隱式轉換爲const void*。)因此,將會輸出一個指針。

// These call std::ostream& operator<<(std::ostream &os, const char * val)  
cout << "foo"; 
operator<<(cout,"foo"); 

// This calls cout's member function operator<<(const void * val) 
(&cout)->operator<<("foo");