C++ requires關鍵字簡介

requires 是 C++20 中引入的一個新關鍵字,用于在函數模板或類模板中聲明所需的一組語義要求,它可以用來限制模板參數,類似于 typenameclass 關鍵字。

requires關鍵字常與type_traits頭文件下類型檢查函數匹配使用,當requires后的表達式值為true時滿足requires條件,代表由其修飾的函數/類的模板參數合法,可以正常使用

requires 關鍵字可以用于以下兩種情況:

  • 在函數模板或成員函數中,使用 requires 關鍵字限制函數模板或成員函數的參數或返回值必須滿足一定的語義要求。例如:
 

Copy

template <typename T> void print(T t) requires std::is_integral_v<T> { std::cout << t << std::endl; }

在這個例子中,使用 requires 關鍵字限制函數模板參數 T 必須是整數類型。

  • 在類模板或成員類中,使用 requires 關鍵字限制類模板或成員類必須滿足一定的語義要求。例如:
 

Copy

template <typename T> requires std::is_integral_v<T> class IntContainer { public: IntContainer(T t) : value_{t} {} private: T value_; };

在這個例子中,使用 requires 關鍵字限制類模板參數 T 必須是整數類型。

需要注意的是,requires 關鍵字僅能用于函數模板和類模板中,不能用于非模板函數和非模板類。此外,requires 關鍵字的語義要求必須在編譯時可驗證,否則將引發編譯時錯誤。

 

Copy

#include <iostream> class TestRequires { public: template <typename T> static void test(T t) requires std::is_integral_v<T> { std::cout << "test(T t) requires int" << std::endl; } template <typename T> static void test(T t) requires std::is_floating_point_v<T> { std::cout << "test(T t) requires float" << std::endl; } }; int main() { TestRequires::test(123); TestRequires::test(1.234); return 0; }

除此之外,requires關鍵字也可以用于類型轉換前的檢查(假如函數內需要):

 

Copy

template <typename T> int64_t unpack(T v) requires std::is_integral<T>::value {return static_cast<int64_t>(v);}

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

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

相關文章

激光雷達技術:科技之眼,照亮前行

在科技與人文關懷的交響樂章中&#xff0c;一項名為“蝙蝠避障”使用了激光雷達技術原理及應用的創新成果&#xff0c;正悄然改變著視障朋友們的生活方式&#xff0c;為他們的日常出行鋪設了一條充滿希望的光明之路。今天&#xff0c;讓我們一起深入探討這項技術如何成為盲人出…

深化市場布局與產業鏈整合,三清互聯以創新為公司發展賦能

近年來&#xff0c;我國大力發展現代化電力體系&#xff0c;并不斷推進智能電網的發展&#xff0c;電力物聯網作為支撐電力行業數字化發展的關鍵基礎設施&#xff0c;迎來了快速發展黃金時期。作為電力物聯網領域領先企業之一&#xff0c;三清互聯憑借敏銳的市場洞察力和技術創…

探索軟件測試中的創新測試方法:測試左移

軟件測試中的測試左移方法 在當今競爭激烈的市場中&#xff0c;滿足客戶的期望和需求是所有公司在競爭中成為市場領導者的關鍵。這就是為什么越來越多的公司現在轉向測試左移&#xff0c;并將其應用于產品開發過程。 在本文中&#xff0c;我們將從初學者的角度來介紹測試左移…

cmd如何以管理員身份運行

打開開始菜單。 在搜索框中輸入cmd。 在搜索結果中&#xff0c;找到cmd&#xff0c;右鍵單擊&#xff0c;選擇“以管理員身份運行”。 參考&#xff1a; cmd如何以管理員身份運行

2024最新大廠C++面試真題合集,大廠面試百日沖刺 bay10

字節后端 什么叫進程&#xff1f;什么叫線程&#xff1f;他倆有什么區別和聯系&#xff1f; 進程是操作系統進行資源分配和調度的基本單位&#xff0c;是一個程序關于某數據集合上的一次運行活動&#xff0c;是系統進行資源分配和調度的獨立單位。 線程是進程的一個執行流&am…

刷題之字母異位詞(leetcode 哈希表)

https://leetcode.cn/problems/group-anagrams/ class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>>map;//哈希表鍵為排序后或者處理后的字符串&#xff0c;值為某…

(1)醫療圖像處理:MRI磁共振成像-基本原理--(楊正漢

一、基本原理 1.組成 對應了解 1&#xff09;主磁體&#xff1a; 基本構建&#xff0c;用于產生磁場&#xff0c;主要有兩種方式產生磁場永磁&#xff08;磁鐵&#xff09;、電磁&#xff08;給線圈通電&#xff09;。MR按主磁場的場強分類主要有四類&#xff0c;分類的原因…

5.14學習總結

java聊天室項目 分片上傳 將大文件切分為多個小的數據塊&#xff08;通常大小為1MB~10MB&#xff09;&#xff0c;然后將這些小數據塊分別上傳至服務器&#xff0c;最后由服務器將這些小塊組合成完整的文件。這種方式可以避免由于網絡中斷或超時而導致上傳失敗&#xff0c;并…

【PMP練習題】

PMP練習題 PMP練習題 PMP練習題 2、 [單選] 由于缺乏資金&#xff0c;一個項目在啟動階段被終止&#xff0c;項目經理必須對項目收尾。項目經理首先應該做什么&#xff1f; Due to lack of funding, a project is terminated during its initiation phase and the project man…

第83天: 代碼審計-PHP 項目RCE 安全調試追蹤代碼執行命令執行

案例一&#xff1a;CNVD拿1day-RCE命令執行-百家CMS 這里用代碼審計系統搜索system&#xff0c;可以利用的是第一種 打開看細節 查找函數引用 查找$_file第一次出現的地方 這個時候就明白了&#xff0c;必須上傳文件&#xff0c;然后利用文件名&#xff0c;去執行system命令 …

Java項目:基于ssm框架實現的房屋租售網站管理系統(房屋租賃和房屋出售一體)(B/S架構+源碼+數據庫+畢業論文+開題+任務書)

一、項目簡介 本項目是一套基于ssm框架實現的房屋租售網站管理系統 包含&#xff1a;項目源碼、數據庫腳本等&#xff0c;該項目附帶全部源碼可作為畢設使用。 項目都經過嚴格調試&#xff0c;eclipse或者idea 確保可以運行&#xff01; 該系統功能完善、界面美觀、操作簡單、…

Hadoop Java API操作 及讀取序列化文件(04-05-06)

針對于04-05-06班級整合。 1.創建java項目 2.修改pom.xml文件 添加依賴 <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.4</version></dependenc…

【Linux網絡編程】IO多路轉接之poll

poll 1.poll初始2.poll函數接口3.poll服務器4.poll的優點缺點 點贊&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;關注&#x1f496;&#x1f496; 你的支持是對我最大的鼓勵&#xff0c;我們一起努力吧!&#x1f603;&#x1f603; 1.poll初始 poll也是一種linux…

Unity設計模式之工廠模式

什么是工廠模式&#xff1f; 工廠是一種創建型設計模式。通俗來講就是提供一種封裝對象創建的方式&#xff0c;將對象的創建和使用區分開。就是Unity里面通常用到的創建和管理對象。 工廠模式有什么優點&#xff1f; 1、封裝對象的創建方式&#xff0c;使其更加靈活、易于管理…

vue elementui時間選擇器返回的時間轉成年月日-格式

關鍵點&#xff1a;value-format“yyyy-MM-dd” <template><el-date-pickerv-model"date"type"date"placeholder"選擇日期"format"yyyy-MM-dd"value-format"yyyy-MM-dd"></el-date-picker> </template…

【教學類-55-04】20240515圖層順序挑戰(四格長條紙加黑色邊框、4*4、7張,不重復5400張,16坐標點顏色哈希值去重、保留7色)

背景需求&#xff1a; 前文實現了7張色彩紙條加上黑色邊框的需求。 【教學類-55-02】20240512圖層順序挑戰&#xff08;四格長條紙加黑色邊框、4*4、7張 、43200張去掉非7色有23040張&#xff0c;哈希算法快速去重剩余1221張&#xff09;-CSDN博客文章瀏覽閱讀1k次&#xff0…

GPT-4o模型介紹和使用方法

大家好,我是herosunly。985院校碩士畢業,現擔任算法研究員一職,熱衷于機器學習算法研究與應用。曾獲得阿里云天池比賽第一名,CCF比賽第二名,科大訊飛比賽第三名。擁有多項發明專利。對機器學習和深度學習擁有自己獨到的見解。曾經輔導過若干個非計算機專業的學生進入到算法…

9個優質免費視頻素材網站推薦丨2024年最新資源合集

在短視頻火爆的時代&#xff0c;高清、無水印、可商用的視頻素材變得尤為重要。下面是我精心整理的9個常用免費視頻素材網站&#xff0c;適合各類視頻創作者。希望你能找到滿意的素材&#xff01; 一、視頻素材 1. 蛙學府 優點&#xff1a;豐富的正版商用素材&#xff0c;涵蓋…

AI 繪畫神器 Fooocus 高級用法:設置、風格、模型、高級設置

本文收錄于《AI繪畫從入門到精通》專欄&#xff0c;專欄總目錄&#xff1a;點這里&#xff0c;訂閱后可閱讀專欄內所有文章。 大家好&#xff0c;我是水滴~~ 本文精選了一系列高級技巧和細致調整&#xff0c;旨在提升 Fooocus 用戶在利用 Stable Diffusion 模型進行圖像生成時的…

vue使用marked和highlight.js實現代碼高亮效果

marked是對markdown進行解析的插件&#xff0c;它可以把markdown語法解析成html語法&#xff0c;從而實現頁面效果&#xff0c;而highlight.js是對解析出的代碼實現高亮效果 效果&#xff1a; 安裝&#xff1a;避免踩我走的坑&#xff0c;安裝盡量按照這個版本安裝 npm install…