1

定数変数に値を渡すとき、なぜこの変数が変更されるのか疑問に思います。

#include <cstdio>

struct point
{
    int x, y, z;
};

class A
{
    public:
        A(const point &p) :
           p(p)
        {
             printf("(%d,%d,%d)\n", p.x, p.y, p.z);
        }

        void do_smth()
        {
            printf("(%d,%d,%d)\n", p.x, p.y, p.z);
        }

        const point &p;
};

int main(int argc, const char *argv[])
{
    point p = {1, 1, 1};
    A a(p);
    p.y = 4;
    a.do_smth();
    return 0;
}

stdout:

(1, 1, 1)
(1, 4, 1)

このコードをコンパイルするために、追加の引数なしでg++v4.7を使用します。

4

4 に答える 4

8

クラスのPoint内部は一定ですが、それは一定ではない参照であるため、好きなだけ変更でき、へのすべての参照も変更されます。簡単にするために、参照は単なる一種の派手なポインタです。Appp

于 2012-09-05T11:54:59.920 に答える
4

pそれ自体はconstではありません。A.pis ...参照で非const変数をconst参照しても、魔法のようにそれを作成することはありませんconst

于 2012-09-05T11:55:07.177 に答える
1

constこれは、値がこの参照を通じて変更できないことを意味し、まったく変更されないことを意味します。

于 2012-09-05T11:56:47.140 に答える
0

変数は、一定ではない場所で変更します。do_smth()メソッドで変更することはできません。試してみてください。

定数としてクラスに渡しても、オブジェクトはまったく変更されません。

于 2012-09-05T11:55:36.370 に答える