如何解释这个C++代码?
问题描述:
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){
}
第一个是名称空间,第二个是函数的名称。那三个参数是什么?我认为它可能与继承有关,但这些不是类名。这些是私有变量。如何解释这个C++代码?
在此先感谢。
答
这就是构造函数的定义 - 没有名称空间。
NetworkManager :: NetworkManager() : m_Thread(0), m_Continue(true), m_Init(false){
}
构造函数用于名为NetworkManager的类,它使用初始化列表初始化其成员。这是怎么回事是概念(如果不是完全准确):
NetworkManager :: NetworkManager() {
create "empty" NetWorkManager object
initialise its m_Thread with zero
set its m_Continue to be true
set its m_Init to be false
}
然后,您使用构造函数来创建一个完全初始化的对象:
NetworkManager manager;
初始化这样优于分配在构造函数的身体有以下几个原因:
- 许多类型不支持分配
- 它通常更有效
- 它消除未初始化的对象的在构造代码
答
这就是执行其身体之前,使用构件初始化语法来设置字段(或调用基类的构造函数)一类的构造的其余部分的可能性。
答
这是NetworkManager类的一个构造函数,它具有(至少)3个成员数据成员m_Thread,m_Continue,m_Init,它们分别设置为值0,True和False。
答
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){ }
该代码使用称为初始化列表的C++特性。它在调用NetworkManager
的构造函数之前初始化类NetworkManager
的成员。
它根本:
m_Thread = 0;
m_Continue = true;
m_Init = false;
什么是使用这个,而不是把这些到构造函数的身体优势? – codereviewanskquestions 2011-06-13 07:28:19
@LCYSoft:因为当你把它们放在构造函数体中时,成员变量将被默认初始化,然后这些值将被赋值给它们。对于某些数据类型,这比仅仅立即初始化它们效率低。更重要的是,有一些数据类型需要*使用'ctor-initializer'语法来初始化它(例如,当你需要将参数传递给成员变量,const成员等的构造函数时) 。 – 2011-06-13 07:30:00
非常感谢你! – codereviewanskquestions 2011-06-13 07:31:50