Share via


Upozornění kompilátoru (úroveň 1) C4834

zahození návratové hodnoty funkce s atributem nodiscard

Poznámky

Počínaje C++17 Standard [[nodiscard]] určuje atribut, že návratová hodnota funkce není určena k zahození. Pokud volající zahodí návratovou hodnotu, kompilátor vygeneruje upozornění C4834. I když byl tento atribut zaveden v jazyce C++17, kompilátor respektuje tento atribut a generuje upozornění související s ním při použití /std:c++14 a novějším.

Pokud chcete toto upozornění vyřešit, zvažte, proč váš kód nepoužívá návratové hodnoty. Vaše použití funkce nemusí odpovídat jeho záměru. Upozornění můžete obejít přiřazením hodnoty std::ignore nebo jeho přetypováním void , pokud je hodnota zahozena úmyslně.
std::ignore Přiřazení se upřednostňuje před přetypováním void v jazyce C++11 a novějším, protože váš záměr je jasnější a neaktivuje upozornění C26457, pokud je v nastavení analýzy kódu povolené.

Toto upozornění bylo zavedeno v sadě Visual Studio 2017 verze 15.3 jako upozornění úrovně 3. V sadě Visual Studio 2017 verze 15.7 byla změněna na upozornění na úroveň 1. Kód kompilovaný bez upozornění ve verzích kompilátoru před sadou Visual Studio 2017 verze 15.3 teď může generovat C4834. Informace o tom, jak zakázat upozornění zavedená v konkrétní verzi kompilátoru nebo novější, naleznete v tématu Upozornění kompilátoru podle verze kompilátoru.

Vypnutí upozornění bez změn kódu

Upozornění pro konkrétní řádek kódu můžete vypnout pomocí direktivy warning pragma, #pragma warning(suppress : 4834). Upozornění můžete také vypnout v souboru pomocí direktivy pragma upozornění . #pragma warning(disable : 4834) Upozornění můžete v sestaveních příkazového řádku globálně vypnout pomocí možnosti příkazového /wd4834 řádku.

Vypnutí upozornění pro celý projekt v integrovaném vývojovém prostředí sady Visual Studio:

  1. Otevřete dialogové okno Stránky vlastností projektu. Informace o použití dialogového okna Stránky vlastností naleznete v tématu Stránky vlastností.
  2. Vyberte stránku Vlastnosti>konfigurace C/C++>Upřesnit.
  3. Upravte vlastnost Disable Specific Warnings pro přidání 4834. Pokud chcete změny použít, zvolte OK .

Příklad

Tato ukázka vygeneruje C4834 a ukazuje čtyři způsoby, jak ji opravit:

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