powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / вопрос про приоритеты операций
63 сообщений из 63, показаны все 3 страниц
вопрос про приоритеты операций
    #39773672
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <stdio.h>

int a = 1;
int b = 1;
int c = 1;

int main()
{
    a = (a++)*(-1);
    b = (b+1)*(-1);
    c = -(c++);

    printf("%i ", a);
    printf("%i ", b);
    printf("%i ", c);

    return 0;
}



так как я явно задал приоритеты скобками, то ожидаю от компилятора разворачивание в вид

a = (a+1) * (-1);
b = (b+1) * (-1);
c = (c+1) * (-1);

соответственно ожидаю и ответы -2 для a, b, c.

однако компилятор gcc выдает -1-2-1

а компилятор vc++ вообще выдал 0 -2 0

-----------

можете объяснить?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773684
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UB
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773685
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
про ПРЕ и ПОСТ я в курсе.
но я явно задаю порядок.

и почему разные компиляторы вычисляют по разному?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773686
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose,

Приоритет ни причем
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773758
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose,

каждый по своему прав
авторПри использовании операции постинкремента значение переменной сначала используется в выражении, а потом увеличивается на 1студия думает, что выражение это вся строка
гнус думает, что выражение ограничено скобками
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773768
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если убрать из кода пост-инкремент то появится хоть какой-то детерминизм.

А без этого выражение - ребус.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773793
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z = (a++)*(-1) это не то же самое что z = (a+1)*(-1), это скорее z = (a)*(-1); a += 1

возможно речь шла про z = (++a)*(-1), тут должно быть -2

Интересно что код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	int a = 1;
		int b = 1;
		int c = 1;

		//int d = (a++)*(-1);

		a = (a++)*(-1);
		b = (b+1)*(-1);
		c = -(c++);



зависит от комментированной строки. Я такое уже как-то встречал, например
Код: plaintext
1.
2.
3.
4.
5.
A = 2;
A = 3;
if (0){
};
B = A;



Если убрать if, то результат будет другим нежели с if(0) =)
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773828
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseпро ПРЕ и ПОСТ я в курсе.
но я явно задаю порядок.

и почему разные компиляторы вычисляют по разному?
Потому что UB

a++ это не a+1, это означает при следующем чтении a будет больше на 1, а где произойдет сохранение увеличенного значения в a (по закрывающей скобке или по точке с запятой) остается на усмотрение компилятора.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773833
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не согласен, что это UB.

Gcc прав.

с = *pc++ - классика
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773836
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UB это когда _один объект_ модифицируется _дважды_ в точке следования.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773838
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglUB это когда _один объект_ модифицируется _дважды_ в точке следования.
У него дважды "a =" и "a++"
Код: plaintext
1.
a = (a++)*(-1);
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773841
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

точно, присваивание то я и не заметил )

Но это не то, что спрашивал топик, на самом деле правильный пример для его вопроса, чтобы не влияло от скобочек =)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <stdio.h>

int a = 1, a1;
int b = 1, b1;
int c = 1, c1;

int main()
{
	a1 = (a++)*(-1);
	b1 = (b + 1)*(-1);
	c1 = -(c++);

	printf("%i ", a1);
	printf("%i ", b1);
	printf("%i ", c1);

	getchar();

	return 0;
}
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773948
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinz = (a++)*(-1) это не то же самое что z = (a+1)*(-1), это скорее z = (a)*(-1); a += 1

возможно речь шла про z = (++a)*(-1), тут должно быть -2

Интересно что код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	int a = 1;
		int b = 1;
		int c = 1;

		//int d = (a++)*(-1);

		a = (a++)*(-1);
		b = (b+1)*(-1);
		c = -(c++);



зависит от комментированной строки. Я такое уже как-то встречал, например
Код: plaintext
1.
2.
3.
4.
5.
A = 2;
A = 3;
if (0){
};
B = A;



Если убрать if, то результат будет другим нежели с if(0) =)

В коде выше ясно, почему зависит,
//int d = (a++)*(-1);
увеличивает а
а в вашем примере - загадка, почему
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773957
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один из поинтов почему ФП (Scala в частности) отказалась от пред- пост- инкремента.
Он просто заменен на функцию сложения. (+) - это функция. Гарантии чистоты и отсуствия
побочных эффектов потребовали.

Код: plaintext
1.
a = a.+(1)




В сях инкремент - мощная штука. В одном из жлобских ассемблеров (под PDP) кажется функции инкремента,
разыменования и сравнения занимали 1 ассемблерную инструкцию. Точных ссылок я не помню.
Могу ошибаться. Пускай знающие подскажут т.к. PDP это была .. не моя эпоха скажем так.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773970
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ одном из жлобских ассемблеров (под PDP) кажется функции инкремента,
разыменования и сравнения занимали 1 ассемблерную инструкцию.

Там был автоинкрементный/декрементный способ адресации, применимый к любой операции и
любому регистру.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39773995
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инкремент/декремент есть во многих (возможно во всех) ассемблерах. Потому что технически проще на транзисторах сделать +1 чем +N.

Но в ассемблере нет пред-/пост-. ИМХО это уже синтаксический сахар в чистом виде.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774001
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <stdio.h>

int a = 1;
int b = 1;
int c = 1;

int main()
{
    a = (a++)*(-1);
    b = (b+1)*(-1);
    c = -(c++);

    printf("%i ", a);
    printf("%i ", b);
    printf("%i ", c);

    return 0;
}



так как я явно задал приоритеты скобками, то ожидаю от компилятора разворачивание в вид

a = (a+1) * (-1);
b = (b+1) * (-1);
c = (c+1) * (-1);

соответственно ожидаю и ответы -2 для a, b, c.

однако компилятор gcc выдает -1-2-1

а компилятор vc++ вообще выдал 0 -2 0

-----------

можете объяснить?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774014
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Вопрос немного не про то.
Вот точная фраза из с++ референс в части приоритета операторов:

Parts of the expressions can be enclosed in parenthesis to override this precedence order, or to make explicitly clear the intended effect.

Я явно задал приоритеты скобками, компилятор съел код.
Приоритет скобок ровно такой же как и у ++ независимо от пре или пост.
Я вправе расчитывать управление ходом расчетов с помощью скобок, не так ли?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774019
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseЯ вправе расчитывать управление ходом расчетов с помощью скобок, не так ли?

Вправе. Но ты должен пояснить почему ты ожидаешь от (a++) результат 2. Инкремент а при
постфиксе происходит после получения его текущего значения и это не зависит от приоритета.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774021
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое выражение
Код: plaintext
1.
b = (a++)*(-1);


Эквивалентно
Код: plaintext
1.
2.
b = a*(-1);
a++;


Потому - что пост-инкремент исполняется после того как переменная поучаствовала в выражении.

Но у тебя a стоит еще и слевой части присвоения (!). Вопрос. Что должен сделать компиллятор?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774023
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто должен сделать компиллятор?

Нормальный компилятор (GCC) полностью вычислит всё, что справа от знака присваивания,
включая побочные эффекты, перед выполнением собственно присваивания. У MS, очевидно,
другое мнение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774024
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
maytonТакое выражение
Код: plaintext
1.
b = (a++)*(-1);


Эквивалентно
Код: plaintext
1.
2.
b = a*(-1);
a++;


Потому - что пост-инкремент исполняется после того как переменная поучаствовала в выражении.

Но у тебя a стоит еще и слевой части присвоения (!). Вопрос. Что должен сделать компиллятор? компилятор должен выплюнуть ошибку.
Либо таки воспользоваться приоритетом скобок.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774027
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNosemaytonТакое выражение
Код: plaintext
1.
b = (a++)*(-1);


Эквивалентно
Код: plaintext
1.
2.
b = a*(-1);
a++;


Потому - что пост-инкремент исполняется после того как переменная поучаствовала в выражении.

Но у тебя a стоит еще и слевой части присвоения (!). Вопрос. Что должен сделать компиллятор? компилятор должен выплюнуть ошибку.
Либо таки воспользоваться приоритетом скобок.
Причем здесь скобки?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774028
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseЛибо таки воспользоваться приоритетом скобок.

У тебя в скобках операция, гарантированным результатом которой является
старое значение переменной. Скобки этого не в состоянии изменить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774029
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmaytonЧто должен сделать компиллятор?

Нормальный компилятор (GCC) полностью вычислит всё, что справа от знака присваивания,
включая побочные эффекты, перед выполнением собственно присваивания. У MS, очевидно,
другое мнение.
операция присваивани, такая же операция - 21809246 , весь вопрос где заканчивается выражение
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774035
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этому бояну много лет. И здесь в скруле он уже звучал.
Можно И-нозу кинуть ссылку. Там вроде-уже обсуждалось и UB и компилляторы.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774036
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
maytoneNoseпропущено...
компилятор должен выплюнуть ошибку.
Либо таки воспользоваться приоритетом скобок.
Причем здесь скобки? при том что

a=-a++
и
a=-(a++)

одно и тоже, хотя написано что скобки управляют приоритетом.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774040
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
maytonЭтому бояну много лет. И здесь в скруле он уже звучал.
Можно И-нозу кинуть ссылку. Там вроде-уже обсуждалось и UB и компилляторы. вообще мне уже объяснили что код не олимпиадный, то и нефиг выпендриваться.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774041
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNosemaytonпропущено...

Причем здесь скобки? при том что

a=-a++
и
a=-(a++)

одно и тоже, хотя написано что скобки управляют приоритетом.а что неправильно?
приоритеты этих операций равны, порядок выполнение в С++ справа налево
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774042
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
kealon(Ruslan)eNoseпропущено...
при том что

a=-a++
и
a=-(a++)

одно и тоже, хотя написано что скобки управляют приоритетом.а что неправильно?
приоритеты этих операций равны, порядок выполнение в С++ справа налево ну и пусть выполнит сначала то, что в скобках. Полностью, как отдельную операцию.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774043
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)весь вопрос где заканчивается выражение

В данном случае это всё равно: приоритет инкремента в любом случае выше присваивания и
выражение "a = a++" никак не должно вычисляться как "(a = a)++".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774045
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Dimitry Sibiryakovkealon(Ruslan)весь вопрос где заканчивается выражение

В данном случае это всё равно: приоритет инкремента в любом случае выше присваивания и
выражение "a = a++" никак не должно вычисляться как "(a = a)++".
a=(a++)
как должно вычисляться?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774046
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNosemaytonЭтому бояну много лет. И здесь в скруле он уже звучал.
Можно И-нозу кинуть ссылку. Там вроде-уже обсуждалось и UB и компилляторы. вообще мне уже объяснили что код не олимпиадный, то и нефиг выпендриваться.
Уже несколько человек тебе написало про UB и разницу в поведении компилляторов.
Сколько еще ты ожидаешь постов на эту тему?
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774050
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseЯ вправе расчитывать управление ходом расчетов с помощью скобок, не так ли?
Нет, т.к. в С/С++ есть такое понятие как UB (непредсказуемое поведение) в определенных случаях и описанный случай один из них. UB - это свобода компилятору создавать оптимальный код.
Это описано в стандарте С/С++.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774053
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovkealon(Ruslan)весь вопрос где заканчивается выражение

В данном случае это всё равно: приоритет инкремента в любом случае выше присваивания и
выражение "a = a++" никак не должно вычисляться как "(a = a)++".
кто сказал что постинкремент это "цельная" операция?

авторПри использовании операции постинкремента значение переменной сначала используется в выражении, а потом увеличивается на 1
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774055
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати этот код не должен проходить code-review. Поэтому вопрос его корректного
использования отпадает вобщем-то.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774056
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovkealon(Ruslan)весь вопрос где заканчивается выражение

В данном случае это всё равно: приоритет инкремента в любом случае выше присваивания и
выражение "a = a++" никак не должно вычисляться как "(a = a)++".
я отвечал на другой вопрос, в контексте этого ответа

Код: plaintext
1.
2.
3.
a=-a++
и
a=-(a++)


одно и тоже, ибо если по правилам убрать скобки из второго, получится первое
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774058
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати этот код не должен проходить code-review. Поэтому вопрос его корректного
использования отпадает вобщем-то.
Плохо что код проходит через компилятор без единого варнинга, по крайней мере в MSVC.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774061
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonКстати этот код не должен проходить code-review. Поэтому вопрос его корректного
использования отпадает вобщем-то.
Плохо что код проходит через компилятор без единого варнинга, по крайней мере в MSVC.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
>> g++ -Wall d.cpp
d.cpp: In function ‘int main()’:
d.cpp:9:19: warning: operation on ‘a’ may be undefined [-Wsequence-point]
     a = (a++)*(-1);
                   ^
d.cpp:11:15: warning: operation on ‘c’ may be undefined [-Wsequence-point]
     c = -(c++);
               ^


gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774062
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)кто сказал что постинкремент это "цельная" операция?

https://en.cppreference.com/w/cpp/language/operator_incdec
The operand expr of a built-in postfix increment or decrement operator must be a
modifiable (non-const) lvalue of non-boolean arithmetic type or pointer to complete object
type. The result is prvalue copy of the original value of the operand. As a
side-effect, for non-boolean operands, the expression x++ modifies the value of its
operand as if by evaluating x += 1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иноз? Прояснилось? И я закрою тему вобщем-то.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774066
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

в этом выражении ни слова, когда должно быть сделано увеличение значения
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774067
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
maytonИноз? Прояснилось? И я закрою тему вобщем-то. вопрос был исключительно про скобки.

расхождение явно обозначенного в документации с компиляторами.

тему можно удалять, так как никто не в состоянии объяснить это расхождение с точки зрения документации.
в ней ни слова про "кроме таких то случаев".
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774069
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
более того, явно сказано, что скобками я могу управлять приоритетом.

а по факту получается что не всегда.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774070
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNosemaytonИноз? Прояснилось? И я закрою тему вобщем-то. вопрос был исключительно про скобки.

расхождение явно обозначенного в документации с компиляторами.

тему можно удалять, так как никто не в состоянии объяснить это расхождение с точки зрения документации.
в ней ни слова про "кроме таких то случаев".вам уже раз ять... объяснили, не надо валить с больной головы на здоровую

перепишите выражения в польскую нотацию и сравните
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774072
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
kealon(Ruslan)eNoseпропущено...
вопрос был исключительно про скобки.

расхождение явно обозначенного в документации с компиляторами.

тему можно удалять, так как никто не в состоянии объяснить это расхождение с точки зрения документации.
в ней ни слова про "кроме таких то случаев".вам уже раз ять... объяснили, не надо валить с больной головы на здоровую

перепишите выражения в польскую нотацию и сравните выражение синтаксически верно? верно.
в документации указано про управлении скобками? указано.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774073
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose,

указано, но выводы вы делаете неправильные
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774074
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseболее того, явно сказано, что скобками я могу управлять приоритетом.

Никакие скобки и приоритеты не могут заставить пост-инкремент вернуть новое значение
переменной. См. процитированное выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774078
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
kealon(Ruslan)eNose,

указано, но выводы вы делаете неправильные 2+2=4, но выводы я делаю неправильные.

топик можно закрывать :)
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774085
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseЯ явно задал приоритеты скобками, компилятор съел код.
Приоритет скобок ровно такой же как и у ++ независимо от пре или пост.
Я вправе расчитывать управление ходом расчетов с помощью скобок, не так ли?Ты дал компилятору две операции присваивания в рамках одной строчки, компилятор выбрал приоритет этих присваиваний на свой вкус.

Код: plaintext
1.
2.
if ((a = 6) && (a = 5)){
};
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774087
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakoveNoseЯ вправе расчитывать управление ходом расчетов с помощью скобок, не так ли?

Вправе. Но ты должен пояснить почему ты ожидаешь от (a++) результат 2. Инкремент а при
постфиксе происходит после получения его текущего значения и это не зависит от приоритета.
Не вправе.
Приоритет операций это не то же самое что порядок выполнения.
Приоритет операций существует только при синтаксическом анализе.
При выполнении там порядок может быть произвольным (в пределах стандарта), главное чтобы каждое подвыражение вычислялось после его аргументов.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774088
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Aklinкомпилятор выбрал приоритет этих присваиваний на свой вкус жесть
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774089
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Anatoly MoskovskyПриоритет операций это не то же самое что порядок выполнения. x=2+3*5;

x=(2+3)*5;
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774092
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Dimitry Sibiryakovты должен пояснить почему ты ожидаешь от (a++) результат 2 потому что написано, что с помощью скобок я могу управлять ходом вычисления
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774098
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Найди любое описание как работает "пост инкремент". И запость сюда в форум.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774099
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
maytonНайди любое описание как работает "пост инкремент". И запость сюда в форум. https://ravesli.com/urok-40-inkrement-dekrement-pobochnye-effekty/

про побочные эффекты, которые возникают из-за "C++ не определяет порядок, в котором вычисляются аргументы функции."

в принципе понятно. надо было только явно написать об этом в документации, а не оставлять на откуп производителям компиляторов.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774101
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseнаписано, что с помощью скобок я могу управлять ходом вычисления

Где это так врут? Скобки управляют именно приоритетом:
When parsing an expression, an operator which is listed on some row of the table
above with a precedence will be bound tighter (as if by parentheses) to its arguments than
any operator that is listed on a row further below it with a lower precedence.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774103
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Dimitry SibiryakoveNoseнаписано, что с помощью скобок я могу управлять ходом вычисления

Где это так врут? Скобки управляют именно приоритетом:
When parsing an expression, an operator which is listed on some row of the table
above with a precedence will be bound tighter (as if by parentheses) to its arguments than
any operator that is listed on a row further below it with a lower precedence. в "плоском" выражении без вызова других функций это и есть ход вычисления
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774106
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseв принципе понятно. надо было только явно написать об этом в документации, а не оставлять на откуп производителям компиляторов.
Есть стандарт С/С++, считай ТЗ для разработчика компилятора, там написано что это UB.
Разработчики компиляторов (не все) предупреждают что код проблемный 21809886 .
Что еще надо?

PS Вчера звонил один жестко накосячивший юзер с наездом что моя прога плохо работает. А то что прога дала два предупреждения о косяке и юзер дважды нажал проигорировать - это недоработка моей проги ((((
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774124
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseв "плоском" выражении без вызова других функций это и есть ход вычисления
Нет конечно.
Начнем с того что например порядок выполнения того же постинкремента (время вычисления возвращаемого значения и время вычисления побочного эффекта) никак синтаксически нельзя выразить. Это просто описано в стандарте.
Поэтому приоритет операций там никакого значения не имеет.
А то что в каких-то простейших частных случаях приоритет влияет на порядок, так это просто потому, что синтаксис специально разрабатывают так чтобы простую программу было проще писать.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774134
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseDimitry Sibiryakovты должен пояснить почему ты ожидаешь от (a++) результат 2 потому что написано, что с помощью скобок я могу управлять ходом вычисления
Вы утомили.

Я же привел пример 21809438 - что проблема не в скобках справа, а в самой операции присвоения. Скобки можно расставлять по вкусу.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774142
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
их перестановка не влияет на результат. И в MSVC работает тоже как нужно и ожидается.
...
Рейтинг: 0 / 0
вопрос про приоритеты операций
    #39774168
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Закрыто
...
Рейтинг: 0 / 0
63 сообщений из 63, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / вопрос про приоритеты операций
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]