C++ 类型别名

C++ 为类型建立别名的方式有两种

1、是用预处理器;

通用格式为:#definealiasName typeName

例如:

#define BYTE char

对于第一种方法,预处理器将在编译程序时用 char 替换所有的 BYTE,从而使 BYTE 成为 char 的别名。

2、使用C++(和C ) 的关键字 typedef 来创建别名;

通用格式为:typedef typeName aliasName;

例如:

typedef char BYTE

对于第二种方法,typedef 不会创建新类型,只是为已有的类型建立了一个新名称,在使用时将BYTE 类型的值视为 char 类型。

特例:

通常情况下#define和typedef都可以用来为对象建立别名,不过在声明一系列变量的时候使用#define并不适用。

例如:

#define INT_POINTER int*
INT_POINTER a,b;

预处理器置换将该声明转换为如下形式:

int* a,b;

即 a 为 int* 类型,b 为 int 类型;

而 typedef 方法不会有这样的问题,其能够处理更复杂的类型别名,所以与#define相比,推荐使用typedef。

时间: 2024-10-10 07:16:28

C++ 类型别名的相关文章

类型别名(define与typedef)

#define NEW OLD //使用预处理器的方法,为OLD定义一个新名称NEW,使用define定义的类型别名,会在预处理的过程中对NEW进行“单纯”的替换,例如: #define N 3+2 int i = N * 2; //预处理后,将会变成 int i = 3 + 2 * 2; //i 的结果将会是7 typedef typeName aliasName; //使用关键字typedef来创建别名,typedef不会创建新的类型,而只是为已知类型创建一个新名称. 两者比较: typed

Swift编程语言学习1.5——类型别名、布尔值、元组

类型别名 类型别名(type aliases)就是给现有类型定义另一个名字.你可以使用typealias关键字来定义类型别名. 当你想要给现有类型起一个更有意义的名字时,类型别名非常有用.假设你正在处理特定长度的外部资源的数据: typealias AudioSample = UInt16 定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名: var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound 现在是 0 本例中,A

类型别名、auto类型说明符和decltype类型说明符初探

类型别名 类型别名顾名思义是某种类型的另一个名字,常用于简化类型,易于理解和使用. 传统方法是使用关键字 typedef .新标准规定使用别名声明(alias declaration)来定义类型别名. using zhengxing = int; 如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句中往往会让人理解出错. typedef char *cstring;//cstring 是 char* 的别名 const cstring cstr = 0;//cstr 是指向 char 的

指针、常量和类型别名

今天看了C++Primer的2.5.1的一点小理解. 如果某个类型的别名指代的是复合类型或是常量,那么它用到声明语句里面就会产生意想不到的后果,例如下面的声明语句用到了类型pstring,它实际上是类型char*的别名: typedef char* pstring; const pstring cstr = 0; //cstr是指向char的常量指针 const pstring* ps; //ps是一个指针,指向char的常量指针. 上述两条声明语句的基本数据类型都是const pstring,

Swift之类型别名

类型别名是一个为已存在类型定义的一个可选择的名字.你可以关键字typealias定义一个类型的别名. 当你想通过在一个在上下文中看起来更合适可具有表达性的名字来引用一个已存在的类型时,这时别名就非常有用了,比如当使用来自外部指明大小的数据时: typealias AudioSample = UInt8 一旦你定义了一个类型别名时,你就可以在任何地方使用类型别名来代替原来使用的类型名字: var maxAmplitudeFound = AudioSample.min  // maxAmplitud

c++学习笔记2--constexpr,类型别名,auto

---恢复内容开始--- constexpr:修饰常量表达式,约定修饰对象不仅为常量,而且在编译阶段就能得到值. 与const不同的是,constexpr约束的是当事人,就是说,constexpr int *a=1;这样的语句,a指针本身是const,并且右边也足够简单,而const int*a:这样的语句,则约定了a指向对象是const,这是不同点.constexpr直接限定为顶层const. 类型别名:传统的是typedef, typedef double a; a b = 1.1; 类似这

Swift类型转换 和 类型别名的定义(typealias)

(一)类型转换 类型转化在 Swift 中是比较严格的,不同类型之间可以认为是不能相互转化的,只能重新产生一个对象和值,并拷贝一份. 1.0 整型数值之间的转换. // 不同类型是不能直接相加的,这时我们就需要用到类型转换 let int8 : Int8 = 12 let int16 : Int16 = 14 + Int16(int8) print(int16) //输出 : 26 又上可见,通过转化也可以顺利得到正确的值,但是值得我们注意的是:由短整型向长整型转换是都可以成功的,且不会丢失值:

04_Swift2基础之类型安全和类型推测+字面量+类型别名

1. 类型安全和类型推测 1> 类型安全 Swift 是一个 _类型安全(type safe)_ 的语言.类型安全的语言可以让你清楚地知道代码要处理的值的类型.如果你的代码需要一个`String`,你绝对不可能不小心传进去一个`Int`. 由于 Swift 是类型安全的,所以它会在编译你的代码时进行 _类型检查(type checks)_ ,并把不匹配的类型标记为错误.这可以让你在开发的时候尽早发现并修复错误. 当你要处理不同类型的值时,类型检查可以帮你避免错误.然而,这并不是说你每次声明常量和

Swift - 06 - 数值类型转换和类型别名

//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" // 数值类型转换 let three = 3 let PI = Double(three) + 0.1415926 // 两个类型不相同的数值不能进行基础运算,所以进行数值类型转换 // 类型别名(typealias) typealias NSInterger = Int var number