62
задан 30 September 2017 в 01:23

3 ответа

Это зависит от того, как шаблон используется. Для int, Вы в порядке.

, Но , если t плавающая точка IEEE754 double, тип с набором значений к NaN, ни t < 1, ни t >= 1 true и таким образом, программное управление достигает конца if блок! Это заставляет функцию возвращаться без явного значения; поведение которого не определено.

(В более общем случае, где T перегрузки < и >= операторы таким способом как относительно не покрывают все возможности, программное управление достигнет конца if блок без явного return.)

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

231
ответ дан 31 October 2019 в 13:05

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

if (t < 1) {
    return 0;
} else if (t >= 1){
    return 1;
}

Вышеупомянутое "корректно" для любого типа данных t, чем имеет нормальное поведение для < и >=. Но это:

if (t < 1) {
    return 0;
}
return 1;

легче видеть контролем, что каждый случай покрыт и избегает второго ненужного сравнения в целом (который некоторые компиляторы, возможно, не оптимизировали). Код не только прочитан компиляторами, но людьми, включая Вас 10 лет с этого времени. Дайте людям передохнуть и запишите проще для их понимания также.

13
ответ дан 31 October 2019 в 13:05

Как отмечено, некоторые специальные числа могут быть и < и >=, таким образом, Ваш рецензент просто прав.

вопрос: что заставило Вас хотеть кодировать его как это во-первых? Почему Вы даже считаете жизнь создания настолько трудной для себя и других (люди, которые должны поддержать Ваш код)? Просто то, что Вы достаточно умны, чтобы вывести, что < и >= должен покрыть все случаи, не означает, что необходимо сделать код более сложным, чем необходимый. То, что идет для физики, идет для кода также: сделайте вещи максимально простыми, но не более простые (я полагаю, что Einstein сказал это).

Думают об этом. Чего Вы пытаетесь достигнуть? Должно быть что-то вроде этого: 'Возвратитесь 0, если вход - меньше чем 1, возвратитесь 1 иначе'. То, что Вы сделали, добавляет аналитика путем высказывания..., о, но это означает, что я возвращаюсь 1, если t является большим или равным 1. Этот вид бесполезных 'x подразумевает, что y' требует дополнительный, думают работа от имени специалиста по обслуживанию. Если бы Вы думаете, что это - хорошая вещь, я советовал бы, чтобы сделать несколько лет обслуживания кода сами.

, Если бы это был мой обзор, я сделал бы другое замечание. Если Вы используете, 'если' оператор, то можно в основном сделать что-либо, которое Вы хотите во всех ответвлениях. Но в этом случае, Вы 'ничего' не делаете. Все, что Вы хотите сделать, возвратиться 0 или 1 в зависимости от ли t< 1 или нет. В тех случаях я думаю'?': оператор очень лучше и более читаем, чем if оператор. Таким образом:

return t<1 ? 0 : 1;

я знаю ?:, оператор запрещается в некоторых компаниях, и я нахожу что ужасная вещь сделать. ?: обычно соответствия намного лучше со спецификациями, и это может сделать код настолько легче читать (если используется с осторожностью)...

8
ответ дан 31 October 2019 в 13:05

Другие вопросы по тегам:

Похожие вопросы: