本文将针对C++中常见类型及其特点和应用场景进行总结。
数组
数组是C/C++中非常常见的一种类型,这里总结一些常见的比较容易出错的数组相关知识。
初始化
一种不太常见的初始化方式
在阅读xv6操作系统源码时,看到了这样一种数组初始化方式:
1 | static const char * const error_string[MAXERROR] = { |
里面的大写都是宏定义,即具体的数字,实际跑了一下,发现可以部分初始化,而且最后加不加逗号均可以编译通过,这里进行一下记录。
枚举类型
枚举类型属于字面值常量,它使我们可以将一组整型常量组织在一起,C++11后,我们有了两种枚举类型:限定作用域与不限定作用域的枚举类型
限定与不限定作用域的枚举类型
1 | enum color {red, yellow, green}; //不限定作用域 |
枚举的应用场景
在使用常量的场合,我们可以广泛使用枚举类型,例如我们要去造一辆小汽车,这个汽车可以向前后左右四个方向行驶,那么我们可以定义如下枚举体:
1 | enum Movement { |
一些特殊的类型
size_t
在很多代码中我们都见过size_t这个类型,它被定义为”某个对象的大小(单位byte)”,同时,这个类型也是sizeof 操作符的返回类型。这个类型可以保证容纳系统能够处理的最大对象的size值,如果系统是32位,那么size_t为typedef size_t unsigned int
,而如果是64位,则为unsigned long long。需要注意的是size_t永远为正。
1 | // Here argument of 'n' refers to maximum blocks that can be |
凡是涉及到类型大小的,尽量使用size_t
类型处理
定义类型别名(typedef)
1 | //方法1 |
一些比较复杂的typedef理解
1 定义函数指针
有时候我们会看到这样的typedef:
1 | typedef void (*new_handler)(void); |
实际上是给函数指针起了一个别名,首先,我们先来看一下:void (*new_handler)();
,这个语句定义了一个函数指针,其返回类型为void,参数为void,函数名为new_handler。使用typedef可以令函数指针的使用更直观,此时我们可以直接使用new_handler
定义一个函数指针:
1 | new_handler set_new_handler(new_handler p) throw(); |
类型转换
C++提供了四种强制类型转换