1. クラスの新しいデフォルトのメンバー関数: 移動代入と移動構築
2.ラムダ式
3.ラッパー
バインド関数
4. C++の型変換仕様
- C言語では、似たようなタイプの間に起こる可能性があります暗黙的な型変換( や など
double
) int
、近くないしかし互換性がある種類間のショーキャスト(ポインタや整数型など)
- C言語は型変換の可視性が弱く、プログラムの異常動作を起こしやすくデバッグが難しいため、C++ではプログラム要件で型変換の動作を規定しています。関数呼び出しの形式で型変換を明示的にマークする
C++の4種類の変換
dynamic_cast
で一般的に使用される多態性関数呼び出し真ん中親オブジェクトと子オブジェクトの区別と識別、C++ 専用の特殊な型変換です。
- 型変換はエラーが発生しやすいため、できるだけ避ける必要があります。
5. キーワードの揮発性
- 揮発性は型修飾子(型指定子) を変更するように設計されています。異なるスレッドによってアクセスおよび変更される変数.
volatile
次のように解釈できます生のメモリアドレスへの直接アクセス
- 場合によっては、コードを最適化するために、コンパイラーは次のような処理を実行します。変数アクセス行為特別なコンパイルの最適化(例えば変数の値をレジスタに格納し、毎回レジスタから変数を読み取るだけです)、キーワード
volatile
によりコンパイラによる以下の行為を禁止できます。変数へのアクセス特別なコンパイル最適化を実行します。
void Test()
{
const int a = 2;
int* p = const_cast<int*>(&a);
*p = 3;
cout << a << endl;
}
- 上記のコードスニペットvs2022で変数の出力
a
は 2 です。これは、コンパイラがconst
変数アクセス最適化 (状況によっては、コンパイラがconst変数の値をレジスタに入れる簡単にアクセスできるようにするため)、キーワードによりvolatile
コンパイラは次のことを行うことができます。メモリからの通常の読み取り変数:
void Test()
{
volatile const int a = 2;
int* p = const_cast<int*>(&a);
*p = 3;
cout << a << endl;
}
- このとき、変数の出力結果は
a
3になります。
- プログラム内に変数がある場合頻繁に変更して読む場合一般的なシナリオでは、キーワードを使用して変更する必要があります
volatile
。
- 並列装置ハードウェアレジスタ
- マルチスレッド環境の場合スレッド間で共有されるフラグ、揮発性を追加する必要があります
- 割り込みサービスルーチン他のプログラムによる検査用の変数、揮発性を追加する必要があります