Avertissement du compilateur (niveau 4) C4840
utilisation non portable de la classe 'type' comme argument d’une fonction variadicique
Notes
Les classes ou structs passés à une fonction variadicique doivent être copiables de manière triviale. Quand de tels objets sont passés, le compilateur effectue simplement une copie au niveau du bit et n’appelle pas le constructeur ou le destructeur.
Cet avertissement est disponible à partir de Visual Studio 2017.
Exemple
L’exemple suivant génère l’erreur C4840 et montre comment la corriger :
// 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));
}
Pour les chaînes générées et gérées à l’aide CStringW
, l’objet fourni operator LPCWSTR()
doit être utilisé pour convertir un CStringW
objet en pointeur de chaîne de style C attendu par la chaîne de format :
CStringW str1;
CStringW str2;
// ...
str1.Format("%s", static_cast<LPCWSTR>(str2));
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour