2016-04-16 5 views
0
int main() 
{ 
    int a=45; 
    int& re=a; 
    cout << &a << endl; 
    cout << &re << endl; 
    return 0; 
} 

Output : 
    0x61ff18 
    0x61ff18 

Когда я печатаю адрес обеих переменных, это то же самое, означает ли это, что ссылочная переменная не занимает память в стеке?Имеет ли эталонная переменная память в стеке?

+0

трудно сказать, потому что существование самого стека является реализацией. – user3528438

+0

см. [Это] (http://stackoverflow.com/questions/8846494/do-references-take-memory-in-c) –

+0

Возможно, он был оптимизирован (хотя обычно да, он принимает память) – DarthRubik

ответ

2

адрес-оператор ссылки в C++ дает вам адрес ссылочного объекта, а не адрес ссылочной переменной. По спецификации C++.

Следовательно, вы видите одно и то же значение.

+0

Итак, как я могу напечатать адрес ссылочной переменной? – shuboy2014

+0

Это странно .... – DarthRubik

+0

@ shuboy2014 Вы не можете. Язык не предоставляет никаких возможностей для этого. – rightfold

2

& принимает адрес объекта, на который ссылается объект, а не сама ссылка, поэтому выход одинаковый как для &a, так и для &re. В типичных реализациях сами ссылки требуют памяти, если они не оптимизированы. Проконсультируйтесь с документацией по реализации и ее сборкой (флаг -S для GCC и clang). Спецификация языка не дает никаких гарантий.