C++相談室 part160

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/04/15(金) 08:39:32.42ID:WMzvufu2
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1645239402/
2022/04/22(金) 15:19:58.07ID:0v5EEVUK
実装、処理系について話さないと決めたのなら話さなけりゃいいのに
2022/04/22(金) 15:33:53.70ID:vco82k5C
元からOSやコンパイラの違いは関係ない話みたいよ

> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話の始まり

だからSEHとか無関係なものを持ち出した人がちょっとおかしいわね
2022/04/22(金) 15:36:33.95ID:fMqKBQE/
>>201
標準でない話をするなというのがおまえさんの主張だったはず
それともMSが推奨するからという論点に変えなきゃ都合が悪くなったのか?
2022/04/22(金) 19:27:41.15ID:muq3Mg9B
>>204
なんか日本語不自由だな。
C++でも標準でもMS推奨ですら無いスレ違いの話に粘着するなよ。
2022/04/22(金) 19:48:46.17ID:+Ag0wcTG
推奨法と内部の実装は別の話では??
2022/04/22(金) 19:55:49.60ID:/DhmZAjz
内部の実装とやらでSEH使っている妄想はどうでもいいやろ
どのみちそれ自体の実装はどうなっているの?という話になる
魔法の方法なんて無いのだから途中の各関数毎にデストラクタを実行しながらスタック巻き戻す以外に手は無い
2022/04/22(金) 20:19:32.94ID:g3buRrxh
ここもレベルが下がったね…
2022/04/22(金) 20:49:34.04ID:Hnq97RMZ
         / ̄ ̄ ̄ ̄ ̄\
          |  おまえらも  |
   ∩_∩  |          .|
  (´ー`) <   暇な奴ら  .|
  (   )  |           .|
   | | |   |  だなぁ     |
  (___)__)   \_____/
210デフォルトの名無しさん
垢版 |
2022/04/22(金) 21:23:32.68ID:Y1J+20vl
>>205
ISO/IEC14882から一歩たりとも出るなと言う主張と
C++に関係ある話ならいいじゃんという主張は
平行線だな

勝手に言ってれば? 誰もおまえの鶴の一声に反応しねえけどw
2022/04/22(金) 21:29:04.26ID:5k7+8+kc
持ち出すことで意味があるならばもちろん構わないと思うけど
この今回の件でSEHを持ち出すことに意味あるのかな

> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話
2022/04/22(金) 21:45:02.53ID:wri6W8iQ
>>210
そんな話はしていない。

SEHはC++でも標準でも無いWindowsローカルのプロプラ技術で、更には当のMSですらC++で使うことを推奨していないようなものなのに、「C++に関係ある話」とか言って無能を晒すなよ。
213デフォルトの名無しさん
垢版 |
2022/04/22(金) 21:52:01.01ID:Y1J+20vl
>>212
MSはC++で使うことを推奨していないんだよな?
C++で使うことをw

関係ある話じゃんwww
2022/04/22(金) 22:04:57.79ID:86QhKiKT
>>213
ばかなことはやめて建設的に行こうせ
元の>>211の議論でSEHを持ち出すことで何か有意義な展開が有るのか否か
2022/04/22(金) 22:11:14.70ID:BJPJNuGw
司会者を無視して議論の方向性を勝手に設定するというのが建設的じゃないんだよ。
2022/04/22(金) 22:13:35.43ID:h+Fap4CC
そもそもSEHはC言語で使うためのものだし...

構造化例外処理 (SEH) は、ハードウェア障害などの特定の例外コードの状況を適切に処理するための、C に対する Microsoft の拡張機能です。
https://docs.microsoft.com/ja-jp/cpp/cpp/structured-exception-handling-c-cpp?view=msvc-170
2022/04/22(金) 22:15:13.75ID:BJPJNuGw
CライクなVisual C++でもSEHを使えるよ。
2022/04/22(金) 22:16:17.57ID:wri6W8iQ
>>213
「MSはSEHをC++で使うことを推奨していない」みたいなクソを「C++と関係ある話」として話したいのか?
意味不明なことを言って無能を晒すなよ。
2022/04/22(金) 22:23:11.84ID:BJPJNuGw
「「日本政府は関西弁を国語で使うことを推奨していない」みたいな関西弁を「日本語と関係ある話」として話したいのか?
意味不明なことを言って無能を晒すなよ」

関西弁は日本語と関係あります。
関西弁をバリバリ使ってる現場はあります。
C++でもSEHをバリバリ使ってる現場はあります。
それは普通じゃない? 特殊環境を許容しない偏屈な野郎ですか?
議論を避けたいもぐりの詭弁ですね。
2022/04/22(金) 22:25:30.56ID:a+ReXgZI
例外の有益性云々よりも、会社ではその環境によっては使わないほうが無難
既存のプロジェクトでしか、ソースを触れなくて
hello worldすらかけない奴なんているし

この前もちょっと質問受けたから、サンプルを書いて送ったら、
これどうやってビルドするの?から始まった・・・

そんな奴に例外がどうとか言ってもな〜
2022/04/22(金) 22:27:28.43ID:KvTzeQ4l
>>211
例外の方がコストが高いしハンドリングもしにくいので例外の方が完敗との流れだった
そこへ意味なくSEHを持ってきても議論も結論も何ら変わらないのではないか
2022/04/22(金) 22:29:30.61ID:BJPJNuGw
https://github.com/katahiromz/Hello/blob/main/hello16/hello16.cpp

ほら見ろよ。モグリ。C++の拡張子.cppでSEHをバリバリ使ってるぜ。
2022/04/22(金) 22:34:27.64ID:qbUdPk38
>>222
main()しかないコードを唐突に持ち出してきて頭大丈夫かね??
コード読めない人?
2022/04/22(金) 22:37:06.57ID:wri6W8iQ
>>219
なら>>214に関連した話をしろよ。
SEHを持ち出すことで、>>211についてどういう有意義な話ができるのか?

SEHについては今までC++と関係の無いクソみたいな話しか繰り返していないだろ。
2022/04/22(金) 22:38:25.06ID:BJPJNuGw
>>223
貴様にもわかるよう、カンタンな例示をしたまでだ。
反論できなくなると人格攻撃か。業界全部を見てきたように「C++ではSEHは使えない。関係ない」なんて言うなよ。
2022/04/22(金) 22:41:57.59ID:WSHOJJH7
マイクロソフト公式で使わないことを推奨しているのに
蟻人間とかいう物体はそれを理解できないのかしら
2022/04/22(金) 22:43:24.19ID:BJPJNuGw
>>226
アホ。それは一般ユーザ向けの話で、OS内部では死ぬほど使われてるぜ。
2022/04/22(金) 22:48:37.18ID:Iw7UiXr/
今回の件でSEHを取り上げることに意味があるのかね?

> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話
2022/04/22(金) 22:50:11.36ID:BJPJNuGw
>>228
その議論は「実測しろ」で済む話。
2022/04/22(金) 22:52:46.51ID:BJPJNuGw
実装の分析を放棄するなら、実測しかないじゃねーか。
2022/04/22(金) 22:53:00.68ID:+MX6gHfh
>>229
あんさんアホなんやな
何をどうやって実測しまんねん
2022/04/22(金) 22:56:26.62ID:gE/jtm5P
例外機構はコストかかるしtry catchで扱いにくいから
最近の言語GoやRustなどではtry catchを廃止しちゃったほどだよ
2022/04/22(金) 22:58:31.59ID:BJPJNuGw
>>231
そんなん当たり前。世界中のパソコンを一箇所集めて、例外を使ってるすべてのコードをGitHubからダウンロードして、全コンパイラで試すと、一般的な答えが出るだろう。

だから具体的な環境と具体的なコードがないと議論自体が無意味だろう。
2022/04/22(金) 23:14:29.58ID:dPkl4IXq
実測なんかしなくてもtry/catchの準備が入る例外の方が遅いのは分かりきった話
2022/04/22(金) 23:14:59.45ID:BJPJNuGw
「男は卑怯」とか「血液型A型はまじめ」とか、統計上の母集団も不明なものを一般化して議論するのははっきり言ってめんどい。

一般化バカなんじゃねーの?

もっと具体的なこと。花を買うなどという具体的な処理を考えたら、そのコストの程度もわかるというもの。
2022/04/22(金) 23:17:04.04ID:hyDwnnZt
>>229
議論の仕方を知らない餓鬼かよ。

SEHを持ち出したのは>>124で、それに対して>>131という反論が来ているんだから、「SEHはC++例外の議論に有意義」と主張するならまず>131に対して反証しろよ。
それを無視して>>229とか>>233みたいな誤魔化しをするやつは、ろくに説明できない無能か相手を騙そうとする詐欺師のどちらかとしか言えんわ。

SEHはNGワード指定したほうが良さそうかね。
2022/04/22(金) 23:21:40.20ID:BJPJNuGw
C++例外がSEなんちゃらで実装されていたこともあった。概念としてはC++例外とSEなんちゃらは別物だが、実装としては排他的ではない。
2022/04/22(金) 23:35:03.38ID:7/N/KhH6
>>237
ソースを出せ
そもそもthrowを投げてcatchする仕組みにMicrosoftの独自拡張など不要
他の様々なOSではそんなものがなくても実装されて動いている
2022/04/22(金) 23:37:23.52ID:BJPJNuGw
例外にオーバーヘッドがあって遅いのはわかってる。アセンブリと実測から明らかだ。
2022/04/22(金) 23:41:51.93ID:qu0GkJrX
>>228
そのケースは明らかに例外を使わないほうが良い
一般的にも例外は可能な限り使わないこと
2022/04/22(金) 23:45:15.50ID:BJPJNuGw
>>238
ソース。
https://docs.microsoft.com/ja-jp/cpp/cpp/errors-and-exception-handling-modern-cpp?view=msvc-170
>Microsoft C++ コンパイラ (MSVC) では、C++ 例外が SEH 用に実装されています。
2022/04/22(金) 23:47:28.49ID:a+ReXgZI
msvcって使ってるところあるの?
2022/04/22(金) 23:53:29.79ID:BXakpDUE
>>241
SEHで実装されているとは、書いてないじゃん
2022/04/23(土) 00:07:15.99ID:IwDNjbNY
>>243
https://twitter.com/kekyo2/status/1429983729062092810
MSVCのソースはハッキングしないとわからん。
https://twitter.com/5chan_nel (5ch newer account)
2022/04/23(土) 00:13:13.27ID:IwDNjbNY
>>242
MSVCは現在のVisual C++のコンパイラと同じだよ。メチャクチャ使われてるよ。
2022/04/23(土) 00:15:14.42ID:MPqhbUj7
結局SEHで実装されているソース無し
2022/04/23(土) 00:16:54.58ID:IwDNjbNY
>>246
RaiseException関数はSEH機構の一部だから。
2022/04/23(土) 00:20:14.06ID:pT174lS4
>>241
それ /EHa があるよって話じゃね?
2022/04/23(土) 00:38:44.27ID:xfOxaVue
最近QZみないな
り地域に帰ったのか?
2022/04/23(土) 01:24:18.22ID:SYxYtQka
https://docs.microsoft.com/ja-jp/cpp/build/exception-handling-x64?view=msvc-170

これがSEHと同一のものであるかどうかは知りませんが
2022/04/23(土) 04:08:45.81ID:9ogfm+bK
>>234
「try/catchの準備が入る」なんて実装はもう廃れて最近のコンパイラには当てはまらないかと。
252デフォルトの名無しさん
垢版 |
2022/04/23(土) 06:09:11.45ID:dPWgl1lf
>>214
おまえさん個人にとって有意義でなくても
C++におけるSEHの話をしている人にとっては有意義なんだよ
だから話すんだよ

自分が入れない話だからって勝手に有意義かどうか決めんな
自分が入れない話だからって勝手に有意義かどうか決めんな
自分が入れない話だからって勝手に有意義かどうか決めんな
2022/04/23(土) 06:15:24.18ID:nWwnCTH/
キャッチオール!!
2022/04/23(土) 10:39:59.87ID:8yvdC+t8
SEHはマイクロソフトがC言語で例外を扱えるように独自拡張したもの
例外機構のあるC++では当然不要
だからマイクロソフトもC++ではSEHを使わないようにと公式に推奨している
ここC++スレでSEHを持ち出す人はバカ
2022/04/23(土) 10:49:10.48ID:PaneGw8k
>>254
お前がバカ
2022/04/23(土) 11:06:26.27ID:BMKo0y1z
まだsehの話ししてんかよ
ヤフーニュース見てみろよ、大変なことが起きているのに
おまえら暇だな
2022/04/23(土) 11:12:38.87ID:AdmKZSgb
>>256
どうせくだらんニュースばかり
毎日細かく追うのは無駄でアホ
2022/04/23(土) 11:27:56.93ID:t0MIUzKt
>>256
論点のすり替えすんなよ
頭わるいぞ
2022/04/23(土) 11:28:12.87ID:F6Lb3Bw6
荒れていますね、理想の雰囲気です…満足、満足
2022/04/23(土) 11:31:25.45ID:nWwnCTH/
日本最大のポータルサイトYahoo! JAPANのトップページのトップニュースがウクライナの前大統領ポロシェンコ氏の単独インタビューというご時世
2022/04/23(土) 11:32:03.41ID:Q6AAdSV9
>>259
不自然な登場の仕方のQZのキターwwww
お前が満足するということはム板にとっては好ましくない事態が起きてるってことだな
2022/04/23(土) 11:39:47.13ID:mFywOFhI
処理系の話禁止おじさんには狂気を感じました
2022/04/23(土) 11:41:12.76ID:BMKo0y1z
Baka bakas[300][1000][1000];

とかやるバカがいる会社なんかじゃ、例外云々の議論しても不毛だろ
2022/04/23(土) 11:44:49.33ID:TiL0ZOsp
こんなスレでヤフーニュースw
SEH持ち出すバカと同類やな
2022/04/23(土) 12:37:11.26ID:nWwnCTH/
Yahoo! JAPANトップページスクショ
https://pbs.twimg.com/media/FQ_8EFnUcAA9hjV?format=jpg&;name=large
2022/04/23(土) 14:35:57.34ID:BMKo0y1z
さとみロストで世間は大騒ぎだぜ
2022/04/23(土) 14:40:10.04ID:aTgXpsGk
>>264
いやSEHはまだプログラムの話の範囲内だけど
ヤフーニュースの話をするのは完全なアホ
2022/04/23(土) 18:29:38.10ID:51eUfy6p
Win32 C/C++だとSEHじゃないとキャッチできない例外もある。
2022/04/23(土) 18:35:44.41ID:CPVvM2UX
>>268
そんな欠陥商品の話をされてもねえ
C++の問題ではなく欠陥商品の問題
2022/04/23(土) 18:43:16.03ID:51eUfy6p
>>269
ここは匿名掲示板だから許されるけど、実名だったら社会からボコボコにされるよ。気を付けようね。
2022/04/23(土) 18:51:11.58ID:Jl8YckOx
じつにトライしてますね
2022/04/23(土) 19:15:23.82ID:51eUfy6p
CIAが最高レベルに指定する「ハッキングマニュアル」にアクセスできる国内外の攻撃者たちが匿名でソーシャルメディアを徘徊し、ターゲットを探している。生き残りたいならターゲットにならないことが肝要だ。
2022/04/23(土) 19:20:12.83ID:rmv7gLku
でも最新版ではC++の例外で正規に対応できてるんでしょ
ならば当時はある種の欠陥だったとも言えるのでは
2022/04/23(土) 19:24:44.23ID:51eUfy6p
// ヌルポインタ参照。
char *p = NULL;
*p = 0; // ぶっ飛ぶ。

// ゼロ除算。
float a = 1;
a /= 0; // これもWin32だとぶっ飛ぶ。
2022/04/23(土) 19:29:13.41ID:LGXHSjUH
ゼロ除算はシグナルSIGFPEが発生
signal()でハンドリング関数を指定すれば良い
例外は全く関係ない
2022/04/23(土) 19:38:33.99ID:51eUfy6p
Win32では浮動小数ゼロ除算は構造化例外であり、
SetUnhandledExceptionFilterの
EXCEPTION_FLT_DIVIDE_BY_ZERO
でキャッチできる。シグナルはない(Cygwinを除く)。
2022/04/23(土) 19:53:40.19ID:MFWNsjL4
>>276
そんな気持ち悪い独自仕様にして何を考えてるんだろう
余分に負担のかかるプログラミングを強いられるデメリットしかない
2022/04/23(土) 20:01:38.15ID:pT174lS4
>>277
独自仕様なのは別にして、そんなに気持ち悪いかなぁ?
ゼロ除算を起こした処理の周辺で局所的に対処できるのはいいと思うんだが。
2022/04/23(土) 20:07:10.88ID:7+1nJnMo
>>267
人迷惑と言う意味で一緒だよ
2022/04/23(土) 20:10:26.67ID:BMKo0y1z
お前らいつまで、そんな話ししてんだよ
世の中はさとみのお祝いムードでも盛り上がってんの二
2022/04/23(土) 20:12:03.42ID:6Eu3cwLL
signal と SEH なら SEH の方がマシだな
signal ハンドラーはマルチスレッドで個々のハンドラー持てないし
2022/04/23(土) 20:21:15.45ID:nWwnCTH/
スレッド毎に設定できないシングルトンなデータといえばカレントディレクトリとか
2022/04/23(土) 20:42:16.92ID:kGr5D+hC
SEHとかのコスト掛けてするのは本末転倒
ゼロ除算は事前if文0比較でコスト安い
2022/04/23(土) 21:07:07.31ID:1ji6Qm2J
例外の実装として sjlj と SEH とのどちらが優れているか、という話ではなかったのか?
2022/04/23(土) 21:09:05.54ID:yDjwvYRz
>>284
そんな実装をしている例はない
SEHも誤読でソース無し
2022/04/23(土) 21:20:35.92ID:51eUfy6p
>>285
C++例外のSEHの実装例はあるよ。
MinGW gcc でもあるし、Visual C++ /SHaでもあるし。
2022/04/23(土) 21:26:55.58ID:FYLNDVY0
>>286
おまえバカなのか?
それはC++の例外(try throw catch)の実装例ではない
2022/04/23(土) 21:29:35.47ID:51eUfy6p
>>287
/SHaのtry-catchでSEH機構を使ってるのは事実だし、確かめもしないやつに言われたくない。
2022/04/23(土) 21:40:18.76ID:51eUfy6p
https://cutlassfish.wordpress.com/2014/08/12/mingw-w64-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E4%BE%8B/

MinGW-w64 の例外機構は、SJLJ、DWARF、SEHの3つ。MinGW-w64におけるC++の例外はこのいずれかで実装されている。
2022/04/23(土) 21:41:28.57ID:qKJLJkGn
それは嘘だな
例えば単純にプログラムの中でthrow投げるとする
当然SEHは使われない
2022/04/23(土) 21:43:17.83ID:51eUfy6p
単純な例外処理は最適化で消えることがある。常識。
2022/04/23(土) 21:46:06.95ID:dgvSdybL
>>291
消えない
例外時に関数は何を返す?
2022/04/23(土) 22:07:33.30ID:51eUfy6p
>>292
https://stackoverflow.com/questions/3311641/c-exception-throw-catch-optimizations

Even simpler cases could be optimized, such as:

int func() {
try {
throw 42;
}catch(int x) {
return x;
}
}
The above code can be transformed into return 42. There are no technical reasons that impede it.
2022/04/23(土) 22:09:39.97ID:51eUfy6p
君の単純なthrowの例では
std::terminate()
になるかもしれない。
2022/04/23(土) 22:11:37.95ID:qFv4TdcK
>>293
バカにしてるのか?
無条件にthrowされていてしかも関数呼び出しすらない
せめて関数の引数値によってthrowされるか否か変わる例にしろよ
2022/04/23(土) 22:12:58.42ID:51eUfy6p
>>295
してるよ。
2022/04/23(土) 22:17:03.10ID:68vu283x
・まずtryの中で別の関数を呼び出さないと最もベーシックなパターンにすらなっていない
・呼び出される別の関数の中でも特定条件時のみthrowしないと例外処理の意味を持たない
2022/04/23(土) 22:17:27.90ID:51eUfy6p
君の父親は言い負かされようになると「バカにしてるのか」と言う癖があるようだね。愚かな人間ども。
2022/04/23(土) 22:21:38.82ID:7+1nJnMo
>>286,288
オプションもまともに書けないとかお前さん使ってないだろw
/EHa使っても構造化例外がcatchでキャッチできるようになるだけでthrowで構造化例外を送出できるようになるわけじゃないぞ
https://docs.microsoft.com/ja-jp/cpp/build/reference/eh-exception-handling-model?view=msvc-170
2022/04/23(土) 22:21:59.63ID:6DdDEQOn
なぜそんなおバカなコード例をわざわざ披露するのか常識を疑う
2022/04/23(土) 22:24:23.21ID:6GwypHXA
これだから蟻人問の書き込みは全く信頼できない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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