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) {
   // Do stuff when Boolean condition is true
} else {
   // Do stuff when Boolean condition is false
}

示例

现在让我们使用这个新的带初始化语句的 if 语句编写相同的代码:

 实时演示

#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
   srand(time(NULL));
   // C++17 if statement with initializer
   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

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

更新于: 2019年9月26日

12K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.