首页 > 编程语言 >C++中decltype关键字用法总结

C++中decltype关键字用法总结

时间:2024-10-27 11:48:56浏览次数:9  
标签:decltype 推导 int auto C++ 关键字 exp const

目录

一、前言

二、基本用法及示例 

三. 推导规则

四.decltype与typeid的区别

五. decltype与std::decay的关系

六.总结


一、前言

        decltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有的自动类型推导场景,在某些特殊情况下auto用起来很不方便,甚至压根无法使用,decltype在模板编程和类型推导中非常有用。

 

auto varName = value;

decltype(exp) varName = value;

二、基本用法及示例 

       1、 auto根据=右边的初始值推导出变量的类型,decltype根据exp表达式推导出变量的类型,跟=右边的value没有关系 

int x = 5;
decltype(x) y = 10; // y 的类型是 int

        2、auto要求变量必须初始化,这是因为auto根据变量的初始值来推导变量类型的,如果不初始化,变量的类型也就无法推导

template <typename T1, typename T2>
auto add(T1 a, T2 b) -> decltype(a + b) {
    return a + b;
}

        3、而decltype不要求,因此可以写成如下形式

decltype(exp) varName;

        原则上讲,exp 只是一个普通的表达式,它可以是任意复杂的形式,但必须保证 exp 的结果是有类型的,不能是 void;如果 exp 为一个返回值为 void 的函数时,exp 的结果也是 void 类型,此时会导致编译错误。示例如下:

int x = 0;

decltype(x) y = 211; // y -> int

decltype(x + y) z = 333; // z -> int

const int& i = x;

decltype(i) j = y; // j -> const int&

const decltype(z) *p = &z; // *p -> const int, p -> const int*

decltype(z) *m = &z; // *m -> int, m -> int*

decltype(m)* n = &m; // *n -> int*, n -> int**

三. 推导规则

        decltype的推导规则可以简单概述如下

标签:decltype,推导,int,auto,C++,关键字,exp,const
From: https://blog.csdn.net/fanyun_01/article/details/143215516

相关文章

  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.C++11(1)
    1.自动类型推导(auto)C++11引入了auto关键字,可以根据初始值的类型自动推导变量的类型,从而减少了手动声明类型的繁琐。例如:std::vector<int>vec={1,2,3,4};autoit=vec.begin();//自动推导类型为std::vector<int>::iteratorauto的引入使代码更加简洁......
  • C++ -stack、queue
    博客主页:【夜泉_ly】本文专栏:【C++】欢迎点赞......
  • 为什么 C++ 能够源码级兼容C语言
    ##为什么C++能够源码级兼容C语言在探讨C++为何能源码级兼容C语言的问题时,我们首先需要明确一点:C++设计之初,就将与C语言的兼容性作为核心目标之一。这种兼容性主要体现在两个方面:语法和库函数。简而言之,C++保留了C语言的语法结构和大部分库函数,同时引入了面向对象编程、泛型编......
  • 7.C++数组
    C++数组1.数组1.数组在C++中,数组是一种存储固定大小的相同类型元素的序列。数组的所有元素都存储在连续的内存位置上。这种数据结构非常适合于存储具有固定数量和相同数据类型的元素集合。声明数组声明数组的基本语法如下数据类型数组名[数组大小];声明一......
  • 每日OJ题_牛客_城市群数量_FloodFill_C++_Java
    目录牛客_城市群数量_BFS/并查集题目解析C++代码Java代码牛客_城市群数量_BFS/并查集城市群数量_牛客题霸_牛客网(nowcoder.com)描述:        给定一个n个节点的邻接矩阵m。节点定义为城市,如果a城市与b城市相连,b与c城市相连,尽管a与c并不直接......
  • C++/CLI使用Office.Interop库创建excel,同时解决写入速度慢的问题
    boolWriteExcelFile_OfficeInterop(String^path,DataSet^dt, conststd::vector<std::string>&sheetName,boolhideColumnName) { //Ifthefilealreadyexists,deleteitandthengeneratefile if(System::IO::File::Exists(path)) { try......
  • C++/CLI 类内多线程编程 多个参数
    usingnamespaceSystem;usingnamespaceSystem::Threading;namespaceNNNN{ publicrefclassTTTT { staticThread^t1; staticThread^t2; voidfun() { t1=gcnewThread(gcnewParameterizedThreadStart(DoWork1)); t2=gcnewThread(gcnewP......
  • 最新毕设-SpringBoot-健康体检系统-12791(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    springboot健康体检系统摘要在如今IT技术快速发展和Internet广泛应用的时代,电子和网络技术给人们生活带来了便利,同时也会直接或间接损害人们的健康。所以,本次的毕业设计创作的意义就是通过信息化的统一管理,给用户尽心健康体检预约提供了方便。本设计主要实现集人性化、高效......
  • (2024最新毕设合集)基于Django的房价分析平台-65434|可做计算机毕业设计JAVA、PHP、爬虫
    摘要本论文主要论述了如何基于Django框架开发一个房价分析平台,本系统将严格按照软件开发流程进行各个阶段的工作,通过爬虫技术对贵州省的房价数据进行爬取,面向对象编程思想进行项目开发。在引言中,作者将论述房价分析平台的当前背景以及系统开发的目的,后续章节将严格按照软件......
  • 【信奥赛·算法基础】CSP-J C++ 贪心算法示例汇总
    序言为了更清晰的了解贪心算法,我把常见的贪心算法示例做了一个总结,把问题和策略,以及代码示例放到了一起,方便学习和分析,这里示例仅以C++为例,其他语言可根据示例调整即可一、钱币找零问题问题描述:给定不同面额的钱币以及每种面额的数量,用最少的钱币张数凑齐给定的总金额。......