有關於std::endl的疑問! |
缺席
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
請問:
endl是函式為什麼這麼用 "cout << endl; "也可以呢?
所以想請問這是為什麼能詳細解釋嗎? [code cpp] //ostream& endl ( ostream& os ); #include using namespace std; int main () { int a=100; double b=3.14; cout << a; cout << endl; cout << b << endl << a*b; endl (cout); return 0; } [/code] 謝謝!!
------
-謝謝大大熱心的回覆!謝謝! |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
請找一本c++的書再仔細的讀一次。
它是關於 operator 的複載(overload) 。 c 中許多的符號也算是函式,包含常見的 號 - 號 << 等符號。因為它也是一種函式,所以就可以被複載。 一時半刻無法說清,只能請你去查網路或是把書再看仔細一點。這裡只能提供你線索! good luck ===================引 用 l90425 文 章=================== 請問: endl是函式為什麼這麼用 "cout << endl; "也可以呢?
所以想請問這是為什麼能詳細解釋嗎? [code cpp] //ostream& endl ( ostream& os ); #include using namespace std; int main () { int a=100; double b=3.14; cout << a; cout << endl; cout << b << endl << a*b; endl (cout); return 0; } [/code] 謝謝!!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
它能夠這麼做是因為 C 語言所提供的超載功能 (overloading). 特別是在 std::ostream class 裡的 operator<< 超載, 其中一個是:
ostream& ostream::operator<<(ostream& (*fp)(ostream&)) { return (*fp)(*this); } 它的參數是函式指標. endl 是個函式沒錯, 它的 signature 正好符合上面超載的函式指標參數: std::ostream& std::endl(std::ostream& os) { ... } 當你在式子裡用函式名字的時候, 所得到的正好是個函式指標. 上面的 operator<<() 超載把函式指標變成函式呼叫. 引用於:http://www.programmer-club.com.tw/pc2020v5/forum/ShowSameTitleN.asp?board_pc2020=c&id=41214&type_pc2020=sametitleLevel-2 謝謝!!
------
-謝謝大大熱心的回覆!謝謝! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |