C++11学習のconst限定子

1788 ワード

const限定子
c++11では、変数の制限とメンバー関数の制限の2つの大きな応用があります.
const制限子は、可変のオブジェクトを表すために使用されます.constオブジェクトは初期化する必要があります.
変数の定義
1.変数、組み込み、またはクラスタイプを定義できます.
たとえば
                 const int i = 42;

クラス・タイプの定義は、次のとおりです.
                 const Sales_data rhs ;

これらの変数を表す値は変更できません.すなわち、これらの変数の値は読むしかなく、新しい値を与えることができません.
2.ポインタを限定できる
                 const int * const ip = &i;

//ポインタipは、可変のint型を指す定数ポインタです.*p=23はiの修正を意味し、これは許されない.p=qは、ポインタが指すオブジェクトを変更することも許されない操作であることを意味する.
ポインタはオブジェクトです.ポインタには、最上位constと最下位constの概念があります.最上位constとは、ポインタ自体がconstである定数ポインタを指す.下位constはポインタが指すオブジェクトがconstである、すなわちオブジェクトが定数である
3.参照を限定するために使用できる
注:参照はオブジェクトではなく、参照されたオブジェクトの別名です.そのためconstには最下層のトップレベルの区別はありません!
参照するオブジェクトがconstの場合、参照はconstのものでなければなりません.
                  const int &r = i; 

参照はオブジェクトではないので存在しません
                  int & const ref = i;

メンバー関数の定義
メンバー関数は、thisという追加の暗黙的なパラメータによって呼び出されたオブジェクトにアクセスします.例えばSales_Dataタイプのオブジェクトtotalで、そのメンバー関数(totalなど)を呼び出す.isbn()では、コンパイラはtotalのアドレスをisbnの暗黙的なパラメータthisに渡す責任を負い、コンパイラはこの呼び出しを以下の形式に書き換えたと等価である.
              Sales_data::isbn(&total);

thisは定数ポインタであり、thisに保存されているアドレスを変更することはできません.
メンバー関数のconstは、次のように限定されます.
class Sales_data{

public:

std::string isbn() const { return bookNo;}  /*const          */

//    

};

ここでconstの役割は、暗黙的thisポインタのタイプを変更することです.デフォルトでは、thisのタイプはクラスタイプの非常量バージョンを指す定数ポインタであり、constに参加した後、thisがクラスタイプの定数バージョンを指す定数ポインタであることを示します.つまり、この関数はSales_を変更しません.dataのデータメンバー.また、メンバー関数がconstであるかどうかを区別することで、リロードすることができます.定数オブジェクトは、非常量バージョンと定数バージョンのメンバー関数を呼び出すことができますが、非常量バージョンを呼び出すとより良い一致が得られる場合があります.