static const int в определении класса & amp; инициализация

Если (и только если) вы используете инициализированный член способом, который требует
он должен быть сохранен как объект в памяти, член должен быть (уникально)
определено где-то.

из «языка программирования C ++»

У меня есть класс

class Bingo{
std::string name;
public:
Bingo(){}
int i;
static const int i89=89;
};

и мне не нужно иметь определение, как:

const int Bingo::i89;

который описывается как необходимый. Поэтому я не понимаю, по-видимому. Не могли бы вы объяснить смысл этой цитаты, пожалуйста?

3

Решение

Когда вы определяете член внутри класса, он называется Инициализация в классе.

Обратите внимание, что такие члены могут рассматриваться компилятором как постоянные времени компиляции, потому что он знает, что значение не изменится в любое время, и, следовательно, он может применить свою собственную магию оптимизации и просто встроить такие члены класса, т.е. они больше не хранятся в памяти. Поскольку они не хранятся в памяти, нельзя взять адрес таких членов. Обратно применяется.

Вышесказанное следует из обоснования Бьярне, что каждый объект C ++ нуждается в уникальном определении, и, следовательно, каждый объект должен храниться в памяти, чтобы он мог иметь уникальный адрес и быть уникально идентифицированным.

Отсюда и цитата:

Если (и только если) вы используете инициализированный элемент способом, который требует, чтобы он хранился как объект в памяти, этот элемент должен быть (уникально) где-то определен.

2

Другие решения

Насколько я помню, вам нужно :: получить доступ к статической переменной, когда она определена так, как в вашем классе

0

По вопросам рекламы [email protected]