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

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

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

  1. 为什么引用指针pf?在我的理解中需要分配
  2. 为什么第二个(ostream&)?

我在阅读有关运算符重载的过程中发现了它。

谢谢你

c++ operator-overloading ostream
2个回答
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
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.