C/C++ Ready | Программирование: post #2293 — TG.ME

Зачем в C++ помечать важные результаты через [[nodiscard]]?

Иногда функция возвращает значение, которое нельзя просто проигнорировать: статус операции, ошибку, открытый ресурс, результат валидации.

Например:
bool save_config() {
return write_file("config.json");
}

save_config();


Код компилируется, но результат потерян. Если сохранение не удалось, программа может продолжить работу так, будто всё нормально.

Для таких случаев есть атрибут [[nodiscard]]:
[[nodiscard]]
bool save_config() {
return write_file("config.json");
}


Теперь компилятор предупредит, если результат вызова проигнорировали:
save_config(); // warning


Правильнее явно обработать результат:
if (!save_config()) {
std::cerr << "Config was not saved\n";
}


Особенно полезно помечать функции, которые возвращают объект ошибки:
[[nodiscard]]
std::optional<User> find_user(int id);


Или результат проверки:
[[nodiscard]]
bool is_valid_token(std::string_view token);


Если результат действительно нужно проигнорировать, лучше показать это явно:
(void)save_config();


Так сразу видно, что разработчик сделал это осознанно, а не случайно.

📣 C++ Ready | #совет
❤8👍6🔥3
August 29, 2026 1.3K 14