5.x – Резюме к главе 5 и небольшой тест

Добавлено 8 мая 2021 в 19:25

Краткое резюме

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

Все арифметические операторы работают так же, как и в обычной математике. Оператор остатка от деления (%) возвращает остаток от целочисленного деления. При использовании стандарта языка до C++11 остерегайтесь целочисленного деления и остатка от деления при работе с отрицательными числами.

Операторы инкремента и декремента можно использовать для простого увеличения или уменьшения чисел на единицу. По возможности избегайте постфиксных версий этих операторов.

Остерегайтесь побочных эффектов, особенно когда речь идет о порядке вычисления параметров функции. Не используйте переменную, имеющую побочные эффекты, в какой-либо инструкции более одного раза.

Оператор запятой может сжать несколько инструкций в одну. Но обычно лучше писать инструкции отдельно.

Условный оператор – это хорошая короткая версия инструкции if, но его не следует использовать в качестве альтернативы инструкции if. Используйте условный оператор только в том случае, если вы используете его результат.

Операторы отношения могут использоваться для сравнения чисел с плавающей запятой. Остерегайтесь использования операторов равенства и неравенства для чисел с плавающей запятой.

Логические операторы позволяют нам формировать сложные условные операторы.

Небольшой тест

Вопрос 1

Вычислите следующее выражение:

a) (5 > 3 && 4 < 8)

(5 > 3 && 4 < 8) становится (true && true), что равно true.

b) (4 > 6 && true)

(4 > 6 && true) становится (false && true), что равно false.

c) (3 >= 3 || false)

(3 >= 3 || false) становится (true || false), что равно true.

d) (true || false) ? 4 : 5

(true || false) ? 4 : 5 становится (true ? 4 : 5), что равно 4.


Вопрос 2

Оцените следующее выражение:

a) 7 / 4

7/4 = 1 и остаток 3, поэтому это выражение равно 1.

b) 14 % 5

14/5 = 2 и остаток 4, поэтому 14 % 5 равно 4.


Вопрос 3

Почему никогда не следует делать следующее:

a) int y{ foo(++x, x) };

Поскольку operator++ применяет к x побочный эффект, мы не должны снова использовать x в том же выражении. В этом случае параметры функции foo() могут быть вычислены в любом порядке, поэтому неизвестно, будет ли сначала вычисляться x или ++x. Поскольку ++x изменяет значение x, неясно, какие значения будут переданы в функцию.

b) double x{ 0.1 + 0.1 + 0.1 }; return (x == 0.3);

Ошибки в вычислениях с плавающей запятой приведут к тому, что возвращаемое значение будет вычислено как false, даже если похоже, что оно должно быть true.

c) int x{ 3 / 0 };

Деление на 0 вызывает неопределенное поведение, которое, вероятно, будет выражено в сбое работы программы.

Теги

C++ / CppLearnCppДля начинающихОбучениеОператор (программирование)Программирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.