В документации std::forward_list
есть две функции-члена:
[[nodiscard]] bool empty() const noexcept;
size_type max_size() const noexcept;
Что меня удивляет, так это:
Почему у empty
есть [[nodiscard]]
, а у max_size
нет?
В документации std::forward_list
есть две функции-члена:
[[nodiscard]] bool empty() const noexcept;
size_type max_size() const noexcept;
Что меня удивляет, так это:
Почему у empty
есть [[nodiscard]]
, а у max_size
нет?
Причина состоит из двух частей:
Невозможно спутать запрос «какой максимальный размер?» выражается как .maximum_size()
с чем-либо еще, в то время как вы можете перепутать запрос "это пусто?" выражается как .empty()
с командой «Очистить!», которая получила имя .clear()
.
[[nodiscard]]
является новым и не везде применялся в стандартной библиотеке (на сегодняшний день). С++ 20 добавляет некоторые места, но все еще далеко не исчерпывающий.
max_size()
как изменение размера до максимального поддерживаемого размера. Я думаю о том, как новички иногда пишут char my_input[99999];
или что-то в этом роде, чтобы быть достаточно большим, на всякий случай. Кто-то может подумать, что выделение очень больших буферов для своего приложения — это хорошая идея, и рассматривать max_size
как функцию, предназначенную для их целей. Редактировать: Конечно, это кажется более редкой ошибкой, чем ошибка empty()
.
- person François Andrieux; 06.04.2020