[LLVMdev] [RFC] Relax the rules on const auto&? (was Re: r203179 - [C++11] Replacing iterators redecls_begin() and redecls_end() ...)

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Mar 7 08:58:57 PST 2014


+llvmdev

On Mar 7, 2014, at 5:15 AM, Tobias Grosser <tobias at grosser.es> wrote:

> On 03/07/2014 01:40 PM, Aaron Ballman wrote:
>> On Thu, Mar 6, 2014 at 7:12 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
>>> On Thu, Mar 6, 2014 at 7:10 PM, Tobias Grosser <tobias at grosser.es> wrote:
>>>> I wonder if you could use 'auto const &' in some of these cases?
>>>> 
>>>> http://llvm.org/docs/CodingStandards.html#beware-unnecessary-copies-with-auto
>>> 
>>> I'll look into it once I've gotten the build bots green again. Thank
>>> you for the reminder. :-)
>> 
>> I looked into this a bit more, and I'm not certain there's any real
>> benefit. Everything returned from these containers is already a
>> pointer, so this would change them from const Decl * to const Decl *&,
>> which doesn't strike me as any better (or worse). So I am thinking I
>> will continue without the const auto & in these cases (and as I move
>> other pointer-based ranges forward), but thank you for the reminder!
> 
> I follow your reasoning. It seems the coding standards are formulated a little to strictly. Duncan, would it make sense to put an exception
> for cases like this into the standard. It seems to be a very common case in fact.

Unless the pointers themselves are changing, the only benefit here is
consistency.  But ranges of iterators should use const&, since many
iterators are expensive to copy.

Accidental copies can be a huge headache, since they lead to subtle
bugs that are hard to track down (performance implications aside).

I still favour applying the rule generally, since consistency matters.
But we could text like:

    Pointer ranges are a common exception.

Any other opinions?



More information about the llvm-dev mailing list