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.
icke-bärbar användning av klassen "typ" som argument till en variadisk funktion
Anmärkningar
Klasser eller structs som skickas till en variadisk funktion måste vara trivialt kopierbara. När sådana objekt skickas gör kompilatorn helt enkelt en bitvis kopia och anropar inte konstruktorn eller destruktören.
Den här varningen är tillgänglig från och med Visual Studio 2017.
Example
Följande exempel genererar C4840 och visar hur du åtgärdar det:
// C4840.cpp
// compile by using: cl /EHsc /W4 C4840.cpp
#include <stdio.h>
int main()
{
    struct S {
        S(int i) : i(i) {}
        S(const S& other) : i(other.i) {}
        operator int() { return i; }
    private:
        int i;
    } s(0);
    printf("%i\n", s); // warning C4840 : non-portable use of class 'main::S'
                       // as an argument to a variadic function
    // To correct the error, you can perform a static cast
    // to convert the object before passing it:
    printf("%i\n", static_cast<int>(s));
}
För strängar som skapats och hanteras med hjälp av CStringWska den angivna operator LPCWSTR() användas för att omvandla ett CStringW objekt till den C-formatsträngspekare som förväntas av formatsträngen:
    CStringW str1;
    CStringW str2;
    // ...
    str1.Format("%s", static_cast<LPCWSTR>(str2));