在头文件中使用const

时间:2014-02-05 17:34:57

标签: c++ header const

在file.h中

 extern const int ONE;

在file.cpp

#include "file.h"
const int ONE = 1;

和main.cpp

#include <iostream>
#include "file.h"
int main()
{
    std::cout << ONE << std::endl;
}

问题:为什么我必须在file.cpp中使用#include "file.h"?有ONE的定义。

由于

2 个答案:

答案 0 :(得分:7)

默认情况下,声明为const的变量具有内部链接,就好像它们也被声明为static一样。如果你包含标题,那么extern声明会给它外部链接,一切都会好的。否则,其他翻译单元无法提供该定义。

您可以通过在定义中添加extern来避免包含标头;但最好还是包含标题,这样编译器就可以检查这两个声明是否兼容。

最好还是在标题中用内部链接定义它,

const int ONE = 1;

源文件中没有定义;然后它的值可用作常量表达式。

答案 1 :(得分:3)

  

有一个定义。

定义,是的。但是在file.cpp中包含头文件的重要一点是它提供了ONE的不同声明 - 即标记为extern的声明。这可以防止随后定义的ONE常量具有内部链接,从而不会被导出。

为了使ONE定义(位于单独的编译单元中)对main.cpp可见,ONE的链接不得为内部。