C++14は、プログラミング言語
C++のISO標準規格であり、正式名称をISO/IEC 14882:2014といいます。
C++11の後継として、その改善と機能追加を目的としたマイナーアップデート版です。
C++11が
C++0xと呼ばれていたのに対し、
C++14は開発中に
C++1yという仮称で呼ばれていました。
標準化のプロセス
C++14の標準化プロセスは、委員会草案N3690が2013年5月15日に発表されたことから始まりました。その後、作業草案N3936が
2014年3月2日に公開され、投票期間を経て、
2014年8月18日に承認されました。最終的に
2014年12月15日に正式な規格として出版されました。
C++11からの主な追加・変更点
C++14では、
C++11で導入された機能の微調整や、以下のような新しい機能が追加されました。
文脈上の変換の微調整: C++の文脈における型変換に関する細かい点が修正されました。
二進数リテラル: `0b`または`0B`プレフィックスを用いて、バイナリ形式で整数値を表現できるようになりました。例:`int x = 0b1010;`
通常関数の戻り値の型推論: `auto`キーワードを使用することで、関数の戻り値の型をコンパイラに推論させることが可能になりました。
汎用ラムダキャプチャ: ラムダ式におけるキャプチャ機能が拡張され、より柔軟なキャプチャ方法が提供されました。
ジェネリックラムダ式: ラムダ式の引数に`auto`を使用することで、テンプレートのように様々な型を受け取れるようになりました。
変数テンプレート: 変数もテンプレート化できるようになり、型に応じて異なる値を定義できるようになりました。
`constexpr` 関数の制限緩和: `constexpr`関数の制約が緩和され、より複雑な処理をコンパイル時に実行できるようになりました。
メンバー初期化と集成体: 集成体におけるメンバー初期化のルールが明確化されました。
メモリ割り当ての明確化: メモリ割り当てに関する仕様が詳細化されました。
メモリ解放時のサイズ指定: 動的メモリ解放時に、確保したサイズを指定する機能が追加されました。
`deprecated` 属性: 非推奨となった要素に対して`deprecated`属性を付与できるようになりました。
数値区切り: 数値リテラル内で`'`を使って区切りを入れることが可能になり、大きな数値が読みやすくなりました。例:`int x = 1'000'000;`
実装状況
各コンパイラにおける
C++14の対応状況は以下の通りです。
GCC: GCC 5.1では、N3664の例外を除き、ほぼすべての機能が実験的に実装されました。`-std=c++14`オプションを付与することでコンパイル可能です。
Clang: Clang 3.4では、
C++14のすべての機能が実装されています。
Microsoft Visual C++: VC12 (Visual Studio 2013) および VC14 (Visual Studio 2015) では、
C++11の全機能が実装されていませんでしたが、
C++14の一部の機能実装が開始されました。VC14.1 (Visual Studio 2017) では、N3664を除く
C++14のすべての追加機能がサポートされています。
Intel C++ Compiler: バージョン15で一部機能が実装され、バージョン17ではN3664を除くすべての機能がサポートされました。
関連情報
C++ Technical Report 1
C++11
参考文献
*
C++14 作業草案 N3797
C++14は、
C++11の改善版として、より現代的なプログラミングを支援する多くの機能を提供しています。これらの機能は、コードの可読性、保守性、およびパフォーマンスを向上させるのに役立ちます。