Are addresses of const members const?
Andrew Koenig
ark at alice.att.com
Fri Feb 8 06:20:27 AEST 1991
In article <63928 at brunix.UUCP> sdm at cs.brown.edu (Scott Meyers) writes:
> struct Foo {
> char *data;
> };
> char * f(const struct Foo x)
> {
> return x.data;
> }
> Within function f, x is a const. Is x.data therefore a const?
Yes, in both ANSI C and C++, but that doesn't have the implications
you think it does. For example, the ANSI C standard gives
the following example in section 3.5.3 (slightly abbreviated here):
const struct s { int mem; } cs = { 1 };
int * pi;
pi = &cs.mem; /* violates type constraints for = */
> Yet this example
> sails through 3 C++ compilers (g++, cfront 2.0, Sun cfront 2.1 beta) and
> one ANSI C compiler (gcc) without so much as a wimper.
When you say that x is a const Foo, that means that x.data is itself
a constant -- but that doesn't say anything about the memory to which
x.data points. In other words, the type of x.data is char *const,
which is distinct from const char *. In particular, there is no problem
assigning a char *const to a char *.
--
--Andrew Koenig
ark at europa.att.com
More information about the Comp.lang.c
mailing list