我试图用较轻的替代品(QString
/ QStringRef
)代替沉重的QStringView
类。问题在于Qt小部件不会以任何方式使用这些类。例如,QLabel::setText
方法需要const QString&
作为输入参数,这使我的改进毫无用处。
我对这种差异感到困惑。那是故意的吗?有什么理由吗?如果在一天结束时没人食用QStringView
,应该是什么用例?
最佳答案
QString
,QStringRef
和QStringView
具有不同的用例:
QString
:在Qt中存储字符串的默认类。它使用隐式共享来避免不必要的(只读)副本。请注意,您可以使用f.ex来construct it efficiently。 QStringLiteral
用于静态字符串:QStringView
:当您不想存储字符串时(用作构造QString
的开销),可用作函数参数:QLabel
绝对应该存储text
字符串(以在paint事件期间进行绘制或实现getter函数)。因此,提供QStringView
重载不会有任何改善。QStringRef
:对于低级字符串解析很有用:请注意,只有
QString
拥有字符串的所有权,对于其他两个字符串,程序员应确保所引用的字符串仍然存在。结论:
QString
是在QLabel::setText
界面中使用的正确类。进一步阅读
QStringView