トップページ⇒tech
1001コメント285KB

C++相談室 part74

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/10/25(日) 00:22:58
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part73
http://pc12.2ch.net/test/read.cgi/tech/1254746834/
0153デフォルトの名無しさん2009/10/27(火) 12:54:01
iteratorのi番目とi+1番目の足し算するときって
i->x + (i+1)->x
だと思ったんですけど違うみたいなのでどうするかわかりますか?
0154デフォルトの名無しさん2009/10/27(火) 13:06:15
i[0].x + i[1].x
0155デフォルトの名無しさん2009/10/27(火) 16:05:47
>>154
サンクス
0156デフォルトの名無しさん2009/10/27(火) 19:12:16
>>152
メモリ使用量を100kから80kへ減らす、所要処理時間を1200msから1180msへ減らす。
いかにもC++崇拝者がやりそうなことだな。
そのためには誰が読んでも処理内容が明白なアルゴリズムを性能だけを考慮してチューニングし始める。
改善の相対量では無く絶対量を理解していない。体感では無に等しい改善の対費用効果を考慮する概念すらない。
コードの運用コストがいくら掛かろうと性能が向上することは良いことだと思い込んでいる。
見えているのはコードだけ、それを利用する人間の笑顔じゃない。
0157デフォルトの名無しさん2009/10/27(火) 19:15:05
まぁ、hpcで100台で稼動なんて現場では1%の高速化でも仕事になるわけだが。
0158デフォルトの名無しさん2009/10/27(火) 19:57:40
>>156
なんでそんなに目の前の相手のキャラクターメイキングに必死なの?
0159デフォルトの名無しさん2009/10/27(火) 20:01:39
プロファイルして時間食うところだけ変えろよ
0160デフォルトの名無しさん2009/10/27(火) 20:21:12
>>156
1.2秒以内に処理が終わらないと子供の命が危ないんだけど。
0161デフォルトの名無しさん2009/10/27(火) 21:05:56
1.2秒だと子供の命が助かって、1.21秒だと死ぬってどんな状況?ねえどんな状況?
アホらしい
0162デフォルトの名無しさん2009/10/27(火) 21:08:29
1.2 + �凾ゥもしれんぞ
0163デフォルトの名無しさん2009/10/27(火) 21:12:03
世の中についての知識があまりに無い人が
自信満々に突っかかってるを見てると、こっちが恥ずかしくなってくる。
0164デフォルトの名無しさん2009/10/27(火) 21:13:18
ものすごい打鍵音たてて歯軋りしながら>>156書いたんだろうな、恐らく
0165デフォルトの名無しさん2009/10/27(火) 21:16:33
つーか、あんな文章を書いたところで
どこの誰に影響を与えることが出来るんだろう?
無意味すぎる。
0166デフォルトの名無しさん2009/10/27(火) 21:17:24
takaga 2ch
0167デフォルトの名無しさん2009/10/27(火) 21:18:54
2chといえども
そこそこのコンセンサスすら得られないなら書く意味がないだろう。
0168デフォルトの名無しさん2009/10/27(火) 21:24:28
リアルタイムな処理を要求する場合だと重要じゃないのか?
0169デフォルトの名無しさん2009/10/27(火) 21:37:10
インテル Parallel Amplifierは使える。
VC++2008のプロファイラは関数単位しか時間でないだろ? 使いにくいし。たぶん。
こっちは行単位で出るぞ。
0170デフォルトの名無しさん2009/10/27(火) 21:46:39
>>161
よくあること。
0171デフォルトの名無しさん2009/10/27(火) 22:12:35
結局具体的には挙げられないのか
まあ、よほど特殊な状況でない限り161みたいな状況なんてありえないよな
みんながみんな宇宙船や粒子加速器作ってる訳じゃないんだからさ
0172デフォルトの名無しさん2009/10/27(火) 22:17:12
>>170
ねぇだろw
0173デフォルトの名無しさん2009/10/27(火) 22:39:40
医療機器とかもだな。
このレベルで挙げ始めたら、知ってる人は大量に挙げられるんじゃね?
>>161みたいに、「俺の知らないものはこの世に無い」とでも思ってるかのように
自信満々に「アホらしい」とは言えんなぁ、俺は。
0174デフォルトの名無しさん2009/10/27(火) 22:45:21
実際にありますよ、じゃ答えになってない
具体的な例をあげて、それがなぜ1.2秒なら良くて1.21秒だとだめになるのかを簡単にでも説明できないと
0175デフォルトの名無しさん2009/10/27(火) 22:49:16
それを>>160に聞きたい気持ちもあるけど、
>>161は何を根拠にアホらしいと断定してるのかも聞きたい。
この世にそんなものはあってたまるかという自信に満ち溢れてるようなので。
0176デフォルトの名無しさん2009/10/27(火) 23:02:29
1.21秒とか子供の屁理屈に聞こえるから、もう止めようぜ、そういうの。
0177デフォルトの名無しさん2009/10/27(火) 23:03:44
聞こえるっていうか、そのものズバリ子供の屁理屈だと思うよ。
常人にはわからない不思議なマッチで火が点いて、引っ込みつかなくなったのでは。
0178デフォルトの名無しさん2009/10/27(火) 23:09:21
1.21 秒で文句あるなら、何秒なら文句ないの?
例えばで出てきた具体的な物理量をいくら叩いても数学的には何も言えてないだろ
逆に数学的に破綻のある論理でもシステムのライフサイクルとの対比で ∞ に近似できるケースもあるし

結局、基準を「俺ルール」に求めている点で何も変わってない
0179デフォルトの名無しさん2009/10/27(火) 23:15:43
時と場合による。
オリンピックの100m走の計測だと9.58と9.57はすごい違いだろ。
後者だと長年歴史に名が残る可能性。
0180デフォルトの名無しさん2009/10/27(火) 23:17:50
ここは相談室ならぬ談話室ですな
0181デフォルトの名無しさん2009/10/27(火) 23:19:09
一杯やりますか。
0182デフォルトの名無しさん2009/10/27(火) 23:33:05
車のブレーキ制御とかは0.01秒の差は大きいんじゃないか?
0183デフォルトの名無しさん2009/10/27(火) 23:35:02
>>182
車のブレーキ制御ってC++使ってしてるの?
0184デフォルトの名無しさん2009/10/27(火) 23:44:19
>>182
面白い例えだと言えばまあそんな気もしてくる。

時速100kmでかっ飛ばしていたとすると
100(km/hr)*(1000/3600)=77.2(m/s)
だから
0.01秒では
0.77m
の差が出る。

まあ子供の命を救えるかどうかは微妙な所。
0185デフォルトの名無しさん2009/10/27(火) 23:52:01
C++を使ってるところもあるかもしれないが、まだCだろうな。
0186デフォルトの名無しさん2009/10/27(火) 23:53:29
>>183
C++かどうかは知らんが組み込み系な言語でしょう。
(スレチってなら1.21秒な話も同様ですぜ)

>>184
101回目のプロポーズなら死んでたかも知れない。
100km/hは出してないけどさ。
0187デフォルトの名無しさん2009/10/27(火) 23:54:01
>>182
だいたい1ms-10ms
ブレーキ制御はペダル入力だけとは限らないからね

>>183
Cだな
C++なんて絶対に使われない
0188デフォルトの名無しさん2009/10/28(水) 00:28:29
前にNHKでやってた原子力発電所はCすら使わずアセンブラだった。
0189デフォルトの名無しさん2009/10/28(水) 00:51:54
最近は組み込みでも徐々にC++が使えるようになってきてる
ただし使い方はbetterCだけど
0190デフォルトの名無しさん2009/10/28(水) 00:52:56
>188
1bitだか1Byteミスっただけでダメだったって話のアレ?
0191デフォルトの名無しさん2009/10/28(水) 04:39:32
コンシューマゲーム開発だと、1フレームに収まるかどうかは死活問題だぜ。
0192デフォルトの名無しさん2009/10/28(水) 04:47:44
ね。
1/60秒以内に処理が終わるかどうか。0.001秒でも遅れたらゲーマーに袋叩きにされるな。
子供も死んじゃうかもしんない
0193デフォルトの名無しさん2009/10/28(水) 06:05:20
>>192
> 1/60秒以内に処理が終わるかどうか。
> 0.001秒でも遅れたらゲーマーに袋叩きにされるな。

1/60=0.016666666666666666666666666666667
だぞ。

0194デフォルトの名無しさん2009/10/28(水) 06:08:00
描写速度であってキー入力とは関係がない。 
描写速度以上の反応精度はあるだろう。
0195デフォルトの名無しさん2009/10/28(水) 06:44:43
>>193
0.0166秒以内に終わらせなくてはいけない処理は
0.0167秒かかってはいけない。

わかる?
0196デフォルトの名無しさん2009/10/28(水) 06:47:41
>>193
それが何か?
画面更新は垂直同期に合わせることになるから1/60秒という時間制限に0.001秒でも
遅れたら60fpsのゲームが30fpsになる。実際えらい違いになるよ。
0197デフォルトの名無しさん2009/10/28(水) 09:09:50
うにゃー
0198デフォルトの名無しさん2009/10/28(水) 09:14:37
>>193
なんでそんな中途半端な桁数に?
普通に0.01666……とでも書けば充分伝わるのに。
或いはいっそ、同じ間抜けを晒すならもっと桁数費やせば清々しいものを。
0199デフォルトの名無しさん2009/10/28(水) 09:15:18
うにゃー
0200デフォルトの名無しさん2009/10/28(水) 09:58:14
Windowsについてる電卓で1÷60を計算してコピペしたんだろw
02011932009/10/28(水) 23:22:14
適当に書いた>>193にレスがいっぱい付いて驚いたw

>>198
いや別に、ゲームプログラミングをしたことない俺が
横槍を入れたくなったから入れてみただけだ。
特に深い意図もない。

>>200
おまえ鋭いな。
まあWindows電卓じゃないけど似たような状況。
0202デフォルトの名無しさん2009/10/29(木) 01:18:30
グーグルを電卓代わりに使うなよ
0203デフォルトの名無しさん2009/10/29(木) 01:42:34
数msec遅れただけでこんなことになるわけですよ。
株価にも影響するんだぜこれ。
http://schiphol.2ch.net/test/read.cgi/gamefight/1256659345/
0204デフォルトの名無しさん2009/10/29(木) 11:00:14
なんか想像の話ばかりだね。
>>152がどういう物を作っているのか純粋に気になる。

>>203
ネットワークプログラミングは今の話題とは別じゃない?
0205デフォルトの名無しさん2009/10/30(金) 13:55:26
「20〜30ms処理が余分に掛かっても体感上なにも変わらないから
高速化の努力なんて無駄w」
で済むプログラムしか書いたことない人は実にお気軽なものですね。
0206デフォルトの名無しさん2009/10/30(金) 14:14:52
論点がずっとズレ続けている。
20ms余計に時間が掛かることで開発期間と運用コストが5%削減出来るとか、そう言う勘定が出来ないとダメ。
出来ない奴はエンジニアでもビジネスマンでもないよ、ただのプログラミングを趣味にしているだけのおじさん。
0207デフォルトの名無しさん2009/10/30(金) 14:30:32
言語は適切に選択していかなければならない
あらゆるものをC++で書こうとする人間は
適切なソリューションを選択する能力が低いとしか言いようがない
そしてC++が最良の選択肢となるケースはそれほど多くはない
0208デフォルトの名無しさん2009/10/30(金) 14:45:33
多量規制の影響ひどいね
ただでさえ書きこみの少ないプログラム板が完全に閑古鳥が鳴いてる
0209デフォルトの名無しさん2009/10/30(金) 15:18:07
頭を冷やすには丁度いいんじゃないの
0210デフォルトの名無しさん2009/10/30(金) 15:33:10
>>206,207
「あらゆるものをC++で書こうとする人間」の相手をしなければ
ならない境遇にあるのですね。
痛み入ります。
0211デフォルトの名無しさん2009/10/30(金) 15:43:57
「C++が最良の選択肢となるケースはそれほど多くはない 」
ってそりゃそうでしょ。
世の中のプログラマーの仕事量で考えれば業務系とか実行
スピードなんてどうでも良いようなのが8割以上だろうから。
そんな事はこのスレに居るC++使いは当然分かってるだろ。
0212デフォルトの名無しさん2009/10/30(金) 16:52:55
C++のFAQで、一気にダウンロードできるドキュメントはありませんか?
0213デフォルトの名無しさん2009/10/30(金) 17:07:05
MSDN
0214デフォルトの名無しさん2009/10/30(金) 23:52:12
> そしてC++が最良の選択肢となるケースはそれほど多くはない

土方ってそういう基準でなるものか?
0215デフォルトの名無しさん2009/10/31(土) 00:04:49
ひ…土方!?
0216デフォルトの名無しさん2009/10/31(土) 03:09:02
>>212
http://www.parashift.com/c++-faq-lite/on-line-availability.html#faq-2.2
> ... Learn to use wget instead.
0217デフォルトの名無しさん2009/10/31(土) 12:23:44
STLのコンテナの各メンバ関数がどんな例外を投げるか知りたいんだけど、どこかに一覧とかないかな?
0218デフォルトの名無しさん2009/10/31(土) 12:51:59
例外は実装依存だからあるわけねーよ
0219デフォルトの名無しさん2009/10/31(土) 13:02:57
標準規格に書いてあるよ
例外を投げてはいけない関数はそのことも書いてある

>>218
デタラメはやめなさい
0220デフォルトの名無しさん2009/10/31(土) 13:06:53
例えば std::vectorのメンバ関数at()は例外std::out_of_rangeを
投げるとか、そういう奴か?
0221デフォルトの名無しさん2009/10/31(土) 13:10:12
しかし確かにアロケータは実装依存なので、投げられる例外は
少ないわな

手持ちのC++標準ライブラリには標準はvectorとdequeのat()と、
アロケータがbad_allocを投げる事を要求しているに過ぎないと
書いてある

詳しくは規格票のどこかにあると思うが誰か探してくれ
0222デフォルトの名無しさん2009/10/31(土) 13:11:41
>>220
そうです。
0223デフォルトの名無しさん2009/10/31(土) 13:19:11
これか

§23.1.1.13
13 The member function at() provides bounds-checked access
to container elements. at() throws out_of_range if n >= a.size().

§26.3.1.6
6 These library functions are permitted to throw a bad_alloc (18.4.2.1) exception
if there are not sufficient resources available to carry out the operation.
Note that the exception is not mandated.

この二つしかない
0224デフォルトの名無しさん2009/10/31(土) 13:24:44
で、atとallocateが使われてる箇所はどこなの?
0225デフォルトの名無しさん2009/10/31(土) 13:41:43
ライブラリがどんな例外を投げるか分からないw調べる資料もないw
C++崇拝者は無駄に調べ物が多くて大変ですねwww
ドキュメントさえ整備されていれば本来そのコストは支払う必要の無いものwwwでも現実に整備されていないから浪費wwww
その無駄な時間を生産へ充てた方が賢明ですよwwwww
0226デフォルトの名無しさん2009/10/31(土) 13:49:21
wは句読点じゃないぞ
0227デフォルトの名無しさん2009/10/31(土) 13:52:35
コンテナの中身が投げる例外は何でも投げます
0228デフォルトの名無しさん2009/10/31(土) 13:53:58
>>221
アロケータがbad_allocをthrowするってことは、
push_backやinsert内ではどうなってんだろ?
そのまま呼び出し側までthrowしてんのかな?
0229デフォルトの名無しさん2009/10/31(土) 14:03:31
ライブラリは内部処理を知らなくても扱えるようにドキュメントが整備されていることが前提
でも仕様が明記されていないから結局内部処理を調べなきゃいけないw実際に動かしてどうなるか確かめて見ないといけないw
生産性を高めるはずの隠蔽の仕組みがすべてが徒となっているww
0230デフォルトの名無しさん2009/10/31(土) 14:11:21
そうでもない
0231デフォルトの名無しさん2009/10/31(土) 14:57:55
-fno-exceptionsを渡している俺に隙はなかった
0232デフォルトの名無しさん2009/10/31(土) 15:14:45
なんだよC++を揶揄している馬鹿は
ロクに使えもしない癖に文句言うなカス
0233デフォルトの名無しさん2009/10/31(土) 17:03:40
例外が有効な環境ではどんな例外投げられても構わない
様に普通の人は作るから全く問題なし。
0234デフォルトの名無しさん2009/10/31(土) 17:23:07
>>233
うん。C++に限らずJava以外みんなそうだと思う。
0235デフォルトの名無しさん2009/10/31(土) 17:29:11
どんな例外でもいい設計って具体的にどんなよ?
投げるほうは投げるほうで完結するように例外安全にするのはいいとして
受け取るほうはcatch(...)だけにして、エラーの詳細なんて知ったこっちゃないと捨ててしまうの?
0236デフォルトの名無しさん2009/10/31(土) 17:34:04
>>235
なるべく catch しない。
main() とか、根っこには catch(...) とか置いとく。
これでだいだい問題ない。
個別に問題があれば追加の catch を注意深く配置する。
0237デフォルトの名無しさん2009/10/31(土) 17:41:17
あぁそうか
不明なエラーと回復不能なエラーはルートまでたらい回しリレーして、
詳細がわかって回復可能なところは個別にいじるのね
なんか例外でなやんでた部分がすっきりした気がする
0238デフォルトの名無しさん2009/10/31(土) 17:51:55
例外って、対応していない関数などあれば出来ないだろ。
0239デフォルトの名無しさん2009/10/31(土) 17:53:22
プログラムって、バグってる関数などあれば出来ないですね。わかります。
0240デフォルトの名無しさん2009/10/31(土) 20:29:05
例えばbad_ballocが投げられた時にどこまで対応するかなんて
作ってるものの性格によってまるで違うだろうしな。
out_of_rangeの場合はまた違うだろうし。あなたなら?握りつぶす?

そういったシステムポリシーに関わる処理をどのレベルで行うのかを
柔軟に選べるようになるのが例外の強力なところだと思う。
汚いif文を大量に掃除した上で。

一掃できることが存在理由
だと思う。
02412402009/10/31(土) 20:30:55
最後の2行はゴミです。すみません。
0242デフォルトの名無しさん2009/10/31(土) 20:51:24
自分のレスにゴミを残すような奴が
> 汚いif文を大量に掃除した上で。
とか言ったところで説得力は無いな。
0243デフォルトの名無しさん2009/10/31(土) 20:58:04
専ブラ使ってると編集中に Shift + Enter で誤送信しちまう時があるんだよ
ただし >>240 がそうだったかどうかはわからんがな
0244デフォルトの名無しさん2009/10/31(土) 20:58:49
説得する気など毛頭無い。
0245デフォルトの名無しさん2009/10/31(土) 21:23:32
>>240
は記述量増大は必然的にバグ増大につながる
ってことを敢えて示しているのだと思うYO。
0246デフォルトの名無しさん2009/11/01(日) 15:33:52
try { なんちゃら } catch(...) { ; }
こそが男気あふれる例外の使い方
0247デフォルトの名無しさん2009/11/01(日) 20:39:01
>>246
クソコードじゃねぇか
0248デフォルトの名無しさん2009/11/01(日) 21:12:18
空文入れて「例外をガン無視することにしました」と表明してるだけまだまし
catch(...){}が一番困る
0249デフォルトの名無しさん2009/11/01(日) 22:47:50
でも一番上はそうするしかなくね?
まぁほとんどの場合exception&キャッチしておけば実用上問題ないんだし、気にしたら負けかと。
0250デフォルトの名無しさん2009/11/01(日) 22:49:20
せめて何かしらのメッセージは吐いとこうぜ。
0251デフォルトの名無しさん2009/11/01(日) 23:12:59
>>249
そう
要求定義がまとまる前に実装については議論できんはず
何がどう困るのか言えん奴を相手にしたら負け、そこは間違いない
コンソールがない環境でコンソール出力を要求するアフォとかな
0252デフォルトの名無しさん2009/11/02(月) 00:46:58
何がどう困るって、どういうつもりで書いたかわからないのが困るに決まってるだろ
■ このスレッドは過去ログ倉庫に格納されています