Если (и только если) вы используете инициализированный член способом, который требует
он должен быть сохранен как объект в памяти, член должен быть (уникально)
определено где-то.из «языка программирования C ++»
У меня есть класс
class Bingo{
std::string name;
public:
Bingo(){}
int i;
static const int i89=89;
};
и мне не нужно иметь определение, как:
const int Bingo::i89;
который описывается как необходимый. Поэтому я не понимаю, по-видимому. Не могли бы вы объяснить смысл этой цитаты, пожалуйста?
Когда вы определяете член внутри класса, он называется Инициализация в классе.
Обратите внимание, что такие члены могут рассматриваться компилятором как постоянные времени компиляции, потому что он знает, что значение не изменится в любое время, и, следовательно, он может применить свою собственную магию оптимизации и просто встроить такие члены класса, т.е. они больше не хранятся в памяти. Поскольку они не хранятся в памяти, нельзя взять адрес таких членов. Обратно применяется.
Вышесказанное следует из обоснования Бьярне, что каждый объект C ++ нуждается в уникальном определении, и, следовательно, каждый объект должен храниться в памяти, чтобы он мог иметь уникальный адрес и быть уникально идентифицированным.
Отсюда и цитата:
Если (и только если) вы используете инициализированный элемент способом, который требует, чтобы он хранился как объект в памяти, этот элемент должен быть (уникально) где-то определен.
Насколько я помню, вам нужно :: получить доступ к статической переменной, когда она определена так, как в вашем классе