没有合适的资源?快使用搜索试试~ 我知道了~
论坛中回答一个别人问题 C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数体中对数据成员赋值。 请问这里的初始化数据成员与对数据成员赋值的含义是什么?有什么区别? 我知道在数据成员有默认构造函数时是有不同的,但对其他类型的成员呢?其他类型成员的初始化和赋值有区别吗?==================================================================
资源推荐
资源详情
资源评论
成员初始化列表与构造函数体中的区别详细解析成员初始化列表与构造函数体中的区别详细解析
论坛中回答一个别人问题
C++ Primer中在讲构造函数初始化列表的时候有这么一段话:
无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造
函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数体中对数据成员赋值。
请问这里的初始化数据成员与对数据成员赋值的含义是什么?有什么区别?
我知道在数据成员有默认构造函数时是有不同的,但对其他类型的成员呢?其他类型成员的初始化和赋值有区别吗?
=========================================================================
是这个意思:是这个意思:
首先把数据成员按类型分类
1。内置数据类型,复合类型(指针,引用)
2。用户定义类型(类类型)
分情况说明:分情况说明:
对于类型1,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的
对于类型2,结果上相同,但是性能上存在很大的差别
因为类类型的数据成员对象在进入函数体是已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,这是调用一个
构造函数,在进入函数体之后,进行的是 对已经构造好的类对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提
供,则使用编译器提供的默认按成员赋值行为)
举个例说明
class A;
class B
{public:
B(){a = 3;}
private:
A a;
}
class A
{public:
A(){}
A(int){value = 3;}
int value;
}
像上面,我们使a对象的value为3,调用一个A的构造函数+一个默认拷贝赋值符,才达到目的
B::B():a(3){}
像这样,只调用了一个构造函数就达到了所需的对象啦,所以性能好的
转载他人一篇
我的问题是关于初始化C++类成员的。我见过许多这样的代码(包括在你的栏目中也见到过):
代码如下:
CSomeClass::CSomeClass()
资源评论
weixin_38544781
- 粉丝: 9
- 资源: 941
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功