当前位置: 首页 > news >正文

C++ 类型声明

类型别名

typedef关键字

typedef关键字是继承自C语言的特性,利用它我们可以为一个类型起别名,一般用于将复杂类型简化。举个简单的例子,将int类型定义为integer类型,之后就可以在代码中使用integer作为类型使用。

//typedef关键字
typedef int integer;
integer i = 5;

别名声明

C++还新增了另一种声明类型别名的方法,这就是别名声明。

//别名声明
using charater = char;
charater c = 'c';

auto关键字

使用auto关键字可以简话类型声明。当使用auto关键字是,变量的类型由编译器自动推断。

//auto关键字
auto number = 100;//number是int
auto pnumber = &number;//pnumber是int*

由于编译器需要根据给定的初始值判断变量的类型,所以auto类型的变量必须初始化。而且如果在一行声明多个变量,那么这些变量的类型必须相同。

auto ca = 'a', cb = 'b';

如果使用常量来初始化auto变量,那么编译器会忽略顶层const,保留底层const。所以在下面的例子中,auto变量和原变量的类型并不完全相同。

//忽略顶层const,保留底层const
const int cn = 100;
const int* pn = &cn;
auto cn2 = cn;//int
auto pn2 = pn;//const int*

decltype关键字

有时候可能需要根据表达式的类型来决定要使用的类型,在这种情况下可以使用C++新增的decltype关键字。在下面的例子中,由于decltype中的表达式类型不同,所以声明的变量的类型也不同。

//decltype关键字
decltype(5 + 5) n1;//int
decltype(5 + 5.0) n2;//double

decltype关键字可以接受的表达式类型很广泛,甚至可以接受函数作为表达式,这时候会将函数的返回值类型作为要使用的类型,注意编译器不会真的调用这个函数,仅仅是分析它的返回值而已。如果表达式是一个引用,那么获得的类型就是严格的这个引用的类型,包括顶层和底层const在内。

特别要注意的一点是,如果表达式本身使用括号包括,那么这其实是一个引用类型,所以这时候的变量必须初始化。

//必须初始化
decltype((n2)) n3 = n2;//int&

相关文章:

  • 信息系统项目管理师----成本类计算
  • 【JavaScript】JavaScript赋值语句中的逻辑与和逻辑或||
  • NS3网络仿真(10): 解析以太网帧
  • Redis API 必杀解读:引入RedisTemplate
  • 第十五 jQuery
  • 设置防火墙使mysql可以远程连接的方法
  • 【转】mysql explain执行计划详解
  • iOS平台设置系统状态栏(通知栏、顶部状态栏)样式背景颜色或透明
  • AngularJs工具方法
  • 线上 python http server profile 实践
  • 关于Unity中如何立即中断动画然后重新开始播放
  • windows下安装bpython方法 (新)
  • 为tomcat配置项目必须的引擎文件
  • ORACLE in与exists语句的区别
  • HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9
  • [LeetCode] Wiggle Sort
  • [译]Python中的类属性与实例属性的区别
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【刷算法】从上往下打印二叉树
  • axios 和 cookie 的那些事
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • create-react-app做的留言板
  • download使用浅析
  • Fabric架构演变之路
  • httpie使用详解
  • Puppeteer:浏览器控制器
  • Python学习笔记 字符串拼接
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 番外篇1:在Windows环境下安装JDK
  • 普通函数和构造函数的区别
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何合理的规划jvm性能调优
  • 手写一个CommonJS打包工具(一)
  • 微信小程序:实现悬浮返回和分享按钮
  • 一个SAP顾问在美国的这些年
  • 怎么将电脑中的声音录制成WAV格式
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 昨天1024程序员节,我故意写了个死循环~
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #13 yum、编译安装与sed命令的使用
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)STL算法之遍历容器
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm码农论坛 毕业设计 231126
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)【Hibernate总结系列】使用举例
  • (转)jQuery 基础
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NetCore 如何动态路由
  • .net连接MySQL的方法