目录
- C++ 变量概述
- 变量的声明与定义
- 变量的作用域(局部变量 & 全局变量)
- 变量的存储类别(
static
、extern
、register
、mutable
) - 常量 (
const
&constexpr
) auto
和decltype
关键字- 变量的初始化方式
- 参考资料
1. C++ 变量概述
变量是 C++ 程序中用于存储数据的命名存储单元,每个变量都有类型、名称和存储位置。变量的使用遵循以下原则:
- 变量必须声明后才能使用
- 变量类型决定存储的数据格式
- 变量的作用域决定了它的可访问性
2. 变量的声明与定义
在 C++ 中,变量的声明和定义有所不同:
- 声明(Declaration):告诉编译器变量的类型和名称,但不分配存储空间。例如:
extern int a; // 仅声明,不定义
- 定义(Definition):同时声明变量并分配内存。例如:
int a = 10; // 定义变量并初始化
示例
#include <iostream>
int main() {
int x = 5; // 定义变量
double y; // 仅定义,不初始化
std::cout << "x = " << x << std::endl;
return 0;
}
3. 变量的作用域(Scope)
C++ 变量的作用域决定了它在程序中的可见性和生命周期。
3.1 局部变量(Local Variables)
局部变量只能在定义它的代码块内使用,代码块结束后变量自动销毁。
示例
void func() {
int a = 10; // a 只在 func() 内可见
}
3.2 全局变量(Global Variables)
全局变量在整个程序范围内可见,直到程序结束。
示例
#include <iostream>
int globalVar = 100; // 全局变量
void printGlobal() {
std::cout << "globalVar = " << globalVar << std::endl;
}
int main() {
printGlobal();
return 0;
}
⚠️ 注意:
- 尽量避免使用全局变量,因为它可能导致程序难以维护。
- 可以使用
static
限制全局变量的作用域。
4. 变量的存储类别
C++ 提供了几种变量存储类型,决定了变量的生命周期和可见性。
4.1 static
(静态变量)
- 局部
static
变量:在函数内声明但不会被销毁,保留其值。 - 全局
static
变量:只在当前文件可见(文件作用域)。
示例
void counter() {
static int count = 0; // 仅初始化一次
count++;
std::cout << "count = " << count << std::endl;
}
int main() {
counter();
counter();
return 0;
}
// 输出:
// count = 1
// count = 2
4.2 extern
(外部变量)
- 用于引用其他文件中的变量。
- 不分配存储空间,仅声明变量。
示例
// file1.cpp
int sharedVar = 10; // 定义变量
// file2.cpp
extern int sharedVar; // 声明外部变量
4.3 register
(寄存器变量)
- 建议编译器将变量存储在 CPU 寄存器中,以提高访问速度。
- 仅适用于局部变量,无法获取地址(
&
)。
示例
void fastFunction() {
register int speed = 5;
}
4.4 mutable
(可变变量)
- 仅适用于
const
类对象,允许修改变量。
示例
class Test {
public:
mutable int value;
};
5. 常量 (const
& constexpr
)
常量是不可修改的变量。
5.1 const
常量
- 变量的值不能被修改。
const int MAX = 100;
5.2 constexpr
常量(C++11)
- 必须在编译时求值,比
const
更严格。
constexpr int size = 10;
6. auto
和 decltype
6.1 auto
(自动类型推导)
- 让编译器自动推导变量类型(C++11 引入)。
auto num = 42; // int 类型
auto pi = 3.14; // double 类型
6.2 decltype
(声明类型)
- 用于获取表达式的类型。
int x = 10;
decltype(x) y = 20; // y 的类型和 x 相同
7. 变量的初始化方式
7.1 直接初始化
int a = 10;
7.2 括号初始化(C++11 引入)
int a(10);
7.3 列表初始化(C++11 引入)
int a{10};
8. 参考资料
总结
- 变量类型:局部变量、全局变量
- 存储类别:
static
、extern
、register
、mutable
- 常量:
const
和constexpr
- 自动推导:
auto
和decltype
- 初始化方式:赋值初始化、列表初始化
掌握变量类型能提高代码的可读性和优化程序性能!🚀
发表回复