constキーワードの使い方のまとめ
3096 ワード
constはプログラミング中にできるだけ多く使用すべきキーワードで、可変オブジェクトを指定し、コンパイラはこの制約を強行し、コードの堅牢性を強化します.constは変数、パラメータを修飾するために使用することができ、関数の戻り値、関数自体は多才と言える.
1.const修飾変数 Effective C++条項2では,#define宣言のマクロ定義定数をできるだけconst宣言定数を用いて置き換える.(inline置換#defineの関数) const修飾ポインタ const修飾反復器 2.修飾関数パラメータ
constを使用して関数パラメータを修飾すると、このパラメータが関数で予期せぬ変更を受けないように保護されます.たとえば、文字列のコピー時に元の文字列を変更することは望ましくありません.
3.修飾関数の戻り値
constは、返されるポインタまたは参照を修飾し、ポインタが指すコンテンツまたは参照の内容が変更されないことを保護し、演算子の再ロードにもよく使用されます.結局、関数呼び出し式を左値にできないようにすることです.
4.const修飾メンバー関数
データ・メンバーを変更しない関数はconstとして宣言し、関数がデータ・メンバー(mutableメンバー変数を除く)を誤って変更しないようにします.メンバー関数をconstとして宣言するには、次の2つの利点があります.1つ目は、関数をより理解しやすくし、その関数がオブジェクトの内容を変えることができるか、どの関数が変えられないかを簡単に知ることです.第二に、constオブジェクトが非const関数にアクセスできないため、constメンバー関数のみがconstオブジェクトを処理できるようにする.
constメンバー関数の注意事項:
1.constメンバー関数非constメンバー関数を呼び出すことはできません
2.constメンバー関数参照値を返すと、必ずconst参照になります.
3.constメンバー関数内でメンバー変数を変更するには、メンバー変数をmutableタイプに設定する必要があります.
5.const-castの使用
const_castはC++演算子で、主に複合タイプのconstとvolatile属性を除去するために使用されます(実際に除去されていません).変数自体のconst属性は除去できませんが、変数の値を変更するには、ポインタ(または参照)のconst属性を除去し、間接的に変更するのが一般的です.
使用法:const_cast(expression)
const_経由cast演算子は、const type*をtype*に変換し、const type&をtype&に変換することもできます.
1.const修飾変数
#define pi 3.1415926
const double pi = 3.1415926
char s[] = "hitsz"
char* p = s;
const char* p = s; //p ,
char* const p =s; //p ,
const char* const p = s;//
vectorvec;
const vector::iterator it = vec.begin(); // T* const,
*it = 100;
it++; //error!!!it const
vector::const_iterator it = vec.begin(); // const T*
*it = 100; //error!!!
it++;
constを使用して関数パラメータを修飾すると、このパラメータが関数で予期せぬ変更を受けないように保護されます.たとえば、文字列のコピー時に元の文字列を変更することは望ましくありません.
void stringcp(char* strdes, const char* strsource)
3.修飾関数の戻り値
constは、返されるポインタまたは参照を修飾し、ポインタが指すコンテンツまたは参照の内容が変更されないことを保護し、演算子の再ロードにもよく使用されます.結局、関数呼び出し式を左値にできないようにすることです.
#include
using namespace std;
class A {
private:
int i;
int j;
public:
A(){i=0; j = 10;}
int & get_i(){ return i; }
const int & get_j(){ return j; }
};
void main(){
A a;
cout<
4.const修飾メンバー関数
データ・メンバーを変更しない関数はconstとして宣言し、関数がデータ・メンバー(mutableメンバー変数を除く)を誤って変更しないようにします.メンバー関数をconstとして宣言するには、次の2つの利点があります.1つ目は、関数をより理解しやすくし、その関数がオブジェクトの内容を変えることができるか、どの関数が変えられないかを簡単に知ることです.第二に、constオブジェクトが非const関数にアクセスできないため、constメンバー関数のみがconstオブジェクトを処理できるようにする.
#include
#include
#include
#include
#include
#include
using namespace std;
class MyIntArray
{
private:
static const int a = 100;
int p[a];
public:
MyIntArray()
{
for( int i = 0 ; i < a ; i++ )
{
p[i] = i;
}
}
const int & operator [](int n) const
{
return p[n];
}
int & operator [](int n)
{
return p[n];
}
};
int main(int argc, char *argv[])
{
MyIntArray array;// const
cout<
constメンバー関数の注意事項:
1.constメンバー関数非constメンバー関数を呼び出すことはできません
2.constメンバー関数参照値を返すと、必ずconst参照になります.
3.constメンバー関数内でメンバー変数を変更するには、メンバー変数をmutableタイプに設定する必要があります.
5.const-castの使用
const_castはC++演算子で、主に複合タイプのconstとvolatile属性を除去するために使用されます(実際に除去されていません).変数自体のconst属性は除去できませんが、変数の値を変更するには、ポインタ(または参照)のconst属性を除去し、間接的に変更するのが一般的です.
使用法:const_cast(expression)
const_経由cast演算子は、const type*をtype*に変換し、const type&をtype&に変換することもできます.
const int a = 3;
int &r = a; //error r const
const int& r =a;
int &r = const_cast(a);// a const
r++;