C ++,分号和花括号之间的东西是什么
C++, what is the stuff between between the semi colon, and curly braces
我从黑莓网站下载了一个例子。
我注意到它们在花括号之前和冒号之后有一些值,用逗号分隔。
这些是做什么用的,它们是如何工作的?
编辑:这只是另一种实例化值的方式吗?与在大括号内设置这些值相同吗?
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();
}
这些是成员初始化列表。
它们用于初始化对象的成员。注意 initialization 和 assignment 之间的区别。您也可以 "initialize" 构造函数中的成员,但这实际上是一个赋值。这意味着,该成员将事先被初始化(默认构造)。
使用成员初始化列表比在构造函数中赋值更有效,并且是很好的 C++ 风格。
这是一个成员初始化列表(而且是冒号,不是分号)。
它使用括号中的值初始化成员,因此(例如)m_contactService(new ContactService(this))
与将 m_contactService = new ContactService(this);
放入构造函数主体中大致相同。
虽然有一些不同——成员初始化器列表实际上是初始化而不是赋值。这意味着它可以用于 const 值、基数 class 和引用等不允许赋值的东西。
我从黑莓网站下载了一个例子。 我注意到它们在花括号之前和冒号之后有一些值,用逗号分隔。
这些是做什么用的,它们是如何工作的?
编辑:这只是另一种实例化值的方式吗?与在大括号内设置这些值相同吗?
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();
}
这些是成员初始化列表。
它们用于初始化对象的成员。注意 initialization 和 assignment 之间的区别。您也可以 "initialize" 构造函数中的成员,但这实际上是一个赋值。这意味着,该成员将事先被初始化(默认构造)。
使用成员初始化列表比在构造函数中赋值更有效,并且是很好的 C++ 风格。
这是一个成员初始化列表(而且是冒号,不是分号)。
它使用括号中的值初始化成员,因此(例如)m_contactService(new ContactService(this))
与将 m_contactService = new ContactService(this);
放入构造函数主体中大致相同。
虽然有一些不同——成员初始化器列表实际上是初始化而不是赋值。这意味着它可以用于 const 值、基数 class 和引用等不允许赋值的东西。