C++で定数を定義する二つの方法の比較

3934 ワード

転載元:http://www.cnblogs.com/huhu0013/archive/2010/09/13/1824987.html
定数は一定後、プログラム実行中に変更できない識別子です.C++において定数を定義するには、〹define、constの2つの方法が用いられます.たとえば:
#define PRICE 10 //      10
const int PRICE = 10; //      10
そのユーティリティはその理由があります.以下の二つのプログラムの対比を見てみます.
コード:
#include 

using namespace std;

#define PI 3.14159

//const double PI = 3.14159;

int main(int argc, char* argv[])

{  double square = 0,volume =0, radius=0;

    cout<<"       "<cin>>radius;

    square = 3.14159 * radius * radius;

    cout<<"     :"<"     :"<4 * 3.14159 * radius * radius * radius /3;

    cout<<"     :"<"     :"<
#include 

using namespace std;

#define PI 3.14159

//const double PI = 3.14159;

int main(int argc, char* argv[])

{  double square = 0,volume =0, radius=0;

    cout<<"       "<cin>>radius;

    square = PI * radius * radius;

    cout<<"     :"<"     :"<4 * PI * radius * radius * radius /3;

    cout<<"     :"<"     :"<
明らかにボール、円筒の面積なども要求すれば、常量の利点が明らかになります.定数を使うと次のような利点があります.意味のある定数エージェントの文字列で無意味な文字列は、明らかに多くの時間プログラマが忘れていたり、この文字列が何を意味するかを理解していません.2:PI(3.14159)のような定数が多く使われていると、入力ミスは保証されません.特に複雑で長い文字列の場合、定数を使うと全部変えられてエラーの確率が減ります.
この中で、名前はマクロ変数を定義しています.コンパイルする前に、プリプロセッサコマンドによってコード内のマクロ変数を指定された文字列に置換します.文法検査はしません.constantは変数タイプを含む定数を定義します.一般的にはconstantを使って定数を定義することを勧めます.コンパイルする時に文法検査をします.Effective c++のアイテム1の中で、「できるだけコンパイラを使って、前処理をしないようにする」というのは、言語自体の一部ではないように思われることが多いからです.また、マクロを使うと、思いがけない出力結果が出る場合があります.
defineとconstの比較
(1)const定数はデータタイプがあり、マクロ定数はデータタイプがない.コンパイラは前者のタイプのセキュリティチェックができます.後者は文字のみを置換し、タイプのセキュリティチェックがなく、文字の置換には予期せぬエラー(限界効果)が発生する可能性がある.(2)一部の集積化したデバッグツールは、const定数をデバッグすることができますが、マクロ定数をデバッグすることはできません.