[過去ログ] スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
28(5): デフォルトの名無しさん [sage] 2015/12/05(土) 12:09:57.14 ID:XDnkwO5X(1) AAS
関数を作るとき、引数にポインタを渡すことで実質的な返り値にできるテクニックって普通に返り値を返すのとどう使い分けれるべきなんですか?
コードの可読性が下がる代わりに複数出力に対応できるっていう認識なんですが、わかりやすさとか保守性(人間の都合)以外に推奨される理由とかやめた方がいい理由はありますか?
int power(int a){return a*a;}
と
void power(int ain, int* aout){*aout=ain*ain;}
みたいなやつです
29: ◆tAo.kQ2STk [sage] 2015/12/05(土) 16:27:33.05 ID:3X0n/q/1(1/2) AAS
>>28
他にも、構造体を返す代わりに構造体へのポインタを受け取っておいて一部だけ変更して返すとか
void move_up(Position* p, double distance) {p->y -= distance;}
デフォルトの値を受け取ってある条件で書き換えるが、書き換えた場合に引数として渡された元の値は不正になる場合とか
void my_realloc(void** p, size_t size) { *p = realloc(*p, size); } // 色々省いた!
幾つか使い道はあるけど。
やめたほうがいい理由として他には、純粋関数スタイルで書けなくなるってのがあるな。
add(a, b, &t);
mul(t, c, &d);
って書くのと
d = mul(add(a, b), c);
って書くのとは違うスタイルになるけど、後者を前者に直すのは簡単でもその逆は簡単じゃない。
30: デフォルトの名無しさん [sage] 2015/12/05(土) 16:41:03.46 ID:WsL2Ug/J(1) AAS
>>28
計算結果を引数で受け取り、処理結果を戻り値で返す。
良くあるパターン。
31: デフォルトの名無しさん [sage] 2015/12/05(土) 17:29:21.92 ID:KdBqlpoa(1/2) AAS
>>28
なんらかの制約があり仕方なく使わざるをえない場合のみ泣く泣く使うものであり推奨している個人や団体は存在しない
44: デフォルトの名無しさん [sage] 2015/12/06(日) 18:39:35.29 ID:Z7509Thm(1) AAS
>>28
戻り値がint型だからint型で受け取るのが良いけど
他の型で受け取れない(暗黙的な型変換)ってのがあるかな
あとその関数で言えば、数式の一部として利用できない
前者なら power(a)+b*2 のような式も書けるけど後者だと一回結果を受け取らないといけないよね
sqrtなんかもそう
45: 28 [sage] 2015/12/07(月) 18:34:12.80 ID:PDqN2Ufp(1) AAS
ありがとうございます
色々使い方があるんですねm(_ _)m
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.036s