Daily bit(e) C++. Атрибут [[nodiscard]]
Добавлено 22 сентября 2026 в 05:31
Daily bit(e) C++ 113, атрибут [[nodiscard]] из C++17.

В стандарте C++17 появился атрибут [[nodiscard]], который вызывает предупреждение компилятора, если результат вызова функции игнорируется.
Как минимум, этот атрибут следует использовать для функций, выполнение которых требует значительных ресурсов, а также для функций-запросов, которые можно спутать с одноименными функциями, выполняющими определенное действие.
struct MyStruct
{
[[nodiscard]] ExpensiveResult expensive_call();
};
struct CustomVector
{
// C++20 - необязательная строка, которая будет включена в сообщение об ошибке
[[nodiscard("Did you mean to call clear()?")]]
bool empty() const;
};
MyStruct x;
x.expensive_call();
// warning: ignoring return value of
// 'ExpensiveResult MyStruct::expensive_call()',
// declared with attribute 'nodiscard'
CustomVector y;
y.empty();
// warning: ignoring return value of
// 'bool CustomVector::empty() const',
// declared with attribute 'nodiscard': 'Did you mean to call clear()?'
