Partilhar via


Aviso do compilador (nível 1) C4834

Descartando o valor de retorno da função com o atributo 'nodiscard'

Observações

A partir do padrão C++17, o atributo especifica que o [[nodiscard]] valor de retorno de uma função não deve ser descartado. Se um chamador descarta o valor de retorno, o compilador gera o aviso C4834. Embora esse atributo tenha sido introduzido no C++17, o compilador respeita esse atributo e gera avisos relacionados a ele ao usar /std:c++14 e posteriormente.

Para resolver esse aviso, considere por que seu código não usa o valor de retorno. A sua utilização da função pode não corresponder à sua intenção. Você pode contornar o aviso atribuindo o valor ou std::ignore convertendo-o se void descartar o valor for intencional.
A atribuição a std::ignore é preferível à transmissão para void em C++11 e superior, pois torna sua intenção mais clara e não acionará o Aviso C26457 se ativado em suas configurações de análise de código.

Este aviso foi introduzido no Visual Studio 2017 versão 15.3 como um aviso de nível 3. Ele foi alterado para um aviso de nível 1 no Visual Studio 2017 versão 15.7. Código que compilado sem avisos em versões do compilador antes do Visual Studio 2017 versão 15.3 agora pode gerar C4834. Para obter informações sobre como desativar avisos introduzidos em uma versão específica do compilador ou posterior, consulte Avisos do compilador por versão do compilador.

Para desativar o aviso sem alterações de código

Você pode desativar o aviso para uma linha de código específica usando o warning pragma, #pragma warning(suppress : 4834). Você também pode desativar o aviso dentro de um arquivo usando o pragma de aviso, #pragma warning(disable : 4834). Você pode desativar o aviso globalmente em compilações de linha de comando usando a opção de linha de /wd4834 comando.

Para desativar o aviso para um projeto inteiro no IDE do Visual Studio:

  1. Abra a caixa de diálogo Páginas de propriedades do seu projeto. Para obter informações sobre como usar a caixa de diálogo Páginas de propriedades, consulte Páginas de propriedades.
  2. Selecione a página Propriedades> de configuraçãoC/C++>Advanced.
  3. Edite a propriedade Desativar avisos específicos para adicionar 4834. Escolha OK para aplicar as alterações.

Example

Este exemplo gera C4834 e mostra quatro maneiras de corrigi-lo:

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