C++ Logo

std-proposals

Advanced search

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

From: Zhao YunShan <dou1984_at_[hidden]>
Date: Tue, 20 May 2025 21:01:01 +0800 (CST)
What are the advantages of match over switch in this paper?




Any optimizations specific to switch constructs?




With the paper ID, I could try writing a paper about this.




At 2025-05-20 19:48:03, "Jens Maurer" <jens.maurer_at_[hidden]> wrote:
>
>This says "draft". Is there a paper anywhere?
>
>Have you reviewed the pending pattern matching proposal(s),
>such as https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2688r5.html ?
>
>Thanks,
>Jens
>
>
>On 20/05/2025 13.38, Zhao YunShan via Std-Proposals wrote:
>>
>> In C++, the |switch| statement is a fundamental control-flow construct originally designed to work only with integer types (|int|, |char|, |enum|, etc.). However, in real-world development, programmers often need to handle string-based (|std::string|) branching logic. While the standard syntax does not natively support strings, well-structured design patterns can still leverage |switch|-like behavior to replace lengthy |if...else if| chains, significantly improving code readability and conciseness.
>>
>> #include<iostream>
>> #include<string>
>> int main()
>> {
>> std::string router;
>> switch (router)
>> {
>> case "cpp":
>> std::cout << "cpp router selected.";
>> break;
>> case "hpp":
>> std::cout << "hpp router selected.";
>> break;
>> default:
>> std::cout << "Unknown router type.";
>> break;
>> }
>> return 0;
>> }
>>
>>
>> By leveraging compile-time static analysis, |switch| statements can be optimized into various efficient data structures:
>> *
>> *
>> * Jump tables* for few cases,
>> * Balanced binary search* for many branches,
>> * Hash tables* where supported.
>>
>> This ensures optimal time complexity (*O(1)* to *O(log n)*) even with large branch sets.
>>
>>

Received on 2025-05-20 13:01:14