C++,分号和大括号之间的内容是什么

C++, what is the stuff between between the semi colon, and curly braces

本文关键字:是什么 之间 C++      更新时间:2023-10-16

我从黑莓网站下载了一个例子。我注意到它们在大括号之前和冒号之后有一些值,用逗号分隔。

这些是干什么用的,它们是如何工作的?

编辑:这只是实例化值的另一种方式吗?与在大括号内设置这些值相同吗?

using namespace bb::cascades;
using namespace bb::pim::contacts;
//! [0]
AddressBook::AddressBook(QObject *parent)
    : QObject(parent)
    , m_contactService(new ContactService(this))
    , m_model(new GroupDataModel(this))
    , m_contactViewer(new ContactViewer(m_contactService, this))
    , m_contactEditor(new ContactEditor(m_contactService, this))
    , m_currentContactId(-1)
{
    // Disable grouping in data model
    m_model->setGrouping(ItemGrouping::None);
    // Ensure to invoke the filterContacts() method whenever a contact has been added, changed or removed
    bool ok = connect(m_contactService, SIGNAL(contactsAdded(QList<int>)), SLOT(filterContacts()));
    Q_ASSERT(ok);
    ok = connect(m_contactService, SIGNAL(contactsChanged(QList<int>)), SLOT(filterContacts()));
    Q_ASSERT(ok);
    ok = connect(m_contactService, SIGNAL(contactsDeleted(QList<int>)), SLOT(filterContacts()));
    Q_ASSERT(ok);
    // Fill the data model with contacts initially
    filterContacts();
}

这是一个成员初始值设定项列表(它是冒号,而不是分号)。

它用括号中的值初始化成员,因此(例如)m_contactService(new ContactService(this))与将m_contactService = new ContactService(this);放入构造函数的主体中大致相同。

但也有一些区别——成员初始值设定项列表实际上是初始化的,而不是赋值。这意味着它可以用于不允许赋值的常量值、基类和引用。

这些是成员初始值设定项列表。

它们用于初始化对象的成员。请注意初始化分配之间的区别。您也可以"初始化"构造函数中的成员,但这实际上是一个赋值。这意味着,成员将预先初始化(默认构造)。

使用成员初始值设定项列表比构造函数中的赋值更有效,并且是良好的C++风格。