c++关于构造函数初始列表的有关问题
c++关于构造函数初始列表的问题
第四版的C++ primer中有这样一句话:“初始化const或引用类型数据成员的唯一机会是构造函数初始化列表中。”难道不能在构造函数的函数体中实现吗?还有一点不明白,就是构造函数的初始化列表是怎样工作的?比如:
上例中的初始化列表是如何工作的呢?
------解决方案--------------------
因为const和引用都要在定义的同时就给初值
------解决方案--------------------
什么叫如何工作的,就是在创建对象的时候,为成员变量分配空间的同时用括号里的值初始化它啊
------解决方案--------------------
“初始化const或引用类型数据成员的唯一机会是构造函数初始化列表中。”难道不能在构造函数的函数体中实现吗?
-----------------------------------
很简单呀,自己做个简单的小程序试验一下便知。
还有一点不明白,就是构造函数的初始化列表是怎样工作的?
-----------------------
按照类定义中声明的成员变量的次序初始化,
不是按照初始化列表的顺序初始化。
你的例子中,初始化的顺序是 i , ci , ri
------解决方案--------------------
看看标准12.6.2 Initializing bases and members
------解决方案--------------------
因为在调用constructor的主体之前,所有成员的初始化函数都会被调用一遍。即使你不写初始化列表,那些成员也会按无参数的默认构造函数去构造。如果某个成员没有默认构造函数,你也没有在初始化列表里调用它的某个构造函数,就会抛出一个编译时错误。
第四版的C++ primer中有这样一句话:“初始化const或引用类型数据成员的唯一机会是构造函数初始化列表中。”难道不能在构造函数的函数体中实现吗?还有一点不明白,就是构造函数的初始化列表是怎样工作的?比如:
class ConstRef {
public:
ConstRef(int ii);
private:
int i;
const int ci;
int &ri;
};
ConstRef::ConstRef(int ii): i(ii), ci(i), ri(ii) {}
上例中的初始化列表是如何工作的呢?
C++
构造函数
初始化列表
------解决方案--------------------
因为const和引用都要在定义的同时就给初值
------解决方案--------------------
什么叫如何工作的,就是在创建对象的时候,为成员变量分配空间的同时用括号里的值初始化它啊
------解决方案--------------------
“初始化const或引用类型数据成员的唯一机会是构造函数初始化列表中。”难道不能在构造函数的函数体中实现吗?
-----------------------------------
很简单呀,自己做个简单的小程序试验一下便知。
还有一点不明白,就是构造函数的初始化列表是怎样工作的?
-----------------------
按照类定义中声明的成员变量的次序初始化,
不是按照初始化列表的顺序初始化。
你的例子中,初始化的顺序是 i , ci , ri
------解决方案--------------------
看看标准12.6.2 Initializing bases and members
------解决方案--------------------
因为在调用constructor的主体之前,所有成员的初始化函数都会被调用一遍。即使你不写初始化列表,那些成员也会按无参数的默认构造函数去构造。如果某个成员没有默认构造函数,你也没有在初始化列表里调用它的某个构造函数,就会抛出一个编译时错误。