ostream& 运算符<< (ostream& (*pf)(ostream&));

ostream& operator<< (ostream& (*pf)(ostream&));

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

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

我在阅读运算符重载时发现的。

谢谢 乌韦

pf 是一个函数指针(其单个参数和 return 值都是对 ostream 的引用),而不是对任何内容的引用。

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

why reference to pointer pf? In my understanding necesseary for allocation

这是错误的理解。 pf 是指向函数的指针。它的 return 类型是 std::ostream& 并且唯一的参数也是 std::ostream&.

why the second (ostream&)?

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

让我们来看看调用。

std::cout << std::endl;

译为:

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

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

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