我不明白为什么C++只允许在类声明中定义整数类型和枚举类型(枚举类型也是整数类型),而其他所有类型,包括浮点类型(例如double和float),都必须在类声明之外定义。显然这必定有其原因,但我想不出来。
代码示例:
#include <iostream>
using namespace std;
struct Node {
static const int c = 0; // Legal Definition
static const long l = 0l; // Legal Definition
static const short s = 0; // Legal Definition
static const float f = 0.0f; // Illegal definition
static const string S = "Test"; // Illegal definition
static const string JOB_TYPE; // Legal declaration
static const float f; // Legal declaration
static const double d; // Legal declaration
};
const string Node::JOB_TYPE = "Test"; // correct definition
const float Node::f = 0.0f; // correct definition
const double Node::d = 0.0; // correct definition
int main() {
cout << Node::c << endl;
cout << Node::c << endl;
cout << Node::JOB_TYPE << endl;
cout << Node::f << endl;
}
Node
结构体放进一个头文件,并在两个文件中都引用它,那么你就会遇到问题。 - Pierre Emmanuel Lallemantconst
并且被初始化为一个常量表达式时,它们可以在需要编译时常量的上下文中使用。因此,C++11将此扩展到了作为constexpr
声明的静态成员。请注意,类内初始化 不是对象的定义,它仅提供值而不是存储。 - dyp