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

为何类成员函数返回的std::string无法用cout输出?

问题分析与解决

哦,我一下子就发现问题所在了!你在调用get_name成员函数的时候,漏掉了函数调用必需的括号(),这导致你传递给std::cout的根本不是函数的返回值,而是函数本身的地址(也就是函数指针)。而标准输出流std::cout默认不会把函数指针转换成你期望的字符串内容输出,所以才看不到预期的结果。

你的错误代码关键问题行

std::cout << obj.get_name; // 这里没有调用函数,只是取了函数的地址

修正后的代码

只需要给函数名加上括号,让它真正执行并返回std::string对象:

#include <string> 
#include <iostream> 

class course { 
public: 
    std::string name = "hello"; 
    std::string get_name() { 
        return name; 
    } 
}; 

int main() { 
    course obj; 
    std::cout << obj.get_name(); // 加上()调用函数,返回字符串
    return 0; 
}

为什么这样就正常了?

当你加上()后,obj.get_name()会执行这个成员函数,返回course对象里的std::string类型成员name。而std::cout本身就支持直接输出std::string对象,这和你测试的std::string a = "hi"; std::cout << a;是同一个道理——都是输出字符串类型的内容。

如果好奇为什么原代码没有输出任何有效内容:实际上std::cout在遇到函数指针时,会尝试输出它的内存地址,但有些编译器环境下可能不会显示这个地址(或者显示的内容你没有注意到),而不是你想要的"hello"字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:39