Date: Wed, 21 May 2025 09:34:24 +0200
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?
string b = “hello”;
auto var = switch(b){
case “hi”: { return 42; }
case “hello”: { return 43; }
default: { return 0; } // probably should be mandatory
};
Cheers, Filip
Wiadomość napisana przez Zhao YunShan via Std-Proposals <std-proposals_at_[hidden]> w dniu 21 maj 2025, o godz. 04:15:
--
switch
is a concept familiar to all programmers. Most languages useswitch
with strings, including JS, Golang, PHP, etc.match
seems a bit unusual in comparison.
Indeed, using a
constexpr
hash function can construct a perfect hash, but my idea is to have the compiler handle this task rather than doing it manually myself.
Regards
At 2025-05-21 01:42:45, "Nikolay Mihaylov" <nmmm_at_[hidden]> wrote:
my 5 centsThe 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:btw, you can use switch with strings, kind of, using constexpr hash function and assuming not hash collisions (manual perfect hash)RegardsNikolayOn 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++, theswitch
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 leverageswitch
-like behavior to replace lengthyif...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
Std-Proposals mailing list
Std-Proposals_at_[hidden]
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
Received on 2025-05-21 07:34:42