QString、QLatin1String、QStringLiteral区别和用法以及效率

QString类

QString是Qt框架中提供的字符串类,用于处理Unicode字符串。它提供了许多方便的方法和功能,可以进行字符串的连接、查找、替换、截取等操作。QString类的对象是可变的,可以在运行时修改字符串内容。
.
由以上引出一个知识点:Unicode字符集
Unicode字符集是一个全球通用的字符编码标准,旨在覆盖世界上所有的字符。它提供了一个唯一的字符代码点,用于表示各种语言、符号、标点符号、表情符号和特殊字符。

Unicode字符集采用了固定长度的编码方案,其中最常用的是UTF-8、UTF-16和UTF-32。UTF-8是一种变长编码,用1到4个字节表示字符;UTF-16是一种定长或变长编码,用2或4个字节表示字符;UTF-32是一种定长编码,用4个字节表示字符。

Unicode字符集目前包含超过137,000个字符,覆盖了几乎所有的书写系统,包括各种语言、数学符号、货币符号、箭头、表情符号、图形符号等等。它还为每个字符提供了唯一的码点值,通常用前缀U+表示,后面跟着字符的十六进制表示。

例如,拉丁字母大写的字母"A"在Unicode字符集中的码点是U+0041,中文汉字"爱"的码点是U+7231。通过使用Unicode字符集,可以在不同的平台和程序之间共享和交换文本数据,确保字符的正确显示和处理。

QLatin1String类

QLatin1String是Qt框架中提供的常量字符串类,用于处理Latin1编码的字符串。它提供了一些特定于Latin1编码的优化,适用于只读的字符串操作。QLatin1String实际上是QString类的一个封装,可以有效地处理Latin1编码的字符串。
.
由以上引出一个知识点:Latin1编码
Latin1编码,也称为ISO-8859-1编码,是一种字符编码标准,用于表示拉丁字母的字母和符号。它是ISO/IEC 8859系列中的第一个标准,包含了西欧语言字符集。每个字符占用一个字节(8位),可以表示256个不同的字符。

Latin1编码覆盖了美国英语、西班牙语、葡萄牙语、法语、德语、意大利语、荷兰语、瑞典语、挪威语、丹麦语等大部分欧洲语言字符。

在使用Latin1编码时,每个字符都有一个唯一的字节值,例如字母’A’的字节值是65,字母’a’的字节值是97,依此类推。

尽管Latin1编码被广泛使用,但它无法表示其他非拉丁字母字符,比如中文、日文或俄文等字符。为了解决这个问题,Unicode编码应运而生,它通过使用更多的字节位来表示更多的字符。

QStringLiteral宏

QStringLiteral是C++11中引入的编译时字符串字面量,用于在编译时创建QString对象。QStringLiteral可以实现更高效的字符串操作,因为它会在编译时将字符串转换为QString对象,避免了运行时的字符串拷贝和内存分配。

示例:展示效率

{QString str = "helloworld";int i = 0;int nCount = 0;QElapsedTimer timer;timer.start();while (i < 1000000) {if(str == QString("helloworld") ){++nCount;}++i;}qDebug().noquote() << __FILE__ << __LINE__ << "QString 比较耗时:" << timer.elapsed();}{QString str = "helloworld";int i = 0;int nCount = 0;QElapsedTimer timer;timer.start();while (i < 1000000) {if(str == QLatin1String("helloworld") ){++nCount;}++i;}qDebug().noquote() << __FILE__ << __LINE__ << "QLatin1String 比较耗时:" << timer.elapsed();}{QString str = "helloworld";int i = 0;int nCount = 0;QElapsedTimer timer;timer.start();while (i < 1000000) {if(str == QStringLiteral("helloworld") ){++nCount;}++i;}qDebug().noquote() << __FILE__ << __LINE__ << "QStringLiteral 比较耗时:" << timer.elapsed();}

结果输出

..\untitled16\mainwindow.cpp 26 QString 比较耗时: 437
..\untitled16\mainwindow.cpp 42 QLatin1String 比较耗时: 119
..\untitled16\mainwindow.cpp 58 QStringLiteral 比较耗时: 397

在这里插入图片描述

三者效率

在效率方面,QStringLiteral相对于QString在创建对象和内存分配方面更高效。
而QLatin1String(以及char*)在处理Latin1编码的字符串时可能更有效率,因为它们不涉及Unicode字符的转换和处理。

结论

综上所述,如果需要处理Unicode字符串或需要字符串的可变性,并且不需要关注字符串编码和内存管理,推荐使用QString。如果需要处理Latin1编码的常量字符串,并且希望获取更高的效率,可以考虑使用QLatin1String。而如果在编译时已知字符串内容,并且追求最高的效率,可以使用QStringLiteral。

①参数能使用const char*类型或QLatin1String类型的地方使用相应的参数。
.
②参数需要QString参数类型的地方,若值不修改,则使用QStringLiteral宏
.
③参数需要QString类型且QString可能被修改,则直接使用QString或隐式转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128183.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10款录屏软分析与选择使用,只看这篇文章就轻松搞定所有,高清4K无水印录屏,博主UP主轻松选择

录屏软件整理 如下为录屏软件&#xff0c;通过思维导图展示分析介绍&#xff1a; https://www.drawon.cn/template/details/6522bd5e0dad9029a0b528e1 如下为整理的录屏软件列表 名称产地价格支持的平台下载地址说明OBS国外免费开源windows/linux/machttps://obsproject.co…

pycharm中个人编程时常用到的快捷键

pycharm中个人编程时常用到的快捷键&#xff1a; 仅个人经验总结&#xff0c;不为其他&#xff01; 1.CTRLShiftAlt鼠标选择多个位置 可以同时在多个位置进行编辑同样的内容 2. Ctrel Alt L快速将代码格式标准化 3. Ctrl F 在当前py文件中查找 4. Ctrl R快速替换当前…

Unity可视化Shader工具ASE介绍——3、ASE的Shader类型介绍

大家好&#xff0c;我是阿赵。这里继续介绍Unity可视化Shader编辑插件ASE的用法。   上一篇介绍了节点的输入输出节点。这一篇来介绍一下不同的Shader类型的区别。 一、修改Shader类型 之前介绍创建Shader的时候&#xff0c;曾经说过可以选择Shader的类型。 其实这个类型是…

Holographic MIMO Surfaces (HMIMOS)以及Reconfigurable Holographic Surface(RHS)仿真

这里写目录标题 Simulation setupchatgpt帮我总结代码总结&#xff1a;chatgpt生成的代码还是不靠谱&#xff1a;考虑把之前看的RHS中对于多用户的改成单用户全系MIMO与普通MIMO或者说RIS的区别到底是啥&#xff1f; Holographic MIMO Surfaces &#xff08;HMIMOS&#xff09;…

想升级macOS Big Sur,但是MacBook内存空间不够该怎么办?

随着使用时间的增长&#xff0c;我们会发现Mac电脑的存储空间越来越少&#xff0c;这时候我们就需要对Mac电脑进行清理&#xff0c;以释放更多的存储空间。那么&#xff0c;Mac空间不足怎么解决呢&#xff1f; 1.清理垃圾文件 Mac空间不足怎么解决&#xff1f;首先要做的就是清…

基于边缘网关的智慧工地监测方案

边缘物联网技术为千行百业赋能&#xff0c;依托边缘计算的低延时、高效率、广适用优势&#xff0c;也为工程建设产业带来新的增长动力。 例如在智慧工地应用中&#xff0c;围绕建设施工过程中的人员、设备、环境等要素&#xff0c;利用边缘计算网关构建全面的数据采集、分析、联…

基于SVM+TensorFlow+Django的酒店评论打分智能推荐系统——机器学习算法应用(含python工程源码)+数据集+模型(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型训练及保存3. 模型应用 系统测试1. 训练准确率2. 测试效果3. 模型应用 相关其它博客工程源代码下载其它资料下载 前言 本项目以支持向量机&#xff08;SVM&#xff09;技术为核心&#xff0c;…

python常用库之数据库orm框架之SQLAlchemy

文章目录 python常用库之数据库orm框架之SQLAlchemy一、什么是SQLAlchemySQLAlchemy 使用场景 二、SQLAlchemy使用SQLAlchemy根据模型查询SQLAlchemy SQL 格式化的方式db_session.query和 db_session.execute区别实测demo 总结&#xff1a;让我们留意一下SQLAlchemy 的 lazy lo…

【C++设计模式之迭代器模式】分析及示例

简介 迭代器模式是一种行为型设计模式&#xff0c;它提供了一种顺序访问聚合对象元素的方法&#xff0c;而又不需要暴露聚合对象的内部结构。迭代器模式通过将遍历算法封装在迭代器对象中&#xff0c;可以使得遍历过程更简洁、灵活&#xff0c;并且符合开闭原则。 描述 迭代…

YOLOv8改进算法之添加CA注意力机制

1. CA注意力机制 CA&#xff08;Coordinate Attention&#xff09;注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息&#xff0c;以便模型可以更好地理解不同位置之间的关系。如下图&#xff1a; 1. 输入特…

美容美甲小程序商城的作用是什么

美容院往往有很高需求&#xff0c;女性悦己经济崛起&#xff0c;加之爱美化程度提升&#xff0c;无论线下环境还是线上互联网信息冲击&#xff0c;美容服务、化妆产品等市场规格一直稳增不减。 通过【雨科】平台制作美容美甲商城&#xff0c;售卖相关服务/产品&#xff0c;模块…

计算机网络-计算机网络体系结构-概述,模型

目录 一、计算机网络概述 二、性能指标 速率 带宽 吞吐量 时延 往返时延RTT 利用率 三、计算机网络体系结构 分层结构 IOS模型 应用层-> 表示层-> 会话层-> 传输层-> 网络层-> 数据链路层-> 物理层-> TCP/IP模型 一、计算机网络概述 计…