在标头文件中使用const

Using const in header-file

本文关键字:const 文件      更新时间:2023-10-16

in file.h:

 extern const int ONE;

in 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

有一个定义

谢谢

默认情况下,声明的变量const具有内部链接,就好像它们也被声明为 static一样。如果包含标题,则extern声明将使它具有外部链接,一切都可以。否则,该定义将无法从其他翻译单元中获得。

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

最好仍然可能是通过内部链接定义它,

const int ONE = 1;

源文件中没有定义;然后其值可作为恒定表达式可用。

有一个定义。

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

为了使ONE定义在单独的汇编单元中,main.cpp可见,ONE的链接不得是内部的。