const修飾子
C言語では、たとえば、定数を定義するために#defineを使用することに慣れています。
#define MAX 100
実際、このメソッドは前処理中に文字を置き換えるだけで、すべての「MAX」を「100」に置き換えます。その後、MAX識別子はプログラムに存在しなくなります。
このMAXは変数ではなく、型がなく、メモリを占有せず、エラーが発生しやすくなります。
C ++は、定数を定義するためのより柔軟で安全な方法を提供します。つまり、constを使用して定数を変更します。次に例を示します。
const int MAX=100;
ここでのMAXには、タイプがあり、ストレージユニットを占有し、アドレスがあり、ポインターを使用してそれを指すことができますが、その値は変更できません。
次のコードを見てください。
#include<iostream>
using namespace std;
int main()
{
int a = 1;
#define T1 a+a;
#define T2 T1-T1;
cout << "T2 is " << T2 ;
return 0;
}
一見、プログラムの結果が印刷されているように見えます
T2は0です
しかし、このプログラムの実際の結果は
T2は2です
その理由は、8行目の文が次のように解釈されるためです。
cout<<"T2 is "<<a+a-a+a<<endl;
プログラムが#defineの代わりにconstを使用している場合、このエラーは発生しません。次のように:
#include<iostream>
using namespace std;
int main()
{
int a = 1;
int const T1=a+a;
int const T2=T1-T1;
cout << "T2 is " << T2 ;
return 0;
}
結果:
したがって、C ++では、定数を定義するために#defineの代わりにconstを使用することをお勧めします
const変更されたポインター
1.たとえば、定数へのポインタ。
const char * name ="hyx"; //声明指向常量的指针
ポインタは、それが指すアドレスを変更できますが、指す定数を変更することはできません。
name[3]='a'; //错误,不允许改变指针所指的常量
name="xxxxxxx"; //合法,可以改变指针所指的地址
2.定数ポインターは、ポインターが指すアドレスの定義を定数として参照します
名前が示すように、ポインタのアドレスは一定であり、変更することはできませんが、ポインタが指すデータは変更できます。
3.定数への定数ポインタ
アドレスもアドレス内のデータも変更できません。
説明
1. constを使用して整数定数を定義する場合、キーワードintは省略できます。たとえば、次の2つの定義は同等です。
const int MAX=100; const MAX=100;
2.定数が作成されると、プログラム内のどこでも変更できなくなります。
3. #defineで定義された定数とは異なり、constで定義された定数は独自のデータ型を持つことができるため、C ++はコンパイル時に厳密な型チェックを実行し、コンパイル時の検出性が高くなります。
4.関数の仮パラメーターをconstで記述して、関数内で仮パラメーターが変更されないようにすることもできます。