Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 22:28   #1
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
Вопрос x+x++

почему при выполнении этого кода
Код:
#include <iostream>
using namespace std;
int main()
{
    short x, y;
    x = 10;
    y = x++;
    cout<<"x = "<<x<<",\t y = "<<y<<endl;
    system("pause");
    return 0;
}
y=10, а при выполнении этого
Код:
#include <iostream>
using namespace std;
int main()
{
    short x, y;
    x = 10;
    y = x+x++;
    cout<<"x = "<<x<<",\t y = "<<y<<endl;
    system("pause");
    return 0;
}
уже 21, а не 20. ведь по идее значение y вычисляется так: сложить переменную x с переменной х а затем увеличить х на единицу.

Щас попробовал запустить второй исходник в VC++6.0: у=20, х=11, как и должно быть, а в деве "уже 21, а не 20"

Последний раз редактировалось Fatal Error; 28.06.2012 в 22:37.
Fatal Error вне форума Ответить с цитированием
Старый 28.06.2012, 22:40   #2
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

У каждого свое видение очередности выполнения операций, и этот каждый отражает это видение в реализации компилятора.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 28.06.2012, 22:43   #3
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

но ведь это нарушение правил плюсов!!!
Fatal Error вне форума Ответить с цитированием
Старый 28.06.2012, 22:45   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Fatal Error, каких правил? Вы читали стандарт C++? Там об этом написано?
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 28.06.2012, 22:50   #5
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Код:
x = 10;
y = x+x++;
x = 10, y = 21. С чего вдруг тут должно быть 20?

Или я не понял вопроса?
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 28.06.2012, 23:05   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Valio Посмотреть сообщение
Или я не понял вопроса?
Вы явно чего-то не поняли.
Arigato вне форума Ответить с цитированием
Старый 28.06.2012, 23:05   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Нет гарантии, что результат будет 21, он может быть любым. Нельзя применять разрушающие операции над переменной и обращаться к значению переменной в пределах одной точки следования, так как это ведёт к неопределённому поведению.
netrino вне форума Ответить с цитированием
Старый 28.06.2012, 23:22   #8
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
Fatal Error,Вы читали стандарт C++?
нет, стандарты не читал, но знаю что при х++ сначала используется значение переменной, а затем она увеличивается, а при ++х сначала увеличивается, а потом используется
Fatal Error вне форума Ответить с цитированием
Старый 28.06.2012, 23:26   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

++ имеет высший приоритет чем + в выражениях.
Цитата:
что при х++
ну у вас же это.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.06.2012, 23:33   #10
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

+ - приоритет 12.
++ - приоритет 15.

Как видно ++ выполнится первым.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц