Yes and no. I think Alan is correct in the sense that if you use for
(auto &&r : , and it compiles OK, the object code is going to be
correct and optimal. I just have my aesthetic opinion that it can
make the code slightly harder to maintain.
On Mon, Oct 29, 2018 at 6:47 PM Pushkar Pradhan
<pprad...@oath.com.invalid> wrote:
>
> It seems like auto isn't that "auto". You still need to be familiar with
> all the gotchas.
>
>
> On Mon, Oct 29, 2018 at 11:48 AM Alan Carroll
> <solidwallofc...@oath.com.invalid> wrote:
>
> > I tend to use `for ( auto && x : container)`. That seems to work well and
> > gives the compiler more flexibility. I recommend it unless there's a
> > specific reason to not do so. Testing with a std::vector<int> and a
> > function that takes (int) it does the correct thing - it passes the int
> > values directly to the function.
> >
> > On Mon, Oct 29, 2018 at 11:57 AM Walt Karas <wka...@oath.com.invalid>
> > wrote:
> >
> > >
> > >
> > https://github.com/apache/trafficserver/blob/master/proxy/logging/LogObject.cc#L1008
> > >
> > > We also have cases of the opposite problem, using a reference for a
> > > container of pointers / iterators / string_views or other small
> > > objects. But this is less serious and probably just an aesthetic
> > > issue (gets optimized out).
> > > On Fri, Oct 26, 2018 at 5:32 PM Pushkar Pradhan <pprad...@oath.com>
> > wrote:
> > > >
> > > > Good catch. In Modern Effective C++ Scott Myers talks about a few
> > > scenarios when auto doesn't do what the programmer intended.
> > > > Earlier I was inclined to suggest that we should avoid auto in ATS but
> > I
> > > think it's better to make mistakes and learn.
> > > >
> > > > On Fri, Oct 26, 2018 at 3:21 PM Walt Karas <wka...@oath.com.invalid>
> > > wrote:
> > > >>
> > > >> This line of code:
> > > >>
> > >
> > https://github.com/apache/trafficserver/blob/master/iocore/net/SSLSNIConfig.cc#L59
> > > >>
> > > >> should be:
> > > >> for (const auto &item : Y_sni.items) {
> > > >>
> > > >> This causes item to be of type const Item & instead of Item. Thus
> > > >> avoiding making a copy of each element in the vector. Look at this
> > > >> example code:
> > > >>
> > > >> https://godbolt.org/z/7j0LFT
> > > >>
> > > >> Note in the assembler code how foo() calls the copy constructor for
> > > >> Item in the for loop, and foo2() does not.
> > > >
> > > >
> > > >
> > > > --
> > > > pushkar
> > >
> >
> >
> > --
> > *Beware the fisherman who's casting out his line in to a dried up
> > riverbed.*
> > *Oh don't try to tell him 'cause he won't believe. Throw some bread to the
> > ducks instead.*
> > *It's easier that way. *- Genesis : Duke : VI 25-28
> >
>
>
> --
> pushkar