C++基础:类型与声明详解
立即解锁
发布时间: 2025-08-22 00:47:45 阅读量: 2 订阅数: 16 


C++编程语言精髓与实践
# C++ 基础:类型与声明详解
## 1. 类型概述
在 C++ 程序里,每个名字(标识符)都关联着一个类型。这个类型决定了能对该名字(即其指代的实体)执行哪些操作,以及这些操作如何被解释。例如下面的代码:
```cpp
float xx; // xx 是一个浮点型变量
int yy = 7; // yy 是一个初始值为 7 的整型变量
float ff(int); // ff 是一个接受整型参数并返回浮点型数值的函数
```
有了这些声明,`xx = yy + ff(2);` 这样的语句才有意义。因为 `yy` 被声明为 `int` 类型,所以它能被赋值、用于算术表达式等;而 `ff` 被声明为接受 `int` 类型参数的函数,因此在提供合适参数时可以调用它。
### 1.1 基本类型
C++ 拥有一组基本类型,对应计算机最常见的基本存储单元以及使用它们存储数据的常见方式:
- **布尔类型(`bool`)**:用于表示逻辑运算的结果,只有 `true` 和 `false` 两个值。
- **字符类型(如 `char`)**:变量可以存储实现字符集中的一个字符。
- **整数类型(如 `int`)**:有多种形式和大小可供选择。
- **浮点类型(如 `double`)**:用于表示浮点数,也有不同的精度级别。
此外,用户还能定义枚举类型(`enum`)来表示特定的值集合,还有 `void` 类型,用于表示没有信息。从这些基本类型出发,还能构建其他类型,如指针类型(如 `int*`)、数组类型(如 `char[]`)、引用类型(如 `double&`)以及数据结构和类。
布尔、字符和整数类型统称为整型,整型和浮点类型统称为算术类型。枚举和类被称为用户定义类型,因为它们必须由用户定义,而不像基本类型那样无需事先声明就能使用。相对地,其他类型被称为内置类型。
### 1.2 布尔类型(`bool`)
布尔类型 `bool` 可以取 `true` 或 `false` 两个值,常用于表达逻辑运算的结果。例如:
```cpp
void f(int aa, int bb)
{
bool b1 = aa == bb; // = 是赋值,== 是相等判断
// ...
}
```
若 `aa` 和 `bb` 值相同,`b1` 为 `true`;否则为 `false`。`bool` 常见的用途是作为测试某个条件的函数(谓词)的返回类型。例如:
```cpp
bool is_open(File*);
bool greater(int aa, int bb) { return aa > bb; }
```
按照定义,`true` 转换为整数时值为 1,`false` 为 0。反之,整数可以隐式转换为 `bool` 值:非零整数转换为 `true`,0 转换为 `false`。在算术和逻辑表达式中,`bool` 会转换为 `int` 进行运算,结果再转换回 `bool` 时,0 转换为 `false`,非零值转换为 `true`。指针也能隐式转换为 `bool`,非零指针转换为 `true`,零值指针转换为 `false`。
### 1.3 字符类型
`char` 类型的变量可以存储实现字符集中的一个字符,通常 `char` 占 8 位,能存储 256 个不同的值。字符集一般是 ISO - 646 的变体,如 ASCII。不过不同字符集存在差异,编写代码时应尽量避免对对象表示形式做假设。
每个字符常量都有一个整数值,例如在 ASCII 字符集中,`'b'` 的值是 98。下面的小程序可以输出任意输入字符的整数值:
```cpp
#include <iostream>
int main()
{
char c;
std::cin >> c;
std::cout << "the value of '" << c << "' is " << int(c) << '\n';
}
```
`char` 类型存在有符号和无符号的问题,C++ 提供了 `signed char` 和 `unsigned char` 两种明确的类型。此外,还有 `wchar_t` 类型用于存储更大字符集的字符,如 Unicode。
字符字面量是用单引号括起来的字符,如 `'a'` 和 `'0'`,其类型为 `char`。宽字符字面量形式为 `L'ab'`,类型为 `wchar_t`。
### 1.4 整数类型
整数类型和 `char` 类似,每种都有三种形式:“普通” `int`、`signed int` 和 `unsigned int`。同时,整数有三种大小:`short int`、“普通” `int` 和 `long int`。`unsigned` 整数类型适合将存储视为位数组的场景,但用 `unsigned` 替代 `int` 来多获取一位表示正整数通常不是好主意。普通 `int` 总是有符号的,`signed int` 只是普通 `int` 的更明确同义词。
整数字面量有四种形式:十进制、八进制、十六进制和字符字面量。十进制字面量是最常用的,如 7、1234 等。以 0 开头且后面跟 `x` 的是十六进制数,以 0 开头但后面不跟 `x` 的是八进制数。可以使用后缀 `U` 表示无符号字面量,后缀 `L` 表示长整型字面量。例如,3 是 `int` 类型,3U 是 `unsigned int` 类型,3L 是 `long int` 类型。
### 1.5 浮点类型
浮点类型用于表示浮点数,有三种大小:`float`(单精度)、`double`(双精度)和 `long double`(扩展精度)。单精度、双精度和扩展精度的确切含义由具体实现定义。默认情况下,浮点字面量是 `double` 类型。若要定义 `float` 类型的浮点字面量,可使用后缀 `f` 或 `F`;若要定义 `long double` 类型的浮点字面量,可使用后缀 `l` 或 `L`。
### 1.6 大小问题
C++ 基本类型的某些方面,如 `int` 的大小,是由实现定义的。为了编写可移植的代码,应尽量避免对这些实现依赖的特性做不必要的假设。C++ 对象的大小以 `char` 的大小为倍数来表示,`char` 的大小定义为 1。可以使用 `sizeof` 运算符获取对象或类型的大小。以下是关于基本类型大小的一些保证:
| 类型关系 | 描述 |
| --- | --- |
| `1 <= sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)` | 整数类型大小关系 |
| `1 <= sizeof(bool) <= sizeof(long)` | 布尔类型与长整型大小关系 |
| `sizeof(char) <= sizeof(wchar_t) <= sizeof(long)` | 字符类型与长整型大小关系 |
| `sizeof(float) <= sizeof(double) <= sizeof(long double)` | 浮点类型大小关系 |
| `sizeof(N) == sizeof(signed N) == sizeof(unsigned N)`(N 为 `char`、`short int`、`int` 或 `long int`) | 有符号和无
0
0
复制全文
相关推荐










