ли под него память и где он хранится во время выполнения программы?
int rats = 101;
int & rodents = rats; // where is is stored??
Конечно выделяется. Ссылка - это указатель, который не может быть нулем, и имеет немного другой синтаксис
Может выделяться, может нет
А как верно
если бы ссылка была указателем, у неё был бы sizeof указателя и из них можно было бы сделать массив
Ссылка это просто "альтернативное имя объекта", алиас
Тогда где в памяти хранится информация о ссылке?
почему бы тебе не попринтить самой и посмотреть на адреса?
Либо нигде, либо ссылка реализуется как адрес на память, либо ни то, ни другое
Константный указатель
нужно иметь в виду, что int a = 5; int &ref = a; assert(&a == &ref); int a = 5; int *ptr = &a; assert(&a != &ptr);
Я это уже сделала и у указателя тот же адрес.что и у его переменной. Вопрос в том, что у переменной есть адрес в памяти и есть значение. Когда я создаю указатель у него тоже есть адрес в памяти и значение (int значение другого адреса в памяти). Как они в памяти расположены я понимаю. Но как в памяти располагается reference?
https://t.me/supapro/852733
Это тоже указатель, но его нельзя изменить
Это очень помогло понять что же такое ссылка. Спасибо.
Так же, как любая другая переменная
Несовсем, компилятор запрещает тебе взять адрес ссылки
хорошо, то есть ссылка это указатель, который разыменовывается автоматически?
Ну я в смысле, что она лежит на стеке вместе с остальными переменными
Да, и никогда не null
указатель привязан к памяти, ссылка - к значению
Я тоже слышал такое определение
Что-то непонятное
считай ссылку другим именем объекта, алиасом
я тут хотел пояснить, что ссылка null быть не может, наверное, не совсем удачно
Но может ссылаться на несуществующий объект
Это я считаю. Я пытаюсь понять где она расположена. Если ссылка может не иметь своей памяти, то как тогда она может работать?
Тогда ее просто компилятор соптимизирует
Компилятор вместо ссылки использует непосредственно объект
Может компиль вместо ссылки тупо подставляет то, на что она ссылается
ну например представь компилятор возьмет и везде где ты писала ссылку на х подставит сам х
Это стандарт не специфицирует Реализуется через указатель
я уже написал, как правило это константный указатель, если это параметр функции или дата мембер, или ничего, компилятор возьмет реальный объект, которым инициализировалась ссылка.
Вангую вопрос Насти: тогда зачем ссылка нужна, если она либо указатель, либо сам объект
все через это проходят
к слову, на этот вопрос ответил Страутруп в дизайне и эволюции
Да, Константный только.
Если его не сделать константным, то оптимизация с заменой на оригинальную переменную перестанет работать.
Пока у меня вопрос только с тем, как вообще возможно в С++ реализовать многопоточность и не отстрелить ноги с одновременным доступом к одной и той же области памяти. Полагаю, что отладка многопоточных программ в С++ это суицидальная активность.
ну да, так и есть, но зато в плюсах она хотя бы есть в отличие от питона)
Я кидал логгер, которым можно иллюстрировать работу многопотка
Не шарить данные между потоками и нет проблем
в питоне есть конкурент и треадинг. Так что в питоне тоже можно в многопоточность (И я даже это делала).
Обсуждают сегодня