Мой вопрос связан с изучением Эффективного С++ Скотта Мейерса. В пункте II этой книги написано следующее:
Чтобы ограничить область действия константы классом, вы должны сделать ее членом и, чтобы обеспечить не более одной копии константы, вы должны сделать ее статическим членом.
Это правильно написано. Тогда сразу указывается следующий пример:
class GamePlayer {
private:
static const int NumTurns = 5;
int scores[NumTurns];
....
};
Затем записывается следующее, относящееся к приведенному выше примеру:
То, что вы видите выше, - это объявление, а не определение NumTurns.
Мой первый вопрос: в чем смысл этого утверждения?
Сразу после этого упоминается следующее:
Обычно С++ требует, чтобы вы предоставили определение для всего, что вы используете, но исключение составляют константы класса, которые являются статическими и целочисленными (например, целые числа, символы, bools). Пока вы не берете их адрес, вы можете объявить их и использовать их без предоставления определения. Если вы берете адрес константы класса или если ваш компилятор неверно настаивает на определении, даже если вы не принимаете адрес, вы предоставляете отдельное определение следующим образом:
const int GamePlayer::Numturns; //definition of NumTurns
Почему теперь это определение, а не объявление?
Я понимаю разницу в контексте функции, но не понимаю ее в контексте регулярной переменной. Кроме того, может кто-то расширять то, что автор означает
... если вы берете адрес константы класса, или если ваш.. часть приведенного выше параграфа?
P.S: Я относительно новичок в С++.