【发布时间】:2016-02-10 13:17:48
【问题描述】:
前几天,我正在寻找如何将静态常量添加到类中。我注意到很多例子都在展示......
(我们会说是公开的)
测试.h
class A {
public:
static const int HELLO_WORLD=1;
};
但是,我想定义一个字符串,但这没有编译。
测试.h
class A {
public:
static const std::string HELLO_WORLD="WORLD HELLO";
};
经过一些研究,我发现非整数是不同的。我必须在标头中声明它们,但在 cpp 文件中设置它们的值。
测试.h
class A {
public:
static const std::string HELLO_WORLD;
};
test.cpp
#include "test.h"
const std::string A:HELLO_WORLD = "WORLD HELLO";
我只能找到有关如何解决它的答案,但实际上并没有找到为什么它需要这样......我的问题是为什么它必须这样,为什么允许声明 + 设置整数?
在 c++11/c++14 中还有更好的方法吗? (不妨问问)
【问题讨论】:
-
我相信限制是必要的,因为非 pod 类型的构造函数可以做一些讨厌的事情,比如抛出异常。简而言之,如果放宽这些限制,该语言将无法正常工作。
-
不同的是整数类型。那是个例外。您必须在某处定义静态成员,except 在声明整数类型的
static const成员时(并且永远不要使用其地址)。