- スレを勃てるまでもない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 つけるけどね…… あとここまで書いておいてなんだけど実験コード載せないと意味ないな まあ気になる人は自分で実験してくれ
|