トップページ > プログラム > 2015年12月05日 > 22zPQN1u

書き込み順位&時間帯一覧

15 位/210 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000001020104



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
C++相談室 part121 [無断転載禁止]©2ch.net

書き込みレス一覧

スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
35 :デフォルトの名無しさん[sage]:2015/12/05(土) 18:47:22.55 ID:22zPQN1u
>>33
> 異なる型の複数の戻り値ならば本来そこで必要なのはそれを包含する別の型だ
> 手抜きのタプル
「それを包含する別の型」がタプルなんじゃないの

ていうか、個人的に問題になるのはエラー処理に関することが多い
long long int を返す関数で「失敗」を表すにはどうしたらいいのか、とか
で結局、戻り値(にしたかったもの)は引数で、エラーが起きたかどうかは戻り値で
返すことが多い
別に俺だけじゃなく、ぱっと思いつくとこだと zlib の compress なんかもそうだよね
deflate の結果は引数で返して、成功/失敗を戻り値で返す
snappy だと例外を投げるんだっけ
C++相談室 part121 [無断転載禁止]©2ch.net
26 :デフォルトの名無しさん[sage]:2015/12/05(土) 20:22:05.81 ID:22zPQN1u
横レスだけど
>>24
>>23 が言いたいのは
> 関数の引数については
のところじゃね?
「関数の引数については〜」が次の行にも係ってる
C++相談室 part121 [無断転載禁止]©2ch.net
27 :デフォルトの名無しさん[sage]:2015/12/05(土) 20:34:13.03 ID:22zPQN1u
……っていうのはローカル変数に限られるな
const がどうこうでなく、callee のコードがコンパイラに見えてるか、
ってのが重要か
C++相談室 part121 [無断転載禁止]©2ch.net
31 :デフォルトの名無しさん[sage]:2015/12/05(土) 22:06:34.83 ID:22zPQN1u
実験してみた。面倒なのでコードは載せない
コンパイラは gcc5.1.0
・結果
1) const の有無で生成コードは変わらない
  callee がコンパイラから見えていると、インライン化によって
  const な関数(宣言に関係なく実質的に)を呼び出すコードは高速になる(当たり前だな……)
  逆にコンパイラから callee が見えないと const 修飾の有無は *関係ない*
2) -fno-inline をつけると生成コードはほぼ同じになる
  コンパイラは callee のレジスタの使い方を知っているはずなので、インライン化されなくても
  caller のレジスタの使い方が変わるかと思っていた。この結果は意外だった
3) ただし -fno-inline をつけていても callee が static な関数だとレジスタの使い方が変わる
  これは予想通り
・結論
a) const は自分(プログラマ)のためのものであってコンパイラのためのものではない
b) コンパイラは(少なくとも俺の環境では)static でない関数呼び出しの ABI はちゃんと守る
  たとえ関数が自分から見えていても ABI で揮発性と決まっているレジスタは揮発性として扱う

まあでも俺はコンパイラじゃないし、できる限り const つけるけどね……
あとここまで書いておいてなんだけど実験コード載せないと意味ないな
まあ気になる人は自分で実験してくれ


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。