2017-05-12 4 views
0

のは、私はC++で次のプログラム例があるとしましょう:参照タイプの例の質問

#include <iostream> 
using namespace std; 

int main (int argc , char** argv) { 

int a = 1; 
int b = 2; 
int& aRef = a; 
int& bRef = b; 
aRef = bRef; // This just sets aRef to point to b? 
aRef = 3; // Now aRef points to a new int 3 not stored in a other variable? 
// a = 3 b = 2 
bRef = 4; 
// a = 3 b = 4 
aRef = long(&bRef); // Why do we need long casting here? 
bRef = 5; 
// a: varying b = 5 // Why is a varying? 
aRef = bRef; 
bRef = 6; 
// a = 5 b = 6 // Why a no more varying? 

} 

誰かがラインでそれをラインを説明すると、おそらくエラーを明らかにしてもらえますか?私は特に私に不明な行にコメントを追加しました。

+1

ヒント:参照を再割り当てすることはできません。参照はエイリアスとみなすことができ、一度作成すると変更することはできません。 –

+0

私は、デバッガを使ってプログラムを進めることをお勧めします。これは多くを明確にするはずです。 –

+0

この行 'aRef = long(&bRef);'は非常に奇妙なので、私は戻ってサンプルシートをチェックします。それは他の質問には合わないので、プロダクションコードで見れば、私が著者の意図を理解していることを確認するためにコードをレビューしてください。 –

答えて

3
#include <iostream> 
using namespace std; 

int main (int argc , char** argv) { 
    int a = 1; 
    int b = 2; 
    int& aRef = a;   // aRef is now another name for a 
    int& bRef = b;   // bRef is now another name for b 
    aRef = bRef;   // same as a = b 
    aRef = 3;    // same as a = 3 
    bRef = 4;    // same as b = 4 
    aRef = long(&bRef); // &bRef is the same as &b - i.e. take address of b - stores address in a 
    bRef = 5;    // same as b = 5 
    aRef = bRef;   // same as a = b 
    bRef = 6;    // same as b = 6 

} 
+0

imhoは答えに 'aRef = long(&bRef);'は奇妙であり、コンパイラが'aRef = int(&bRef);'(または 'static_cast'としてさらに良い) – user463035818

+0

@tobiと書かれています。投稿されたとおり、確かに素晴らしいコードではありませんし、精度を失うかもしれないと言われていますが、それは奇妙です。 –

+0

参照を介して変数のアドレスを取得することは、私が参照していた問題ではありませんが、アドレスをintに格納することです – user463035818