C ++ 17 If语句与初始化

C ++ 17扩展了现有的if语句的语法。现在可以在if语句本身中提供初始条件。这种新语法称为“带有初始化程序的if语句”。此增强功能简化了常见的代码模式,并帮助用户保持范围紧凑。从而避免了变量泄漏到范围之外。

示例

让我们假设我们要检查给定的数字是偶数还是奇数。在C ++ 17之前,我们的代码通常如下所示:

#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
   srand(time(NULL));
   int random_num = rand();
   if (random_num % 2 == 0) {
      cout << random_num << " is an even number\n";
   } else {
      cout << random_num << " is an odd number\n";
   }
   return 0;
}

输出结果

当您编译并执行上述代码时,它将生成类似以下的输出-

1555814729 is an odd number

在上面的示例中,我们可以看到变量“ random_num”泄漏到了if-else范围之外。我们可以使用新的“带有初始化程序的if语句”语法轻松避免这种情况。

以下是“带有初始化程序的if语句”的语法:

if (init; condition) {
   //在布尔条件为真时执行操作
} else {
   //在布尔条件为false时执行操作
}

示例

现在让我们使用带有初始化程序的新if语句编写相同的代码-

#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
   srand(time(NULL));
   //C ++ 17 if语句带有初始化
   if (int random_num = rand(); random_num % 2 == 0) {
      cout << random_num << " is an even number\n";
   } else {
      cout << random_num << " is an odd number\n";
   }
   return 0;
}

在上面的示例中,变量“ random_num”的范围限于if-else块。因此,在此块之外无法访问此变量。令人惊讶的是,它使变量范围狭窄,而不会影响实际输出。

输出结果

当您编译并执行上述代码时,它将生成类似以下的输出-

943513352 is an even number

注意 -由于我们正在生成随机数,因此即使在同一台机器上,每次运行的输出也会有所不同。