我已經在實施這樣的事情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*
指針,是)?
我已經在實施這樣的事情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*
指針,是)?
您不能在STL容器中存儲引用。原因是因爲施工後無法分配參考。引用始終被初始化爲指向某個對象,但不能被重新分配。因此引用類型不符合容器內部使用的類型要求。這就是你的編譯器抱怨的原因。
如果你想要這種功能,你需要存儲指針。
以下問題是性質相似的: stl-stores-references-or-values
在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;
謝謝你!這很酷 – NinjaTurtle 2013-05-05 15:21:50
請問爲什麼你改變了接受的答案? – jozefg 2013-05-05 18:24:53
謝謝你!它讓我很失望 – NinjaTurtle 2013-05-05 15:20:53
不客氣!真的,使用指針沒有任何問題。如果您已完成,請將此問題標記爲已回答。 – 2013-05-05 15:29:44