CPP_GEEK Telegram 328
Зачем [[nodiscard]] нужен не только для возврата значения

Если ты думаешь, что [[nodiscard]] — это просто защита от игнора Result, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.

Пример:


struct [[nodiscard]] Error {
std::string message;
};

Error do_something() {
return {"Что-то пошло не так"};
}

void foo() {
do_something(); // warning: ignoring return value of nodiscard type
}


А теперь магия с методами:


struct Connection {
[[nodiscard]] bool is_valid() const {
return valid_;
}

private:
bool valid_ = false;
};

void check_connection(const Connection& conn) {
conn.is_valid(); // warning: result of 'is_valid' is unused
}


📌 Даже если функция возвращает bool — компилятор предупредит, если ты его проигнорируешь. Это круто, когда метод что-то проверяет, ищет или сигналит об ошибке — и ты точно не хочешь забыть проверить результат.

⚠️ Но аккуратно: [[nodiscard]] не бросает исключения и не делает функцию безопасной. Это подсказка компилятору и твой напарник по коду.

Если хочешь писать более надёжный и самодокументируемый код — юзай [[nodiscard]] не только по дефолту, а осознанно.

➡️ @cpp_geek
👍9🔥1



tgoop.com/cpp_geek/328
Create:
Last Update:

Зачем [[nodiscard]] нужен не только для возврата значения

Если ты думаешь, что [[nodiscard]] — это просто защита от игнора Result, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.

Пример:


struct [[nodiscard]] Error {
std::string message;
};

Error do_something() {
return {"Что-то пошло не так"};
}

void foo() {
do_something(); // warning: ignoring return value of nodiscard type
}


А теперь магия с методами:


struct Connection {
[[nodiscard]] bool is_valid() const {
return valid_;
}

private:
bool valid_ = false;
};

void check_connection(const Connection& conn) {
conn.is_valid(); // warning: result of 'is_valid' is unused
}


📌 Даже если функция возвращает bool — компилятор предупредит, если ты его проигнорируешь. Это круто, когда метод что-то проверяет, ищет или сигналит об ошибке — и ты точно не хочешь забыть проверить результат.

⚠️ Но аккуратно: [[nodiscard]] не бросает исключения и не делает функцию безопасной. Это подсказка компилятору и твой напарник по коду.

Если хочешь писать более надёжный и самодокументируемый код — юзай [[nodiscard]] не только по дефолту, а осознанно.

➡️ @cpp_geek

BY C++ geek


Share with your friend now:
tgoop.com/cpp_geek/328

View MORE
Open in Telegram


Telegram News

Date: |

Telegram channels fall into two types: With the “Bear Market Screaming Therapy Group,” we’ve now transcended language. More>> Some Telegram Channels content management tips Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group.
from us


Telegram C++ geek
FROM American