You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中实现类似C#风格的switch表达式?

C++中类似C#风格的switch表达式与模式匹配

C++20及以后的标准已经原生支持类似C#的switch表达式,并且附带模式匹配能力,无需依赖if-else阶梯来实现这类逻辑。

基础用法示例(对应你的C#代码)

针对你给出的随机值分支场景,C++20的写法几乎和C#一致:

#include <random>
#include <string_view>

int main() {
    std::random_device rd;
    std::mt19937 rand(rd());
    std::uniform_int_distribution<> dist(0, 9);
    auto num = dist(rand);

    auto value = num switch {
        < 3 => "apple (30%)",
        < 7 => "banana (40%)",
        _ => "orange (30%)"
    };
}

这里的_是通配模式,会匹配所有未被前面分支覆盖的情况,和C#里的作用完全一致。switch表达式是编译时求值的,类型安全,返回值的类型会自动推导为所有分支返回值的公共类型(这里是const char*)。

复杂模式匹配场景

C++20的switch表达式还支持更复杂的模式,比如类型模式(用于处理std::variant这类多类型容器):

#include <variant>
#include <string>
#include <string_view>

std::string describe(std::variant<int, double, std::string> var) {
    return var switch {
        int i => "An integer: " + std::to_string(i),
        double d => "A double: " + std::to_string(d),
        std::string s => "A string: " + s,
        _ => "Unknown type"
    };
}

这种写法可以替代C++17中需要用std::visit配合if constexpr的繁琐逻辑,代码可读性大幅提升。

C++20之前的替代方案

如果你的开发环境不支持C++20,确实只能通过if-else阶梯来实现类似逻辑,或者用lambda表达式、函数表等方式模拟,但这些方法都不如原生switch表达式简洁直观。比如:

// C++17及更早版本的模拟写法
const char* get_value(int num) {
    if (num < 3) return "apple (30%)";
    else if (num < 7) return "banana (40%)";
    else return "orange (30%)";
}

内容的提问来源于stack exchange,提问作者PoctorDepper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 02:44:52