0からの、超初心者C++相談室
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr 何にも知らない0からの出発、超初心者のためのC++相談室
989はちみつ餃子 ◆8X2XSCHEME
2025/04/28(月) 12:35:00.60ID:clGXfLYj >>986
簡潔な回答としては「できない」ということになる。
関数ひとつで終わるような簡単なコールバックならラムダ式で渡せるように設計する。
もう少し複雑なものになると……式の中に定義を書けるのは見通しが悪いし、出来てしまう Java のほうが良くなさそう。
別の場所 (といっても直前で良いけれど) で定義すれば何も困らないよ。
質問の本筋ではないが気になる点として、
new で生成したものはどこかで delete しなきゃならないからそのコードだけから判断できる範囲ではなんだか筋が悪そうに見える。
つまりそもそも new する意味がないんじゃない? と思う。
簡潔な回答としては「できない」ということになる。
関数ひとつで終わるような簡単なコールバックならラムダ式で渡せるように設計する。
もう少し複雑なものになると……式の中に定義を書けるのは見通しが悪いし、出来てしまう Java のほうが良くなさそう。
別の場所 (といっても直前で良いけれど) で定義すれば何も困らないよ。
質問の本筋ではないが気になる点として、
new で生成したものはどこかで delete しなきゃならないからそのコードだけから判断できる範囲ではなんだか筋が悪そうに見える。
つまりそもそも new する意味がないんじゃない? と思う。
990デフォルトの名無しさん
2025/04/28(月) 13:12:28.38ID:PR6E6U1X991デフォルトの名無しさん
2025/05/02(金) 09:24:43.58ID:k5bGwZZ0 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){...}
どれが正解?
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){...}
どれが正解?
993はちみつ餃子 ◆8X2XSCHEME
2025/05/02(金) 11:40:02.44ID:n0wyIh3y >>991
for 文の括弧の中はセミコロンで区切られた三つの節を持つ形式である必要があるが、二つの節しかないのが根本的な間違い。
そんでそれを脇に置くとして、ループカウンタ i が unsigned であるときに --i >= 0 という式で判定しようとするのが間違い。
0 以下になることはありえないのだから判定の意味がない。 (無限ループを意図したのでない限りは。)
整数を別の整数型に型変換したときに型変換後の型で表現可能な範囲の値であるならば同じ数値のままであることは保証されて何も問題はない。
逆に言えば扱う値の範囲次第では違う数値に変わったり未定義になったりすることがある。
hoge.count() が返す型が size_t なら最後まで size_t で扱うのが基本的には好ましい。
値が取りうる範囲を把握しているなら問題を起こさない範囲で適切に型変換するのはプログラマの裁量による。
状況によって判断するしかない。
for 文の括弧の中はセミコロンで区切られた三つの節を持つ形式である必要があるが、二つの節しかないのが根本的な間違い。
そんでそれを脇に置くとして、ループカウンタ i が unsigned であるときに --i >= 0 という式で判定しようとするのが間違い。
0 以下になることはありえないのだから判定の意味がない。 (無限ループを意図したのでない限りは。)
整数を別の整数型に型変換したときに型変換後の型で表現可能な範囲の値であるならば同じ数値のままであることは保証されて何も問題はない。
逆に言えば扱う値の範囲次第では違う数値に変わったり未定義になったりすることがある。
hoge.count() が返す型が size_t なら最後まで size_t で扱うのが基本的には好ましい。
値が取りうる範囲を把握しているなら問題を起こさない範囲で適切に型変換するのはプログラマの裁量による。
状況によって判断するしかない。
994デフォルトの名無しさん
2025/05/02(金) 12:05:12.81ID:b7t9YOim 我慢できなくなって説明しちゃうはちみつさん
995デフォルトの名無しさん
2025/05/02(金) 19:42:35.68ID:rPO248eK for(long long i = (long long)hoge.count(); --i >= 0; ){...}
996デフォルトの名無しさん
2025/05/04(日) 09:19:50.28ID:RkNPiBO2 Rust使えばもっと楽になるかと思いきや
面倒が増えただけだったでござる
面倒が増えただけだったでござる
997デフォルトの名無しさん
2025/05/04(日) 10:01:55.29ID:CPTw2I9A >size_t を返す hoge.count() みたいなのがあって
>for(int i = hoge.count(); --i >= 0){...}
Rustなら単に (0..hoge.count()).rev()
>for(int i = hoge.count(); --i >= 0){...}
Rustなら単に (0..hoge.count()).rev()
998はちみつ餃子 ◆8X2XSCHEME
2025/05/04(日) 11:51:46.75ID:w7r9Yiaa 全体としては Rust のほうがだいぶん楽だと思うけどなぁ。
好みや慣れの要素があるから単純には比較できないのだけれど。
好みや慣れの要素があるから単純には比較できないのだけれど。
999デフォルトの名無しさん
2025/05/04(日) 11:59:34.01ID:RkNPiBO2 はちみつさんもRust使ってるんだね
1000デフォルトの名無しさん
2025/05/04(日) 11:59:44.18ID:RkNPiBO2 かわいい
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2364日 21時間 4分 32秒
新しいスレッドを立ててください。
life time: 2364日 21時間 4分 32秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- イーロン・マスク氏、テスラの新型「ロードスター」、空中旋回を披露 動画あり [お断り★]
- ソースネクスト、顧客のパスワードは暗号化して保存していたが、暗号化解除プログラムもサイバー攻撃される 顧客情報2252万件流出 [お断り★]
- 【竹中平蔵】「金銭解雇ルールを作れ」 「全然仕事できないのにクビにできない」正社員に持論 [煮卵★]
- 【野球】ドジャースまさかの4連敗で終戦…大谷翔平8月以来の1発も空砲 ブルワーズにナ・リーグ優勝決定Sで屈する ★2 [阿弥陀ヶ峰★]
- 【速報】餃子の王将社長射殺、暴力団幹部に無罪判決 [ニョキニョキ★]
- 「グラドル超新星」が豊胸疑惑を完全否定、中学でさらし巻き、高校時代の爆裂ビキニ写真で証明 (榎原依那) [少考さん★]
- 【高市悲報】パーツ、ケーブル、電源タップ、何を変えても直らなかった突然のブルスク、高速スタートアップをオフにしたら直る [158478931]
- 「BOOWY」元ドラマー・高橋まこと「安倍から続くアホ総理」「高市首洗って待ってろよ」 [817148728]
- 海上自衛隊官さん、お金に困って楽器を盗んで懲戒免職 [152212454]
- 高市早苗(8月)「首相官邸は私の指示でオンライン会議の環境が整備されています😤」 [465483804]
- 東海道・山陽新幹線、次期新型車両「S0系」投入へフルモデルチェンジ、のぞみ値上げと合わせて発表 [943688309]
- 【高市悲報】やす子「フワちゃ~んw」有吉「お前いつまで言ってんだよ(呆れ)」やす子、番組中突然フワちゃんの名前を叫ぶ [165981677]