运算符<

问题描述 投票:1回答:2

在C ++中可以这样编写代码:

cout << std::endl;

其中,std :: endl是将使用cout作为参数调用的函数。我想知道<>运算符的特殊功能,还是有一个通用规则允许与其他运算符(例如+)做同样的事情?

c++ stl
2个回答
1
投票

没有什么特别的。 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与上面的第三个重载匹配。


1
投票

这里没有什么特别的事情。 std::endlstd::endl分别以[

的形式具有std::istreamstd::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>&) ); 衰减为函数指针,并调用正确的重载。您可以使用任何类型的任何运算符来执行此操作。


如果您打算这样做,请考虑一下不出意外的原则,即不要使用含义完全不同的通用语法,并将其用作自定义重载。


0
投票

您当然可以。

cout << std::endl;

输出:

std::endl
© www.soinside.com 2019 - 2024. All rights reserved.