Elementary question on const

Discussion in 'C++' started by Last Timer, Jan 30, 2005.

  1. Last Timer

    Last Timer Guest

    I encountered the following code in Bruce Eckel's online book. Can you
    please clarify what "const char* const data;" means? Thanks
    //: C01:MyError.cpp {RunByHand}

    class MyError {
    const char* const data;
    public:
    MyError(const char* const msg = 0) : data(msg) {}
    };

    void f() {
    // Here we "throw" an exception object:
    throw MyError("something bad happened");
    }

    int main() {
    // As you'll see shortly, we'll want a "try block" here:
    f();
    } ///:~
     
    Last Timer, Jan 30, 2005
    #1
    1. Advertising

  2. Last Timer

    Mike Wahler Guest

    "Last Timer" <> wrote in message
    news:...
    > I encountered the following code in Bruce Eckel's online book. Can you
    > please clarify what "const char* const data;" means?


    Doesn't the book explain it?

    > //: C01:MyError.cpp {RunByHand}
    >
    > class MyError {
    > const char* const data;


    This means that the data member 'data' is a const
    pointer to a const type 'char' object. I.e. neither
    the pointer nor what it points to may be modified.
    (If you try, your compiler should complain).

    -Mike
     
    Mike Wahler, Jan 30, 2005
    #2
    1. Advertising

  3. Last Timer

    David Harmon Guest

    On 30 Jan 2005 11:31:14 -0800 in comp.lang.c++, "Last Timer"
    <> wrote,
    >please clarify what "const char* const data;" means? Thanks


    The first "const" means the characters pointed to cannot be changed
    via this pointer. The second one means the pointer value cannot be
    changed.
     
    David Harmon, Jan 30, 2005
    #3
  4. Last Timer wrote:
    > I encountered the following code in Bruce Eckel's online book. Can you
    > please clarify what "const char* const data;" means? Thanks


    Pointers have two attributes that can be constant:
    the content of the pointer and the object {date} it
    points to.

    Many people say that reading from right to left
    is easier.
    const char * const data;
    ^ ^-- The pointer is constant.
    |-- The data is constant.

    When the pointer is constant, it cannot point
    to other objects. When the data is constant,
    the data cannot be modified by dereferencing
    the pointer.

    --
    Thomas Matthews

    C++ newsgroup welcome message:
    http://www.slack.net/~shiva/welcome.txt
    C++ Faq: http://www.parashift.com/c -faq-lite
    C Faq: http://www.eskimo.com/~scs/c-faq/top.html
    alt.comp.lang.learn.c-c++ faq:
    http://www.comeaucomputing.com/learn/faq/
    Other sites:
    http://www.josuttis.com -- C++ STL Library book
    http://www.sgi.com/tech/stl -- Standard Template Library
     
    Thomas Matthews, Jan 30, 2005
    #4
  5. Last Timer

    Last Timer Guest

    Thanks for your kind replies. Do you read it Left to Right or vice
    versa to determine "first" and "second"?

    The C++ for Dummies saz on pg 63

    const char * pcc="This is a constant string";
    char * const cpc="tjhis is also a string";
    *pcc='a'; //illegal
    *cpc ='b';//legal
    pcc="another string" ; //legal
    cpc="another string"; illegal

    I'm trying to develop a mnemonic to remember these. Instead of rote
    learning may be someone can help me figure this out logically.
    Thanks again.
     
    Last Timer, Jan 30, 2005
    #5
  6. Last Timer

    Mike Wahler Guest

    "Last Timer" <> wrote in message
    news:...
    > Thanks for your kind replies. Do you read it Left to Right or vice
    > versa to determine "first" and "second"?
    >
    > The C++ for Dummies saz on pg 63
    >
    > const char * pcc="This is a constant string";
    > char * const cpc="tjhis is also a string";
    > *pcc='a'; //illegal
    > *cpc ='b';//legal
    > pcc="another string" ; //legal
    > cpc="another string"; illegal
    >
    > I'm trying to develop a mnemonic to remember these. Instead of rote
    > learning may be someone can help me figure this out logically.


    http://www.ericgiguere.com/articles/reading-c-declarations.html
    Yes, it's about C, but applies to C++ as well. (But of course it
    won't cover the 'C++-only' stuff such as class members, etc.
    I don't know of a web link for that, but this one should give you
    a good start.)

    Also, google for a utility called 'cdecl', which can take
    a C declaration and translate it to English. It's available
    for most platforms, and is supplied with some.

    -Mike
     
    Mike Wahler, Jan 30, 2005
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    11
    Views:
    1,143
  2. Javier
    Replies:
    2
    Views:
    606
    James Kanze
    Sep 4, 2007
  3. 0m
    Replies:
    26
    Views:
    1,160
    Tim Rentsch
    Nov 10, 2008
  4. fungus
    Replies:
    13
    Views:
    930
    fungus
    Oct 31, 2008
  5. Replies:
    2
    Views:
    552
    Andrew Koenig
    Feb 9, 2009
Loading...

Share This Page