Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
ignorera returvärdet för funktionen med attributet "nodiscard"
Anmärkningar
Från och med C++17 Standard [[nodiscard]] anger attributet att en funktions returvärde inte är avsett att tas bort. Om en anropare tar bort returvärdet genererar kompilatorn varning C4834. Även om det här attributet introducerades i C++17 respekterar kompilatorn det här attributet och genererar varningar relaterade till det när du använder /std:c++14 och senare.
Du kan lösa den här varningen genom att tänka på varför koden inte använder returvärdet. Din användning av funktionen kanske inte matchar dess avsikt. Du kan kringgå varningen genom att tilldela värdet till std::ignore eller genom att gjuta det till om det är avsiktligt att void ta bort värdet.
Tilldelning till std::ignore föredras framför gjutning till void i C++11 och senare, eftersom det gör avsikten tydligare och utlöser inte Varning C26457 om den är aktiverad i inställningarna för kodanalys.
Den här varningen introducerades i Visual Studio 2017 version 15.3 som en varning på nivå 3. Den ändrades till en varning på nivå 1 i Visual Studio 2017 version 15.7. Kod som kompilerats utan varningar i versioner av kompilatorn före Visual Studio 2017 version 15.3 kan nu generera C4834. Information om hur du inaktiverar varningar som introduceras i en viss kompilatorversion eller senare finns i Kompilatorvarningar efter kompilatorversion.
Inaktivera varningen utan kodändringar
Du kan inaktivera varningen för en specifik kodrad med hjälp warning av pragma, #pragma warning(suppress : 4834). Du kan också inaktivera varningen i en fil med hjälp av varnings pragma, #pragma warning(disable : 4834). Du kan inaktivera varningen globalt i kommandoradsversioner med hjälp /wd4834 av kommandoradsalternativet.
Så här inaktiverar du varningen för ett helt projekt i Visual Studio IDE:
- Öppna dialogrutan Egenskapssidor för projektet. Information om hur du använder dialogrutan Egenskapssidor finns i Egenskapssidor.
- Välj sidan Konfigurationsegenskaper>C/C++>Avancerat .
- Redigera egenskapen Inaktivera specifika varningar för att lägga till
4834. Välj OK för att tillämpa ändringarna.
Example
Det här exemplet genererar C4834 och visar fyra sätt att åtgärda det:
// 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;
}