【C++】定义全局常量的一个优雅的方案

来源:互联网 发布:表扬淘宝客服的话语 编辑:程序博客网 时间:2024/05/22 05:22

先列举两种常见的方案

1.  宏定义

#define pi 3.14

这种方案在C语言的项目中很常见,虽然《Effictive C++》第二节作者建议使用更多的const或者enum,但是我觉得#define在这个用法上除了没有编译器的类型检查,实在不失优雅。


2. 使用关键字extern

file1.xxx

extern const int globalValue = 1; // 全局变量定义


file2.xxx

extern const int globalValue ; // 声明全局变量

int localValue = 1 + globalValue  // 使用该变量

这种方案太难看了!一旦很多个文件都要使用这个变量的话,就要声明很多次尴尬


下面是我认为一种比较优雅的方案

namespace!借助命名空间的变量可以在全局范围访问的特性。下面是一个例子

文件1,在命名空间内定义常量

// declare.hnamespace panda{class Foo{public:Foo(){ cout << "Foo construction\n"; }~Foo(){ cout << "Foo destruction\n"; }};// 类常量// main函数之前已经构造好,main函数结束后才析构const Foo foo;// 内置常量const double pi = 3.14;};

文件2,访问常量

#include <iostream>#include <conio.h>using namespace std;#include "declare.h"int main(){cout << "main begin" << endl;cout << panda::pi << endl; // 在其他文件使用常量cout << "main end" << endl;return 0;}


运行结果:



特别关注一下,类常量在主函数开始运行之前初始化,生命周期一直保持到主函数的结束。而且,其他文件要使用该常量时不用特别声明。

这种方法相对与前面的是不是更C++更优雅呢吐舌头

0 0
原创粉丝点击