2012-09-25 68 views
3

我正在使用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); 
} 

回答

2

推測採取自動初始化的優點。

參考:

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.c與表單int()的表達式的值,即,0。 ]

雖然正值初始化被定義在,
C++ 03 8.5初始化器
第5段:

值初始化類型T的對象是指:
- 如果T是一個具有用戶聲明的構造函數(12.1)的類類型(第9節),則調用T的默認構造函數(並且初始化爲ill-f如果T沒有可訪問的缺省構造函數 );
- 如果T是一個沒有用戶聲明構造函數的非聯合類類型,那麼T的每個非靜態數據成員和基類組件都進行了值初始化;
- 如果T是一個數組類型,那麼每個元素都進行了值初始化;
- 否則,該對象是零初始化的

相關問題