c++ - 范围的切换语句

标签 c++ switch-statement range

有没有办法在处理范围的 C++ 中编写 switch 语句。 案例 0-10 做一个, 案例 20-40 做 b, 案例 40-80 做 c, 等等 我可以使用一堆 if else if 语句来写出来,但想知道是否有更有效的方法。

最佳答案

实际上,您可以通过 C 中的预处理器滥用来做到这一点(尽管在 C++ 中可能不会,因为 C++ 中的 P99 存在一些错误,我相信只要有足够的毅力就可以克服这些错误)。

请参阅以下示例,使用 P99 :

#include "p99.h"

#define P99_SWITCH_RANGE(from, to) P99_FOR(from, P99_MINUS(to, from), P99_SWITCH_RANGE_GLUE_HELPER, P99_SWITCH_RANGE_CASE_LABEL_MAKER_HELPER)
#define P99_SWITCH_RANGE_GLUE_HELPER(from, i, past, cur) past: cur
#define P99_SWITCH_RANGE_CASE_LABEL_MAKER_HELPER(from, x, i) case P99_ADD(from, i)

int main(int argc, const char *argv[]) {
    int x;
    scanf("%i", &x);

    switch (x) {
        P99_SWITCH_RANGE(20, 30):
        {
            puts("between 20 and 30");
        }
        default: {
            puts("not between 20 and 30");
        }
    }
}

请注意,此示例是左包容右排他的。我相信您可以修改宏以按照您喜欢的方式进行设置,因此这至少是一个不错的起点。

关于c++ - 范围的切换语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081089/

相关文章:

c# - 范围数据注释不起作用

c++ - 文件读取返回损坏的文件结尾

c++ - 大数据库操作出错

c++ - 我必须在 linux 的 c++ 中释放 "string* settings = new string[4]"的内存吗?

c++ - 最推荐的跨平台 C++ 库是什么?

php - 无法无错误地添加开关例程

java - 顶部带有默认 block 的 switch 语句的行为

c++ - 在案例中更改开关变量

swift - 如何快速将 "link"两个范围放在一起

python - python中range()函数的返回值是多少?