Как мы знаем, можно инициализировать интегральные константные статические члены внутри структуры класса. Это полезно, когда константа используется в структуре класса после инициализации. Например, она может использоваться как размер типа int массив.
Смотри код следующий:
class MyClass{
static const int num = 100;
int elems[num];
...
};
Но мы все равно должны определить член num вне определения класса:
const int MyClass::num;
Я не знаю, почему мы должны так поступать.
Может кто-нибудь сказать мне, почему?
Большое спасибо.
Кроме того, я пишу следующий код:
#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;
}
Хорошо работает в Visual Studio 2008:
![enter image description here](https://i.stack.imgur.com/2Gs6n.jpg)
Но я удалил код, который определяет член num вне класса.
Я очень смущен. Может ли кто-нибудь истолковать это для меня?