【发布时间】:2017-11-13 13:19:25
【问题描述】:
是否可以在类头文件中声明和定义一个类的const静态实例。
我想做这样的事情(来自this类似的问题):
class PlaceID {
public:
inline PlaceID(const std::string placeName):mPlaceName(placeName) {}
const static PlaceID OUTSIDE;
private:
std::string mPlaceName;
};
const PlaceID PlaceID::OUTSIDE = PlaceID("");
如果 PlaceID::OUTSIDE 的定义在源文件中,这将起作用,但如果它在包含在多个位置的头文件中,则会导致链接错误,因为 PlaceID::OUTSIDE 被定义了多次。
我想在头文件中定义它有两个原因。首先,这将是一个库的一部分,我希望这个库只是头文件。
其次,这是我希望允许编译器“内联”这个实例的使用的最重要的一个。有问题的类(不是此处用作示例的类)是原始类型的包装器,其中所有方法都内联,以提供与原始类型相同的性能。如果我将此实例的定义放在源文件中,编译器在编译时将不知道它的值,并且无法应用一些优化。
谢谢。
【问题讨论】:
标签: c++