C++Prime:関数

5915 ワード

ローカル静的オブジェクト:
ローカル変数のライフサイクルを関数呼び出し以降の時間に貫通させる必要がある場合があります.ローカル変数をstaticタイプとして定義して、このようなオブジェクトを得ることができます.ローカル静的オブジェクトは、プログラム実行パスがオブジェクト定義文を最初に通過したときに初期化され、プログラムが終了するまで破棄されません.その間、オブジェクトが存在する関数が実行を終了しても影響しません.
size_t count_calls()

{

    static size_t ctr = 0;

    return ++ctr;

}



int main()

{

    for(size_t i = ; i != 10 ; i++ )

        cout<< count_calls() <<endl;

    return 0;

}

このプログラムは1から10までの数字を出力します.
 
参照パラメータ:
例:
//        int     ,         0

void Reset(int &i)    // i   Reset           

{

    i = 0;

}



//        Reset   ,                 :

int j = 42;

Reset(j);

cout<<j<<endl;    //   j=0

 
リファレンスを使用してコピーを回避するには、次の手順に従います.
大きなクラスタイプのオブジェクトをコピーするか、コンテナオブジェクトをコピーするのは効果的ではありません.コピー操作をサポートしないタイプもあります.コピー操作がサポートされていないタイプの場合、関数は参照パラメータを使用してのみそのタイプのオブジェクトにアクセスできます.
たとえば、2つのstringオブジェクトの長さを比較する関数を作成する準備をします.stringオブジェクトが長い可能性があるため、直接コピーすることはできるだけ避けるべきです.この場合、参照パラメータを使用するのは賢明です.
関数がパラメータの値を変更する必要がない場合は、定数参照として宣言したほうがいいです.
 
参照パラメータを使用して追加情報を返します.
1つの関数は1つの値しか返されませんが、関数が複数の値を同時に返す必要がある場合があります.参照パラメータは、複数の結果を一度に返すのに有効な方法を提供します.例を挙げるとfnd_という名前を定義しますcharの関数は、stringオブジェクト内の指定した文字が最初に現れた位置を返します.また、その文字が現れた合計回数も返します.関数が位置を返したり出現回数を返したりできるようにするには、新しいタイプを定義したり、追加の参照実パラメータを入力したりして、文字の出現回数を保存したりします.
 
変形可能パラメータを含む関数:
異なる数の実パラメータを処理できる関数を記述するために、C++11の新しい標準は2つの主要な方法を提供しています.すべてのパラメータタイプが同じであれば、initializer_という名前を渡すことができます.Listの標準ライブラリタイプ;実パラメータのタイプが異なる場合は、ここでは説明しない特殊な関数を記述できます.
C++には、可変で負けた実パラメータを伝達するために使用できる省略符という特殊なパラメータタイプもあるが、この機能は一般的にC関数とインタラクティブなインタフェースプログラムにのみ使用される.
initializer_リストパラメータ:
  initializer_listは、特定のタイプの値の配列を表す標準ライブラリタイプです.例:
void Test(initializer_list<string> il)

{

    for(auto beg = il.begin(); beg!= il.end(); ++beg)

        cout<<*beg<<endl;

}

 
参照は左の値を返します.
char &get_val(string &str, string::size_type ix)

{    

    return str[ix];

}



int main()

{

    string s("a value");

    cout<<s<<endl;    //   a value

    get_val(s,0) = A;    //  s[0]    A

    cout<<s<<endl;    //   A value



    return 0;

}

戻り値は参照であるため、呼び出しは左値であり、他の左値と同様に付与演算子の左側にも表示されます.
返されるタイプが定数参照の場合、呼び出しの結果に値を割り当てることはできません.
shortString("hi","bye") = "X";    //

 
リスト初期化の戻り値:
vector<string> process()

{

    if()

        return {};    //     vector  

    else

        return {"okey","buy"};    //         vector  

}