【问题标题】:Why are non-int const statics defined in cpp file?为什么在 cpp 文件中定义了非 int const 静态变量?
【发布时间】: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 成员时(并且永远不要使用其地址)。

标签: c++ c++11


【解决方案1】:

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

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多