为什么在 cpp 文件中定义了非 int const 静态
Why are non-int const statics defined in cpp file?
前几天我正在查找如何将静态常量添加到类中。我注意到很多例子都在显示...
(我们会说公开的,因为它的)
测试.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;
};
测试.cpp
#include "test.h"
const std::string A:HELLO_WORLD = "WORLD HELLO";
我只能找到如何解决它的答案,但实际上不知道为什么需要这样......我的问题是为什么它必须这样,为什么允许声明 + 设置整数?
在 c++11/c++14 中还有更好的方法吗?(不妨问一下)
Stroustrup:"在C++98中,只有整型的静态常量成员才能在类中初始化,并且初始值设定项必须是常量表达式。这些限制确保我们可以在编译时进行初始化。
试试这个:
class A {
public:
constexpr static const char *HELLO_WORLD="WORLD HELLO";
};
相关文章:
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 在C++中,如果"int a = 3; int* p = &a;",那么为什么不允许"const int* &pp = p",但允许"const int* const &pp = p"?
- 调用'myStud::myStud(int, const char [5], int, int, int)'没有匹配函数
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- int(int)& 或 int(int) const &是什么类型?
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 如何在构造函数中初始化int const * const
- 对"displayForStudent(int, int const*, double const*, int)"的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态
- 如何在 C++ 中解释"const int *const & variable"
- 为什么"int & const" MSVC 编译得很好?
- const int const&和const int&in C++有什么区别?
- std::set<int * const> 不会编译
- " invalid operands of types 'int' and 'int* const'" 来自功能的错误,来自书
- std::initializer_list<int const> 不能从 std::initializer_list <int>构造
- 对'std::string Helper::ToString<int>(int const&)'的未定义引用
- 无法弄清楚 int[3][3] 和 int(* const)[3] 之间的区别
- const int* const fun(const int* const& p) const的含义;
- 为什么vector<int * const>是非法/不合逻辑的?
- 对 Stack<int>::p ush(int const&) 的未定义引用
- JsonCpp:未定义的对"Json::Value::operator[](int) const"的引用