2013-05-05 48 views
2

我已經在實施這樣的事情difficults:C++參考副本的麻煩(STL對)

int a = 5; 
int& b = a; 
pair <int, int> test; 
test.first = b; 
a = 1000; 

test.first值不會改變,很明顯,但我希望它改變,所以我想創建pair <int&, int&>,但我不能因爲編譯器。

我的目的就是要改變test.first,我怎麼能實現它(不使用int*指針,是)?

回答

0

您不能在STL容器中存儲引用。原因是因爲施工後無法分配參考。引用始終被初始化爲指向某個對象,但不能被重新分配。因此引用類型不符合容器內部使用的類型要求。這就是你的編譯器抱怨的原因。

如果你想要這種功能,你需要存儲指針。

以下問題是性質相似的: stl-stores-references-or-values

+0

謝謝你!它讓我很失望 – NinjaTurtle 2013-05-05 15:20:53

+0

不客氣!真的,使用指針沒有任何問題。如果您已完成,請將此問題標記爲已回答。 – 2013-05-05 15:29:44

5

在C++ 11可以使用reference_wrapper。你的代碼會變成

#include <functional> 
int a = 5; 
auto b = ref(a); 
b.get() = 3; 
cout<<a<<endl; 
pair <reference_wrapper<int>, int> test(b, 0); 
a = 1000; 
cout<<test.first<<endl; 
+0

謝謝你!這很酷 – NinjaTurtle 2013-05-05 15:21:50

+0

請問爲什麼你改變了接受的答案? – jozefg 2013-05-05 18:24:53