如何在C++中定义一个常量?

来源:AI教程网作者:弥生美月头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何在C++中定义一个常量?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在C++中定义一个常量?》有用,将其分享出去将是对创作者最好的鼓励。

在C++编程过程中,定义常量可以避免魔法数字的出现,提升代码的可读性和可维护性,同时还能减少因数值修改带来的错误。C++提供了多种定义常量的方式,不同方式的特性和适用场景各有不同。

如何在C++中定义一个常量?

使用const关键字定义常量

const是C++中定义常量最常用的方式,它可以修饰变量、指针、引用等,被修饰的对象在初始化后无法被修改,编译器会对修改操作进行报错提示。

定义普通常量

定义普通常量的语法为const 数据类型 常量名 = 初始值;,常量必须在定义时完成初始化,后续不能重新赋值。

#include <iostream>
using namespace std;

int main() {
    // 定义int类型的常量
    const int MAX_SIZE = 100;
    // 定义double类型的常量
    const double PI = 3.1415926;
    // 定义字符串常量
    const string APP_NAME = "测试程序";
    
    cout << "最大尺寸: " << MAX_SIZE << endl;
    cout << "圆周率: " << PI << endl;
    cout << "应用名称: " << APP_NAME << endl;
    
    // 以下操作会编译报错,常量不能被修改
    // MAX_SIZE = 200;
    return 0;
}

定义常量指针和指针常量

const修饰指针时有两种常见情况,一种是常量指针,即指针指向的内容是常量,不能修改指向的内容,但指针本身可以指向其他地址;另一种是指针常量,即指针本身是常量,不能指向其他地址,但可以修改指向的内容。

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int b = 20;
    
    // 常量指针:指向的内容不可修改,指针可以改指向
    const int* ptr1 = &a;
    // *ptr1 = 30;  // 报错,不能修改指向的内容
    ptr1 = &b;     // 正确,指针可以指向其他地址
    
    // 指针常量:指针不可修改指向,指向的内容可以改
    int* const ptr2 = &a;
    *ptr2 = 30;    // 正确,可以修改指向的内容
    // ptr2 = &b;  // 报错,不能修改指针指向
    
    return 0;
}

使用define宏定义常量

define是C语言延续下来的宏定义方式,它在预处理阶段进行文本替换,没有类型检查,也不是真正的变量。

#include <iostream>
using namespace std;

// 宏定义常量,没有分号,预处理阶段直接替换
#define MAX_AGE 18
#define MESSAGE "未成年"

int main() {
    cout << "最大年龄: " << MAX_AGE << endl;
    cout << "提示信息: " << MESSAGE << endl;
    
    // 宏定义没有作用域限制,也不占用内存空间
    return 0;
}

define定义常量的缺点是没有类型检查,容易出现替换错误,而且在调试时无法看到宏对应的名称,只能看到替换后的数值,因此C++中更推荐使用const替代define定义常量。

使用枚举定义常量

枚举类型适合定义一组相关的整数常量,默认情况下枚举值从0开始递增,也可以手动指定每个枚举值。

#include <iostream>
using namespace std;

// 定义枚举类型,包含三个相关常量
enum WeekDay {
    MONDAY = 1,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY
};

int main() {
    WeekDay today = WEDNESDAY;
    cout << "今天是周" << today << endl;  // 输出3
    
    // 枚举常量不能被修改
    // MONDAY = 10;  // 报错
    return 0;
}

不同常量定义方式对比

以下是几种常量定义方式的核心差异对比:

定义方式类型检查作用域内存占用适用场景
const遵循变量作用域规则可能占用(视编译器优化)大多数常量定义场景
define从定义处到文件结束兼容C代码、简单文本替换场景
枚举有(整数类型)遵循枚举作用域规则无(编译期常量)一组相关的整数常量场景

常量定义注意事项

  • const常量必须初始化,否则会编译报错
  • 类中的const成员变量需要在构造函数的初始化列表中完成初始化
  • define宏定义没有分号,且容易引发运算符优先级问题,使用时建议给参数加括号
  • 如果常量需要被多个文件共享,需要在头文件中用extern const 类型 常量名;声明,在源文件中定义
// 头文件 constant.h
extern const int GLOBAL_MAX;

// 源文件 constant.cpp
#include "constant.h"
const int GLOBAL_MAX = 500;

// 其他文件包含constant.h后就可以使用GLOBAL_MAX

C++常量constdefine枚举修改时间:2026-06-26 20:30:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。