Megosztás a következőn keresztül:


Fordító figyelmeztetése (4. szint) C4840

a "type" osztály nem hordozható használata variadikus függvény argumentumaként

Megjegyzések

A variadikus függvénynek átadott osztályoknak vagy szerkezeteknek triviálisan másolhatónak kell lenniük. Az ilyen objektumok átadásakor a fordító egyszerűen egy bitenkénti másolatot készít, és nem hívja meg a konstruktort vagy a destruktort.

Ez a figyelmeztetés a Visual Studio 2017-től érhető el.

Example

Az alábbi példa létrehozza a C4840-et, és bemutatja, hogyan lehet kijavítani:

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

A használatával CStringWlétrehozott és felügyelt sztringek esetében a megadott operator LPCWSTR() értéket kell használni egy objektum formázási sztring CStringW által várt C stílusú sztringmutatóra való vetéséhez:

    CStringW str1;
    CStringW str2;
    // ...
    str1.Format("%s", static_cast<LPCWSTR>(str2));