我想知道何时将值传递给常量变量,为什么这个变量可以改变。
#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而没有额外的参数来编译这段代码。
答案 0 :(得分:8)
嗯,Point
类中的A
是不变的,但因为它是引用到p
,它不常数,您可以根据需要更改p
,并且对p
的所有引用也会更改。为简化起见,引用只是一种奇特的指针。
答案 1 :(得分:4)
p
本身不是常量。 A.p
是...引用带有const
引用的非const
变量并不会奇怪地使其成为const
。
答案 2 :(得分:1)
const
表示该值不能通过此引用更改,而不是它根本不会更改。
答案 3 :(得分:0)
您可以更改变量,它不是常量。您无法在do_smth()
方法中进行更改,请尝试使用。
将某个类作为常量传递并不会更改对象。