C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

初期化子を使用したC++17Ifステートメント


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

上記の例では、変数「ran​​dom_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;
}

上記の例では、変数「ran​​dom_num」のスコープはif-elseブロックに制限されています。したがって、この変数はこのブロックの外ではアクセスできません。驚くべきことに、実際の出力に影響を与えることなく、変数のスコープを厳密に保ちます。

出力

上記のコードをコンパイルして実行すると、次のような出力が生成されます-

943513352 is an even number

−毎回乱数を生成しているため、同じマシンでも実行ごとに出力が異なります。


  1. JavaScriptのfinallyステートメントを例を挙げて説明します。

    finallyステートメントは、エラーの有無に関係なく、tryandcatchブロックの後に常に実行されます。 以下は、JavaScriptのfinallyステートメントのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&

  2. JavaScript WITHステートメントの用途は何ですか?

    WITHステートメントは、指定されたプロパティのデフォルトオブジェクトを指定し、長くて長いオブジェクト参照を書き込まないようにするために使用されます。指定されたオブジェクトをスコープチェーンの先頭に追加します。 以下はJavaScriptのwithステートメントのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="