- C++相談室 part129 [無断転載禁止]©2ch.net
782 :デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]:2017/03/21(火) 12:20:28.06 ID:ovrpZx5v0 - 全く理解してないし、今日初めて知ったんだけど
遅延評価といっても所詮静的なものだから こんなものはコンパイラが最適化を超がんばれ、って思う たぶん事の本質は演算の順番を変えることで (縦に計算するか、横に計算するか、みたいな?) 最適化がかかりやすくなったり速く動いたりできるかもね って事なんじゃないかと俺は勝手に思った ただ愚直に演算の順番を変えると記述性に問題が出てくるから それを防ぐテクニックなのかなーと よくわからないけど
|
- C++相談室 part129 [無断転載禁止]©2ch.net
785 :デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]:2017/03/21(火) 12:54:01.22 ID:ovrpZx5v0 - 全く理解していない俺が言うのもなんだけど
ムーブコンストラクタは関係ないと思う 演算順序を変えないことには何処かに一時的に計算結果を保存しておかないと ダメなことには変わりないのでは? tmp[0] = a[0] + b[0]; tmp[1] = a[1] + b[1]; r[0] = tmp[0] + c[0]; r[1] = tmp[1] + c[1]; と r[0] = a[0] + b[0] + c[0]; r[1] = a[1] + b[1] + c[1]; の違いじゃないかなー これで配列のサイズが1000とかだったらかなり差が出るんだろう ただ、普通にforループ書けば?って気もするが そこを演算子のオーバーロードでどうしても記述したいってのが 例の技術なのかと 俺には必要ないかなー 要素数の少ないベクトルはSIMD使うし、要素数の多い配列はループ回すし
|
- C++相談室 part129 [無断転載禁止]©2ch.net
787 :デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]:2017/03/21(火) 13:13:33.00 ID:ovrpZx5v0 - やだー
それ、aとcが破壊されているじゃないですかーー r=a+b+c; と同等のコードになりませんよ? あなたのは a+=b; c+=a; r=c;ですが そもそも「+=」で破壊していく方針なら、何にも新しくコンストラクトしないんだから これまたムーブコンストラクタ関係ないじゃないですかーー どこからムーブコンストラクタが出てくるんですか? もっとC++勉強してくださいよー
|
- C++相談室 part129 [無断転載禁止]©2ch.net
788 :デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]:2017/03/21(火) 13:23:51.34 ID:ovrpZx5v0 - r = a + b + c を計算しようと思うと、これはr = (a + b) + c に分解されるだろうから
根本的に(a + b)の結果を保存しておく一時変数がいる レジスタに配置されるかもしれないとかそういうことはおいておいて とりあえず一時変数がいる で、a,b,c,rがベクトルだった場合、一時変数もベクトルになる これはあまり美味しくない場合がある、ということで 各要素にばらして要素ごとにr = (a + b) + cを実行する そうすると一時変数はスカラーになる しかし記述性に難が出るので、それを何とかしようとした ↑これが基本的な要点かと
|
- C++相談室 part129 [無断転載禁止]©2ch.net
796 :デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]:2017/03/21(火) 15:17:50.73 ID:ovrpZx5v0 - そーゆーことでしょうな
むしろ内部でstd::vectorとか使ってベクトル表現している方が 要素ごとにバラして計算するメリットが出るだろうね 計算途中の一時変数がstd::vectorになるのとスカラになるのとでは 全然違うというか話にならないからね あと > ○最後の代入演算子で発生するヒープ確保や代入命令のコストがポインタのすげ替えだけで済む だけど、たぶんだけどstruct vec{ int x,y,z; };みたいなやつだと 最後の代入はコンパイラの最適化で消えてなくなるだろうから気にしなくてもよいはず C++にmoveホゲホゲが出来る以前からあった古来からの基本的な最適化だったはず まぁoperator=を定義して余計なことしてたらその限りじゃないかもしれんが
|
- C++相談室 part129 [無断転載禁止]©2ch.net
800 :デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]:2017/03/21(火) 22:47:54.58 ID:ovrpZx5v0 - 大前提としてチームで開発しているならチームのリーダーに質問してください
自分一人で書いてるなら変数名なんかなんでもよいよ 自分で書いたコードでも一年たったら他人が書いたコードのように読めない っていう人もいるけど、実際には普通に読めるから変数名は思い付きのテキトーでよい 型名をもじってそのまま変数名にするってのは俺もよくやる 実際変数名は本当に何でもよくて なぜならスコープが狭かったり、クラスのプライベートメンバだったりして ごちゃごちゃになったりしないから 問題はクラス名と関数名で、こちらはいつも悩む
|