2011-12-01 51 views
2

我正在寫我的課,並測試它。看起來,逗號運算符(運算符)拒絕工作,程序只是簡單地跳過它。這是我跑C++:運算符,(逗號)似乎不起作用

fileObj << buffer,40; 

代碼我寫了下面運營商(僅原型顯示,代碼是不相關的):

const file_t& operator<<(const void* buffer); 
void operator,(int length); 

「經營者< <」工作正常時,程序使用它,但是當它到達「運營商」時,它會簡單地跳過它,就像它不存在一樣。不用說,兩個運營商都依賴於對方。

任何想法爲什麼逗號運算符被跳過?謝謝。

+0

http://www.java2s.com/Tutorial/Cpp/0200__Operator Overload/OverloadingCommaOperator.htm – karlphillip

+2

@karlph illip:這個例子有一些主要問題(只是一目瞭然,重載應該是const限定的,並且應該對它們的操作數引用const引用;操作員應該是非成員,以允許LHS和RHS操作數的正確轉換,'使用namespace std;'是邪惡的)。一般來說,我不會信任名爲「java2s」的網站上的「C++教程」... –

+0

很高興我沒有發佈該鏈接作爲答案。 ;) – karlphillip

回答

6

您的<<運算符返回const file_t參考。您的逗號運算符是一個非常量函數。由於類型不匹配,因此編譯器不會選擇您的逗號操作符來執行操作。相反,它使用內置的逗號運算符,它只簡單地評估兩個操作數並返回正確的操作數。 (因爲在你的例子中對右操作數的評估沒有副作用,所以它看起來好像根本沒有被調用。)

如果你的逗號操作符沒有修改它被調用的對象,那麼使它成爲const:

void operator,(int length) const; 

如果運營商需要修改你的對象,那麼不要從<<運營商返回一個const對象:

file_t& operator<<(void const* buffer); 
+0

更改爲「file_t&operator <<(void const * buffer);」做的伎倆,謝謝! :)順便說一句,「運營商」,改變對象,所以沒有常量那裏。 – Shai