常量类成员不是常量 - C ++

时间:2012-09-05 11:52:51

标签: c++ const

我想知道何时将值传递给常量变量,为什么这个变量可以改变。

#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 个答案:

答案 0 :(得分:8)

嗯,Point类中的A是不变的,但因为它是引用p,它常数,您可以根据需要更改p,并且对p的所有引用也会更改。为简化起见,引用只是一种奇特的指针。

答案 1 :(得分:4)

p本身不是常量。 A.p是...引用带有const引用的非const变量并不会奇怪地使其成为const

答案 2 :(得分:1)

const表示该值不能通过此引用更改,而不是它根本不会更改。

答案 3 :(得分:0)

您可以更改变量,它不是常量。您无法在do_smth()方法中进行更改,请尝试使用。

将某个类作为常量传递并不会更改对象。