为啥在 cpp 文件中定义了非 int const 静态变量?
Posted
技术标签:
【中文标题】为啥在 cpp 文件中定义了非 int const 静态变量?【英文标题】: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 中还有更好的方法吗? (不妨问问)
【问题讨论】:
欺骗/相关:***.com/questions/3025997/… 我相信限制是必要的,因为非 pod 类型的构造函数可以做一些讨厌的事情,比如抛出异常。简而言之,如果放宽这些限制,该语言将无法正常工作。 不同的是整数类型。那是个例外。您必须在某处定义静态成员,except 在声明整数类型的static const
成员时(并且永远不要使用其地址)。
【参考方案1】:
Stroustrup: "在 C++98 中,只有整型的静态 const 成员可以在类中初始化,并且初始化器必须是常量表达式。这些限制确保我们可以在编译时进行初始化-时间。”
试试这个:
class A
public:
constexpr static const char *HELLO_WORLD="WORLD HELLO";
;
【讨论】:
以上是关于为啥在 cpp 文件中定义了非 int const 静态变量?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们不能定义一个指向 int 指针的低 + *** const 指针?
arduino定义引脚为啥要用const??不用可以吗 const int ledPin=13;