Freigeben über


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