为什么在cpp文件中定义了非int const静态?

时间:2016-02-10 13:17:48

标签: c++ c++11

我正在查找如何在一个课程中添加静态consts。我注意到很多例子都在显示......

(我们会公开表示,不管怎样)

test.h

class A {
public:
  static const int HELLO_WORLD=1;
};

但是,我想定义一个字符串,这不会编译。

test.h

class A {
public:
  static const std::string HELLO_WORLD="WORLD HELLO";
};

经过一些研究,我发现非英特尔是不同的。我不得不在标题中声明它们,但在cpp文件中设置它们的值。

test.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中还有更好的方法吗? (不妨问)

1 个答案:

答案 0 :(得分:4)

Stroustrup:“在C ++ 98中,只有整数类型的静态const成员可以在类中初始化,初始化器必须是一个常量表达式。这些限制确保我们可以在编译时进行初始化-time“。

试试这个:

class A {
public:
  constexpr static const char *HELLO_WORLD="WORLD HELLO";
};