C++中的自定义类型—typedef、using、枚举、auto、decltype

1. 类型别名:为已有类型另外命名

1.1) typedef 已有类型名 新类型名表

例:

typedef double Area, Volume;
typedef int Natural;

Natural i1,i2;
Area a;
Volume v;

1.2) using 新类型名 = 已有类型名;

例:

using Area = double;
using Volume = double;

2. 枚举类型

定义方式: 将全部可取值一一列举出来
语法形式: enum 枚举类型名 {变量值列表};

例:enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT};

默认情况下: SUN=0,MON=1,TUE=2,…,SAT=6

3. 不限定作用域枚举类型说明:

1). 枚举元

<think>好的,用户想了解C++中的变量类型的完整列表。我需要先整理C++的基本变量类型,包括基本类型、派生类型和其他类型。首先,基本类型应该包括整型、浮点型、字符型、布尔型和void类型。整型又分为short、int、long、long long,以及有无符号的区别。浮点型包括float、double、long double。字符型有char、wchar_t、char16_t、char32_t。布尔型就是bool,void用于函数返回值或指针。 接下来是派生类型,比如数组、指针、引用、结构体、联合体、枚举和类。这些可能需要更详细的解释,比如指针和引用的区别,结构体和类的不同之处。另外,用户提供的引用中提到extern和auto的使用,还有const,这些也应该涵盖进去。比如存储类说明符如auto、register、static、extern、mutable,以及类型限定符const和volatile。 还要注意C++11引入的新特性,比如auto自动类型推导,右值引用等。引用[3]里提到了左值和右值,可能需要简要说明。用户可能还关心类型修饰符如signed、unsigned、long、short,以及它们如何影响变量的存储大小和范围。 在回答时,需要确保每个类型都有清晰的例子,比如代码片段,但根据用户的要求,行内数学表达式要用$...$,独立公式用$$...$$。不过这里主要是变量类型,可能数学表达式较少,但如果有涉及的话要注意格式。 用户的问题是关于完整列表,所以需要尽可能全面,不要遗漏。例如,除了基本类型,还有复合类型如结构体、联合体,枚举,类,以及C++11的枚举类。同时,可能需要提到类型别名usingtypedef,以及decltype类型指示符。 需要检查引用中的内容,引用[1]提到选择合适的变量类型的重要性,引用[2]展示了extern声明和变量定义的例子,引用[3]涉及auto、const和左值右值。这些内容应该整合到回答中,确保覆盖存储类说明符、类型限定符以及C++11特性。 最后,生成相关问题时要围绕变量类型的不同方面,比如类型转换、作用域、存储类别、新特性等。确保问题有针对性,帮助用户进一步学习。 现在整理结构,先分大类,再详细列出每个类型,给出简要说明和例子。注意使用中文,代码部分用正确的格式,引用标识放在适当的位置。</think>### C++ 变量类型完整解析 C++ 变量类型可分为**基本类型**、**派生类型**和**复合类型**,同时包含**类型限定符**和**存储类说明符**的灵活组合[^1]。以下是完整分类及示例: --- #### 一、基本类型 1. **整型** - `short`(短整型):$2$字节,范围$-32768$到$32767$ - `int`(整型):通常$4$字节,范围$-2^{31}$到$2^{31}-1$ - `long`(长整型):$4$或$8$字节(平台相关) - `long long`(长长整型):$8$字节,范围$-2^{63}$到$2^{63}-1$ - 符号修饰:`signed`(默认)和`unsigned`(无符号) 2. **浮点型** - `float`:单精度,$4$字节,精度约$6$位小数 - `double`:双精度,$8$字节,精度约$15$位小数 - `long double`:扩展精度,通常$10$字节或更多 3. **字符型** - `char`:$1$字节,存储ASCII字符 - `wchar_t`:宽字符(如Unicode) - `char16_t`/`char32_t`:UTF-16/UTF-32字符(C++11新增) 4. **布尔型** - `bool`:取值`true`或`false` 5. **空类型** - `void`:用于函数无返回值或通用指针`void*` --- #### 二、派生类型 1. **指针(Pointer)** ```cpp int* ptr = &a; // 指向整型的指针 ``` 2. **引用(Reference)** ```cpp int& ref = a; // 对变量a的别名 ``` 3. **数组(Array)** ```cpp int arr[5] = {1,2,3,4,5}; // 5个元素的整型数组 ``` 4. **结构体(Struct)** ```cpp struct Point { int x; int y; }; // 复合数据类型 ``` 5. **联合体(Union)** ```cpp union Data { int i; float f; }; // 共享内存空间 ``` 6. **枚举(Enum)** ```cpp enum Color { RED, GREEN, BLUE }; // 枚举常量集合 ``` 7. **类(Class)** ```cpp class Circle { private: double radius; public: double area() { return 3.14 * radius * radius; } }; ``` --- #### 三、类型限定符与存储类说明符 1. **类型限定符** - `const`:常量,不可修改 ```cpp const int MAX = 100; // 编译时常量[^3] ``` - `volatile`:防止编译器优化(如硬件寄存器) 2. **存储类说明符** - `auto`:自动类型推导(C++11) ```cpp auto x = 5; // x类型为int[^3] ``` - `static`:静态生命周期 - `extern`:跨文件引用变量 ```cpp extern int globalVar; // 声明在其他文件定义的变量[^2] ``` - `mutable`:允许const成员修改 - `register`(已弃用):建议变量存寄存器 --- #### 四、C++11新增类型 1. **枚举类(Enum Class)** ```cpp enum class Direction { Up, Down }; // 强类型枚举 ``` 2. **右值引用(Rvalue Reference)** ```cpp int&& rref = 42; // 用于移动语义 ``` 3. **类型别名(using/typedef)** ```cpp using Vec = std::vector<int>; // 替代typedef ``` 4. **decltype类型推导** ```cpp decltype(x) y = 10; // y的类型与x相同 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值