C++相談室 part148

■ このスレッドは過去ログ倉庫に格納されています
2020/01/31(金) 20:54:06.26ID:Nt0XFA2s
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
2020/02/07(金) 13:30:18.43ID:QoBXk/kf
メモリポインタも4GB超えは当たり前だしな
2020/02/07(金) 13:33:10.28ID:52vnIbYM
8086時代の苦しみを知っている人なら
リニアでないポインタやインデックスが
どんなにウザいものかよく知っている

64bit空間なら64bitを使っとけって悪いこと言わないから
2020/02/07(金) 13:45:59.17ID:8FC0VQS8
ループの中身も知らないで良く言うね
int変換必須なら問題点の場所を移動させただけ
341デフォルトの名無しさん
垢版 |
2020/02/07(金) 13:58:09.08ID:jtk/IwGo
今日日4GB越えとかWindowsNT4.0サービスパックですか、と。
342デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:12:43.62ID:PWhN+bN7
納品したときに
コンパイルで警告出るんですが消してって言われて
それ無視して良い警告ですよって言っても
理解してもらえなかった派
343デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:19:34.17ID:PWhN+bN7
あと警告が出ないからと言って
正しく動くと保証されている訳でもなんでもないのに
2020/02/07(金) 14:32:07.46ID:VWyX2qgb
>>342
それはお前が悪い
そんなんで納品するな
345デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:34:22.92ID:jtk/IwGo
客先と同じビルド環境で警告対応しないのは落ち度だね。次の仕事なくなるでしょ。
2020/02/07(金) 14:40:57.67ID:/rNOv2pQ
>>333
BYTE v[数値];
のような生配列の場合、ループの中のv[i]は、最適化が効いてものすごく効率の良いコードになることが多い。
この場合、vがグローバルに確保されたオブジェクトや参照型であったとしても最適化には余り悪影響はない。
vがstd::vector 型の場合で、かつ、vがグローバル・オブジェクトや、参照型の場合は、コンパイラはv[i]を上手く最適化できないかもしれない。
2020/02/07(金) 14:42:08.26ID:/rNOv2pQ
>>346
すまん。
後半部分は勘違いかもしれない。
2020/02/07(金) 14:47:50.81ID:5UxOF8qK
>>346
VCはvectorでも生ポインタに近い最適化はしてくれてるみたいだぞ
2020/02/07(金) 15:03:24.58ID:jtk/IwGo
客や同僚から使えないプログラマ認定されていることに気づけず独りよがりな考えに凝り固まる人いるよね・・・
かわいそうではあるけど、かかわりたくないタイプの人。
2020/02/07(金) 15:15:12.08ID:BIRgOLIs
標準ライブラリのコンテナのイテレータを sizeof で見ればわかるが、ほとんどの場合で void* と同じ大きさ。
要するにポインタ一個分の情報しかないし、実際ポインタが入ってるし、ポインタの操作になってる。
しいて言えば操作がメンバ関数経由になる分のコストはあるといえばあるけど、
それくらいのインライン展開はするのが普通でしょ。
vector の場合だと領域が連続する保証があるのでインライン展開だけでイテレータはポインタと同じになる。

VC のコンテナだとデバッグモードではイテレータが少し大きい (のと範囲チェックとかする) ってなことらしいんだが、
処理系をインストールしてないから試してない。
2020/02/07(金) 15:20:21.87ID:E/TdO4KU
>>349
おまえがきちんとした仕様を提案できないで投げっぱにしてるからそんなことになってんじゃないの?
2020/02/07(金) 17:16:18.19ID:52vnIbYM
>>340
64bit空間で64bit以外のインデックスを使うべきループの中身とやらを書かないあんたが悪い
書けないんじゃないのか?
2020/02/07(金) 17:31:01.39ID:Nrn3Ov0h
intだとたったの2G要素でオーバーフローして無限ループになるのが怖い
354デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:31:33.35ID:yxrGSGnH
イテレータよりポインタのほうが速いよ。
ホントだよ。
いまベンチとってるから。
偶然だけど。
2020/02/07(金) 17:34:39.39ID:jtk/IwGo
>>351
「無視して良い警告」とか勝手に判断する困ったPGにきちんと仕様を提案しても無駄でしょ。解雇するわ。
356デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:37:50.00ID:PWhN+bN7
unsigned だと
for(unsigned i = s.size(); --i >= 0; ){...}
みたいなので警告出るんだっけ
2020/02/07(金) 17:41:09.31ID:Nrn3Ov0h
警告で指摘された問題点に対処もせずに、キャストやらで無理やり消す位なら、出たまま放置の方が100倍マシ
358デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:43:22.94ID:yxrGSGnH
ヒープ作るとき、マイナスの値は空きノードのリンクリストに使ったりするので、その手の比較は多発する。
2020/02/07(金) 17:43:55.24ID:BIRgOLIs
うーん、近頃はちょっとした作法レベルのところまで警告として口出しすることがあるからなぁ。
完全に規格に沿って書いてるわ! ってときにはイラッとすることもある。
個別に警告オプションを設定するのも面倒くせぇし、直してしまう方が手っ取り早かったりもするんだけど、
何がなんでも警告をゼロにしろって言われたら警告レベルを低くする対処をしちゃうかも。
2020/02/07(金) 17:52:14.97ID:VWyX2qgb
仕事ではやってんなら手を抜くなぼけ
pragmaとかでなんとでもなるだろ
361デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:55:05.15ID:yxrGSGnH
タモリさんは遊びで手を抜くなって言ってた。
2020/02/07(金) 17:57:41.44ID:jtk/IwGo
従来cppcheckなどの静的解析ツールが出していた警告をコンパイラも出すようになってくれたのは良い動き。
親切なコンパイラに感謝して警告箇所の修正をやればいい。
修正に工数がかかることが懸念されるなら、依頼主にその旨を伝えればいい。
2020/02/07(金) 18:05:13.97ID:kNxPhPNR
>>360
すごい偉そうにしてるけど大丈夫?>>327
;0<len; って···
2020/02/07(金) 18:14:59.44ID:CaNLgYal
雑魚ほどイキがるのはプログラマも同じ
365デフォルトの名無しさん
垢版 |
2020/02/07(金) 18:23:59.39ID:yxrGSGnH
カバレッジ測定のツールって安いの無いのかな。
2020/02/07(金) 18:36:35.61ID:BIRgOLIs
>>360
俺はプログラミングについては趣味者だから実務のことは知らんのだわ。
すまんな。

しかしな、必要以上の品質にするくらいなら手抜きで安くしろって言う客の方が多いと思うぞ。

必要より下になったらあかんのでそこを制御していい感じの
手抜き具合にするのが難しいわけだが、そこを上手くやるのが
手抜きしないことよりもプロに必要な資質じゃね?

手抜きしないよりも適切に手を抜く、どうやって手抜きするか知っていることが大事だ。
仕事は経済的に割に合う形でしか継続できないんだからさ。

そりゃあいつも十全な仕事が出来る時間的・経済的余裕があるならうれしいが、
現実はそうではないだろ。
2020/02/07(金) 18:40:56.99ID:jtk/IwGo
>>366
何言ってんだ?
手抜きしたいからこそ、コンパイラの警告に素直に従うんだぞ。
2020/02/07(金) 18:45:33.43ID:BIRgOLIs
>>367
それもそうだな。
2020/02/07(金) 18:51:12.38ID:ZYtSuiu/
DirectX関連使ってるとenumよりenum classを優先しますという警告出るんだけど、ライブラリ変えるわけにもいかなく、どう対応するのが正解なんだろ?
2020/02/07(金) 18:58:20.00ID:HVBpNa40
そもそも警告って規格で定められている訳でもなく、コンパイラが独自の基準で勝手に出してくる物だからね

mutableは悪だってconst付いてない変数全てに警告出すコンパイラとか出てきたらどうするんだろう
2020/02/07(金) 19:03:54.90ID:jtk/IwGo
>>370
議論のための議論とか、言いがかりのような仮定の話に、いちいち付き合わないことが重要。
2020/02/07(金) 19:04:25.00ID:/AlUflk/
>>365
とりあえずgprofでいいんじゃね?
373デフォルトの名無しさん
垢版 |
2020/02/07(金) 19:08:56.34ID:yxrGSGnH
>>372
見てみます。
2020/02/07(金) 19:25:21.94ID:BIRgOLIs
>>371
変な作法が追加されることなんて良くあるんだぞ。
今じゃ gcc や clang で -Wall オプションを付けたら
a || b && c
みたいな式にすら警告が出る。
優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
演算子の優先順位くらい把握しとるわ!

こんなの警告されるようになると想像したことあったか?
他の演算子でも同様の警告を出すようになることくらいはあるかもしれんぞ?
確かに >>370 は極端な例ではあるが、ようわからんところでしょうもない警告が出るようになる
かもしれんという懸念は無い話ではないぞ。
2020/02/07(金) 19:30:53.52ID:9DO99WJ1
いやそれはカッコ付けろよ
2020/02/07(金) 19:33:08.02ID:jtk/IwGo
>>374
趣味でしかやってない人の意見なんて無視しろ、というが私の回答です。
2020/02/07(金) 19:39:25.14ID:1PiYJQ+8
>>374
それは括弧つけろよ
2020/02/07(金) 19:46:55.57ID:BIRgOLIs
>>375-377
そっかー (´・ω・`)
379デフォルトの名無しさん
垢版 |
2020/02/07(金) 19:55:08.75ID:yxrGSGnH
はちみつ先生は何を作ってるんですか?
2020/02/07(金) 20:28:02.80ID:BIRgOLIs
>>379
ゲームのチートツールとか。
汎用的な便利なツールは色々とあるけど、個別のソフトをいじるには行き届かないこともあるので。
念のため言っとくけど買い切りの RPG かフリーゲームだけ。 ネットゲームはやってないよ。
ちなみにそのツールは公開してない。

その他に作った有用そうなものは公開してるんで、身バレするから言えない。
381デフォルトの名無しさん
垢版 |
2020/02/07(金) 20:52:16.35ID:yxrGSGnH
>>380
そうなんですか。
ずいぶん詳しいのに仕事じゃないというから不思議に思ってました。
2020/02/07(金) 20:56:00.11ID:jtk/IwGo
つまり、はちみつ某は、なんの思い入れもない他人のソースを読まされる身になった経験が少ないわけか。
383デフォルトの名無しさん
垢版 |
2020/02/07(金) 21:02:52.46ID:yxrGSGnH
アルゴリズム考えるときは、図を必ず書くと思うんだけど、皆さんは何を使ってますか?
いまは紙と鉛筆使ってるんだけど、探すの大変だから、ソフトに変えたい。
2020/02/07(金) 21:05:36.03ID:BIRgOLIs
>>382
せやな。
そんなわけで、他人のバイナリを見る機会はあるけどソースはそれほどでもって感じかも。
結果的に読まなきゃならないことはあるけど、所詮は趣味だから嫌になったらいつでも止められるし、急がなくてもいいし。
プレッシャーに晒されながらクソみたいなソースを読むってことはない。
2020/02/07(金) 21:05:49.82ID:E/TdO4KU
たまに書く方がいい
字を忘れる
2020/02/07(金) 21:09:26.55ID:y0pPi+zA
C++なんざ仕事で嫌々書かされるだけの言語だと思ったけど
趣味で使っちゃう子もおるんやな
2020/02/07(金) 21:12:24.23ID:BIRgOLIs
>>383
曖昧なところから思考を整理するなら紙と鉛筆でいいと思うけど、
それなりに書式の整ったようにするなら PlantUML とか。
GUI で自由にってことなら Dynamic Draw くらいが手頃かもしれない。
2020/02/07(金) 21:15:03.53ID:jtk/IwGo
完全な趣味目的でC++を触る変態はそうそういないと思う。
2020/02/07(金) 21:16:30.24ID:52vnIbYM
>>386
禿1読んで信者になった変態もおるんやで
2020/02/07(金) 21:16:36.84ID:BIRgOLIs
>>386
ゲームのチートとかするために
既存のプロセスに割り込んだりする処理を書こうと思うと C か C++ くらいしかまともな選択肢なくね?
C で足りるなら C で済ませることもあるけど、もうちょっと高級なことがしたくなったら C++
ってのは妥当な選択肢というか、唯一解でしょ。

まあ近頃は Rust にも興味があるけど……。
391デフォルトの名無しさん
垢版 |
2020/02/07(金) 21:37:46.79ID:yxrGSGnH
>>387
見てみます。
2020/02/07(金) 22:05:07.56ID:8FC0VQS8
>>375
>>377
男ならカッコつけろ
2020/02/07(金) 22:14:56.42ID:8FC0VQS8
カッコつけろって人
付ける付けないの基準はコンパイラの警告?

完全に優先順位を覚えてる人から見ると
カッコが多いと見にくいんだよ

a == 0 || b != 0
a * b + 1
*a[i]
*a++

こんなのにカッコつけてたら
えっ?何か意味があるの?って考えてしまう
2020/02/07(金) 22:26:24.78ID:52vnIbYM
> えっ?何か意味があるの?

いや、「あーまた面倒くさいやつ来やがった」だよ
395デフォルトの名無しさん
垢版 |
2020/02/07(金) 22:52:28.44ID:GxNDg+Fe
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
2020/02/07(金) 22:55:11.74ID:NUR9HIfz
優先順位を完全に把握しているなら機能的には意味のない括弧だと理解しているんだろうが
そのうえで疑問に思った「意味」って、どんなものを想定しているんだろう。
「優先順位を完全に把握していない人が間違えないように」くらいの意味しか思いつかないが。
2020/02/07(金) 22:59:52.10ID:8FC0VQS8
(a + b + c) + (d + e)

同じ型の整数5個を足すのにこんなカッコが付いてたらどう思う?
2020/02/07(金) 23:17:13.31ID:NUR9HIfz
>>393と言ってる趣旨が違ってないか?
実際に>>397みたいなコードを見たことがあるの?
2020/02/07(金) 23:24:04.71ID:8FC0VQS8
同じ印象だって話

ちなみに、
わざわざ>>397のようなカッコを付ける時はある
2020/02/07(金) 23:24:42.60ID:jtk/IwGo
協業できない人があれこれC++について論じるのは害でしかない。
2020/02/07(金) 23:31:57.60ID:Uosz/SQM
まずプログラム言語っての読み書きする人間のためにあるって大前提忘れてるか自覚してないやつ多いな
2020/02/07(金) 23:34:58.95ID:NUR9HIfz
>>399
マイナスが混ざっているならわからんでもないが、>>393で言っている優先順位の話とは関係ないように思うが?
2020/02/07(金) 23:36:27.96ID:Fqx20dQ+
>>397のようなコードを見てどう思う?
2020/02/07(金) 23:39:04.16ID:jtk/IwGo
見やすいかどうかは主観なので、他人や未来の自分が読んで誤解しないようにすることが肝でしょ。
まさか、「数値リテラルの桁区切り文字」にまでかみついたりしないよね?
https://cpprefjp.github.io/lang/cpp14/digit_separators.html
2020/02/07(金) 23:41:49.81ID:yMJLmx4v
主観で見やすい表記にする
その為にコンパイラの警告を無視したり切ったりする

何も問題無い
406
垢版 |
2020/02/08(土) 00:06:08.38ID:Wxs8WSK9
>>374
> >>371
> 変な作法が追加されることなんて良くあるんだぞ。
> 今じゃ gcc や clang で -Wall オプションを付けたら
> a || b && c
> みたいな式にすら警告が出る。
> 優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
> 演算子の優先順位くらい把握しとるわ!

把握してても間違えやすいからだと思うね
実際にはa,b,cには比較演算子を使った式が入ることが多いだろう
そうするとけっこうな長さになったりする
で全体の構造が見えにくくなる

そりゃ書いてる真っ最中は問題ないさ
しかし後から読んだときにすぐ理解できなかったり、手を加えるときに間違えたりする
warningを出すべきかは議論の余地があると思うけど、
出すべきと考える理由はわかる
407デフォルトの名無しさん
垢版 |
2020/02/08(土) 00:38:17.76ID:RKzyJDHj
それはエディタの機能でかっこを表示したら良いのでは。
2020/02/08(土) 00:57:11.32ID:GuOhFnKw
主観は重要だろう。
重要でないなら全部アセンブラで書けや。
客観的には最も性能の出る言語だぞ。
2020/02/08(土) 01:23:28.05ID:Mdfh1mSi
&,|とか&&,||は*,+の関係と同じだから括弧つける方が冗長で分かりづらくなると思うんだが
2020/02/08(土) 01:29:21.53ID:zzucbZgG
一度書いた四則演算の数式を書き換えることはほとんどないけど、bool論理演算は頻繁に書き換えるでしょ。
2020/02/08(土) 01:30:14.91ID:zzucbZgG
素人多いね、このスレ。
412デフォルトの名無しさん
垢版 |
2020/02/08(土) 01:45:08.63ID:RKzyJDHj
>>411
プロの意見だとどうなりますか?
2020/02/08(土) 01:52:50.03ID:JKzazDKJ
数式を遅延評価するオブジェクトを作れば
演算子のオーバーロードで演算子の優先順位を変えられるも同然
2020/02/08(土) 01:53:57.02ID:JKzazDKJ
テクニックの限りを尽くしてbetter C++を実現したら良い
2020/02/08(土) 01:54:26.60ID:zzucbZgG
プロなら抽象的な質問には回答しないでしょ。時間泥棒にあう。
「もっと具体的に書いてくれ」と逆質問する義理がないならなおのこと。
416デフォルトの名無しさん
垢版 |
2020/02/08(土) 02:00:57.81ID:RKzyJDHj
自分の職業の板には一切いかないから、ここも職業プログラマはいないと思う。
ここに書き込む意味が無いと思うんだよな。
2020/02/08(土) 02:02:06.13ID:uvgcwZ2m
>>395
グロ
2020/02/08(土) 02:06:09.28ID:Mdfh1mSi
職業プログラマって?
仕事でソフト作るし、客先に納入したりもするけどプログラマではないな
419デフォルトの名無しさん
垢版 |
2020/02/08(土) 02:08:10.84ID:RKzyJDHj
たとえば、外科医が匿名の掲示板で効果的な治療法について話し合ったりしないでしょ。
治療法について話し合ってる人は患者だ。
だから、ここにもプログラマはいないはず。
2020/02/08(土) 02:28:45.19ID:zzucbZgG
プロの対義語はアマ。素人の対義語は玄人。
今時点のこのスレの回答者が素人同然の低いレベルであることは、否定できない。
例えば一週間後は違うかもしれない。もっともまともな回答者がこのスレに常駐するようになるかもしれない。
2020/02/08(土) 06:55:22.73ID:ARbKbNEu
>>374
-Wallとは別に「お節介は一切禁止」というオプション欲しいね
2020/02/08(土) 07:15:13.17ID:N5LmiSOJ
特定の警告だけ無効に出来るのが普通だよ
2020/02/08(土) 07:33:56.27ID:gtTyaGQ0
警告は全ておせっかい
2020/02/08(土) 07:53:55.28ID:+X9VZvVK
>>374はわかるけど
>>393, >>397で警告出すコンパイラとか見たこと無い
2020/02/08(土) 08:04:33.44ID:gtTyaGQ0
私も見たことは無い
でも他の演算子でも同じこと

1u << n+1

こんなのは良く使う
いちいちカッコを付けた方が分かりにくい
2020/02/08(土) 08:11:34.30ID:gtTyaGQ0
カッコを付けろって結局警告が出るから付けろってことで
見やすさとか無視した意見が多い

if ((a==(b + 1))||(a==(b + 2)))

こんな感じに書くヤツがいるんだよ実際
2020/02/08(土) 08:14:44.94ID:ARbKbNEu
警告の出方がコンパイラによって違うわけで
特定のコンパイラの警告に対応するということなら
#pragma使うのと同じだね
2020/02/08(土) 08:26:00.28ID:GuOhFnKw
>>426
それはつけた方がいいだろ。
見づらいのはスペースの使い方に問題がある。
2020/02/08(土) 08:42:00.85ID:gtTyaGQ0
えっ?
まじで言ってる?

if (a == b+1 || a == b+2)

これだと一瞬で理読める
俺が特殊?
2020/02/08(土) 09:05:35.53ID:LleYumKd
>>428
演算子の優先順位くらい勉強しておけよ
手間かけさせんな
2020/02/08(土) 09:08:26.73ID:LleYumKd
>>408
やはりアホだったかコイツw
2020/02/08(土) 09:10:24.21ID:ktYbgjbO
>>366
手抜きがどうこうと最もらしいこと言ってるけど
>>359で言ってるのは「警告に対処するのが面倒くさい」ってことだろ?
仕事で手を抜くべき場所とそうでない場所、みたいな次元の話じゃない

あと警告レベルは最大にしたりすると標準ライブラリにすら警告出るけど、標準より下げるのは良くない
そういうこと平気でやってると必ず後で本格的に面倒くさい原因不明のバグが頻発する
2020/02/08(土) 09:29:30.06ID:JKzazDKJ
256倍バグを出しても256倍早く潰したら
問題無くね?
2020/02/08(土) 09:30:03.39ID:GuOhFnKw
if( a == (b+1) || a == (b+2) )
これくらい書いてもバチ当たらんだろ。
しょうもないことでドヤってる馬鹿が開発では一番有害。
2020/02/08(土) 09:32:02.56ID:pUDxcHmc
>>433
256倍もバグ出すような奴と仕事したくない
2020/02/08(土) 09:39:01.42ID:JKzazDKJ
>>435
先方も256倍遅い奴と仕事したくないと思うてはるで
2020/02/08(土) 10:08:44.51ID:Di3wk8ih
>>433
全部潰せるならね
2020/02/08(土) 10:24:14.91ID:YOfaZC8k
じゃあ次は

bool b;
// 略
if (b == true)

の話でもする?w
俺はこれが一番のキチガイ記法だと思ってる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況