0からの、超初心者C++相談室
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr 何にも知らない0からの出発、超初心者のためのC++相談室
895はちみつ餃子 ◆8X2XSCHEME
2024/08/05(月) 12:51:26.12ID:cmuXon6W >>893
その考え方で正しい。
std::unique_ptr をムーブすると抜け殻のほうのオブジェクトは nullptr を指すようになることは保証されるが、
そのスマートポインタ自体が std::unordered_map から勝手に消えたりはしない。
消えて欲しいならそのための操作は必要。
その考え方で正しい。
std::unique_ptr をムーブすると抜け殻のほうのオブジェクトは nullptr を指すようになることは保証されるが、
そのスマートポインタ自体が std::unordered_map から勝手に消えたりはしない。
消えて欲しいならそのための操作は必要。
896はちみつ餃子 ◆8X2XSCHEME
2024/08/05(月) 12:53:54.43ID:cmuXon6W std::unique_ptr 自体はコピーできないがそれが指しているオブジェクトを読むだけなら出来るしコピーすることも出来る (コピーコンストラクタを削除していないなら) 。
897デフォルトの名無しさん
2024/08/06(火) 11:13:46.48ID:SBxTyrdX Rust使おうず
898デフォルトの名無しさん
2024/08/06(火) 12:55:07.35ID:7fXoqzm8 いらね
899デフォルトの名無しさん
2024/08/12(月) 00:31:08.71ID:YAf3BhD8 標準講座C++―基礎からSTLを利用したプログラミングまで 新装版 ハーバート シルト著が気になったのですがこれで勉強したことある方いますか?
900はちみつ餃子 ◆8X2XSCHEME
2024/08/12(月) 01:07:19.65ID:CLy07uUA >>899
読んだことは無いけど 2009 年発売ってのは微妙な部分かもと思う。
2011 年の言語仕様改定がインパクトの強い変更を含んでいて基本的な書き方の習慣に大きな変化があった。
そこらへんの事情が含まれない本だと現状にそぐわない。
読んだことは無いけど 2009 年発売ってのは微妙な部分かもと思う。
2011 年の言語仕様改定がインパクトの強い変更を含んでいて基本的な書き方の習慣に大きな変化があった。
そこらへんの事情が含まれない本だと現状にそぐわない。
901デフォルトの名無しさん
2024/08/12(月) 03:05:00.33ID:LOlm/bL8 weak_ptrが処理の途中で解放されてしまうのを防ぐために lock()を呼んでshared_ptrを
取得してから処理、というのがありますが、
lock()を呼んだ時点で既に解放されていることもあるわけですよね?
確かにlock()の戻り値をチェックして不正な呼び出し等を防げるのはありがたいのですが、
そもそもオブジェクトが既に解放されているのは残念といいますか。
lock()を呼んでからする処理の場所に来るまでに解放されないようにしたい、と思った場合、
どうしたらよいのでしょうか? もしかしてそもそもweak_ptrを使うな、ということになります?
取得してから処理、というのがありますが、
lock()を呼んだ時点で既に解放されていることもあるわけですよね?
確かにlock()の戻り値をチェックして不正な呼び出し等を防げるのはありがたいのですが、
そもそもオブジェクトが既に解放されているのは残念といいますか。
lock()を呼んでからする処理の場所に来るまでに解放されないようにしたい、と思った場合、
どうしたらよいのでしょうか? もしかしてそもそもweak_ptrを使うな、ということになります?
902デフォルトの名無しさん
2024/08/12(月) 03:59:48.65ID:ArETDaeV あいまいな言葉よりコード見せてみ
903デフォルトの名無しさん
2024/08/12(月) 08:49:28.44ID:+jMHtzbv 既に寿命が切れてる場合はlock() が無効な shared_ptr を返すのでそれで判定する
lock() を呼んだ後は戻り値の shared_ptr が寿命を伸ばすので問題ない
shared_ptrは「有効なshared_ptrが1つ以上ある間はオブジェクトの寿命が消えない」ものなので、lock() が返すshared_ptrを保持してる間は消えないよ
lockを「weak_ptrからshared_ptrへの昇格を試みる」ものと考えても良い
lockしたい箇所の時点で必ずオブジェクトが生きていて欲しいなら、それはweak_ptrでなくshared_ptrを使うべき
lock() を呼んだ後は戻り値の shared_ptr が寿命を伸ばすので問題ない
shared_ptrは「有効なshared_ptrが1つ以上ある間はオブジェクトの寿命が消えない」ものなので、lock() が返すshared_ptrを保持してる間は消えないよ
lockを「weak_ptrからshared_ptrへの昇格を試みる」ものと考えても良い
lockしたい箇所の時点で必ずオブジェクトが生きていて欲しいなら、それはweak_ptrでなくshared_ptrを使うべき
904デフォルトの名無しさん
2024/08/12(月) 10:20:21.64ID:Lq53CINI >>899
2000年くらいにSTLはこれで勉強したよ
基本的なことは網羅されているが
C++の新しい仕様には対応してないので
別途学習すべし
いまもっと良い本があるかは分からない
C++の仕様は建て増しなので
この本に書かれていることは無意味ではない
2000年くらいにSTLはこれで勉強したよ
基本的なことは網羅されているが
C++の新しい仕様には対応してないので
別途学習すべし
いまもっと良い本があるかは分からない
C++の仕様は建て増しなので
この本に書かれていることは無意味ではない
905デフォルトの名無しさん
2024/08/12(月) 13:09:35.61ID:XQ/hRBSk キメラ
906デフォルトの名無しさん
2024/08/12(月) 16:00:24.68ID:K9Aw1MHl 超初心者とは何なのか・・・
907デフォルトの名無しさん
2024/08/13(火) 01:12:06.02ID:sOEG0OlC >>900>>904
返答ありがとうございます。
今同著者の別の本で勉強中ですが基本的なところでこれも買っとこうかな?って質問しました。
基本参考書として買ってみます。
基礎的なところ終わったら自分が作りたいプログラムに必要な現状の本でも買ってみます。
返答ありがとうございます。
今同著者の別の本で勉強中ですが基本的なところでこれも買っとこうかな?って質問しました。
基本参考書として買ってみます。
基礎的なところ終わったら自分が作りたいプログラムに必要な現状の本でも買ってみます。
908デフォルトの名無しさん
2024/08/13(火) 01:32:59.16ID:sOEG0OlC すいません。誰か下のコンパイルオプションわかる方いますか?
解いてた問題の解答にも文字化けするって書いてあったので文字化け対策のオプションなんかないかな?って思って調べたらこのオプションで解決できるって出てたので使ってた人の入力例そのままオプション挿入してみてちゃんと解決できたから気になって調べたんですがググっても出てこなくて入力例が次の行のやつです。
g++ test.cpp -finput-charset=CP932 -fexec-charset=CP932
-finput-charset
-fexec-charset
解いてた問題の解答にも文字化けするって書いてあったので文字化け対策のオプションなんかないかな?って思って調べたらこのオプションで解決できるって出てたので使ってた人の入力例そのままオプション挿入してみてちゃんと解決できたから気になって調べたんですがググっても出てこなくて入力例が次の行のやつです。
g++ test.cpp -finput-charset=CP932 -fexec-charset=CP932
-finput-charset
-fexec-charset
909デフォルトの名無しさん
2024/08/13(火) 02:09:15.07ID:sAvdrrrS910デフォルトの名無しさん
2024/08/13(火) 07:27:51.38ID:8FMmWnXe ああなるほど、意図せずマイナス検索状態になってたから一件もヒットしなかったってことか
あるある
あるある
911デフォルトの名無しさん
2024/08/13(火) 08:43:34.22ID:6ajF2Nvb >>899
シルトは有名
ロベールも有名だったけど、
C++11 に対応していないので古い
STL標準講座、1999年
ハーバート・シルト 著
επιστημη(エピステーメー) 監修
この本も古い。
確か、エピステーメーはC++ の標準化委員だっけ?
C++テンプレートテクニック―簡潔で再利用しやすいコードのためのC++活用術
επιστημη/高橋 晶【著】、2009
独習C++ 新版、2019/11
高橋 航平 (著), επιστημη(エピステーメー) (監修)
シルトは有名
ロベールも有名だったけど、
C++11 に対応していないので古い
STL標準講座、1999年
ハーバート・シルト 著
επιστημη(エピステーメー) 監修
この本も古い。
確か、エピステーメーはC++ の標準化委員だっけ?
C++テンプレートテクニック―簡潔で再利用しやすいコードのためのC++活用術
επιστημη/高橋 晶【著】、2009
独習C++ 新版、2019/11
高橋 航平 (著), επιστημη(エピステーメー) (監修)
912デフォルトの名無しさん
2024/08/13(火) 12:38:43.84ID:sOEG0OlC913デフォルトの名無しさん
2024/08/13(火) 12:57:30.56ID:lcpgo4xV914デフォルトの名無しさん
2024/08/14(水) 09:51:50.71ID:UePmitOB 変数名の付け方について教えてくだち
Objectの個数、とかは nobjs とか objcnt (類例: argc)とかは本に載っていてそれぞれ
nobjs --- number of objects の短縮表記
objcnt --- object count の短縮表記(名詞obuectが形容詞的活用
となって対応する同じ語順の英語表現がある気がするのですが
<limit.h> の INT_MAX、INT_MIN はmaxやminがなぜ後置?
何の短縮形?
minやmaxの後置と前置の使い分けとは一体……
Objectの個数、とかは nobjs とか objcnt (類例: argc)とかは本に載っていてそれぞれ
nobjs --- number of objects の短縮表記
objcnt --- object count の短縮表記(名詞obuectが形容詞的活用
となって対応する同じ語順の英語表現がある気がするのですが
<limit.h> の INT_MAX、INT_MIN はmaxやminがなぜ後置?
何の短縮形?
minやmaxの後置と前置の使い分けとは一体……
915はちみつ餃子 ◆8X2XSCHEME
2024/08/14(水) 10:32:46.90ID:z6gmNdON >>914
C は一貫した名付規約 (naming convention) を定めていないし、主要な処理系が持っていたものを追認する形で仕様に入ることもよくあるので起源ごとに名前の方式は異なる。
慣例はおおよそ踏襲されるのでもし新しい整数型が追加されたらそれの最大・最小値は同じような名前で表されると思うけれど全体を通したルールはない。
C は一貫した名付規約 (naming convention) を定めていないし、主要な処理系が持っていたものを追認する形で仕様に入ることもよくあるので起源ごとに名前の方式は異なる。
慣例はおおよそ踏襲されるのでもし新しい整数型が追加されたらそれの最大・最小値は同じような名前で表されると思うけれど全体を通したルールはない。
916デフォルトの名無しさん
2024/08/14(水) 11:43:42.69ID:gAudIBvM MIN_LONG, MIN_SHORT, MIN_USHORT だとmin まで同じで探しにくい
INT_MAXだとINT_ まで打てばコード補完できるけど、逆の語順だとMAX_ まで打った際に各型の候補がズラーっと並ぶことになる
当時は高級なエディタは無いし、多分そんな意図で命名してないと思うけど 、便利と言えば便利
意味を考えるならそれは max of int でなく、intという空間におけるmaxという値 (言語によってはint.max と書くような値) と考えると良いと思う
INT_MAXだとINT_ まで打てばコード補完できるけど、逆の語順だとMAX_ まで打った際に各型の候補がズラーっと並ぶことになる
当時は高級なエディタは無いし、多分そんな意図で命名してないと思うけど 、便利と言えば便利
意味を考えるならそれは max of int でなく、intという空間におけるmaxという値 (言語によってはint.max と書くような値) と考えると良いと思う
917デフォルトの名無しさん
2024/08/14(水) 13:14:34.06ID:+mepCwPn C++ならstd::numeric_limits使おうよ
918デフォルトの名無しさん
2024/08/14(水) 13:42:54.01ID:UePmitOB919デフォルトの名無しさん
2024/08/14(水) 13:49:52.66ID:NvgdlQi4 些細なことにこだわんな
複数人で開発してる以上そういう揺れはどうしても起こり得る
受け入れて先行け
複数人で開発してる以上そういう揺れはどうしても起こり得る
受け入れて先行け
920デフォルトの名無しさん
2024/08/14(水) 14:35:57.51ID:uvjb8yy0 object count, count number of object
integer maximum, maximum of integer
…同じじゃね?
integer maximum, maximum of integer
…同じじゃね?
921はちみつ餃子 ◆8X2XSCHEME
2024/08/14(水) 15:32:03.62ID:z6gmNdON 全体を通した名前の指針としてはマクロは大文字でそれ以外は小文字 (スネークケース) ってくらいかなぁ。
関数形式のマクロは小文字なのもあったりと例外はいくらかあるけども。
関数形式のマクロは小文字なのもあったりと例外はいくらかあるけども。
922デフォルトの名無しさん
2024/08/14(水) 21:18:49.93ID:uPunKI9P 今ってクラス名とか割とキャメルケースじゃないですか? DocumentWindowみたいな
一方でC++自体は小文字とアンダースコアで
でも意外とちぐはぐな感じはない。むしろ予約語、システム的なものは小文字で
ユーザー定義のものと分離されていていい感じ?
一方でC++自体は小文字とアンダースコアで
でも意外とちぐはぐな感じはない。むしろ予約語、システム的なものは小文字で
ユーザー定義のものと分離されていていい感じ?
923はちみつ餃子 ◆8X2XSCHEME
2024/08/14(水) 22:08:58.60ID:z6gmNdON >>922
C++ の大元の設計者である Stroustrup は言語の技術的な詳細 (文法上の役割?) を名前に埋め込むことを嫌がってる。
https://www.stroustrup.com/bs_faq2.html#Hungarian
クラスだから、ユーザ定義だからという区別を名前に入れるべきじゃないという考え方を取ってるわけ。
その一方で言語としての縛りは入れないという方針も著書に書いてある。
思うところはありつつも個々の場面は言語ユーザの判断にゆだねるってことだね。
C++ は C++ だけで完結するわけじゃなくて色んなシステムと接続することもあるからその都合に合わさないといけないこともあるだろうし。
たとえば Windows だと多くの API がキャメルケースなわけで。
私自身にはクラス名をキャメルケースにするのはちぐはぐに見えている。
でも出自が違うライブラリを組み合わせるならそういうこともしょうがないとも思ってる。
C++ の大元の設計者である Stroustrup は言語の技術的な詳細 (文法上の役割?) を名前に埋め込むことを嫌がってる。
https://www.stroustrup.com/bs_faq2.html#Hungarian
クラスだから、ユーザ定義だからという区別を名前に入れるべきじゃないという考え方を取ってるわけ。
その一方で言語としての縛りは入れないという方針も著書に書いてある。
思うところはありつつも個々の場面は言語ユーザの判断にゆだねるってことだね。
C++ は C++ だけで完結するわけじゃなくて色んなシステムと接続することもあるからその都合に合わさないといけないこともあるだろうし。
たとえば Windows だと多くの API がキャメルケースなわけで。
私自身にはクラス名をキャメルケースにするのはちぐはぐに見えている。
でも出自が違うライブラリを組み合わせるならそういうこともしょうがないとも思ってる。
924デフォルトの名無しさん
2024/08/14(水) 22:31:40.03ID:gAudIBvM クラスや変数名に異なる命名を敵用するといった考え方が出てきたのがおそらC++登場の後だから仕方ないという感じ
C++は他の言語ほどには統一されたルールはない
自分は個人的に以下のルールを採用してる
おそらくPythonやRustあたりのルールに近い
・型の名前 (クラス、構造体、enum) は PascalCase
・変数と関数名は lower_snake_case
・定数とマクロは UPPER_SNAKE_CASE
・クラスのメンバー変数は value_ のように末尾にアンダースコアを付ける
・構造体のメンバーはアンダースコアなし (変数と同じ)
上記もあくまで個人的な意見に過ぎないので、プロジェクトの方針があるならそれに合わせるのが良いと思う
あと基本的な命名ルールも言語によって変わるので、その言語内に慣習やルールがあるならそれも見ておくと良いと思う
例えばC#はメソッドを PascalCase にするなど、上記とは異なる慣習がある
C++は他の言語ほどには統一されたルールはない
自分は個人的に以下のルールを採用してる
おそらくPythonやRustあたりのルールに近い
・型の名前 (クラス、構造体、enum) は PascalCase
・変数と関数名は lower_snake_case
・定数とマクロは UPPER_SNAKE_CASE
・クラスのメンバー変数は value_ のように末尾にアンダースコアを付ける
・構造体のメンバーはアンダースコアなし (変数と同じ)
上記もあくまで個人的な意見に過ぎないので、プロジェクトの方針があるならそれに合わせるのが良いと思う
あと基本的な命名ルールも言語によって変わるので、その言語内に慣習やルールがあるならそれも見ておくと良いと思う
例えばC#はメソッドを PascalCase にするなど、上記とは異なる慣習がある
925デフォルトの名無しさん
2024/08/14(水) 22:37:11.57ID:gAudIBvM 標準ライブラリは型が lower_snake なんだけどね
(std::string とか std::vectorとか)
自作型をこれに合わせるかは好みの域を出ない気がする
自分は型と関数で区別付けたいから PascalCaseにしてます (例. class MyData; enum MyEnum)
(std::string とか std::vectorとか)
自作型をこれに合わせるかは好みの域を出ない気がする
自分は型と関数で区別付けたいから PascalCaseにしてます (例. class MyData; enum MyEnum)
926デフォルトの名無しさん
2024/08/14(水) 22:37:12.21ID:gAudIBvM 標準ライブラリは型が lower_snake なんだけどね
(std::string とか std::vectorとか)
自作型をこれに合わせるかは好みの域を出ない気がする
自分は型と関数で区別付けたいから PascalCaseにしてます (例. class MyData; enum MyEnum)
(std::string とか std::vectorとか)
自作型をこれに合わせるかは好みの域を出ない気がする
自分は型と関数で区別付けたいから PascalCaseにしてます (例. class MyData; enum MyEnum)
927デフォルトの名無しさん
2024/08/18(日) 12:06:41.90ID:BK0va+Po iostreamとか糞やん
928デフォルトの名無しさん
2024/08/23(金) 00:25:52.73ID:Vi8prHau はちみつ先生の中の人ってエピステーメー氏じゃないですか。
929デフォルトの名無しさん
2024/08/23(金) 12:18:20.78ID:x07V73qD そなの? 何で?
930デフォルトの名無しさん
2024/08/23(金) 23:55:05.93ID:Vi8prHau エピ氏はかつて標準化委員だったそうです。はちみつ先生は、規格書が完全に頭に入ってる感じですから委員経験者と見ても違和感ない。
スレ民に委員がいるという話もあります。
あと前に「~じゃろ」ってレスを一度だけ見たのですが、それがエピ氏風に思えました。
スレ民に委員がいるという話もあります。
あと前に「~じゃろ」ってレスを一度だけ見たのですが、それがエピ氏風に思えました。
931デフォルトの名無しさん
2024/08/24(土) 00:19:56.05ID:czb9YTjo なるほどー
証拠としては足りないと思うけども矛盾はしない
はちみつ氏と対立する立場で議論したことがあるけども
エピ氏だとしたら感慨深い
STL標準講座で勉強した世代だし
証拠としては足りないと思うけども矛盾はしない
はちみつ氏と対立する立場で議論したことがあるけども
エピ氏だとしたら感慨深い
STL標準講座で勉強した世代だし
932デフォルトの名無しさん
2024/08/25(日) 00:23:17.55ID:zZ+WMAII >>928
私は個人的なことは書かないようにしているし書いている場合でも嘘を混ぜているのだけれどプロのプログラマではないのは本当だと断言する。
肯定も否定もしたくないんだけど変に誰かと混同されるとその人に迷惑がかかるかもしれないからはっきりさせておく。
私はプログラムなりプログラミングの解説なりで金を貰ったことは全くない素人で、名の知られた人物ではない。
アマチュアなりになんらかの分野で有名だったりもしない。
>>930
規格が頭に入ってるわけないでしょ。 毎回調べてる。
プログラムの設計の妥当性などについては議論を戦わせればよいと思うけど今ある規格がどうなってるかは規格を調べるしかない。
それなのに空想で議論するような馬鹿馬鹿しいことがちょくちょく起こってるから話を先に進めたくて規格を持ち出してるだけ。
私は個人的なことは書かないようにしているし書いている場合でも嘘を混ぜているのだけれどプロのプログラマではないのは本当だと断言する。
肯定も否定もしたくないんだけど変に誰かと混同されるとその人に迷惑がかかるかもしれないからはっきりさせておく。
私はプログラムなりプログラミングの解説なりで金を貰ったことは全くない素人で、名の知られた人物ではない。
アマチュアなりになんらかの分野で有名だったりもしない。
>>930
規格が頭に入ってるわけないでしょ。 毎回調べてる。
プログラムの設計の妥当性などについては議論を戦わせればよいと思うけど今ある規格がどうなってるかは規格を調べるしかない。
それなのに空想で議論するような馬鹿馬鹿しいことがちょくちょく起こってるから話を先に進めたくて規格を持ち出してるだけ。
933はちみつ餃子 ◆8X2XSCHEME
2024/08/25(日) 00:54:19.91ID:zZ+WMAII 名前が抜けてた。 >>932 は私ね。
JaneXeno で書き込めなくてウェブブラウザから書き込んだらミスった。
JaneXeno で書き込めなくてウェブブラウザから書き込んだらミスった。
934デフォルトの名無しさん
2024/08/25(日) 18:28:51.25ID:uK1NQ0Uz 質問です。参考書に乗ってた例試してたんですが下のコードがどういう動作してるのかよくわかりません。実行したらif(argc !=2)のところのコメント表示しかされませんでした。
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc !=2) {
cout <<"使い方: WRITE <ファイル名>\n";
return 1;
}
ofstream out(argv[1]);
if(!out) {
cout <<"出力ファイルが開けません\n";
return 1;
}
char str[80];
cout << "文字列をディスクに書き込み、$で停止します\n";
do {
cout << ": ";
cin >> str;
out << str << endl;
}while(*str !='$');
out.close();
return 0;
}
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc !=2) {
cout <<"使い方: WRITE <ファイル名>\n";
return 1;
}
ofstream out(argv[1]);
if(!out) {
cout <<"出力ファイルが開けません\n";
return 1;
}
char str[80];
cout << "文字列をディスクに書き込み、$で停止します\n";
do {
cout << ": ";
cin >> str;
out << str << endl;
}while(*str !='$');
out.close();
return 0;
}
935デフォルトの名無しさん
2024/08/25(日) 18:44:55.52ID:tzsbYjlF936デフォルトの名無しさん
2024/08/25(日) 23:27:35.25ID:uK1NQ0Uz >>935
返信ありがとうございます。
mainのところがコマンドライン実行用のものだとわかったのですがif(argc !=2)だけが実行されて
char str[80]の一行下のコメントまで行かないで実行終わってるのでそこがどうなってるのかよくわかってません。
返信ありがとうございます。
mainのところがコマンドライン実行用のものだとわかったのですがif(argc !=2)だけが実行されて
char str[80]の一行下のコメントまで行かないで実行終わってるのでそこがどうなってるのかよくわかってません。
937934
2024/08/26(月) 00:51:12.62ID:Lf2Vflpz 参考書に載ってるからまさかと思ったんですが>>934のコードってif文のreturnで強制終了させられてるってことですよね?
ちょっと気になってif文のところコメントアウトして動かしてみたらdo while文のところまで動いてたからif(argc !=2)の説明文表示しておいてがreturn 1で返してmainのところが終了させてるのかというのであってますか?
しかも出力ファイル検出用のif文のところも絶対に入る形になっちゃってるみたいなので説明文はdo while文の入力で出力ファイル指定してね。みたいな文章ついているんですが例として出てるのに欠陥あるコードという認識でよろしいのでしょうか?
ちょっと気になってif文のところコメントアウトして動かしてみたらdo while文のところまで動いてたからif(argc !=2)の説明文表示しておいてがreturn 1で返してmainのところが終了させてるのかというのであってますか?
しかも出力ファイル検出用のif文のところも絶対に入る形になっちゃってるみたいなので説明文はdo while文の入力で出力ファイル指定してね。みたいな文章ついているんですが例として出てるのに欠陥あるコードという認識でよろしいのでしょうか?
938934
2024/08/26(月) 01:02:13.28ID:Lf2Vflpz 自己解決しました。
今回の例って実行時に一緒に書き込みファイル名入力するだけだったのを気付いてなかっただけでした。
今回の例って実行時に一緒に書き込みファイル名入力するだけだったのを気付いてなかっただけでした。
939デフォルトの名無しさん
2024/08/26(月) 09:03:23.80ID:Nzy9klFi せっかく>>935がキーワードで検索してるのに「自己解決」かよ
940デフォルトの名無しさん
2024/08/26(月) 09:15:40.09ID:y+gYSKWx 超初心者スレでそんな回りくどい指摘で理解しろというほうが厳しいのでは
941デフォルトの名無しさん
2024/08/26(月) 09:42:05.98ID:B88aYAlq >>934
「よくわかりません」というのは質問になっていません。
何がわからないのかが伝わるようにまとめてください。
結果からすると argc や argv がコマンドラインから渡されるものだということがわかっていなかったようですが、質問一般のやり方としては「こうなると理解している」「でも実際にはこうなった」という形にすると伝わりやすいと思います。
質問を整理する過程で答えが分かってしまうのもよくあることです。 (ラバーダック・デバッグ)
それと参考書を元にしている場合は参考書のタイトルを書くのが望ましいです。
もしその本を持っている人がいたら前後の文脈からより適切な回答をできますし、同じ疑問をもった人がウェブ検索でここにたどり着くことが出来るかもしれないからです。
と、超初心者スレらしく質問の仕方の基本を書いておきます。
「よくわかりません」というのは質問になっていません。
何がわからないのかが伝わるようにまとめてください。
結果からすると argc や argv がコマンドラインから渡されるものだということがわかっていなかったようですが、質問一般のやり方としては「こうなると理解している」「でも実際にはこうなった」という形にすると伝わりやすいと思います。
質問を整理する過程で答えが分かってしまうのもよくあることです。 (ラバーダック・デバッグ)
それと参考書を元にしている場合は参考書のタイトルを書くのが望ましいです。
もしその本を持っている人がいたら前後の文脈からより適切な回答をできますし、同じ疑問をもった人がウェブ検索でここにたどり着くことが出来るかもしれないからです。
と、超初心者スレらしく質問の仕方の基本を書いておきます。
942デフォルトの名無しさん
2024/08/26(月) 10:49:37.17ID:3+7ACU+U !=2 よりも < 2 派は少数派?
943デフォルトの名無しさん
2024/08/26(月) 15:31:48.06ID:cZUTj8Xv !=2のほうが安全よね
引数が2つ以上渡された場合、ユーザーが引数の意味を勘違いしている可能性があるので第1引数をファイル名として扱うのは危険かもしれない
引数が2つ以上渡された場合、ユーザーが引数の意味を勘違いしている可能性があるので第1引数をファイル名として扱うのは危険かもしれない
944デフォルトの名無しさん
2024/08/26(月) 18:34:12.28ID:vEMD05Dv まんこまんこー まんこまんこー まんこまんこー 君にまんこまんこー
945デフォルトの名無しさん
2024/08/26(月) 18:43:51.64ID:FhzwHLyM 萬恋次郎
よろずれんじろう
よろずれんじろう
946デフォルトの名無しさん
2024/08/28(水) 10:09:54.84ID:W2AehnGr 一つや無しでも許容するかしないかの違い
947デフォルトの名無しさん
2024/10/29(火) 09:32:10.21ID:Pp2f7Vup すみません、std::atomic<bool> m_added = false; というインスタンス変数がある
クラスで bool isAdded() { return m_added; } というメンバ関数を作ると
error: use of deleted function 'std::atomic<bool>::atomic(const std::atomic<bool>&)'
というエラーになってしまいます。なぜこんなことに?
ググると return m_added.load(); とすればよさげで、実際エラーにはならなくなりますが
これで合っていますでしょうか?
クラスで bool isAdded() { return m_added; } というメンバ関数を作ると
error: use of deleted function 'std::atomic<bool>::atomic(const std::atomic<bool>&)'
というエラーになってしまいます。なぜこんなことに?
ググると return m_added.load(); とすればよさげで、実際エラーにはならなくなりますが
これで合っていますでしょうか?
948デフォルトの名無しさん
2024/10/29(火) 10:21:38.62ID:G3xxa4mJ949はちみつ餃子 ◆8X2XSCHEME
2024/10/29(火) 11:42:59.70ID:IsdOq2r9 >>947
インスタンス変数って何? 文脈から推測するとデータメンバのことかな?
だとするとこんな感じのことだと思って説明するよ。
class foo {
std::atomic<bool> m_added = false;
public:
bool isAdded() { return m_added; }
};
こういう書き方だと std::atomic<bool> m_added = false; はコピー初期化という扱いになる。
なのでコピーコンストラクタが必要だが std::atomic にはコピーコンストラクタが無いのでコピーコンストラクタがないという旨がエラーメッセージとして表示される。
解決方法としてはメンバ初期化子リストで初期化すればいい。 これなら直接初期化の扱いになる。
class foo {
std::atomic<bool> m_added;
public:
foo(void) : m_added(false) {}
bool isAdded() { return m_added.load(); }
};
C++17 以降だとコピー省略が保証される (かつコピーコンストラクタの存在を要求しない) 場面なので C++17 以降を使うのなら修正は必要ない。
std::atomic<T> には operator T() があるので std::atomic<bool> から bool へは変換できて、そのときの効果は std::atomic<bool>::load を呼び出すのと同じ。
暗黙に変換するのでこの部分は本来なら問題ないはず。
ここを修正してエラーが出なくなったというのは何か誤解してると思う。
インスタンス変数って何? 文脈から推測するとデータメンバのことかな?
だとするとこんな感じのことだと思って説明するよ。
class foo {
std::atomic<bool> m_added = false;
public:
bool isAdded() { return m_added; }
};
こういう書き方だと std::atomic<bool> m_added = false; はコピー初期化という扱いになる。
なのでコピーコンストラクタが必要だが std::atomic にはコピーコンストラクタが無いのでコピーコンストラクタがないという旨がエラーメッセージとして表示される。
解決方法としてはメンバ初期化子リストで初期化すればいい。 これなら直接初期化の扱いになる。
class foo {
std::atomic<bool> m_added;
public:
foo(void) : m_added(false) {}
bool isAdded() { return m_added.load(); }
};
C++17 以降だとコピー省略が保証される (かつコピーコンストラクタの存在を要求しない) 場面なので C++17 以降を使うのなら修正は必要ない。
std::atomic<T> には operator T() があるので std::atomic<bool> から bool へは変換できて、そのときの効果は std::atomic<bool>::load を呼び出すのと同じ。
暗黙に変換するのでこの部分は本来なら問題ないはず。
ここを修正してエラーが出なくなったというのは何か誤解してると思う。
950949
2024/10/29(火) 21:08:49.76ID:DeRlzLOn すみません、色々勘違いやら説明不足やらあるようです。あと用語もいろいろと。
まず std::atomic<bool> m_added = false; という初期化ですが、
自分の環境はC++17(のはず)なので、これは大丈夫だったようです
まず std::atomic<bool> m_added = false; という初期化ですが、
自分の環境はC++17(のはず)なので、これは大丈夫だったようです
951949
2024/10/29(火) 21:14:42.30ID:DeRlzLOn で、本当の問題は、condition_variable::wait_for()の述語バージョンのコードでして
諸般の事情でネットから拾ってきたコードを一部変更して書きますと(たぶんインデントが
壊れますが、ご了承ください)
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <atomic>
std::mutex mtx;
std::condition_variable cv;
std::atomic<bool> ready = false;
void wait_for_event() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait_for(lock, std::chrono::seconds(3), []{ return ready; });
std::cout << "Event occurred or timeout reached" << std::endl;
}
int main(void) {
std::thread worker(wait_for_event);
worker.join();
return 0;
}
諸般の事情でネットから拾ってきたコードを一部変更して書きますと(たぶんインデントが
壊れますが、ご了承ください)
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <atomic>
std::mutex mtx;
std::condition_variable cv;
std::atomic<bool> ready = false;
void wait_for_event() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait_for(lock, std::chrono::seconds(3), []{ return ready; });
std::cout << "Event occurred or timeout reached" << std::endl;
}
int main(void) {
std::thread worker(wait_for_event);
worker.join();
return 0;
}
952デフォルトの名無しさん
2024/10/29(火) 21:15:37.83ID:oxmgzCly volatileが廃止されてatomicになったんだっけ?
953949
2024/10/29(火) 21:19:59.00ID:DeRlzLOn この、述語部分のラムダ式で return ready; とするとコピーが発生するのでatomic的に
まずい(それをコピーコンストラクタをdeleteすることで実現している)、という理解です
で、ではどうしたらいいかという話に
まずい(それをコピーコンストラクタをdeleteすることで実現している)、という理解です
で、ではどうしたらいいかという話に
954デフォルトの名無しさん
2024/10/29(火) 21:25:03.73ID:DeRlzLOn955デフォルトの名無しさん
2024/10/29(火) 21:37:22.02ID:vJbaxs/e 述語の戻り値型にboolを明示的に指定すればおk
956はちみつ餃子 ◆8X2XSCHEME
2024/10/30(水) 07:03:45.19ID:o3z0lAnP >>951
ラムダ式の返却値の型は省略すると return に与えた式から推論され、推論結果は参照にはならない。
つまり []{ return ready; } は []->std::atomic<bool>{ return ready; } と書いたのと同じということ。
これだと値を返すときにコピーが発生するのでコピーコンストラクタが必要 (だけど実際には無い) ということになってしまう。
解決方法としては load を呼ぶというのは妥当な方法のひとつだけど、
返却値として bool を明示する、つまり []->bool { return ready; } とするのでもよいし、
キャストを書いて [] { return static_cast<bool>(ready); } というようにするのでも良い。
見栄えからすると [] { return bool(ready); } のほうが綺麗かな?
ラムダ式の返却値の型は省略すると return に与えた式から推論され、推論結果は参照にはならない。
つまり []{ return ready; } は []->std::atomic<bool>{ return ready; } と書いたのと同じということ。
これだと値を返すときにコピーが発生するのでコピーコンストラクタが必要 (だけど実際には無い) ということになってしまう。
解決方法としては load を呼ぶというのは妥当な方法のひとつだけど、
返却値として bool を明示する、つまり []->bool { return ready; } とするのでもよいし、
キャストを書いて [] { return static_cast<bool>(ready); } というようにするのでも良い。
見栄えからすると [] { return bool(ready); } のほうが綺麗かな?
957はちみつ餃子 ◆8X2XSCHEME
2024/10/30(水) 15:17:53.47ID:o3z0lAnP 色々と書いたけど、この場合について言えば変換に頼るよりは load を呼んだほうが意図が読み取りやすくて良いと思う。
958デフォルトの名無しさん
2024/10/30(水) 16:06:31.71ID:kddcnuFp つーかこのコードだとreadyはatomicにする必要がない
959デフォルトの名無しさん
2024/11/03(日) 07:07:35.61ID:LyKtE2MZ960デフォルトの名無しさん
2024/11/23(土) 23:49:52.60ID:thI1occS std::anyを使っていて、type()の返す形によって処理を変えたいのですが、
今はこれを typeid(形) と比較するif-else文の繰り返しを書いています
ググったら、hash_code()を使えばswitch文で書けるというのがあったのですが... 書けます?
エラーでコンパイルできないんですが
error: call to non-'constexpr' function 'std::size_t std::type_info::hash_code() const'
今はこれを typeid(形) と比較するif-else文の繰り返しを書いています
ググったら、hash_code()を使えばswitch文で書けるというのがあったのですが... 書けます?
エラーでコンパイルできないんですが
error: call to non-'constexpr' function 'std::size_t std::type_info::hash_code() const'
961はちみつ餃子 ◆8X2XSCHEME
2024/11/24(日) 12:09:51.87ID:3DfWckE7962はちみつ餃子 ◆8X2XSCHEME
2024/11/24(日) 12:55:51.06ID:3DfWckE7 >>960
switch の case ラベルに hash_code を使うという意味なら不可能。
case ラベルは定数 (定数式) であることを要求していて std::type_info::hash_code は constexpr が付いていないので結果は定数にならない。
コンパイル時計算するなんらかのハッシュ関数を用意すれば一応はなんとかならんでもないが……。
余興の類であって普通のテクニックとは言い難い。
そもそも std::any が不格好な仕組みなので std::any を使う以上は不格好になることを受け入れないと仕方がないと思う。
switch の case ラベルに hash_code を使うという意味なら不可能。
case ラベルは定数 (定数式) であることを要求していて std::type_info::hash_code は constexpr が付いていないので結果は定数にならない。
コンパイル時計算するなんらかのハッシュ関数を用意すれば一応はなんとかならんでもないが……。
余興の類であって普通のテクニックとは言い難い。
そもそも std::any が不格好な仕組みなので std::any を使う以上は不格好になることを受け入れないと仕方がないと思う。
9631
2024/12/14(土) 02:53:40.88ID:Bddn5MUb なに?プログラムって。むつかしそうだなー
ぜんぜん知らないんだけど、ちょっとやってみたいなー
ってな人も、入れてあげてね。
そういうスレなんだから。
ぜんぜん知らないんだけど、ちょっとやってみたいなー
ってな人も、入れてあげてね。
そういうスレなんだから。
964デフォルトの名無しさん
2024/12/14(土) 14:30:51.75ID:TQJHLK8K そうしたければお前がやるんだよ
他人に期待すんな
こっちは気が向いたら好きに回答するだけ
あと過度な自治厨は嫌われるからな
他人に期待すんな
こっちは気が向いたら好きに回答するだけ
あと過度な自治厨は嫌われるからな
965デフォルトの名無しさん
2024/12/16(月) 20:29:27.83ID:lHJTCZF8 人がいないからって、
お題を完全に無視して自分勝手
寄ってこようかとする何も知らない人は、
怖くて寄り付けないよ
お題を完全に無視して自分勝手
寄ってこようかとする何も知らない人は、
怖くて寄り付けないよ
966デフォルトの名無しさん
2024/12/26(木) 15:20:00.18ID:Max/6hcg 独習でc++の勉強しているのですがそろそろ終わり見えて来たんで終わる前に次の参考書ほしいのですがどんなのがいいのでしょうか?
現在の作りたいソフトがチューナーボードを利用したチャンネルスキャンや復調前の搬送波の保存をwinやLinuxで使える規格で作ってみたいと思っています。最終的にはそこから番組表とか自動構築できるところまでやってタイムシフトできるようにしてみたいと思ってます。
現在の作りたいソフトがチューナーボードを利用したチャンネルスキャンや復調前の搬送波の保存をwinやLinuxで使える規格で作ってみたいと思っています。最終的にはそこから番組表とか自動構築できるところまでやってタイムシフトできるようにしてみたいと思ってます。
967デフォルトの名無しさん
2024/12/26(木) 15:41:38.20ID:NWZL3CyL 基本わかったら作り始めたらいい
チューナーボードのsdkのマニュアル読め
最初は出来損ないでいいから完成させろ
チューナーボードのsdkのマニュアル読め
最初は出来損ないでいいから完成させろ
968デフォルトの名無しさん
2024/12/26(木) 22:37:43.96ID:Bko97FmB lower_bound x以上で最小
upper_bound xより上で最小
upper_bound - 1 x以下で最大
は記述がありましたが
lower_bound - 1をググってるのですが出てきません
多分x未満で最大だと思うのですがあってますか?
upper_bound xより上で最小
upper_bound - 1 x以下で最大
は記述がありましたが
lower_bound - 1をググってるのですが出てきません
多分x未満で最大だと思うのですがあってますか?
969デフォルトの名無しさん
2024/12/26(木) 23:19:55.33ID:/ipDVGme +
970デフォルトの名無しさん
2024/12/26(木) 23:49:39.69ID:ijj1Fuin >>968
サンプルコード書いて確かめなよ
サンプルコード書いて確かめなよ
971デフォルトの名無しさん
2024/12/27(金) 09:37:21.60ID:O2xssw1P >>967
sdkのマニュアルとかないボードみたいなんでテレビ視聴用のテストソフトコード見ながら自分が欲しいもの書いてみます。
ところでvisual studio使ったことないのでわからないのですがこのソフトの書き方、読み方しっかり学べる本ってないでしょうか?今までテキストエディタで書いてg++でやってたからビルドとテストがあるぐらいしかわかりません。
sdkのマニュアルとかないボードみたいなんでテレビ視聴用のテストソフトコード見ながら自分が欲しいもの書いてみます。
ところでvisual studio使ったことないのでわからないのですがこのソフトの書き方、読み方しっかり学べる本ってないでしょうか?今までテキストエディタで書いてg++でやってたからビルドとテストがあるぐらいしかわかりません。
972はちみつ餃子 ◆8X2XSCHEME
2024/12/27(金) 10:42:45.43ID:sDceJMaF973デフォルトの名無しさん
2025/02/25(火) 14:39:59.78ID:hnV+oLEs おちんちぇん
974デフォルトの名無しさん
2025/03/31(月) 15:48:05.05ID:5n9vvRfi だいぶ遅レスですまんが、VSはブレークポイント入れるとか実行とかの基本的な操作は昔から全く変わってないよ
自分は職場で教わった部分もあるからどの本がいいとかはわからん
自分は職場で教わった部分もあるからどの本がいいとかはわからん
975デフォルトの名無しさん
2025/04/11(金) 08:37:40.21ID:DDyd6LX4 え?お前らに聞くけどな人殺しとか前科者とかナマポとか精神障碍者とか
そういう社会的に終わってる奴が1日中何してるか考えたことある?
ない?ある?ない?どっち?え?ない?教えたるわ。ここや。こういう掲示板。
ありあまる時間を使って24時間悪口書いて文句垂れて世の中終わった終わった言うてる。
すでに終わってる奴が世の中終わってほしいから終わってる終わってる言うてるだけ。
気づけよ?お前ら。そろそろ。もう5ちゃんの平均年齢65歳ぐらいやぞ。
気付いてないのは団塊ジュニア。若者だらけと思ってるのは氷河期。
ゆとり以下は5ちゃんなんて見てないでもう。
しかも自分?もう文末にwとかwwwとか書くの古いで?
それ20年前の電車男の時代に流行ってた書き方な。
うはwwwおkとか、ちょっwwwとか、おまwwwとか
気でも狂ってるんかってぐらいに書かれてた暗黒時代な。
こんなんいまだに使ってるのお前だけやで。もう一回言うぞ?お前だけや。
気付けよ?いい加減。な!
あ?なに?このコピペ長文長い?お前が5ちゃんの2行3行レスしか読まない
人生を四半世紀(25年のことな)送ってて普通の文章読めんようになってるだけや!
わかったか?じゃあの!
そういう社会的に終わってる奴が1日中何してるか考えたことある?
ない?ある?ない?どっち?え?ない?教えたるわ。ここや。こういう掲示板。
ありあまる時間を使って24時間悪口書いて文句垂れて世の中終わった終わった言うてる。
すでに終わってる奴が世の中終わってほしいから終わってる終わってる言うてるだけ。
気づけよ?お前ら。そろそろ。もう5ちゃんの平均年齢65歳ぐらいやぞ。
気付いてないのは団塊ジュニア。若者だらけと思ってるのは氷河期。
ゆとり以下は5ちゃんなんて見てないでもう。
しかも自分?もう文末にwとかwwwとか書くの古いで?
それ20年前の電車男の時代に流行ってた書き方な。
うはwwwおkとか、ちょっwwwとか、おまwwwとか
気でも狂ってるんかってぐらいに書かれてた暗黒時代な。
こんなんいまだに使ってるのお前だけやで。もう一回言うぞ?お前だけや。
気付けよ?いい加減。な!
あ?なに?このコピペ長文長い?お前が5ちゃんの2行3行レスしか読まない
人生を四半世紀(25年のことな)送ってて普通の文章読めんようになってるだけや!
わかったか?じゃあの!
976デフォルトの名無しさん
2025/04/11(金) 13:09:16.48ID:/8vt7NNX っ鏡
977デフォルトの名無しさん
2025/04/18(金) 21:33:04.53ID:2tfOuRHs C++なんてやめとけ
仕事で仕方なく触るならお気の毒だが
趣味ならもっとモダンな言語にしとけ
仕事で仕方なく触るならお気の毒だが
趣味ならもっとモダンな言語にしとけ
978デフォルトの名無しさん
2025/04/19(土) 00:29:20.64ID:DSrU4IgO cppのあとc#やってみて思ったのは、cppはとにかくたくさん書く必要があるってこと。
979はちみつ餃子 ◆8X2XSCHEME
2025/04/19(土) 10:45:36.30ID:cJmAkIgz cpp は C preprocessor の略だよ。
980デフォルトの名無しさん
2025/04/19(土) 12:22:27.38ID:MUEmr0y1 初代のC++はpreprocessorだったんですねわかります
982はちみつ餃子 ◆8X2XSCHEME
2025/04/19(土) 18:46:21.80ID:cJmAkIgz984はちみつ餃子 ◆8X2XSCHEME
2025/04/19(土) 20:26:59.32ID:cJmAkIgz C++ と呼ぶようになってからの処理系 CFront もそれはそれで思想としては C コンパイラをジェネレータとして使う (移植性が高いから) というものであって言語としての解釈は CFront がやるし C は中間表現にすぎないからトランスレータと呼ぶのが適切かどうかは微妙なところ。
Clang のことを LLVM-IR へのトランスレータとは普通は言わないみたいな感じ。
いや、変換してるからトランスレータには違いないんだろうけどさ。
Clang のことを LLVM-IR へのトランスレータとは普通は言わないみたいな感じ。
いや、変換してるからトランスレータには違いないんだろうけどさ。
985デフォルトの名無しさん
2025/04/19(土) 20:34:02.90ID:Rs10e6Jw つまりNim最強ですねわかります
986デフォルトの名無しさん
2025/04/28(月) 09:51:37.89ID:PR6E6U1X C++で匿名クラスを使ってみたいのですが、試したところ
class {
public:
void print() { std::cout << "Hello!\n"; }
} obj;
obj.print()
は動きました。それならば
auto objp = new class {
public:
void print() { std::cout << "Hello!\n"; }
} ();
objp->print();
あたりが動くのかな、と思いましたがコンパイルでエラーになってしまいます
anon_class_test.cpp:4:19: error: declaration of anonymous class must be a definition
4 | auto objp = new class {
| ^
anon_class_test.cpp:7:7: error: expected a type
7 | } ();
| ^
正しい書き方があれば教えていただけないでしょうか?
ちなみに、Java (Android)でのコールバックの登録であるような、インラインで無名の
クラスのオブジェクトを定義・生成して渡すような書き方がC++でもできるのかな、
という疑問があり、それの第一歩的な感じなのですが
class {
public:
void print() { std::cout << "Hello!\n"; }
} obj;
obj.print()
は動きました。それならば
auto objp = new class {
public:
void print() { std::cout << "Hello!\n"; }
} ();
objp->print();
あたりが動くのかな、と思いましたがコンパイルでエラーになってしまいます
anon_class_test.cpp:4:19: error: declaration of anonymous class must be a definition
4 | auto objp = new class {
| ^
anon_class_test.cpp:7:7: error: expected a type
7 | } ();
| ^
正しい書き方があれば教えていただけないでしょうか?
ちなみに、Java (Android)でのコールバックの登録であるような、インラインで無名の
クラスのオブジェクトを定義・生成して渡すような書き方がC++でもできるのかな、
という疑問があり、それの第一歩的な感じなのですが
987デフォルトの名無しさん
2025/04/28(月) 10:00:18.82ID:+jC2JIL+ 匿名クラスってCで言う構造体やん
988デフォルトの名無しさん
2025/04/28(月) 10:12:11.66ID:RRBAM2hD989はちみつ餃子 ◆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 我慢できなくなって説明しちゃうはちみつさん
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 【DAZN】ワールドカップ欧州予選総合 ★5
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【J SPORTS】FIFA U-17ワールドカップ ★10
- 「世の中、バカが多くて疲れません?」👉1991年日本人大発狂 [543236886]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 自閉症が「んなっしょい」と連呼するお🏡
- 寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い
- マクラーレン、女性ドライバー3名を加入 [462275543]
- 【悲報】大分市佐賀関の火事、20軒→170軒に延焼🔥 [481941988]
