Effective c++メモ-constに対する理解
2416 ワード
一.const,enum,inlineでできるだけdefineの代わりに
defineは役割ドメインを重視せず、パッケージ性も提供できないため、class固有の定数を作成できません.
単純変数については、defineの代わりにconstオブジェクトまたはenums、類似関数のマクロについてはinline関数、defineの代わりにinline関数を使用することが望ましい
定数ポインタを定義します.定数定義は通常ヘッダファイルに格納されるため、ポインタをconstとして宣言する必要があります.ヘッダファイルに定数の変わらないchar*based文字列を定義する場合は、constを2回書く必要があります.
2回目に注意しなければならないのはclass固有変数です.定数の役割ドメインをclassに制限するには、classメンバーになる必要があります.この変数にはエンティティが1つ以上あることを確認し、定数が1つのエンティティしかないことを確認し、staticメンバーになる必要があります.
C++では、あなたが使用しているすべてのものに定義式を提供する必要がありますが、classの専属変数でstaticで整数であれば、アドレスを取らない限り、定義式を提供する必要はありません.また、定義式const int A:n=5を提供する必要があります.二.可能な限りconst constを使用すると、任意の場所、class、ファイル、関数、ブロックの役割ドメイン、またはclassesの内部のメンバー変数を修飾することができる「変更すべきでない」オブジェクトを指定することを許可する.
STL反復器はポインタをもとに成形型から出るので、反復器の役割はT*ポインタのようなものである.
… const_iteratorの中のiterの作用はconst*Tのようです
constの最も威力的な使い方は、セキュリティと効率性を放棄することなく、関数宣言時のアプリケーションに直面することです.
constオブジェクトを返すのは、いくつかのエラー内容h a,b,cを防止するためである.(a*b) = c;
一つの原則は
constメンバー関数以外ではconstクラスオブジェクトのデータメンバーにアクセスできません
(2)bitwise constとlogical constness
bitwise const陣営の人は、メンバー関数がオブジェクトのメンバー変数を変更しない場合にのみconstと言えるが、残念なことに、多くのメンバー関数はconstの性質ではないが、bitwiseテストに合格することができ、ポインタだけがオブジェクトであれば、この関数をbitwise constと呼ぶコンパイラエラーは起こらない.
logical constnessは、constメンバー関数が処理するbitsの一部を変更できると主張していますが、クライアントが検出できない場合にのみ可能です.
defineは役割ドメインを重視せず、パッケージ性も提供できないため、class固有の定数を作成できません.
単純変数については、defineの代わりにconstオブジェクトまたはenums、類似関数のマクロについてはinline関数、defineの代わりにinline関数を使用することが望ましい
定数ポインタを定義します.定数定義は通常ヘッダファイルに格納されるため、ポインタをconstとして宣言する必要があります.ヘッダファイルに定数の変わらないchar*based文字列を定義する場合は、constを2回書く必要があります.
const char * const name = "Scott";
2回目に注意しなければならないのはclass固有変数です.定数の役割ドメインをclassに制限するには、classメンバーになる必要があります.この変数にはエンティティが1つ以上あることを確認し、定数が1つのエンティティしかないことを確認し、staticメンバーになる必要があります.
class A
{
private:
static const int n = 5;//
}
C++では、あなたが使用しているすべてのものに定義式を提供する必要がありますが、classの専属変数でstaticで整数であれば、アドレスを取らない限り、定義式を提供する必要はありません.また、定義式const int A:n=5を提供する必要があります.二.可能な限りconst constを使用すると、任意の場所、class、ファイル、関数、ブロックの役割ドメイン、またはclassesの内部のメンバー変数を修飾することができる「変更すべきでない」オブジェクトを指定することを許可する.
STL反復器はポインタをもとに成形型から出るので、反復器の役割はT*ポインタのようなものである.
STL const .... iterator iter T * const
eg :
vector< int > vec;
```
const vector::iterator iter = vec.begin();
*iter = 10;//
iter++;//
… const_iteratorの中のiterの作用はconst*Tのようです
vector< int >::const_iterator CIter = vec.begin();//CIter const T*
*Clter = 10; // ,*Clter const
++Clter;
constの最も威力的な使い方は、セキュリティと効率性を放棄することなく、関数宣言時のアプリケーションに直面することです.
const h operator*(const h &lhs,const h &rhs);
constオブジェクトを返すのは、いくつかのエラー内容h a,b,cを防止するためである.(a*b) = c;
const
の目的は、このメンバー関数がconstオブジェクトに作用することを確認するために、2つの理由に基づいて、クラスのメンバー関数の後にconstを加え、この関数がこのクラスオブジェクトのデータメンバー(正確には非静的データメンバー)に何の変化もしないことを示すことである.一つの原則は
const, const。
ですconstメンバー関数以外ではconstクラスオブジェクトのデータメンバーにアクセスできません
(2)bitwise constとlogical constness
bitwise const陣営の人は、メンバー関数がオブジェクトのメンバー変数を変更しない場合にのみconstと言えるが、残念なことに、多くのメンバー関数はconstの性質ではないが、bitwiseテストに合格することができ、ポインタだけがオブジェクトであれば、この関数をbitwise constと呼ぶコンパイラエラーは起こらない.
logical constnessは、constメンバー関数が処理するbitsの一部を変更できると主張していますが、クライアントが検出できない場合にのみ可能です.
class A{
public:
size_t length() const;
private:
char * pText;
size_t textLength;
bool lengthIsValid;
};
size_t A::length() const
{
textLength = 0 ;// , const
}
:本質的に、constポインタは隠されたthisポインタが指すメモリ空間を修飾し、thisポインタを修飾する.mutable
可変を使用してconstの制約を解消できます