C++ Logo

std-proposals

Advanced search

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

From: Jens Maurer <jens.maurer_at_[hidden]>
Date: Tue, 20 May 2025 13:48:03 +0200
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 11:48:09