在C ++中可以这样编写代码:
cout << std::endl;
其中,std :: endl是将使用cout作为参数调用的函数。我想知道<>运算符的特殊功能,还是有一个通用规则允许与其他运算符(例如+)做同样的事情?
没有什么特别的。 std::ostream::operator<<
只是被重载以接受某些类型的函数指针作为输入:
std::ostream::operator<<
然后实现只调用传入的任何函数,将basic_ostream& operator<<(
std::ios_base& (*func)(std::ios_base&) );
basic_ostream& operator<<(
std::basic_ios<CharT,Traits>& (*func)(std::basic_ios<CharT,Traits>&) );
basic_ostream& operator<<(
std::basic_ostream<CharT,Traits>& (*func)(std::basic_ostream<CharT,Traits>&) );
作为其输入参数。
[*this
与上面的第三个重载匹配。
这里没有什么特别的事情。 std::endl
和std::endl
分别以[
std::istream
和std::ostream
的重载。operator >>
允许类将函数指针作为运算符的右侧。当做
operator <<
basic_istream& operator>>( std::ios_base& (*func)(std::ios_base&) );
basic_istream& operator>>( std::basic_ios<CharT,Traits>& (*func)(std::basic_ios<CharT,Traits>&) );
basic_istream& operator>>( basic_istream& (*func)(basic_istream&) );
basic_ostream& operator<<( std::ios_base& (*func)(std::ios_base&) );
basic_ostream& operator<<( std::basic_ios<CharT,Traits>& (*func)(std::basic_ios<CharT,Traits>&) );
basic_ostream& operator<<( std::basic_ostream<CharT,Traits>& (*func)(std::basic_ostream<CharT,Traits>&) );
衰减为函数指针,并调用正确的重载。您可以使用任何类型的任何运算符来执行此操作。
如果您打算这样做,请考虑一下不出意外的原则,即不要使用含义完全不同的通用语法,并将其用作自定义重载。
您当然可以。
cout << std::endl;
输出:
std::endl