1. 程式人生 > >c++ 引用型別【&】需注意之第一次有效性

c++ 引用型別【&】需注意之第一次有效性

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; //還有這裡 } } } };