Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
#1

Скобки не работают с постфиксным инкрементом - C++

19.09.2010, 12:40. Просмотров 2141. Ответов 20
Метки нет (Все метки)

Почему скобки не работают с постфиксным инкрементом ? Программа должна вывести 1, а выводит 0. Без скобок приоритет постфиксного инкремента был ниже операции присваивания, а со скобками должен стать выше. Но почему-то приоритет не меняется.

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main ( )
{
    int var1=0, var2=0;
    var2= (var1++);
    cout <<  var2  << endl;
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2010, 12:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скобки не работают с постфиксным инкрементом (C++):

Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах - C++
Можете объяснить разницу между i++ и ++i на просто примере с цифрами?

Разобрать кодик с постфиксным оператором - C++
Вот проблемный код: do *seq++ = *cod++ != '0' ? sign : -sign; while (n--); Мои рассуждения: тк стоит постфиксный...

Помогите чайнику с инкрементом... - C++
Здравствуйте! Понимаю, конечно, что вопрос наверное дурацкий... но я только начал знакомство с С++, а этот вопрос не дает покоя... int...

функция с инкрементом объекта. ++ - C++
Доброго времени суток. Прошу помочь в реализации функций. static HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); static...

Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки - C++
Доброго времени суток. Подскажите пожалуйста алгоритм или путь к решению задачи, используя СТЕК Дана ПСП, ваша задача для каждой...

Фигурные скобки: Мне пишут что ошибка в закрытие скобки после return. - C++
#include &lt;iostream&gt; using namespace std; int main(){ int *ptr_number = new int; int *sum = new int(0); cin &gt;&gt; *ptr_number; ...

20
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,189
Записей в блоге: 27
22.09.2010, 11:30 #16
Цитата Сообщение от Kastaneda Посмотреть сообщение
Evg, а можете объяснить, почему в данном случае поведение локальной переменной отличается от глобальной?
Различия идут от того, что в случае глобальной переменной она попадает в память, а в случае локальной - компилятор пытаяется её запихнуть на регистр. А дальнейшая конкретная причина кроется в особенностях устройства компилятора. На то оно и undefined behaviour, что компилятор не следит за корректностью в этом случае, а потому тут получилось так, как получилось. При желании можно поиграться с опциями и увидеть, что даже при разных опциях на одном компиляторе можно получить разные результаты
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
22.09.2010, 11:30 #17
Ну, во-первых, это код из области маразма, и да он будет по разному собран разными компиляторами. В куске, что я показал, код сгенерированный МСовским компилятором, тем, которым пользуется автор темы, тот же gcc выдаст 1. А к чему разводить полемику по данному поводу?
0
Kastaneda
Нарушитель
Эксперт С++
4664 / 2870 / 229
Регистрация: 12.12.2009
Сообщений: 7,300
Записей в блоге: 2
Завершенные тесты: 1
22.09.2010, 11:37 #18
Цитата Сообщение от Evg Посмотреть сообщение
Различия идут от того, что в случае глобальной переменной она попадает в память, а в случае локальной - компилятор пытаяется её запихнуть на регистр.
Это я знал, просто я подумал, что есть какое-то объяснение того, что результаты разные и(как я думал) зависят от типа хранения переменной.

Не по теме:

А вот про "точки следования" признаюсь вообще не знал

0
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,189
Записей в блоге: 27
22.09.2010, 12:00 #19
Цитата Сообщение от Manjak Посмотреть сообщение
Ну, во-первых, это код из области маразма
Плевать из какой области. Это наглядная демонстрация того, как будет построен код, содержащий UB. К тому же коэффициэнт маразма моего примера строго равен коэффициэнту маразма примера "var = var++" (с точки зрения стандарта)

Цитата Сообщение от Manjak Посмотреть сообщение
В куске, что я показал, код сгенерированный МСовским компилятором, тем, которым пользуется автор темы, тот же gcc выдаст 1. А к чему разводить полемику по данному поводу?
Для объяснения того, как работает эта программа, ты продемонстрировал фрагмент ассемблерного кода и из твоих слов вытекало, что вот дескать так оно и должно работать. Я достаточно внятно (как мне показалось) пояснил, что подобные коды будут работать как бог на душу положит, а доказательства в виде кода одного из компиляторов не канают. Мои пояснения адресованы в первую очередь тем, кто может неправильно истолковать твои слова. Что ты хотел пояснить - я так и не понял, но из контекста всей темы довольно чётко себе представляю, что кто-то из начинающих сделает из твоих слов неправильный вывод
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
22.09.2010, 12:13 #20
Цитата Сообщение от Manjak Посмотреть сообщение
просто не надо так делать.
Специально добавил, а информацию о внутренней обработке, по моему, новичку не то что трудно будет усвоить, ему, извините за мой французский, порвет башню.
0
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,189
Записей в блоге: 27
22.09.2010, 12:27 #21
Цитата Сообщение от Manjak Посмотреть сообщение
Специально добавил, а информацию о внутренней обработке, по моему, новичку не то что трудно будет усвоить, ему, извините за мой французский, порвет башню.
Информация о внутренней обработке это конеткрный ответ на конкретный вопрос конкретного человека
0
22.09.2010, 12:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2010, 12:27
Привет! Вот еще темы с ответами:

Дана строка, содержащая латинские буквы и скобки. Если скобки расставлены правильно - вывести 0. Иначе - номер позиции, где есть ошибочная скобка - C++
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то есть каждой открывающей соответству-ет одна...

не работают скобки в коде при создании tshape - C++ Builder
вот код //--------------------------------------------------------------------------- void __fastcall TForm1::Shape1MouseDown(TObject...

Разница между префиксным и постфиксным написанием - Java SE
Здравствуйте. Пытался объяснить человеку про префиксное и постфиксное прибавление 1 (знаком ++). Вроде бы все понятно , если мы создаем...

Какие циклы относится префиксным и постфиксным циклам - C#
какие циклы относится префиксным и постфиксным циклам?


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

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

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