C++11
auto キーワード
- 型推論が可能になりました。
auto x = 5; // int型と推論される
範囲ベースのfor文
- コンテナの要素を簡単にイテレートできるようになりました。
std::vector<int> vec = {1, 2, 3, 4, 5}; for (const auto& elem : vec) { std::cout << elem << " "; }
ラムダ式
- その場で関数オブジェクトを定義できるようになりました。
auto add = [](int a, int b) { return a + b; };
nullptr
- ヌルポインタを表す新しいキーワードが導入されました。
スマートポインタ
std::unique_ptr
,std::shared_ptr
,std::weak_ptr
が導入されました。
右辺値参照とムーブセマンティクス
- リソースの効率的な移動が可能になりました。
constexpr
- コンパイル時に評価される定数式を定義できるようになりました。
初期化子リスト
- 一貫した初期化構文が導入されました。
std::vector<int> vec = {1, 2, 3, 4, 5};
委譲コンストラクタ
- コンストラクタから他のコンストラクタを呼び出せるようになりました。
override と final キーワード
- 仮想関数のオーバーライドを明示的に示せるようになりました。
C++14
汎用的なラムダ式
- ラムダ式のパラメータに auto を使用できるようになりました。
変数テンプレート
- 変数をテンプレート化できるようになりました。
戻り値型推論
- 関数の戻り値型を auto で推論できるようになりました。
二進数リテラル
0b
プレフィックスで二進数リテラルを記述できるようになりました。
C++17
構造化束縛
- 複数の変数を一度に初期化できるようになりました。
auto [x, y] = std::make_pair(1, 2);
if 文と switch 文での初期化
- スコープを限定した変数の初期化が可能になりました。
if (auto it = m.find(key); it != m.end()) { // itを使用 }
インライン変数
- ヘッダーファイルで変数を定義できるようになりました。
constexpr if
- コンパイル時の条件分岐が可能になりました。
折りたたみ式
- 可変引数テンプレートを簡単に操作できるようになりました。
C++20
コンセプト
- テンプレートの制約を表現できるようになりました。
template<typename T> concept Addable = requires(T a, T b) { { a + b } -> std::convertible_to<T>; };
レンジ
- 範囲に対する操作を簡潔に記述できるようになりました。
モジュール
- ヘッダーファイルに代わる新しいコード分割の仕組みが導入されました。
コルーチン
- 非同期プログラミングを簡単に記述できるようになりました。
3方比較演算子 <=>
- 比較演算子を一つの演算子で表現できるようになりました。
属性 [[likely]] と [[unlikely]]
- コンパイラに分岐の発生確率を伝えることができるようになりました。
constexpr の機能拡張
- より多くの処理をコンパイル時に実行できるようになりました。
集成体初期化の改善
- 継承を含む集成体の初期化が可能になりました。
これらの新機能により、C++はより表現力豊かで、効率的なコーディングが可能になりました。
これもClaude3.5に書いて貰った記事です
前回のC#とJavaに続き、C++でも同様の記事をClaude 3.5 Sonnetに書いてもらいました。
これは、純粋に私が欲しい記事を書いて貰っただけです。
ではまた。