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.