Freigeben über


Compilerwarnung (Stufe 1) C4834

Der Rückgabewert einer Funktion mit dem "nodiscard"-Attribut wird verworfen.

Hinweise

Ab C++17 Standard gibt das Attribut an, dass der [[nodiscard]] Rückgabewert einer Funktion nicht verworfen werden soll. Wenn ein Aufrufer den Rückgabewert verwirft, generiert der Compiler die Warnung C4834. Obwohl dieses Attribut in C++17 eingeführt wurde, berücksichtigt der Compiler dieses Attribut und generiert Warnungen im Zusammenhang mit dem Attribut bei Verwendung /std:c++14 und höher.

Um diese Warnung zu beheben, sollten Sie berücksichtigen, warum Ihr Code den Rückgabewert nicht verwendet. Ihre Verwendung der Funktion entspricht möglicherweise nicht ihren Absichten. Sie können die Warnung umgehen, indem Sie den Wert std::ignore zuweisen oder ihn void umwandeln, wenn der Wert verworfen wird.
Die Zuweisung zu std::ignore der Aufgabe wird gegenüber der Umwandlung void in C++11 und höher bevorzugt, da sie ihre Absicht klarer macht und Warnung C26457 nicht auslöst, wenn sie in ihren Codeanalyseeinstellungen aktiviert ist.

Diese Warnung wurde in Visual Studio 2017, Version 15.3, als Warnung der Ebene 3 eingeführt. Sie wurde in Visual Studio 2017, Version 15.7, in eine Warnung der Ebene 1 geändert. Code, der ohne Warnungen in Versionen des Compilers vor Visual Studio 2017, Version 15.3 kompiliert wurde, kann jetzt C4834 generieren. Informationen zum Deaktivieren von Warnungen, die in einer bestimmten Compilerversion oder höher eingeführt wurden, finden Sie unter Compilerwarnungen nach Compilerversion.

So deaktivieren Sie die Warnung ohne Codeänderungen

Sie können die Warnung für eine bestimmte Codezeile mithilfe des warning Pragmas #pragma warning(suppress : 4834)deaktivieren. Sie können die Warnung in einer Datei auch mit dem Pragma #pragma warning(disable : 4834)der Warnung deaktivieren. Sie können die Warnung global in Befehlszeilenbuilds mithilfe der /wd4834 Befehlszeilenoption deaktivieren.

So deaktivieren Sie die Warnung für ein gesamtes Projekt in der Visual Studio-IDE:

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten für Ihr Projekt. Informationen zur Verwendung des Dialogfelds „Eigenschaftenseiten“ finden Sie unter Eigenschaftenseiten.
  2. Wählen Sie die Seite "Konfigurationseigenschaften>C/C++>Erweitert" aus.
  3. Bearbeiten Sie die Eigenschaft Bestimmte Warnungen deaktivieren, um 4834 hinzuzufügen. Klicken Sie auf OK, um die Änderungen zu übernehmen.

Beispiel

In diesem Beispiel wird C4834 generiert, und es werden vier Möglichkeiten zum Beheben gezeigt:

// C4834.cpp
// compile using: cl /EHsc /std:c++17
#include <iostream>

[[nodiscard]]
int square_of(int i) { return i * i; }

int main()
{
    square_of(42); // warning C4834: discarding return value of function with 'nodiscard' attribute
    // If ignoring the [[nodiscard] attribute is unintentional, make use of the return value as intended:
    // For example:
    std::cout << "square_of(42) = " << square_of(42) << "\n"; // Ok
    // Or:
    int result = square_of(43); // Ok
    std::cout << "square_of(43) = " << result << "\n"; 

    // If ignoring the [[nodiscard]] attribute value is intentional, you have two options:
    // Preferrably, assign the return value to std::ignore:
    std::ignore = square_of(42); // Ok, C++11 and higher
    // Alternatively, you can cast the return value to void. 
    // The intent may be less clear to other developers.
    (void) square_of(42); // May produce warning C26457
    return 0;
}