Атрибут nodiscard в C++ используется для указания того, что возвращаемое значение функции не должно игнорироваться при вызове функции. 2 Проще говоря, если функция возвращает значение и помечена как nodiscard, то возвращаемое значение должно быть использовано вызывающим объектом, а не отброшено. 1
Пример использования: 1
// Для функций[[nodiscard]] void f();
Пример использования для объявления структуры или класса: 1
struct [[nodiscard]] my_struct{};
В случае функции nodiscard применяется только к той конкретной функции, которая объявлена с этим атрибутом, а в случае объявления класса или структуры — к каждой отдельной функции, которая возвращает объект, помеченный nodiscard. 1
Если вызывающий объект удаляет возвращаемое значение, компилятор создаёт предупреждение C4834. 4 Чтобы обойти это предупреждение, можно назначить значение std::ignore или привести его к void. 4 Назначение std::ignore предпочтительнее приведения void в C++11 и более поздних версиях, так как оно делает намерение более понятным. 4