【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 中优化字符串处理的重要工具,特别是在性能敏感的代码路径中。

相关推荐
豆沙沙包?7 分钟前
C++~~~vector容器(p31-P40)
开发语言·c++
必须会一定会22 分钟前
GLM-5.3 迁移实战:强制思考、1M 上下文与官方编程基准
android·开发语言·kotlin
牛油果子哥q26 分钟前
C++STL容器详解:vector/list/string底层扩容、迭代器失效终极解决、容器选型避坑
开发语言·c++·list
meilindehuzi_a34 分钟前
Next.js 全栈基础实战:从 SPA、SSR 到 App Router 与 Todo API
开发语言·javascript·ecmascript
Chen—LSN40 分钟前
C语言——数据在内存中的存储
c语言·开发语言·经验分享·笔记
caimouse1 小时前
ReactOS 图形系统分析(24):指针(光标)管理 — mouse.c/h
c语言·开发语言
上玄code1 小时前
【Agent精讲】调一个LLMAPI背后的工程问题
java·开发语言·python·chatgpt
welfare9621 小时前
新号别搞:c++类与对象
开发语言·c++
JavaPub-rodert1 小时前
我把 OpenAI 协议塞进了 Go 工具库:go-commons 开始支持 AI 了
开发语言·人工智能·golang
caimouse1 小时前
ReactOS 图形系统分析(23):引擎内存管理 — mem.c
c语言·开发语言