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;
}

标准输出:

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

我使用没有额外参数的 g++ v4.7 来编译这段代码。

4

4 回答 4

8

好吧,类的Point内部A是恒定的,但是由于它是一个引用而不是恒定,因此您可以随意更改,并且所有引用也会更改。为了简化,引用只是一种花哨的指针。ppp

于 2012-09-05T11:54:59.920 回答
4

p本身不是 const。A.p是...用引用引用非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 回答