C++ Logo

std-proposals

Advanced search

Re: Initialisers in ternary operators

From: Garrett May <garrett.ls.may_at_[hidden]>
Date: Fri, 11 Sep 2020 10:24:58 +0100
>
> if (auto i = m.find(x); i == m.end())
> return nullptr;
> else
> return std::addressof(i->second);


This works fine when returning from a function, but not as well when
storing a local value.

On Fri, 11 Sep 2020 at 10:15, Bo Persson via Std-Proposals <
std-proposals_at_[hidden]> wrote:

> On 2020-09-11 at 08:56, Richard Hodges via Std-Proposals wrote:
> > GCC already has expression statements as an extension.
> >
> > I don't think it would hurt to standardise this into the language.
> >
> > https://godbolt.org/z/sb63dz
> >
> > e.g.:
> > return ({
> > auto i = m.find(x) ;
> > i == m.end() ? nullptr : std::addressof(i->second);
> > });
> >
>
> What's the supposed advantage of using a ternary operator here?
>
> Note that gcc/godbolt produces *exactly* the same machine code for
>
>
> if (auto i = m.find(x); i == m.end())
> return nullptr;
> else
> return std::addressof(i->second);
>
>
>
> >
> > On Fri, 11 Sep 2020 at 09:19, Dmitry Dmitry via Std-Proposals
> > <std-proposals_at_[hidden] <mailto:std-proposals_at_[hidden]>>
>
> > wrote:
> >
> > Just write and use a find wrapper like these:
> >
> >
> > It was just an example.
> > If we start considering solving it via wrappers/helpers, then I
> > would just create something like findOr(key, value) function.
> >
> > But, anyway, it seems that the idea is not worth it...
> > Thanks for the feedback.
> >
> > --
> > Dmitry
> > *_Sent from gmail_*
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>

Received on 2020-09-11 04:28:39