C++標準模板(STL)- 類型支持 (類型修改,添加 const 或/與 volatile 限定符到給定類型,std::add_cv)

類型特性

類型特性定義一個編譯時基于模板的結構,以查詢或修改類型的屬性。

試圖特化定義于 <type_traits> 頭文件的模板導致未定義行為,除了 std::common_type 可依照其所描述特化。

定義于<type_traits>頭文件的模板可以用不完整類型實例化,除非另外有指定,盡管通常禁止以不完整類型實例化標準庫模板。
?

類型修改


類型修改模板通過應用修改到模板參數,創建新類型定義。結果類型可以通過成員 typedef type 訪問。
?

添加 const 或/與 volatile 限定符到給定類型

std::add_cv, 
std::add_const, 
std::add_volatile

template< class T >
struct add_cv;

(1)(C++11 起)

template< class T >
struct add_const;

(2)(C++11 起)

template< class T >
struct add_volatile;

(3)(C++11 起)

提供同 T 的成員 typedef type ,除了它擁有添加的 cv 限定符(除非 T 是函數、引用或已擁有 cv 限定符)。

1) 添加 const 和 volatile

2) 添加 const

3) 添加 volatile

成員類型

名稱定義
type帶 cv 限定符的類型 T

輔助類型

template< class T >
using add_cv_t ? ? ? = typename add_cv<T>::type;

(C++14 起)

template< class T >
using add_const_t ? ?= typename add_const<T>::type;

(C++14 起)

template< class T >
using add_volatile_t = typename add_volatile<T>::type;

(C++14 起)

可能的實現

template< class T >
struct add_cv { typedef const volatile T type; };template< class T> struct add_const { typedef const T type; };template< class T> struct add_volatile { typedef volatile T type; };

調用示例

#include <iostream>
#include <type_traits>struct foo
{void m(){std::cout << "Non-cv" << std::endl;}void m() const{std::cout << "Const" << std::endl;}void m() volatile{std::cout << "Volatile" << std::endl;}void m() const volatile{std::cout << "Const-volatile" << std::endl;}
};int main()
{foo{}.m();std::cout << "std::add_const<foo>::type:        ";std::add_const<foo>::type{}.m();std::cout << "std::add_volatile<foo>::type:     ";std::add_volatile<foo>::type{}.m();std::cout << "std::add_cv<foo>::type:           ";std::add_cv<foo>::type{}.m();return 0;
}

輸出

Non-cv
std::add_const<foo>::type:        Const
std::add_volatile<foo>::type:     Volatile
std::add_cv<foo>::type:           Const-volatile

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

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

相關文章

SAP的四種計量單位

在SAP中物料創建后&#xff0c;一旦發生業務&#xff0c;其基本計量單位便很難修改。由于單位無法滿足業務要求&#xff0c;往往會要求新建一個物料替代舊物料。這時候除了要將舊物料上所有的未清業務刪除外&#xff0c;還需要替換工藝與BOM中的舊物料。特別是當出現舊物料存在…

Linux學習筆記-Ubuntu下使用Crontab設置定時任務

文章目錄 一、概述二、基于crontab的設置2.1 基本命令說明2.2 使用-e指令編輯命令2.2.1 進入編輯模式2.2.2 指令信息格式2.2.4 開啟日志1) 修改rsyslog配置文件2) 重啟rsyslog3) 查看日志 2.2.3 設置后之后重啟服務 三、示例3.1 每隔一分鐘往文件中日期3.2 使用-l查看任務列表3…

越南服務器租用:企業在越南辦工廠的趨勢與當地(ERP/OA等)系統部署的重要性

近年來&#xff0c;越南逐漸成為全球企業布局的熱門目的地之一。許多企業紛紛選擇在越南設立工廠&#xff0c;以利用其低廉的勞動力成本和優越的地理位置。隨著企業在越南的擴張&#xff0c;對于當地部署ERP系統或OA系統等的需求也日益增長。在這種情況下&#xff0c;租用越南服…

上海亞商投顧:北證50指數持續大漲 短劇概念股再爆發

上海亞商投顧前言&#xff1a;無懼大盤漲跌&#xff0c;解密龍虎榜資金&#xff0c;跟蹤一線游資和機構資金動向&#xff0c;識別短期熱點和強勢個股。 一.市場情緒 滬指昨日震蕩調整&#xff0c;深成指跌超1.4%&#xff0c;創業板指跌超1.7%。北證50指數大漲超8%&#xff0c;…

ROS設置DHCP option121

配置時&#xff0c;了解格式很關鍵&#xff0c;16進制填寫格式如下&#xff1a; 將要訪問的IPV&#xff14;地址&#xff1a;192.168.100.0/24 192.168.30.254 轉換為&#xff1a;掩碼 目標網段 網關 0x18c0a864c0a81efe&#xff0c;0不用填寫 ROS配置如下圖&#xff1a; 抓…

02_使用API_String

StringBuilder StringBuilder 代表可變字符串對象&#xff0c;相對于是一個容器&#xff0c;它里面裝的字符串是可以改變的&#xff0c;就是用來操作字符串的好處&#xff1a;StringBuilder 比 String 更適合做字符串的修改操作&#xff0c;效率會更高&#xff0c;代碼也會更簡…

MacOS “xxxxx“,已損壞,無法打開,你應該將它移到廢紙簍

在這里插入圖片描述 解決方案 應用程序 - 實用工具中打開終端&#xff0c;輸入命令&#xff0c; sudo xattr -r -d com.apple.quarantine 然后將程序拖放至命令窗口&#xff0c;如下圖&#xff1a;

22. Spring源碼篇之推斷構造方法

簡介 很多時候我們的構造器都不止一個&#xff0c;那么spring怎么選擇的呢&#xff0c;簽名介紹了推斷構造方法的擴展點&#xff0c;可以使用Autowired注解去選擇使用哪個構造器&#xff0c;但是即使這樣也有可能有多個Autowired且required為false的構造器&#xff0c;那么還是…

QLineEdit響應editingFinished實現只響應一次

QLineEdit中editingFinished槽函數會在按下enter時響應兩次&#xff0c;分別是按下enter和失去焦點的時候&#xff0c;為了能讓 QLineEdit只響應其中一次&#xff0c;需定義一個全局變量m_bFlagEnter保存是否enter是否按下&#xff0c;按下后&#xff0c;則在失去焦點的時候做對…

Unity發布IOS后,使用xcode打包報錯:MapFileParser.sh:Permissiondenied

1.錯誤提示 使用xcode打包錯誤提示&#xff1a;/Users/mymac/Desktop/myproject/MapFileParser.sh: Permission denied 2.解決方案 打開控制臺輸入&#xff1a;chmod ax /Users/mymac/Desktop/myproject/MapFileParser.sh。按回車鍵執行&#xff0c;然后重新使用xcode發布程序…

【開源】基于JAVA的在線課程教學系統

項目編號&#xff1a; S 014 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S014&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S014&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 系統介紹1.2 項目錄屏 二、研究內容2.1 課程類型管理模塊2.2 課程管理模塊2…

機器學習之數據清洗和預處理

目錄 Box_Cox Box_Cox Box-Cox變換是一種用于數據預處理和清洗的方法&#xff0c;旨在使數據更符合統計模型的假設&#xff0c;特別是對于線性回歸模型。這種變換通過調整數據的尺度和形狀&#xff0c;使其更加正態分布。 Box-Cox變換的定義是: y ( λ ) { y λ ? 1 λ , i…

【深度學習】卷積神經網絡(CNN)

一、引子————邊界檢測 我們來看一個最簡單的例子&#xff1a;“邊界檢測&#xff08;edge detection&#xff09;”&#xff0c;假設我們有這樣的一張圖片&#xff0c;大小88&#xff1a; 圖片中的數字代表該位置的像素值&#xff0c;我們知道&#xff0c;像素值越大&#…

QQ怎么備份聊天記錄?3個方法教你快速備份!

QQ聊天記錄作為用戶和親人、好友以及同事之間溝通的憑證&#xff0c;可以幫助我們回憶起過去的交流內容。如果我們不小心誤刪了QQ聊天記錄或者更換了新手機&#xff0c;那么這時候就需要備份聊天記錄。qq怎么備份聊天記錄呢&#xff1f;本文將介紹3個簡單方法&#xff0c;幫助您…

MySQL - 4種基本索引、聚簇索引和非聚索引、索引失效情況

目錄 一、索引 1.1、簡單介紹 1.2、索引的分類 1.2.1、主鍵索引 1.2.2、單值索引&#xff08;單列索引、普通索引&#xff09; 1.2.3、唯一索引 1.2.4、復合索引 1.2.5、復合索引經典問題 1.3、索引原理 1.3.1、主鍵自動排序 1.3.2、索引的底層原理 1.3.3、B 樹和 B…

創作4周年

&#x1f64c;秋名山碼民的主頁 &#x1f602;oi退役選手&#xff0c;Java、大數據、單片機、IoT均有所涉獵&#xff0c;熱愛技術&#xff0c;技術無罪 &#x1f389;歡迎關注&#x1f50e;點贊&#x1f44d;收藏??留言&#x1f4dd; 獲取源碼&#xff0c;添加WX 目錄 前言機…

哈希表-set、map

當需要判斷一個元素是否在集合中時&#xff0c;就使用哈希法 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根據鍵&#xff08;Key&#xff09;而直接訪問在內存存儲位置的數據結構。 哈希表中關鍵碼就是數組的索引下標&#xff0c;然后通過…

Web框架Flask

Web框架Flask Flask簡介第一個Flask應用Flask路由Flask路由變量規則Flask URL 構建Flask重定向Flask靜態文件Flask渲染模板Flask請求對象Flask響應對象Flask CookiesFlask錯誤Flask JSON 格式的 APIFlask SessionFlask 消息閃現Flask日志Flask藍圖Flask視圖Flask Jinja2 模板F…

微信消息提醒

有時候同事沒有打開微信&#xff0c;重要的信息可以設置提醒

app小程序開發的重點在哪里?|企業軟件定制網站建設

app小程序開發的重點在哪里&#xff1f;|企業軟件定制網站建設 App小程序定制開發是近年來快速發展的一項技術服務&#xff0c;隨著移動互聯網的普及和用戶需求的不斷升級&#xff0c;越來越多的企業和個人開始關注和需求定制化的小程序開發。那么&#xff0c;對于app小程序定制…