Are addresses of const members const?

Scott Meyers sdm at cs.brown.edu
Thu Feb 7 07:27:19 AEST 1991


For both ANSI C and as-ANSI-as-we-have C++, are the members of a const
struct themselves const?  Consider this:

    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?  If so,
there should be a type mismatch between the expression being returned
(const char *) and the function's return type (char *).  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.

The same question can be put this way:  is the following legal?

    const struct foo x;
    char **p = &(x.data);  /*  lhs = char **, rhs = const char **  */

If the members of a const structure are themselves supposed to be const,
I'd appreciate it if you'd point me to an authoritative reference that says
so.  For C++, I looked in the ARM, but couldn't find anyplace where it said
what should happen.  For C, all I've got is the second (ANSI C-based)
edition of K&R, but I couldn't find any information in there, either.

Thanks,

Scott

-------------------------------------------------------------------------------
What do you say to a convicted felon in Providence?  "Hello, Mr. Mayor."



More information about the Comp.std.c mailing list