C ++変更可能な、使用して、decltypeおよび他のキーワードの深い理解

で、深さC ++の理解キーワードmutableである
  
定数(両方ともCで、中国の手段「変数、変数」で可変 ++ のconst中)反意語です。

  Cでは ++ で、変更可能なだけでなく、CONSTや設定の制限を突破。変更可能な変数が変更され、変数は常にさえconstの機能では、状態になります。

  私たちは、メンバ関数は、オブジェクトの状態を変更しない場合、この関数は、通常のconstのメンバーとして宣言されていることを知っています。しかし、我々は内部の独立したデータのconstメンバ関数を持つクラスのステータスの一部を変更する必要があり時間がありますが、その後、データメンバはmutalbeが変更されるのでなければなりません。

  以下は小さい例である:

クラスClxTest 
{ 
 パブリック:
  ボイド出力()のconst ; 
}; 
 
ボイド ClxTest ::出力()のconst 
{ 
 COUT << " テストのための出力!" << ENDL; 
} 
 
ボイド OutputTest(CONST&ClxTest LX)
{ 
 lx.Output(); 
} 
 

  メンバ関数が使用される出力クラスClxTest出力は、クラスを変更しない状態をCONSTように宣言されています。

  パラメータはまた、CONSTを修正することができるようにOutputTest関数は、関数内の任意のメンバ変数を変更するために他のメンバ関数を呼び出す防止するために、オブジェクトの出力出力方法LXを呼び出して出力するために使用されます。

  今、私たちは機能を追加したい場合は、次の各オブジェクトの出力周波数を計算します。変数の値を変更することはできません変数countに共通の変数である場合には、constメンバ関数の出力、およびオブジェクトの状態に関係する変数は何もない、それは変数を変更するためにする必要がありますので、出力のconstの性質を取り除かれます。この時、可変果たした当社との関係で-限りmutalbeは、変数を変更するため、すべての問題が解決。

  以下は、変更されたコードです:

クラスClxTest 
{ 
 パブリック
  ClxTest();
  ClxTest(); 
 
  無効出力()のconst ;
  int型 GetOutputTimes()constの; 
 
 プライベート
  可変int型m_iTimes; 
}。
 
ClxTest :: ClxTest()
{ 
 m_iTimes = 0 
} 
 
ClxTest ::ClxTest()
{} 
 
無効 ClxTest ::出力()のconst 
{ 
 coutの << " テスト用の出力を!" << てendl; 
 m_iTimes ++ ; 
} 
 
INT ClxTest :: GetOutputTimes()のconst 
{ 
 戻りm_iTimes。
} 
 
ボイド OutputTest(CONST ClxTest&LX)
{ 
 COUT << lx.GetOutputTimes()<< ENDL。
 lx.Output(); 
 COUT << lx.GetOutputTimes()<< ENDL; 
} 
 

  カウンタm_iTimes可変が、それはconstの限界を破ることができ、変更され、CONST内部修飾関数で変更することができます。

 

 

古いC ++ 11キーワード(オート、使用して、EXTERN)に新しい意味


C ++ 11のキーワードnullptr、constexprの、decltype、デフォルト、追加することによって改正された static_assertをなど、元のキーワードしばらく(オート、使用して、EXTERN)意味と目的が改訂されました。ここでは、オートの主な改正を見て、使用して、これらの3つのキーワードにextern。

自動
自動可変
オート= 12はAであり、
オートB = 12.0f;
オートC = trueに、
自動D = [](INT X) - > 12であるINT {リターン;};
オートE = STD ::バインド(&FUNC、_1)。


遅延バインディング
テンプレート<型名T、型名L>
自動ファン(T X、L Y) - > decltype(X + Y)X {リターン;}


使用
定义别名
テンプレート<typenameにT>
TLIST =のstd ::リスト<T>を使用して、
TLIST =のstd ::リスト<文字>を使用しました。
//等价于のtypedef無効(* DF)(); DF =無効(*)を()を使用して、


外部のコンフィギュレーションを使用してください
A :: Aを使用しました。


外装型導入
型名Aを使用します。


EXTERN
外側シャッタ
のexternテンプレート<型名T>ボイド( T T)。

 

 

おすすめ

転載: www.cnblogs.com/leijiangtao/p/12064618.html