【问题标题】:ostream& operator<< (ostream& (*pf)(ostream&));ostream& 运算符<< (ostream& (*pf)(ostream&));
【发布时间】:2018-09-01 18:55:57
【问题描述】:

我的问题是理解(ostream&amp; (*pf)(ostream&amp;))

  1. 为什么要引用指针 pf?据我了解,分配是必要的
  2. 为什么是第二个 (ostream&)?

我在阅读有关运算符重载的文章时发现了它。

谢谢 乌韦

【问题讨论】:

  • 很高兴您愿意参与,但我们需要更多信息才能有机会回答您的问题。 operator&lt;&lt; 是二进制的,但您的声明只有一个元素。这样的声明在一个类中。你能告诉我们是哪一个吗?也许是basic_ostream?或者它是你看到的一些示例代码中的一个类?

标签: c++ operator-overloading ostream


【解决方案1】:

为什么要引用指针 pf?据我了解,分配是必要的

这是一个错误的理解。 pf 是指向函数的指针。它的返回类型是std::ostream&amp;,唯一的参数也是std::ostream&amp;

为什么是第二个(ostream&)?

使用ostream 对象调用该函数,该对象通过引用传递。该函数返回对同一对象的引用。

让我们来看看通话。

std::cout << std::endl;

翻译为:

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

std::ostream::operator&lt;&lt;(std::ostream&amp; (*pf)(std::ostream&amp;) 可以简单地实现为:

std::ostream& std::ostream::operator<<(std::ostream& (*pf)(std::ostream& str)
{
   return pf(str);
} 

【讨论】:

    【解决方案2】:

    pf 是一个函数指针(其单个参数和返回值都是对ostream 的引用),而不是对任何东西的引用。

    这用于实现操纵器,例如endl

    【讨论】: