Avertissement du compilateur (niveau 2) C4345
Mise à jour : novembre 2007
Message d'erreur
changement de comportement : un objet de type POD construit avec un initialiseur de la forme () sera initialisé par défaut
behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
Cet avertissement signale un changement de comportement du compilateur Visual C++ fourni dans Visual Studio .NET lors de l'initialisation d'un objet POD avec () ; le compilateur initialise par défaut l'objet.
Pour plus d'informations, consultez Récapitulatif des modifications sans rupture au moment de la compilation.
L'exemple suivant génère l'erreur C4345 :
// C4345.cpp
// compile with: /W2
#include <stdio.h>
struct S* gpS;
struct S
{
// this class has no user-defined default ctor
void *operator new (size_t size, void*p, int i)
{
((S*)p)->i = i; // ordinarily, should not initialize
// memory contents inside placement new
return p;
}
int i;
};
int main()
{
S s;
// Visual C++ .NET 2003 will default-initialize pS->i
// by assigning the value 0 to pS->i.
S *pS2 = new (&s, 10) S(); // C4345
// try the following line instead
// S *pS2 = new (&s, 10) S; // not zero initialized
printf("%d\n", pS2->i);
}