Qt中cout与标准C++cout的差异及输出QString报错原因咨询
为什么Qt中使用cout输出QString会报错?
以下代码在标准C++中可正常运行,但在Qt中会触发报错:“Invalid operands to binary expression (...)”。
代码示例:QString name = "Porky"; cout << name;尝试更换变量名无法解决,已通过
QTextStream cout(stdout)重载的方式解决问题,想了解Qt与标准C++中cout存在差异的原因。
核心原因是标准库的std::cout没有提供对QString类型的输出重载,而Qt本身也没有给std::ostream(也就是cout的底层类型)添加operator<<来支持QString。
在标准C++环境中,std::cout只原生支持标准库类型和基础数据类型,QString是Qt框架自定义的专属字符串类型,不属于标准库范畴,标准库自然不会为它实现对应的输出逻辑,编译器找不到匹配的operator<<重载,就会抛出“无效操作数”的错误。
Qt的QTextStream是框架专门设计的输入输出工具,它内置了对QString、QByteArray等Qt专属类型的支持,所以将其绑定到标准输出stdout后,就能正常输出QString了。
如果不想用QTextStream,也可以手动把QString转换成标准库的std::string再输出,代码如下:
cout << name.toStdString();
这种方式本质是把Qt自定义类型转换成了标准库支持的类型,编译器就能找到对应的operator<<重载完成输出。
内容的提问来源于stack exchange,提问作者user12495487
相关产品推荐
相关产品推荐

