如何用多分支可见表达式为const变量赋值(无需单独函数)
多分支const变量赋值的几种直观实现方式
针对你需要给const变量做多分支赋值的场景,不用单独封装函数的话,有以下几种直观的实现方式:
1. 嵌套三目运算符(适合分支较少的场景)
直接嵌套三元表达式,逻辑紧凑,无需额外代码:
const int x = animal == "cat" ? 0 : (animal == "dog" ? 1 : 2);
添加括号能让层级更清晰,避免歧义。如果每个分支的表达式不复杂,这种写法最直接,无需跳转就能看懂逻辑。
2. 就地执行的Lambda表达式(适合分支多或逻辑复杂的场景)
利用C++11及以后支持的Lambda,在变量初始化时就地定义并执行逻辑,既满足const变量的初始化要求,又能写出清晰的分支结构:
const int x = [&]() { if (animal == "cat") { return 0; // 此处可替换为任意复杂表达式 } else if (animal == "dog") { return 1; // 支持合法的返回逻辑 } else { return 2; } }();
这种写法的优势在于,哪怕每个分支有多行逻辑或复杂计算,都能就地实现,不用单独写函数,可读性比嵌套三目高很多。
如果习惯用switch结构,可以先在Lambda里把字符串映射成枚举类型再判断(C++的switch不支持直接用字符串作为case条件):
const int x = [&]() { enum AnimalType { Cat, Dog, Unknown }; AnimalType type = Unknown; if (animal == "cat") type = Cat; else if (animal == "dog") type = Dog; switch (type) { case Cat: return 0; case Dog: return 1; default: return 2; } }();
内容的提问来源于stack exchange,提问作者g9k
相关产品推荐
相关产品推荐

