Объяснение [[nodiscard]] в C++17C++

Программы на C++. Форум разработчиков
Anonymous
 Объяснение [[nodiscard]] в C++17

Сообщение Anonymous »

В проекте, использующем C++20, CLion предложил мне добавить [[nodiscard]] к определениям методов моего константного класса, например,

Код: Выделить всё

class Test {
public:
[[nodiscard]] int f(int a, int b) const {
return a + b;
}
}
Объяснение:

Добавляет атрибуты [[nodiscard]] (представленные в C++17) к функциям-членам. чтобы во время компиляции указать, какие возвращаемые значения не следует игнорировать.

и я также проверил cppreference.com:

Если функция, объявленная nodiscard, или функция, возвращающая перечисление или класс, объявленный nodiscard по значению, вызывается из выражения отброшенного значения, отличного от приведения к void, компилятору рекомендуется выдать предупреждение .
...
Появляется в объявлении функции, объявлении перечисления или объявлении класса.
Если из выражения отброшенного значения, отличного от приведения к void ,
  • вызывается функция, объявленная nodiscard, или
  • функция, возвращающая перечисление или класс, объявленный nodiscard по значению. или
  • конструктор, объявленный nodiscard, вызывается путем явного преобразования типа или static_cast, или
  • объект перечисления или типа класса, объявленный nodiscard, инициализируется путем явного преобразования типов или static_cast,
компилятору рекомендуется выдать предупреждение.

Я, честно говоря, не очень понимаю, зачем эта аннотация нужна именно в этом месте. Почему компилятор игнорирует мои возвращаемые значения, если вызывающая сторона обрабатывает их дальше? Существует ли интуитивное объяснение того, что именно он сообщает компилятору и зачем это нужно?

Подробнее здесь: https://stackoverflow.com/questions/764 ... ard-in-c17

Вернуться в «C++»