Qt工作總結07 <qBound和std::clamp>

一、qBound簡介

1. 定義

  • 是 Qt 框架中一個非常實用的邊界限制函數(也稱為 "clamp" 函數),用于將一個值限制在指定的最小值和最大值之間。
  • 頭文件:#include <QtGlobal>

2. 函數原型

template <typename T>
const T &qBound(const T &min, const T &value, const T &max);

3. 作用

  • 確保返回值始終滿足:min ≤ result ≤ max

4. 行為準則

  • 如果value < min,返回 min;
  • ?????如果value > max,返回 max;
  • 如果 min < value < max,返回 value;

5. 等效代碼

template <typename T>
const T &qBound(const T &min, const T &val, const T &max) {if (val < min)return min;if (val > max)return max;return val;
}

6. 使用示例

#include <QtGlobal>
#include <QDebug>int main() {// 整數邊界限制int val1 = qBound(0, -5, 100);   // 返回 0 (小于最小值)int val2 = qBound(0, 50, 100);   // 返回 50 (在范圍內)int val3 = qBound(0, 150, 100);  // 返回 100 (大于最大值)// 浮點數邊界限制double dval = qBound(0.0, -1.5, 1.0);  // 返回 0.0// 顏色分量限制 (0-255)int red = qBound(0, 300, 255);  // 返回 255qDebug() << val1 << val2 << val3;  // 輸出: 0 50 100qDebug() << dval;                 // 輸出: 0qDebug() << red;                  // 輸出: 255return 0;
}

7. 注意事項

  • 參數順序:

????????必須確保 min <= max,如果min > max,結果未定義(可能返回錯值);

  • 安全用法:
qBound(std::min(a,b),value,std::max(a,b));
  • 返回值類型:?

????????返回的是 const T& 引用:

????????避免返回臨時對象的引用,當參數是臨時對象時可能有問題,如下示例;

int bad = qBound(0, 50, 100) + 10;?

二、std::clamp(C++17)

1. 定義

  • C++17標準庫中引入的函數模板,用于將值限制在指定范圍內。

2. 函數原型

template <typename T>
const T& clamp(const T& value, const T& low, const T& high);

3. 用法

#include <algorithm>
int val = std::clamp(rawValue, minValue, maxValue);

4. 行為準則

  • 如果 value < low,返回low;
  • 如果value > high,返回high;
  • 否則返回 value;

5. 前提條件

  • 必須滿足 low <= high,否則行為未定義;

6. 使用示例

#include <algorithm>
#include <iostream>int main() {int val = 150;// 將值限制在 0-100 范圍內int clamped = std::clamp(val, 0, 100);std::cout << "Original: " << val      // 輸出 150<< "\nClamped: " << clamped // 輸出 100<< std::endl;
}

三、區別對比

1. 邊界處理

  • qBound()? :邊界可能無效
  • std::clamp :已知邊界有效

2. 參數順序

// 助記:std::clamp 是 "值-低-高",qBound 是 "低-值-高"
auto cpp = std::clamp(VALUE, LOW, HIGH);
auto qt = qBound(LOW, VALUE, HIGH);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87657.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87657.shtml

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

相關文章

53-Oracle sqlhc多版本實操含(23 ai)

SQLHC&#xff08;SQL Health Check&#xff09;作為 Oracle 數據庫性能診斷的核心工具&#xff0c;其設計理念和核心功能在 Oracle 各版本中保持高度一致&#xff0c;但在技術實現和周邊生態上存在漸進式優化。定期對關鍵業務 SQL 執行健康檢查&#xff0c;特別是在版本升級或…

math.pow()和pow()的區別

math.pow() 和 pow() 的區別 ? 1. math.pow() 來自 math 模塊參數&#xff1a;兩個數&#xff08;底數&#xff0c;指數&#xff09;結果類型&#xff1a; 始終返回 float 類型 示例&#xff1a; import math print(math.pow(2, 3)) # 輸出&#xff1a;8.0 &#xff08;…

郵科OEM攝像頭POE供電技術的核心優勢

安防監控中&#xff0c;供電方式影響系統穩定性、安裝效率與維護成本。郵科攝像頭采用POE技術&#xff0c;通過網線同時傳輸數據與電力&#xff0c;革新傳統部署模式。本文解析其六大核心優勢&#xff0c;展現其作為現代安防優選方案的價值。 一、布線簡化&#xff0c;效率提升…

微信小程序-數據加密

npm install crypto-js utils/aes.js const CryptoJS require(crypto-js);// 默認的 KEY 與 iv 如果沒有給 const KEY CryptoJS.enc.Utf8.parse(KrQ4KAYOEyAz66RS); // 十六位十六進制數作為密鑰 const IV CryptoJS.enc.Utf8.parse(ep1YCmxXuxKe4eH1); // 十六位十六進制…

【時時三省】(C語言基礎)善于利用指針

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 指針是C語言中的一個重要概念&#xff0c;也是C語言的一個重要特色。正確而靈活地運用它&#xff0c;可以使程序簡潔、緊湊、高效。每一個學習和使用C語言的人&#xff0c;都應當深入地學習和…

單點登錄進階:基于芋道(yudao)授權碼模式的單點登錄流程、代碼實現與安全設計

最近遇到需要單點登錄的場景&#xff0c;我使用的是芋道框架&#xff0c;正好它手動實現了OAuth2的功能&#xff0c;可以為單點登錄提供一些幫助&#xff0c;結合授權碼的模式&#xff0c;在改動最小的情況下實現了單點登錄。關鍵業務數據已經隱藏&#xff0c;后續將以以主認證…

關于Seata的一個小issue...

文章目錄 引言原因&#x1f913;解決方法&#x1f635;總結?? 引言 某一天&#xff0c;筆者在逛著Github的時候&#xff0c;突然看到seata有個有趣的issue&#xff0c;是一個task。 相關描述&#xff1a; While running the DruidSQLRecognizerFactoryTest.testIsSqlSynta…

FTTR+軟路由網絡拓撲方案

文章目錄 網絡拓撲軟路由配置FTTR光貓路由器TPLink路由器配置WAN設置LAN設置 參考 網絡拓撲 軟路由配置 配置靜態IP地址&#xff1a;192.168.1.100設置網關指向主路由的IP 設置自定義DNS服務器 開啟DHCP 這一步很關鍵&#xff0c;可以讓連上wifi的所有設備自動趴強。 FTTR光貓…

RPC - 服務注冊與發現模塊

為什么要服務注冊&#xff0c;服務注冊是做什么 服務注冊主要是實現分布式的系統&#xff0c;讓系統更加的健壯&#xff0c;一個節點主機將自己所能提供的服務&#xff0c;在注冊中心進行登記 為什么要服務發現&#xff0c;服務發現是要做什么 rpc調用者需要知道哪個節點主機…

分布式緩存:應對突發流量的緩存體系構建

文章目錄 緩存全景圖Pre背景與目標說明緩存原則與設計思路緩存體系架構緩存預熱與緩存預加載庫存操作與緩存結合防刷、限流與緩存緩存一致性與失效異步落地與消息隊列監控與指標容災與擴展示例小結 緩存全景圖 Pre 分布式緩存&#xff1a;緩存設計三大核心思想 分布式緩存&am…

華為云Flexus+DeepSeek征文|CCE容器高可用部署搭建Dify-LLM平臺部署AI Agent

華為云FlexusDeepSeek征文&#xff5c;CCE容器高可用部署搭建Dify-LLM平臺部署AI Agent 前言 Dify是一款開源的大語言模型應用開發平臺&#xff0c;融合了后端即服務和LLMOps的理念&#xff0c;使開發者可以快速搭建生產級的生成式AI應用&#xff0c;本文將詳細介紹如何使用華…

Postman 的 Jenkins 管理 - 手動構建

目錄 一、準備工作 二、postman 項目腳本準備并導出 1. 打開已完成并測試無誤的 postman 項目腳本。 再次執行測試。 ?編輯2. 導出&#xff08; 測試用例集、環境變量 兩個文件&#xff09;**“不 支 持 中 文”** —— 全部改成英文&#xff01; ?編輯3. 文件所在目錄…

音視頻之H.264/AVC解碼器的原理和實現

系列文章&#xff1a; 1、音視頻之視頻壓縮技術及數字視頻綜述 2、音視頻之視頻壓縮編碼的基本原理 3、音視頻之H.264/AVC編碼器原理 4、音視頻之H.264的句法和語義 5、音視頻之H.264/AVC解碼器的原理和實現 6、音視頻之H.264視頻編碼傳輸及其在移動通信中的應用 7、音視…

【智能安全帽新升級】搭載VTX316TTS語音合成芯片,讓安全“聽得見”!

在工地轟鳴的機械聲中&#xff0c;一句清晰的指令可能比任何文字都更有力量。 當智能安全帽遇上VTX316語音合成芯片&#xff0c;安全防護從“被動響應”進化為“主動交互”&#xff0c;為高危行業戴上了一頂“會說話的智慧大腦”&#xff01; 傳統安全帽的“沉默”危機 在建筑…

【目標檢測】非極大值抑制(NMS)的原理與實現

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

DB-GPT啟動提示please install by running `pip install cryptography`

DB-GPT項目需要 cryptography 庫來處理加密功能&#xff0c;但環境中沒有安裝它。cryptography 是一個用于安全和加密操作的Python庫&#xff0c;許多項目&#xff08;包括DB-GPT&#xff09;依賴它來處理敏感數據的加密存儲。 解決方案 1. 安裝 cryptography 庫 在激活的環…

局域網文件共享及檢索系統

標題:局域網文件共享及檢索系統 內容:1.摘要 隨著信息技術的飛速發展&#xff0c;局域網在企業、學校等場景中得到廣泛應用&#xff0c;大量文件在局域網內存儲和流轉。然而&#xff0c;目前局域網內文件共享與檢索存在效率低、管理困難等問題。本文旨在設計并實現一個高效的局…

Spring Boot醫療系統高并發難題:達夢數據庫死鎖排查與優化實戰

Spring Boot醫療系統高并發難題:達夢數據庫死鎖排查與優化實戰 引言:醫療系統中的并發挑戰 在現代醫療系統中,檢查申請處理是關鍵業務場景之一,每天需要處理數以萬計的檢查記錄。當多個操作同時更新同一患者的申請狀態時,數據庫層面的死鎖問題成為高并發環境下的典型痛點…

Go語言中的文件與IO:bufio 和 scanner

Go 標準庫中的 bufio 包提供了帶緩沖的讀寫功能&#xff0c;可以顯著提高文件和數據處理效率。而 bufio.Scanner 則是讀取文本文件中每一行的利器&#xff0c;常用于日志、配置等文本處理場景。 一、為什么使用 bufio&#xff1f; 直接對文件進行 os.File.Read() 或 os.File.W…

ABP微服務架構中網關層NullReferenceException問題解析與HTTP配置優化

ABP微服務架構中網關層NullReferenceException問題解析與HTTP配置優化 一、網關層System.NullReferenceException問題解析 1.1 問題現象與原因分析 在ABP微服務架構開發過程中&#xff0c;網關層啟動后調用微服務接口時出現以下異常&#xff1a; System.NullReferenceExcep…