
|
43
3 章
現代の C++ への移行
C++11、C++14 の機能を分類、俯瞰してみると、大幅に機能強化されていることが分かります。
auto、スマートポインタ、ムーブセマンティクス、ラムダ(lambdas)、並行性、いずれも非常に
重要です。本書でもそれぞれに一つの章を割いています。機能ごとの内容把握は必須ですし、効率
性の高い現代の C++ プログラマに成長するには一歩ずつ積み重ねなければなりません(effective
modern C++ programmer)。C++98 から現代の C++ へ進む旅を一歩進むたびに、疑問は 1 つずつ解
消されていくでしょう。オブジェクトを作成する場面で丸括弧の代わりに角括弧を用いるべきなの
はどんな場合か? エイリアス宣言が typedef よりも優れている理由は何か? constexpr は const
とはどう違うのか? const なメンバ関数とスレッドセーフにはどんな関係があるのか? 疑問はまだ
まだ続きます。本章ではこれらの疑問に 1 つずつ答えていきます。
項目 7:オブジェクト作成時の () と {} の違い
意見の分かれるところですが、C++11 でのオブジェクトを初期化する構文の選択には、種類が豊
富なゆえの当惑、もしくは見苦しい混乱がありました。一般的には初期値の指定には丸括弧、等号、
波括弧を使用します(()、=、{})。
int x(0); // initializer is in parentheses
丸括弧を用いた初期化子
int