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

如何从初始化列表返回值?替代Switch语句的实现可行性问询

不用数组变量,直接用初始化列表索引取值替代switch可行吗?

当然可行!你尝试的几种写法大部分都能达到目的,不过咱们得逐个掰扯清楚它们的合法性和注意事项:

  • 第一种写法:

    int X(int x) { return {1, 2, 3, 4}[x]; }
    

    这是C++11及以后支持的写法,本质是创建一个临时的原生数组,用初始化列表填充后直接通过下标访问。不过要注意:这种临时数组的类型是int[4],编译器会自动推导。另外,必须保证x的取值在0~3之间,越界访问会触发未定义行为——就像你写switch没处理default分支一样,得自己做好输入校验。

  • 第二种写法:
    你漏写了return关键字,修正后应该是:

    int X(int x) { return static_cast<std::array<int, 4>> ({1, 2, 3, 4})[x]; }
    

    这个是完全符合C++标准的写法!通过初始化列表构造一个临时的std::array对象,然后用下标运算符取值。std::array比原生数组更安全,比如很多编译器的debug模式会对std::array的下标访问做越界检查,能帮你更早发现问题。

  • 第三种写法:

    int X(int x) { return (int[])({1, 2, 3, 4})[x]; }
    

    这个用到了C99复合字面量,这并不是C标准里的特性,只是GCC、Clang等编译器提供的扩展支持。如果你的代码需要跨编译器兼容(比如用MSVC),这种写法可能会报错,所以不推荐在标准C代码里用它。

总的来说,如果你想写标准C代码,优先选第二种写法;如果追求简洁,第一种写法在支持C11及以上的编译器里也没问题。但不管用哪种,都要记得校验x的取值范围,避免越界踩坑!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:17:50