BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース C++14登場 -その新機能

C++14登場 -その新機能

原文(投稿日:2014/08/23)へのリンク

C++11に続くC++標準であるC++14の最終承認が完了し,年内の公開に向けてISOに提出された。C++の生みの親であるBjarne Stroustrup氏によると,C++14の改善内容はC++11に比べて "意識的に小さくなっている"が,それでも"ユーザに対する重要な利便性が追加された"ことで,C++を"より初心者向けに"する方向に踏み出しているという。

C++のタイムライン上でのC++14は,C++11標準で開発された作業を完結するマイナリリースという位置付けにあり,よりクリーンでシンプル,高速な言語にすることを目標としている。新しい言語機能は,次回のC++17標準に託されている。

C++14の主要機能は3つのグループに分類できる。ラムダ関数,constexpr,そして型推論だ。

ラムダ関数

C++14のジェネリックラムダは次のように記述可能だ。

auto lambda = [](auto x, auto y) {return x + y;};

C++11のラムダパラメータでは,次のように,ラムダパラメータの型を明確に宣言する必要があった。

int lambda = [](int x, int y) {return x + y;};

さらに新標準のstd::move関数を使えば,オブジェクトをコピーや参照する代わりに移動することによって,ラムダ式内の変数をキャプチャすることができる。

std::unique_ptr ptr(new int(10));
auto lambda = [value = std::move(ptr)] {return *value;};

Constexpr

constexprで宣言された関数は,コンパイル時に実行して値を生成することができる。整数を引数とするテンプレートのインスタンス化のように,定数式の必要な場所で使用可能だ。C++11のconstexprでは単一式を含めることしかできなかったが,C++14ではこの制限が緩和されて,ifswitchなどの条件文,範囲ベースのforループなどのループが使用できるようになる。

型推論

C++11ではラムダ式のみであった戻り値の型推論が,C++14ではすべての関数で可能になる。

auto DeducedReturnTypeFunction();

ただしC++14は強い型付け言語であるため,いくつかの制限を考慮に入れなければならない。

  • 関数の実装に複数のreturn文がある場合,それらはすべて同じ型を推論するものでなければならない。
  • 戻り値型の推論は前方宣言でも使用可能だが,その関数が使用されるよりも前に,変換ユニットが関数宣言を使用できることが必要だ。
  • 戻り値の型推論は再帰関数でも使用可能だが,戻り値の型を推論できるように,再帰呼び出しよりも前に少なくともひとつのreturn文がなくてはならない。

C++14の提供する型推論の改善としてはもうひとつ,decltype(auto)構文がある。これはautoと同じ機構を使用して,指定された式の型を算出可能にするものだ。autodecltypeはいずれもC++11にすでにあったものだが,型推論に使用する機構が違っていたため,最終的に生成する結果が異なっている場合があった。

その他のC++14の変更点としては,テンプレート化された変数の宣言が可能になったこと,0bあるいは0Bを接頭辞とした2進数リテラルが使用可能になったことなどがある。InfoQでは以前,C++11プログラムと非互換の可能性があるC++14の変更についてレポートしている。

主要なC++コンパイラは現在,新言語機能のサポートを進めているところだ。"現行ドラフトを完全に実装している"Clangの他,GCCVisual Studioでも,C++14のいくつかの新機能がサポートされている。

この記事に星をつける

おすすめ度
スタイル

BT