scott@Apple.COM (scott douglass) (09/16/88)
If I have a class A and I have a const A* ap, should I be allowed to
invoke ap->f() which may modify *ap?
class A {
private:
int val;
public:
A() { val = 0; }
void stab(int i) { val = i; }
int get() { return val; }
};
main()
{
A a;
a.stab(4); // this is fine
const A* ap = &a;
ap->stab(5); // this is questionable
const A ca;
ca.stab(6); // this is questionable, too
}
CFront allows all of these, effectively ignoring the const in the cases I
marked as questionable. It would be useful to prohibit the questionable
cases above but instead be able to delcare a member function (such as get()
above) that had its implicit this argument declared as a const pointer. I will
even be so bold as to propose an ugly, flawed syntax which I trust someone
can improve on (please):
class A {
private:
int val;
public:
A() { val = 0; }
void stab(int i) { val = i; }
const:
int get() { return val; }
};
main()
{
A a;
a.stab(4); // this is fine
int i = a.get(); // this is fine, too
const A* ap = &a;
ap->stab(5); // this is illegal
i = ap->get(); // this is fine, too
const A ca;
ca.stab(6); // this is illegal, too
i = ca.get(); // this is fine, too
}
--scott douglass
Any opinions above may be mine and are not necessarily those of Apple Computer.
domain: scott@apple.com UUCP: {nsc, sun, voder, well, dual}!apple!scott
CSNet: scott@Apple.CSNet AppleLink: Douglass1