Delen via


Compilerwaarschuwing (niveau 1) C4834

retourwaarde van de functie negeren met het kenmerk 'nodiscard'

Opmerkingen

Vanaf C++17 Standard geeft het [[nodiscard]] kenmerk aan dat de retourwaarde van een functie niet is bedoeld om te worden verwijderd. Als een aanroeper de retourwaarde negeert, genereert de compiler waarschuwing C4834. Hoewel dit kenmerk is geïntroduceerd in C++17, respecteert de compiler dit kenmerk en genereert de compiler waarschuwingen met betrekking tot het kenmerk bij gebruik /std:c++14 en later.

Als u deze waarschuwing wilt oplossen, moet u overwegen waarom uw code de retourwaarde niet gebruikt. Het gebruik van de functie komt mogelijk niet overeen met de intentie ervan. U kunt de waarschuwing omzeilen door de waarde toe te wijzen aan std::ignore of door deze te void casten als de waarde opzettelijk wordt genegeerd.
De toewijzing is std::ignore de voorkeur boven cast-conversie naar void in C++11 en hoger, omdat uw intentie duidelijker wordt en waarschuwing C26457 niet wordt geactiveerd als deze is ingeschakeld in uw instellingen voor codeanalyse.

Deze waarschuwing is geïntroduceerd in Visual Studio 2017 versie 15.3 als waarschuwing op niveau 3. Deze is gewijzigd in een waarschuwing op niveau 1 in Visual Studio 2017 versie 15.7. Code die is gecompileerd zonder waarschuwingen in versies van de compiler voor Visual Studio 2017 versie 15.3 kan nu C4834 genereren. Zie Compilerwaarschuwingen per compilerversie voor informatie over het uitschakelen van waarschuwingen die zijn geïntroduceerd in een bepaalde compilerversie of hoger.

De waarschuwing uitschakelen zonder codewijzigingen

U kunt de waarschuwing voor een specifieke coderegel uitschakelen met behulp van de warning pragma. #pragma warning(suppress : 4834) U kunt de waarschuwing in een bestand ook uitschakelen met behulp van de waarschuwingspragma. #pragma warning(disable : 4834) U kunt de waarschuwing globaal uitschakelen in opdrachtregel-builds met behulp van de /wd4834 opdrachtregeloptie.

De waarschuwing voor een volledig project uitschakelen in de Visual Studio IDE:

  1. Open het dialoogvenster Eigenschappenpagina's voor uw project. Zie Eigenschappenpagina's voor meer informatie over het gebruik van het dialoogvenster Eigenschappenpagina's.
  2. Selecteer de pagina Configuratie-eigenschappen>C/C++>Geavanceerd .
  3. Bewerk de eigenschap Specifieke waarschuwingen uitschakelen om toe te voegen 4834. Kies OK om uw wijzigingen toe te passen.

Example

In dit voorbeeld wordt C4834 gegenereerd en ziet u vier manieren om dit op te lossen:

// 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;
}