Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
a "type" osztály nem szabványos használata variadikus függvény argumentumaként
Megjegyzések
A variadikus függvénynek átadott osztályoknak vagy szerkezeteknek, például printf 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 c4839-et hoz létre:
// C4839.cpp
// compile by using: cl /EHsc /W3 C4839.cpp
#include <atomic>
#include <memory>
#include <stdio.h>
int main()
{
std::atomic<int> i(0);
printf("%i\n", i); // error C4839: non-standard use of class 'std::atomic<int>'
// as an argument to a variadic function
// note: the constructor and destructor will not be called;
// a bitwise copy of the class will be passed as the argument
// error C2280: 'std::atomic<int>::atomic(const std::atomic<int> &)':
// attempting to reference a deleted function
}
A hiba kijavításához meghívhat egy tagfüggvényt, amely egy triviálisan másolható típust ad vissza.
std::atomic<int> i(0);
printf("%i\n", i.load());
A használatával CStringWlétrehozott és felügyelt sztringek esetében a megadott operator LPCWSTR() értéket kell használni egy objektumnak a formátumsztring által várt C mutatóra való vetéséhez CStringW .
CStringW str1;
CStringW str2;
// ...
str1.Format("%s", static_cast<LPCWSTR>(str2));