C+;中类或结构的常量静态成员变量+;不需要单独定义吗? C++中的类或结构中的常数静态成员变量不需要单独定义吗?< /P>
这是正确的吗C+;中类或结构的常量静态成员变量+;不需要单独定义吗? C++中的类或结构中的常数静态成员变量不需要单独定义吗?< /P>,c++,static,constants,C++,Static,Constants,这是正确的吗 struct test { const static int x; }; int test::x; 不,那不对。定义必须与声明匹配,x是const int,而不是int。作为POD类型的const变量,它也需要初始化。例如 const int test::x = 0; 作为整型的常量static成员,它还可以在类的定义中提供初始值设定项。否,这是不正确的。定义必须与声明匹配,x是const int,而不是int。作为POD类型的const变量,它也需要初始化。例如 c
struct test
{
const static int x;
};
int test::x;
不,那不对。定义必须与声明匹配,
x
是const int
,而不是int
。作为POD类型的const
变量,它也需要初始化。例如
const int test::x = 0;
作为整型的
常量static
成员,它还可以在类的定义中提供初始值设定项。否,这是不正确的。定义必须与声明匹配,x
是const int
,而不是int
。作为POD类型的const
变量,它也需要初始化。例如
const int test::x = 0;
作为整型的
const static
成员,它也可以在类的定义中提供初始值设定项。可能重复的@Martin:不完全重复,因为x
在这里不是私有的。(虽然这在相关问题中无关紧要,但该问题的发问者最初认为这很重要。)@Charles Bailey:问题的答案是一样的。当@Martin的答案已经存在时,提供相同的答案是没有意义的。可能重复的@Martin:不完全是重复的,因为x
在这里不是私有的。(虽然这在相关问题中无关紧要,但该问题的发问者最初认为这很重要。)@Charles Bailey:问题的答案是一样的。在已经存在的情况下,提供相同的答案是没有意义的。我本来打算回答的,但没有意义。一切都在上面说!查尔斯:谢谢。如果我可以在类本身中初始化常量静态变量,那么为什么会出现这个问题@Krishnan:只有当数据成员是常量
整数或常量
枚举类型的静态
成员时,才允许初始化类主体中的数据成员<代码>标准::字符串不符合这些要求。您链接到的问题的公认答案正好说明了这一点。请注意,即使您在声明中初始化了static const
整数类型,从技术上讲,如果在程序中使用它,您仍然必须在某处提供一个定义。9.4.2/4说,“如果在程序中使用了成员,则该成员仍应在名称空间范围中定义,并且名称空间范围定义不应包含初始值设定项。”然而,大多数(所有?)编译器似乎并不在意。我本来打算回答,但没有意义。一切都在上面说!查尔斯:谢谢。如果我可以在类本身中初始化常量静态变量,那么为什么会出现这个问题@Krishnan:只有当数据成员是常量
整数或常量
枚举类型的静态
成员时,才允许初始化类主体中的数据成员<代码>标准::字符串不符合这些要求。您链接到的问题的公认答案正好说明了这一点。请注意,即使您在声明中初始化了static const
整数类型,从技术上讲,如果在程序中使用它,您仍然必须在某处提供一个定义。9.4.2/4说,“如果在程序中使用该成员,则该成员仍应在名称空间范围中定义,且名称空间范围定义不应包含初始值设定项。”然而,大多数(所有?)编译器似乎并不在意。