为何类成员函数返回的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
相关产品推荐
相关产品推荐

