【Qt】QStringLiteral 介绍

QStringLiteral 介绍

QStringLiteral 是 Qt 框架中提供的一个宏,用于在编译时从字符串字面量创建 QString 对象,具有高效和零内存分配的特点。

主要特点

  1. 编译时转换 :将字符串字面量在编译时转换为 QString 数据,而不是运行时。
  2. 零内存分配:不会在堆上分配内存,字符串数据直接存储在程序的只读段。
  3. 高效构造 :避免了运行时从 const char*QString 的转换开销。
  4. 类型安全 :直接生成 QString 而不是 const char*QLatin1String

使用场景

cpp 复制代码
// 传统方式 - 运行时转换
QString str1 = "Hello World";  // 需要运行时转换

// 使用 QStringLiteral - 编译时转换
QString str2 = QStringLiteral("Hello World");  // 无运行时开销

性能优势

QStringLiteral 比以下方式更高效:

  • 直接使用字符串字面量 ("text")
  • 使用 QLatin1String
  • 使用 QString::fromUtf8()

注意事项

  1. 只应用于真正的字符串字面量,不能用于变量或表达式

    cpp 复制代码
    const char* msg = "test";
    QString s = QStringLiteral(msg);  // 错误!msg不是字面量
  2. 在 Qt 5 及以上版本可用

  3. 对于不会存储在 QString 中的临时字符串,QLatin1String 可能更合适

  4. 当字符串仅用于重载函数解析时,可能不需要使用 QStringLiteral

示例代码

cpp 复制代码
// 在函数返回值中使用
QString greeting()
{
    return QStringLiteral("Hello, World!");
}

// 在循环中使用
for (int i = 0; i < 1000; ++i) {
    QString item = QStringLiteral("Item %1").arg(i);
    // ...
}

// 作为参数传递
void processString(const QString& str);
processString(QStringLiteral("Process this"));

QStringLiteral 是 Qt 中优化字符串处理的重要工具,特别是在性能敏感的代码路径中。

相关推荐
用户805533698033 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner3 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz8 天前
QML Hello World 入门示例
qt
xcyxiner11 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner12 天前
DicomViewer (添加模型类)3
qt
xcyxiner13 天前
DicomViewer (目录调整) 2
qt
xcyxiner13 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00614 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术14 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript