Почему std::forward_list::empty имеет [[nodiscard]], а std::forward_list::max_size — нет?

В документации std::forward_list есть две функции-члена:

  1. [[nodiscard]] bool empty() const noexcept;
  2. size_type max_size() const noexcept;

Что меня удивляет, так это:

Почему у empty есть [[nodiscard]], а у max_size нет?


person xmllmx    schedule 06.04.2020    source источник
comment
Я предполагаю, что комитет еще не дошел до этого. Похоже, все методы empty получили это сразу.   -  person cigien    schedule 06.04.2020


Ответы (1)


Причина состоит из двух частей:

  1. Невозможно спутать запрос «какой максимальный размер?» выражается как .maximum_size() с чем-либо еще, в то время как вы можете перепутать запрос "это пусто?" выражается как .empty() с командой «Очистить!», которая получила имя .clear().

  2. [[nodiscard]] является новым и не везде применялся в стандартной библиотеке (на сегодняшний день). С++ 20 добавляет некоторые места, но все еще далеко не исчерпывающий.

person Deduplicator    schedule 06.04.2020
comment
Что ж, я могу представить, что кто-то может прочитать max_size() как изменение размера до максимального поддерживаемого размера. Я думаю о том, как новички иногда пишут char my_input[99999]; или что-то в этом роде, чтобы быть достаточно большим, на всякий случай. Кто-то может подумать, что выделение очень больших буферов для своего приложения — это хорошая идея, и рассматривать max_size как функцию, предназначенную для их целей. Редактировать: Конечно, это кажется более редкой ошибкой, чем ошибка empty(). - person François Andrieux; 06.04.2020
comment
@FrançoisAndrieux Хорошая демонстрация того, что абсолютные новички могут быть поистине невероятными. - person Deduplicator; 06.04.2020