我不小心尝试使用 std::ostream 流式传输 QString。但是,编译(Windows SDK 7.1)成功,但发出警告:
Warning:C4717: 'operator<<' : recursive on all control paths, function will cause runtime stack overflow
最后,我想知道为什么会出现递归。这是一小段要重现的代码。注意:如果没有重载的构造函数,编译器会引发预期的错误(未找到采用“QString”类型的右手操作数的运算符)。
#include <iostream>
#include <QString>
class CTest
{
public:
CTest(QString str) {}
friend std::ostream & operator <<(std::ostream & out, const CTest & cTest)
{
out << "std::string";
out << QString("HelloWorld");
return out;
}
};
int main(int argc, char *argv[])
{
CTest t("testing");
std::cout << t;
return 0;
}