Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Anikin
5 / 5 / 6
Регистрация: 20.06.2016
Сообщений: 72
Завершенные тесты: 2
1

Декремент и ссылка на переменную

29.11.2017, 21:07. Просмотров 330. Ответов 6
Метки нет (Все метки)

Здравствуйте! Есть следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
void print_val(string x, string y) {
    cout << x << '\t' << y << endl;
}
 
void print_val(int x, int y) {
    cout << x << '\t' << y << endl;
}
 
int main()
{
    int x;
    int& y = x;
    cin >> x;
    print_val("x", "y");
    print_val(x, y);
    print_val(--x, y);
 
    return 0;
}
Почему вызов print_val(--x, y); выводит разные значения? Ведь по моей логике происходит следующее: --х уменьшает ее значение на 1, потом оно передается в функцию, а у это ссылка на х и его значение уже должно измениться, и должна происходить печать одинаковых значений. Где ошибка в моих рассуждениях?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2017, 21:07
Ответы с готовыми решениями:

Ссылка на переменную
Я создал функцию A, которая вызывает ф-ю B, которая в свою очередь создает переменную X и...

Ссылка на переменную другого класса
Всем привет ! Хочу создать ссылку на переменную класса Animation. class PLAYER { public:...

Ссылка на переменную после std::move
Можно ли пользоваться ссылкой на переменной после того как она была перемещена, как например здесь:...

ссылка на переменную
For i = 1 To 8 mypath1=&quot;C:\1.xlsx&quot; q = &quot;mypath&quot; &amp; i Workbooks.Open (q) Мне нужно открыть...

Ссылка на переменную
Здравствуйте форумчане! Не знаю как точно сформулировать вопрос, примерно так: Допустим есть 2...

6
Bring
127 / 49 / 41
Регистрация: 09.05.2015
Сообщений: 507
Завершенные тесты: 2
29.11.2017, 21:24 2
Получается что только x меняется, а y остается из - за того что в этом же выражении.
Поменяй местами эти строчки, поймешь о чем я.
C++
1
2
print_val(x, y);
print_val(--x, y);
0
lArtl
302 / 160 / 71
Регистрация: 09.10.2014
Сообщений: 762
Завершенные тесты: 3
29.11.2017, 21:28 3
Цитата Сообщение от Anikin Посмотреть сообщение
Где ошибка в моих рассуждениях?
Это UB, разные компиляторы дадут разный результат. VC++ значения будут одинаковы, в gcc - разные.
0
Bring
127 / 49 / 41
Регистрация: 09.05.2015
Сообщений: 507
Завершенные тесты: 2
29.11.2017, 21:28 4
Ну или так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void print_val(string x, string y) {
    cout << x << '\t' << y << endl;
}
 
void print_val(int x, int y) {
    --x;
    y = x;
    cout << x << '\t' << y << endl;
}
 
int main()
{
    int x;
    int &y = x;
    cin >> x;
    print_val(x, y);
    print_val(x, y);
    return 0;
}
0
oldnewyear
419 / 416 / 158
Регистрация: 21.05.2016
Сообщений: 1,325
29.11.2017, 21:29 5
C++
1
print_val(--x, y);
Undefined behaviour. В данном случае в функцию сначала передается y, а потом —x
0
nd2
3045 / 2558 / 1115
Регистрация: 29.01.2016
Сообщений: 8,567
30.11.2017, 02:00 6
Цитата Сообщение от Anikin Посмотреть сообщение
по моей логике происходит следующее: --х уменьшает ее значение на 1, потом оно передается в функцию, а у это ссылка на х и его значение уже должно измениться
Порядок обработки параметров функции неопределён.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4853 / 2496 / 697
Регистрация: 18.10.2014
Сообщений: 4,333
30.11.2017, 04:52 7
Цитата Сообщение от Anikin Посмотреть сообщение
Ведь по моей логике происходит следующее: --х уменьшает ее значение на 1, потом оно передается в функцию, а у это ссылка на х и его значение уже должно измениться, и должна происходить печать одинаковых значений. Где ошибка в моих рассуждениях?
Вы почему-то решили что сначала уменьшается и передается x, а только затем передается y.

Но вам никто такого не обещал.

Компилятор имеет право поступить наоборот: сначала передать y, и только после этого уменьшить и передать x.
0
30.11.2017, 04:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2017, 04:52

Ссылка на переменную
Здравствуйте. Не могу найти способ создать ссылку на объект/переменную, допустим: есть у объекта...

Ссылка на переменную?
Задача простая , но не знаю как решить , гугление тоже ничего не дало (вроде нужно ref...

Ссылка на переменную и переменная переменной
Комрады! Возник такой вопрос: Никак не могу понять то, что в теме писал. Особенно использование...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru