25/05/02 09:24:43.58 k5bGwZZ0.net
size_t を返す hoge.count() みたいなのがあって
for(int i = hoge.count(); --i >= 0){...} と描くと
型が違うって怒られるのですが
for(int i = (int)hoge.count(); --i >= 0){...}
for(unsigned long i = (unsigned long)hoge.count(); --i >= 0){...}
for(size_t i = hoge.count(); --i >= 0){...}
どれが正解?
990:はちみつ餃子
25/05/02 09:54:10.74 LUc36ySD.net
>>989
どこでどのように型が合わないのか説明して。
991:はちみつ餃子
25/05/02 11:40:02.44 n0wyIh3y.net
>>989
for 文の括弧の中はセミコロンで区切られた三つの節を持つ形式である必要があるが、二つの節しかないのが根本的な間違い。
そんでそれを脇に置くとして、ループカウンタ i が unsigned であるときに --i >= 0 という式で判定しようとするのが間違い。
0 以下になることはありえないのだから判定の意味がない。 (無限ループを意図したのでない限りは。)
整数を別の整数型に型変換したときに型変換後の型で表現可能な範囲の値であるならば同じ数値のままであることは保証されて何も問題はない。
逆に言えば扱う値の範囲次第では違う数値に変わったり未定義になったりすることがある。
hoge.count() が返す型が size_t なら最後まで size_t で扱うのが基本的には好ましい。
値が取りうる範囲を把握しているなら問題を起こさない範囲で適切に型変換するのはプログラマの裁量による。
状況によって判断するしかない。
992:デフォルトの名無しさん
25/05/02 12:05:12.81 b7t9YOim.net
我慢できなくなって説明しちゃうはちみつさん
993:デフォルトの名無しさん
25/05/02 19:42:35.68 rPO248eK.net
for(long long i = (long long)hoge.count(); --i >= 0; ){...}
994:デフォルトの名無しさん
25/05/04 09:19:50.28 RkNPiBO2.net
Rust使えばもっと楽になるかと思いきや
面倒が増えただけだったでござる
995:デフォルトの名無しさん
25/05/04 10:01:55.29 CPTw2I9A.net
>size_t を返す hoge.count() みたいなのがあって
>for(int i = hoge.count(); --i >= 0){...}
Rustなら単に (0..hoge.count()).rev()
996:はちみつ餃子
25/05/04 11:51:46.75 w7r9Yiaa.net
全体としては Rust のほうがだいぶん楽だと思うけどなぁ。
好みや慣れの要素があるから単純には比較できないのだけれど。
997:デフォルトの名無しさん
25/05/04 11:59:34.01 RkNPiBO2.net
はちみつさんもRust使ってるんだね
998:デフォルトの名無しさん
25/05/04 11:59:44.18 RkNPiBO2.net
かわいい
999:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2364日 21時間 4分 32秒