Зачем [[nodiscard]] и когда он реально спасает?
Зачем [[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]] на всё, что нельзя безнаказанно проигнорировать. Это дешёвая страховка от глупых багов.