运算符<< for QString

Ily*_*kiy 15 c++ qstring qt

实现<< for QString是有道理的:

std::ostream&  operator <<(std::ostream &stream,const QString &str)
{
   stream << str.toAscii().constData(); //or: stream << str.toStdString(); //??
   return stream;
}
Run Code Online (Sandbox Code Playgroud)

而不是写作

stream << str.toAscii().constData();
Run Code Online (Sandbox Code Playgroud)

每次都在代码中.

但是,由于它不在标准Qt库中,我假设有任何特殊原因不这样做.如上所述,超载<<的风险/不便是什么?

fja*_*don 10

如果<<运算符包含在Qt库中,则库的每个客户端都必须使用完全相同的实现.但是由于QString的性质,这是客户想要的并不明显.有些人在西欧编写与遗留文件交互的软件可能想要使用Latin1()字符,美国人可能会使用Ascii(),而更多现代软件可能想要使用Utf8().

在库中实现单个实现会限制整个库可以做到的不可接受的事情.


小智 6

没有必要实现这样的东西,只要存在像这样的方便的解决方案,涉及QTextStream

QString s;
QTextStream out(&s);
out << "Text 1";
out << "Text 2";
out << "And so on....";
Run Code Online (Sandbox Code Playgroud)

QTextStream非常强大......

  • ...除非您必须使用的接口当然需要 `std::ostream`。 (2认同)