Jan*_*ana 3 c++ switch-statement
在我意识到语句需要是常量之前,我想在switch语句中使用宏函数.示例(不编译):
#define BAND_FIELD1(B) (10 * B + 1)
...
#define BAND_FIELD7(B) (10 * B + 7)
int B = myField % 10;
switch (myField) {
case BAND_FIELD1(B):
variable1[B] = 123;
break;
case BAND_FIELD7(B):
variable7[B] = 321;
break;
...
}
Run Code Online (Sandbox Code Playgroud)
我宁愿使用if .. else:
if (myField == BAND_FIELD1(B)
variable1[B] = 123;
else if (myField == BAND_FIELD7(B)
variable7[B] = 321;
Run Code Online (Sandbox Code Playgroud)
为什么C++ switch语句仅限于常量表达式?
C++的优势之一是它的静态检查.该switch陈述是一种静态控制流构造,其功能在于能够(静态地)检查是否已经考虑了所有案例,并且能够合理地分组案例(例如,通过公共部分进行分组).
如果要动态检查条件,可以使用各种技术(if语句,条件运算符,关联数组,虚函数等)来实现.
为什么c ++ switch语句仅限于常量表达式?
因为switch语句执行的检查是静态的.这意味着需要在编译时知道表达式.
在C++ 11中,您可以使用constexpr(如果表达式由其他常量表达式派生),对您有利.例如,考虑这个函数(替换你的#define):
inline constexpr int BAND_FIELD1(int B) {
return 10 * B + 1;
}
Run Code Online (Sandbox Code Playgroud)
用于以下代码的简化版本:
constexpr int myField = 0;
constexpr int B = myField % 10;
int variable1 = 0;
switch (myField) {
case BAND_FIELD1(B):
variable1 = 123;
break;
// ...
default: break;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,上面的代码很容易编译.
| 归档时间: |
|
| 查看次数: |
1839 次 |
| 最近记录: |