Поделиться через


Предупреждение компилятора (уровень 2) C4345

Обновлен: Ноябрь 2007

Сообщение об ошибке

изменение поведения: для объекта типа POD, созданного с помощью инициализатора вида (), будет выполнена инициализация по умолчанию.
behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized.

Данное предупреждение сообщает об изменении поведения компилятора Visual C++, который выполнял доставку в Visual Studio .NET при инициализации объекта типа POD с (); компилятор выполнит инициализацию объекта по умолчанию.

Дополнительные сведения см. в разделе Сводная информация о критических изменениях времени компиляции.

Следующий пример демонстрирует причины возникновения ошибки 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);
}