### C++ 编程语言 — 类型与声明
在 C++ 编程中,类型与声明是基础且核心的概念。本章节将详细解释 C++ 中的类型与声明相关内容,包括基本类型、布尔类型、字符类型、整数类型、浮点类型、枚举类型等,并深入探讨变量声明、作用域、初始化等内容。
#### 4.1 类型 [dcl.type]
在 C++ 中,每个标识符(名称)都有一个与之关联的类型。这个类型决定了可以对该标识符(即它所表示的对象或函数)执行哪些操作以及这些操作如何被解释。例如,在下面的代码片段中:
```cpp
x = y + f(2);
```
为了让这段代码有意义,`x`、`y` 和 `f` 必须适当地声明,即程序员必须指定名为 `x`、`y` 和 `f` 的实体存在,并且它们具有相应的类型,使得赋值 `=`、加法 `+` 和函数调用 `()` 分别有意义。
以下是一些示例声明:
```cpp
float x; // x 是一个浮点变量
int y = 7; // y 是一个整数变量,初始值为 7
float f(int); // f 是一个接受整数参数并返回浮点数的函数
```
这些声明使上述例子变得有意义。因为 `y` 被声明为一个 `int` 类型,所以它可以被赋值,用于算术表达式等。另一方面,`f` 被声明为一个函数,接受一个 `int` 参数,因此可以用一个合适的参数来调用它。
#### 4.1.1 基本类型
##### 4.1.1.1 布尔类型
布尔类型 (`bool`) 只有两个可能的值:`true` 和 `false`。布尔类型通常用于逻辑表达式和条件判断中。例如:
```cpp
bool isEven = (x % 2 == 0);
```
这里 `isEven` 将根据 `x` 是否能被 2 整除而被赋值为 `true` 或 `false`。
##### 4.1.1.2 字符类型
字符类型 (`char`) 用于存储单个字符。字符可以是任何可打印字符,也可以是转义序列。例如:
```cpp
char c = 'A'; // 存储字符 'A'
char newline = '\n'; // 存储换行符
```
字符常量(`char` 类型的字面量)使用单引号括起来。如果需要存储多个字符,可以使用字符串。
##### 4.1.1.3 整数类型
整数类型包括 `short`、`int`、`long` 和 `long long`,分别用于存储不同大小的整数值。例如:
```cpp
short s = 32767; // 最大值通常是 32767
int i = 2147483647; // 最大值通常是 2147483647
long l = 2147483647L; // 后缀 L 表示 long 类型
long long ll = 9223372036854775807LL; // 后缀 LL 表示 long long 类型
```
整数类型还有无符号版本,如 `unsigned short`、`unsigned int` 等,这些类型用于存储非负整数,其取值范围比对应的有符号版本大一倍。
##### 4.1.1.4 浮点类型
浮点类型用于表示实数。主要包括 `float`、`double` 和 `long double`。例如:
```cpp
float f = 3.14f; // 后缀 f 表示 float 类型
double d = 3.14; // 默认为 double 类型
long double ld = 3.14L; // 后缀 L 表示 long double 类型
```
浮点类型的精度依次递增,`double` 比 `float` 更精确,而 `long double` 比 `double` 更精确。
#### 4.1.2 枚举类型
枚举类型 (`enum`) 用于定义一组命名的整数常量。枚举类型通常用于定义一组相关的常量,如一周中的天数。例如:
```cpp
enum Weekday { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
Weekday day = Mon;
```
在这里,`Sun`、`Mon` 等都是枚举类型的元素,它们分别对应 0、1、2 等整数值。枚举类型的元素默认情况下按顺序赋值,从 0 开始。
#### 4.9 声明
声明告诉编译器某个标识符的存在及其类型。声明可以是变量声明、函数声明或类型声明。例如:
```cpp
int x; // 声明一个整数变量 x
void func(); // 声明一个无返回值的函数 func
typedef int Integer; // 声明一个新的类型名 Integer,它是 int 的同义词
```
声明还可以包括初始化:
```cpp
int x = 10; // 声明并初始化整数变量 x
```
#### 4.9.1 变量声明
变量声明定义了一个特定类型的变量。变量声明的形式为:
```cpp
type identifier; // 例如:int x;
```
其中 `type` 是变量的数据类型,`identifier` 是变量的名字。变量声明还可以包含初始化:
```cpp
type identifier = value; // 例如:int x = 10;
```
这里 `value` 是用来初始化变量的值。
#### 4.9.2 函数声明
函数声明(也称为函数原型)定义了函数的接口。它指定了函数的返回类型、函数名和参数列表。函数声明的形式为:
```cpp
return_type function_name(parameters); // 例如:int add(int x, int y);
```
其中 `return_type` 是函数返回值的类型,`function_name` 是函数的名字,`parameters` 是函数参数列表。
#### 4.9.3 类型声明
类型声明(通过 `typedef` 关键字)定义了新的类型名,作为现有类型的同义词。类型声明的形式为:
```cpp
typedef existing_type new_type_name; // 例如:typedef int Integer;
```
在这里,`existing_type` 是现有的类型,`new_type_name` 是新定义的类型名。
#### 总结
本章详细介绍了 C++ 中的基本类型与声明。我们了解了各种基本数据类型的特点和用途,包括布尔类型、字符类型、整数类型、浮点类型和枚举类型。此外,还深入探讨了变量声明、函数声明和类型声明的细节。掌握这些基础知识对于编写有效的 C++ 程序至关重要。接下来,我们可以进一步探索更复杂的类型,如数组、指针、结构体和类等。