2012-03-04 97 views
4

我以爲他們是一樣的東西,但是當我向網上裁判發送代碼時(與endl(cout))它給了我「錯誤的答案」的判決,然後我試圖用cout << endl發送另一個,並且法官接受了代碼!有人知道這些命令之間的區別嗎?有沒有人知道endl(cout)和cout << endl之間的區別?

+0

如果你有'使用std :: cout',那麼第一個表單將被編譯,但第二個表單將不會(由於依賴於參數的查找)。我不能想到第二種形式可行的情況,但第一種情況與在線法官的情況不同。 – interjay 2012-03-04 16:05:08

回答

3

沒有我知道的。

std::endl是採取流和返回流的功能:當你把它應用到std::cout

ostream& endl (ostream& os); 

,它只是應用功能的時候了。

在另一方面,std::basic_ostreamoperator<<與簽名過載:

template <typename C, typename T> 
basic_ostream<C,T>& operator<<(basic_ostream<C,T>& (*pf)(basic_ostream<C,T>&)); 

這也將應用功能的時候了。

因此,從技術上講,沒有什麼區別,即使流std::cout << std::endl更習慣。這可能是法官機器人雖然是簡單的,並沒有意識到它。

+0

我想唯一的區別是有兩個函數調用,而不是'cout << endl'。 – 2012-03-04 16:01:53

+0

非常感謝!在未來,我將只使用cout << endl :) – hinafu 2012-03-04 16:03:03

+0

等待,'endl'不應該轉換爲'ios_base&(* pf)(ios_base&)',IIRC還有另一個過載。 – Xeo 2012-03-04 16:07:19

2

唯一的區別是endl(cout)被認爲是一個全局函數,而在cout << endl,endl被認爲是一個操縱器。但它們具有相同的效果。

1

這兩種形式之間的行爲沒有區別。兩者都指相同的endl功能,可用作機械手(cout << endl)或作爲免費功能(endl(cout))。

1

上面的答案是正確的!另外,根據您使用<< endl;還是endl(cout)它可以減少代碼中的行數。

例子:

你可以有這樣的事情:

cout << "Hello World" << endl;

OR

cout << "Hello World";

endl(cout);

然而, cout << "Hello World" << endl(cout); //不起作用

所以在這個例子中它是2行對1行。

相關問題