Наблюдая за примерами, которые вы предоставили -
Следующее:
operator++
(постфикс / префикс)
string.empty()
против string == ""
Не похоже на хорошие примеры, поскольку они сравнивают операции, отличающиеся в functionality
. Следовательно, лучше , а не игнорировать их семантические различия.
В отличие от следующих примеров:
vector.empty()
против vector.size() == 0
enum
erate {on
, off
} против boolean
on=true
; off=false
Совершенно разумно.
vector.empty()
предпочтительнее, если контекст его использования предназначен только для определения, является ли вектор пустым. На риск звучит снисходительно (что я делаю не намерен быть): это сводится к здравому смыслу. Зачем спрашивать размер вектора, если вы хотите знать только, если он пуст? Это все равно, что спросить кого-то, сколько денег у него в кошельке, когда вы просто хотите узнать, достаточно ли у него денег на колу.
Что касается enum
erate {on
, off
} против boolean
on=true
; off=false
, спросите себя: насколько вероятно, что вы сможете добавить еще одно значение к перечислению в будущем? Кажется разумным, что кто-то может захотеть enum
erate {on
, off
, indeterminate
} `(или некоторый вариант), поэтому ответ может быть да. В противном случае достаточно простого логического значения.
Это подводит меня к сути вашего вопроса: что, по-видимому, есть, если существует какой-то детерминистический / алгоритмический подход к тому или иному решению таких вопросов или их актуальности? Мой ответ таков: до того дня, когда машины Тьюринга смогут пройти тест Тьюринга , я бы сказал, что нет. Это причина, по которой люди должны разрабатывать программное обеспечение.