Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+;中类或结构的常量静态成员变量+;不需要单独定义吗? C++中的类或结构中的常数静态成员变量不需要单独定义吗?< /P>_C++_Static_Constants - Fatal编程技术网

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说,“如果在程序中使用该成员,则该成员仍应在名称空间范围中定义,且名称空间范围定义不应包含初始值设定项。”然而,大多数(所有?)编译器似乎并不在意。