[C ++の基本的な知識] const修飾子

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で記述して、関数内で仮パラメーターが変更されないようにすることもできます。

おすすめ

転載: blog.csdn.net/weixin_43962381/article/details/110704357