首页 > 后端开发 > C++ > 正文

C++如何定义全局常量_C++ const与extern结合的正确写法

尼克
发布: 2025-11-27 11:41:10
原创
841人浏览过
不能只用 const 定义全局常量,因为 const 全局变量默认具有内部链接,导致每个包含头文件的编译单元都生成独立副本,浪费空间且无法保证地址一致;正确做法是使用 extern const 在头文件声明,在 cpp 文件定义,或在 C++17 起使用 inline constexpr 直接在头文件定义,确保单一实例并支持跨单元共享。

c++如何定义全局常量_c++ const与extern结合的正确写法

在C++中定义全局常量时,若希望该常量在多个源文件之间共享,需要正确使用constextern结合。否则容易出现链接错误或变量重复定义的问题。

为什么不能只用 const 定义全局常量?

在C++中,const修饰的全局变量默认具有内部链接(internal linkage),意味着它只在当前编译单元内可见。如果在头文件中这样写:

错误示例:
// constants.h
const int MAX_SIZE = 100;
登录后复制

当多个.cpp文件包含这个头文件时,每个编译单元都会生成一个MAX_SIZE的副本。虽然值相同,但链接器不会合并它们——这不是错误,但浪费空间,且无法取地址一致性保证。

extern + const 的正确写法

要让全局常量具有外部链接(external linkage),必须使用extern关键字声明,并在一处定义。

立即学习C++免费学习笔记(深入)”;

步骤如下:

Typewise.app
Typewise.app

面向客户服务和销售团队的AI写作解决方案。

Typewise.app 39
查看详情 Typewise.app
  • 在头文件中使用extern const声明常量(不初始化)
  • 在某个.cpp文件中定义并初始化该常量
正确示例:
// constants.h
#ifndef CONSTANTS_H
#define CONSTANTS_H

extern const int MAX_SIZE;
extern const double PI;

#endif
登录后复制
// constants.cpp
#include "constants.h"

const int MAX_SIZE = 100;
const double PI = 3.14159265359;
登录后复制
// main.cpp
#include "constants.h"
#include <iostream>

int main() {
    std::cout << "MAX_SIZE: " << MAX_SIZE << std::endl;
    return 0;
}
登录后复制

这样,MAX_SIZEPI只有一个定义,所有包含constants.h的文件都能安全访问。

替代方案:使用 constexpr 或 inline const(C++17起)

从C++17开始,可以使用inline变量或constexpr在头文件中直接定义全局常量。

现代C++推荐写法:
// constants.h (C++17)
#ifndef CONSTANTS_H
#define CONSTANTS_H

inline const int MAX_SIZE = 100;
inline constexpr double PI = 3.14159265359;

// 或直接用 constexpr(隐含 inline 行为)
constexpr int BUFFER_SIZE = 256;

#endif
登录后复制

这种写法更简洁,支持跨编译单元共享,且编译器会优化掉实际存储(尤其对字面量类型)。

基本上就这些。老式extern const适用于C++11/14项目,而C++17及以上建议优先使用inline constexpr。关键是理解链接属性与头文件包含机制的关系。

以上就是C++如何定义全局常量_C++ const与extern结合的正确写法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号