C++中作为类成员函数返回值的常量整数应如何在哪里定义?
核心结论
不需要定义为全局变量,优先将常量的作用域限定到最小范围,再根据实际使用场景选择存放位置。
场景1:EXIT_CODE仅属于Example类的业务逻辑,只有该类成员会使用
直接定义为类内静态常量,放在.hpp文件的类定义中即可:
修改后的头文件代码:
class Example // 注意原代码的Class首字母大写是语法错误,C++类关键字为小写class { private: // code public: static constexpr int EXIT_CODE = 0; // 替换为你需要的实际数值 int function(); };
如果使用的C版本低于C11不支持constexpr,可以改成static const int EXIT_CODE;,然后在.cpp文件中补充定义:
// 在.cpp文件开头添加 const int Example::EXIT_CODE = 0;
调用时直接返回Example::EXIT_CODE即可。
场景2:EXIT_CODE是多文件、多类共用的通用状态码
单独创建常量头文件(例如constant.hpp),用命名空间封装避免全局命名污染:
// constant.hpp namespace common_const { constexpr int EXIT_CODE = 0; }
需要使用的文件引入该头文件后,通过common_const::EXIT_CODE调用即可。
场景3:EXIT_CODE仅在Example类的function()所在.cpp文件中使用
直接在.cpp文件中用匿名命名空间定义,仅当前文件可访问,完全不会对外冲突:
// 在Example.cpp开头添加 namespace { constexpr int EXIT_CODE = 0; }
直接在函数中返回EXIT_CODE即可。
不推荐全局变量的原因
直接定义全局常量会污染全局命名空间,容易和其他第三方库、其他业务代码的同名常量产生冲突,也不利于后期维护时定位常量的作用范围。
内容的提问来源于stack exchange,提问作者malicization
相关产品推荐
相关产品推荐

