为什么标头中的静态const在代码文件中定义为const

时间:2013-06-17 12:20:21

标签: c++

如果我是正确的,那么类中的静态常量成员定义如下:

// header file, inside a class definition:
static const SomeType my_const;

// cpp file
const ClassName::SomeType my_const = SomeType(5.0);

现在我不明白为什么cpp文件中没有分类器。签名不符合这么说,我不想过分强迫OCD,但这背后的原因是什么?

对于好奇,当我添加静态时,这是我收到的错误消息:

error C2720: 'static ' storage-class specifier illegal on members

3 个答案:

答案 0 :(得分:3)

static是一个大量重载的关键字,至少有4种不同的含义,需要注意的更多。难怪你很困惑。

你的第一行不只是站在标题中,而是在一个类中。 (请编辑代码)。在类中,您可以拥有普通成员,以及实例之间共享的成员。标记static是选择。

在命名空间范围内,关键字意味着完全不同的东西,即它将链接转换为内部。作为在该范围内制作的定义ios,您不能添加静态的“版本”。

答案 1 :(得分:0)

const SomeType ClassName :: my_const = SomeType(5.0);

答案 2 :(得分:0)

我强烈怀疑是 -

const ClassName::SomeType my_const = SomeType(5.0);

const SomeType ClassName::my_const = SomeType(5.0);

用非常简单的术语来说: -

'static'是一种存储类型,它不是数据类型或修饰符,这里只是告诉编译器这应该在对象的所有实例中共享,这意味着只创建一个实例。我们在签名中不包含存储类型。