| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1047 人关注过本帖
标题:一个函数带来的三个疑惑!
只看楼主 加入收藏
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
 问题点数:0 回复次数:14 
一个函数带来的三个疑惑!
请大家仔细看下面一模一样的两个函数:
再看此函数前,请勿怀疑下面的函数本身有任何问题:

link_type & root() const
{ 问题1:
return (link_type&) header->parent; //(link_type&) 我猜是类型转化,不知道那位朋友能给点说法?
}

问题2:
link_type & root() const //const说明此函数为只读形式,其返回值不能被修改!
{ //link_type & 说明次函数返回值可以作为左值,即其返回值能被修改!
return (link_type&) header->parent; // 这样他们自相矛盾了!
}


再看下面对这个函数的调用:(请勿怀疑对此函数的调用上出了问题)
root()=0; 问题3:请大家给点看法?

[此贴子已经被作者于2007-2-11 11:24:59编辑过]

搜索更多相关主题的帖子: 函数 
2007-02-11 11:22
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用lixang在2007-2-11 11:22:28的发言:
请大家仔细看下面一模一样的两个函数:
再看此函数前,请勿怀疑下面的函数本身有任何问题:

link_type & root() const
{ 问题1:
return (link_type&) header->parent; //(link_type&) 我猜是类型转化,不知道那位朋友能给点说法?
} 1。我估计是子类象基类转换,返回一个基类的引用来引用这个子类的根

问题2:
link_type & root() const //const说明此函数为只读形式,其返回值不能被修改!
{ //link_type & 说明次函数返回值可以作为左值,即其返回值能被修改!
return (link_type&) header->parent; // 这样他们自相矛盾了!
}//2。这个const 只是说明这个函数内不能改变,返回值不属于那个范围
你说的情况是这样、 const link_type & root(),这样返回值才是不能改


再看下面对这个函数的调用:(请勿怀疑对此函数的调用上出了问题)
root()=0; 问题3:请大家给点看法?
这个有什么问题么 让该函数的this 的根为0


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2007-02-11 18:09
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 
song4 你好:
谢谢你的指点
下面我还是有点疑虑:
link_type & root() const
{
return (link_type&) header->parent;
}
这个const 只是说明这个函数内不能改变,返回值不属于那个范围 。
函数内不能改变?是指函数内的定义不能改变么?还是。。。
我不大名白?能否给我详细指点以下!
万分感激!

[此贴子已经被作者于2007-2-12 13:44:49编辑过]

2007-02-12 13:43
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
link_type & root() const
{
return (link_type&) header->parent;
}
header->parent在这个函数内不能改变,在这个函数之外吗就可以改变.
所以这个函数不会如你所说的自相矛盾.

=×&D o I p R e E n C g T l X&×=
2007-02-12 14:55
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 
以下是引用踏魔狼在2007-2-12 14:55:38的发言:
link_type & root() const
{
return (link_type&) header->parent;
}
header->parent在这个函数内不能改变,在这个函数之外吗就可以改变.
所以这个函数不会如你所说的自相矛盾.

link_type & root() const //有const限定
{
return (link_type&) header->parent;
}
link_type & root() //无const限定
{
return (link_type&) header->parent;
}

第一个函数有const限定 函数内容 :return (link_type&) header->parent
第二个函数无const限定 函数内容 :return (link_type&) header->parent;
他们都是函数的内容,区别在那里呢?
能否说明:谢谢!

[此贴子已经被作者于2007-2-13 12:08:57编辑过]

2007-02-13 12:08
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
无const可以这样
link_type & root() //无const限定
{
header->parent = header->Next; // 当然我假设这样是有效的
return (link_type&) header->parent;
}

有const不可以这样,想这样只能在函数以外.

=×&D o I p R e E n C g T l X&×=
2007-02-13 16:07
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 
以下是引用踏魔狼在2007-2-13 16:07:15的发言:
无const可以这样
link_type & root() //无const限定
{
header->parent = header->Next; // 当然我假设这样是有效的
return (link_type&) header->parent;
}

有const不可以这样,想这样只能在函数以外.
你的意思是说有const限定的函数不能写成下面的形式么?

link_type & root() const //有const限定
{
header->parent = header->Next; // 当然我假设这样是有效的
//但是我感觉到函数体内的语句是可以随意由自己定义的
//为何就不能多写一行 header->parent = header->Next;呢?
//我实在想不通,真希望能得到你的解释?
return (link_type&) header->parent;
}

2007-02-14 11:58
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
CONST 写在函数后面
表明这个函数体内不可以改变任何参数
写在函数头表明返回值不能改变
也就是说不能用返回值来接受其他东西
写在参数地方表示该参数不能变

多看书

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2007-02-16 13:06
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 
link_type & root() const
{
return (link_type&) header->parent;
}
link_type & root() const
{
return (link_type) header->parent;
}
请教着两个函数的区别?
2007-02-19 11:56
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
一个是返回该HEAD的引用
一个是返回与HEAD指象同一个的无名对象

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2007-02-19 23:04
快速回复:一个函数带来的三个疑惑!
数据加载中...
 
   



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

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