这句C++是什么意思?BaseWindow() : m_hwnd(NULL) { }.

What does this C++ statement mean? BaseWindow() : m_hwnd(NULL) { }

本文关键字:hwnd NULL 意思 BaseWindow C++ 这句 是什么      更新时间:2023-10-16

我正在浏览MSDN的"Windows API入门"部分,并遇到了C++我难以理解的一个方面。

我一直在看Stroustrup的"C++编程语言",找不到这个特别的东西。

请查看指向 MSDN 上相关页面的链接。

我不明白的台词是:

BaseWindow() : m_hwnd(NULL) { }

这一行在后面的代码片段中,描述了面向对象的主题方法。m_hwnd属于HWND型。

我真的不知道这里发生了什么。我很确定它是一个不做太多事情的构造函数,但这种特定的语法对我来说是陌生的。我必须承认,我的C++知识大多只是"添加了一些C++东西的C"。我目前正在深入研究Stroustrup来解决这个问题。

冒号只是构造函数声明和构造函数初始值设定项列表之间的语法分隔符。

这是一种直接构造(或初始化(成员变量的方法。

它类似于(但不等于(与

BaseWindow()
{
m_hwnd = NULL;
}

另一种看待它的方式:假设你定义了一个普通的局部变量,并希望将其初始化为一个特定的值。有几种方法可以做到这一点。

  1. 定义(使用默认初始化(和赋值:

    HWND hwnd;
    hwnd = 0;
    
  2. 定义和副本初始化

    HWND hwnd = 0;
    
  3. 定义和直接初始化

    HWND hwnd(0);
    

使用构造函数初始值设定项列表,可以在构造函数中使用直接初始化,并且直接初始化发生在执行构造函数体之前

请注意,模板不会在其中发挥任何作用。继承也是如此,即使可以使用构造函数初始值设定项列表"调用"父类构造函数。

最后,一个重要的注意事项:构造函数初始值设定项列表不应与std::initializer_list混淆。

BaseWindow() : m_hwnd(NULL) { }

这声明了BaseWindow的默认构造函数,该构造函数使用NULL值初始化m_hwnd

但是,它保证m_hwnd将始终初始化为NULL。 例如,默认复制构造函数不会这样做。 显式复制构造函数也不太可能这样做。