Daily bit(e) C++. Атрибут [[nodiscard]]

Добавлено 22 сентября 2026 в 05:31

Daily bit(e) C++ 113, атрибут [[nodiscard]] из C++17.

Daily bit(e) C++

В стандарте 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()?'

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование