0からの、超初心者C++相談室at TECH0からの、超初心者C++相談室 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト989:デフォルトの名無しさん 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 で扱うのが基本的には好ましい。 値が取りうる範囲を把握しているなら問題を起こさない範囲で適切に型変換するのはプログラマの裁量による。 状況によって判断するしかない。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch