C ++キーワードの解析盲点

揮発性:ここでの変数は、コンパイラは通常、オペレーティングシステム、ハードウェア、または他のスレッドから、変更を知らないで、揮発性の変数を指摘しました。このパラメータは、割り当てることはできませんコンパイラレベルで一定の変数を、確実にするためのconst、constのと競合し、コンパイル時の保証はありません。

したがって、揮発性CONST変数共変性されてもよく、揮発性ポインタは、INT揮発性修飾してもよい。INT B = A; INT C = A、B及びC値が異なっていてもよいです。使用シナリオ:シーン・ステータス・レジスタへの並列アクセス。

 

可変CONST、クラス、静的関数のクラスを修飾された非静的メンバ変数の限界を打破するために使用され、これらは変更可能な変数で割り当てを変更することができます。

 

通常のCONST変数定数の変更

constメンバ変数の定数変更

constメンバ関数は、このポインタの内容を変更することはできませんが、あなたが抜け出すために可変使用することができます修正します

constの修正パラメータは通常に渡された非const変数の引数と互換性を持つことができます

constの変更関数の戻り値、および通常はオーバーロードされた演算子は、+ B = Cまたは(= B)= C文が表示されないようにしてください。

 

alignas(X)ステートメントを合わせ、xが2つだけの力とすることができます。

  構造体alignas(2)A {

    char型;

    char型のB;

    int型のC;

      char型のD;

  }

  少なくとも4B表示INT cが理由Aの大きさ、位置合わせためのsizeof(A)= 8が、4の倍数であります

Alignof(x)はxのアラインメントを同定するため

インラインアセンブリ文ASMの 

明示シールド暗黙的な変換

テンプレートの定義は、テンプレート・インスタンス生成規則であるため、輸出の宣言と定義は、通常、ヘッダファイル内のテンプレート関数である(ルール関数は、実装コードを生成する)、通常の関数定義(関数を実装するコード)を好きではありません、あなたは電話またはコンクリートを表示したいときには、実装コードテンプレート関数を生成します

アバター:特定の種類の生産テンプレート機能を実現するためのルール:

tameplate <>ボイドスワップ(ジョブ&J1、ジョブ&J2){

  ...  

}

若しくは

tameplate <>ボイドスワップ<ジョブ>(ジョブ・J1、ジョブ&J2){

  ...  

}

インスタンス化:関数テンプレートのインスタンス化の実現に基づいてコードを

明示的に:

スワップ<ジョブ>(J1、J2)。

若しくは

tameplate、ボイドスワップ<仕事>(ジョブ&ジョブ&);

暗黙的に:直接呼び出しスワップ()、2つの仕事&パラメータ

constexprのは、定数式を変更し、すなわち、特定の定数値の代わりに直接コンパイルで変数を変数の値を見つけることができるように、コンパイル時に、コンパイラが大きいデバイスのために最適化することができ、強い制約比でありますより安全なマクロ

constexprの値は、列挙型、スイッチ、およびアレイのように長さを使用することができます。配列変数を宣言することができない理由は、配列のサイズは、コンパイラによって決定されます。

変更された変数は修正可能な値、そのパラメータのすべてがconstexprのある変更機能をコンパイルする必要がありますconstexprのは、constexprのを返します。

クラスのコンストラクタのパラメータの受け渡しがconstexprのであれば、そのメンバーのすべてがconstexprのクラスであることを保証するために、クラスのコンストラクタを変更するconstexprのこと、コンストラクタ本体は空になり、すべてのメンバーが初期化リストで初期化。

decltype変数とオートの異なる種類の分析。

noexcept:このキーワードは内部関数が例外を捕捉した場合、実行時に、関数は(例外をスローアウトnoexecpt場合は例外は、より多くを行うためのプログラムを最適化するコンパイラを容易に機能を、発生していないコンパイラに指示し、処理が完了すると、この場合は、例外がスローされていない)、プログラムはSTD ::終了()関数を呼び出し、直接終了する、内部関数は、STDを呼び出します::アボート()プログラムを終了します。

NULLマクロについて:

C ,, NULLは、実際に対応する暗黙の型ボイド*ポインタの割り当てに変換*、INT *と右foo_tに*ポインタを、voidへのポインタです。C ++コンパイラを行うために、それはC ++が強く型付けされているので、間違っていることがあるコンパイルする場合は通常、最初のファイルコンパイラの提供などが定義されたように、ボイドが*暗黙のうちに、他のポインタ型に変換されていませんNULL:

#ifndefのNULL
の#ifdef __cplusplus
の#define NULL 0
の#else
の#define NULL((ボイド*)0)
#endifの
#endifの

そのC ++でのNULLは、このような楽しい(int型)と楽しい(int型*)は、楽しい(NULL)を呼び出すか、最初の関数を呼び出すときに、関数をオーバーロードさ0、です。

nullptr曖昧さの魅力を解きます

thread_local変数が新たに導入されたC ++ 11のストレージタイプです。これは、メモリ・サイクルの変数に影響を与える(保存期間)、C ++は保存期間の4種類があります。

  1. 自動(スタック)
  2. 静的(グローバル変数領域)
  3. 動的(ヒープ)

そして、キー変数は、スレッド(割り当てられた)の開始時に生成されるスレッドサイクル(スレッド時間)、これらの変数(またはオブジェクト)を変更したのみthread_local、それは糸の端部は、(割り当て解除)するときに破壊されます。そして、各スレッドは、変数の別のインスタンスを有する(各スレッドは、独自のインスタンス有するオブジェクト)。thread_local ことが可能static で  externリンク属性変数に影響を与えます組み合わせて使用したキーワード、(リンケージを調整します)。

 

だから、何の変数はthread_localとして宣言することができますか?以下の3つのカテゴリがOKです

  1. 名前空間の下にグローバル変数
  2. クラスの静的メンバ変数
  3. ローカル変数

 typeidのキーワードは、C ++の一つであるのsizeofオペレータの一種に相当します結果のtypeid演算子はTYPE_INFOのライブラリー・タイプを指定されたオブジェクトへの参照を返します。

おすすめ

転載: www.cnblogs.com/GreenScarf/p/10966296.html