Начинающий программист может споткнуться на ровном месте. Некоторые ошибки быстро осознаются и исправляются, а другие - те, которые не особо влияют на результат, могут остаться на всю жизнь.
Если говорить о присваивании и сравнении, то об одной из самых распространённых и труднонаходимых ошибок я рассказал здесь. Эта ошибка всегда приводит к неправильным результатам.
Но есть и ошибки, которые на результат не влияют. И даже не являются ошибками. Но при этом заставляют вас вводить лишние символы при разработке программ, а, значит, отнимают лишнее время. Сегодня приведу пример такой ошибки, которая также связана с присваиванием и сравнением.
Как известно, результат логического выражения можно записать сразу в переменную логического типа. Это используется довольно часто, и в С++ выглядит примерно так:
bool res = true;
res = (10 == 9);
Где здесь ошибка? С точки зрения синтаксиса ошибок нет. Этот код отработает именно так, как мы думали. То есть в переменной res будет значение false. И вообще здесь всё правильно.
Однако есть “неправильность” с точки зрения ваших трудозатрат. Скобки здесь лишние. Вам не надо тратить время на то, чтобы напечатать эти две скобки. Вы можете написать вот так:
res = 10 == 9;
Да, в сложных случаях лучше перестраховаться и использовать скобки, чтобы уж наверняка. Но в простых случаях, когда выражение состоит из двух-трёх литералов, нет смысла тратить время на печать скобок.
Хотя в этом примере может показаться, что сначала будет выполнено присваивание, а потом сравнение (ведь всё выполняется слева направо), на самом деле это не так, потому что оператор присваивания имеет низший приоритет почти во всех языках (ну в С++ точно). Поэтому сначала будет выполнено сравнение, а потом уже присваивание. То есть в переменную res будет записан результат операции сравнения независимо от того, будет это выражение заключено в скобки или нет.
Так что, несмотря на то, что на чтение этой статьи вы потратили какое-то время, новые знания помогут вам сэкономить это время в будущем ))) Подписывайтесь на канал, чтобы ничего не пропустить…