[過去ログ] C++相談室 part165 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
179: (ワッチョイ 2778-EFyZ) 2024/01/23(火)17:34 ID:kD0da0AW0(2/2) AAS
おお、ありがとうございます。
180: (ワッチョイ 6d63-H5uA) 2024/01/28(日)11:36 ID:W0uCnQb30(1/4) AAS
>>173
横やが関数foo()で1つの例外が発生したらその時点のfoo()呼び出しに至る10個かそこらの関数が中断されるわけや
すなわち関数bar()が
  処理A→B→C→D→return
の順で処理が進むことを気体しているところに、Bで呼び出している関数baz()がfoo()を呼び出している結果、foo()で例外を生じると
  処理A→B→return
という処理順に変更になる。こうなっても大丈夫なようにtry { 処理B } catch ((fooが投げる例外)& e) { (eに対する適切な処置) } を書かねばならず、
省3
181: (ワッチョイ 6d63-H5uA) 2024/01/28(日)11:40 ID:W0uCnQb30(2/4) AAS
というわけでそんなの現実には不可能なので、現実的な処置としては
・ライブラリ製作者はなんか都合が悪い事が起きたら何でも呼び出し元に返す。
 第1選択としてはエラーステータスを返すことを検討し、それではコードが煩雑になりすぎる場合は例外を投げて異常を知らせる
・ライブラリを使う人はライブラリが例外を投げない条件で使うことを心掛け、自前のコード内でtry { } catch() { }を極力しない
という処置になるわ
けや
182
(1): (ワッチョイ 66cf-5eDQ) 2024/01/28(日)12:02 ID:Gsm093HM0(1/3) AAS
catchしようがしまいが、例外が起きて 処理A→B→return となるのは同じだと思うが。
その場合の検証が必要だというならどっちも必要だろ。
183
(6): (ワッチョイ 6d63-H5uA) 2024/01/28(日)12:13 ID:W0uCnQb30(3/4) AAS
>>182
>catchしようがしまいが、例外が起きて 処理A→B→return となるのは同じだと思うが。
それは問題の認識がおかいし
例えば以下のコードにおいて、スレッドのゾンビを生じさせないためにはfuncB()をtry { } catch () { } は必須になる。
 void bar() {
  funcA();  // スレッドxを起動
  funcB();  // 中でbaz() → foo()の呼び出し
省7
184: (ワッチョイ 6d63-H5uA) 2024/01/28(日)12:14 ID:W0uCnQb30(4/4) AAS
訂正orz
誤:例外安全なオブジェクト「だけ」で事が済んでいない限り、例外を受けると決めた時点でcatchせねばならない
正:例外安全なオブジェクト「だけ」で事が済んでいない限り、例外が飛んでくる想定であるならばcatchせねばならない
185
(1): (ワッチョイ 797c-+np5) 2024/01/28(日)12:19 ID:/bXkl1Cz0(1) AAS
>>183
それはfuncB()に失敗の可能性がある時に必ず必要な話だろ?例外どうこうじゃないじゃん
funcB()が例外を投げずに古き良きintのエラーコードを戻り値で返す場合は何かが変わるの?
まさか「funcBの戻り値をガン無視すればfuncCもfuncDも実行されてくれるから完璧!だから例外はクソ!」っていうゴミカスみたいな主張をしたいわけじゃないよね?
186
(1): (ワッチョイ 66cf-5eDQ) 2024/01/28(日)12:28 ID:Gsm093HM0(2/3) AAS
>>183
それはcatchが必要かどうかの話だろ。
catchしたらテストケースが増えるかどうかという話とはなんも関係がない。
187: (ワッチョイ 5ef3-qitC) 2024/01/28(日)15:40 ID:JnoCOYDS0(1) AAS
そもそも未知の例外飛んできた時点でそれを通したライブラリの例外安全性が守られてるか怪しいと考えるべき
188
(2): (ワッチョイ 66cf-5eDQ) 2024/01/28(日)17:01 ID:Gsm093HM0(3/3) AAS
例外安全性を守るのに例外の種類やそれが既知か未知かは関係ないだろうが、
仕様に明記した例外以外は堰き止めるのが正解だろうなあ。
189
(4): ◆QZaw55cn4c (ワッチョイ 3583-LgJ8) 2024/01/28(日)20:27 ID:0TnCAHFI0(1) AAS
思い立って結城さんのデザパタ(古いjava で記述)を総称型(テンプレート)もちゃんと使ってC++ に書き直しているけれども、
new/delete からptr::shared_ptr に書きなおすと、もう構造がわかりにくくなってしまってどうしようもない
デザパタ=抽象クラスプログラミングは C++ ではオワコンなの?
Visitor パターン
new/delete: 外部リンク:ideone.com スッキリ書けてきもちいい
std::shared_ptr: 外部リンク:ideone.com 恐ろしい宣言の連発

>std::shared_ptr<Iterator<std::shared_ptr<Entry>>> iterator() { return std::make_shared<VectorIterator<std::shared_ptr<Entry>>>(v); }
省2
190: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-vdg+) 2024/01/28(日)20:53 ID:hRRbWEE/0(1/3) AAS
>>189
スマートポインタを使わないバージョンも C++ 的にはすっきりしてない。
動的多態の必要が必要ないのに持つべきメンバ関数を強制するためだけに抽象クラスを使っていて不恰好に見える。
コンセプトの導入がだいぶん後回しになった C++ の問題でもあるんだが……。
設計理念が妥当かどうかはともかくとして、元が Java なら直訳めいた C++ への置き換えがすっきりと書けるはずがない。
191: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-vdg+) 2024/01/28(日)21:08 ID:hRRbWEE/0(2/3) AAS
ざっと見た感じだと抽象クラスとして必要なのは Entry だけかな。
ジェネリックラムダが visitor パターンで使いやすいのでそういうのが使いやすいように配慮するといいかも。
std::visit が C++ での visitor パターンのお手本だよ。
192: (ワッチョイ b501-PlwZ) 2024/01/28(日)22:46 ID:VLKT1lFt0(1) AAS
>>189
usingなりtypedefでエイリアス作れば?
using Entry_Ptr = std::shared_ptr<Entry>;
193
(1): (JP 0Hbd-DQL8) 2024/01/28(日)23:17 ID:wkb3ctO/H(1) AAS
面白そうだからちょっと書いてみた。大きな変更点はこんな感じ。

・accept が受け取るのは単に Visitor の参照でいい。ここで shared_ptr を使う必要はない。
・Visitor が受け取るのも File や Directory の参照でいい。
・SizeVisitor もいらない。File と Directory はともに Entry の子クラスとして getSize() を実装してるんだから、無理に visitor パターンを使わなくても単に getSize() を呼べばいいだけ。
・iterator() が返すのも VectorIterator の shared_ptr ではなく、単に VectorIterator を返せばいい。

全体的に使う必要がない場面で shared_ptr を使ってるのが目立ったと思う。

外部リンク:wandbox.org
省1
194
(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-MxBP) 2024/01/28(日)23:52 ID:hRRbWEE/0(3/3) AAS
なんかもうポインタをいじるのが面倒になったので値としてやりとりしていいやという気持ちと
標準ライブラリを積極的に活用することにしたらこうなった。
外部リンク:wandbox.org
195: ◆QZaw55cn4c (ワッチョイ 3583-LgJ8) 2024/01/29(月)04:35 ID:M6sadnnj0(1/2) AAS
>>193
拝読させていただきました。なるほど、関係性を示すポインタ=参照なら std::shared_ptr でくるむ必要ガない、というわけですか。
>>194
拝読させていただきました。Entry を値で持つのはいやだなあ。 dectype の使い方を学ばせていただきました。
196: ◆QZaw55cn4c (ワッチョイ 3583-LgJ8) 2024/01/29(月)05:00 ID:M6sadnnj0(2/2) AAS
>>194
std::size_t()
あたりから読めていません。operator() をどう使っているのでしょうか?
197: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-MxBP) 2024/01/29(月)12:08 ID:WXyC0nMC0(1) AAS
スマートポインタを使うにしても std::shared_ptr って必要?
この場合は std::unique_ptr でよくない?
外部リンク:wandbox.org

設計思想によるけどファイルシステムを表現するという前提だと
ひとつのルートディレクトリに連なる全てのエントリは実質的に一体のデータ構造なので
ルートディレクトリエントリの寿命が尽きれば全て解体ってことにしたほうが簡単でいいと思う。

ハードリンクの表現とかも考えるなら事情が変わってくることもあるだろうけど……。
198
(2): (ワッチョイ bda8-xxv9) 2024/01/29(月)21:21 ID:eAAuxXw40(1) AAS
>>189 c++
外部リンク:ideone.com
外部リンク:ideone.com を元に若干の整理を行った

・他の人と同様shared_ptrを削除
 値で持てるところは単に値で持つほうがC++っぽいと思う
 ただ「Entry を値で持つのはいやだなあ」とのことなので部分的に残してる
 Javaの参照型変数をshared_ptrに置き換えようとして困るのは
省13
199
(1): (JP 0Hbd-IHfd) 2024/02/03(土)04:38 ID:bq1KvR69H(1/2) AAS
外部リンク:wandbox.org

なんか「子クラスのコンストラクタに親クラスのオブジェクトを渡して子クラスのメンバを初期化する」(?)みたいなことができちゃってるんだけど、これってどういう仕様でこうなってんの?
Wandbox上だとC++2aではコンパイルできてC++17ではコンパイルできなかったからcpprefjpのC++20の機能の一覧も見てみたけどそれらしいものはなかったし
200
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-MxBP) 2024/02/03(土)09:26 ID:Sz70frqK0(1/2) AAS
>>199
designated initializer も C++20 からの機能なんだけど……それは脇に置く。

この場合は集成体初期化に該当する。
C++17 から基底の初期化も集成体初期化で扱えるので
child c{p};
というように初期化出来ていた。

更に C++20 では集成体初期化を丸括弧で書いても良いことになったので
省2
201: ◆QZaw55cn4c (ワッチョイ 3555-LgJ8) [nb3f-ktu@asahi-net.or.jp] 2024/02/03(土)09:46 ID:21sfApha0(1/2) AAS
>>198
>size_t File::accept(std::shared_ptr<Visitor> v) { return v->visit(std::make_shared<File>(this)); }
> ここがJavaだと単にvisit(this)で済むからスッキリするんだけど
> しかもこれmake_shared(this)だと多重開放するよね??
多重解放(二重解放)しないことはラッパをかませて確認済みです。そう簡単に std::shared_ptr は破綻しないと信じています
外部リンク:ideone.com

それはともかく、皆様のご意見には感謝しております。これからもお伺いさせていただいた際にはよろしくお願いいたします。
202: (JP 0Hbd-IHfd) 2024/02/03(土)09:48 ID:bq1KvR69H(2/2) AAS
>>200
外部リンク[html]:cpprefjp.github.io
これかあ
実は「childにコンストラクタがある場合」とか「childにprivateメンバがある場合」とか「childがparentをprivate継承している場合」とかはコンパイルが通らなくてもう意味が解らなかったんだけど、それもchildが集成体じゃなくなってたからだったんだね
ありがとう、勉強になった
203
(1): ◆QZaw55cn4c (ワッチョイ 3555-LgJ8) 2024/02/03(土)10:15 ID:21sfApha0(2/2) AAS
>>198
>値で持てるところは単に値で持つほうがC++っぽいと思う
時代の流れを感じさせるお言葉です。なにせ K&R1 で育った世代なので(K&R1 では構造体の実体渡しはできず、かならずポインタで渡さなければならなかった)。
C++ においても、コピコンを働かせないために const & を多用する毎日です
204: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-MxBP) 2024/02/03(土)14:49 ID:Sz70frqK0(2/2) AAS
>>203
内部的に値で持つのでもポインタで持つのでもいいけど
「簡単に値として取り出せる」のはあまりよろしくないと思う。
これ (>>189) がおそらくファイルシステムを表現しようとするもの
だという前提を考えたらオブジェクトの構造も
ファイルシステムのモデルを抽象するものであるべきだと思うから。

ファイルはそれがある場所にも意味があるからファイルを象徴するオブジェクトが
省4
205: (ワッチョイ f7da-tydm) 2024/02/04(日)11:53 ID:nmDLw2WS0(1) AAS
はちみつさん頭いいね
アドバイスが丁寧かつ的確でいつも感心する
206: (ワッチョイ 5702-VoFb) 2024/02/05(月)20:47 ID:dvRwXcQL0(1) AAS
ある構造体(集成体)Aについてconstexprでa1, a2, a3・・・といくつか作りました
別のクラスBのメンバ変数にconst A* m_ptrAがあってconstexprで作ったインスタンスのどれかを指すことにします
この時Bのメンバ関数などで、
if(m_ptrA== &a1) という比較・条件分岐を行うのは意味のある比較になっているのでしょうか?
207: (ワッチョイ bfe1-tai3) 2024/02/05(月)21:20 ID:crhbGtf+0(1) AAS
意味はある
でもなるべくそういう判定は無しでいけるように設計したいところだよな
Aクラスを作ってる意義が薄れる

あと細かいこと言えばaddressofを使ったほうが汎用的というのはある
c++のクソっぷりが如実に表れている関数
208: (ワッチョイ 5702-VoFb) 2024/02/06(火)11:08 ID:KJUqS3Ww0(1) AAS
ありがとうございました
本当に列挙型代わりに使えるのなら面白いとも思いましたが
まあ変なコードには間違いないですね
209: はちみつ餃子◆8X2XSCHEME (ワッチョイ 3732-11P2) 2024/02/06(火)12:11 ID:gR/xoQQt0(1) AAS
分岐の内容次第ではあるけど……Bが指しているAのオブジェクトごとに処理を切り替えるってのなら
a1, a2, a3 …… がそれぞれ関数 (関数オブジェクト) を指す (所有する) ようにするのが常道ではあるね。
Bのメンバ関数の中では呼び出しを一文書くだけでいい。

分岐条件を網羅しそこなうしょうもないミスはよくあることだから
手作業での網羅を避けられるならそのほうがいい。
210
(1): (オイコラミネオ MMeb-tjaG) 2024/02/06(火)20:42 ID:WnlTLfV5M(1/2) AAS
「The C Standard says that array indexes are (signed)
integers.
The reason behind that is that pointers and arrays
are close in C. For example, tab[index] is strictly
equivalent to *(tab + index). You can use pointer
arithmetic with negative values, hence an array
index can be negative」
省15
211: (オイコラミネオ MMeb-tjaG) 2024/02/06(火)20:47 ID:WnlTLfV5M(2/2) AAS
何がいいたいかと言えば、32BIT環境だと
符号付き整数の最大値は、
0x7fff_ffff ですから、
char a[0x7fff_ffff];
は合法ですが、
char a[0xffff_ffff];
はエラーです。よって、
省17
212
(1): (ワッチョイ bfe1-tai3) 2024/02/06(火)21:10 ID:cxCkHHUF0(1) AAS
長いからよく読んでないけどコンパイラは型を認識をしてんだから-1と0xFFFFFFFFは区別してるだろ
213: (ワッチョイ 5772-hPhG) 2024/02/06(火)21:25 ID:82wR+tAN0(1) AAS
call -151
214: (ワッチョイ 377c-Hbjn) 2024/02/06(火)22:29 ID:SZ6XHr3I0(1) AAS
C++の配列添字はstd::ptrdiff_t(符号付き)です
215: (JP 0H0b-KLri) 2024/02/06(火)22:36 ID:pbGHBGq1H(1) AAS
配列を宣言するときの構文と添字演算子を使うときの構文を混同してない?前者はブラケットの中身が正じゃなきゃだめで後者は負でもいいってだけの話だと思うんだけど

int main()
{
int hoge[-1]; // ここで負の値を指定することはできない

hoge[-1]; // でもこれはいい (*((hoge)+(-1)) と解釈される)
}

せっかくだからC++23の仕様書も見てみたけど、§9.3.4.5の1には「配列のサイズはstd::size_t型(に変換された)定数式で、その値は0より大きくなければならない」って書いてあって、§7.6.1.2の2には添字は「スコープ無し列挙型か整数型」て書いてあったよ(該当箇所だけつまみ読みしたから正しく読めてる保証はできないけど)
216: はちみつ餃子◆8X2XSCHEME (ワッチョイ 3732-42qO) 2024/02/07(水)01:09 ID:kuiQPbhX0(1/2) AAS
>>210
C の配列宣言子の角括弧内に書ける数値は 0 より大きい値に評価される整数定数式であることが条件で、具体的な型に規定はない。
式の型がなんらかの具体的な型に強制 (型変換) されたりはしないので signed int なら signed int だし、 unsigned int なら unsigned int のままだ。
VLA のときは定数式という条件は外れるけどそれ以外の制限はだいたい同じ。
C の添字演算子の場合もそう。 型は整数であればよい。
(値は制限の範囲内である必要はある。)

どこで見た説明を根拠にしているのか知らんけど、その signed が括弧書きなのは signed 「でもよい」という意味だと思うよ。
217
(1): (ワッチョイ bf9a-Ehcu) 2024/02/07(水)12:42 ID:7NJYw5ei0(1/2) AAS
std::functionって、有効な関数がセットがされているかどうかでブール値を返しますが、
一旦有効化した後にこれを無効化したい場合って、nullptrを代入したりしていいんでしょうか
そしてその場合std::functionの中身はうまいこと解放されたりするんでしょうか
場合によってはラムダ式を使ってオブジェクトをキャプチャしていたりして
あまりその辺りの説明が見当たらない感じがしました
218
(1): (ワッチョイ bfb0-tai3) 2024/02/07(水)12:56 ID:0txhPX/d0(1/2) AAS
それでいいよ
219: はちみつ餃子◆8X2XSCHEME (ワッチョイ 3732-42qO) 2024/02/07(水)13:12 ID:kuiQPbhX0(2/2) AAS
>>217
外部リンク[con]:timsong-cpp.github.io
220: (ワッチョイ bf9a-Ehcu) 2024/02/07(水)14:19 ID:7NJYw5ei0(2/2) AAS
>>218
ありがとうございます!
221: (オイコラミネオ MMeb-tjaG) 2024/02/07(水)18:20 ID:aGYGzZDDM(1/2) AAS
>>212
>長いからよく読んでないけどコンパイラは型
>を認識をしてんだから-1と0xFFFFFFFFは
>区別してるだろ
char a[100-101];
みたいに結果的に -1 になった場合は、
32BITコンパイラの場合、果たして内部で
省7
222
(1): (オイコラミネオ MMeb-tjaG) 2024/02/07(水)18:25 ID:aGYGzZDDM(2/2) AAS
もっと言えば、32BIT ターゲットで、
char a[0x80000000 | 1];
みたいな場合、中味は signed と
捉えれば「負数」ですが、unisgned と
捉えれば、0x80000001 という大きな値
に過ぎません。
どちらもエラーになる可能性が高いですが。
223
(1): (ワッチョイ bfb0-tai3) 2024/02/07(水)18:40 ID:0txhPX/d0(2/2) AAS
リテラルにも型がある
1はint
0x80000000はunsigned int
演算結果はunsigned int
ルール決まってるから
224: (ワッチョイ d7f0-P/QA) 2024/02/07(水)18:55 ID:V2I2BIn30(1) AAS
x86のアセンブラのディスプレースメントは符号付いてるけどな
他のマシン系はワカランけど
225
(1): (ワッチョイ bfa4-syIJ) 2024/02/07(水)20:52 ID:L6yrYnPT0(1) AAS
>>222
32bit環境には64bit整数はないと思ってるの??
226: (オイコラミネオ MMeb-tjaG) 2024/02/08(木)18:55 ID:DVUqgRU9M(1/2) AAS
>>223
なるほど。そうなるわけですね。
本当に書いた人の意図がどうかに関わらず、
規則で決まっていると。
1UL のように書いてあれば unsigned。
そして、UL のようなものを書いてない場合、
1 のように小さな値は、signed ですが、signed の
省2
227: (オイコラミネオ MMeb-tjaG) 2024/02/08(木)18:56 ID:DVUqgRU9M(2/2) AAS
>>225
そういう問題ではないようですが。
228
(3): (ワッチョイ 5763-dZsi) 2024/02/10(土)12:18 ID:KJGevrBa0(1/2) AAS
>>185
>>183の主張の
>一方、例外を生じないライブラリの使い方(関数の呼び出し方)を心掛けるかどうか。これなら選択肢がある
が完全に読み飛ばされている件について:

例外を生じないライブラリの使い方で設計したら、funcB()から例外が飛んでくるのはバグなので
調査と修正の対象になる。
(結果的にやっぱtry { funcB(); } catch (/*略*/) { ... } いるじゃーん?となる可能性はあるがたいていはそうはならない
省1
229
(2): (ワッチョイ 5763-dZsi) 2024/02/10(土)12:26 ID:KJGevrBa0(2/2) AAS
>>186
>catchしたらテストケースが増えるかどうかという話とはなんも関係がない。
あっる
catchする必要性箇所を設計で厳選すればcatchが減るのだからテストケースは減らし得る

例外を使う場合:
スルーしたりcatchして再スローが生じるfoo()の呼び出し箇所(とするのが現実的でないなら呼び出しパティーン)がm個、
スルーしたりcatchして再スローする段数が(簡単のためここでは平均とする)a個、
省4
230: (ワッチョイ 377c-Hbjn) 2024/02/10(土)16:57 ID:Qku1mp0Z0(1) AAS
>>228
読み飛ばしてねえよ
funcB()は処理を中断すべきエラーが発生する可能性があるんだろ?だったらそれを適切に処理して後続の処理をやったりやらなかったりする必要があるわけだろ?
それはfuncB()がエラーを例外で返そうと戻り値で返そうとなんか他の方法で返そうと何も変わらないはずじゃないか
231
(1): (ワッチョイ ffcf-HxQs) 2024/02/10(土)18:55 ID:0f3gz8pL0(1/3) AAS
>>229
>例外が飛んでこないことを確認するのテストケースがm個のオーダーで要るだけ……

いったい何をテストしようとしているんだろうか。
仮に「例外が飛んでこないことを確認するテスト」なるものができたとして、catchしたらそれができなくなるのか?

前半のよくわからない計算はcatch句を書いたらそのC0網羅のためのテストケースが必要になるとかいうことなんだろうか。
232
(2): (ワッチョイ ffcf-HxQs) 2024/02/10(土)20:56 ID:0f3gz8pL0(2/3) AAS
>>228
>>>188のように自分が何をやっているのか認識しないまませき止めるのは論外すぐる……

どこが論外?>>169でぜんぜん問題ないが。
233
(2): (ブーイモ MM8f-tai3) 2024/02/10(土)21:22 ID:dL54PN9cM(1) AAS
>>232
それは未知の例外投げてきたライブラリを信用し過ぎ
製品ならそういう「たぶん大丈夫っしょw」的なのは許されないね
234
(1): (ワッチョイ ffcf-HxQs) 2024/02/10(土)22:40 ID:0f3gz8pL0(3/3) AAS
>>233
逆だろ。catchしないのはライブらにが未知の例外を投げてこないだろうと信用してるってことだろ。
235
(1): (ワッチョイ bf27-tai3) 2024/02/10(土)23:44 ID:iRyhZExm0(1) AAS
>>234
catchしないということは終了させるということ
見かけ上動き続けたらいいってもんじゃない
236
(2): (ワッチョイ ef63-uLm/) 2024/02/11(日)03:08 ID:4PD3HqyC0(1/5) AAS
>>232
それは未知の例外投げてきた原因を調査しなさすぎ
製品ならそういう「たぶん大丈夫っしょw」的なのは許されないね

>>233
ドキュメント通りに例外発生条件にならないように呼んでやったのに
例外を飛ばしてくるライブラリって一体……
製品やぞ……
237
(2): (ワッチョイ ef63-uLm/) 2024/02/11(日)03:16 ID:4PD3HqyC0(2/5) AAS
質問なのですが
Q1. std::ldexp(0.0, 0.0) が0.0なのですがこれは 0^0 = 0という大胆な主張なのですが何で決まっているの?
STLがIEEE735に従っているだけ?

Q2. 最小の(絶対値が最小の正の)非正規化数は
const auto min_expn = std::numeric_limits<double>::min_exponent;
const auto digits = std::numeric_limits<double>::digits;
として、std::ldexp(0.5, min_expn - digits + 1) で正しい?
省3
238: (ワッチョイ ef63-uLm/) 2024/02/11(日)03:25 ID:4PD3HqyC0(3/5) AAS
訂正 |||。n_
誤1: IEEE735
正1: IEEE754
誤2: 非正規化数
正2: 非正規数
239: (ワッチョイ 1e27-2ki6) 2024/02/11(日)06:22 ID:2tL2xZqD0(1/3) AAS
>>237
wandboxに書いてみ
240: はちみつ餃子◆8X2XSCHEME (ワッチョイ f740-Kvqi) 2024/02/11(日)07:55 ID:nHqSm2on0(1) AAS
>>237
決まっていない。言語仕様としては未規定。
std::numeric_limits::is_iec559 が真であるならその挙動をあてにしていいがそうでないときは各環境の事情による。
241
(2): (ワッチョイ 16cf-BOeC) 2024/02/11(日)09:19 ID:XOPhWcHA0(1/5) AAS
>>236
あんたの認識じゃ catchする=見かけ上動き続ける なんだ?
なんか根本的に勘違いしてる気がする。
242
(1): (ワッチョイ 637c-IqbK) 2024/02/11(日)09:29 ID:9XvrSVak0(1/2) AAS
例外は「関数外にエラー発生を伝える」ための「方法の一つ」でしかない
関数の処理がどんなエラーを発生させうるか、受け取った外側の処理がその情報をどう取り扱うべきかという問題とは完全に直交してる
(言語ごとにある程度の慣例はあるけどあくまで慣例)

例外に変なこだわりや的外れな批判をしてる奴は大体そこを勘違いしてる
243: (ワッチョイ 16cf-BOeC) 2024/02/11(日)09:47 ID:XOPhWcHA0(2/5) AAS
アンカ間違えた、すまん
>>241>>235宛な。
244
(2): (ワッチョイ 1e27-2ki6) 2024/02/11(日)09:47 ID:2tL2xZqD0(2/3) AAS
>>242
お前はバグのないお花畑を考えてるからそういう理想的な抽象論を持ち出すんだよ
c++の現実は道を踏み外したら即カオス
stlのコンテナのpopに返り値がない理由は知ってるか?
あのレベルの考察でソフトウェア設計している人間が世の中にどれだけいると思う?
245
(2): (ワッチョイ 1e27-2ki6) 2024/02/11(日)09:55 ID:2tL2xZqD0(3/3) AAS
>>241
>>169を否定している
知らない例外が飛んできた場合にcatchして握りつぶしてそのまま動作を継続するかどうかって話な
246: (ワッチョイ 637c-IqbK) 2024/02/11(日)10:07 ID:9XvrSVak0(2/2) AAS
>>244
バグのあるなしなんか関係ない設計の話だし、「例外はエラー伝達の具体的方法の一つ」って話のどこが抽象的なのかも分からないし、
「C++の現実」とか「カオス」が具体的に何のことで何の関係があるかも分からないし
STLにpopがないのはnoexcept moveがない時代に例外安全に出来なかったからだけど今の話に何の関係があるかわからないし
そんなのまともなC++erなら誰だって考えて設計してると思うけど、そうでないタコの話が何の関係あるかわからないし何もかも分からなすぎてすごい
仕事でそんなドキュメントやレビューコメント出すなよ

>>245
省4
247: (ワッチョイ 16cf-BOeC) 2024/02/11(日)10:14 ID:XOPhWcHA0(3/5) AAS
>>245

そのtryブロックの処理が失敗したものとするって書いてあるじゃん。
248
(1): (ワッチョイ ef63-uLm/) 2024/02/11(日)11:18 ID:4PD3HqyC0(4/5) AAS
>>231
>前半のよくわからない計算はcatch句を書いたらそのC0網羅のためのテストケースが必要になるとかいうことなんだろうか
例外が関数の階層をぶち抜いてfall-throughしてくることを忘れている発言
1. catchが書かれた関数が正しくcatchし、適切に処理するか(処理してせき止め or/and 必要な場合再スロー)(←要テスト!
2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!

2をテストもせずに放置するとおかしくなる例は>>183のとうーり
これにより、例外を生じる関数foo()の呼び出しパティーンn個それぞれに対し、a個のテストが必要になっる
省3
249
(2): (ワッチョイ ef63-uLm/) 2024/02/11(日)11:18 ID:4PD3HqyC0(5/5) AAS
>>244
以下の主張のどこが抽象論なのかkwsk、
1. ライブラリのドキュメントに従い、可能な限り例外を生じない使い方で設計する(>>236
2. 例外が生じない前提としたところは例外が生じないことをテストする(m個のオーダー)(>>229
3. 1と2の過程で意図に反して飛んでくる例外がある場合は原因を調査し、修正を試みる(>>228 例外が飛んで来たらバグ
4. 3を意図通りの形で解決できないことが判明した場合は
  (ライブラリの使用方法の当方の誤解、ライブラリのドキュメントの不備、ライブラリの作りの粗さによりこれはあり得る、
省10
250
(1): (ワッチョイ 16cf-BOeC) 2024/02/11(日)12:01 ID:XOPhWcHA0(4/5) AAS
>>248
>例外が関数の階層をぶち抜いてfall-throughしてくることを忘れている発言

やっぱり意味不明だな。catchすれば「階層をぶち抜いて」ってことはないわけだが。

>2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!

もしそのテストが必要なんだとすれば、catchしない場合はその例外が通過する
呼び出し階層全部でテストをしなきゃならないってことになるが。
251
(1): (ワッチョイ 16cf-BOeC) 2024/02/11(日)12:31 ID:XOPhWcHA0(5/5) AAS
>>249
>1. 例外をせき止めれば良い(←処理不能な未知の例外が飛んでくることが無いというライブラリに対する全幅の信頼

なるほどな。
catchする⇒無視する、握りつぶす って脳内変換されてんだな。

catch書いたからといって上に挙げられたようなテストができなくなるわけじゃないっしょ。必要と思うならやればいい。

3.の意図しない例外の原因調査なんて main() に例外が上がってきてプログラムが落ちてからより
発生個所に近い下層で catch できた方がはるかに調査しやすいと思うんだがな。感覚が違うなあ。
252
(1): (スプッッ Sd52-oDfP) 2024/02/11(日)12:37 ID:AyRTgUB7d(1) AAS
仕様書や規格書はその意図を正確に読み取ろうとするのに
掲示板の他人の書き込みは積極的に曲解しようとするのは何故か?
253
(1): (ワッチョイ ef8b-u/MX) 2024/02/11(日)12:44 ID:E8bU9+6D0(1) AAS
見下しているからよ
こいつらは俺より下なはずと
254: (ワッチョイ 5eda-5kwM) 2024/02/12(月)07:49 ID:4SfsXRB60(1) AAS
本気で面白いと思ってやってんだろう
255: (ワッチョイ 637c-IqbK) 2024/02/12(月)08:44 ID:WngRm50l0(1) AAS
例外は糞!危険!意味不明!テスト漏れる!って言ってる奴ほど
if (err != 0) { return -1; }が大好きなんだよな
本質的にやってること変わらないのに
256
(2): (ワッチョイ eba6-IqbK) 2024/02/12(月)15:42 ID:NdUIQhSh0(1) AAS
ファイル名に年月が使えないの困ります。
2024/02/11_データ.txt
とか
257: (ワッチョイ 4b5a-nvep) 2024/02/12(月)15:46 ID:QicyHe7E0(1) AAS
>>256
それ検索性最悪だから良くないんだよなぁ。
データ/2024/02/11/データ.txt
データ.txt/2024/02/11/データ.txt
あたりならまだ許せる。
258: (ワッチョイ 6fac-ND3n) 2024/02/12(月)16:40 ID:MdmHk5EH0(1) AAS
ふつう年月日はハイフンで区切るよね
259: はちみつ餃子◆8X2XSCHEME (ワッチョイ 6332-A7R9) 2024/02/12(月)17:02 ID:4VueJhli0(1/2) AAS
スラッシュを使う習慣が悪いわけではないが
プログラマの感覚だと ISO 8601 の方式に馴染みが有ることが多いってのはある。
1-
あと 743 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.054s