c++ 引用型別【&】需注意之第一次有效性
阿新 • • 發佈:2019-01-08
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; //還有這裡
}
}
}
};