c++中的引用类型大家都有所了解,但是它的“第一次有效性
”常常被忽略。
什么是第一次有效性呢?就是引用类型只有在第一次附值时被当作引用,其它时候的附值被认为是对它所引用的内容进行的附值。
举个小例子:
#include <iostream>
using namespace std;
int main()
{
int a = 3;
int b = 4;
int& c = a;
c = b;
c = 5;
cout << a << b << endl ;
system("pause");
}
大家觉得输出会是多少呢?
是 3 5
吗?
但实际结果可能会让你困惑: 5 4
因为第一次附值后,c就是a的代名词
了, 且永远无法改变这个事实。
后而的附值操作实际是对a进行的。
为什么要把这个问题提出来?
因为我在使用的过程中出现了这种情况:Tree* & tree;
即“指针的引用”。
当我令
tree = tree->left;
tree = new Tree;
时无论如何不能正确输出。于是意识到了这个问题。
下面是部分代码:
解决办法就不在此呈现了。
struct Tree
{
Tree* left;
Tree* right;
int data;
int count;
Tree(int data_ = 0)
{
left = right = 0;
data = data_;
count = 0;
}
static void search(Tree* p, int aim)
{
Tree* & tree = p; // 就是这里
while(true)
{
if(tree == 0)
{
tree = new Tree(aim); // 实际是改变的形参 p的值。
break;
}
if(aim == tree->data)
{
tree->count++;
break;
}
if(aim < tree->data)
{
tree = tree->left; //还有这里
}else
{
tree = tree->right; //还有这里
}
}
}
};