2017-08-31 108 views
0

是不是這樣的:「運算符<<(STD :: ostream的和,INT和)」不明確

operator<<(std::cout, 0); 

與此相同?

std::cout<<0; 

我試過這段代碼:

#include<iostream> 
int main() 
{ 
    operator<<(std::cout,0); 
    return 0; 
} 

,但我得到了以下錯誤消息:

a.cpp: In function ‘int main()’: 
a.cpp:11:28: error: call of overloaded ‘operator<<(std::ostream&, int)’ is ambiguous 
a.cpp:11:28: note: candidates are: 
/usr/include/c++/4.6/ostream:528:5: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const unsigned char*) [with _Traits = std::char_traits<char>] 
/usr/include/c++/4.6/ostream:523:5: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const signed char*) [with _Traits = std::char_traits<char>] 
/usr/include/c++/4.6/ostream:510:5: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const char*) [with _Traits = std::char_traits<char>] 
/usr/include/c++/4.6/bits/ostream.tcc:323:5: note: std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const char*) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.6/ostream:473:5: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, unsigned char) [with _Traits = std::char_traits<char>] 
/usr/include/c++/4.6/ostream:468:5: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, signed char) [with _Traits = std::char_traits<char>] 
/usr/include/c++/4.6/ostream:462:5: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, char) [with _Traits = std::char_traits<char>] 
/usr/include/c++/4.6/ostream:456:5: note: std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, char) [with _CharT = char, _Traits = std::char_traits<char>] 

有人能解釋它嗎?

+0

http://en.cppreference.com/w/cpp/string/basic_string/operator_ltltgtgt – Nipun

回答

3

不,它是相同的:

std::cout.operator<<(0); 

使用operator<<(std::cout, 0);使得Argument-Dependent Lookup(ADL)踢,其中發現接受std::basic_ostream<char>int多個候選(或具有有效的隱式轉換型來自int)作爲輸入。一旦ADL投入使用,所有這些各種過載就成爲有效的候選者。

相關問題