Date: Tue, 20 May 2025 20:42:45 +0300
my 5 cents
The idea of switch is not to make the life of the programmer easier, the
idea is to make a jump table so this can be compiled in 2-3 instructions.
There is a new control flow statement called "match". lots of languages
uses it already:
https://www.php.net/manual/en/control-structures.match.php
btw, you can use switch with strings, kind of, using constexpr hash
function and assuming not hash collisions (manual perfect hash)
https://stackoverflow.com/questions/650162/why-cant-the-switch-statement-be-applied-to-strings/46711735#46711735
Regards
Nikolay
On Tue, May 20, 2025 at 8:29 PM Zhihao Yuan via Std-Proposals <
std-proposals_at_[hidden]> wrote:
> Are you looking for
> https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3627.html ?
>
> --
> Zhihao Yuan, ID lichray
> The best way to predict the future is to invent it.
> _______________________________________________
>
> On Tuesday, May 20th, 2025 at 4:38 AM, Zhao YunShan via Std-Proposals <
> std-proposals_at_[hidden]> 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.
>
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
The idea of switch is not to make the life of the programmer easier, the
idea is to make a jump table so this can be compiled in 2-3 instructions.
There is a new control flow statement called "match". lots of languages
uses it already:
https://www.php.net/manual/en/control-structures.match.php
btw, you can use switch with strings, kind of, using constexpr hash
function and assuming not hash collisions (manual perfect hash)
https://stackoverflow.com/questions/650162/why-cant-the-switch-statement-be-applied-to-strings/46711735#46711735
Regards
Nikolay
On Tue, May 20, 2025 at 8:29 PM Zhihao Yuan via Std-Proposals <
std-proposals_at_[hidden]> wrote:
> Are you looking for
> https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3627.html ?
>
> --
> Zhihao Yuan, ID lichray
> The best way to predict the future is to invent it.
> _______________________________________________
>
> On Tuesday, May 20th, 2025 at 4:38 AM, Zhao YunShan via Std-Proposals <
> std-proposals_at_[hidden]> 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.
>
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
Received on 2025-05-20 17:43:32