在标头文件中使用const
Using const in header-file
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
的链接不得是内部的。
相关文章:
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 如何通过头文件中的函数初始化 const int 数组?
- C++ 在头文件或构造函数中初始化 const 类成员变量?
- 将文本文件读取为 const char* 有时有效,有时无效
- 如果在执行过程中替换二进制文件,"const"数组是否驻留在内存中?
- 静态const数据成员在另一个文件中定义
- YAML::LoadFile(std::string const&) 找不到文件 [ROS 中的 yaml-cpp]
- 我可以在类头文件中定义一个类的const静态实例吗
- 在标头文件中使用const
- C++ 中的文件处理错误 - 调用"std::basic_fstream<char, std::char_traits<char> >::open(const char[8],
- 错误:在"boost::文件系统::p ath::文件名() const() + "/""中与"运算符+"不匹配
- 包含多个源文件中包含的"const"的头文件
- 在头文件中声明全局 const 对象
- 默认情况下,const 变量是文件的本地变量
- 为什么在 cpp 文件中定义了非 int const 静态
- 在 MoSync 中将数据写入文件(将 MAUtil::String 转换为 const char*)
- 为什么我可以在多个包含const int的cpp文件中包含一个头文件,而不会出现编译器错误
- 头文件随附的 C++ 文件中的 const 函数
- 头文件中定义的Const float**
- 如何在头文件中定义const-static std::string