2013-03-18 2 views
5

Интересно ли эталонные переменные, такие как c в этом коде:Имеются ли ссылки на кучу или стек?

int a = 5; 
int & c = a; 

выделяются из кучи или стека. Может ли кто-нибудь помочь? Спасибо

+1

Ссылки не являются объектами. –

+0

Это отвечает на все [Как выглядит ссылка на C++, память-мудрый?] (Http://stackoverflow.com/a/38310081/6186415) –

ответ

13

Ссылка - это просто псевдоним, и он не указан стандартом C++ 11, независимо от того, требует ли он фактическое хранение или нет.

согласно пункту 8.3.2/4 C++ 11 стандарта на:

Не определено, требуется ли или нет ссылки хранения (3.7).

+0

Итак, вы имеете в виду, что ответ неизвестен? – 2013-03-18 20:18:58

+0

@ YasinRazlık: Я бы сказал, что ответ не имеет значения. И в большинстве случаев я считаю, что никакого хранения не будет выделено вообще: ссылка - это просто псевдоним, а не переменная, которая содержит адрес памяти (например, указатель). –

+1

@ YasinRazlık ответ, что это не имеет значения. – juanchopanza

4

Ссылки - это просто псевдонимы и не нужно выделять в любом месте. В стандарте не указывается такая деталь, до такой степени, что даже не требуется, чтобы ссылки имели какое-либо хранилище вообще.

2

Не имеет значения, ссылка - это просто постоянный автоматически де-указательный указатель без арифметики указателя и без опции нулевого или неопределенного значения.

Что касается повторно сформулированного вопроса - способ использования ссылок подразумевает, что они будут в основном распределены по стекам. Это во всех нестатических сценариях, где их хранение нельзя опустить. И это C++ - высокопроизводительный язык программирования, который пропускает все, что не используется.

0

Большинство компиляторов рассматривают ссылки как ограниченные указатели.

Смежные вопросы