const vector<A> vs vector<const A> vs const vector<const A>

Discussion in 'C++' started by Javier, Sep 4, 2007.

  1. Javier

    Javier Guest

    Hello,
    thanks for the replies to my questions.
    I have one more:
    class A
    {
    public:
    m1() const;
    m2();
    };

    is there any difference between

    std::vector<const A> v;
    const std::vector<A> v;
    const std::vector<const A> v;

    and, what about:

    A a1;
    v.push_back(a1);
    v[0].m1()
    v[0].m2()

    in the three cases?
    Javier, Sep 4, 2007
    #1
    1. Advertising

  2. Re: const vector<A> vs vector<const A> vs const vector<const A>

    On Sep 4, 10:53 pm, Javier <> wrote:
    > Hello,
    > thanks for the replies to my questions.
    > I have one more:
    > class A
    > {
    > public:
    > m1() const;

    missing return value
    > m2();

    missing return value;
    >
    > };
    >


    > is there any difference between
    >
    > std::vector<const A> v;


    > const std::vector<A> v;

    v is a const vector whose elements are of type A. Effectively,
    v.push_back() (or any other operation that changes the vector) is not
    allowed on v
    > const std::vector<const A> v;

    doesnot compile
    >
    > and, what about:
    >
    > A a1;
    > v.push_back(a1);
    > v[0].m1()
    > v[0].m2()

    Talking about the 2nd case (const std::vector<A> v), since v is a
    const vector, non-const member functions cannot be called, const
    member functions can be.

    -N
    Neelesh Bodas, Sep 4, 2007
    #2
    1. Advertising

  3. Javier

    James Kanze Guest

    Re: const vector<A> vs vector<const A> vs const vector<const A>

    On Sep 4, 7:53 pm, Javier <> wrote:

    > thanks for the replies to my questions.
    > I have one more:
    > class A
    > {
    > public:
    > m1() const;
    > m2();
    > };


    > is there any difference between


    > std::vector<const A> v;
    > const std::vector<A> v;
    > const std::vector<const A> v;


    Yes. The first and third aren't legal. An element of a
    container must support assignment, and A const doesn't.

    In general, in the standard library, declaring a container to be
    const (i.e. your second declaration) means that 1) the topology
    (number and order of elements) cannot change, and 2) the value
    of the individual elements cannot change.

    > and, what about:


    > A a1;
    > v.push_back(a1);
    > v[0].m1()
    > v[0].m2()


    > in the three cases?


    Illegal. As I said above, the declaration of v is illegal in
    the first and third cases above. And if v is declared as in the
    second case, push_back cannot be used on it. Given something
    like:

    std::vector< A > const v( 1, A() ) ;

    however, v[0].m1() is legal, v[0].m2() no.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
    James Kanze, Sep 4, 2007
    #3
    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. zhou
    Replies:
    9
    Views:
    455
    Andrey Tarasevich
    Sep 2, 2003
  2. pmatos
    Replies:
    6
    Views:
    23,738
  3. Replies:
    8
    Views:
    1,896
    Csaba
    Feb 18, 2006
  4. Replies:
    2
    Views:
    531
    Andrew Koenig
    Feb 9, 2009
  5. Rushikesh Joshi
    Replies:
    0
    Views:
    349
    Rushikesh Joshi
    Jul 10, 2004
Loading...

Share This Page