1、
constは通常の変数を変更します
constは変数を変更します。つまり、変数は定数であり、変更できません
const int x; // xは整数定数
const double x; // xはdouble定数です
constがポインターを変更する場合:
const int * x; // xは定数整数へのポインター
int * const x; // xは定数ポインターです。
const int * const x; // xは定数ポインターであり、定数
x も指します。*の右側は定数ポインターを意味し、*の左側は定数を意味します。
STLのイテレータはポインタでモデル化されているため、イテレータの役割はT *と同様です。
イテレータを装飾するためにconstを使用する場合:
const vector <int> :: iteator it; //これは定数イテレータであり、このイテレータへのポインタは変更できませんが、このイテレータが指す値は変更できます。
次のように、イテレーターが指すものを変更できない場合:
vector <int> :: const_iterator it;
2、
const変更された関数パラメーター
<span style="font-size:14px;">int &fun(const int x);</span>
<span style="font-size:14px;"></span>
<span style="font-size:14px;">函数的形参是一个普通的const变量:
1、 如果函数返回值一个non-const引用 , 那么就不能返回 x;
2、 x 的值在函数中不能被改变 , 非常量指针不能指向它 , 非常量引用也不能引用该变量。</span>
<span style="font-size:14px;">int &fun(const int x)
{
int *z = &x; //错误的
int *const z1 = &x; //错误的,因为z1不是一个指向常量的指针
const int *z2 = &x //正确的
int &z3 = x; //错误的, 因为z3不是一个常量引用
const int &z4 = x; //正确的
return x; //错误的 , 不是一个常量引用
}</span>
仮パラメーターがconstポインターまたはconst参照の場合、上記の通常の定数変数の使用法と同じです。
3. const変更されたメンバー関数
注:constで変更できるのはメンバー関数のみで、他の関数はconstで変更できません。
const変更メンバー関数に関する注意点:
1. constメンバー関数では、クラス内のすべての変数にconst属性が含まれ、ポインターのconst属性は、ポインター自体が定数ポインターであることを意味します。
2.したがって、constメンバー関数では、非const参照および非constポインターは使用できず、クラス内の変数(参照ポインターが指す値を除く)
3. constのみが異なる2つのメンバー関数をオーバーロードできます。の。
<span style="font-size:14px;">class xy
{
public:
xy():z(new char[10]) {}
xy(char *new_z)
{
int n = strlen(new_z);
z = new char[n+1];
strcpy(z , new_z);
}
const char &operator [](int si) const;
char &operator [](int si);
private:
char *z;
int x;
double y[10];
};
const char &xy::operator[](int si) const
{
cout<<"const"<<endl;
return *(z+si);
}
char &xy::operator[](int si)
{
cout<<"no-const"<<endl;
return const_cast<char &>(
static_cast<const xy&>(*this)[si]
);
}
</span>
クラスには、2つの関数がconst属性によってオーバーロードされることがよくあります。これら2つの関数が同じ関数を持っている場合、コードの重複を避けるために
、上記の例のように、非constバージョンの関数に関数のconstバージョンを呼び出させることがよくあります。演算子[]が機能します。
現時点では、const_castとstatic_castの2種類の強制遷移を使用する必要があります。
const_cast:変数のconst属性を削除します。
const int x;
int&y = const_cast <int&>(x);
static_cast:通常の変数間の強制変換、const属性を変数に追加
int x;
double y = static_cast <double>(x);