You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类运算符重载返回值问题求助:如何实现链式调用?

解决Console类<<运算符重载的链式调用返回值问题

你的错误根源在于返回值类型不匹配:this是指向当前Console对象的指针(类型为Console*),但函数声明要返回的是Console&(对象引用),直接返回this会导致类型转换错误。

修正后的代码

把返回语句改成解引用指针,返回当前对象的引用:

template <class out>
Console& Console::operator<<(const out &data)
{
    std::stringstream ss;
    ss << data;
    output += ss.str();
    return *this; // 解引用this,返回对象引用
}

原理说明

  • *this会把指针转换成当前对象的左值引用,完全匹配函数的返回类型Console&,编译器就不会报错。
  • 返回对象引用后,链式调用obj << "Hello" << "World\n"的执行逻辑是:先执行obj << "Hello",返回obj的引用,接着用这个引用继续调用<< "World\n",完美实现链式调用。

如果改成void返回类型,obj << "Hello"执行后没有返回值,后续的<< "World\n"就没有可调用的对象,自然会编译失败。

内容的提问来源于stack exchange,提问作者VukMar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:20:28