目录

  1. C++ 变量概述
  2. 变量的声明与定义
  3. 变量的作用域(局部变量 & 全局变量)
  4. 变量的存储类别(staticexternregistermutable
  5. 常量 (const & constexpr)
  6. autodecltype 关键字
  7. 变量的初始化方式
  8. 参考资料

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. autodecltype

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. 参考资料


总结

  1. 变量类型:局部变量、全局变量
  2. 存储类别staticexternregistermutable
  3. 常量constconstexpr
  4. 自动推导autodecltype
  5. 初始化方式:赋值初始化、列表初始化

掌握变量类型能提高代码的可读性和优化程序性能!🚀