当我们在头文件中定义了const变量后,每个包含该头文件的源文件都有了自己的const变量,其名称和值都一样。

如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义。相反,和其他的变量一样,该const变量应该在一个源文件中定义并初始化。应在头文件中为它添加extern声明,以使其能被多个文件共享。

如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字

static变量也是仅在文件中有效

但是extern跟static是不允许同时出现的

const对象默认为文件的局部变量。《C++ Primer 4》p86,

头文件不应该含有定义这一规则,有三个例外。头文件中可以定义类、值在编译时就已知道的const对象(数组的大小可以用const int型变量定义,这在C中是不行的),和inline函数。《C++ Primer 4》p100,在补充一个,模板"必须"定义在头文件中,包括模板类和模板函数。

定义和声明的区别:定义只可以出现一次,而声明则可以出现多次。下面这些是定义(怎样判断的?),都不应该出现在头文件中:
extern int ival = 10;
double fica_rate;

头文件中不可以放变量的定义!一般头文件中只是放变量的声明,因为头文件要被其他文件包含#include,如果把定义放在头文件的话,就不能避免多次定义变量。C++不允许多次定义变量,一个程序中对指定变量的定义只有一次,声明可以无数次。
三个例外:1)值在编译时就已知的const变量的定义可放在头文件中,如:const int num=10;

      2)类的定义可放在头文件中。
      3)inline函数

摘自《C++ Primer 4nd》

标签: none

添加新评论