2013-05-14 2 views
1

Предположим, у меня есть программаиспользование и при создании объекта структуры

struct node 
{ 
    int bot,el; 
    char name[16]; 
}; 

int main() 
{ 
    stack <node> S; 
    node&b = S.top; 
    return 0; 
} 

Что делает & в node&b означает?

+1

Это означает, что 'b' является [переменной] (http://www.cprogramming.com/tutorial/references.html) типа 'node'. – Dukeling

+0

[Читайте о ссылках] (http://www.parashift.com/c++-faq/references.html). – BoBTFish

ответ

1

Во-первых, вы должны зафиксировать вызов top:

node &b = S.top() ; 

Так что на данный момент b теперь псевдоним верхнего элемента в стеке так что любые изменения, внесенные в b будут отражены для верхний элемент в стеке. Обращение к элементам в стандартном контейнере может быть dangerous, и поэтому вы понимаете последствия. Этот код демонстрирует принцип, оставаясь как можно ближе к пример кода, как это возможно:

int main() 
{ 
    std::stack <node> S; 

    node n1 ; 

    n1.bot = 10 ; 
    n1.el = 11 ; 

    S.push(n1) ; 

    node a = S.top() ; // a is a copy of top() and changes to a won't be reflected 
    node &b = S.top() ; // b is now an alias to top() and changes will be reflected 

    a.bot = 30 ; 
    std::cout << S.top().bot << std::endl ; 
    b.bot = 20 ; 
    std::cout << S.top().bot << std::endl ; 

    return 0; 
} 
Смежные вопросы