tgoop.com/cpp_geek/315
Create:
Last Update:
Last Update:
C++: зачем [[nodiscard]] на bool — и почему это важно
Когда функция возвращает bool, часто возникает соблазн проигнорировать результат:
is_valid(user); // ничего не делает!
А теперь представьте, что
is_valid() проверяет критическое условие. Без проверки — баг, возможно даже security-уязвимость.Чтобы защититься от такого, с C++17 есть
[[nodiscard]]:
[[nodiscard]] bool is_valid(const User& user);
Теперь, если результат проигнорировать — компилятор предупредит:
warning: ignoring return value of 'is_valid', declared with attribute 'nodiscard'
Можно ещё улучшить читаемость — использовать
[[nodiscard("Must check if user is valid")]], чтобы компилятор написал пояснение в варнинге (начиная с C++20).🔥 Лайфхак: ставьте
[[nodiscard]] на все функции, где игнорирование результата — это почти всегда ошибка. Особенно на:* проверки (
is_...)* операции с возможным фейлом (
try_..., parse_...)* RAII-объекты с флагами состояния
Не ленитесь —
[[nodiscard]] спасает от тонких багов и делает код надёжнее.➡️ @cpp_geek
BY C++ geek
Share with your friend now:
tgoop.com/cpp_geek/315
