C++ Logo

std-proposals

Advanced search

Re: [std-proposals] A draft for modern switch

From: Jeremy Rifkin <rifkin.jer_at_[hidden]>
Date: Thu, 22 May 2025 23:55:56 -0500
How do you want the compiler to optimize this for you?

Also note that focusing only on fallthrough isn’t very representative as
most switch usage does not involve case fallthrough like this.

Jeremy

On Thu, May 22, 2025 at 21:56 Zhihao Yuan <zy_at_[hidden]> wrote:

> On Thursday, May 22nd, 2025 at 1:07 PM, Jeremy Rifkin via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
>
> > Wow, if you believe that C++ must care
> > about performance, then you may want
> > to consider supporting a switch that
> > tests strings!
>
> There is no optimization that is unique to switch. Compilers optimize
> if-else chains just fine.
>
>
> I want to write
>
> switch (foo()) {
> case "old-label":
> migrate();
> case "new-label":
> arg &= flag;
> work1(arg);
> break;
> case "second-case":
> work2(arg);
> }
>
> Please show me how to express this in if...else,
> and which compiler optimizes it fine.
>
> --
> Zhihao Yuan, ID lichray
> The best way to predict the future is to invent it.
> _______________________________________________
>
>
> Jeremy
>
>
> On Thu, May 22, 2025 at 1:45 PM Zhihao Yuan via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
>
>> On Thursday, May 22nd, 2025 at 10:53 AM, Nikolay Mihaylov via
>> Std-Proposals <std-proposals_at_[hidden]> wrote:
>>
>> My 5 cents again :)
>>
>> I am strongly against modifying switch in this way :)
>> C++ is C and C++, is not Javascript or PHP where nobody cares about
>> performance.
>>
>>
>> Wow, if you believe that C++ must care
>> about performance, then you may want
>> to consider supporting a switch​ that
>> tests strings! What a compiler can do to
>> optimize a pattern matching that tests
>> strings but simulates fall-through between
>> the cases?
>>
>> --
>> Zhihao Yuan, ID lichray
>> The best way to predict the future is to invent it.
>> _______________________________________________
>>
>>
>> This is exactly why match were proposed.
>>
>> On Wed, May 21, 2025 at 4:56 PM Jason McKesson via Std-Proposals <
>> std-proposals_at_[hidden]> wrote:
>>
>>> On Wed, May 21, 2025 at 3:34 AM Filip via Std-Proposals
>>> <std-proposals_at_[hidden]> wrote:
>>> >
>>> > I agree, it seems like a better idea to have switch in non constexpr
>>> context available, to act like a nicer option acting like if else.
>>> >
>>> > Maybe I’m missing the key functionality of match, but it looks like a
>>> different syntax for something that we already have.
>>> >
>>> > I agree that assignment with match looks like a good idea, why
>>> wouldn’t we add that to the switch statement?
>>>
>>> Because we're getting pattern matching anyway, which is a superset of
>>> what switch can do. There's no point in improving a legacy feature
>>> when it is simultaneously being rendered obsolete.
>>>
>>> > string b = “hello”;
>>> > auto var = switch(b){
>>> > case “hi”: { return 42; }
>>> > case “hello”: { return 43; }
>>> > default: { return 0; } // probably should be mandatory
>>> > };
>>>
>>> ```
>>> b match {
>>> "hi" => return 42;
>>> "hello" => return 43;
>>> _ => return 0;
>>> }
>>> ```
>>> --
>>> 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 2025-05-23 04:56:13