Объяснение [[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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу намеренно отбросить возвращаемое значение [[nodiscard]]?
    Anonymous » » в форуме C++
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Объяснение ошибки приведения C# int- или object-to-double
    Гость » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Гость
  • Краткое объяснение того, что означает использование (ось = 0) и использование (inplace = True) [закрыто]
    Гость » » в форуме Python
    0 Ответы
    49 Просмотры
    Последнее сообщение Гость
  • Объяснение разницы кода. Рекурсивный вызов подмножества
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Пример std::lock_guard, объяснение, почему это работает
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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