C++11で導入された主な新機能と変更点を徹底解説
C++11とは
C++11は標準C++言語のバージョンのひとつで、2011年8月12日に国際標準化機構(ISO)によって承認されました。その後、C++14やC++17へと標準規格が更新されていきました。C++11は「モダンC++」の始まりと呼ばれるほど大きな転換点となり、コア言語に対して数多くの重要な追加が行われたバージョンです。
ここでは、C++11で導入された主な新機能・変更点をわかりやすく解説します。
C++11の主な新機能一覧
nullptr:従来のNULLポインタは整数値0として扱われ、暗黙的な型変換による予期しない動作の原因になっていました。C++11ではnullptrキーワードが導入され、その型はstd::nullptr_tとして表現されます。nullptrには暗黙的な変換が存在しないため、より安全なnullポインタの取り扱いが可能になりました。
ラムダ式(Lambda Expressions):ラムダ式を使うと、関数をその場でローカルに定義できます。名前を持たないことから「匿名関数」とも呼ばれます。関数オブジェクトstd::functionが期待される場面であれば、どこでもラムダ式を使用でき、コールバック処理などを簡潔に記述できます。
スマートポインタ:以前はauto_ptrが唯一のスマートポインタでしたが、現在は非推奨(deprecated)となっています。代わりにC++11では、shared_ptr、unique_ptr、weak_ptrという3つの新しいスマートポインタが追加され、メモリ管理の安全性が大幅に向上しました。
auto:従来のバージョンでは、変数宣言時に必ず型を明示する必要がありました。C++11ではautoキーワードにより、コンパイラが初期化子から型を自動的に推論するため、冗長な型指定を省略して変数を宣言できます。
override と final:C++11ではoverrideとfinalという2つの新しい特殊識別子が導入されました。overrideは、そのメソッドが基底クラスの仮想関数をオーバーライドすることを意図していることを示します。一方、finalは、派生クラスがその仮想関数をこれ以上オーバーライドできないことを示します。これにより、オーバーライド忘れなどのミスをコンパイル時に検出できます。
削除関数とデフォルト関数:削除関数(deleted functions)は、オブジェクトのコピーを禁止したい場合などに役立ちます。コピーを無効化するには「
=delete;」を使用します。デフォルト関数(defaulted functions)は、コンパイラに関数のデフォルト実装を生成させるためのもので、「=default;」を指定します。範囲ベースforループ:C++11では、コレクションを簡単に走査できる範囲ベースforループが導入されました。C形式の配列を含むさまざまなデータ構造を反復処理でき、「foreach」スタイルの直感的な記述が可能になりました。
強く型付けされたenum(enum class):従来のenumは、列挙子が周囲のスコープに漏れ出すという問題を抱えていました。C++11では「enum class」キーワードで指定する強く型付けされたenumが導入され、列挙子が周囲のスコープを汚染しなくなり、型安全性も高まりました。
static_assert とタイプトレイト:static_assertは、コンパイル時点でアサーションチェックを行います。条件が真であれば何も表示されず、偽であればエラーメッセージを出力します。テンプレートプログラミングにおける型チェックなどに活用されます。
新しいC++アルゴリズム:C++11の標準ライブラリには、all_of()、any_of()、none_of()といった新しいアルゴリズムが追加されました。これらにより、コレクション内の要素に対する条件判定を簡潔に記述できます。
まとめ
C++11は、nullptrやラムダ式、スマートポインタ、autoなど、現代のC++開発に欠かせない基盤となる機能を多数導入した歴史的なバージョンです。これらの機能を理解しておくことで、より安全で読みやすく効率的なC++コードを書けるようになります。
-
C言語のトークンとは?6つの種類とサンプルコードでわかりやすく解説
トークンとはトークン(token)とは、コンパイラにとって意味を持つ、プログラムを構成する最小単位のことです。コンパイラはソースコードをこの最小単位へと分割し、生成されたトークンを基にコンパイルの各段階へと処理を進めていきます。トークンの種類C言語のトークンは、主に以下の6種類に分類されます。キーワード(予約語):int、return など、言語仕様によって意味が定められた語識別子:変数名や関数名など、開発者が自由に命名できる名前定数:10、3.14 など、プログラム中で値が変わらない固定値文字列:ダブルクォート( )で囲まれた文字の並び特殊記号:{ }、( )、; など、構文を区切るための記
-
C言語の関数の分類とは?引数と戻り値による4つのカテゴリを解説
C言語における関数は、引数(ひきすう)の有無と戻り値(返り値)の有無という2つの観点から、以下の4つのカテゴリに分類できます。引数なし・戻り値なしの関数引数なし・戻り値ありの関数引数あり・戻り値なしの関数引数あり・戻り値ありの関数それぞれのカテゴリについて、サンプルコードと実行結果を交えながら詳しく見ていきましょう。1. 引数なし・戻り値なしの関数このタイプの関数は、呼び出し元からデータを受け取らず、計算結果も返しません。関数内で入力・処理・表示をすべて完結させるため、単純な処理に向いています。サンプルコード#include<stdio.h>main() {