【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.pswp.cn/diannao/85606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85606.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

提升四級閱讀速度方法

以下是針對四級英語閱讀速度提升的系統性解決方案&#xff0c;結合最新考試規律和高效訓練方法&#xff0c;分五個核心模塊整理&#xff1a; &#x1f680; ??一、基礎提速訓練&#xff08;消除生理障礙&#xff09;?? ??擴大視幅范圍?? 從逐詞閱讀升級為 ??意群閱讀…

6.4 note

構造矩陣 class Solution { private: vector<int> empty {}; // 返回每個數字(-1)所在的序號&#xff0c;可以是行或列, 如果為空則無效 vector<int> topoSort(int k, vector<vector<int>>& conditions) { // 構建一個圖…

SCSS 全面深度解析

一、SCSS 入門指南&#xff1a;為你的 CSS 工作流注入超能力 在現代 Web 開發中&#xff0c;樣式表的復雜性和維護成本日益增加。為了應對這一挑戰&#xff0c;CSS 預處理器應運而生&#xff0c;而 SCSS (Sassy CSS) 正是其中最流行、最強大的工具之一。本指南將帶你深入了解 …

R1-Searcher++新突破!強化學習如何賦能大模型動態知識獲取?

R1-Searcher新突破&#xff01;強化學習如何賦能大模型動態知識獲取&#xff1f; 大語言模型&#xff08;LLM&#xff09;雖強大卻易因靜態知識產生幻覺&#xff0c;檢索增強生成&#xff08;RAG&#xff09;技術成破局關鍵。本文將解讀R1-Searcher框架&#xff0c;看其如何通…

圖神經網絡原理及應用簡介

圖神經網絡&#xff08;Graph Neural Networks, GNNs&#xff09;原理及應用 1. 圖神經網絡的基本概念 圖神經網絡是一種專門用于處理圖結構數據的深度學習模型。圖&#xff08;Graph&#xff09;由節點&#xff08;Node&#xff09;和邊&#xff08;Edge&#xff09;組成&…

Unity 限制物體在Bounds 包圍盒控制移動

我列舉兩種方式&#xff0c;其實最終都是涉及到包圍盒使用問題。可以通過 Box Collider 的 bounds 屬性來獲取物體的包圍盒&#xff08;Bounds&#xff09;也可以直接設置Bounds包圍盒使用&#xff0c;從而限制其移動范圍。不過需要注意&#xff0c;直接使用 Box Collider 的 s…

SpringBoot中緩存@Cacheable出錯

SpringBoot中使用Cacheable: 錯誤代碼&#xff1a; Cacheable(value "FrontAdvertiseVOList", keyGenerator "cacheKey") Override public List<FrontAdvertiseVO> getFrontAdvertiseVOList(Integer count) {return this.list(Wrappers.<Adve…

位集合(STL bitset)簡介

【bitset 官方網址】 https://cplusplus.com/reference/bitset/bitset/ 位集合&#xff08;Bit Set&#xff09;是一種高效存儲和操作布爾值&#xff08;true/false&#xff09;或二進制位&#xff08;0/1&#xff09;的數據結構&#xff0c;主要用于處理大規模整數集合或狀態標…

基于SDN環境下的DDoS異常攻擊的檢測與緩解

參考以下兩篇博客&#xff0c;最后成功&#xff1a; 基于SDN的DDoS攻擊檢測和防御方法_基于sdn的ddos攻擊檢測與防御-CSDN博客 利用mininet模擬SDN架構并進行DDoS攻擊與防御模擬&#xff08;Ryumininetsflowpostman&#xff09;_mininet模擬dos攻擊-CSDN博客 需求 H2 模擬f…

責任鏈模式:構建靈活可擴展的請求處理體系(Java 實現詳解)

一、責任鏈模式核心概念解析 &#xff08;一&#xff09;模式定義與本質 責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;是一種行為型設計模式&#xff0c;其核心思想是將多個處理者對象連成一條鏈&#xff0c;并沿著這條鏈傳遞請求&#xff0c;直到有某…

如何進行頁面前端監控

&#x1f9d1;?&#x1f4bb; 寫在開頭 點贊 收藏 學會&#x1f923;&#x1f923;&#x1f923; 前端監控主要分三個方向 前端性能&#xff08;用戶體驗優化&#xff09; 異常監控 業務指標跟 下面我來分別介紹三類指標如何獲取 1&#xff09;前端性能指標&#xff1a; …

Ajax技術分析方法全解:從基礎到企業級實踐(2025最新版)

引言 Ajax技術自2005年正式命名以來,已支撐全球83%的Web應用實現異步交互。2025年最新數據顯示,單頁面應用(SPA)的Ajax請求密度已達日均120億次/應用。本文將系統化解析Ajax分析方法論,涵蓋從基礎原理到企業級工程實踐的完整技術棧。 一、Ajax技術架構解構 1.1 核心組件…

git管理github上的repository

1. 首先注冊github并創建一個倉庫&#xff0c;這個很簡單&#xff0c;網上教程也很多&#xff0c;就不展開說了 2. 安裝git&#xff0c;這個也很簡單&#xff0c;不過這里有個問題就是你當前windows的用戶名即&#xff1a;C/Users/xxx 這個路徑不要有中文&#xff0c;因為git …

Windows 下部署 SUNA 項目:虛擬環境嘗試與最終方案

#工作記錄 #回顧總結 本文記錄了在 Windows 系統上&#xff0c;通過 PyCharm 圖形界面&#xff08;盡量減少命令行操作&#xff09;部署 SUNA 項目時&#xff0c;針對不同虛擬環境方案的嘗試過程、遇到的問題以及最終選擇的可行方案&#xff0c;并補充了整體部署思路與推薦。…

無向圖的點、邊雙連通分量

文章目錄 點雙連通分量邊雙連通分量 有向圖的強連通分量&#xff1a;寒假學習筆記【匠心制作&#xff0c;圖文并茂】——1.20拓撲、強連通分量、縮點 點雙連通分量 在這之前&#xff0c;先讓我們了解幾個概念。 割點&#xff1a;刪除一個點和其連出的邊后&#xff0c;原圖會…

第六十二節:深度學習-加載 TensorFlow/PyTorch/Caffe 模型

在計算機視覺領域,OpenCV的DNN(深度神經網絡)模塊正逐漸成為輕量級模型部署的利器。本文將深入探討如何利用OpenCV加載和運行三大主流框架(TensorFlow、PyTorch、Caffe)訓練的模型,并提供完整的代碼實現和優化技巧。 一、OpenCV DNN模塊的核心優勢 OpenCV的DNN模塊自3.3…

Spring @Autowired自動裝配的實現機制

Spring Autowired自動裝配的實現機制 Autowired 注解實現原理詳解一、Autowired 注解定義二、Qualifier 注解輔助指定 Bean 名稱三、BeanFactory&#xff1a;按類型獲取 Bean四、注入邏輯實現五、小結 源碼見&#xff1a;mini-spring Autowired 注解實現原理詳解 Autowired 的…

勝牌?全球成為2026年FIFA世界杯?官方贊助商

勝牌全球將首次與國際足聯&#xff08;FIFA&#xff09;旗艦賽事建立合作關系。 此次贊助恰逢美國首個潤滑油品牌即將迎來160周年之際&#xff0c;其國際擴張步伐正在加快。 在這項全球頂級賽事籌備期間&#xff0c;勝牌全球將通過各種富有創意的零售和體驗活動與球迷互動。 …

YOLOV7改進之融合深淺下采樣模塊(DSD Module)和輕量特征融合模塊(LFI Module)

目錄 一、研究背景? 二. 核心創新點? ?2.1 避免高MAC操作? ?2.2 DSDM-LFIM主干網絡? 2.3 P2小目標檢測分支? ?3. 代碼復現指南? 環境配置 關鍵修改點 ?4. 實驗結果對比? 4.1 VisDrone數據集性能 4.2 邊緣設備部署 4.3 檢測效果可視化 ?5. 應用場景? …

【C/C++】chrono簡單使用場景

chrono使用場景舉例 1 輸出格式化字符串 示例代碼 auto now std::chrono::system_clock::now(); auto t std::chrono::system_clock::to_time_t(now); auto ms std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;std::ostrin…