Я новичок в идее ссылки в C ++, у меня есть вопрос, касающийся выделения памяти ссылки на чистую числовую константу.(Еще одна вещь, которую я хочу проверить в первую очередь, это то, что я подозреваю, что const reference , с которым я часто сталкивался, означает ссылка на const , но я не уверен.)
Вот мое тестирование на ideone.com :
#include <stdio.h>
int main() {
const int r0 = 123;
const int &r1 = 123;
const int &r2 = 123;
const int &r3 = r2;
printf("%p\n", (void *)&r0);
printf("%p\n", (void *)&r1);
printf("%p\n", (void *)&r2);
printf("%p\n", (void *)&r3);
return 0;
}
и результат:
0x7ffee3bd74c4
0x7ffee3bd74c8
0x7ffee3bd74cc
0x7ffee3bd74cc
Причина r2
такая же, как r3
ясно из этого ответа - Как выглядит ссылка C ++ с точки зрения памяти? , которая говорит, что это зависит от компилятора.Но я думаю о том, почему компилятор также не делает r0
, r1
, r2
одинаковыми, поскольку все имеют одно и то же чистое постоянное значение 123
.(или называется prvalue, если нет неправильного поиска)
Как примечание: После некоторых поисков на этом сайте я нашел наиболее связанный вопрос - но в python .Хотя это и другой язык, но я подумал, что идея должна быть одинаковой / похожей: по ссылке, если моя программа была написана на python, в памяти будет только один 123
для экономии места.
Некоторые другие ответы, которые я прочитал:
- C ++ ссылки занимают память : Этот ответ предполагает, что если это необходимо, то
int &x
реализуется как *(pointer_to_x)
. - Как выглядит ссылка C ++ с точки зрения памяти? : Этот ответ предполагает, что компилятор постарается сделать все возможное, чтобы сэкономить место.