在 C++ 中,变量用于存储可变数据,常量用于存储不可变数据。以下是定义规范及示例:

一、变量定义

语法数据类型 变量名 [ = 初始值 ];

1. 基本变量定义

int age = 25;           // 整型
double price = 9.99;    // 双精度浮点型
char grade = 'A';       // 字符型
bool isValid = true;    // 布尔型
std::string name = "Alice"; // 字符串型(需 #include <string>)

2. 多变量定义

int x = 5, y = 10, z;  // 定义多个同类型变量(z 未初始化)

3. 初始化方式

  • 拷贝初始化int n = 10;
  • 直接初始化int n(10);
  • 列表初始化(C++11 起):int n{10}; // 防止窄化转换(如浮点转整型会报错)

二、常量定义

1. const 常量(运行时确定值)

语法const 数据类型 常量名 = 值;

const double PI = 3.14159;
const int MAX_SIZE = 100;

2. constexpr 常量(编译时确定值,C++11)

语法constexpr 数据类型 常量名 = 值;

constexpr int ARRAY_SIZE = 10; 
int arr[ARRAY_SIZE];  // 可用于数组大小

3. 宏常量(不推荐)

#define TAX_RATE 0.08  // 预处理器替换,无类型检查

三、关键对比

特性 变量(Variable) 常量(Const/constexpr)
可变性 值可修改 值不可修改
初始化 可延迟初始化 必须定义时初始化
定义示例 int count = 0; const int MAX = 100;
类型安全 const 是,#define
作用域 遵守块作用域 同变量(#define 全局)

四、高级用法

1. 指针与常量

const int* ptr1 = &x;  // 指针指向的值不可变
int* const ptr2 = &x;  // 指针本身不可变
const int* const ptr3 = &x; // 指针和值均不可变

2. auto 类型推导(C++11)

auto score = 95;     // 自动推导为 int
auto flag = true;    // 推导为 bool

3. 常量表达式函数

constexpr int square(int n) {
    return n * n;
}
constexpr int sq = square(5);  // 编译时计算

五、使用建议

  1. 优先使用 const/constexpr 替代宏常量(类型安全、作用域控制)
  2. 变量初始化:始终显式初始化变量(避免未定义行为)
  3. constexpr 可用于:
    • 数组大小
    • 模板元编程
    • 编译时计算优化
  4. 全局常量建议在头文件中使用 extern 声明:
    // header.h
    extern const int GLOBAL_CONST;
    
    // source.cpp
    const int GLOBAL_CONST = 42;
    

注:C++ 中 const 默认具有内部链接性(文件作用域),需用 extern 实现跨文件共享。

posted on 2025-06-27 15:55  青·丝  阅读(27)  评论(0)    收藏  举报