为已有类型另外命名:类型别名
typedef 已有类型名 新类型名表
typedef int Data;
typedef double Area,Volume;
Data n;
Area a;
Volume b;
using 新类型名=已有类型名
using Area=double;
using Data=int;
枚举类型
1.不限定作用域的枚举类型
enum 枚举类型名{变量值列表};
enum weekday
{sun,mon,tue,wed,thu,fri,sat};
列表默认从0开始,sun=0,mon=1,tue=2,...,sat=6说明:1.枚举元素是常量,不能对其赋值,不能写赋值表达式sun=7
2.枚举元素有默认值,默认从0开始,0 1 2...
3.可以在声明时另行指定枚举元素的值,例如:
enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};//若不指定mon=1,则mon会从8开始
4.枚举值可以进行关系运算
5.整数值不可以直接赋给枚举变量,必须进行强制类型转换
6.枚举值可以给整型变量赋值,因为枚举是整型的子集
应用:
#include<iostream>
using namespace std;
enum GameResult{WIN,LOSE,TIE,CANCEL};
int main()
{
GameResult result;
enum GameResult omit = CANCEL;//在这里前面有没有enum都没有关系
for (int count = WIN; count <= CANCEL; count++)
{
result = GameResult(count);//强制类型转换
if (result == omit)
cout << "The game was cancelled." << endl;
else
{
cout << "The game was played";
if (result == WIN)cout << " and we won!";
if (result == LOSE)cout << " and we lost.";
cout << endl;
}
}
system("pause");
return 0;
}
2.限定作用域的枚举类型
auto类型和decltype类型
auto类型:编译器通过初始值自动推断变量的类型
例如auto val=val1+val2;
val的类型取决于val1+val2的类型
decltype类型:定义一个变量与某一表达式类型相同但不用改表达式初始变量,例如:
decltype (i)j=2;//j以2为初始值但类型与i一致