永发信息网

C++中关于类对象的初始化问题

答案:3  悬赏:80  手机版
解决时间 2021-12-03 09:10
C++中关于类对象的初始化问题
最佳答案
你没用到你干嘛定义它?用得到的统统都需要初始化(既然定义了就当然用得到的了嘛......),否则其数据成员包含的就是垃圾。

是,初始化不是赋值,所以你想初始化而不是赋值的话就要用member initialization list而不是operator =。

区别:

clas A
{
public:
A();
A(int const _id, string const& _name, string const& _address);

private:

int id;
string name;
string address;

};

A::A(int const _id, string const& _name, string const& _address)
{
id = _id;
name = _name;
address = _address;
}

使用复制赋值操作符来“初始化”成员是所谓的“伪初始化”。在上面的过程中,在进入A()的函数体之前,name和address就已经分别调用了它们各自的默认构造函数一次,而在A()的函数体中它们又再次调用自己的operator = 来进行赋值。对内置类型来说则没有这个过程,所以对于内置类型,使用初始化成员列表或在构造函数体内对其进行赋值没什么大的区别。

A::A(int const _id, string const& _name, string const& _address)
: id(_id), name(_name), address(_address)
{
}

这一次name和address就只分别调用了它们各自的复制构造函数一次,而免去了多余了那一次对operator = 的调用,对于非内置类型来说,这就大大提高了对象的初始化效率。同样对于内置类型来说这没有什么大的不同,但为了保持一致性,通常最好的做法就是也把它们放在初始化成员列表中进行初始化。

另外 = 操作符所表示的意思也不总是赋值,在对象定义声明时使用操作符 = 对象调用的就是其复制构造函数而不是operator = :

int main()
{
A a(1000, "Stanly", "WestRoadNo.12345"), b;

b = a; // 这是operator =

A c = b; // 这是A(const A& _A)
}
全部回答
不是
不是
不建议使用初始化列表
因为很多编译器在内部实现有差别

不是
本质没有什么区别吧,就运行的速度问题。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
35个人分成两组,一组10人,一组25人,则A、B
下列溶液中,pH最小的是A.使酚酞试液变红的溶
固安北开发区最新招工相关推荐
o记实录2结局是什么
以下哪些情况应当执行任职回避? A、夫妻双方
国真松花粉多少钱一盒,一盒多少袋
何谓自然观?在人类历史上唯物主义自然观经历
求《拍下卖身老公》txt全集
单选题2009年12月,国务院正式批复《黄河三角
英语过去式come-came变化规律是属于o变a的吗
87邀请码是什么?谁有发一个
我买了一个3000型号的渔轮用在2米4的海杆上会
80老头让22小女友
五彩炒饭注意事项
雄蛙与雌蛙区别
推荐资讯
有名气的连锁网咖都有哪些?
1990年1万韩元等于多少人民币
ios11正式版和ios10哪个更流畅
单选题有关生态系统的正确叙述是A.愈简单的生
新闻组是不是论坛
单选题2010年10月9日,国家发改委就“居民阶
我想把一下9句话作为我公司企业文化,大家有
斗门白蕉车站到中山大信新家园怎么坐车快
GTA4装了L3EVO-ENB N++会出现晚上什么都看不
偃师方圆驾校王亚静科一多少分
小米6#小米6能带着淋浴吗
急急,,,,有谁知道汉寿到邵阳的联系电话吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?