问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++中设置类函数成员的默认值和构造函数的初始值有什么区别?

发布网友 发布时间:2023-09-30 04:07

我来回答

1个回答

热心网友 时间:2024-07-11 14:37

一般进行成员变量初始化用两种方法

第一种是通过在构造函数内赋值
class Point
{
public:
Point(){ _x = 0; _y = 0;};
Point( int x, int y ){ _x = 0; _y = 0; }
private:
int _x, _y;
};

第二种是使用初始化列表
class Point
{
public:
Point():_x(0),_y(0){};
Point( int x, int y ):_x(x),_y(y){}
private:
int _x, _y;
};

这两种用法是有区别的

一、在有些情况下,必须使用初始化列表。特别是const和引用数据成员被初始化时。

class Point
{
// 这个类的定义就要求使用初始化成员列表,因为const成员只能被初始化,不能被赋值
public:
Point():_x(0),_y(0){};
Point( int x, int y ):_x(x),_y(y){}
//Point(){ _x = 0; _y = 0;}
//Point( int x, int y ){ _x = 0; _y = 0; }
private:
const int _x, _y;
};

二、是从效率方面来说的,对于内置类型或复合类型,差异不会太大,但对于非内置数据类型,差异还是很明显的

如再给Point类添加一个新的string类型的成员变量

class Point
{
const int _x, _y;
string _name;
};

构造函数内赋值进行初始化

Point( int x, int y, string name ){ _x = 0; _y = 0; _name = name; }

_name = name 这个表达式会调用string类的缺省构造函数一次,再调用Operator=函数进行赋值一次。所以需调用两次函数:一次构造,一次赋值

用初始化列表进行初始化

Point( int x, int y, string name ):_x(x),_y(y), _name(name){}

_name会通过拷贝构造函数仅以一个函数调用的代码完成初始化

即使是一个很简单的string类型,不必要的函数调用也会造成很高的代价。随着类越来越大,越来越复杂,它们的构造函数也越来越大而复杂,那么对象创建的代价也越来越高,所以一般情况下使用初始化列表进行初始化,不但可以满足const和引用成员的初始化要求,还可以避免低效的初始化数据成员。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 电脑中了比特币病毒怎么恢复 电脑比特币病毒是怎么中的:中了比特币病毒怎么办1 C++中如何用Vector保存类 ,如何对类中对象进行cin...1 《不思议迷宫》创世神出现地点介绍 深圳仓储货架布局遵循的原则有哪些? 2022.12.6济南蓝翔大集解封了吗 C++构造函数无参数怎么给类的私有成员赋值9 不思议迷宫创世神冈布奥技能 创世神冈布奥怎么获得1 库房货架的高度有限制吗?1 私企有党支部吗?5 想知道15岁同龄人下面有多长? 15岁男生,那,正常应该多长? 初音未来2017演唱会在中国什么时候开50 初音未来十周年演唱会bilibili会有直播吗?4 有谁知道初音未来2016的演唱会直播怎么看啊?爱奇艺里找不到...2 温度高的物体一定比温度低的物体内能大吗9 内能可以自动从温度高的物体转移到温度低的物体吗8 热量总是从温度高的物体传向温度低的物体 这句话对吗39 云南丽江最新旅游攻略,带你玩转丽江! 正常15岁男孩下面多长是正常的38 c++,关于如何用cin给结构体中元素赋值的问题4 实况足球2011的修改器问题 我创了个QQ群(小学毕业了(学生群)),帮我想个群名,群名片,群简介,群公 ... 幼儿忌吃猪尾巴,吃了真的会事事落后吗?1 小孩能吃猪尾巴吗,要怎么做才好吃2 一首歌词的翻译 热量一定是从温度高的物体传递到温度低的物体上吗??内能呢? ... 吃猪尾巴对孩子有什么作用吗?4 ...大约10000个字符,不是单词啊,有没有翻译都可以,有的话更好啦!_百度... 电脑中比特币病毒了怎么办3 意甲的球队“MILA”和“MILANO”分别是那个球队? 民营企业有党支部吗1 仓库货架的一般高度可以做多少,进来看看就知道1 进入app的时候显示无法连接app是什么意思100 我的苹果7plus登陆AppStore 的时候总显示登录失败... 长沙三誉电子科技有限公司怎么样? 2017进期初音未来那里有演唱会37 c++类中怎样给数组型的数据成员赋初值?能不能用构造函数?谢...3 熬夜黑眼圈怎么消除?1460 若一个物体温度高,另一个物体温度低,但温度高的物体内能比温度...12