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&

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏null的专栏

PHP基础——PHP数组

PHP数组与其他语言的数组有些不同,在PHP中,数组包含两种类型的数组: 数字索引数组 关联数组 其中,数字索引数组是指其key为数字,而后者可以使用字符串作为...

40860
来自专栏lzj_learn_note

5-遍历、公共方法、引用

通过for ... in ...:的语法结构,可以遍历字符串、列表、元组、字典,集合等数据结构。

9240
来自专栏Java技术分享

反射类的方法

关于对类的方法的反射。其中包括静态方法,普通方法,带参数的方法,以及最重要的String[]数组的方法的反射以及需要注意的细节问题,都是基础,所以请各位多多包涵...

24170
来自专栏黑泽君的专栏

Java继承中的几道面试题

13920
来自专栏LanceToBigData

JavaSE(二)之继承、封装、多态

学习完类与对象终于认识到什么是类,什么是对象了。接下来要看的就是java的三大特征:继承、封装、多态。 一、封装(数据的隐藏) 在定义一个对象的特性的时候,有必...

27850
来自专栏java达人

Java初始化顺序

作者:wota 来源:http://www.cnblogs.com/miniwiki/archive/2011/03/25/1995615.html(点击文末阅...

23770
来自专栏前端知识分享

第174天:面向对象——公有属性、私有属性和静态属性

15630
来自专栏我的博客

Python字符串

# -*- coding: utf-8 -*- import re #字符串替换 str1 = 'hello world world world abc=12...

32860
来自专栏androidBlog

java字符串对象的存储机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

29110
来自专栏黑泽君的专栏

静态变量和成员变量的区别 && 成员变量和局部变量的区别

=============================================================================

17920

扫码关注云+社区

领取腾讯云代金券