[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/25 06:12 / Filesize : 214 KB / Number-of Response : 1028
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part147



1 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 17:56:53.03 ID:uFDqtnkl.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**

321 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:19:14 ID:65HS6FKB.net]
やりたいことはスタックにあるvectorの早期解放なんだから
gotoもdo{}while(0)もラムダ式もいらない
単に{}で囲うだけでいい

322 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:20:27 ID:cLOUBKze.net]
だよなwwwwwwwwwwww

323 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:23:34 ID:Upzp+V6z.net]
↓do { } while(0)でこれできたっけ?
if (cond) { goto label1; }
 do {
  処理A
label1:
  処理B
 } while (0);

YES! gotoならできる!!
 if (cond) { goto label1; }
label2:
 処理A
label1:
 処理B
 goto label2;

324 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:28:09 ID:Upzp+V6z.net]
つか
do {
 処理A;
 if (cond) { break; }
 処理B;
 std::unique_ptr p(new Foo());
 処理C; // pを使用
} while (0);

みたいな腐り切った腐敗臭しかしないコードを書くぐらいなら
 std::unique_ptr p;
 {
  処理A;
  if (cond) { goto last; }
  処理B;
  p = std::unique_ptr(new Foo());
  処理C; // pを使用
 }
last:
 ;
と書くわ

Perl風に

325 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:30:23 ID:v/DZPeDP.net]
>>314
そんなことはお前ともう1名ほど除いて皆わかってる
そうじゃなくて特定の条件で早期に開放したい場合にどうするかだよ

>>315
味方が現れてウレションかよw

326 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:30:23 ID:cLOUBKze.net]
ID:0qsbj5e出てこいオラ

327 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:34:58 ID:cLOUBKze.net]
ID:0qsbj5e6 出てこい

328 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:42:46 ID:65HS6FKB.net]
>>318
auto v = std::make_unique<std::vector<Hoge>>(...);
...
if(特定条件){
v.reset();
}

これだけの話では?

329 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:45:43.25 ID:cLOUBKze.net]
そうそう
兆くだらねえ話だ(わざと誤字



330 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:47:11.24 ID:cLOUBKze.net]
goto過敏症のアホどもが少しでも目を醒ましてくれるといいな

331 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:49:54.58 ID:v/DZPeDP.net]
>>273
から読み直して
空moveが確実だけど質問者がそれを場当たり的と生意気言ったことから話が盛り上がるw

332 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:51:28.17 ID:v/DZPeDP.net]
>>323
この場合gotoは何の解にもなっていないことにそろそろ気づいた方がいいよ

333 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:53:26.94 ID:v/DZPeDP.net]
>>321
>>324 を読んでね

334 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 21:59:36.19 ID:0qsbj5e6.net]
RAII対応してないから無理矢理goto出来るようにした糞コード上げられてもああ糞ですねと言うしかないんだが。
内部が複雑になってきたらその度にブロック外に変数追加して、変数の内容の初期化は必要に応じてって書き方を続けるつもりなんかね

335 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 22:27:52 ID:cLOUBKze.net]
>>325
gotoが何かの解になったらいいの?wwwwwwww

336 名前:デフォルトの名無しさん mailto:sage [2020/01/18(土) 22:28:06 ID:4nVoSga0.net]
>>304
そうなんだっけ?

337 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 00:26:12.30 ID:M/ehGL7C.net]
やっぱこういうコードは一度書いてみたいよな
try {
label:
 何かの処理;
} catch (Exception ex) {
 goto label;
}

338 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 00:32:09.37 ID:M/ehGL7C.net]
gotoを使うと糞、と言う香具師は多いが
goto以外の構文も大概なことがある
↓これとか

EnterCriticalSection(&csec);
{
 if (エラー条件成立) {
  LeaveCriticalSection(&csec);
  throw "*** ERR ***";
 }
 何かの処理; 
}
LeaveCriticalSection(&csec);

一体どうすれば…orz

339 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 00:36:14.30 ID:M/ehGL7C.net]
いやまあテストラクトされるときにLeaveCriticalSection()するような
AutoLockオブジェクトを使えば済むっていやー済むが
裏返せばgoto以外の構文も糞製造機であることにはかわりわない!



340 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 00:38:55.96 ID:ocqIlbpk.net]
それは構文が糞なんじゃなくてリソース管理が糞なだけ

341 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 01:24:22.15 ID:PgEzQeWd.net]
auto lockなんてむしろ使ってなかったらPRでリジェクトされる

342 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 06:28:34 ID:6oeBvQPN.net]
gotoの何が悪いのかを端的に表すたった一言が出てこない教条主義は物笑いの種

343 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 07:19:17.26 ID:M/ehGL7C.net]
誰にも迷惑がかからないgotoの例:

 for (a = 0; a < 2; a++) {
  for (b = 0; b < 2; b++) {
   for (c = 0; c < 2; c++) {
    ....
     for (zaaa = 0; zaaa < 2; zaaa++) {
      処理A
      if (何かの条件) { goto last; }
      処理B
     }
    ...
   }
  }
 }
last:
 ;

344 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 07:24:20.07 ID:M/ehGL7C.net]
>>334
たまたまLeaveCriticalSection()はエラーを返さないが
エラーを生じるブツだったらどうすんじゃ

まあエラー通知先があれば良いのでやりようはあるが
加速度的に手が込んだコードが必要になって全体が糞化していくんじゃ!

345 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 07:35:30.18 ID:ilIPQsua.net]
そもそもそのgotoを書きたくなるくらい深くネストしている時点でよくない説

346 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 08:03:07 ID:Wel1D6/w.net]
>>338
対象とするデータによっては単純に多重ループで処理するのがもっとも自然でシンプルなケースもあるだろう。
無条件に「ネストしたループ(・A・)イクナイ!!」と言うのも教条主義じゃね?

347 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 08:05:11 ID:6oeBvQPN.net]
教条主義というよりただのバカ

348 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 08:08:17 ID:D5W6f6uH.net]
gotoの使い方くらい知っておいた方が良いかと

349 名前:デフォルトの名無しさん [2020/01/19(日) 08:51:50 ID:2MN/c8bt.net]
gotoにせよthrowにせよ、goto/throwの発生元が分からないのが受身になる側として辛い。
この点は、スタック情報へのアクセスが言語仕様として認められているJava/C#/Perl/Pythonに優位がある。



350 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 08:54:43 ID:M/ehGL7C.net]
throwの発生元は例外オブジェクトに情報を持たせれば良いじゃん?
gotoのジャンプ元は変数に情報を持たせれば良いじゃん??

351 名前:デフォルトの名無しさん [2020/01/19(日) 09:02:38 ID:2MN/c8bt.net]
>>343
goto/throw発生元がバイナリで配布されている場合は、コードを書き換えられない。
クラス設計でやたらとメンバ変数をprivateにされると、クラスを利用する側はメンバ変数を古典的プリントデバッグできなくて難儀する。

352 名前:デフォルトの名無しさん [2020/01/19(日) 09:04:12 ID:2MN/c8bt.net]
C++のprivate属性は厳しすぎ。readonlyアクセスできる属性があってもいいと思うんだ。

353 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 09:11:24 ID:M/ehGL7C.net]
>>344
バイナリ配布のブツの例外発生元を何でコードで知りたいのかがわからん…
アドレスがわかったところでソースが無いわけやし……
何事かを言わんとするための想定に無理が有るのでは…

354 名前:デフォルトの名無しさん [2020/01/19(日) 09:12:59 ID:2MN/c8bt.net]
タイミング依存の不具合を追跡する必要に迫られると、当然ながら対話デバッグはできない。
C++のprivate変数が不具合に関与しているとわかってもランタイムで値を見れないのは辛い。
他人様の作ったC++クラスヘッダーを一時的に書き換えてコンパイルする羽目に。

355 名前:デフォルトの名無しさん [2020/01/19(日) 09:17:35 ID:2MN/c8bt.net]
>>346
例外が吐かれた後にできることなんてほとんどなくてもスタックをダンプできるだけでかなり助かる。
特に自分が作ったわけではないレイヤーでthrowされた時には、スタック情報が役立つ。

356 名前:デフォルトの名無しさん [2020/01/19(日) 09:20:25 ID:2MN/c8bt.net]
公式がデバッグシンボルを配布するご時世なのに、C++のスタック仕様はそれについていけていない。
デバッガを介することなくスタックをダンプできる手段が制約されすぎ。

357 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 10:49:09 ID:CSTVsvTH.net]
gotoはRAIIと相性が悪いってのが端的だろ

これはgotoが悪いと言うよりc++の言語仕様上のgotoの扱いが悪いって話

constexprで使えないとか規格が新しくなる度に不都合が増えていくよ

358 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 10:57:40 ID:RfLx+x9F.net]
gotoの使い方くらい知っておいた方が良いかと

359 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:07:08.87 ID:fzpRtoDi.net]
>>350
相性悪い?



360 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:07:41.05 ID:CSTVsvTH.net]
文字列パーサー内とかでの状態遷移に使うは推奨する

その他でのgotoは代替手段があるし、そっちの方が言語サポート良いからgoto使うのはバカのやること

361 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:12:09.60 ID:CSTVsvTH.net]
まあ不遇な原因はgotoが自由すぎて前にも後ろにも飛べるせいだろうね
変数のデストラクタを呼ぶべきかどうかフラグ管理でもしないとコンパイラが判断できなくなる。

goto使うならその自由さが必要な場面でこそ使うべきなんだよ

362 名前:デフォルトの名無しさん [2020/01/19(日) 11:18:58.21 ID:2MN/c8bt.net]
>>354
プログラミング言語の世界では、前や後ろという表現は直観的にわかりにくい。
前や後ろは相対的なものであり、バックしているイテレータにとっては前はバックなのだ。
上と下なら直観的にわかるだろう。

363 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:21:16.66 ID:CSTVsvTH.net]
用語としては前後で統一されているような

364 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:22:22.50 ID:RfLx+x9F.net]
gotoの使い方を知らない初心者がこのスレにいるってのが不思議

365 名前:デフォルトの名無しさん [2020/01/19(日) 11:27:05.68 ID:2MN/c8bt.net]
[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita
https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6

366 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:29:47.11 ID:6oeBvQPN.net]
>>357
誤魔化さない説明が

367 名前:ちゃんとできるやつがずいぶん少ないという、残念な状況が今の日本だ []
[ここ壊れてます]

368 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:38:04.97 ID:RfLx+x9F.net]
わざわざ複雑にしてまでgotoを避ける
って宗教だよな

使いどころで使う
それだけ

369 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 11:42:59.02 ID:ZzFAG3/g.net]
いうて必要になったことないや



370 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 12:30:11.44 ID:L2mlhsAt.net]
別にgoto使っても使わなくても馬鹿が書けば複雑なコードになるだろ。
そういう問題じゃない。
そもそもc++の標準ライブラリが例外投げる時点でgotoとの相性は最悪だよ。
一番末端の関数で、副作用もないようなもの以外使えんわ。

371 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 12:36:07.26 ID:PgEzQeWd.net]
gotoおじさんはたぶん例外安全性という概念をわかってない

372 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 14:43:36 ID:6jfPBIzz.net]
>>363
例外安全の定義が難しいのですが、gotoを使っても例外安全を保障することはできると思うのですが、いかがでしょうか。

373 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:06:56.67 ID:PgEzQeWd.net]
>>364
c++の標準ライブラリに関して例外安全とは何かは定義されてる
できるできないで言えばgotoかつ例外安全はそりゃできるでしょうよ
まずgoto関係なしに例外安全が相当大変であることを理解してから出直してくれ
そうじゃなきゃRAII、autoなんとかmakeなんとかの有難みも理解できてないのよ

374 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:08:40.81 ID:RfLx+x9F.net]
話題のすり替え

375 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:16:49.04 ID:PgEzQeWd.net]
>>366
話題を勘違いしてるのはお前だよ
お前は単にbreakでスコープの脱出することに対してgotoの方が簡潔と言ってるんだろう
そういう場合があるのは同意するけど今回の話題はそれじゃない

スコープの脱出になってるのはRAIIでリソースを安全に開放する前提だからだ
だからお前が言うべきはスコープをなくしてgotoを使うというなら
合わせてリソースをどのように安全に開放するかを説明しないといけない
場当たり的でない方法でね

そこをまったく説明できない以上お前はgotoおじさんと呼ばれ続ける

376 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:20:52.99 ID:fzpRtoDi.net]
>スコープをなくしてgotoを使う

なんか言ってることが変だと思ったらこんな条件付けてたのか。ブロックスコープ使えばいいじゃん。

377 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:26:55.90 ID:RfLx+x9F.net]
スコープを無くしてgotoで解放?
なんじゃそりゃ?

スコープを抜けないと解放されないぞ

378 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:27:43.53 ID:PgEzQeWd.net]
断わっておくけど
>>295 に対してgotoおじさんが >>297 と言ったのが発端
後出しはしていない
ちなみに295を書いたのはおれではない

379 名前:295 [2020/01/19(日) 15:31:10.41 ID:2MN/c8bt.net]
どんな劣悪な環境でも動く do{ } while(0); こそ絶対正義。



380 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:33:51.15 ID:RfLx+x9F.net]
>>295
do ループを抜けたすぐ下で資源を解放
って書いてあるように見えるけど

381 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:34:25.99 ID:RfLx+x9F.net]
>>370の勘違いってことでいいのかな?

382 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 15:42:01 ID:PgEzQeWd.net]
>>372
ああ確かに >>295 に対してってのは語弊があったかな
ID:cLOUBKze の発言を追ってみて
>>303
とかね
gotoおじさんかと思ったら別人なのね

383 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 17:03:31 ID:6jfPBIzz.net]
>>365
本来の「例外安全」の定義はもっと広い意味なのですが、あなたは、throwやcatchなどの「例外」が起きたときでもnewされたオブジェクトの削除などを行うという定義を採用されているようです。

break文を用いずにgoto文でブロックを脱出した場合でもオブジェクトは自動解放されるのをご存知ですか?

384 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 17:07:28 ID:PgEzQeWd.net]
>>375
自分は理解しているって言いたいわけね
じゃあさ >>273 のお題に対してgotoを使ったエレガントな方法を書いて
おれは思いつかないね
よろしく

385 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 17:11:06.93 ID:4SQs66uE.net]
そもそも一番のカスはこいつ >>276 >>286

386 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 17:42:21 ID:fzpRtoDi.net]
>>370

>>295に対して>>303が

{


387 名前: goto label;
}
label:

でいいんじゃないかってことかと。
逆にどう解釈してRAIIとか例外安全とか持ち出したのか気になる。
[]
[ここ壊れてます]

388 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 18:24:30 ID:6oeBvQPN.net]
論点を増やそうとするのは苦しいやつの習性だね

389 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 18:46:40 ID:PgEzQeWd.net]
>>378
それだとdo-whileと変わんないだろ
gotoおじさんの論点てそれか?
人の事クソバカ言ってるわりに何の優位性があるのかわからんな



390 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 18:52:29 ID:6oeBvQPN.net]
そうだよ、変わんないよ
複合文だけでできることになんでわざわざdoなんて面倒くせえもん使わなきゃいけねえんだよ

391 名前:デフォルトの名無しさん [2020/01/19(日) 18:52:32 ID:PM2cmccN.net]
Rust使えばすべて解決。

392 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 18:53:23 ID:6oeBvQPN.net]
まさかとは思うがブレースを開くのにdoだかforだか何らかのキーワードが必要とでも思ってたか?

393 名前:デフォルトの名無しさん [2020/01/19(日) 18:56:46 ID:PM2cmccN.net]
俺は何の実績もないおまえの言うことより、あわしろいくや氏を信じるけどな。

394 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 18:57:26 ID:yjllCGTd.net]
>>378
噂のgotoおじさまもさすがにこのコードがいいなんて言わないでしょ

395 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 18:59:17 ID:6oeBvQPN.net]
>>384
ブレースを開くのにキーワードが必要か否かに実績は関係ない
他人のネームバリューにすがるしかなくなったか?

396 名前:デフォルトの名無しさん [2020/01/19(日) 19:00:40 ID:PM2cmccN.net]
>>386
ネームバリューは関係ないんだよ。
あわしろいくや氏は信用できる。
おまえは信用できない。

397 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 19:01:36 ID:4SQs66uE.net]
>>387
俺はお前のあわしろいくや氏は信用できるという言葉が信用できない

398 名前:デフォルトの名無しさん [2020/01/19(日) 19:02:52 ID:PM2cmccN.net]
>>388
俺のことは信用しなくていい。
あわしろいくや氏を信じろ。

399 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 19:15:30 ID:ocqIlbpk.net]
売名乙



400 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 19:29:04.71 ID:yQO+Nq01.net]
まさか do while 構文が論点だと思ってたんかな?
まあ本当はgotoを推す正当性が全くなくてごまかしてるんだろうけれど。
てかgotoと例外安全性はかなり綿密に絡んだ話だろ。誤魔化しすぎだわ。

401 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 19:45:18 ID:6oeBvQPN.net]
>>387
ヒゲ生やした教祖様のために死刑になった信者と同じだなw

402 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 19:46:34 ID:fzpRtoDi.net]
>>380
そのくらいしか思いつかなかったが、>>297はその程度の主張だったんじゃないの?
じゃあどういう主張しているとID:PgEzQeWdは解釈していたのかな。そっちが気になる。

403 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 19:46:39 ID:6oeBvQPN.net]
> かなり綿密に絡んだ話だろ

誤魔化しすぎというブーメランが脳天に突き刺さってるぞw

404 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 19:54:00 ID:yQO+Nq01.net]
なるほど。。こりゃ話しても無駄だな。

405 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 20:25:44 ID:M/ehGL7C.net]
gotoと例外安全性がどう絡むのかわからんボスケテ;

406 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:06:11 ID:fzpRtoDi.net]
話しても無駄以前に、結局gotoと例外安全がどう関係するのか一言も出てこなかったな。

407 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:10:50 ID:CSTVsvTH.net]
RAIIとgotoは混ぜられないだろ

408 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:13:01 ID:AinWVopR.net]
そらgotoでリソース開放ルーチンに飛ぶようなCスタイルのプログラム書くと
例外飛んできたときに死ぬって話でしょ
(いくらC++にfinallyが無いからってgotoでリソース開放ルーチンに飛ぶのはダメ)
ただし元々の質問には関係ない話なんだがな

ところでC++にfinallyが無いのはちょっと良くないよね
今となってはラムダで自作できるようになったからいいけど

409 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:16:51 ID:fzpRtoDi.net]
>>398
その「混ぜる」って具体的にはどういうことを言ってるんだろう。



410 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:24:53 ID:AinWVopR.net]
基本的に break や return も生き先の決まった goto なので
余ほど変な使い方をしない限りRAIIと goto を混ぜれないって事はないよなぁ
むしろ RAII を使わないで goto でC系のリソース開放をしていた場合にハマるって話では

まぁでもこれは
do{
  if( error ) break;
}while(0);
//開放処理
return;
でも同じことだし、元の質問には関係ないんだが

411 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:34:33 ID:RfLx+x9F.net]
まだやってんのか

>>377
それ

412 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:40:42 ID:RfLx+x9F.net]
do {
if(...) break;
} while (0);

よりは

{
if (...) goto label;
}
label:

の方が良い

という

413 名前:モ見に賛成

>>303ではないけど
[]
[ここ壊れてます]

414 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:44:50 ID:RfLx+x9F.net]
まあどっちでも大差ないけど

415 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:47:25.68 ID:RfLx+x9F.net]
{
{
if (...) goto label;
}
}
label:

これはbreakじゃ無理

416 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:57:15 ID:RfLx+x9F.net]
{
switch (...)
{
case ...: goto label;
}
}
label:

これも無理

417 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:11:05 ID:ByUy1Erg.net]
while(0)とか意味不明なコードよりgotoでスコープ抜ける方がはるかにシンプルだわな

418 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:15:20 ID:RfLx+x9F.net]
一応 do while(0) の使い方も覚えておいた方が良い
他人のコードを見たりマクロで使ったり
する事もあるだろうから

419 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:17:28 ID:JMAoH3/H.net]
普段のdo whileもwhile(0)って書くなど弊害が出るのでやめた方がいい



420 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:19:27 ID:ByUy1Erg.net]
ループするつもりもないのにループの構文使うのは悪手だと思う

421 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:27:26 ID:RfLx+x9F.net]
>>409
日本語で






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<214KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef