我试图用较轻的替代品(QString / QStringRef)代替沉重的QStringView类。问题在于Qt小部件不会以任何方式使用这些类。例如,QLabel::setText方法需要const QString&作为输入参数,这使我的改进毫无用处。
我对这种差异感到困惑。那是故意的吗?有什么理由吗?如果在一天结束时没人食用QStringView,应该是什么用例?

最佳答案

QStringQStringRefQStringView具有不同的用例:

  • QString :在Qt中存储字符串的默认类。它使用隐式共享来避免不必要的(只读)副本。请注意,您可以使用f.ex来construct it efficiently QStringLiteral 用于静态字符串:

  • QStringView :当您不想存储字符串时(用作构造QString的开销),可用作函数参数:

    QLabel绝对应该存储text字符串(以在paint事件期间进行绘制或实现getter函数)。因此,提供QStringView重载不会有任何改善。
  • QStringRef :对于低级字符串解析很有用:


  • 请注意,只有QString拥有字符串的所有权,对于其他两个字符串,程序员应确保所引用的字符串仍然存在。
    结论:QString是在QLabel::setText界面中使用的正确类。
    进一步阅读
  • Blog about QStringView
  • 10-04 14:12