gpt4 book ai didi

c++ - 操纵器的运算符重载

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:14 26 4
gpt4 key购买 nike

我认为下面的代码可以用来创建操纵器。

#include<iostream> 
ostream & symbol(ostream & output)
{
return output << "\tRs";
}

它工作正常。以下声明

  cout << "Total amount: " << 567 << symbol; 

给出输出

 Total amount: 567   Rs

但我不明白为什么它会起作用。我有以下有关 C++ 中运算符重载的信息。

  1. 只能重载现有的运算符。无法创建新的运算符(operator)。 但是 symbol 不是现有的运算符。

  2. 语句(cout << "Total amount: "<< 567 << symbol;)中,好像<<是重载运算符symbol 是一个变量/对象。但我没有将 symbol 声明为变量/对象。

  3. 他们为什么使用返回语句(返回输出 << "\tRs";)?我认为 (return "\tRs";) 或 (output << "\tRs";) 应该可以工作。(我试过但没有工作:))

其实我不知道上面的代码是如何工作的。有没有人解释一下上述运算符重载的工作原理?

最佳答案

您正在传递函数 symbol给接线员 << . <<将在当前 ostream 上调用该函数(以 ostream 对象作为参数),从而实现您看到的结果。 (调用的 << 的确切版本是:ostream::operator<< (ostream& ( *pf )(ostream&)); -- 有关详细信息,请参阅 reference)

返回类型是ostream , 允许链接多个 <<的。在您的特定情况下,您在技术上不需要它作为 <<可以访问流,但这是为了使其与运营商保持一致(我认为)。当然<<需要这个返回参数,所以你别无选择:)

关于c++ - 操纵器的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9912894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com