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

时间:2018-09-01 18:55:58

标签: c++ operator-overloading ostream

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

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

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

谢谢 乌韦

2 个答案:

答案 0 :(得分:3)

  

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

那是一个错误的理解。 pf是指向函数的指针。其返回类型为std::ostream&,唯一的参数也是std::ostream&

  

为什么第二个(ostream&)?

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

让我们看一下电话。

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);
} 

答案 1 :(得分:1)

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

这用于实现像endl这样的操纵器