initializer Vs assignment list in constructor

Discussion in 'C++' started by Pallav singh, Jan 16, 2008.

  1. Pallav singh

    Pallav singh Guest

    How can we justify that initializer list is better in performance
    than assignment list in constructor of C++ ??
    Pallav singh, Jan 16, 2008
    #1
    1. Advertising

  2. Pallav singh

    Jack Klein Guest

    On Tue, 15 Jan 2008 22:51:15 -0800 (PST), Pallav singh
    <> wrote in comp.lang.c++:

    > How can we justify that initializer list is better in performance
    > than assignment list in constructor of C++ ??


    Why would we want to justify it? The C++ standard does not specify or
    require such a thing.

    An initializer list is the preferred way to initialize the members in
    a constructor. It is the only possible way to initialize reference
    members and constant members. So just use initializer lists.

    --
    Jack Klein
    Home: http://JK-Technology.Com
    FAQs for
    comp.lang.c http://c-faq.com/
    comp.lang.c++ http://www.parashift.com/c -faq-lite/
    alt.comp.lang.learn.c-c++
    http://www.club.cc.cmu.edu/~ajo/docs/FAQ-acllc.html
    Jack Klein, Jan 16, 2008
    #2
    1. Advertising

  3. Pallav singh

    James Kanze Guest

    Re: initializer Vs assignment list in constructor

    On Jan 16, 8:09 am, Jack Klein <> wrote:
    > On Tue, 15 Jan 2008 22:51:15 -0800 (PST), Pallav singh
    > <> wrote in comp.lang.c++:


    > > How can we justify that initializer list is better in
    > > performance than assignment list in constructor of C++ ??


    > Why would we want to justify it? The C++ standard does not
    > specify or require such a thing.


    > An initializer list is the preferred way to initialize the
    > members in a constructor. It is the only possible way to
    > initialize reference members and constant members. So just
    > use initializer lists.


    You might add that by using an initializer list, you reduce the
    chances of accidentally using the variable before it has been
    initialized. It's part of the larger philosophy of never
    defining a variable without initializing it.

    --
    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, Jan 16, 2008
    #3
  4. On 2008-01-16 08:09, Jack Klein wrote:
    > On Tue, 15 Jan 2008 22:51:15 -0800 (PST), Pallav singh
    > <> wrote in comp.lang.c++:
    >
    >> How can we justify that initializer list is better in performance
    >> than assignment list in constructor of C++ ??

    >
    > Why would we want to justify it? The C++ standard does not specify or
    > require such a thing.


    No it does not, but it does guarantee some other things that makes it
    very probably that using the initialiser-list if slightly more
    efficient. Consider a class like this:

    class Foo
    {
    Bar bar;
    Baz baz;

    public:
    Foo(int a,int b);
    }

    And assume that both Bar and Baz each have constructors taking an
    integer, a default constructor, and a assignment operator.

    Before the body of the constructor starts to execute all members of the
    class have to be initialised (so that they are complete objects when the
    body of the constructor executes). If you want bar and baz to be objects
    created with a and b passed to their constructors and do not use an
    initialisation-list you would have to do something like this:

    Foo::Foo(int a, int b)
    {
    bar = Bar(a);
    baz = Baz(b);
    }

    Or alternatively use bar.set(a) or something like that. This means that
    in a worst case scenario you have to run the constructors of Bar and Baz
    twice just to create one Foo object. If you use an initialisation-list
    instead bar and baz will be constructed with the correct parameters
    before the body of Foo's constructor is executed.

    You can never get better performance by not using initialisation-lists,
    but you can sometimes get the same performance.

    --
    Erik Wikström
    Erik Wikström, Jan 16, 2008
    #4
  5. Pallav singh

    James Kanze Guest

    Re: initializer Vs assignment list in constructor

    On Jan 16, 6:58 pm, Erik Wikström <> wrote:
    > On 2008-01-16 08:09, Jack Klein wrote:


    > > On Tue, 15 Jan 2008 22:51:15 -0800 (PST), Pallav singh
    > > <> wrote in comp.lang.c++:


    > >> How can we justify that initializer list is better in
    > >> performance than assignment list in constructor of C++ ??


    > > Why would we want to justify it? The C++ standard does not
    > > specify or require such a thing.


    > No it does not, but it does guarantee some other things that
    > makes it very probably that using the initialiser-list if
    > slightly more efficient.


    Or not. The cases where there is a measurable difference are
    probably fairly rare.

    [...]
    > You can never get better performance by not using
    > initialisation-lists, but you can sometimes get the same
    > performance.


    I wouldn't say never---if I tried, I'm sure I could write some
    perverse code where default construction followed by assignment
    was faster than direct construction. Most of the time, however,
    there's just no difference.

    Performance isn't the motivation for initializer lists, however.
    The motivation is security---not having uninitialized variables
    floating around. (This isn't quite true, as the initialization
    expressions can reference other member variables---including
    those not yet initialized. But using initialization lists does
    reduce the risk enormously.)

    --
    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, Jan 17, 2008
    #5
  6. Pallav singh

    Marc Guest

    Marc, Jan 18, 2008
    #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. Razvan
    Replies:
    7
    Views:
    17,570
    Lee Fesperman
    Jul 4, 2004
  2. Matthias Kaeppler

    Initializer vs. Constructor assignment

    Matthias Kaeppler, May 7, 2005, in forum: Java
    Replies:
    4
    Views:
    1,012
    Tor Iver Wilhelmsen
    May 8, 2005
  3. Chris K
    Replies:
    1
    Views:
    572
    Victor Bazarov
    Apr 17, 2004
  4. ccs
    Replies:
    2
    Views:
    393
    Rolf Magnus
    Jun 7, 2004
  5. Replies:
    5
    Views:
    10,264
    Rolf Magnus
    Apr 15, 2005
Loading...

Share This Page