c++関数の戻り値

1843 ワード

関数の戻り値
  • ローカルオブジェクトの参照またはポインタ
  • を返さないでください.
  • 参照は左の値を返し、他の戻りタイプは右の値
  • を得る.
  • main関数の戻り値では、0は成功を表し、その他は識別を表す.

  • リスト初期化戻り値
    c++11の新しい標準では、関数はカッコで囲まれた値リストを返すことができます.実は,リスト初期化を用いて関数が返す一時変数を初期化する.
    vector<string> process()
    {
        return {"funca", "funcb"};
    }

    配列ポインタを返す
    配列はコピーできないので、配列を返すことはできません.ただし、関数は配列のポインタや参照を返すことができますが、戻りタイプの定義は煩雑です.
    int  (*func(int i))[10] {} //          10int

    このような複雑さを定義したくない場合は、タイプ別名の方法を使用します.
    typedef int Array[10]; // Array       
    
    Array* func(int i){}

    末尾を使用してタイプを返す
    同様にc++11規格では、任意の関数で末尾戻りを定義できますが、戻りタイプが配列のポインタや参照など、戻りタイプを定義する複雑な関数に適しています.
    auto func(int i) -> int(*)[10]

    decltypeの使用
    関数が返すポインタがどの配列を指しているか知っている場合はdecltypeを使用します.配列をポインタに変換しません.
    int a = {1, 2, 3};
    decltype(a) * func(int i);