Найти тему

Присваивание и сравнение в С++

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

Если говорить о присваивании и сравнении, то об одной из самых распространённых и труднонаходимых ошибок я рассказал здесь. Эта ошибка всегда приводит к неправильным результатам.

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

Как известно, результат логического выражения можно записать сразу в переменную логического типа. Это используется довольно часто, и в С++ выглядит примерно так:

bool res = true;
res = (10 == 9);

Где здесь ошибка? С точки зрения синтаксиса ошибок нет. Этот код отработает именно так, как мы думали. То есть в переменной res будет значение false. И вообще здесь всё правильно.

Однако есть “неправильность” с точки зрения ваших трудозатрат. Скобки здесь лишние. Вам не надо тратить время на то, чтобы напечатать эти две скобки. Вы можете написать вот так:

res = 10 == 9;

Да, в сложных случаях лучше перестраховаться и использовать скобки, чтобы уж наверняка. Но в простых случаях, когда выражение состоит из двух-трёх литералов, нет смысла тратить время на печать скобок.

Хотя в этом примере может показаться, что сначала будет выполнено присваивание, а потом сравнение (ведь всё выполняется слева направо), на самом деле это не так, потому что оператор присваивания имеет низший приоритет почти во всех языках (ну в С++ точно). Поэтому сначала будет выполнено сравнение, а потом уже присваивание. То есть в переменную res будет записан результат операции сравнения независимо от того, будет это выражение заключено в скобки или нет.

Так что, несмотря на то, что на чтение этой статьи вы потратили какое-то время, новые знания помогут вам сэкономить это время в будущем ))) Подписывайтесь на канал, чтобы ничего не пропустить…