当前位置: 首页 > news >正文

【QT】QString 与QString区别 - 教程

【QT】QString& 与QString区别 - 教程

在C++中,QStringQString& 有本质区别,尤其是在参数传递和内存管理方面:

1. QString(按值传递)

void modifyString(QString str) {
// 按值传递
str.append(" World"
)
;
// 修改副本
}
// 调用
QString original = "Hello"
;
modifyString(original)
;
qDebug(
) << original;
// 输出: "Hello" (未改变)

2. QString&(引用传递)

void modifyStringRef(QString& str) {
// 引用传递
str.append(" World"
)
;
// 修改原始对象
}
// 调用
QString original = "Hello"
;
modifyStringRef(original)
;
qDebug(
) << original;
// 输出: "Hello World" (已改变)

最佳实践:const QString&

对于只读操作,推荐使用 常量引用,兼具效率和安全性:

// 高效读取字符串(无拷贝,禁止修改)
void printString(
const QString& str) {
qDebug(
) <<
"Content:" << str;
// str.append("!"); // 编译错误!const保护
}

对比总结

特性QStringQString&const QString&
是否创建副本
能否修改原对象✗ (const保护)
内存开销可能较高零开销零开销
典型使用场景需要独立副本时需要修改原对象时只读访问时
传递大字符串的效率低(深拷贝)

关键注意事项

  1. Qt的隐式共享:即使按值传递,Qt字符串在未修改时可能共享数据(写时复制)
  2. 返回引用:永远不要返回局部变量的引用!
    // 危险!返回已被销毁的局部变量
    QString&
    badExample(
    ) {
    QString local = "test"
    ;
    return local;
    // 会导致未定义行为
    }
  3. C++11移动语义:对于临时字符串,使用QString&&可启用移动构造
    void efficientMove(QString&& str) {
    QString local = std::move(str)
    ;
    // 移动而非拷贝
    }

建议:80%的情况下使用const QString&,需要修改时用QString&,明确需要副本时才用QString

http://www.jsqmd.com/news/10184/

相关文章:

  • 连通分量tarjan学习笔记
  • [Python/地图] 基于Python绘制地图
  • 【从前端到后端导入excel资料实现批量导入-笔记模仿芋道源码的《系统管理-用户管理-导入-批量导入》】
  • 实验任务1——8
  • 实用指南:Android studio初体验
  • 一款专门为 WPF 打造的开源 Office 风格用户界面控件库
  • 给Ubuntu用户的SSH免密登入公钥文件和文件夹设置权限
  • dockercontainerd代理设置脚本
  • 2025国庆集训总结
  • tampermonkey油猴脚本, 动画疯评分显示增强脚本
  • 课后 10.8
  • 实用指南:vue3+elementplus表格表头加图标及文字提示
  • 9.29课后整理 - GENGAR
  • 深入解析:【QT】`QTextCursor::insertText()`中插入彩色文本
  • Java方法专题 - 动手动脑问题与实验总结
  • 2025年中盘点
  • 学习问题日记-3
  • 【CVE-2025-4123】Grafana完整分析SSRF和从xss到帐户接管 - 教程
  • 差分约束乘法改加减
  • 01-方法-课后作业
  • 【学习记录】Django Channels + WebSocket 异步推流编写常用命令汇总
  • 边缘数据库近期想法(2)
  • 方法-课后作业1
  • AgpdParty
  • io软件的层次结构
  • 2025年- H57-Lc165--994.腐烂的橘子(图论,广搜)--Java版 - 教程
  • 深入解析:Python应用函数的定义与调用(一)
  • 3,信号与槽机制 - 教程
  • 课后思考及作业:方法
  • 2025国庆Day7