为什么我们必须定义一个在类中初始化的const静态成员

Xia*_*Jun 2 c++ initialization object static-members

我们知道,可以在类结构中初始化整数const静态成员.这在初始化后在类结构中使用常量时很有用.例如,它可以用作int数组的大小.查看以下代码:

class MyClass{
static const int num = 100;
int elems[num];
...
};
Run Code Online (Sandbox Code Playgroud)

但是我们仍然需要在类定义之外定义成员num:

const int MyClass::num;
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我们要这样做.有人能告诉我为什么吗?非常感谢.

另外,我写了以下代码:

#include <iostream>
using namespace std;

class MyClass{
public:
MyClass()
{
    cout << "instruct class MyClass!" << endl;
}
static const int num = 100;
int elems[num];
};

//const int MyClass::num;

int main()
{
MyClass a;
const int *b = &(a.num);
cout << "&(a.num): " << &(a.num) << endl;
cout << "a.num: " << a.num << endl;
cout << "*b: " << *b << endl;
}
Run Code Online (Sandbox Code Playgroud)

它在Visual Studio 2008上运行良好:

在此输入图像描述

但是我删除了在类外定义成员num的代码.

我很困惑.有人能为我解释一下吗?

Die*_*ühl 5

类中的初始化主要用于获取常量表达式.为此,只有价值才重要.获取对象的地址或将其绑定到引用后,编译器也需要该对象的位置.这实际上是定义提供的内容.