tgoop.com/cpp_geek/346
Create:
Last Update:
Last Update:
Зачем [[nodiscard]]
и когда он реально спасает?
Сколько раз вы видели: функция возвращает значение, а кто-то его тупо игнорирует. А потом баги из ниоткуда. В C++17 завезли [[nodiscard]]
, и это реально полезная штука.
[[nodiscard]] int compute() {
return 42;
}
int main() {
compute(); // warning: ignoring return value
}
Компилятор предупреждает: "эй, ты вызвал, но не используешь результат".
Где это особенно важно:
- Функции, которые возвращают ошибки (
std::error_code
, std::optional
, bool
успеха операции);- Функции, где пропуск результата ломает логику (например, RAII-объекты, токены отмены, хендлы).
Можно навесить
[[nodiscard]]
и на типы (C++20):
struct [[nodiscard]] Result {
bool ok;
};
Result foo();
foo(); // warning!
Вместо неочевидных багов — раннее предупреждение компилятора.
⚡ Лайфхак: Если компилятор слишком шумит — можно сделать
[[nodiscard("объяснение")]]
(C++20), чтобы явно подсказать, зачем это.Вывод: ставьте
[[nodiscard]]
на всё, что нельзя безнаказанно проигнорировать. Это дешёвая страховка от глупых багов.➡️ @cpp_geek
BY C++ geek
Share with your friend now:
tgoop.com/cpp_geek/346