求助C++语法问题

似水流年__ 2010-08-03 02:46:23
看了Tinyxml的代码
发现有下面两句代码
const TiXmlNode* FirstChild() const { return firstChild; }
TiXmlNode* FirstChild() { return firstChild; }


我想问下 这个两句代码有啥区别,如果调用FirstChild方法,调用的是哪一个呢?
...全文
256 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyytuo 2010-08-07
  • 打赏
  • 举报
回复
pjl110 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ben_jobs 的回复:]
正解

引用 2 楼 hastings 的回复:

假设你的类名叫Child,则:
void play(Child& cd);//调用第二个版本
void play(const Child& cd);//调用第一个版本
[/Quote]

很深奥!
学习
估计是正解!
飞檐走壁 2010-08-06
  • 打赏
  • 举报
回复
const 有点复杂
cnzdgs 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xhk456 的回复:]
那编译后的符号呢 是不是也加上了const标志呢?
[/Quote]
当然
似水流年__ 2010-08-06
  • 打赏
  • 举报
回复
那编译后的符号呢 是不是也加上了const标志呢?
  • 打赏
  • 举报
回复
FirstChild() const { return firstChild; }

这里的const表示,此成员函数不能修改类对象里的成量变量,只能访问。
luodx1021 2010-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yanran_hill 的回复:]
一个返回常量指针,一个返回普通指针:


C/C++ code


Tinyxml * pXml = ...;
TiXmlNode * ptr;
const TiXmlNode* ptr_const;

ptr = pXml->FirstChild();//调用TiXmlNode* FirstChild()
ptr_const = FirstChil……
[/Quote]
正确
icefairy 2010-08-05
  • 打赏
  • 举报
回复
学习了
ben_jobs 2010-08-05
  • 打赏
  • 举报
回复
正解
[Quote=引用 2 楼 hastings 的回复:]

假设你的类名叫Child,则:
void play(Child& cd);//调用第二个版本
void play(const Child& cd);//调用第一个版本
[/Quote]
cnzdgs 2010-08-04
  • 打赏
  • 举报
回复
两个函数分别对应两种类型的对象指针,当对象指针为const类型时,由于不能修改对象中的数据,所以只能返回const类型的数据指针。例如:
// const Tinyxml* p1;
// Tinyxml* p2;
p1->FirstChild()调用的是前一个函数
p2->FirstChild()调用的是后一个函数
似水流年__ 2010-08-04
  • 打赏
  • 举报
回复
是的 我也是这么认为的 但是它确实通过了编译
说明 应该是不同的符号了。。。。
InitialJ 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 xhk456 的回复:]
看了Tinyxml的代码
发现有下面两句代码
const TiXmlNode* FirstChild() const { return firstChild; }
TiXmlNode* FirstChild() { return firstChild; }

我想问下 这个两句代码有啥区别,如果调用FirstChild方法,调用的是哪一个呢?
[/Quote]
这两个函数有点奇怪,他们有相同的签名(参数列表都为空),不满足函数重载的条件,按理是不能通过编译的
InitialJ 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xhk456 的回复:]
那么编译过程中 这两个函数在obj文件中的符号应该不同吧 应该是什么呢
[/Quote]
在obj文件中是类似于?FirstChild@@YAXH@Z这种形式
似水流年__ 2010-08-03
  • 打赏
  • 举报
回复
那么编译过程中 这两个函数在obj文件中的符号应该不同吧 应该是什么呢
zuiyuezhou888 2010-08-03
  • 打赏
  • 举报
回复
const类型的对象调用第一个 不能修改 firstChild的值
非const类型对象调用第二个
oyljerry 2010-08-03
  • 打赏
  • 举报
回复
第一个返回的指针,不能修改,只能读
第二个可以修改,类似读写
hastings 2010-08-03
  • 打赏
  • 举报
回复
假设你的类名叫Child,则:
void play(Child& cd);//调用第二个版本
void play(const Child& cd);//调用第一个版本
yanran_hill 2010-08-03
  • 打赏
  • 举报
回复
一个返回常量指针,一个返回普通指针:



Tinyxml * pXml = ...;
TiXmlNode * ptr;
const TiXmlNode* ptr_const;

ptr = pXml->FirstChild();//调用TiXmlNode* FirstChild()
ptr_const = FirstChild() ;//调用const TiXmlNode* FirstChild() const

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧