6

私は参照について多くの場所で読みました:

参照は const ポインタのようなものです

参照は常にオブジェクトを参照します

一度初期化されると、参照を再装着することはできません

最後の点についてはっきりさせておきたい。どういう意味ですか?

私はこのコードを試しました:

#include <iostream>
int main()
{
    int x = 5;
    int y = 8;

    int &rx = x;
    std::cout<<rx<<"\n";

    rx = y;    //Changing the reference rx to become alias of y
    std::cout<<rx<<"\n";
}

出力

5  
8

では、「参照を再装着できません」とはどういう意味ですか?

4

3 に答える 3

13

この行:

rx = y;

rx が y を指すようにしません。x の値を (参照を介して) y の値にします。見る:

#include <iostream>

int main()
{
    int x = 5;
    int y = 8;

    int &rx = x;
    std::cout << rx <<"\n";

    // Updating the variable referenced by rx (x) to equal y
    rx = y;    
    std::cout << rx <<"\n";
    std::cout << x << "\n";
    std::cout << y << "\n";
}

したがって、最初の代入後に rx が参照するものを変更することはできませんが、参照されているものの値を変更することはできます。

したがって、この例では、参照は定数ポインタ (ポインタ アドレスは定数であり、そのアドレスの値ではない) に似ています。ただし、重要な違いがあります。1 つの良い例 (Damon が指摘したように) は、一時変数をローカルの const 参照に割り当てることができ、コンパイラはそれらの有効期間を延長して、参照の有効期間中持続することです。

参照と const ポインターの違いに関するかなりの詳細は、この SO 投稿への回答にあります。

于 2012-07-10T08:49:51.070 に答える
6

x の値を y の値に変更しました :-)

于 2012-07-10T08:49:19.480 に答える