On Sat, Nov 27, 2010 at 3:02 PM, Caolán McNamara <caol...@redhat.com> wrote: > On Sat, 2010-11-27 at 13:39 -0600, Norbert Thiebaud wrote: >> On Sat, Nov 27, 2010 at 12:09 PM, Christian Lohmaier >> <lohmaier+libreoff...@googlemail.com> wrote: >> > Hi *, >> > >> > On Sat, Nov 27, 2010 at 5:40 PM, Takeshi Abe <t...@fixedpoint.jp> wrote: >> >> [cppcheck patches] >> > >> > I'm curious: Why does cppcheck "complain" about "for.... i++" and >> > suggests/demands pre-increment instead (for ... ++i)? >> > >> > Is there any noticable difference? >> >> In my opinion: >> If there is a noticeable difference -- in a place where the 2 forms >> are indeed interchangeable -- then this is a bug to be filed with the >> compiler. >> And if they are not interchangeable in the context, then cppcheck >> should be silent.... > > Just in case anyone was wondering, this is about stl iterators not plain > ints or floats. Compilers do typically have no problem with plain old > types. I'm a fan of saying what you mean nevertheless even in those > cases :-) > > As Takeshi pointed out in another mail, the postfix form returns a copy > of the iterator as it was before the increment, while the prefix form > returns a reference to the current value after its increment. So postfix > requires an extra copy which makes it inherently slower. > > I'm not so sure that compilers can optimize STL postfix operators with > the ease they do for basic types. Their implementation differs quite a > bit from one impl to another.
Yes, I'm victim of my deep entrenchment in the C-world... operator-overloading is not something that comes naturally to me... > I expect that the full impl would need to > be visible to the compiler for it to have a chance to do the right > thing. Typically that's probably the case and the full template is > available to the compiler in each compilation unit in order to elide out > the code patchs that generate the old copy which the postfix form > returns, so they *may* be able to do it. But you're at the mercy of what > the compiler can do at that stage, the compiler may be forced to e.g. > stop inlining and optimize for size, and so make function calls, and at > that stage they nay merge all the postfix++ calls together, with the > corresponding performance loss in the cases where the temporary isn't > needed. > > Anyway, I reckon its worth tackling the cppcheck warnings about the > postfix operator being used where a prefix would suffice. I'm always all for making warnings disappears. :-) Norbert > > C. > > _______________________________________________ > LibreOffice mailing list > LibreOffice@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/libreoffice > _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice