home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.std.c++
- Path: sparky!uunet!microsoft!hexnut!jimad
- From: jimad@microsoft.com (Jim Adcock)
- Subject: Re: Type System
- Message-ID: <1993Jan12.214547.20528@microsoft.com>
- Date: 12 Jan 93 21:45:47 GMT
- Organization: Microsoft Corporation
- References: <1993Jan4.194318.5340@lucid.com> <C0Iy9o.9x@frumious.uucp> <1993Jan9.001948.28388@lucid.com>
- Lines: 34
-
- In article <1993Jan9.001948.28388@lucid.com> jss@lucid.com (Jerry Schwarz) writes:
- >In article <C0Iy9o.9x@frumious.uucp>, pat@frumious.uucp (Patrick Smith) writes:
- ||> | If an lvalue has non-const type,
- ||> | then it refers to a mutable object.
- ||>
- ||> There is another loophole. :-(
- ||> But it's (I hope) an unusual type of situation. :-)
- ||>
- ||> struct A { A(); /*...*/ };
- ||> A* pa;
- ||> A::A { pa = this; }
- ||>
- ||> void f() {
- ||> const A a;
- ||> // Now pa has non-const type but points to an immutable object.
- ||> }
- |
- |You're right. I knew about that loophole, but forgot about it when
- |I posted my original item. If anyone has ideas for a clean way
- |to close this loophole, I'd be interested to hear them.
-
- A* pa;
-
- A::A() const
- {
- pa = this; // compile-time error: non-const ptr to const object
- }
-
- Such a const ctor can only give its members or base parts values via
- the colon section initializers. Members cannot be changed within the
- body of the constructor. For backwards compatibility, if you don't
- declare a const ctor, then the loophole would be allowed to continue
- in ctors of that class, and in which case members could continue to
- be changed within the body of the ctor.
-