Compilerwarnung (Stufe 2) C4345
Aktualisiert: November 2007
Fehlermeldung
Verhaltensänderung: Ein Objekt des POD-Typs, der mit dem Initialisierer des Formulars "()" erstellt wurde, wird standardmäßig initialisiert
behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
Durch diese Warnung wird auf eine Verhaltensänderung des im Lieferumfang von Visual Studio .NET enthaltenen Visual C++-Compilers hingewiesen, wenn ein POD-Objekt mit () initialisiert wird. Der Compiler führt eine Standardinitialisierung für das Objekt aus.
Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.
Im folgenden Beispiel wird C4345 generiert:
// 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);
}