为什么初始化一个对象为空

我在MSDN的帮助下学习Windows编程。为什么有人会像下面这样初始化一个对象?

WNDCLASS wc = { }; 

这是否将对象的所有内存零? 整个源代码如下:

 #ifndef UNICODE #define UNICODE #endif #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) { // Register the window class. const wchar_t CLASS_NAME[] = L"Sample Window Class"; WNDCLASS wc = { }; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); // Create the window. HWND hwnd = CreateWindowEx( 0, // Optional window styles. CLASS_NAME, // Window class L"Learn to Program Windows", // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hwnd == NULL) { return 0; } ShowWindow(hwnd, nCmdShow); // Run the message loop. MSG msg = { }; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1)); EndPaint(hwnd, &ps); } return 0; } return DefWindowProc(hwnd, uMsg, wParam, lParam); } 

Solutions Collecting From Web of "为什么初始化一个对象为空"

大概是利用自动初始化。

参考:

C ++ 03标准8.5.1聚合
第7段:

如果列表中的初始化器比聚合中的成员少,那么未明确初始化的每个成员都应进行值初始化 (8.5)。 [例:

  struct S { int a; char* b; int c; }; S ss = { 1, "asdf" }; 

初始化ss.a1ss.b"asdf"ss.cint()形式的表达式的值,即0 。 ]

在初始化值定义中,
C ++ 03 8.5初始化器
第5段:

为了初始化 T类型的对象,意味着:
– 如果T是一个具有用户声明的构造函数(12.1)的类类型(第9章),那么将调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是格式错误的)。
– 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都被初始化;
– 如果T是一个数组类型,则每个元素都进行了值初始化;
否则,该对象是零初始化的