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

Sve*_*enK 1 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;
}
Run Code Online (Sandbox Code Playgroud)

标准输出:

(1, 1, 1)
(1, 4, 1)
Run Code Online (Sandbox Code Playgroud)

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

Som*_*ude 8

那么,Point内部A类是不变的,但因为它是一个参考,以p不是恒定的,你可以改变p,只要你喜欢尽可能多的和所有引用p也会随之改变.为了简化,引用只是一种奇特的指针.