能力值:
( LV12,RANK:240 )
|
-
-
2 楼
虽然很简单 但我实在搞不懂啊 大家帮帮忙撒
|
能力值:
( LV12,RANK:240 )
|
-
-
3 楼
怎么没有人帮忙啊 贴了几天了啊 是不是源代码错误啊 总要有人回答一下啊
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
m_pNodeRoot应该是CBTNode<T>*类型的吧?
CBTNode<T>*& GetRoot();返回的是m_pNodeRoot的引用,
CBTNode<T>* GetRoot() const;返回的是m_pNodeRoot的值,不过这个值是const的,不允许修改。
比如有下面的两个变量:
CBTNode<T>* &p = GetRoot();//call CBTNode<T>*& GetRoot();
CBTNode<T>* const q = GetRoot();//call CBTNode<T>* GetRoot() const;
那么p就成为了m_pNodeRoot的一个引用,就是说&p == &m_pNodeRoot.而q只是数值上和m_pNodeRoot相等。
=======================================================
小弟新来的,不知道上面有没有说错什么,请高手指点。
|
能力值:
( LV12,RANK:240 )
|
-
-
5 楼
楼上说的我懂了 谢谢 但是 return *(&(m_pNodeRoot)); 没有见过
请问 *(&(m_pNodeRoot)) 和 m_pNodeRoot 区别是什么呢
*(&(m_pNodeRoot)) 怎么理解呢 高手说说撒
|
能力值:
( LV6,RANK:90 )
|
-
-
6 楼
*(&(m_pNodeRoot))先获取m_pNodeRoot的地址然后再取该地址上的值
|
能力值:
( LV12,RANK:240 )
|
-
-
7 楼
照楼上说的话 程序中*(&(m_pNodeRoot))可以用 m_pNodeRoot 代替 都是返回根结点的地址
这两种写法的区别是什么 *(&(m_pNodeRoot))可不可以用代替 为什么m_pNodeRoot
|
能力值:
( LV12,RANK:240 )
|
-
-
8 楼
照楼上说的话 程序中*(&(m_pNodeRoot))可以用 m_pNodeRoot 代替 都是返回根结点的地址
这两种写法的区别是什么 *(&(m_pNodeRoot))可不可以用m_pNodeRoot代替 为什么
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
编译后在ida或od中看?
|
能力值:
( LV12,RANK:210 )
|
-
-
10 楼
照楼上说的话 程序中*(&(m_pNodeRoot))可以用 m_pNodeRoot 代替 都是返回根结点的地址
这两种写法的区别是什么 *(&(m_pNodeRoot))可不可以用m_pNodeRoot代替 为什么
=====================
可以。 首先,m_pNodeRoot就是一个CBTNode<T>* 类型,
对于返回A类型的引用, 那么可以直接返回一个A类型的对象,
只要这个对象不是函数局部对象就可以,
显然, 这里的A表示了CBTNode<T>*. 直接返回
m_pNodeRoot, 这也是最标准的写法。
*(&(m_pNodeRoot)), 老实说, 我认为这完全是鳖足没必要
的写法, 我估计作者当时一看引用, 就加了一个&, 但是编译
不过去啊, 于是有到前面加了一个*.......
当然, 还有一种原因, 一般返回一个对象的引用, 往往是返回
自己的引用, 但是c++里面只有this表示自己的指针, 没有
语法能表示自己的引用, 所以一般拷贝构造函数, 为了能连等,
都这么写.
const A & A::A(const A &)
{
return *this;
}
可能作者习惯了引用就返回某个指针的*, 于是就先&得到
m_pNodeRoot的地址, 在*取值....
|
能力值:
( LV12,RANK:240 )
|
-
-
11 楼
最初由 sbright 发布 编译后在ida或od中看?
好主意 提问时还真没有想到 一开始我也认为这两种写法是一样的 但不肯定 以为是什么安全机制 谢谢楼上的耐心讲解
|
|
|