const std::string 具有内部链接,但似乎不适用于 const std::string&
const std::string have internal linkage but it seems same is not applicable for const std::string&
我有一个头文件,我在其中声明如下变量:
//Constants.h
const std::string& binaryName = "ApplicationGateway";
const std::string& binaryMode = "Maintenance";
然而,当我将此文件包含在多个 cpp 文件中时,说 first.cpp 和 second.cpp 我得到多个定义错误,我找不到相同的原因,因为我的理解是 const 变量具有内部链接.
所以我的问题是 const 引用是否没有内部链接,如果没有,我们如何在需要包含在多个 cpp 文件中的头文件中包含 const 引用。
您应该在 Constants.cpp 中定义它们并在 header 中将它们标记为外部:
//Constants.cpp
const std::string& binaryName = "ApplicationGateway";
const std::string& binaryMode = "Maintenance";
//Constants.h
extern const std::string& binaryName;
extern const std::string& binaryMode;
将 header 文件视为被复制并粘贴到包含所述 header 文件的任何地方。这就是编译器认为您一遍又一遍地声明变量的原因,因为对于编译器而言,变量实际上是。这个(尽管设计很糟糕)的一个怪癖是,如果你要将它保留在你的 header 中,但只在任何地方包含它一次,那么你的代码应该可以正常编译。
my understanding is const variable
这不是 const
变量,尽管 const
确实出现了:const
没有出现在顶层。
So my question is does const reference don't have internal linkage,
如果需要内部链接,可以明确指定:
static const std::string& binaryName = "ApplicationGateway";
static const std::string& binaryMode = "Maintenance";
如果您不需要内部链接,从 C++17 开始,您可以将这些定义为 inline
变量:
inline const std::string& binaryName = "ApplicationGateway";
inline const std::string& binaryMode = "Maintenance";
像inline
函数一样,它们允许在多个翻译单元中定义,并且您将获得相同的字符串对象。
我有一个头文件,我在其中声明如下变量:
//Constants.h
const std::string& binaryName = "ApplicationGateway";
const std::string& binaryMode = "Maintenance";
然而,当我将此文件包含在多个 cpp 文件中时,说 first.cpp 和 second.cpp 我得到多个定义错误,我找不到相同的原因,因为我的理解是 const 变量具有内部链接.
所以我的问题是 const 引用是否没有内部链接,如果没有,我们如何在需要包含在多个 cpp 文件中的头文件中包含 const 引用。
您应该在 Constants.cpp 中定义它们并在 header 中将它们标记为外部:
//Constants.cpp
const std::string& binaryName = "ApplicationGateway";
const std::string& binaryMode = "Maintenance";
//Constants.h
extern const std::string& binaryName;
extern const std::string& binaryMode;
将 header 文件视为被复制并粘贴到包含所述 header 文件的任何地方。这就是编译器认为您一遍又一遍地声明变量的原因,因为对于编译器而言,变量实际上是。这个(尽管设计很糟糕)的一个怪癖是,如果你要将它保留在你的 header 中,但只在任何地方包含它一次,那么你的代码应该可以正常编译。
my understanding is const variable
这不是 const
变量,尽管 const
确实出现了:const
没有出现在顶层。
So my question is does const reference don't have internal linkage,
如果需要内部链接,可以明确指定:
static const std::string& binaryName = "ApplicationGateway";
static const std::string& binaryMode = "Maintenance";
如果您不需要内部链接,从 C++17 开始,您可以将这些定义为 inline
变量:
inline const std::string& binaryName = "ApplicationGateway";
inline const std::string& binaryMode = "Maintenance";
像inline
函数一样,它们允许在多个翻译单元中定义,并且您将获得相同的字符串对象。