エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
探検
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
レス数が950を超えています。1000を超えると書き込みができなくなります。
2018/12/28(金) 06:04:52.38ID:ufThBpcD
896デフォルトの名無しさん
2019/04/21(日) 16:03:56.39ID:dJmpMhpq897デフォルトの名無しさん
2019/04/21(日) 16:08:40.35ID:ECfCuHga SJLJの話じゃないです
例外を避けてオレオレエラーコードを返す迷惑な人達の話です
例外を避けてオレオレエラーコードを返す迷惑な人達の話です
898デフォルトの名無しさん
2019/04/21(日) 17:16:18.32ID:ZtsKSKQ7 例外もまともにキャッチされないので
どっちもクソです
どっちもクソです
899デフォルトの名無しさん
2019/04/21(日) 17:17:33.88ID:ym7YjNtF エラーの発生頻度によるのでは?
throwは高コストだから発生頻度が高い場合は戻り値で処理した方がいい
throwは高コストだから発生頻度が高い場合は戻り値で処理した方がいい
900デフォルトの名無しさん
2019/04/21(日) 17:22:58.19ID:nzBarAq0 システムによる
航空機の運航システムでのエラー処理はどうすりゃいいわけさ
航空機の運航システムでのエラー処理はどうすりゃいいわけさ
901デフォルトの名無しさん
2019/04/21(日) 17:53:59.57ID:ECfCuHga >>899
入力の検証、パース以外で頻繁に発生するエラーって例えば何でしょうか?
そもそもthrowはコストそんなに高くないのでは?
エラー情報(コード、メッセージ、下位エラー情報、スタックトレース等)を戻りでコピーしまくるほうが高く付くと思います
入力の検証、パース以外で頻繁に発生するエラーって例えば何でしょうか?
そもそもthrowはコストそんなに高くないのでは?
エラー情報(コード、メッセージ、下位エラー情報、スタックトレース等)を戻りでコピーしまくるほうが高く付くと思います
>>896
自分で実装できないものを、その仕組みもわからないのにホイホイ使ってしまってもいいのでしょうか?
他の言語ならともかく、C/C++er がそういうところに無自覚なのは大いに問題があるのでは?
そんなことでデバッグできますか?
自分で実装できないものを、その仕組みもわからないのにホイホイ使ってしまってもいいのでしょうか?
他の言語ならともかく、C/C++er がそういうところに無自覚なのは大いに問題があるのでは?
そんなことでデバッグできますか?
904デフォルトの名無しさん
2019/04/21(日) 18:28:33.16ID:ECfCuHga >>902
内部構造がわからないものでもAPIドキュメントを読んで使えるようになるのが正しいプログラマでは?
内部構造がわからないものでもAPIドキュメントを読んで使えるようになるのが正しいプログラマでは?
905デフォルトの名無しさん
2019/04/21(日) 18:34:32.58ID:dJmpMhpq まあそういう賢いプログラマなら当然の様にSpectreの可能性に気づいて対策していたんだろうね。
きっと
きっと
907デフォルトの名無しさん
2019/04/21(日) 18:41:53.50ID:dJmpMhpq つまりすべてのAPIをスクラッチでかける人間以外使うなと言うことなんだな
908デフォルトの名無しさん
2019/04/21(日) 18:42:38.56ID:ECfCuHga909デフォルトの名無しさん
2019/04/21(日) 18:44:31.12ID:dJmpMhpq 大体sj,ljが肝なのだから、そこ丸投げしたら同じようなもの
910デフォルトの名無しさん
2019/04/21(日) 18:51:39.35ID:ECfCuHga 内部構造まで把握してなきゃ使っちゃだめなんていう烏滸がましい思想を持ってると
実装に強い影響を受けるエラーコード返し方式を選んでしまうのだろうな
実装に強い影響を受けるエラーコード返し方式を選んでしまうのだろうな
911デフォルトの名無しさん
2019/04/21(日) 18:52:38.66ID:idC8t1Zb なんかライブラリ使ってるだけの輩がイキリ出しとるなw
確かにライブラリによってはそのライブラリの単体テストなり書いといた方が良いこともある。
確かにライブラリによってはそのライブラリの単体テストなり書いといた方が良いこともある。
912はちみつ餃子 ◆8X2XSCHEME
2019/04/21(日) 18:57:06.46ID:v5pFgDlL 静的例外の提案がある。
使える例外オブジェクトに制限があるし、
静的例外を投げる可能性がある関数は型として明記しないといけないけれど、
見かけ上は例外の構文を使いつつ
実質的に返却値と合わせて例外オブジェクトを受け渡すような方法をとれる。
https://cpplover.blogspot.com/2018/07/c.html
江添氏もこれには期待しているらしいことを書いている。
使える例外オブジェクトに制限があるし、
静的例外を投げる可能性がある関数は型として明記しないといけないけれど、
見かけ上は例外の構文を使いつつ
実質的に返却値と合わせて例外オブジェクトを受け渡すような方法をとれる。
https://cpplover.blogspot.com/2018/07/c.html
江添氏もこれには期待しているらしいことを書いている。
913デフォルトの名無しさん
2019/04/21(日) 18:59:12.07ID:ECfCuHga >>911
SOLIDを実践しないからそんなおかしなテストを書くはめになるんでしょうな
SOLIDを実践しないからそんなおかしなテストを書くはめになるんでしょうな
914デフォルトの名無しさん
2019/04/21(日) 19:03:01.42ID:dJmpMhpq 例外便利だけど、例外が高確率で起こる場面じゃ使うと遅くなるから、仕方なく結果コード判定してとかの糞コード書かなきゃいけなくなる。
915デフォルトの名無しさん
2019/04/21(日) 19:10:10.25ID:ECfCuHga916デフォルトの名無しさん
2019/04/21(日) 19:10:58.11ID:ym7YjNtF 俺は戻り値をboolにするかbool*のout引数を用意してエラー内容はメンバに記憶しておき、
成否だけで十分な場面では単純にbool値だけを見て、詳細が必要な場面だけエラー内容を取得する
ってやり方が気に入ってる
成否だけで十分な場面では単純にbool値だけを見て、詳細が必要な場面だけエラー内容を取得する
ってやり方が気に入ってる
917デフォルトの名無しさん
2019/04/21(日) 19:12:17.54ID:ECfCuHga918デフォルトの名無しさん
2019/04/21(日) 19:16:05.70ID:ym7YjNtF ファイルシステムでパスが存在するかとか権限があるかとか
リソースを確保できるかどうかとか
いくらでもあるでしょう
リソースを確保できるかどうかとか
いくらでもあるでしょう
919デフォルトの名無しさん
2019/04/21(日) 19:17:16.59ID:ECfCuHga920デフォルトの名無しさん
2019/04/21(日) 19:38:20.06ID:iFY66t+o そりゃそのシステムの問題じゃね?
例外なら「中途半端に特殊なエラー処理ルール」にならないというわけでもあるまい。
例外なら「中途半端に特殊なエラー処理ルール」にならないというわけでもあるまい。
921デフォルトの名無しさん
2019/04/21(日) 19:45:15.97ID:ECfCuHga922デフォルトの名無しさん
2019/04/21(日) 19:47:17.19ID:ECfCuHga923デフォルトの名無しさん
2019/04/21(日) 20:14:16.72ID:sE/qbOcV 例外にすればエラー検知は簡単になるでしょうが
そのエラーに対してどう処理するのかはケースバイケース
標準的な方法なんて無いと思うけど
そこが肝心な所で優勢かどうかは些末のことだと思うよ
そのエラーに対してどう処理するのかはケースバイケース
標準的な方法なんて無いと思うけど
そこが肝心な所で優勢かどうかは些末のことだと思うよ
924デフォルトの名無しさん
2019/04/21(日) 20:21:35.36ID:ECfCuHga 例外はcatchで標準化されますが?
その後のことは例外とエラーコードの比較って文脈で語ることじゃないな
強いて言えば例外の方が再通知の仕方もより標準的と言えるが
その後のことは例外とエラーコードの比較って文脈で語ることじゃないな
強いて言えば例外の方が再通知の仕方もより標準的と言えるが
925デフォルトの名無しさん
2019/04/21(日) 20:24:46.24ID:ym7YjNtF 戻り値がboolならそれが正常終了したかどうかを表していることは誰にでもわかる
呼び出し元を正常系と異常系の単純な分岐にでもしておけば致命的なバグになることはない
例外の場合はその発生率が極めて低い場合にtry-catch忘れが起こると致命的なバグを含んだままリリースされかねない
呼び出し元を正常系と異常系の単純な分岐にでもしておけば致命的なバグになることはない
例外の場合はその発生率が極めて低い場合にtry-catch忘れが起こると致命的なバグを含んだままリリースされかねない
926デフォルトの名無しさん
2019/04/21(日) 20:34:33.10ID:ECfCuHga >>925
boolの解釈は人それぞれ
bool is_invalid() const;みたいなのもあるよね
あるいはただのビットフラグのON/OFFを示してるかもかもしれない
そもそもそれが処理の成否を表しているかどうかすら統一されてない
リターンコード方式ではリターンコードと分岐の洪水による目くらましでコーディングミスが多発する
それは必要なcatchを書き忘れる確率よりもずっと高い確率で発生する
例外は処理すべきものだけしか書かないから見通しが良く仕様書との比較もしやすい
リターンコード形式では何もしなくてもいいのに定型処理を書かねばならず
それによってどのエラー処理が仕様書に書かれた本当に必要なエラー処理なのか目で見てわかりにくい
boolの解釈は人それぞれ
bool is_invalid() const;みたいなのもあるよね
あるいはただのビットフラグのON/OFFを示してるかもかもしれない
そもそもそれが処理の成否を表しているかどうかすら統一されてない
リターンコード方式ではリターンコードと分岐の洪水による目くらましでコーディングミスが多発する
それは必要なcatchを書き忘れる確率よりもずっと高い確率で発生する
例外は処理すべきものだけしか書かないから見通しが良く仕様書との比較もしやすい
リターンコード形式では何もしなくてもいいのに定型処理を書かねばならず
それによってどのエラー処理が仕様書に書かれた本当に必要なエラー処理なのか目で見てわかりにくい
927デフォルトの名無しさん
2019/04/21(日) 20:43:33.90ID:baAUkWKA catch 以降でエラー内容に応じて振り分ける訳ですか?
気が遠くなりませんか?
気が遠くなりませんか?
928デフォルトの名無しさん
2019/04/21(日) 20:47:31.48ID:ECfCuHga >>916
エラー値を取得するタイミングがずれるようだとスレッドセーフを保障できなくなるのでは?
エラー値を取得するタイミングがずれるようだとスレッドセーフを保障できなくなるのでは?
933デフォルトの名無しさん
2019/04/21(日) 21:08:36.84ID:ECfCuHga934デフォルトの名無しさん
2019/04/21(日) 21:11:37.57ID:ECfCuHga >>932
例外はエラー対応を忘れないようにするためのものではありません
例外はエラーの通知方法を標準化することとコーディングの労力を大幅に低減するための機構です
エラーコード形式でも分岐を忘れることはありえます
むしろ不要な分岐も定型処理として書かなければならないエラーコード形式ではノイズが多くミスや忘れが多く発生します
例外はエラー対応を忘れないようにするためのものではありません
例外はエラーの通知方法を標準化することとコーディングの労力を大幅に低減するための機構です
エラーコード形式でも分岐を忘れることはありえます
むしろ不要な分岐も定型処理として書かなければならないエラーコード形式ではノイズが多くミスや忘れが多く発生します
>>933
>レスを読んでください
どのレスかアンカーをいただけませんか?
>>933
>異なる世代の衝突があった場合は今を優先すべきでしょう
>過去の過ぎ去ったことにいつまでも縋り付いては先へ進めません
「今の方が昔よりよくなった」という世界観に立脚しているのであれば、その説は説明できますが
「今よりも悪くなった」と考えている人を説得することができないのではないでしょうか?
>>933 が必要なのは「今の方がよくなった」と言い切れるメリットがなにか具体的に明示することだと思います。
単に「新しい方がよい」という主観だけを振り回しても、アンチ exception の意見を持つ人は納得できません
>>933 は具体的なメリットを明示することをせずに「新しい方がよい」という主観ばかり述べているのだから、議論の仕方をしらない「馬鹿な文系」に私からはみえるのです…
>レスを読んでください
どのレスかアンカーをいただけませんか?
>>933
>異なる世代の衝突があった場合は今を優先すべきでしょう
>過去の過ぎ去ったことにいつまでも縋り付いては先へ進めません
「今の方が昔よりよくなった」という世界観に立脚しているのであれば、その説は説明できますが
「今よりも悪くなった」と考えている人を説得することができないのではないでしょうか?
>>933 が必要なのは「今の方がよくなった」と言い切れるメリットがなにか具体的に明示することだと思います。
単に「新しい方がよい」という主観だけを振り回しても、アンチ exception の意見を持つ人は納得できません
>>933 は具体的なメリットを明示することをせずに「新しい方がよい」という主観ばかり述べているのだから、議論の仕方をしらない「馬鹿な文系」に私からはみえるのです…
>>934
私の考えるところの exception の利点の一つは、exception の発生した階層から遠く離れたところでも、その exception を catch して処理を記述できるところにある、と考えています
もう一つは exception を catch するとき指定するのは class だから、このエラークラスを派生関係として階層化することで、エラー体系の構造化ができるところでしょうか(派生クラスでも基底クラスでも catch できる、という点です)
しかし exception の話が持ち上がる度に、私の思う上記二点の excption の利点は言及されたためしがありません…
これでは exception の本当にいいところがメリットとして理解されていない、というか、メリットになり得ていないようですね…
exception は単なる無駄コスト食らいなんじゃないですかね…
私の考えるところの exception の利点の一つは、exception の発生した階層から遠く離れたところでも、その exception を catch して処理を記述できるところにある、と考えています
もう一つは exception を catch するとき指定するのは class だから、このエラークラスを派生関係として階層化することで、エラー体系の構造化ができるところでしょうか(派生クラスでも基底クラスでも catch できる、という点です)
しかし exception の話が持ち上がる度に、私の思う上記二点の excption の利点は言及されたためしがありません…
これでは exception の本当にいいところがメリットとして理解されていない、というか、メリットになり得ていないようですね…
exception は単なる無駄コスト食らいなんじゃないですかね…
937デフォルトの名無しさん
2019/04/21(日) 21:29:57.46ID:ECfCuHga >>935
沢山あるので面倒です
今日のレスを読み直してください
悪くなったのが事実であれば新しいものが普及する前に消えるでしょう
普及してしまった時点で一部のロートル以外は良くなったと考えている証拠です
沢山あるので面倒です
今日のレスを読み直してください
悪くなったのが事実であれば新しいものが普及する前に消えるでしょう
普及してしまった時点で一部のロートル以外は良くなったと考えている証拠です
938デフォルトの名無しさん
2019/04/21(日) 21:34:59.57ID:ECfCuHga >>936
離れた位置で捉えられる点はコーディングの省力化に暗に含まれると考えていいでしょう
全ての階層で定型処理を書かなくてもいい==離れた階層でも捉えたいところでだけ処理を書けばいい
ということです
例外の階層化についてはその通りですね
地味なので忘れがちですが便利です
離れた位置で捉えられる点はコーディングの省力化に暗に含まれると考えていいでしょう
全ての階層で定型処理を書かなくてもいい==離れた階層でも捉えたいところでだけ処理を書けばいい
ということです
例外の階層化についてはその通りですね
地味なので忘れがちですが便利です
>>934
>エラーの通知方法を標準化することとコーディングの労力を大幅に低減する
ここでもバズワード「標準化」を使っていますね、漠然とした抽象的な単語を並べればいい、という思考の粗さが気になります
それに異常系の記述はどうあがいても、場合わけして都度逐一記述するしかないのは、return-value 派にしても exception 派にしても同じで、記述する中身が減るわけじゃありません
それとも exception で書けば記述が減るというのなら、何か書いてみてください
>>934 を読むにつけても、>>934 は本当に物事を突き詰めて考えているのですか?
世間がこういっている、とか、Java や C# ではそうしている、とかいう空気の読みあい、ポジション取りの忖度しかしていないのでは?
>>934 はたぶん文系プログラマなんでしょうね、私には強くそう推察されるのです…
>エラーの通知方法を標準化することとコーディングの労力を大幅に低減する
ここでもバズワード「標準化」を使っていますね、漠然とした抽象的な単語を並べればいい、という思考の粗さが気になります
それに異常系の記述はどうあがいても、場合わけして都度逐一記述するしかないのは、return-value 派にしても exception 派にしても同じで、記述する中身が減るわけじゃありません
それとも exception で書けば記述が減るというのなら、何か書いてみてください
>>934 を読むにつけても、>>934 は本当に物事を突き詰めて考えているのですか?
世間がこういっている、とか、Java や C# ではそうしている、とかいう空気の読みあい、ポジション取りの忖度しかしていないのでは?
>>934 はたぶん文系プログラマなんでしょうね、私には強くそう推察されるのです…
>>937
アンカーを書くことくらいもできないのですか?
アンカーを書くことくらいもできないのですか?
>>937
>悪くなったのが事実であれば新しいものが普及する前に消えるでしょう
google のコーディング規約では exception を推奨しないようですよ
https://ttsuki.github.io/styleguide/cppguide.ja.html#Exceptions
悪いものでも消えずに、もっと悪いことには悪疫として蔓延しているものもありますよ、もしかすると C++ の exception もその一つなのでは?
>悪くなったのが事実であれば新しいものが普及する前に消えるでしょう
google のコーディング規約では exception を推奨しないようですよ
https://ttsuki.github.io/styleguide/cppguide.ja.html#Exceptions
悪いものでも消えずに、もっと悪いことには悪疫として蔓延しているものもありますよ、もしかすると C++ の exception もその一つなのでは?
942デフォルトの名無しさん
2019/04/21(日) 21:38:57.23ID:ECfCuHga ちなみに例外はもうすでに新しいものではありません
長年多くのプログラマによって効果が実証され続けてきた枯れた機能です
例外に変わるエラー処理機構が流行らなかったという事実が例外の完成度の高さを裏付けています
長年多くのプログラマによって効果が実証され続けてきた枯れた機能です
例外に変わるエラー処理機構が流行らなかったという事実が例外の完成度の高さを裏付けています
943デフォルトの名無しさん
2019/04/21(日) 21:41:14.44ID:ECfCuHga944デフォルトの名無しさん
2019/04/21(日) 21:41:34.96ID:dJmpMhpq googleが例外使わない理由は、例外を否定する類いのものでは無かったような
>>944
「例外安全」を保障するのが、これは滅茶苦茶しんどいので、その一点で嫌われているんだとおぼろげながら感じています
「例外安全」を保障するのが、これは滅茶苦茶しんどいので、その一点で嫌われているんだとおぼろげながら感じています
947デフォルトの名無しさん
2019/04/21(日) 21:52:11.67ID:ECfCuHga >>941
googleが常に正しいわけではないでしょう
例えばそのページでは、例外安全性を考慮していないコードのリスク、つまりリソースリークについて書かれてますがリターンコード形式でも解放を忘れればリークするのは同じことです
そして、さっきも書きましたがリターンコード形式では余計な定型処理がノイズとなってそういったミスをしやすくなることが問題です
コントロールフローが追跡難化するリスクも全く逆でダラダラと必要ない定型処理を書かれた方が追跡が難しくなります
自分で考えずに権威を盲信する人を文系と揶揄することがありますが
もしかしてあなたも文系なのでしょうか?
googleが常に正しいわけではないでしょう
例えばそのページでは、例外安全性を考慮していないコードのリスク、つまりリソースリークについて書かれてますがリターンコード形式でも解放を忘れればリークするのは同じことです
そして、さっきも書きましたがリターンコード形式では余計な定型処理がノイズとなってそういったミスをしやすくなることが問題です
コントロールフローが追跡難化するリスクも全く逆でダラダラと必要ない定型処理を書かれた方が追跡が難しくなります
自分で考えずに権威を盲信する人を文系と揶揄することがありますが
もしかしてあなたも文系なのでしょうか?
948デフォルトの名無しさん
2019/04/21(日) 21:56:08.07ID:ECfCuHga >>945
例外を受け取ると何もせず上位に通知するメソッドを考えてください
例外形式ではコーディング量は0です
リターンコード形式では少なくともリターンコード値が正常系か異常系か判断して戻す分岐が必要です
これは少なくとも1行の無意味な定型処理を追加しなければならないということです
実際にはそのプロジェクトの規約によって1行どころでは済まないことが多いのですが…
例外を受け取ると何もせず上位に通知するメソッドを考えてください
例外形式ではコーディング量は0です
リターンコード形式では少なくともリターンコード値が正常系か異常系か判断して戻す分岐が必要です
これは少なくとも1行の無意味な定型処理を追加しなければならないということです
実際にはそのプロジェクトの規約によって1行どころでは済まないことが多いのですが…
949デフォルトの名無しさん
2019/04/21(日) 21:56:49.72ID:ym7YjNtF950デフォルトの名無しさん
2019/04/21(日) 21:57:05.52ID:dJmpMhpq 例外安全というか、googleで想定しているリソース解放漏れって要はRAIIになっていないって事だよね
951デフォルトの名無しさん
2019/04/21(日) 22:02:25.75ID:ECfCuHga >>946
リターンコード形式でも例外安全性(エラー安全性とでもいうのでしょうか)を守るには大きな労力がかかるはずです
リターンコード形式なら自動的にリソースが安全に解放されて全ての状態が実行前にロールバックされるといったことはありません
例外でもリターンコード形式でもリソースの解放と状態のロールバックの責任はプログラマあります
リターンコード形式でも例外安全性(エラー安全性とでもいうのでしょうか)を守るには大きな労力がかかるはずです
リターンコード形式なら自動的にリソースが安全に解放されて全ての状態が実行前にロールバックされるといったことはありません
例外でもリターンコード形式でもリソースの解放と状態のロールバックの責任はプログラマあります
>>947
>例えばそのページでは、例外安全性を考慮していないコードのリスク、つまりリソースリークについて書かれてますがリターンコード形式でも解放を忘れればリークするのは同じことです
そこで exception の実装に話が戻るのです
exception の実装(例えば sjlj, seh のどちらかひとつでいい)はどうしても(隠れたところに)グローバル変数を必要とするのではないですか?
これはスレッドセーフや例外安全を考えるときに、大きな癌になりうるでしょう
一方、return-value 方式は、頑張ればローカル変数だけで記述できる
return-value 方式の方が考えるのが楽ではないですか?
>自分で考えずに権威を盲信する人を文系と揶揄することがありますがもしかしてあなたも文系なのでしょうか?
かりにそうだったとしても最初は「新しいものはいいものだ」で押し通そうとした、あなたには言われたくないですね…
>例えばそのページでは、例外安全性を考慮していないコードのリスク、つまりリソースリークについて書かれてますがリターンコード形式でも解放を忘れればリークするのは同じことです
そこで exception の実装に話が戻るのです
exception の実装(例えば sjlj, seh のどちらかひとつでいい)はどうしても(隠れたところに)グローバル変数を必要とするのではないですか?
これはスレッドセーフや例外安全を考えるときに、大きな癌になりうるでしょう
一方、return-value 方式は、頑張ればローカル変数だけで記述できる
return-value 方式の方が考えるのが楽ではないですか?
>自分で考えずに権威を盲信する人を文系と揶揄することがありますがもしかしてあなたも文系なのでしょうか?
かりにそうだったとしても最初は「新しいものはいいものだ」で押し通そうとした、あなたには言われたくないですね…
953デフォルトの名無しさん
2019/04/21(日) 22:06:18.26ID:ECfCuHga >>949
例外の場合
T val = f(...);
エラーコード場合
T val;
int ret = f(..., val);
if (is_error(ret)) return ret;
最小だとこの程度でしょう
とはいえ膨大なコードベースになるとこれだけでもうんざりしますが
例外の場合
T val = f(...);
エラーコード場合
T val;
int ret = f(..., val);
if (is_error(ret)) return ret;
最小だとこの程度でしょう
とはいえ膨大なコードベースになるとこれだけでもうんざりしますが
955デフォルトの名無しさん
2019/04/21(日) 22:12:03.58ID:ym7YjNtF >>953
try文を含めれば大差ありませんね?
try文を含めれば大差ありませんね?
956デフォルトの名無しさん
2019/04/21(日) 22:12:10.36ID:dJmpMhpq 嫌われないよ
RAIIじゃない場合
一度キャッチしてリソース解放したあとスローし直さなきゃリソース漏らすというだけ
RAIIじゃない場合
一度キャッチしてリソース解放したあとスローし直さなきゃリソース漏らすというだけ
958デフォルトの名無しさん
2019/04/21(日) 22:20:25.10ID:ECfCuHga >>952
たとえグローバル変数を使った実装だったとしても例外の利用者にとっては透過的なので問題はありません
スレッド処理でも問題はありません
同じスレッドでは利用者は何も気にせずに例外使えます
スレッドを結合するところでは例外を転送してください
そのための標準的な方法も用意されています
エラーコード形式の場合はスレッド間転送も標準のない独自形式になるのでより難しそうですね
たとえグローバル変数を使った実装だったとしても例外の利用者にとっては透過的なので問題はありません
スレッド処理でも問題はありません
同じスレッドでは利用者は何も気にせずに例外使えます
スレッドを結合するところでは例外を転送してください
そのための標準的な方法も用意されています
エラーコード形式の場合はスレッド間転送も標準のない独自形式になるのでより難しそうですね
959デフォルトの名無しさん
2019/04/21(日) 22:34:00.26ID:ECfCuHga >>954
Javaには例外時に自動でリソースを閉じるための構文が存在しない時期がありました
検査例外はそのときの名残です
GCされるまで自動で閉じられることはないからちゃんと手動で解放しろと注意喚起する意味では検査例外にも価値があります
逆に言うとRAIIやusing/IDisposeのような機構が適切に使われている場合はうっとおしいお節介でしかないわけです
ちなみにリターンコード形式場合はリソースを確保していない場合でも定型処理を書かなければなりません
したがってそのうっとおしさは検査例外とは比較にならないほどの負担になります
Javaには例外時に自動でリソースを閉じるための構文が存在しない時期がありました
検査例外はそのときの名残です
GCされるまで自動で閉じられることはないからちゃんと手動で解放しろと注意喚起する意味では検査例外にも価値があります
逆に言うとRAIIやusing/IDisposeのような機構が適切に使われている場合はうっとおしいお節介でしかないわけです
ちなみにリターンコード形式場合はリソースを確保していない場合でも定型処理を書かなければなりません
したがってそのうっとおしさは検査例外とは比較にならないほどの負担になります
960デフォルトの名無しさん
2019/04/21(日) 23:25:54.10ID:2X82VWTJ いつもはうっとうしいQZ某が、今日は概ね論理的な物言いをしているように感じる。
対する例外推しの彼は、饒舌だが自説を貫こうとするだけで相手を納得させるような説明はしようとせず、議論をしていつもりで議論できてない人のように見える。リアルなフォーク准将を見ているような気持ち悪さがあるよ。
ちなみに俺は例外も戻り値も適材適所で使い分けて一貫性がとれていればいいんじゃね、という意見だけど、議論に加わる気は無いのでスルーしてくれ。
対する例外推しの彼は、饒舌だが自説を貫こうとするだけで相手を納得させるような説明はしようとせず、議論をしていつもりで議論できてない人のように見える。リアルなフォーク准将を見ているような気持ち悪さがあるよ。
ちなみに俺は例外も戻り値も適材適所で使い分けて一貫性がとれていればいいんじゃね、という意見だけど、議論に加わる気は無いのでスルーしてくれ。
961デフォルトの名無しさん
2019/04/22(月) 00:23:12.59ID:W/PqoVz0 納得させる気は最初からないからね
ただ単に事実を語っただけ
ただ単に事実を語っただけ
962デフォルトの名無しさん
2019/04/22(月) 01:28:16.24ID:zAZ+Y0tC 機械学習とかアプリケーションレイヤの開発をしてて普段はJavaとかpythonで書いてるんだけど相談。
手間や保守を考えるといくら早く動作しても全部cで実装は厳しくて、複雑な計算とかだけcに渡そうと思うんだけど、このレイヤだとそんなもんだろうか?実際の仕事での使われ方の例があれば教えてほしい。
手間や保守を考えるといくら早く動作しても全部cで実装は厳しくて、複雑な計算とかだけcに渡そうと思うんだけど、このレイヤだとそんなもんだろうか?実際の仕事での使われ方の例があれば教えてほしい。
963はちみつ餃子 ◆8X2XSCHEME
2019/04/22(月) 05:12:41.91ID:oO3SHMUw 例外安全という言葉には色々と含まれるけど、
とりあえず最低限度の保証としては「リソースリークが起こらないこと」とすると、
C++ ではデストラクタで後始末するのが基本だ。
(RAII)
私が強調しておきたいのは、リソース管理の配慮はクラス定義に押し込めることが出来るということと、
可能な限り押し込めるべきだということ。
エラー発生の通知に使うのが返却値であれ例外であれ、
エラーへの対処の中にリソース回収のコードを書かなきゃならないようならその時点でダメなコードだ。
デストラクタで回収されることをあてにしたい。
(bad_alloc のような致命的なやつはちょっと話が違ってきたりとか、単純ではない場面はあるけど……。)
で、デストラクタでリソースを後始末するというのが出来ているという前提であれば、
例外を使うか返却値を使うかの差は対処のためのコードをどこにかくかの違いに過ぎなくなる。
Java と違って関数が送出する例外を型システムで管理してくれないわけだし、
引数をチェックしているかどうかもプログラマが気を付けるしかないので、そんなに違いはないと思う。
違いはないがどちらかに一貫させるのが望ましいと考えると、
C++ の基本的なライブラリに併せるべきだということになって例外を使うのが妥当という判断になる。
ちなみにグーグルのガイドラインが例外を避けることになっているのは
グーグルで使っている既存のコードが例外への配慮を充分にしてないから
やむを得ずそれに合わせるためでフルスクラッチに出来れば違う判断をするかも
ってことも書いてあるので、例外を避ける根拠としては弱い。
とりあえず最低限度の保証としては「リソースリークが起こらないこと」とすると、
C++ ではデストラクタで後始末するのが基本だ。
(RAII)
私が強調しておきたいのは、リソース管理の配慮はクラス定義に押し込めることが出来るということと、
可能な限り押し込めるべきだということ。
エラー発生の通知に使うのが返却値であれ例外であれ、
エラーへの対処の中にリソース回収のコードを書かなきゃならないようならその時点でダメなコードだ。
デストラクタで回収されることをあてにしたい。
(bad_alloc のような致命的なやつはちょっと話が違ってきたりとか、単純ではない場面はあるけど……。)
で、デストラクタでリソースを後始末するというのが出来ているという前提であれば、
例外を使うか返却値を使うかの差は対処のためのコードをどこにかくかの違いに過ぎなくなる。
Java と違って関数が送出する例外を型システムで管理してくれないわけだし、
引数をチェックしているかどうかもプログラマが気を付けるしかないので、そんなに違いはないと思う。
違いはないがどちらかに一貫させるのが望ましいと考えると、
C++ の基本的なライブラリに併せるべきだということになって例外を使うのが妥当という判断になる。
ちなみにグーグルのガイドラインが例外を避けることになっているのは
グーグルで使っている既存のコードが例外への配慮を充分にしてないから
やむを得ずそれに合わせるためでフルスクラッチに出来れば違う判断をするかも
ってことも書いてあるので、例外を避ける根拠としては弱い。
964デフォルトの名無しさん
2019/04/22(月) 07:22:42.90ID:kinTds5M ON ERR GOTO 100
965デフォルトの名無しさん
2019/04/22(月) 08:55:56.47ID:H+0HJxEG #define return goto
>>960
>いつもはうっとうしいQZ某が、今日は概ね論理的な物言いをしているように感じる。
あれ?れれ?
おっかしーなー、私もプログラムを書く人だし最低限自分の作ったバグくらいはさっさと片付けたいので、そのためにも、いつも論理的でありたいと願っているのですが…
>いつもはうっとうしいQZ某が、今日は概ね論理的な物言いをしているように感じる。
あれ?れれ?
おっかしーなー、私もプログラムを書く人だし最低限自分の作ったバグくらいはさっさと片付けたいので、そのためにも、いつも論理的でありたいと願っているのですが…
967デフォルトの名無しさん
2019/04/23(火) 13:32:34.33ID:TjU3QAMI そういうとこだよ
こういうのってたいてい本人は自覚してないもんだからやっかい
こういうのってたいてい本人は自覚してないもんだからやっかい
>>963
>違いはないがどちらかに一貫させるのが望ましいと考えると、
>C++ の基本的なライブラリに併せるべきだということになって例外を使うのが妥当という判断になる。
この意見に対しては私は痛烈な批判を浴びせることになるでしょう
曰く、C/C++ の人なら言語的な統一感よりもコスト、というか単純性を優先したくなるのではないですか?
UML のグジャグジャ感をみるにつけても、「言語法律家」なるものはきわめて忌むべき存在と私は考えています
exception を実装するためには、隠れグローバル変数をどうしても準備しなければならない
シングルコアで exception の履歴を単一スタックに全部のせることができるのなら、ローカルで sjlj を駆使して、あるいは書き手からみえないところで純ローカル変数的世界に納めることもできたかもしれませんが、
今やマルチコアで実際に複数のスタックとプログラムカウンタが走る時代で、exception の実装は OS に丸投げの複雑怪奇、ついでにコストも複雑怪奇でパンピーには理解が及ばない…
そんな巨大かつ複雑なスケールの実装を必要とするのに見合った exception のメリットは何か、今も自問自答を繰り返しているのです
>違いはないがどちらかに一貫させるのが望ましいと考えると、
>C++ の基本的なライブラリに併せるべきだということになって例外を使うのが妥当という判断になる。
この意見に対しては私は痛烈な批判を浴びせることになるでしょう
曰く、C/C++ の人なら言語的な統一感よりもコスト、というか単純性を優先したくなるのではないですか?
UML のグジャグジャ感をみるにつけても、「言語法律家」なるものはきわめて忌むべき存在と私は考えています
exception を実装するためには、隠れグローバル変数をどうしても準備しなければならない
シングルコアで exception の履歴を単一スタックに全部のせることができるのなら、ローカルで sjlj を駆使して、あるいは書き手からみえないところで純ローカル変数的世界に納めることもできたかもしれませんが、
今やマルチコアで実際に複数のスタックとプログラムカウンタが走る時代で、exception の実装は OS に丸投げの複雑怪奇、ついでにコストも複雑怪奇でパンピーには理解が及ばない…
そんな巨大かつ複雑なスケールの実装を必要とするのに見合った exception のメリットは何か、今も自問自答を繰り返しているのです
969デフォルトの名無しさん
2019/04/23(火) 19:28:11.67ID:TE76XOKd 単純さを選んだら例外になったというお話だったのさ。ちゃんちゃん
970デフォルトの名無しさん
2019/04/23(火) 19:47:47.79ID:BSgCsXpz なぜsjljにこだわるのか
コルーチンとか標準化されても使わなそうだな
コルーチンとか標準化されても使わなそうだな
971デフォルトの名無しさん
2019/04/23(火) 19:58:30.12ID:TE76XOKd c++の言語仕様に例外の実装にはグローバル変数使えとかSJLJ使えなんて縛りあったっけ?
>>971
実装方法までは言語仕様に記述されないでしょうね…
実装方法までは言語仕様に記述されないでしょうね…
973デフォルトの名無しさん
2019/04/23(火) 20:23:18.80ID:TE76XOKd >>972
ということは例外の実装にまで踏み込んで考えるのはナンセンスなのでは?
ということは例外の実装にまで踏み込んで考えるのはナンセンスなのでは?
974デフォルトの名無しさん
2019/04/23(火) 21:32:22.59ID:lLaZpSEH >>968
例外がos丸投げってのは事実誤認
例外がos丸投げってのは事実誤認
975デフォルトの名無しさん
2019/04/23(火) 21:35:59.14ID:lLaZpSEH ちなみにおれはc++の例外は大規模開発でworkしないと思ってるから
経験上ひたすら面倒な事態になる
言語仕様決めてるやつらは言語オタクで大規模開発の経験ないと思ってる
経験上ひたすら面倒な事態になる
言語仕様決めてるやつらは言語オタクで大規模開発の経験ないと思ってる
976はちみつ餃子 ◆8X2XSCHEME
2019/04/23(火) 21:51:05.06ID:K0ADJPpo >>968
いつの話をしてるんだよ。 モダンな環境では例外送出の実行コストは充分に小さい。
特別な環境で特別な対処をしなきゃならない場合を例に出しても意味がないぞ。
ふーん、そういう場合はそうするんですねとしか言いようが無い。
いつの話をしてるんだよ。 モダンな環境では例外送出の実行コストは充分に小さい。
特別な環境で特別な対処をしなきゃならない場合を例に出しても意味がないぞ。
ふーん、そういう場合はそうするんですねとしか言いようが無い。
977デフォルトの名無しさん
2019/04/23(火) 21:58:50.41ID:lLaZpSEH978デフォルトの名無しさん
2019/04/23(火) 21:59:02.76ID:TE76XOKd 抽象化ができずどんな粒度でも低級のセオリーを通そうとする
早すぎる最適化がとにかく大好き
C++erに多いねこのタイプ
早すぎる最適化がとにかく大好き
C++erに多いねこのタイプ
979デフォルトの名無しさん
2019/04/23(火) 22:01:01.11ID:TE76XOKd >>977
クリティカルってどんな時?
クリティカルってどんな時?
980デフォルトの名無しさん
2019/04/23(火) 22:03:19.80ID:lLaZpSEH >>979
リアルタイム性が求められるとき
リアルタイム性が求められるとき
981デフォルトの名無しさん
2019/04/23(火) 22:04:43.29ID:lLaZpSEH >>978
アホみたいにmap使いまくって後でひどい目に遭うアホもよく見るな
アホみたいにmap使いまくって後でひどい目に遭うアホもよく見るな
982デフォルトの名無しさん
2019/04/23(火) 22:12:51.54ID:TE76XOKd >>980
それが必要なのってC++コード全体からすると何パーセントくらいなの?
それが必要なのってC++コード全体からすると何パーセントくらいなの?
983デフォルトの名無しさん
2019/04/23(火) 22:15:51.20ID:lLaZpSEH984デフォルトの名無しさん
2019/04/23(火) 22:18:09.81ID:TE76XOKd985デフォルトの名無しさん
2019/04/23(火) 22:21:23.75ID:lLaZpSEH986デフォルトの名無しさん
2019/04/23(火) 22:26:00.43ID:5E3fgZzA 痛い目に遭ったのかw
987デフォルトの名無しさん
2019/04/23(火) 22:28:35.69ID:TE76XOKd >>985
君はまだ話の流れを理解してないようだ
君はまだ話の流れを理解してないようだ
988デフォルトの名無しさん
2019/04/23(火) 22:34:01.99ID:lLaZpSEH 合ってるね
スクリプト言語あがりと一緒に仕事すると高い確率でそうなる
同じ事をいうんだよ
最初は抽象度高く作ってあとで最適化って
結局しないからね
だいたい薄く広く積もったオーバーヘッドは表面化しないから
んでもっさりアプリの出来上がり
であとで精鋭集めて作り直し
スクリプト言語あがりと一緒に仕事すると高い確率でそうなる
同じ事をいうんだよ
最初は抽象度高く作ってあとで最適化って
結局しないからね
だいたい薄く広く積もったオーバーヘッドは表面化しないから
んでもっさりアプリの出来上がり
であとで精鋭集めて作り直し
989デフォルトの名無しさん
2019/04/23(火) 22:36:43.29ID:TE76XOKd990デフォルトの名無しさん
2019/04/23(火) 22:43:26.94ID:lLaZpSEH991デフォルトの名無しさん
2019/04/23(火) 22:44:12.87ID:5E3fgZzA システム解析能力が無いせいじゃないか
992さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/23(火) 22:47:06.24ID:DAl4rXky そろそろ次スレ
993デフォルトの名無しさん
2019/04/23(火) 22:49:51.07ID:TE76XOKd >>990
その大事な大事なUXを向上させるために抽象化するんだよ新人君
その大事な大事なUXを向上させるために抽象化するんだよ新人君
994デフォルトの名無しさん
2019/04/23(火) 22:59:41.83ID:be9PrXZY さすがにそれは意味不明では?
過剰なオブジェクト指向でダメになったプロジェクトは数知れず
過剰なオブジェクト指向でダメになったプロジェクトは数知れず
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 【画像】外務省局長「この度はうちの🦎がすみません…」中国「……」 [165981677]
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
- 外務省局長、よくわからないまま帰国へ [834922174]
