Интересно, когда я передаю значение постоянной переменной, почему эта переменная может измениться.
#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 без дополнительных аргументов для компиляции этого кода.
Ну, то Point
внутри A
класс является постоянным, но, как это ссылка в p
что это не постоянный, вы можете изменить p
сколько угодно и все ссылки на p
также изменится Чтобы упростить, ссылки — это всего лишь причудливый указатель.
p
само по себе не является постоянным. A.p
это … Ссылка на неconst
переменная с const
ссылка волшебным образом не делает это const
,
const
означает, что значение не может измениться через эту ссылку, не то, чтобы это не изменилось вообще.
Вы меняете переменную на месте, где она не постоянна. Вы не можете изменить это в do_smth()
метод, попробуйте.
Переход к какому-либо классу как константе вообще не меняет объект.