【初心者歓迎】C/C++室 Ver.99【環境依存OK】
at TECH
[前50を表示]
100:デフォルトの名無しさん
16/08/05 07:45:20.82 3ew4HwfD.net
「巨大な配列をローカル変数で作るな」っていうアレだね。
今でも有効な金言のはずだけど、大きさの範囲は往時と桁違い。
101:デフォルトの名無しさん
16/08/05 07:50:21.51 2RfJu/6K.net
>>97
それすら失敗する状況があったから
PostMessageさんは生まれたんだぞ
102:デフォルトの名無しさん
16/08/05 08:56:17.95 ImN4X8Nu.net
>>92
f() 1つめのnewが失敗したら外のcatchが捕まえるんか
同じ階層にtry catchいるんかと思ってたわ
同じ階層で処理する必要が無かったら外に任せていいんやな
103:デフォルトの名無しさん
16/08/05 08:57:50.95 ImN4X8Nu.net
と思ったけど使う側はtry catchいるかわからん場合もあるやん?
中で捕まえて戻り値で示した方がよくね?
104:デフォルトの名無しさん
16/08/05 11:34:11.43 pznsau1R.net
作法としてはnoexceptが付いてない限りは例外吐くものとしたほうがいいと言える
実用上どうかは別だけど
105:デフォルトの名無しさん
16/08/05 13:29:14.93 ccW8btWE.net
>>91
いわゆるprintfデバグみたいに要所にログ出力を仕込んでいる。
但し出力先はファイル。Windowsイベントやsyslogでもいいかも
IDEのデバッグ機能(ブレイクポイントとか)はあまり使わない
106:96
16/08/05 15:48:33.99 riQ7lTBs.net
結局 何かのオブジェクトを生成する時には失敗する可能性はあるという当たり前の事すね。
どこまでケアするか悩みますなぁ。
107:デフォルトの名無しさん
16/08/05 23:11:36.86 KuwiCwk0.net
>どこまでケアするか悩みますなぁ
例外処理に「どこまで」「ケア」という考えが有るとは知りませんでした
108:デフォルトの名無しさん
16/08/05 23:21:48.06 1l5AtzWC.net
例外を一切 catch しない手もあれば,食ってしまう手もあるわけで‥
109:デフォルトの名無しさん
16/08/06 01:49:36.24 XuwJzMZr.net
>>104
人それぞれみたいだな。
110:デフォルトの名無しさん
16/08/06 02:22:39.53 GoVmW8ok.net
障害の発生確率と補償費用による期待値をみて、充分に低いなら敢えて見過ごして損害賠償で対応するというマネジメントもある
111:デフォルトの名無しさん
16/08/06 03:04:54.83 4Cqooj0F.net
保険屋ですな
112:デフォルトの名無しさん
16/08/06 05:41:33.36 KaV1ESpO.net
なるほど。
例外はもともと、対処を上位コンテキストに委ねるためにわざわざ例外を漏らすものなのに、
すぐに捕捉する方がより良いと勘違いしてしまったから「どこまで」という珍妙な考えに至るんだな。
しかもそれを「例外安全に向けた努力どこまでするか」にすりかえているからたちが悪い
113:デフォルトの名無しさん
16/08/06 07:17:25.33 gji7A/0H.net
例外って、想定外環境で動作したのでログを残して終了しますねと
この部分は代替処理を用意したのでログを残してリカバリーしますな使い方じゃないの
それ以外の部分はどうにもならない
通常の四則演算でもうっかりオーバーフローさせて計算結果が変とか
ここら辺は事前に想定と検査が必須だし
114:デフォルトの名無しさん
16/08/06 07:28:04.31 CxdQuwcg.net
伝説のCOME FROMを使いこなしている勇者はいないのか?
115:デフォルトの名無しさん
16/08/06 14:23:28.69 nmPW5pwo.net
それなに?
116:デフォルトの名無しさん
16/08/06 16:37:41.98 BjaX+hYV.net
例外の内容によって対処方法が変わるだろ
俺もどこまでケアするか悩むんだけど
例外によっては可能な限りアプリを安全に終了させないといけなかったり、
処理をリトライしたり。
あと、ログと例外処理は分けて考えて方がよくないか?
絶対セットになってると思うけど。
117:デフォルトの名無しさん
16/08/06 16:40:57.40 CIMwAPv1.net
new失敗した時はハンドラでWM_CLOSEをSendMessageしたら安全終了?
118:デフォルトの名無しさん
16/08/06 17:16:25.01 BjaX+hYV.net
その状況でWM_CLOSEのSendMessageが保証されているかは知らんけど、
それでアプリを正常終了させることを要求されるならそれでいいんじゃない?
仮に例外でプログラムがクラッシュしてもデータや機器が破損せず、
プログラム再起動で問題なく動作再開できる状態になるなら、 それでも良い世界があるかもしれないし。
119:デフォルトの名無しさん
16/08/06 17:57:39.04 h7DnkLlu.net
>>114
つ URLリンク(www.nurs.or.jp)
120:デフォルトの名無しさん
16/08/07 20:22:15.39 0UTNB4TK.net
WM_CLOSEをSendしたら即座にDestroyWindowされるんだろうか
たぶんWM_DESTROYがPostされるだけだと思うんだが・・・まあそれはいいか。
それにしても、例外がなかったかのように動作するアプリを作りたいと
思ってるやつは多いようだが、
エラーはエラーとして表示してくれないと困ると思うぞ。
121:デフォルトの名無しさん
16/08/07 21:05:36.22 sQIJPt7Y.net
Linux系なのでWM_CLOSEとかめんどくさいですね。
try catch はシグナル処理みたいなもんだと思っております。
VC6は使えますけど、もう忘れましたw
122:デフォルトの名無しさん
16/08/07 22:08:15.77 Ww4KrQ/z.net
PostMessageはメモリ枯渇状況になる前にエラーになるって、偉そうに言ってたのがいた
だーかーら、WM_CLOSEはダメらしいよ
123:デフォルトの名無しさん
16/08/07 22:14:54.96 Y+04W+Li.net
何をエラーと定義するか次第だけど、
例外発生が即プログラムのエラーになるとは限らないし、
何でもかんでもダイアログで表示されたら煩わしくないか?
自動で復帰できるならメッセージ表示しなくてもいい。ログは記録した方がいいけど。
プログラムのユーザのレベルとか、UXも絡んでそうだからひとくくりには出来ないと思うよ。
124:デフォルトの名無しさん
16/08/07 22:34:58.56 FG1Pf9CO.net
118に翻訳が必要なのか
「エラーはエラーとして表示してくれないと困ると思うぞ」
↓
「復旧出来ないも有るんだから、そういうエラーはエラーとして表示してくれないと困ると思うぞ」
125:デフォルトの名無しさん
16/08/08 00:39:47.88 FOEjBVJr.net
エラーを通知するかどうかの話と例外をどこで処理するかの話をごっちゃにしたら話が混乱するだけでしょ。
126:デフォルトの名無しさん
16/08/08 00:48:47.48 TzS/bNsO.net
復旧は関係ないだろ
127:デフォルトの名無しさん
16/08/08 01:21:40.28 TzS/bNsO.net
例外を処理するってのは、catchする側とthrowする側の両方含むってことでOK?
適切にエラーを通知(throw, メッセージ表示など)するためには、
例外をどこで処理するか考える必要があるんじゃないの?
128:デフォルトの名無しさん
16/08/08 06:05:24.79 7KF+UP9b.net
考えて作るが、一見考えてないようなプログラムになることも多いよ。
特権もなく動作するコマンドラインのアプリならキャッチせずそのまま終了させてログもOS側に任せてしまうとか。
129:デフォルトの名無しさん
16/08/08 06:48:14.77 B47R2ann.net
>両方含むってことでOK?
だめ
> メッセージ表示など)するためには、
>例外をどこで処理するか考える
お前は「プログラムをコンパイルするにはコンパイラーの動きを考えてソースを書かないといけないので、コンパイルとはソースを書くことも含む」とか言い出しそう
130:デフォルトの名無しさん
16/08/08 08:49:45.73 TzS/bNsO.net
>>128
明確に書いてくれよ、例外処理はcatchだけを指すのか、
そこでの復帰処理も含むのか?
例外をrethrowすることは含むのか?
rethrowする際にエラー内容を収集することは含むのか?
あとコンパイルにコーディングは含まないと思うよ。
コーディング作業にコンパイル作業は含むかもしれないけど
131:デフォルトの名無しさん
16/08/08 10:59:49.24 B47R2ann.net
>>129
>例外処理はcatchだけを指すのか
No
>そこでの復帰処理も含むのか?
Yes
>例外をrethrowすることは含むのか?
Yes
>rethrowする際にエラー内容を収集することは含むのか?
Yes
132:デフォルトの名無しさん
16/08/08 11:51:41.08 179Py0K/.net
例外処理って言われても...
0で割ると強制的に例外が発生するけど
整数の加減乗算だとオーバーフローが起きてもスルーだよね
マジメに検査すると処理コストがバカに出来ない
例外処理も同じで、不安定さが予想される
例外状態を検出して改善したい
エラーがある確立で確実に発生するので対処したい
目的に応じて対処方法が異なる
あと、アプリケーションでnewなんて使わね〜よは新鮮だった
目的に応じコーディング上の不安定要因を排除しつつ、必要であれば例外検出も組み込む
ここら辺の切り分けが出来ない場合、そもそも君は何を目的にコード書いているの?って話だろ
133:デフォルトの名無しさん
16/08/08 12:29:07.89 TzS/bNsO.net
>>130
じゃあ127のだめってなんだよ?
134:デフォルトの名無しさん
16/08/08 12:35:29.00 TzS/bNsO.net
>>131
その通りだと思う。
ただ、演算のオーバーフローが致命的な問題かもしれなから、コストかかっても検査しなきゃならない場合もある。
あと、多分newなんて使わねーよってのはスマートポインタ使えってことだろ。
ついでなんで、scope_exitも役に立つことを書いておこう。
135:デフォルトの名無しさん
16/08/08 13:24:40.61 B47R2ann.net
>>132
ん? ↓の★のことだが
auto my_throw() {throw int{};}
auto f() {
try {my_throw();}//例外をスローする★
catch(...) {my_throw(); }//例外を処理する(その内容がたまたま例外スロー)
}
136:デフォルトの名無しさん
16/08/08 14:20:57.92 B47R2ann.net
>>131
>0で割ると強制的に例外が発生するけど
そんな、処理系依存のことをさも普遍的であるかのように語られても
>整数の加減乗算だとオーバーフローが起きてもスルーだよね
そんな、符号の有無によって状況が異なるものを一括りにされても
137:デフォルトの名無しさん
16/08/08 16:23:34.53 8H2VF6DU.net
やっぱ男は黙ってlongjmp
138:デフォルトの名無しさん
16/08/08 18:59:35.32 TzS/bNsO.net
>>134
125からなぜそう解釈されたのか意味がわからんのと、
my_throwの存在意義がわからんけど、
int compute(int n) throw(exception) {
int temp[n]; // bad_allocになるかも、ここでは無視する
int result = hoge(temp, n);
if (result == 0) { throw runtime_error("failed"); }
return result;
}
int caller() throw(my_exception) {
try { return compute(100000); }
catch (const bad_alloc& e) { terminate(); } // もう無理
catch (const exception& e) {
log(e.what(), __LINE__, __FILE__); // ログ残して
throw my_exception(current_exception(), __LINE__, __FILE__); // 上位に教えてあげなきゃ
}
}
突っ込みどころあると思うけど、で、例外処理っていうのは、
catchする側の処理と、throwする側の処理の両方を含むってことで、
catchする側はどんな例外をcatchして何をするとか、
throwする側はどんな例外を投げるべきなのか考えるのでは?
139:デフォルトの名無しさん
16/08/08 19:09:20.00 Rfn+vLgM.net
jmp_buf[100]
140:デフォルトの名無しさん
16/08/08 19:35:54.75 /nbVco2G.net
>>137 それに加えて、可能なら catch しないでそのまま上に任せられるように書けないか考えるってのもある。 途中で失敗したとき catch して delete しないで良いようにポインタを unique_ptr に入れとくとか、mutex のロックはロックオブジェクトのデストラクタで解放されるようにするとかそういうの。
142:デフォルトの名無しさん
16/08/08 20:13:41.95 TzS/bNsO.net
デストラクタ素晴らしいわ
ところで longjmp 推しの人に尋ねたいんだけど、
longjmp した場合ローカルスコープのデストラクタ発生するんですか?
143:デフォルトの名無しさん
16/08/08 20:49:31.20 G4IdvMIk.net
デストラクタ?
なにそれ美味しいの?
C言語
144:デフォルトの名無しさん
16/08/08 21:06:41.99 B47R2ann.net
>>138
もう糞コードの予感しかしない
145:デフォルトの名無しさん
16/08/08 21:08:39.66 B47R2ann.net
>>140
呼ばれないな。
デストラクターの呼び出しは言語レベルのサポートが必要だから
ライブラリや関数では無理だろう
146:デフォルトの名無しさん
16/08/08 21:14:41.58 B47R2ann.net
>>137
『例外処理っていうのは(略)』
全くその通りだと思うが、それと>>126の話に何の関係が。
そういや>>126から>>129にかけて表現が「例外を処理する(handle exception)」から「例外処理(exception handling)」に変わっているけどその影響か
147:デフォルトの名無しさん
16/08/08 21:55:44.76 yYicVjYE.net
難しい ってのはわかった。
148:デフォルトの名無しさん
16/08/08 22:09:26.95 4LKdJSG5.net
onexitはあるから、COME FROMで捕捉して動的に登録するとか
その昔、c言語にgosub return構造を って記事を読んだ記憶が
あるな。技術評論社で書いたのは平林氏だったかと
149:デフォルトの名無しさん
16/08/08 22:47:44.21 /nbVco2G.net
libjpeg 風に呼び出した先のコードが使うリソースは全部呼び出し元の管理下にできるように実装すると、longjmp で戻ってきたときも解放できる
150:ニいう寸法。
151:デフォルトの名無しさん
16/08/08 23:51:04.63 bVjpaUT2.net
googleのスタイル云々読むとtry catcheは捨てたみたいなことが書いてある
152:デフォルトの名無しさん
16/08/08 23:54:20.24 e2qvnoH0.net
ほとんどすべての場合普通にエラー返せば済むことだからな
153:デフォルトの名無しさん
16/08/08 23:58:19.07 YlbbT2Ic.net
>>148
googleは例外を使ってない古いコードをたくさん抱えてる
例外を使ってないコードと例外を扱うコードを混ぜて使うのは大変だから使わないっていう選択をしている
新規のコードでも例外使うなとは書いてないからね
154:デフォルトの名無しさん
16/08/09 00:08:36.24 NJpb4SWa.net
へー。
C++ の話と違って悪いけど、Apple の Swift っていう言語ではフレームワーク(ライブラリ)のポインタ引数にエラーを返す関数を Swift 側では例外として処理するように書けるようになってる。
Obj-C で
[SomeClass add:hage error:&error]
if (error) ...;
を
do {
SomeClass.add(hage)
} catch let error as NSError {
...
}
と例外処理構文でかける。
好き勝手言語ならではの力技によるエラー戻り値と例外の統合。
155:デフォルトの名無しさん
16/08/09 00:14:47.26 HQF3JemY.net
スイフトって美味しいの?
156:デフォルトの名無しさん
16/08/09 00:18:24.13 TFQX1mgV.net
リンゴの味しかしない
それがおいしいと感じる人もいる
157:デフォルトの名無しさん
16/08/09 00:21:02.62 NJpb4SWa.net
iOS や Mac のアプリ書くにも Obj-C の方がいい。
ってか C++ 混ぜられる Obj-C++ がアップル用には最強。
158:デフォルトの名無しさん
16/08/09 01:44:16.59 lMOV9twn.net
Swiftはシンタックスシュガーが多い気がするが、とにかく書きやすいイメージ。基本ARCでshared_ptrなスマートポインタだし、KVOやGCDも魅力的、Cの関数呼ぶのもJava,C#より楽で素晴らしい。
159:デフォルトの名無しさん
16/08/09 01:53:49.32 udl5axBY.net
いやそれシンタックスシュガー以外は Obj-C(++ ) にも全部あるかんね!加えてObj-C++ は C++ の全機能!
すまん c++ 好きなんだ。
160:デフォルトの名無しさん
16/08/09 02:10:20.54 HQF3JemY.net
android は主力がjavaなんでしたっけ
161:デフォルトの名無しさん
16/08/09 07:09:57.89 smg0QXvs.net
例外処理ってC++の処理系がサポートする構造化されたジャンプテーブルの集合体で
実際のCのコードで表現するとかなり冗長で力技な部分、処理に高いコストを払っている
で、どうせ高いコストを払うのなら
>>151の
>C++ の話と違って悪いけど、Apple の Swift っていう言語ではフレームワーク(ライブラリ)のポインタ引数にエラーを返す関数を Swift 側では例外として処理するように書けるようになってる。
みたいに処理系が暗黙のテーブルなりフラグなりを生成管理して、見かけ上便利な表記をサポートする
そんな感じになる
だけど、感覚的に便利な表記の裏の実行コストは隠蔽されているので
実際に実行時間でのクリティカルな問題が起きるまで何処が問題なのかわからなくなる
便利な機能でコードを書きたいのなら、現在ではC++以外の選択が沢山あるよね
C#?
162:デフォルトの名無しさん
16/08/09 07:16:42.52 BF0nl6bY.net
>>149
返す方の問題じゃなくて受ける方のエラーチェックが面倒だって話すら理解してないのかよ...
163:デフォルトの名無しさん
16/08/09 07:24:35.79 JS0TrNVx.net
次はPL*SQLの例外処理の話しかな?
164:デフォルトの名無しさん
16/08/09 07:54:34.56 +N1v5n8J.net
Obj-Cとその呪いを受け継いだswiftを持ち上げる人の気持ちが理解できない
165:デフォルトの名無しさん
16/08/09 09:30:03.54 STmJmNt9.net
>>158
「処理に高いコストを払っている」というけど正常パスでの時間的オーバーヘッドは無い実装がメジャーなわけで、
「どうせ高いコストを払うのなら」というような話にはならないと思うんだ。
166:デフォルトの名無しさん
16/08/09 09:31:43.59 FERoGXEy.net
どうせ○○だからって言う思考はやめた方がいいな
167:デフォルトの名無しさん
16/08/09 12:04:59.14 smg0QXvs.net
>>162
あの〜、隠蔽されている部分があるので留意しましょうね程度の指摘なんですけど...
初心者を卒業した人は、色々意識しながら好きにしてくださいとちゃう?
シンタックスシュガーが良く出来ていてコーディングが快適な処理系は沢山でているし
便利なスクリプト言語も楽しいですし
168:デフォルトの名無しさん
16/08/09 12:49:20.64 lMOV9twn.net
CのAPIとか、例外構文使えないやつで
// errno 見て成功したか判断してね
int sum(int* values, int count);
とか
int sum(int* values, int count, int* errorCode);
はまあ良いと思うけど、
HRESULT sum(int* values, int count, int* result);
は嫌だな
169:デフォルトの名無しさん
16/08/09 13:42:50.72 i5d/RDSl.net
話しかけた相手がアスペだった
ID:STmJmNt9が不憫でならない
170:デフォルトの名無しさん
16/08/09 13:54:53.98 1Dh6XOYF.net
>>165
その辺はHRESULT に統一されてるおかげで SUCCEEDED マクロ一発という楽ちん判定が出来るんじゃん。
int some;
if (SUCCEEDED(hoge(nanika, &some)) {
...
}
と。
171:デフォルトの名無しさん
16/08/09 14:06:09.56 kK7P+MyF.net
戻りが直接結果になるタイプを要求するのは
戻りをそのまま連続して記述したいから?
foo(hoge())
これに、エラーを引き渡ようにして
foo(hoge(&hoge_err), &foo_err)
こうしたい? なんか違う感じだ
172:デフォルトの名無しさん
16/08/09 15:32:57.52 smg0QXvs.net
>>162
処理に高いコストを払っているの下りはご認識って事だね、わかりました
173:デフォルトの名無しさん
16/08/09 15:43:12.20 lMOV9twn.net
int some; // はぁめんどくさ、しかも初期値必要かな?
HRESULT hr = hoge(nanika, &some); // hoge(Nanika, int*)
auto some = hoge(nanika); // auto最高
if (some == -1) { // errno 見る
HRESULT hr = S_OK;
auto some = hoge(nanika, &hr); // auto最高
if (FAILED(hr)) { // 何かする
みたいな、例外の方がよりいいけど
174:デフォルトの名無しさん
16/08/09 18:01:40.23 A3T+miCG.net
なんか違ったみたいだw
人によって結構好みが違うなあ。
175:デフォルトの名無しさん
16/08/09 22:44:43.67 BIg/3sRw.net
>>170
一番最後の、hr に成功失敗が全く返されないことがあり、かつその場合は成功とみなして良いという(作る側の)仕様や(使う側の)仮定はあり得なくないか?
そんなの聞いたこともないしそうする利点も思いつかない。
176:デフォルトの名無しさん
16/08/09 22:50:22.50 i5d/RDSl.net
通訳すると
「俺の脳みそありえなくね?」
になってしまうのだが、大丈夫ですか
177:デフォルトの名無しさん
16/08/09 23:15:29.41 k5+ib0A2.net
>hr に成功失敗が全く返されないことがあり
ってのがどっから出てきたんだか。
178:デフォルトの名無しさん
16/08/09 23:48:00.35 G1EqcLtF.net
エスパーすると、初期値にS_OK指定している部分で、それをしないと不定値になる仕様に対処しているとか思っているのだろう。
179:デフォルトの名無しさん
16/08/09 23:52:29.31 lMOV9twn.net
[out]属性で値更新されなかったら、APIのバグだろ。
もしくは、
HRESULT hoge(HRESULT* error);
で、errorが更新されたことをreturnするしかないな。
別に、errorはHRESULTじゃなくても同じだけど。
やっぱエラーは例外でthrowして、結果をreturnする方が確実ッ!
180:デフォルトの名無しさん
16/08/10 00:30:18.62 apTclOZZ.net
C++の例外ってジャンプテーブルなの?
という疑問があるんだが。まあ何をジャンプテーブルって言うのかちょっと微妙だけど。
switch文みたいなやつか?
あとひとつはジャンプテーブルってそんなにコストかかるのか?
WndProcなんかif文やジャンプテーブルの山だと思うけど。
181:デフォルトの名無しさん
16/08/10 04:19:31.
182:33 ID:bfwokPwT.net
183:デフォルトの名無しさん
16/08/10 20:55:18.36 O/fexyuH.net
>>177
setjmp/longjmp
184:デフォルトの名無しさん
16/08/10 22:00:02.38 apTclOZZ.net
>>179
それ、読んだけどあんまりよくわからなかった。
try catchの実装って
catchで呼び出される命令アドレスをスタックポインタにpushして
fsセグメントの0番地にそのスタックポインタのアドレスを
登録しているようなんだけど
それがsetjmp/longjmp?
xor eax, eax
push ebp
push 命令アドレス
push dword ptr fs:[eax]
mov fs:[eax],esp
まあ、jmpには違いないが。
185:デフォルトの名無しさん
16/08/10 22:30:05.59 YvoH2oZ/.net
throwを書いた時点ではそれをcatchするコードがまだ存在しないかも知れないというのに
186:デフォルトの名無しさん
16/08/10 22:35:33.62 wzHKnkf3.net
catchが無い場合はどおなるの?
187:デフォルトの名無しさん
16/08/10 22:47:13.55 54wHY0lO.net
デフォルト
188:デフォルトの名無しさん
16/08/10 22:53:57.40 wzHKnkf3.net
ひぇ そっちの方が怖いね
189:デフォルトの名無しさん
16/08/10 23:26:10.34 6v8gmAa5.net
std::set_terminate
190:デフォルトの名無しさん
16/08/11 00:07:02.32 mjr+1oC8.net
・catchのコードをコンパイルした時点ではスローされるクラスが存在していない可能性がある。
・throwのコードをコンパイルした時点では実際にスローされるクラスがまだ存在していない可能性がある。
・スレッド開始からthrowに至るまでに通るtry(に付いてるcatch)は実行時に決まる。
ジャンプテーブルでは無理だな。
戻り先情報を渡すlongjmpとは別物
191:デフォルトの名無しさん
16/08/11 01:13:26.55 NtYTAKcg.net
>>186
2つ目は無いでしょ。結論は変わらんけど。
192:デフォルトの名無しさん
16/08/11 04:09:57.26 Oj+HuM4/.net
>>180
fsはスレッドローカルストレージを指す
>>186-187
longjmp使ってtry catchもどきを実装できる
193:デフォルトの名無しさん
16/08/11 09:07:02.69 MxNORS6j.net
>>187
それがあるんだな
URLリンク(ideone.com)
fもf_callerも実際にスローされる型を知らない
194:デフォルトの名無しさん
16/08/11 15:18:59.24 NtYTAKcg.net
>>187
なんか変に入り組んだ例だけど、単に throw; ならそうなるってことだね。なるほど。
195:デフォルトの名無しさん
16/08/11 22:30:01.49 MGxA7Inv.net
もうC++は自由すぎて手に負えず、つまらない部分で嵌まって話が先に進まないので、ベターC++となる新言語が必要なのではないだろうか
sssp://o.8ch.net/fg0j.png
196:デフォルトの名無しさん
16/08/12 07:32:44.29 MLJoZofC.net
名称は ++C++ を推す。
197:デフォルトの名無しさん
16/08/12 08:45:06.21 V4dr4yFb.net
コイルかよ
198:デフォルトの名無しさん
16/08/12 11:32:10.03 1Oj5kysc.net
すみません、どなたか助けてください。下記のコードが期待する動作になりません
URLリンク(ideone.com)
上記のコードでstd::sliceの組みを生成しています。
最初のスライスでk-1個の要素を選択し、次のスライスで1この要素を選択したいです。
上記のコードでは 1 2 3 4 5 2 3 4 と出力されていますが、期待する出力は 1 2 3 4 5 です。
どのように修正すれば期待する動作になりますでしょうか?
199:デフォルトの名無しさん
16/08/12 12:32:43.61 MLJoZofC.net
俺の環境だと URLリンク(ideone.com) が見えんので助けられん。
(見えたら助けられるという宣言ではない)
200:デフォルトの名無しさん
16/08/12 12:55:03.52 1Oj5kysc.net
>>195
すまん設定ミスってたわ
std::slice(k - 1,1,1); って1個の要素が選択されるんじゃないの?
出力がおかしくて意味が分からん。どこを直せばいいんだよ orz
201:デフォルトの名無しさん
16/08/12 14:01:53.58 MLJoZofC.net
元のソースで
20. x = aa[p.second];
21. for(auto &elem : x) cout << elem << " ";
となってるところ
202: 20. valarray<int> y = aa[p.second]; 21. for(auto &elem : y) cout << elem << " "; に変えてみ。 18.行で作ったx(要素は4個{1,2,3,4})に 20.行で要素1個{5}を先頭に入れても 残りの要素3個{2,3,4}は変化せずに残ってるのだと思われる。
203:デフォルトの名無しさん
16/08/12 15:01:29.03 A6nfo0WT.net
>>194
valarrayに補助配列系のオブジェクトを『代入』するときは双方の長さ(要素数)が等しくないと未定義動作
aa[p.second]は長さ1のslice_array<int>を返すので長さ4のxに代入すると未定義動作となり
期待と違う動作になっている
修正は>>197のようにvalarrayを新しく構築するか代入されるvalarrayの長さをresizeで変更しておく
204:デフォルトの名無しさん
16/08/12 15:30:14.59 5PVVdj86.net
新しいソート方法を思いついてコーディングしてみた(URLリンク(codepaste.net))のですが、
早すぎて自分の手持ちのソート法と比較になりませんでした。
このソート(AllaySort)って速い部類なんでしょうか?
ご教授お願いします。
205:デフォルトの名無しさん
16/08/12 16:24:59.76 1Oj5kysc.net
>>197,>>198
ありがとうございます。期待した動作になりました。
> valarrayに補助配列系のオブジェクトを『代入』するときは双方の長さ(要素数)が等しくないと未定義動作
なんという罠 orz
206:デフォルトの名無しさん
16/08/12 16:59:25.24 1Oj5kysc.net
>>199
車輪の再発明おつ
早い部類に入るソートアルゴリズムだね
207:デフォルトの名無しさん
16/08/12 17:19:26.18 1cmLpCrQ.net
>>199
ぱっと見だけど、バケットソートとかビンソートって呼ばれてるやつかな?
208:196
16/08/12 17:34:34.04 MLJoZofC.net
>>198 サイズが同じでないと未定義動作になるんか。
「大きい配列の代入は自動的に拡張、小さい配列の代入は後半に前の状態が残る」
だと誤解していたよ。危ない危ない。
209:デフォルトの名無しさん
16/08/13 21:22:30.92 6HOeIx46.net
>>199
アルゴリズムの教科書に全部載ってる。
バブルソートとクイックソートと、なんていうんだったっけ、
カウンティングソートとでも言うんだったかな。
この中ではいちばん速いね。最速に近いのでは。
ここに載ってないのはマージソートとヒープソートくらいかな。
クイックソートと同じくらいの速さだと思うけど。
210:デフォルトの名無しさん
16/08/13 21:41:16.48 6HOeIx46.net
ってこのプログラムでは、同じ数字が重複しないことを前提に作ってあるのか。
カウンティングとはいえないかもしれないけど変形ではあるね。
少し変形すれば、同じ数字が重複してもいけるようになる。
211:デフォルトの名無しさん
16/08/14 00:37:33.69 svhXjdBE.net
Allayって何かと思ったらArrayのことか
212:デフォルトの名無しさん
16/08/14 01:36:38.62 CLyKKjmV.net
きっとローマ字習いたての小学生位じゃね。
213:デフォルトの名無しさん
16/08/14 01:54:50.48 DQlYnAJX.net
gally 〜
214:デフォルトの名無しさん
16/08/14 03:15:55.52 J7BwzSzj.net
判った!オールayソートだ!
215:デフォルトの名無しさん
16/08/14 03:50:34.13 sDacwSZP.net
>>199
専門用語はわからないけど
整列?
ある特定の条件下のみ成立するのじゃない?
単純な並び替えなので高速なのは当たり前かも
216:デフォルトの名無しさん
16/08/14 04:06:14.51 sDacwSZP.net
>>199
う〜んうまく表現できないけど
新しいキーを登録するとき全キーの順位を更新後
小さい順番に並び替えただけ?
キーの順位更新コストと並び替えコストが爆発的に増えるアルゴリズムじゃないの?
217:デフォルトの名無しさん
16/08/14 07:13:05.24 aO2OCXAG.net
普通にバケットソートじゃないの?
LとRの区別が付いてない時点で普通に恥ずかしいが
218:デフォルトの名無しさん
16/08/16 19:17:18.67 C7Pqt2dG.net
割と変数名でやらかしてしまう綴り違い
219:デフォルトの名無しさん
16/08/17 05:50:38.84 +Cv7Zdkl.net
「配列の英語の綴りは allay じゃなくて array だぞ」
「あれー?」
220:デフォルトの名無しさん
16/08/17 07:18:31.50 KTsVTcKZ.net
>>213
あるあるネタだよね
roop とか Faile とか
221:デフォルトの名無しさん
16/08/17 08:41:11.19 rz4OYI8a.net
play pray
222:デフォルトの名無しさん
16/08/17 10:49:46.46 pHe6W3Xr.net
>>215
そんな奴おらんわ
223:デフォルトの名無しさん
16/08/17 12:32:57.99 tL95OhVn.net
中学時代に書いたコードは綴り間違いたまにあるけどそれ以上では皆無だわ
後で見ると使ってる動詞が微妙みたいなのはいつまでもあるけど
224:デフォルトの名無しさん
16/08/17 12:42:42.82 rz4OYI8a.net
>>218
1年前に自分が書いたコード見たら何だこれってのもあるからな
225:デフォルトの名無しさん
16/08/18 01:28:37.92 hvBEnlpa.net
烏をbrackbardって書いてあるソースなら見たことある
少し感動した
226:デフォルトの名無しさん
16/08/18 22:49:54.22 e9I4NFbF.net
>>216
遊ぶと祈る?
227:デフォルトの名無しさん
16/08/26 12:47:11.06 xzikXEHz.net
綴り間違いで別の変数が勝手に作られるクソ言語が滅びますように
228:デフォルトの名無しさん
16/08/27 08:32:55.84 N/suXJXB.net
ちゃんと宣言してるのに
定義されてない識別子です。というエラーが出ます
どうしたらよいでしょうか?
その変数を同じブロックの中では参照できましたが
同じクラスのメソッドの定義を書いてあるブロックの中ではこのエラーが出ます
どうしたらよいでしょうか
詰まってます
229:デフォルトの名無しさん
16/08/27 08:37:06.97 kuSTpJCD.net
>>223 の文章だけでは状況が想像できなかった。
エラーになるソースの断片を見せてくれればあるいは…。
230:デフォルトの名無しさん
16/08/27 08:43:24.13 mslVqKaF.net
>>223
>その変数を同じブロックの中では参照できましたが
?その変数を宣言した同じブロックの中では参照できましたが
宣言した場所と参照する場所の関係が不適切
単純なタイプミス
231:デフォルトの名無しさん
16/08/27 08:47:08.95 N/suXJXB.net
A::A
{
int i = 0;
function1(i);←ここはおっけ
}
A::B
{
function2(i);←エラーc2065
}
A::C
{
function3(i);←エラーc2065
}
となります
朝早くからレスありがとうございます
232:デフォルトの名無しさん
16/08/27 08:47:57.59 N/suXJXB.net
タイポではありません
233:デフォルトの名無しさん
16/08/27 08:48:54.72 SRaqh2Cf.net
>>223
void classA::func1() { int a; a = 0; }
void classA::func2() { a = 0; }
こうならfunc2でのエラーは当たり前
どっちにしろideoneあたりに最小構成でコード上げてみないとなんとも
234:デフォルトの名無しさん
16/08/27 08:50:38.56 SRaqh2Cf.net
>>226
class A {
int i;
A();
B();
C();
}
これでok
235:デフォルトの名無しさん
16/08/27 08:57:11.15 N/suXJXB.net
>>288
最悪そうするしかなさそうですね...
236:デフォルトの名無しさん
16/08/27 09:04:40.39 SRaqh2Cf.net
こういうもんなのw
237:デフォルトの名無しさん
16/08/27 09:05:04.69 SmFG8gRK.net
ク ク || プ //
ス ク ス | | │ //
/ ス | | ッ // ク ク ||. プ //
/ // ス ク ス _ | | │ //
/ ̄ ̄\ / ス ─ | | ッ //
/ _ノ .\ / //
| ( >)(<) ___
. | ⌒(__人__) ./ ⌒ ⌒\
| ` Y⌒l / (>) (<)\
. | . 人__ ヽ / ::::::⌒(__人__)⌒ \
ヽ }| | | ` Y⌒ l__ |
ヽ ノ、| | \ 人_ ヽ /
. /^l / / ,─l ヽ \
238:デフォルトの名無しさん
16/08/27 09:14:46.69 kVDlXYw3.net
今日はやけにおとなしいな
いつもの煽りはどうした
239:デフォルトの名無しさん
16/08/27 09:14:52.81 7VQA/4Rj.net
>>226
この板の初心者大賞はあなたに決定
240:デフォルトの名無しさん
16/08/27 09:16:15.22 sEPhZVC2.net
>>226
変数がクラス内で共有して使われるなら>>229の書き方
"c++ メンバ変数"でググれ
変数が関数単位で独立しているなら↓の書き方
以下のiはすべて別の領域に確保される
そして関数を抜けると破棄される
A::A()
{
int i = 0;
function1(i);
}
A::B()
{
int i = 0;
function2(i);
}
A::C()
{
int i = 0;
function3(i);
}
241:デフォルトの名無しさん
16/08/27 09:26:03.31 XihPAhCF.net
ブロックスコープの変数ですもんね。
242:デフォルトの名無しさん
16/08/27 10:05:56.94 H6wDFwtj.net
そもそも同じブロックに無いのにどうして同じだと思ったんだろうなぁ
243:デフォルトの名無しさん
16/08/27 10:17:01.66 sEPhZVC2.net
JavaScriptだとブロックスコープがないからvarやletなしで宣言された変数はグローバルになるらしいな
244:デフォルトの名無しさん
16/08/27 11:37:24.72 XihPAhCF.net
クラススコープと混同してるのかも
245:デフォルトの名無しさん
16/08/27 12:18:58.45 /AaPU2a9.net
char *(text[]) = {
"100", "200", "300"
};
これってchar text[3][4]と同じようにアクセスできるやん?おかしくない?
char *(text[3])なら「2文字 + \0」の1つの変数のポインタになりそうなもんなのに
なんで文字数が自動になって「X文字 + \0」の3つの変数になるん?
246:デフォルトの名無しさん
16/08/27 12:28:17.02 s3YfawhT.net
定義してるのが文字列の配列じゃなくて文字列ポインタの配列だからじゃない?
247:デフォルトの名無しさん
16/08/27 12:34:49.14 FXXHrfXG.net
↑日本語が不自由なアスペ
248:デフォルトの名無しさん
16/08/27 12:37:20.98 FXXHrfXG.net
>>240
>「2文字 + \0」の1つの変数のポインタ
それをCでは
char (*p)[2+1];
と書く
249:デフォルトの名無しさん
16/08/27 13:46:11.93 rmIxiT+h.net
>>240
括弧がついてるせいで惑わされてるのかもしれないが
>>241のいいたかったようにcharの配列の配列(2次元配列)じゃなくてchar*の配列だから
int i[] = {1, 2, 3}; // intの配列
char* p1[] = {
250:デフォルトの名無しさん
16/08/27 13:49:52.96 rmIxiT+h.net
途中で消えてるんであげなおし
>>240
括弧がついてるせいで惑わされてるのかもしれないが
>>241のいいたかったようにcharの配列の配列(2次元配列)じゃなくてchar*の配列だから
int i[] = {1, 2, 3}; // intの配列
char* p1[] = {”a”,”b”,”c”}; // char*の配列
char* (p2[]) = {”a”,”b”,”c”}; // 括弧で囲ってるけどp1と同じchar*bフ配列
251:デフャHルトの名無しbウん
16/08/27 14:11:46.55 /AaPU2a9.net
char*の配列なら
char text これがchar
char (*text) これがchar*
char (*text)[] これがchar*の配列
char text がchar
char (text[]) がchar配列
char *(text[]) がchar配列のポインタ
って感じに思う
252:デフォルトの名無しさん
16/08/27 14:57:04.59 kVDlXYw3.net
どうして「二次元配列と勘違いした」
と言う妄想を指摘されても改めないんだろうか文盲は
253:デフォルトの名無しさん
16/08/27 15:15:56.85 7VQA/4Rj.net
>>243
バカ
254:デフォルトの名無しさん
16/08/27 15:49:10.20 eIOf1V/M.net
URLリンク(ideone.com)
std::unique_ptr<int> p1;
// std::function<void()> fn1 = [p2 = std::move(p1)]() {};
auto fn2 = [p2 = std::move(p1)]() {};
コメント化してあるほうはエラーになります。
なぜですか?
255:デフォルトの名無しさん
16/08/27 15:50:20.12 /AaPU2a9.net
>>247
ちょっと何言ってるのかわからない
char (*text)[2] = { "001", "002" }; // 文字列数
char *(text[2]) = { "1" }; // 文字数 \0含む
ってイメージって話ね
256:デフォルトの名無しさん
16/08/27 17:46:14.28 cKK6tdTV.net
>>229
以下のところがよくわからない。
class A {
int i;
A();これはたぶんコンストラクタ。
B();これは何?関数?コンストラクタ?
C();これも。
}
257:デフォルトの名無しさん
16/08/27 17:57:49.43 Xo5fV+3n.net
>>249
20.9.11.2.1 [func.wrap.func.con] p7
> template<class F> function(F f);
> Requires: F shall be CopyConstructible.
258:デフォルトの名無しさん
16/08/27 18:05:12.23 eIOf1V/M.net
そうですか残念です。
どうもありがとう。
259:デフォルトの名無しさん
16/08/27 18:50:18.11 /AaPU2a9.net
>>251
そこは重要ではない
260:デフォルトの名無しさん
16/08/27 19:06:08.73 VBtD8f+V.net
>>251
>>226のクラス名をDとしてしまえば
D::A
{
int i = 0;
function1(i);←ここはおっけ
}
D::B
{
function2(i);←エラーc2065
}
D::C
{
function3(i);←エラーc2065
}
となるので>>229は
class D {
int i;
A();
B();
C();
}
となるだけでは
261:デフォルトの名無しさん
16/08/27 20:02:59.14 cKK6tdTV.net
見易さのために、いろいろ省略してあるという解釈をすることにした。
class D {
int i;
int A();
int B();
int C();
}
ってことだな。
262:デフォルトの名無しさん
16/08/28 09:02:09.65 mcF9PVw2.net
>>256
見易さじゃなく無くても普通は流れでわかる部分を省略
263:デフォルトの名無しさん
16/08/28 10:23:11.54 ERRoyT16.net
わからなかった人が居た事実は無視ですねw
クラススコープで宣言しないとダメって
わかってる人にしか伝わらない暗号だよなww
わからない人に向けた説明じゃない
264:デフォルトの名無しさん
16/08/28 11:31:06.41 mcF9PVw2.net
>>258
質問者>>230はわからない人か?
わかってるから問題無い
265:デフォルトの名無しさん
16/08/28 11:51:38.89 ERRoyT16.net
>>259
良かったですねたまたま>>230が理解できてw
そんな言い訳しても「普通は流れでわかる」が
伝わらなかった人がいた事実は変わりませんよww
266:デフォルトの名無しさん
16/08/28 12:01:29.46 mcF9PVw2.net
>>260
たまたまじゃないだろ
発端の>>223や>>226の書き方を見れば理解できるとわかる
267:デフォルトの名無しさん
16/08/28 12:14:28.11 ERRoyT16.net
>>261
いえいえ話をすり替えちゃって
質問者の拙い表現を真似した結果
流れでわからなかった人が出てしまった
事実は変わりませんよw
どこまでいっても「理解できるとわかる」は
あなたの「こうだったらいいな」でしかないのでww
268:デフォルトの名無しさん
16/08/28 12:22:26.40 mcF9PVw2.net
>>262
質問者自身が>>226で省略してる部分を省略しただけだからな
質問者がわかったならそれでいい
わからなかったのは外野だからどうでもいいし
お前もただケチつけたいだけの外野
おめでてーな
269:デフォルトの名無しさん
16/08/28 12:33:29.31 ABmxF0GC.net
いい質問だったと思いますよ。
@とAの違い。
class HOGE{
int i; @
f1(){
int i; A
・・・・
}
・・・
};
270:デフォルトの名無しさん
16/08/28 12:56:48.64 ERRoyT16.net
>>263
見苦しい人ですね
素直に「わからなかった?省略してわるかったな」
と>>256に言えばいいのに自分に非がないと
意固地に自己保身を続けるのはみっともないですw
>>256に噛みついておきながら挙げ句の果てには
「質問者がわかればいい」なんて逃げ出すなんてww
271:デフォルトの名無しさん
16/08/28 13:10:22.46 mcF9PVw2.net
>>265
引っ込みがつかなくなったのか?
>>258 > わからない人に向けた説明じゃない
と言っておきながら
質問者も同じ部分を省略のしているから理解できてるし問題無いと指摘すれば
話をすり替えってどっちがだよ
最初から質問者がわかってるから問題無いと言ってるだろ
>>257を見て噛み付いてるとかどんな妄想?
論点で突っ込めないなら黙っておいた方がいいぞ
272:デフォルトの名無しさん
16/08/28 13:58:37.59 Feey9nzY.net
自演はもう良いからヨソでやって
273:デフォルトの名無しさん
16/08/28 14:03:48.59 mcF9PVw2.net
>>267
違うわ
なんでそうなる
274:デフォルトの名無しさん
16/08/28 14:27:10.06 ERRoyT16.net
>>266
あなたは理解できなかった>>256に対して
「普通は流れでわかる」と言い放ったのですよ
言われた人からしたら「俺は普通じゃない」
になってしまいますw
それを主語は質問者に限定していた
なんてすり替えに他なりませんねww
今回だけ特別に()もう一度だけ言ってあげます
素直に「わからなかった?省略してわるかったな」
と>>256に言えばいいのに
275:デフォルトの名無しさん
16/08/28 14:47:20.79 mcF9PVw2.net
>>269
質問者に対しての回答なんだから主語は質問者なのは当たり前だろ
質問者のレスと見比べたら質問者じゃなくても普通はわかるしな
わからないなら質問者が何言ってるかすらわからないから論外
お前に何かデメリットでもあんのかよ
276:デフォルトの名無しさん
16/08/28 14:50:45.95 Feey9nzY.net
>>268
自演でなくこんなのに構う奴がいるわけないだろいい加減にしろ
277:デフォルトの名無しさん
16/08/28 14:58:41.58 mcF9PVw2.net
>>271
残念ながら自演じゃないんだよな
ワッチョイでもIPでも出せばいいのか
278:デフォルトの名無しさん
16/08/28 15:55:00.14 ERRoyT16.net
>>270
>主語は質問者なのは当たり前だろ
あなたは自然言語の能力が低いんですね納得しましたw
>>251の発言をした>>256に対して「普通は流れでわかる」
と言ったことを
「君は分からないかも知れないけど質問者は流れで分かる」
という意味だったというのはいくら何でも無理があります
だって>>256に対してもわかることを求める日本語ですから
でも自然言語スキルが低いならそうなって
しまうのも仕方ないですねwww
>質問者のレスと見比べたら質問者じゃなくても普通はわかるしな
あれー、話をループさせてますね
分からない人が実在して、論外ならスルーすればいいのに
あなたはその人にわざわざ「普通は流れでわかる」
と言い出したんですよ嫌がらせです?
279:デフォルトの名無しさん
16/08/28 16:08:13.50 mcF9PVw2.net
>>273
省略した理由を誤解してたから「見易さのためじゃなく質問者は省略してもわかるから」って言ってんだが
「君は分からないかも知れないけど」ってのはお前の妄想で付いた装飾
論点と関係無い突込みが増えてんぞ
最初お前が
> わからない人に向けた説明
と言っていた部分に対して「質問者はわかってるだろ」って話
わかるかな?
280:デフォルトの名無しさん
16/08/28 16:42:40.31 60yVMOKI.net
あーうっぜーこいつら
281:デフォルトの名無しさん
16/08/28 17:25:15.61 mcF9PVw2.net
ID変えるつもりはないからNGしといてくれ
282:デフォルトの名無しさん
16/08/28 17:48:36.17 ABmxF0GC.net
こんな時は日付が変るまで じっと我慢ですよ
283:デフォルトの名無しさん
16/08/28 17:49:28.89 ERRoyT16.net
>>274
>質問者は省略しても
その質問者への限定という書かれていない意図が
>>257のレスでは相手に伝わりえないと二度も言っているのですが
自然言語能力の低い人には無駄でしょうね
>最初お前が
> わからない人に向けた説明
(略)
>わかるかな?
また話をループさせるんですね
あなたは質問者に向けた回答を持ち出して
それを理解できなかった>>256に向かって
「普通は流れでわかる」と言ったから
ボクは僭越ながら物申したんですw
>>258の「わからない人」が質問者だと
思ってしまったあなたは本当に残念です
いずれにせよ原因はあなたが自然言語
を正しく
使えなかったからとわかったので
ここまでにしますw
284:デフォルトの名無しさん
16/08/28 18:51:50.91 mcF9PVw2.net
>>278
ややこしくしたいだけだろお前
>>256 > 見易さのために、いろいろ省略してあるという解釈をすることにした。
に対して
省略した理由
× 見易さ
○ 質問者には流れでわかる
って話だと何回言ったらいいんだ
暇潰しはできたか?宿題やれよ
285:デフォルトの名無しさん
16/08/28 18:56:59.03 nd9FhnVh.net
なんでいつも荒れてるの?
286:デフォルトの名無しさん
16/08/28 20:49:38.76 VK4fyJjM.net
このスレには一度した自分の発言を曲げてはならないという掟があるらしい
287:デフォルトの名無しさん
16/08/28 21:02:58.25 rpWzJfiX.net
>>256
わからなかった?>>229が適当に省略してわるかったよ
許してやってくれ、な?
288:デフォルトの名無しさん
16/08/29 07:54:39.69 25l6qL+D.net
>>282
>>229のアンカ先>>226も見ろ
どう見ても合わせてるだろ
むしろ>>223を理解して>>228のレスしてるしな
>>223を理解できなかった>>224-225だろこいつID:ERRoyT16
289:デフォルトの名無しさん
16/08/29 08:20:12.37 uxClxO+f.net
人じゃなくレスを参照したいから228を指したんだろう
荒らしは去れ
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
279日前に更新/250 KB
担当:undef