Почему «пустой» метод должен использоваться для проверки пустоты вместо «размера» clang-tidy? - PullRequest
0 голосов
/ 16 апреля 2020

При выполнении проверки:

std::string st = "hello";
bool is_empty = st.size() > 0;

Я получаю предупреждение Clang-Tidy, упомянутое выше.

Почему лучше вместо этого использовать метод empty()?

1 Ответ

10 голосов
/ 16 апреля 2020

Согласно документации Clang

readability-container-size-empty

Проверяет, является ли вызов size () метод может быть заменен вызовом empty ().

Пустота контейнера должна проверяться с помощью метода empty () вместо метода size (). Не гарантируется, что size () является функцией постоянного времени, и, как правило, она более эффективна и также демонстрирует более четкое намерение использовать empty (). Кроме того, некоторые контейнеры могут реализовывать метод empty (), но не реализовывать метод size (). Использование empty () по возможности упрощает переключение на другой контейнер в будущем.

std::forward_list - это пример для контейнера, у которого нет метода size(), как показано здесь: do-all-container-have-a-size-function

После C ++ 11 временная сложность size() составляет константа в соответствии со стандартом .iso cpp

...