Почему нестатическая ссылка на элемент данных не является переменной?

Определение переменная в C ++ 11 выглядит следующим образом (§3 / 6):

переменная вводится объявлением ссылки, отличной от нестатического члена данных или объекта. Имя переменной обозначает ссылку или объект.

Таким образом, ссылка на нестатический элемент данных не является переменной. Почему это различие необходимо? Какой смысл здесь?

10

Решение

Вот один из способов, которым я могу объявить переменную в C ++:

int scientist = 7;

После этого объявления (и определения, в данном случае) я могу использовать scientist прочитать и установить его значение, взять его адрес и т. д. Вот еще один вид объявления: —

class Cloud {
public:
static int cumulonimbus = -1;
};

Это немного сложнее, потому что я должен ссылаться на новую переменную как Cloud::cumulonimbus, но я все еще могу прочитать и установить его значение, так что это, очевидно, переменная. Вот еще один вид декларации:

class Chamber {
public:
int pot;
};

Но после этого объявления переменная с именем pot, или же Chamber::pot, На самом деле новой переменной вообще нет. Я объявил новый класс, и когда я позже объявлю экземпляр этого класса у него будет член по имени pot, но сейчас это так не называется.

Нестатический член данных класса не создает новую переменную сам по себе, он просто помогает вам определить свойства класса. Если бы она создала новую переменную, вы могли бы написать такой код:

class Chamber {
public:
int pot;
};

void f(bool b) {
if (b)
Chamber::pot = 2;
}

Что бы это вообще значило? Будет ли он найти каждый экземпляр Chamber и установить все свои potс 2? Это чепуха.

Короткая сноска: язык стандарта здесь говорит конкретно о ссылках, но для упрощения примеров я использовал не ссылки. Я надеюсь, вы понимаете, что это не меняет принципа.

6

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector