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.mzph.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小程序定制…