001リスト初期化

1852 ワード

リストの初期化
C++言語は初期化のいくつかの異なる形式を定義し、これも初期化問題の複雑さの体現である.たとえばunitsという名前を定義するにはsoldのint変数を0に初期化し、以下の4つの文でこれを行うことができます.
int units_sold = 0;
int units_sold = {0};
int units_sold{0};
int units_sold(0);

C++11の新しい規格の一部として、変数をカッコで初期化することが全面的に適用されたが、これまでは、この初期化の形式は、いくつかの制限された場合にのみ使用されていた.この初期化の形式はリスト初期化(list initialization)と呼ばれます.これで、初期化オブジェクトでも、オブジェクトに新しい値を割り当てる場合でも、カッコで囲まれた初期値のセットを使用することができます.
組み込み型の変数に使用する場合、この初期化形式には重要な特徴があります.リストを使用して初期化し、初期値が情報を失うリスクがある場合、コンパイラはエラーを報告します.
long double ld = 3.1415926536;
int a{ld}, b={ld};  //   :     ,           
int c(ld), d=ld;    //   :    ,         

long doubleの値を使用してint変数を初期化すると、データが失われる可能性があるため、コンパイラはaおよびbの初期化要求を拒否します.ここで、少なくともldの小数部は失われ、intはldの整数部を保存できない可能性がある.
さっき紹介したのはどうでもいいように見えますが、わざとlong doubleの値でint変数を初期化することはありません.
pairオブジェクトを作成する関数
新しい基準では、戻り値のリストを初期化できます.
std::pair<:string int=""> process(std::vector<:string> &v) {
    //    v
    if (!v.empty()) {
        return {v.back(), v.back().size()}; //      
    } else {
        return std::pair<:string int="">(); //        
    }
}

mapに要素を追加
mapをinsert操作する場合は、要素タイプがpairであることを覚えておく必要があります.通常、挿入したいデータには、既存のpairオブジェクトは1つもありません.insertのパラメータリストにpairを作成できます.
//   word_count    word   4    
word_count.insert({word, 1});
word_count.insert(make_pair(word, 1));
word_count.insert(pair(word, 1));
word_count.insert(map::value_type(word, 1));

ご覧のように、新しい標準の下でpairを作成する最も簡単な方法は、パラメータリストでカッコを使用して初期化することです.make_を呼び出すこともできますpairまたは明示的にpairを構築します.最後のinsert呼び出しのパラメータ:
map::value_type(s,  1)

適切なpairタイプを構築し、mapに挿入する新しいオブジェクトを構築します.