トップページ⇒tech
1002コメント293KB

C++相談室 part126 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/08/13(土) 11:24:45.65ID:NPYsKJkE
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part125
http://echo.2ch.net/test/read.cgi/tech/1463761261/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0153デフォルトの名無しさん2016/08/26(金) 01:02:45.66ID:s3V0ZpLS
無駄に長くて読みにくいコード書いてそう
0154デフォルトの名無しさん2016/08/26(金) 02:10:25.32ID:jGd0g2RH
コピペしまくりのコードとかまとめろってかんじ
0155デフォルトの名無しさん2016/08/26(金) 02:40:37.07ID:mRE0T9bN
多分、>>152みて職場で無関係な奴に当たり散らすんだぜ。
盲目って怖い。
0156デフォルトの名無しさん2016/08/26(金) 06:15:21.48ID:9s6WK35L
>>129
そんなこと言うお前はもちろん
メンバー初期化の順番が何によって決まるのかを
調べずに言えるんだろうな?
0157デフォルトの名無しさん2016/08/26(金) 06:18:57.25ID:zQpNEvET
age
0158デフォルトの名無しさん2016/08/26(金) 08:41:47.22ID:G0uj5hQB
>>156
あたかも自分は知ってるって感じのものの言い方だなw
0159デフォルトの名無しさん2016/08/26(金) 08:51:08.73ID:Xz0onrQ7
クイズ好きだね
0160デフォルトの名無しさん2016/08/26(金) 08:52:16.33ID:zYo2bKWf
まあゴテゴテに凝ったフレームを使うより単純な自分実装のが
良いこともあるわな。
釘打つのに巨大ハンマーは必要ないってこともある。
0161デフォルトの名無しさん2016/08/26(金) 09:42:17.11ID:3Yp6hByU
std::使っておけばドキュメンテーション楽じゃん、とは思わないのかね?
0162デフォルトの名無しさん2016/08/26(金) 09:44:55.75ID:ZYJ50bjn
標準ライブラリは巨大ハンマーと言うよりは、ネジとか家庭用電源差込口とかに近い、まさに規格化された共通部品じゃないかと思うんだけどな。
0163デフォルトの名無しさん2016/08/26(金) 09:54:56.48ID:+34Dv1b8
自分実装のはずなのに、半年1年後
「誰だよこれやったのは?」って言いたくなる
0164デフォルトの名無しさん2016/08/26(金) 09:57:17.75ID:G0uj5hQB
速いならいいがな
遅いのにあえてSTLを使う理由がわからん
0165デフォルトの名無しさん2016/08/26(金) 09:58:29.62ID:3eEs1ucA
iostreamみたいなウンコ大作がネジとか何の冗談
0166デフォルトの名無しさん2016/08/26(金) 10:00:15.98ID:3eEs1ucA
ああ、screwedにかけたのかw
0167デフォルトの名無しさん2016/08/26(金) 10:01:25.74ID:3Yp6hByU
速いのがいいならsproutでも使えば
0168デフォルトの名無しさん2016/08/26(金) 10:11:56.38ID:ZYJ50bjn
別に標準ライブラリと同じインタフェースにしといてくれれば、あとは勝手にしてくれていいんやで。
0169デフォルトの名無しさん2016/08/26(金) 10:14:12.77ID:ZYJ50bjn
あと、標準ライブラリといったらiostremって発想もどうかと思う。
まあ、一番叩きやすいってのは確かだし、俺自身も使ってるないから擁護もできないのだけれども。
0170デフォルトの名無しさん2016/08/26(金) 10:16:18.07ID:ZYJ50bjn
iostreamは確かに使いにくい。
あれならprintf使うのも仕方ない…
0171デフォルトの名無しさん2016/08/26(金) 10:22:03.58ID:JmjWOqaY
printf > boost::format >>>>>>超えられない壁>>>>>> iostream
0172デフォルトの名無しさん2016/08/26(金) 11:08:04.55ID:R92D0kaL
なぜいつまでたってもフォーマットを指定してstd::stringにするライブラリが標準入りしないのか
0173デフォルトの名無しさん2016/08/26(金) 11:12:41.32ID:mRE0T9bN
putfって止まってるの?
0174デフォルトの名無しさん2016/08/26(金) 12:40:42.69ID:3eEs1ucA
>>172
モウロクしたハゲがiostreamを否定されて屈辱的だとかスネちゃうからだろ
0175デフォルトの名無しさん2016/08/26(金) 12:59:54.61ID:3Yp6hByU
>>174
「侮辱的だ」と繰り返すばかり
0176デフォルトの名無しさん2016/08/26(金) 13:16:58.62ID:R92D0kaL
streamの何も考えずガンガン流し込めばいいというスタイルは悪くないと思う
ただ特に標準出力に関してはデータを整形したいケースが多いから噛み合ってない
0177デフォルトの名無しさん2016/08/26(金) 13:22:39.50ID:FOeYYSc0
何も考えず?
iostreamってstd::size_tを流し込めること保証されてたっけ
0178デフォルトの名無しさん2016/08/26(金) 13:28:03.42ID:XS8ZF2FO
std::cout << std::hex << std::setw(2) << std::setfill('0') << int('A');
printf("%02x", 'A');
0179デフォルトの名無しさん2016/08/26(金) 18:00:13.51ID:ZiaxvSyE
https://t.co/wOBgDeY9iG
これわかる人いる?
deleteしたポインタにnullいれてないとおもったんだけど、それではないらしい…
0180デフォルトの名無しさん2016/08/26(金) 18:10:38.59ID:PiJ4eTCv
ヌルポチェックの外でメンバ関数呼び出している。
0181デフォルトの名無しさん2016/08/26(金) 18:21:32.60ID:RLEpnGOr
>>179
こんな超絶クソコード作る奴の頭がそもそも虫湧いてるので答えなんてないと思うよ
なんだよnewと対になっていないdeleteとか、しかもdeleteの前に無意味なnullチェックしてるし
0182デフォルトの名無しさん2016/08/26(金) 18:23:08.82ID:RLEpnGOr
前提条件が曖昧すぎて問題にすらなっていない
マルチスレッド環境なら話にならないコードだし
0183デフォルトの名無しさん2016/08/26(金) 18:26:56.70ID:3Yp6hByU
for (auto charactor はfor (auto& charactor でなくていいんだろうか?
0184デフォルトの名無しさん2016/08/26(金) 18:35:20.55ID:RLEpnGOr
ViewPortのコンストラクタにnullptrが渡される可能性があるなら
ViewPort::Updateは何もする必要がないのであって、Updateの冒頭でnullチェックしてreturnすればいいだろ
とにかく問題作った奴が馬鹿丸出し過ぎてイライラする
0185デフォルトの名無しさん2016/08/26(金) 18:36:33.86ID:ZiaxvSyE
色々思いつくけど >>180 が当たりっぽい
腑に落ちないw
0186デフォルトの名無しさん2016/08/26(金) 18:52:19.14ID:wMnlcyg3
rule of three(five)を無視しといてバグとか語るなって感じだが
>>182のいうように想定してる不具合実演のサンプルコードなのか実用コードの一部なのかすら
わからんのではどうにもなあ
0187デフォルトの名無しさん2016/08/26(金) 20:37:16.13ID:dDBcLzC2
>>178
これなw
いいかげん、正式な「1byte幅の整数型」が欲しいね。
0188デフォルトの名無しさん2016/08/26(金) 20:45:01.75ID:Xz0onrQ7
参考にしたいからお前らの頭の良い実装を見せてくれ
これくらいなら数分で書き直せるだろ
0189デフォルトの名無しさん2016/08/26(金) 23:13:22.52ID:mRE0T9bN
>>179
描画完了通知がNullチェックしてない??

>>187
現在策定中。
0190デフォルトの名無しさん2016/08/27(土) 08:43:16.25ID:SmFG8gRK
      ク    ク || プ  //
      ス  ク ス  | | │ //
       / ス    | | ッ //   ク   ク  ||. プ  //
       /         //   ス ク ス _ | | │ //
         / ̄ ̄\     /  ス   ─ | | ッ //
       /  _ノ  .\     /         //
       |  ( >)(<)       ___
.        |  ⌒(__人__)     ./ ⌒  ⌒\
        |    ` Y⌒l    /  (>) (<)\
.         |    . 人__ ヽ /  ::::::⌒(__人__)⌒ \
        ヽ         }| | |        ` Y⌒ l__   |
         ヽ    ノ、| | \       人_ ヽ /
.         /^l       / /   ,─l       ヽ \
0191デフォルトの名無しさん2016/08/27(土) 12:49:21.98ID:06SnK2FS
>>179
デストラクタでわざわざnull代入するかどうかよりdelete前にnullチェックしていることをつっこもうぜ
0192デフォルトの名無しさん2016/08/27(土) 13:15:37.85ID:s3YfawhT
nullptrだったら描画開始しちゃダメなんじゃないの?
0193デフォルトの名無しさん2016/08/27(土) 21:26:23.95ID:mslVqKaF
null をdelete しても無視されるから無駄って事かな
0194デフォルトの名無しさん2016/08/27(土) 22:04:43.54ID:sEFObQol
>>189
ソースは?
0195デフォルトの名無しさん2016/08/27(土) 22:19:45.68ID:nxWT+PHC
あってもなくても動作に影響しないものがあってもそこはバグとはいわないだろう
0196デフォルトの名無しさん2016/08/27(土) 22:42:36.92ID:OFUg9SIZ
バグとは言われないがゴミコードとは言われるだろう。
0197デフォルトの名無しさん2016/08/28(日) 01:03:52.09ID:IZ16EciY
>>194
https://cpplover.blogspot.jp/
上経由で知ったが、
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0257r1.pdf
これだと思う。
0198デフォルトの名無しさん2016/08/28(日) 01:09:59.02ID:3Myecdh+
delete前のnullptrチェックなあ
assertならわかるんだけどね
0199デフォルトの名無しさん2016/08/28(日) 01:19:06.19ID:jX9FVgVh
お前らが理想のコードに書き直してくれるのを待ってるんだが
0200デフォルトの名無しさん2016/08/28(日) 01:37:02.68ID:qNvxLYrv
お前らが知ったかぶりばかりなのが分かった。
別にdelete前にnullチェックするのは悪いことではないし、
newと対になってないdeleteとかも指摘としては噴飯もの。
まああえて言えばdelete後にnull代入しておくべきだが。

問題はforeachでautoになってるところだろ。
これだとvector内の要素ではなく、そのコピーに対して操作してることになる。
明らかに意図していない動作だろう。
0201デフォルトの名無しさん2016/08/28(日) 01:39:40.85ID:IZ16EciY
バグは1つではない説。
0202デフォルトの名無しさん2016/08/28(日) 01:39:43.61ID:60yVMOKI
>そのコピーに対して操作してることになる。
あの超絶クソコードの中では一番どうでもいい点だな
0203デフォルトの名無しさん2016/08/28(日) 01:41:06.73ID:qNvxLYrv
他のはバグの温床にはなりえても、あのコードだけではバグとは言えない。
お前ら学校のテストの問題とかでもケチつけてたタイプだろ?w
0204デフォルトの名無しさん2016/08/28(日) 01:45:52.06ID:7bU6M/B0
>>200
デストラクタ内でのdelete後にnullptrいれるのって何かメリットあるの?
通常の関数なら二重delete防止のためというのは分かるんだけど
デストラクタは複数回呼ばれないよね?
0205デフォルトの名無しさん2016/08/28(日) 01:50:09.68ID:qNvxLYrv
>>204
デストラクタ以外のどこか別の場所でdeleteされる可能性があるからだろう。
viewObjは外から渡された変数だから、知らないところでdeleteされてる可能性もある。
そのための防止だね。徹底するならデストラクタ内でもちゃんとnull代入しなきゃだめだけど。
0206デフォルトの名無しさん2016/08/28(日) 01:52:56.61ID:60yVMOKI
>>199
甘えてんじゃねーよこのウンコ量産野郎
0207デフォルトの名無しさん2016/08/28(日) 01:53:52.21ID:7bU6M/B0
>>205
なるほど
この問題の場合はそうですね
0208デフォルトの名無しさん2016/08/28(日) 01:54:04.96ID:60yVMOKI
>>205
バカですか?
0209デフォルトの名無しさん2016/08/28(日) 01:54:21.49ID:lPJVAstL
>>205
別の場所でdeleteされてる可能性があるとするなら、null代入があってもなくてもダメでしょ?
何言ってんの?
0210デフォルトの名無しさん2016/08/28(日) 01:55:42.67ID:60yVMOKI
デストラクタ以外のどこか別の場所でdeleteされてたなんてキチガイじみた状況に
nullチェックが役に立つとかどういう頭してんだよ
0211デフォルトの名無しさん2016/08/28(日) 01:55:50.77ID:qNvxLYrv
>>209
ごめん。一定レベル未満の人には回答しないことにする。
そこまでは面倒見切れん。
0212デフォルトの名無しさん2016/08/28(日) 01:56:03.58ID:Ux2eHzia
>>200
描画だけだから状態を変更しない可能性は高いし
vectorにいれてるくらいだからコピーコストは十分に低いんじゃないかと無理矢理
0213デフォルトの名無しさん2016/08/28(日) 02:00:10.83ID:qNvxLYrv
>>212
もちろん値型やstringとかならコピーでも問題はないよ。
でも状態を持った型だってしつこいくらいアピールされてるでしょ。
notifyして状態切り替えてうんぬんの箇所はその根拠となるよう書かれたもの。
問題を読めれば難しくはないはず。
0214デフォルトの名無しさん2016/08/28(日) 02:01:04.63ID:jX9FVgVh
デストラクタで解放することが分かってるのに他の場所で解放するのはクラスの使用者の責任ではないのか
0215デフォルトの名無しさん2016/08/28(日) 02:01:08.18ID:60yVMOKI
こういうバカが次から次に湧いてくるからアプリケーション層ではnewもdeleteも書くなって言ってるの
あの糞コードみたいなnewとdeleteが対になっていないようなのはその設計思想自体がバグであって
論ずる必要などはなく、こういうことやるバカは速やかにプロジェクトから排除するべし
0216デフォルトの名無しさん2016/08/28(日) 02:02:18.11ID:lPJVAstL
>>205
あ、クラス内の別の場所でdeleteを追加した場合にnull代入が要るって話してんのかな?
それだと>204への答えにはなってないし、>179の「問題」はクラス定義が全部見えてるのに、
コード追加でバグる可能性を考え始めたらきりがないでしょ。

コード変更による多重deleteの心配するなら、他の問題への対処も含めてunique_ptrを使えばいい話しだし。
0217デフォルトの名無しさん2016/08/28(日) 02:04:40.29ID:qNvxLYrv
>>216
>>211
0218デフォルトの名無しさん2016/08/28(日) 02:06:59.88ID:jX9FVgVh
ここまで1行も無し
やっぱり口だけか
他のフォーラムじゃあり得ないな
0219デフォルトの名無しさん2016/08/28(日) 02:08:06.28ID:a4amypBO
最初からnullptrで渡されることがあるんじゃないの
nullptrチェックしても別の場所でdeleteされてるかどうかなんか判断出来なくない?
ポインタのポインタ使って他所でdeleteした時にnullptr入れてるならわかるけど
0220デフォルトの名無しさん2016/08/28(日) 02:09:26.72ID:7bU6M/B0
デストラクタ内でdelete&nullptr代入しておけばデストラクタ呼び出し後に
外でdeleteされても大丈夫と理解しました

でも、デストラクタ呼び出しより先に外でdeleteされてnullptrが代入されてない場合はダメですね
0221デフォルトの名無しさん2016/08/28(日) 02:27:55.51ID:lPJVAstL
>>220
大丈夫じゃないから、騙されないで。
0222デフォルトの名無しさん2016/08/28(日) 02:50:59.20ID:a4amypBO
ポインタがコピーされてるから内部と外部じゃ別物だよ
片方にnullptr代入したってもう片方は変わらない

これnewして直でコンストラクタに入れるんかな
それならコピーでもされない限り外部で消されることは無いけど
0223デフォルトの名無しさん2016/08/28(日) 02:56:39.81ID:jX9FVgVh
スマポだって外部でdeleteされることなんか考慮してない
正しい使い方をしない方に全ての責任があるから考慮する必要性がない
0224デフォルトの名無しさん2016/08/28(日) 03:50:58.71ID:VK4fyJjM
まさかポインターのコピーがわかってない奴がいようとは驚きだ
それより例外安全が考慮されていないのが気になって仕方ない
0225デフォルトの名無しさん2016/08/28(日) 03:54:18.30ID:d5NA/60H
また無意味な部分にツッコミを入れてるのか
バグを見つける為の例題なのであって
完全なコードを示してるわけではないってのが理解できないのかな
0226デフォルトの名無しさん2016/08/28(日) 04:21:07.87ID:hSYh5tBq
>>225
簡略化したはずのコードに無意味なnullポインタチェックがあるのはなんでなん?
簡略化する前ですら冗長なのに
0227デフォルトの名無しさん2016/08/28(日) 06:24:16.40ID:a4amypBO
速攻指摘されてるじゃん
0228デフォルトの名無しさん2016/08/28(日) 06:32:42.06ID:VK4fyJjM
>>226
>>225の理屈だと、矛盾以外の不足は「完全なコードじゃないから」になってしまうらしいから
本当は開始・描画・終了の全てにチェックがあったのを一部省略してるだけだろう
0229デフォルトの名無しさん2016/08/28(日) 07:20:04.01ID:ERRoyT16
>>197
論文見たら全てが策定中になっちゃうのかよ
おめでてーな
0230デフォルトの名無しさん2016/08/28(日) 07:40:09.72ID:hSYh5tBq
>>228
デストラクタでdeleteする前にviewObjに対してなにかしてるって事?
もしそうならもっと糞コードやん。
viewObj自身で片付けろよと。
0231デフォルトの名無しさん2016/08/28(日) 07:47:04.27ID:ERRoyT16
ビューポートがビューを破棄するクソ設計にこれ以上突っ込まないでw
0232デフォルトの名無しさん2016/08/28(日) 08:20:20.55ID:lCXt6uga
>>200
>>183
0233デフォルトの名無しさん2016/08/28(日) 21:30:38.37ID:NaGSjNyA
質問
実引数が2個以上必要なコンストラクタをexplicitにする意味ってある?
0234デフォルトの名無しさん2016/08/28(日) 21:34:04.63ID:NaGSjNyA
自己解決しました。
すみません忘れて
0235デフォルトの名無しさん2016/08/30(火) 08:09:06.98ID:ftymYuoJ
ハゲの好きそうなコード
f ( { p1, p2, p3 } ) // explicitだとエラー
0236デフォルトの名無しさん2016/08/30(火) 15:46:08.79ID:0Xvfpf4x
ハゲの嫌いなことは、言語に機能を追加すること。
もともとC with classesとか始めた張本人がハゲなんだけど、
まあ今のC++を見てると気持ちはわかるね。
0237デフォルトの名無しさん2016/08/30(火) 19:30:10.07ID:0Xvfpf4x
ハゲの論理を、ハゲロンという。
1価の陰イオンとなる第17族元素である。
0238デフォルトの名無しさん2016/08/30(火) 23:18:33.93ID:lqTGpbVF
もっと増やせと言いたいところだがこれ以上大きく変えるような機能はあるのか?
C#みたいなプロパティは欲しいけど
0239デフォルトの名無しさん2016/08/30(火) 23:37:14.11ID:ocxqe0WR
そんなんtemplateで書けばいいじゃん
0240デフォルトの名無しさん2016/08/30(火) 23:42:07.71ID:xMG6EfaL
は?テンプレートでC#のようなプロパティどうやって実現するんだ?
0241デフォルトの名無しさん2016/08/31(水) 00:35:52.45ID:ityOLHmm
それっぽいのは出来なくはなさそうだけど
プロパティの簡潔さには程遠いな
0242デフォルトの名無しさん2016/08/31(水) 00:39:34.42ID:yHeo0PbI
C#を知らんやつにも分かるように説明汁
0243デフォルトの名無しさん2016/08/31(水) 01:23:54.91ID:/ANAyxIk
こんな感じか?
きっちり書くと更に手間かかるな
https://ideone.com/HVRzE1

C#だとこう書ける
https://ideone.com/idjL0A
0244デフォルトの名無しさん2016/08/31(水) 01:38:11.88ID:1fkGDbVO
>>240
> は?テンプレートでC#のようなプロパティどうやって実現するんだ?
今年一の名言だなw
0245デフォルトの名無しさん2016/08/31(水) 01:57:19.27ID:6ukDv4b6
>>243
ダッサ
お前C#のプロパティの便利さ全然理解してないね
0246デフォルトの名無しさん2016/08/31(水) 01:59:51.36ID:j3ifnVdn
何が名言なのかさっぱり分からんのだが
こんな書き方で満足する人いるの?
0247デフォルトの名無しさん2016/08/31(水) 02:07:02.38ID:BDrnIBJY
C++のstd::vector<bool>がクソ扱いされていることを
理解している気配は全く無いな
0248デフォルトの名無しさん2016/08/31(水) 02:09:05.10ID:BDrnIBJY
むしろ今年一の名言は>>211
0249デフォルトの名無しさん2016/08/31(水) 02:21:29.37ID:/ANAyxIk
>>245
アスペ
0250デフォルトの名無しさん2016/08/31(水) 02:44:37.65ID:AgvBQXnk
プロパティって最初に採用されたのはVBっていうかCOMだよね確か。
0251デフォルトの名無しさん2016/08/31(水) 09:31:40.10ID:+TzIiYAW
プロパティも欲しいけど簡単に使える部分配列も欲しいな
0252デフォルトの名無しさん2016/08/31(水) 09:57:43.27ID:WLaQrr/5
>>243
なんじゃこりゃ。全然違うじゃん。
これをC#のプロパティと思ってるの?
もっと普通のケース(各メンバ変数にgetメソッドとsetメソッド)
で例示してくれよ。
■ このスレッドは過去ログ倉庫に格納されています