c++関数の戻り値
1843 ワード
関数の戻り値ローカルオブジェクトの参照またはポインタ を返さないでください.参照は左の値を返し、他の戻りタイプは右の値 を得る. main関数の戻り値では、0は成功を表し、その他は識別を表す.
リスト初期化戻り値
c++11の新しい標準では、関数はカッコで囲まれた値リストを返すことができます.実は,リスト初期化を用いて関数が返す一時変数を初期化する.
配列ポインタを返す
配列はコピーできないので、配列を返すことはできません.ただし、関数は配列のポインタや参照を返すことができますが、戻りタイプの定義は煩雑です.
このような複雑さを定義したくない場合は、タイプ別名の方法を使用します.
末尾を使用してタイプを返す
同様にc++11規格では、任意の関数で末尾戻りを定義できますが、戻りタイプが配列のポインタや参照など、戻りタイプを定義する複雑な関数に適しています.
decltypeの使用
関数が返すポインタがどの配列を指しているか知っている場合はdecltypeを使用します.配列をポインタに変換しません.
リスト初期化戻り値
c++11の新しい標準では、関数はカッコで囲まれた値リストを返すことができます.実は,リスト初期化を用いて関数が返す一時変数を初期化する.
vector<string> process()
{
return {"funca", "funcb"};
}
配列ポインタを返す
配列はコピーできないので、配列を返すことはできません.ただし、関数は配列のポインタや参照を返すことができますが、戻りタイプの定義は煩雑です.
int (*func(int i))[10] {} // 10, int 。
このような複雑さを定義したくない場合は、タイプ別名の方法を使用します.
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);