C++ Logo

std-proposals

Advanced search

Re: Initialisers in ternary operators

From: Garrett May <garrett.ls.may_at_[hidden]>
Date: Fri, 11 Sep 2020 11:38:39 +0100
>
> Hm .. who said,(in the context of C++ talk): "don't be clever unless you
> really have to"?

I'm not really sure what that means?

Either way, my personal preference would be in support of Richard Hodges's
suggestion. I've found GCC's expression statements to be useful in the
past, and I think standardising it would be a perfect solution for this. It
avoids the weirdness of having an initializer only for ternary operators
that Ville Voutilainen mentioned (due to the syntax of ternaries) whilst
also providing a way for scope to yield a value.

On Fri, 11 Sep 2020 at 10:58, Dusan Jovanovic (DBJ) <dbj_at_[hidden]> wrote:

> Hm .. who said,(in the context of C++ talk): "don't be clever unless you
> really have to"?
>
> On Fri, 11 Sep 2020 at 11:24, Garrett May via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
>
>> 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
>>>
>> --
>> Std-Proposals mailing list
>> Std-Proposals_at_[hidden]
>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>>
>

Received on 2020-09-11 05:42:21