C++修饰符类型
前言
这一节我们将学习修饰符类型的的相关知识,可能会涉及到一些C++的基本语法以及C++变量类型、C++变量作用域的相关知识,如果你还有不明白的,请到C++基本语法和C++变量类型、C++变量作用域这里温故一下
C++修饰符类型
什么是修饰符类型?
修饰符是用来调整变量的存储范围和行为的关键字。例如:
- 变量是否能存储负数?
- 变量的存储范围是更大还是更小?
C++ 提供了多个修饰符来满足不同的需求
常见修饰符
signed(有符号)
- 变量可以存储正数和负数。
- 默认情况下,整型变量(
int)都是有符号的,所以int和signed int是一样的。
unsigned(无符号)
- 变量只能存储正数。
- 因为没有负数,存储范围扩大了一倍(范围从0开始)。
short(短整型)
- 比
int的存储范围更小,通常用来节省存储空间。
- 比
long(长整型)
- 比
int的存储范围更大,适合表示更大的数字。 - C++11 增加了
long long,存储范围比long还要大。
- 比
float(单精度浮点数)
- 用来表示带小数的数字,精度较低。
double(双精度浮点数)
- 用来表示带小数的数字,精度比
float更高。
- 用来表示带小数的数字,精度比
bool(布尔类型)
- 只有两个值:
true和false,常用于条件判断。
- 只有两个值:
char(字符类型)
- 用来存储单个字符,比如
'a'。
- 用来存储单个字符,比如
wchar_t(宽字符类型)
- 用来存储Unicode字符,可以表示多国语言的字符。
修饰符的组合
修饰符可以组合使用,例如:
unsigned long int:无符号长整型。short unsigned int:无符号短整型。
简写方式:
- 省略
int是允许的,例如:1
2unsigned num1 = 10; // 无符号整型变量
short num2 = 5; // 短整型变量
- 省略
实际例子
示例 1:普通变量的定义
1 | signed int num1 = -10; // 有符号整型,值为 -10 |
示例 2:有符号和无符号的区别
1 |
|
解释:
j存储的值是50000,它的二进制表示不会改变。- 当将
j的值赋给i时,二进制位模式被解释为有符号数,因此显示为-15536。
小总结
- 有符号(signed):可以存储正数和负数。
- 无符号(unsigned):只能存储正数,存储范围更大。
- short 和 long:分别表示更小或更大的整型范围。
- float 和 double:用于存储小数,
double的精度更高。 - bool 和 char:布尔值表示真/假,字符表示单个字符。
- wchar_t:表示Unicode字符。
通过修饰符,C++ 能够更灵活地定义变量类型,适应不同的存储需求。
C++中的类型限定符
什么是类型限定符?
类型限定符是C++中的关键字,用来给变量或函数添加额外的“行为限制”或“说明”。它们可以改变变量的默认行为,使其更适应特定需求。
常见的类型限定符
| 限定符 | 含义 |
|---|---|
const |
表示变量是常量,定义后它的值不能被修改。 |
volatile |
告诉编译器,这个变量的值可能会被外部(如硬件或其他线程)改变,因此不能对它的访问进行优化。 |
restrict |
仅在C99标准中:表示一个指针是访问它所指向对象的唯一方式,用于优化指针操作。 |
mutable |
用于修饰类的成员变量,即使类对象是const的,也允许修改这个变量。 |
static |
表示变量是静态的,它的生命周期贯穿整个程序,并且作用范围有限。 |
register |
提示编译器将变量存储在CPU寄存器中,以提高访问速度(实际效果由编译器决定)。 |
示例解释
1. const(常量)
- 定义后变量的值不能被修改。
- 示例:
1
2const int NUM = 10; // NUM 是一个常量,不能被改变
const int* ptr = # // ptr 是指向常量的指针,指针所指向的值不能修改 - 通俗解释:
NUM是一个固定的值,就像刻在石头上的数字,无法更改。ptr是指向这块石头的指针,你可以看它,但不能刻字。
2. volatile(易变变量)
- 告诉编译器,这个变量的值可能会在程序以外被修改(如硬件或多线程)。
- 示例:
1
volatile int num = 20; // num 的值可能会被硬件改变
- 通俗解释:
- 这个变量是一个随时可能“被动”变化的数字,比如硬件设备传回来的数据。
3. mutable(可变成员变量)
- 修饰类成员变量时,即使对象是
const,这个变量也可以被修改。 - 示例:
1
2
3
4
5
6
7
8class Example {
public:
void set_value(int value) const {
value_ = value; // 允许修改 value_,即使这个函数是 const 的
}
private:
mutable int value_; // value_ 是可变的
}; - 通俗解释:
- 一个“特别许可”的变量,即使在“禁止修改”的情况下,也可以被改变。
4. static(静态变量)
- 静态变量的生命周期贯穿整个程序,作用范围却受限。
- 示例:
1
2
3
4void example_function() {
static int count = 0; // count 的值在整个程序中保留
count++;
} - 通俗解释:
- 静态变量就像一个“长期储存”的数据,即使函数结束,它的值也会保留。
5. register(寄存器变量)
- 建议编译器将变量存储在CPU的寄存器中,以提高访问速度(是否采纳由编译器决定)。
- 示例:
1
2
3void example_function(register int num) {
// 提示编译器将 num 存储在寄存器中
} - 通俗解释:
- 把一个变量放在“最快的储物柜”里,方便程序快速访问。
小总结
- **
const**:值不能改动,就像固定的规则。 - **
volatile**:值可能会被外部修改,比如实时更新的数据。 - **
mutable**:给特别变量的“修改许可”。 - **
static**:数据长期有效,即使函数多次调用也保留值。 - **
register**:请求把变量放到“快速通道”,提高访问速度。
可以看出,这些限定符让C++中的变量更灵活、更高效地适应不同的需求。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Matou🚢!
评论








