【C++】C++14勉強メモ
- 2進数リテラル
- 通常関数での戻り値型の型推論
- decltype(auto)
- 後置き戻り値型でのauto
- ラムダ式の初期化キャプチャ
- ジェネリックラムダ
- 変数テンプレート
- constexprの制限緩和
- deprecated属性
- 数値リテラルの桁区切り文字
注意
2進数リテラル
0b0011
みたいな書き方ができるようになる- ビットをフラグのように使う場合、
1<<2
みたいな書き方をしていたけど、これからは0b0010
のように書いた方が分かりやすいかも
参考リンク : 2進数リテラル - cpprefjp C++日本語リファレンス
通常関数での戻り値型の型推論
- ラムダ式にあった戻り値の型推論を通常の関数でも利用できるようにしたもの?
- 戻り値型を
auto
にしておき、return文からコンパイラに推論させることができる - 複数のreturn文がある場合は共有の型が推論される。かしこい
参考リンク : 通常関数の戻り値型推論 - cpprefjp C++日本語リファレンス
decltype(auto)
decltype(auto)
を使うことでdecltype(式)
より簡潔に書くことができる- ちなみに、
decltype(auto)
(decltype(式)
)とauto
の違いは、式が参照だった場合、参照型になるかどうか(autoは参照が解除される)
参考リンク : decltype(auto) - cpprefjp C++日本語リファレンス
後置き戻り値型でのauto
- 後置き戻り値型でautoが利用できるようになる
- この記法はラムダ式のために導入された(通常関数でautoを利用したければ前置きにすれば良いので)
ラムダ式の初期化キャプチャ
- キャプチャ方法を式として記述できる機能
- 今までのキャプチャを初期化キャプチャで記述すると以下のような感じ?
- コピーキャプチャ :
[a](){return a;}
->[a=a](){return a;}
- 参照キャプチャ :
[&a](){return a;}
->[&a=a](){return a;}
- コピーキャプチャ :
- この方法を使うことで、別名としてキャプチャすることも可能になった
- 例 :
[apple=a](){return apple;}
- 例 :
参考リンク : ラムダ式の初期化キャプチャ - cpprefjp C++日本語リファレンス
ジェネリックラムダ
- ラムダ式の引数にテンプレートを利用できるようにしたもの
- ラムダ式の引数型を
auto
にすると、ジェネリックラムダになり、任意の型の引数での呼び出しができるようになる - ラムダ式の実体である関数オブジェクトの
operator()
が関数テンプレートになっていると考えると分かりやすい
参考リンク : ジェネリックラムダ - cpprefjp C++日本語リファレンス
変数テンプレート
- 関数テンプレート、クラステンプレートの変数版
- ()なしで関数テンプレートの呼び出しなどが可能になる機能という見方もできる
参考リンク : 変数テンプレート - cpprefjp C++日本語リファレンス
constexprの制限緩和
参考リンク : constexprの制限緩和 - cpprefjp C++日本語リファレンス
deprecated属性
- 属性構文にdeprecatedが追加され、関数やクラスを非推奨だと明記できるようになった
- 非推奨な関数やクラスを使うとコンパイラにより警告がでる
参考リンク : [[deprecated]]属性 - cpprefjp C++日本語リファレンス
数値リテラルの桁区切り文字
123'456'789
のように数値に桁区切りを入れられるようになった0b1111'1111
のように2進数記法でも利用可能