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(金) 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
これだから蟻人問の書き込みは全く信頼できない
2022/04/23(土) 22:27:21.96ID:51eUfy6p
>>299
>throwで構造化例外を送出できるようになるわけじゃないぞ

そんなこと言ってない。構造化例外機構でthrowすると言ってるんだ。逆だよ。
2022/04/23(土) 22:32:14.74ID:8fErgiPg
>>302
君は理解力がないのかね?
それだと君の主張『C++の例外がSEHで実装されている』の例になっていない
2022/04/23(土) 22:34:18.65ID:51eUfy6p
>>299
>オプションもまともに書けないとかお前さん使ってないだろw

今、メタバースの中から書き込んでいて、ちょっと打ち間違えたんだ。
2022/04/23(土) 22:38:25.54ID:51eUfy6p
>>303
SEHを知らん人にいちいち教えるのは授業料がかかるが。
2022/04/23(土) 22:43:43.42ID:51eUfy6p
例外機構をsjljで実装するのもsehで実装するのもMinGWにある。君はいつまでも駄々っ子みたいに存在を認めないんだね。
2022/04/23(土) 22:45:00.85ID:E16t2nqa
行き詰まった敗者の典型パターン
「授業料払わないやつには教えない」
「教えて欲しかったら金払え」
「業務でもないのに答えられるか」
2022/04/23(土) 22:58:24.91ID:b7qvDYHN
SEHでC++のtry-catchを実装とか意味不明な主張してるんだな
2022/04/23(土) 23:01:30.10ID:51eUfy6p
MinGW-w64 SEH版の例外機構はSEHで実装されている(公開情報)。これを否定から入るなら議論はできない。
2022/04/23(土) 23:07:40.34ID:Erk9N28U
>>309
ソース無し
C++の例外機構にSEHは不要
2022/04/23(土) 23:18:30.07ID:BETrb0gR
結局実装の話してる人の精神状態が心配
2022/04/23(土) 23:25:16.57ID:BMKo0y1z
そろそろc++の話ししようぜ

2項演算子.*や->*が返却するオブジェクトの型を取得したい
規格にはapplication演算子が後続する場合のみ認めているが
その際の型をコンパイル時に取得したい

さらにdeclvalに渡したい
2022/04/23(土) 23:31:45.53ID:XUudJER7
なぜa.bとa->bという無駄な2種類を用意したんだろう?
他の言語ではaがポインタでもa.bだよね
型から間違いが起きようがないのだからa->bは不要だと思う
2022/04/23(土) 23:33:55.91ID:BMKo0y1z
>>313
君は黙ってて、そんな低レベルな話はしていない
.*や->*なんて使ったことないだろ
2022/04/23(土) 23:35:30.32ID:BMKo0y1z
お前ら聞いても無駄だな
例外とSEHの区別が付かないレベルだろうし
2022/04/23(土) 23:45:44.58ID:pNqsVcQp
decltype(declval<Hoge*>()->*declval<Fuga Hoge::*>)とかすればいいだけじゃないの
というかoperator->*のオーバーロードが絡んでなければ右項のメンバポインタの型から直接取り出せばいいだけじゃないの
何がしたいのか分からない
2022/04/24(日) 06:18:26.42ID:rcB2xidb
>>302
だからC++の例外(要はthrow)はSEH使ってないってこと
SEHは0除算とかメモリーアクセス違反を扱うためのものだよ
signal()に比べたらスマートな実装だと思う
2022/04/24(日) 07:34:41.41ID:VMBCaQB9
>>317
ばかじゃねーのこいつ
蟻人間の主張は「C++で例外を実現するのにSEHを使う『事もある』」と言っているんだぞ
2022/04/24(日) 07:58:43.35ID:rcB2xidb
>>318
だからthrowを実現できてないだろ
理解出来てないのにいちいち絡んでくるなよ
2022/04/24(日) 08:09:04.00ID:U2c/5Lvo
>>319
MinGW64のthrowはSEHを使ってるんだが・・・
お前本当に頭大丈夫か?
321デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:14:09.42ID:S9c+iUdl
チェックメイトだなw
2022/04/24(日) 08:24:49.35ID:rcB2xidb
>>320
それ/EHaの話じゃないだろ
話の流れも読めないなら黙っとけ
2022/04/24(日) 08:32:41.04ID:8mFtVhHE
>>322
お前は>>317で「だからC++の例外(要はthrow)はSEH使ってないってこと」と言ってるだろ
それに対する反例を示しただけの話なんだが?
後出しジャンケンはなしだぞ
例えば「>>317は/EHaの話をしてるんだが」とか言うなよ
2022/04/24(日) 08:44:00.70ID:uNEChMqn
もしかして
「__try/__except/__finallyの例外処理=SEHと思っている人」と
「それを実現するために制定されたABIのことをSEHと呼んでそのABIがC++のtry/catchの実装にも応用されていると主張する人」との間で無限に平行線になってるのか

俺は後者のつもりで聞いていたけど前者と考えると、ISO標準例外を使えなんて話が出てくるのも頷ける
2022/04/24(日) 08:47:49.34ID:rcB2xidb
>>323
> 話の流れも読めないなら黙っとけ
> 話の流れも読めないなら黙っとけ
> 話の流れも読めないなら黙っとけ

アンカーも辿れないのかよw
2022/04/24(日) 08:49:16.66ID:rcB2xidb
>>324
> それを実現するために制定されたABIのことをSEHと呼んで
また新しいこと言い出すアホが現れた!
2022/04/24(日) 08:52:40.31ID:uNEChMqn
>>326
sjljと引き合いに出してたからそのレイヤーの話をしていることくらい理解してると思い込んでいたわ
すまんな
2022/04/24(日) 08:56:13.74ID:LoCVKuRG
自分の旗色が悪くなったら「話の流れを読め」とか言っちゃう人ですか?
それ物凄く曖昧な定義だね(・∀・)ニヤニヤ
何とでも言えちゃうじゃない
火病を起こした方が負けだよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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