>>562 >>566
CheckedAddAssignにこだわる必要はないため、発想を転換して、
checked_add()の原関数であるoverflowing_add()を用いることで、
overflowing_add_assign()を用意して同じようにbool値を返せば解決する
具体的には以下のように引数はadd_assign()と同じでbool値を返せばよい
trait OverflowingAddAssign {
fn overflowing_add_assign(&mut self, rhs: &Self) -> bool;
}
オーバーフローするi8型〜u128型にはoverflowing_add()があるため実装はこうなる
let is_overflow;
(*self, is_overflow) = self.overflowing_add(*rhs);
is_overflow
この3行のコードでちゃんと最適化されるかどうかを確認するため、
単純にadd_assignを用いた場合、すなわち「*self += rhs」と比較すると
https://godbolt.org/z/WP3En8xM8
のアセンブリ出力となり、オーバーフローを返す以外は同一に最適化されることが確認できる
一方でオーバーフローしないBigUintなどの型への実装はこうなる
*self += rhs;
false
つまりオーバーフローの結果として常にfalseを返すので、
こちらは使う側でオーバーフローの扱いが消えてadd_assign部分のみに最適化される
したがってこのOverflowingAddAssignを用いてジェネリックに書けば、
どちらの型の場合であっても、非ジェネリックに書いた時と同一コードとなる
Rust part15
■ このスレッドは過去ログ倉庫に格納されています
618デフォルトの名無しさん
2022/06/12(日) 20:36:02.36ID:nrxswUhC■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 ★4 [Ailuropoda melanoleuca★]
- 【速報】北海道・旭川女子高校生殺人 内田梨瑚被告控訴しない方針 懲役27年確定へ [首都圏の虎★]
- 【W杯】元ブラジル代表ロナウド氏「日本には簡単に勝てる」決勝T1回戦で対戦可能性…避けたいのは「オランダ」 ★2 [首都圏の虎★]
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 ★5 [Ailuropoda melanoleuca★]
- 「名古屋ほど適した場所ない」 広沢市長、副首都法案提出めぐり [首都圏の虎★]
- 仏でエボラ熱感染初確認 [首都圏の虎★]
- おりせん☆2
- 〓たかせん〓 2
- ハム専 ★7
- 【D専】Part.5
- 【MLB】ツインズ vs ドジャース ★3
- 【地上波/DAZNほか】 FIFAワールドカップ2026 総合スレ★163【メキシコ/カナダ/アメリカ】
- 【高市悲報】「暴れん坊将軍」と「中村主水」ってどっちがツエーの🤔 [616817505]
- 【実況】博衣こよりのえちえちこども裁判クイズ🧪
- ジャップ円、メキシコペソにすら円安状態…「スナック菓子が1000円、小さなおにぎり500円以上。先進国とは思えない」 [667744927]
- 玉木雄一郎に弄ばれて自殺した高橋茉莉(27)、後を追って母親も自殺。高市よりヤバいだろ😰 [485187932]
- 社会や会社で男は性欲を隠してる。めっちゃ隠してる。その事を女性には分かってもらいたい。男はエロイ事を四六時中考えてしまう生き物 [341841737]
- 【高市悲報】石油枯渇まであと162日 [616817505]