| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1116 人关注过本帖, 1 人收藏
标题:这里为什么错了?老师们能否回答一下
只看楼主 加入收藏
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
规定必须用初始化列表...而我的思考结果是:
举个例,
class A
{
  int &ref_;
  const int i;
  int a,b;
public:
   A(int a_,int b_) {  a=ref_; i=b; b=b_; }
};
假如能够执行,那么这个能保证怎样的语义?我们来看下扩展构造函数:
A::A(int a_,int b_)
{
    this->a=this->ref_;  //很明显,ref_并没有绑定.
    this->i=this->b;  //此时b却没赋值.
    this->b=this->b_;
}
对于第一句可以看出是未定义行为..而第二句却是没意义的.由此可见,如果支持这样的做法,那么引用和常量都不能保证良好的行为.
但是如果必须规定初始化列表,我们来看看(改变下构造函数):
A::A(int a_,int b_):ref_(a_),i(a),b(b_){ a=ref_; }
扩展函数:
A::A(int a_,int b_)
{
   ref_=a_; //  进行绑定.
   i=a; //进行初始化
   b=b_;
  //初始化列表执行完,才是括号内的语句
  a=ref_;  //此时ref_已经绑定过.
}
这样可以保证比第一个更好的行为.....就这么多

樱花大战,  有爱.
2008-09-10 18:44
ailing
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-9-3
收藏
得分:0 
刚在一个群里问了一下,私有成员是const型和引用的时候,构造函数必须要用初始话列表才行,
2008-09-10 18:59
ailing
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-9-3
收藏
得分:0 
听了版主的解释更明白了,谢谢版主了
2008-09-10 19:02
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
回复 13# ailing 的帖子
本人薄见.....仅供参考...

樱花大战,  有爱.
2008-09-10 19:05
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
回复.
const 变量声明时候应该初始化.引用声明的时候也应该初始化.
2008-09-10 20:41
快速回复:这里为什么错了?老师们能否回答一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022460 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved