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

static const vs #define vs enum?


"static const"

「staticconst」は基本的にstatic(ストレージ指定子)とconst(型修飾子)の組み合わせです。

静的変数は、変数の有効期間と可視性/アクセシビリティを決定します。つまり、変数が静的変数として宣言されている場合、プログラムの実行中は常にメモリに残りますが、関数(変数が定義されている場所)が終了すると、通常の変数または自動変数は破棄されます。

constは型修飾子です。型修飾子は、型システムを介して値に関する追加情報を表すために使用されます。変数がconst型修飾子を使用して初期化されると、その値のそれ以上の変更は受け入れられません。

したがって、staticとconstを組み合わせると、static constを使用して変数を初期化すると、プログラムが実行されるまでその値が保持され、値の変更も受け入れられないと言えます。

#include<iostream>
using namespace std;
int main(){
int input = 10;
static const int value = 5;
input += value;
cout << input;
return 0;
}

"#define"

プリプロセッサコマンドはDIRECTIVESと呼ばれ、ポンド記号またはハッシュ記号(#)で始まります。 #の前に空白を入れないでください。最後にセミコロンは必要ありません。

前処理フェーズで実行できることの多くは次のとおりです

  • #includeディレクティブによる他のファイルの包含

  • #defineディレクティブによるシンボリック定数とマクロの定義

一部のプリプロセッサディレクティブを使用して、条件付きで一部のプリプロセッサディレクティブをコンパイルまたは実行することもできます。

-C ++プログラムの前処理フェーズは、プログラムがコンパイルされる前に発生します。 C ++プリプロセッサは、ソースコードがコンパイルされる前に実行されるプログラムです。

プログラムに必要なヘッダーファイルをインクルードできる#includeプリプロセッサディレクティブの操作方法をすでに学習しました。この議論または私たちの議論は、#defineプリプロセッサディレクティブに捧げられています。

#defineプリプロセッサを使用すると、シンボリック名と定数を定義できます。たとえば、

#define PI 3.14159

このステートメントは、プログラム内で発生するすべてのPIを3.14159に変換します。

C++#defineの例

ここで、PIのすべての出現が、#defineディレクティブで定義された値である値3.14159に置き換えられる完全な例を考えてみましょう。

Input: PI 3.14159
Output: Area of Circle 314.15

#include<iostream>
using namespace std;
#define PI 3.14159
int main() {
   int r = 10;
   float cir;
   cir = PI * (r * r);
   cout<<"Area of Circle: "<<cir<<endl;
}

"列挙型"

enumはユーザー定義のデータ型であり、変数の値のセットを指定します。変数は、可能な値の小さなセットから1つしか取得できません。 enumキーワードを使用して列挙型を定義します。

enum direction {East, West, North, South}dir;

ここで、列挙名は指定された4つの値のうちの1つのみを取ることができる方向であり、宣言の最後のdirは列挙変数です。

これを理解するための簡単な例を見てみましょう:

ここでは、列挙型変数dirに値Westを割り当てました。これは、dirの値を表示すると、1と表示されます。これは、デフォルトでは、値が0から昇順であるためです。つまり、Eastは0、Westは1、Northです。は2、南は3です。

Input: direction {East, West, North, South} dir=West
Output: 1

#include<iostream>
using namespace std;
enum direction {East, West, North, South} dir;
int main(){
   dir = West;
   cout<<dir;
   return 0;
}

列挙型変数を宣言する別の方法

上記の例で、列挙型宣言中に列挙型変数dirを宣言したことを確認したように、列挙型変数を宣言する別の方法があります。

#include <iostream>
using namespace std;
enum direction {East, West, North, South};
int main() {
   direction dir;
   dir = South;
   cout<<dir;
   return 0;
}

出力

3

C++で列挙型を使用する理由

列挙型とは何か、プログラムでそれらを使用する方法を理解したので、なぜそれらを使用するのかについて説明しましょう:

列挙型は、変数に可能な値のセットの1つがあると予想される場合にのみ使用されます。たとえば、方向を保持するdir変数があります。 4つの方向があるため、この変数は4つの値のいずれかを取ることができます。この変数に別のランダムな値を割り当てようとすると、コンパイルエラーがスローされます。これにより、コンパイル時のチェックが増加し、無効な定数を渡すことによって発生するエラーが回避されます。

それらが頻繁に使用されるもう1つの重要な場所は、caseブロックが期待するすべての値を列挙型で定義できるswitchcaseステートメントです。このようにして、スイッチの括弧で渡す列挙型変数が、受け入れてはならないランダムな値をとらないようにすることができます。


  1. JavaScriptConst

    JavaScriptのconst宣言は、他の値に再割り当てしたり、後で再宣言したりできない変数を作成します。 ES2015で導入されました。 以下はJavaScriptconst宣言のコードです- 例 <!DOCTYPE html> <html> <head> <style>    body {       font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;    } </sty

  2. swiftで静的変数をどこでどのように使用するのですか?

    静的変数をどこでどのように使用するかを理解する前に、まず「swiftの静的変数とは何ですか?」を理解しましょう。 静的変数 静的変数は、クラスのすべてのインスタンスまたはオブジェクト間で値が共有される変数です。変数を静的として定義すると、オブジェクトではなくクラスにアタッチされます。静的変数のメモリは、クラスのロード時に割り当てられます。 上の図を理解しましょう。クラスSampleがあり、2つのオブジェクトs1とs2があります。 s1とs2の両方に変数「a」が別々にありますが、共通の共有変数「b」があります。この「b」は静的変数です。 次に、静的変数をどこでどのように使用する必要が