Можете ли вы сказать мне, как данный код достигает этого результата? - PullRequest
0 голосов
/ 02 мая 2019

вывод кода 30. Но я не уверен, как он к нему добирается.

#include <iostream>      
int &fun() 
{ 
    static int x = 10; 
    return x; 
} 

int main() 
{ 
    fun() = 30; 
    std::cout << fun(); 
    return 0; 
} 

Я ожидаю, что на выходе будет 10, но он показывает 30. как?

1 Ответ

6 голосов
/ 02 мая 2019

Ваш fun дает местоположение из int (так как он возвращает ссылку ).Этим местоположением является static переменная x, которая инициализируется (один раз, концептуально до запуска программы) 10.

Тогда fun() = 30; означает , назначая это местоположение.Так что x присваивается 30.

Наконец cout << fun() отображает содержимое этого местоположения.

Если бы x была некоторой автоматической переменной , ваш код был быиметь неопределенное поведение .

PS.Грубый способ думать о & унарной ссылке, такой как int &r = x;, заключается в том, что она «трансформирует» ваш код следующим образом: введите фантомный указатель int *p = &x; (где p - некоторая свежая переменная, не встречающаяся в другом месте) и заменитеr с *p, поэтому &r с p, повсюду в рамках этого r.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...