Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 11.04.2020
Сообщений: 31

Вопрос по С++, чему равно значение выражения

11.04.2020, 22:48. Показов 6817. Ответов 52

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
int a,i,j;
i=3;
j=7;
 
a=i*j+++j+--i;
Какое значение примет j?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2020, 22:48
Ответы с готовыми решениями:

Чему будет равно значение выражения после выполнения операторов?
1. Чему будет равно значение выражения после выполнения операторов C++: 123 & 321? 2. Чему равно значение выражения после выполнения...

чему равно значение выражения '\122'
чему равно значение выражения '\122'?

Чему равно значение логического выражения А and 1 и A and 0?
Чему равно значение логического выражения А and 1 и A and 0? Помогите пожалуйста:kiss:

52
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,320
13.04.2020, 11:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
fao, как его может не быть. Тут и без последних выдержек черновика ясно, что если порядок вычисления аргументов неопределён то при вычислении справа налево произведение будет на дважды a больше (единица-то прибавится).
Яснее некуда... То "ясно", которое вы описали называется неспецифицированным порядком вычисления аргументов. И является примером неспецифицированного поведения. К неопределенному поведению это все не имеет никакого отношения даже отдаленно.

Еще раз, даю под запись: неопределенного поведения в add(a++, 2*a) нет. (Как уже было правильно замечено: его нет, начиная c С++17).

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Это потому, что выражения аргументов не рассматриваются как единое. Но и в едином нет определённости. Рекурсивно неопределённый порядок.
Вспомнилось то видео, про чувака, идущего к реке. По-моему это все-таки троллинг...

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.04.2020, 11:54
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
По-моему это все-таки троллинг...
Троллинг это то, что удобно считать троллингом, кроме случаев яркого рогатого бычества тирольского разлива, если идти от первоисточников жизни, а не черновиков. Вопрос темы:
Цитата Сообщение от Elseses Посмотреть сообщение
Какое значение примет j?
Но в итоге мы рассыпаемся в терминах UB и ... UB - unspecified это тоже U. Потому, что оказывается выражения возвращающие ссылку - инвалиды в смысле поддержки приоритета операций. То есть, не только ссылки, сами по себе но и их применения - тернистый путь. Потому, что нельзя более одного раза (одному чуваку войти в одну реку, раз вам реки и чуваки нравятся) обратиться к одной модифицируемой по ссылке переменной в одном выражении:
C++
1
2
3
4
5
6
7
8
a++; //это работает
2*a; // и это
//а вот это не работает:
a++ + 2*a ;//...
//или
a+=123 ;// работает
//а
(a+=123)+2*a ;//не работает
хотя компилятор эту лексику принимает. Но даже если залатают подобные дырки оно всё равно останется дырявой абстракцией, потому, что накладывает ограничения на арифметические выражения и заявленный приоритет операций не естественным образом.
У меня море ближе. Карантин технология развития комплекса жертвы у широких масс населения, с целью корректировки системы упвления (мягко говоря), не позволяют идти туда. Даже сексом разрешается заниматься только в маске и на расстоянии не ближе 1,5 м. Иначе ссылка и изоляция. Ну то есть, как в синтаксисе алгебраических выражений, содержащих ссылки.
0
13.04.2020, 13:16

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
По-моему это все-таки троллинг...
Либо сдвиг фазы сознания, что более вероятно.

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.04.2020, 16:07
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
add(a++, 2*a)
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И является примером неспецифицированного поведения. К неопределенному поведению это все не имеет никакого отношения даже отдаленно.
ты знаешь с какими аргументами в итоге должна быть запущена функция ?
если нет, тогда в чем сакральная разница между твоим "неспецифицированным" и "неопределенным" поведением ?
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,320
13.04.2020, 18:03
Цитата Сообщение от IGPIGP Посмотреть сообщение
мы рассыпаемся в терминах UB и ... UB - unspecified это тоже U.
Рука-лицо... Рука-лицо...

Цитата Сообщение от IGPIGP Посмотреть сообщение
Потому, что оказывается выражения возвращающие ссылку - инвалиды в смысле поддержки приоритета операций.
Осспади, чушь-то какая сплошным потоком... Именно "выражения возвращающие ссылку" явились причиной изменения правил упорядочения в современном С++ и именно они получили наиболее усиленные и затянутые упорядочения.

(После чего ожидаемо идет поток примеров, неопределенности в которых имеют вообще никакого отношения к "выражениям, возвращающим ссылку". Поскипан.)

---

Цитата Сообщение от hoggy Посмотреть сообщение
ты знаешь с какими аргументами в итоге должна быть запущена функция ?
если нет, тогда в чем сакральная разница между твоим "неспецифицированным" и "неопределенным" поведением ?
С одной стороны, я у же привык к тому, что приходится разжевывать такие элементарные вещи, ибо это форум для начинающих. Смотрите как просто: неспецифицированное поведение, в отличие он неопределенного, ограничено конечным набором возможных вариантов. И меня в моем коде может устраивать любой из этих вариантов! Все

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int add(int a, int b) { return a + b; }
 
int main()
{
   int a = 1;
   std::cout << add(a++, a++) << std::endl;
}
Благодаря тому, что поведение в данном случае является неспецифицированным, а не неопределенным, результатом вызова функции add всегда будет значение 3. И это - несмотря на то, что я не знаю, в каком именно порядке получит функция свои аргументы. Магия...(пфффффф....)

Это во-первых. А во-вторых, хоть, как я сказал выше, я уже и привык к тому, что приходится разжевывать такие элементарные вещи, я все таки уверен, что эти элементарные вещи я уже подробно разжевывал. У меня складывается впечатление, что, законспектировав мои предыдущие объяснения, вы забросили конспект в какой-то дальний угол и не занимаетесь постоянной проработкой и повторением преподанного мною материала. Этого здесь не допускается. Все понимают, что С и С++ - языки сложные и не каждому дано в них разобраться, но это не повод мешать другим заниматься образованием. (Это касается всей нашей уже четко обрисовавшейся "бараньей кучки" троллей, которые флудят форум своими сумасшедшими теориями о "моем" (tm) языке С++.)
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.04.2020, 19:23
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Именно "выражения возвращающие ссылку"
в контексте, в котором я говорил вы упорно не понимаете.
А вот тут и вам понятно, что хоть слева направо хоть наоборот, результат будет определён.
C++
1
std::cout << add(a++, a++) << std::endl;
А я говорил о
C++
1
std::cout << add(a++, 2*a) << std::endl;
и это действительно другой случай. Но вы не понимаете. Это закономерно. Но это же вы писали:
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В случае add(a++, 2*a)
?? Как же, по дороге к истине (многострадальной) это изменилось?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.04.2020, 19:34
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
С одной стороны, я у же привык к тому, что приходится разжевывать такие элементарные вещи, ибо это форум для начинающих.
твои душевные страдания мне не интересны.
только технические детали.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Смотрите как просто: неспецифицированное поведение, в отличие он неопределенного, ограничено конечным набором возможных вариантов. И меня в моем коде может устраивать любой из этих вариантов! Все
1.
формально US не обязанно иметь ограниченное количество возможных вариантов.
их может быть бесконечное множество.

главные же отличительный признак:
каким бы не оказался по итогу вариант,
он не оказывает влияния на логику программы.

если оказывает: это уже не US, а UB

2.
ты очень интересно выразился: "меня в моем коде может устраивать любой из этих вариантов!"

ты это так пишешь, будто бы US это, или UB, зависит от твоего личного мнения/настроения,
а не от каких то объективных факторов.

3.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
add(a++, a++)
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
int add(int a, int b) { return a + b; }
в этом примере логика работы функции не зависит от порядка вычисления аргументов.

заметь: в фокусе внимания логика работы функции (реализация, а не прототип)

в оринале же, как я понял, речь шла только о прототипе:
add(a++, 2*a);

не имея на руках исходиков реализации, у тебя нет никаких оснований считать,
что US аргументов не окажет влияния на бизнес-логику функции.

в общем случае логика работы функций зависит от переданных в них аргументов.
а значит в общем случае здесь именно UB.

потому что в общем случае поведение функции зависит от левой пятки компилятора.
корректность работы такой "общей" функции не гарантируется.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У меня складывается впечатление, что, законспектировав мои предыдущие объяснения, вы забросили конспект
у меня сложилось впечатление, что у тебя с башкой не всё в порядке.

у тебя что-то вроде мании величия.
ты почему то думаешь, что ты настолько важен,
что кто-то будет тебя запоминать/конспектировать.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,320
13.04.2020, 20:04
Цитата Сообщение от IGPIGP Посмотреть сообщение
и это действительно другой случай. Но вы не понимаете. Это закономерно. Но это же вы писали
А вот и началось наглое вранье! В сообщении #17 я подробно и детально дал под запись правильную трактовку поведения в этом выражении.

Как все прекрасно видят, никто здесь никогда не говорил, что add(a++, 2*a) однозначно определен. Здесь идет речь только о том, что выражение add(a++, 2*a) не порождает неопределенного поведения. Понятия "результат не определен однозначно" и "неопределенное поведение" - совершенно разные, ничего общего друг с другом не имеющие понятия.Вот эту несложную истину мы снова, снова и снова пытаемся вбить в некоторые тугие бошки.

Но, как я уже сказал выше, это представитель, очевидно - просто тролль.

---

Цитата Сообщение от hoggy Посмотреть сообщение
формально US не обязанно иметь ограниченное количество возможных вариантов.
их может быть бесконечное множество.
Это у вас от невладения терминологией. Вы тупо не понимаете разницы между терминами "ограниченный" и "конечный".

Еще раз, для обязательного конспектирования и запоминания: неспецифицированное поведение допускает ограниченное количество возможных вариантов. Таких вариантов может быть сколько угодного много, но в подавляющем большинстве случаев все они принадлежат ограниченному стандартом языка диапазону проявлений.

Именно как мы это наглядно видим в данном примере.

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

Цитата Сообщение от hoggy Посмотреть сообщение
главные же отличительный признак:
каким бы не оказался по итогу вариант,
он не оказывает влияния на логику программы.
если оказывает: это уже не US, а UB
Это - полный бред.

Цитата Сообщение от hoggy Посмотреть сообщение
ты очень интересно выразился: "меня в моем коде может устраивать любой из этих вариантов!"

ты это так пишешь, будто бы US это, или UB, зависит от твоего личного мнения/настроения,
а не от каких то объективных факторов.
Это, народ, нам рассказывает оратор, который пытается "бороться" со стандартом языка потоком отсебятины, домыслов и доморощенных феерических "теорий"

Цитата Сообщение от hoggy Посмотреть сообщение
не имея на руках исходиков реализации, у тебя нет никаких оснований считать,
что US аргументов не окажет влияния на бизнес-логику функции.
Я при чем здесь "оригинал" и где тут связь вообще? Я привел лишь пример, иллюстрирующий отличие неспецифицированого поведения от неопределенного. Все это прекрасно поняли.

Цитата Сообщение от hoggy Посмотреть сообщение
а значит в общем случае здесь именно UB.
Опять пошла отсебятина.

Цитата Сообщение от hoggy Посмотреть сообщение
у меня сложилось впечатление, что у тебя с башкой не всё в порядке.
Чья бы корова мычала...

Цитата Сообщение от hoggy Посмотреть сообщение
ты почему то думаешь, что ты настолько важен,
что кто-то будет тебя запоминать/конспектировать.
Не "кто-то", а именно и только те, кому я явно дал на это соответствующее указание.

Вас ведь сюда никто силой не пригонял, правда? Вы пришли сюда учиться. Поэтому либо слушайте и выполняйте, что вам говорят, либо вас постоянно будут "ставить на место" за то, что ваши потоки ваших сумасшедших псевдотеорий мешают учится другим.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.04.2020, 20:18
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В сообщении #17 я подробно и детально дал под запись правильную трактовку поведения в этом выражении.
TheCalligrapher, наконец-то. Аж от сердца отлегло. А я всё жду когда же разрешено будет записывать.
Вы бы перечитали что-ли. Там
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
под запись
вы сказали что оно unspecified, а теперь объясняете, но на другом тексте. Ранее вы обвинили меня во "втихаря" выполненной подстановке текста. И, надо сказать, удивили. Это революционно новое построение для хода мысли. Я ещё не свыкся с тем, что на форуме по программированию, это возможный патерн поведения. Ну что же. Как вы сами выразились давеча, - меня тут нет. Не нужно отвечать.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.04.2020, 20:55
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это - полный бред.
у тебя в голове если только.

нормальные люди понимают:
поведение функции не должно зависеть от левой пятки компилятора.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не "кто-то", а именно и только те, кому я явно дал на это соответствующее указание.
вот и я о том же: у тебя с башкой не всё в порядке.
ты почему-то думаешь, что можешь на этом форуме кому-то давать какие-то указания.

наивный мальчик.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
либо вас постоянно будут "ставить на место" за то, что ваши потоки ваших сумасшедших псевдотеорий мешают учится другим.
ну-ну. ты ещё ножкой топни.

ну или модераторам пожалуйста.
так и скажи: мешают тебе, окаянные, учиццо.
конспекты писать не хотят.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
13.04.2020, 20:57
Цитата Сообщение от hoggy Посмотреть сообщение
поведение функции не должно зависеть от левой пятки компилятора.
А спецификация должна зависеть от левого глаза hoggy?
0
13.04.2020, 21:16

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Ну что же. Как вы сами выразились давеча, - меня тут нет. Не нужно отвечать.
У вас слишком нарциссическое и эгоцентричное восприятие окружающей реальности. Постарайтесь понять ту простую вещь, что когда в публичном техническом форуме кто-то пишет ответ на ваше сообщение, этот ответ в подавляющем большинстве случаев адресован совсем не вам лично. Точнее, он адресован далеко (!) не только вам, а в первую очередь (!) остальным читателям форума, которых чтение ваших теорий может ввести в заблуждение. Отвечать не просто нужно, а очень нужно. На вбросы чуши надо давать четкие опровергающие ответы. Иначе технический форум может превратиться в помойку.

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.04.2020, 21:21
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У вас слишком нарциссическое и эгоцентричное восприятие окружающей реальности.
К пророческим чертам прибавились качества психиатра. Это укладывается в общую картину.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Постарайтесь понять ту простую вещь, что когда в публичном техническом форуме кто-то пишет ответ на ваше сообщение, этот ответ в подавляющем большинстве случаев адресован совсем не вам лично. Точнее, он адресован далеко (!) не только вам, а в первую очередь (!) остальным читателям форума, которых чтение ваших теорий может ввести в заблуждение. Поэтому отвечать не просто нужно, а очень нужно.
А вот тут, не ясно чего больше, малодушия или желания уйти от ответственности.
TheCalligrapher, когда кто-то цитирует и комментирует, то он обращается, именно к тому с кем ведёт (хочет он того или нет и отдаёт ли он себе отчёт о том, что такое форум и публичный диалог или нет).
Я надеюсь мы отдохнём друг от друга, по крайней мере в этом топике?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2020, 21:21

Чему равно значение логического выражения
Чему равно значение логического выражения x--&lt;3, если до выполнения операции х был равен 3?

Чему будет равно значение логического выражения
чему будет равно значение логического выражения (1&gt;2)||(3&gt;5) и что это значит?

Чему равно значение выражения , chr (25)> = chr (16)
Уважаемые форумчане , задача на паскале . Понимаю что для кого то это семечки , но я новичок ) заранее большое спасибо . Всем удачи и...

Чему равно значение (do '0) ?
Помогите выполнить задание на языке ЛИСП! Даны определения функций (defun twice (f) (function (lambda (x) (funcall f...

Чему равно значение переменной?
Рассчитайте, чему равно значение переменной К после работы фрагмента программы:k:=100;a:=10;b:=-5; if (k mod a=0) or ((a&lt;b) and (a div...


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

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru