наверное, автор этого кода гордится тем что он знает как работают логические операторы в С/С++, и что ему удалось записать все это в одну строчку...
а зря написал бы лучше нормально.
даже для хождения в отладчике удобнее было бы, не говоря уже о читабельности. хотя, если работаешь с таким кодом каждый день, то думаю ничего страшного в этом нет, вполне нормально.
Я тут видел недавно код... создается объект, в конструктор передаются какие-то параметры, а основная логика работы (включая активную работу с БД и сетью), выполняется в... деструкторе Может, это и круто, но вот понять этот код без детального изучения класса этого объекта нельзя. При первом просмотре можно даже не обратить внимания на одинокую локальную переменную, которая объявляется и после этого вообще не используется
Re[2]: Скажите что - нибудь про это
От:
Аноним
Дата:
07.07.08 07:48
Оценка:
XC>Может, это и круто, но вот понять этот код без детального изучения класса этого объекта нельзя. При первом просмотре можно даже не обратить внимания на одинокую локальную переменную, которая объявляется и после этого вообще не используется
Вообщето аккуратнее надо с одинокоми локальными переменными. Очень часто это автолоки, очень удобная вещь скажу я вам
Про это и хотел спросить:
Будет ли в первом варианте кода проверяться второе условие, если первое условие выполняется?
Если да, то ведь это скорее всего UB
Здравствуйте, dandy, Вы писали:
D>Про это и хотел спросить: D>Будет ли в первом варианте кода проверяться второе условие, если первое условие выполняется?
Все записано вполне нормально и красиво.
Если непонятно что, то: it сравнивается с end() — получаем результат, который равен 1 (true), если они равны или 0 если не равны. Далее над результатом и second.is_free() выполняется логическое ИЛИ (то есть return возвращает 1 (true) если или прошлый результат или результат second.is_free() равен 1).
Как еще подробнее написать не знаю
Доброго времени суток! Мир Вам! С уважением Clevelus.
Если мой ответ понравился — оцените, ни на что не влияет, но будет приятно.
Здравствуйте, Clevelus, Вы писали:
C>Все записано вполне нормально и красиво. C>Если непонятно что, то: it сравнивается с end() — получаем результат, который равен 1 (true), если они равны или 0 если не равны.
Далее над результатом и second.is_free() выполняется логическое ИЛИ (то есть return возвращает 1 (true) если или прошлый результат или результат second.is_free() равен 1).
Если равны, то что получится в результате вызова end()->second.is_free?
C>Как еще подробнее написать не знаю
Здравствуйте, dandy, Вы писали:
D>Здравствуйте, Clevelus, Вы писали:
C>>Все записано вполне нормально и красиво. C>>Если непонятно что, то: it сравнивается с end() — получаем результат, который равен 1 (true), если они равны или 0 если не равны. D>Далее над результатом и second.is_free() выполняется логическое ИЛИ (то есть return возвращает 1 (true) если или прошлый результат или результат second.is_free() равен 1).
5.15/1
The || operator groups left-to-right. The operands are both implicitly converted to bool (clause 4). It
returns true if either of its operands is true, and false otherwise. Unlike |, || guarantees left-toright
evaluation; moreover, the second operand is not evaluated if the first operand evaluates to true.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, рыбак, Вы писали:
К>Самый любимый (и иногда практикуемый) 0xbaadcode (в смысле тяжести сопровождения для невинных умов) К>
К>return CLock(m_CritSec), m_Something;
К>
а оно вообще зачем? не вижу спецэфектов. по крайней мере на win32.