Как известно, оператор побитого сдвига вычисляется слева на право — но при вводе 1 2 вывод 2 1 (компилятор от майкрософта), с чем это связано ? порождает ли данный код undefined behaviour или здесь всего лишь порядок вывода неопределён ? Если убрать код чтения — всё довольно предсказуемо
int readValue(int v) < return v; >int main()
вывод — 1 2 в чем дело ?
Отслеживать
121k 24 24 золотых знака 121 121 серебряный знак 293 293 бронзовых знака
задан 11 ноя 2016 в 21:34
3,681 1 1 золотой знак 16 16 серебряных знаков 30 30 бронзовых знаков
а разве компилятор не может вставить вычисление этих функций в удобном для него порядке?
11 ноя 2016 в 21:43
11 ноя 2016 в 21:48
а это сложная тема. Но в целом, решается создателями компилятора. К примеру, можно сделать меньше размер кода.
11 ноя 2016 в 21:57
Учтите, что данные Вам ответы релевантны для C++ версии до 17 года, с 17 года ответ будет другой.
12 ноя 2016 в 10:47
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Порядок действий в программе для корректного оформления начисления по договору ГПХ и удержания НДФЛ
Согласно стандарту C++ порядок вычисления аргументов функции не специфицирован, что означает, что компиляторы могут выбрать любой порядок вычисления аргументов Из стандарта C++ (1.9 Program execution)
3 Certain other aspects and operations of the abstract machine are described in this International Standard as unspecified (for example, order of evaluation of arguments to a function).
cout
operator <<( operator <<( std::cout.operator <<( readValue() ), ‘ ‘ ) .operator <<( readValue() ), ‘n’ );
MS VC++ вычисляет аргументы справа налево. Другой компилятор может вычислять аргументы в другом порядке, например, слева направо.
EDIT: Я приведу дополнительный наглядный пример на основе перегрузки оператора operator .
Рассмотрите следующую демонстрационную программу
#include struct A < int x; A( int x = 0 ) : x( x ) <>>; bool operator ( const A return 0 < a.x 0 < x; >A f1() < std::cout int f2() < std::cout int main(void)
Ее вывод на консоль следующий
f2() f1() 0
Если бы это был встроенный оператор operator для фундаментальных типов, то выражение f2() не вычислялось бы в случае, если выражение f1() имело значение false .
Однако так как здесь имеет место вызов перегруженной пользователем функции, то порядок выполняемых действий компилятором следующий.
Компилятор сначала пытается определить, какая именно из перегруженных функций используется. Если он такой не находит, или имеет место неоднозначность, то компилятор выдает сообщение об ошибке. Если он находит такую функцию, то он заменяет данную запись на вызов соответствующей функции пользователя. И на основе этого вызова функции строит результирующий объектный код. Так как порядок вычисления аргументов функции не специфицирован, то, как показывает вывод, компилятор сначала вычислил правый аргумент, а затем левый.
Сравните вывод данной программы с выводом программы, в которой оператор operator имеет дело с фундаментальными типами, то есть когда используется встроенный оператор operator .
Какой порядок действий в программе для оформления работы в выходной или праздничный день?
#include int f1() < std::cout int f2() < std::cout int main(void)
Вывод программы на консоль
f1() 0
Как видно, функция f2 никогда не будет вызвана, так как значение левого операнда равно false .
Это различие связано с тем, что в первом случае компилятор имеет дело с вызовом именно пользовательской функции с именем operator ,а во втором случае имеет дело со встроенным оператором operator .
Источник: ru.stackoverflow.com
Порядок действий в выражениях


В программе по математике в старших классах много времени отводится на изучение всевозможных преобразований выражений. Как правило, учащиеся испытывают определенные затруднения при выполнении этих заданий. Основы, азы, закладываются в начальной школе. Именно решение примеров на порядок действий является изначально основой формирования этих навыков.
Тема эта кажется не сложной… Ну, что трудного в том, что выполнять действия разных уровней надо в определенном порядке. Сначала считаем в скобках, потом выполняем по порядку умножение и деление, а затем — сложение и вычитание… Вот только «упрощение» при запоминании правил часто ведет к путанице в голове. И вот уже ребенок считает, что сначала надо выполнить сложение, а затем вычитание, где бы они не стояли… Взрослые, у которых навык уже полноценно сформирован, считают, что «пропажа» одного слова («по порядку») из предложения не играет значения… А дети, у которых этот навык только формируется, теряют его из понимания. Кстати, такая проблема не только в математике, но и в других предметах. Поэтому рекомендую четко проговаривать правила.
Итак, тренажеры для отработки порядка действий во 2 и 3 классах.

Порядок действий (для учащихся 2 класса)
Так выглядят слайды тренажера для учащихся 2 класса. Скачать его можно по ссылке:

В предлагаемых далее тренажерах ребенку придется писать на слайде. Сделать это можно, выбрав фломастер в левом нижнем углу слайда (см.рисунок)

Образцы оформления слайдов тренажера Букет.
Выбрав фломастер, ребенок вписывает в квадратах порядок действий, затем, кликнув в указанном на слайде месте, он получает возможность проверить как выполнено задание. Скачать тренажер можно по ссылке:

Тренажер для учеников 3-4 классов. Образцы слайдов.
Два следующих тренажера помогут детям в подготовке к итоговым контрольным работам в 4 классе, может быть предложен ученикам 3 — 4 классов. Задание достаточно сложное. Надо найти правильное перечисление действий по порядку и кликнуть по выбранному полю. Скачать тренажер вы можете по ссылке: Порядок действий Кот

Ракета. Порядок действий. Для учащихся 3 — 4 классов.
Тренажер «Ракета» аналогичен предыдущему. Скачать его можно по ссылке:
Успехов в изучении правил решения выражений в несколько действий!
Источник: bov44.ru
Порядок действий в программе

1. Выполни вычисления по следующей программе:
1) Из числа 8 вычесть 3. ————-
2) К полученной разности прибавить 4. —————-
2. Выполни вычисления по следующей программе:
1) К числу 3 прибавить число 4. ————-
2) Из числа 8 вычесть полученную сумму ——————
Итак. 8 — 3 + 4 = ———— Что ты замечаешь?
Сравним выражения, полученные в № 1 и № 2
8 — 3 + 4 и 8 — 3 + 4
Получилось, что оба выражения совершенно одинаковые, а имеют различные значения 9 и 1. Значит, порядок операций в них менять нельзя.
Чтобы избежать путаницы, применяют скобки. Теперь эти выражения будут отличаться:
(8 — 3) + 4 и 8 — (3 + 4)
Всегда сначала выполняют действия вскобках, а потом остальное по порядку.
3. В каком порядке надо выполнять действия в примерах:
2 1
а) 26 + (32 — 16)
б) (247 — 123) + (384 — 164)
в) 93 + (12 + 16) — 35
г) (72 + 13) — 47 -(94 — 76)
д) а + b — с + d
ж) (а + b) — (с + d)
з) а + (b — с) + d
з) а + (b — с + d)
4. Расставь скобки в выражениях по данной программе действий. Найди значения этих выражений.

5. Найди значения выражений. Чем они похожи и чем различаются?
1) (35 + 47) — (38 + 16)
2) 35 + (47 — 38) + 16
6. Определи порядок действий в выражениях:
а — (b + c) (а + b) — с a -(b — c)- d
7. Составь выражение к задаче и найди его значение:
«В первом букете 39 ромашек. Это на 12 ромашек больше, чем во втором букете, но на 4 ромашки меньше, чем в третьем. Сколько ромашек ь трех букетах?»

Что ещё можно спросить? Составь выражения.
8. Реши уравнения:
х + 579 = 621 951 — х = 398 х — 263 = 57
9*. Игра: «Преобразование слов»
Когда-то в давние времена люди одного царства умели писать только кружки и треугольники. С помощью длинных слов из кружков и треугольников они общались между собой. Разгневался их царь и издал приказ — сократить слова по правилам:

При этом первое правило должно применяться подряд столько раз, сколько возможно, а затем таким же образом должны применяться второе и третье правила.
Рассмотри, правильно ли преобразованы слова:

Пользуясь данным алгоритмом, преобразуй слова:

Придумай свои слова из треугольников и кружков и преобразуй их.
Петерсон Людмила Георгиевна. Математика. 2 класс. Часть 2. — М.: Издательство «Ювента», 2005, — 64 с.: ил.
Математика за 2 класс бесплатно скачать, планы конспектов уроков, готовимся к школе онлайн
Содержание урока конспект урока опорный каркас презентация урока акселеративные методы интерактивные технологии Практика задачи и упражнения самопроверка практикумы, тренинги, кейсы, квесты домашние задания дискуссионные вопросы риторические вопросы от учеников Иллюстрации аудио-, видеоклипы и мультимедиа фотографии, картинки графики, таблицы, схемы юмор, анекдоты, приколы, комиксы притчи, поговорки, кроссворды, цитаты Дополнения рефераты статьи фишки для любознательных шпаргалки учебники основные и дополнительные словарь терминов прочие Совершенствование учебников и уроков исправление ошибок в учебнике обновление фрагмента в учебнике элементы новаторства на уроке замена устаревших знаний новыми Только для учителей идеальные уроки календарный план на год методические рекомендации программы обсуждения Интегрированные уроки
Если у вас есть исправления или предложения к данному уроку, напишите нам.
Если вы хотите увидеть другие корректировки и пожелания к урокам, смотрите здесь — Образовательный форум.
Источник: edufuture.biz