C++2003标准原文:
9.4.2:
4 If a static data member is of const integral or const enumeration type, its declaration in the class
definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that
case, the member can appear in integral constant expressions. The member shall still be defined in a namespace
scope if it is used in the program and the namespace scope definition shall not contain an initializer.
[Quote=引用 19 楼 ysunwpi 的回复:]
Found below from "http://www.devx.com/tips/Tip/5602"
The C++ Standard now allows initialization of const static data members of an integral type inside their class.
#include <string>
class Buff
{
private:
static const int MAX = 512; //definition
static const char flag = 'a'; //also a defintion
static const std::string msg; //non-integral type; must be defined outside the …
[/Quote]
Found below from "http://www.devx.com/tips/Tip/5602"
The C++ Standard now allows initialization of const static data members of an integral type inside their class.
#include <string>
class Buff
{
private:
static const int MAX = 512; //definition
static const char flag = 'a'; //also a defintion
static const std::string msg; //non-integral type; must be defined outside the class body
public:
//..
};
const std::string Buff::msg = "hello";
The initialization inside the class body also defines the data member, so it shouldn't be defined outside the class, as opposed const static data members of non-integral types, which have to be defined outside the class body.