!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part164
https://mevius.5ch.net/test/read.cgi/tech/1683600652/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C++相談室 part165
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ efda-9b8G)
2023/10/31(火) 07:37:38.52ID:+ZyYyqMO02デフォルトの名無しさん (ワッチョイ 194e-FUJr)
2023/10/31(火) 08:59:52.78ID:DBRUqQAF0 >1 乙です
前スレ 例外はループ脱出に使うような物じゃない、との意見に賛成です。
自分は、例外は「起こり得るけどいちいちエラー処理を書いたらアホな話を」「処理呼び出し毎ではないレベルで」「エラー対処コーディングするもの」と思ってます。
具体例は、
リンクリストなどコレクション操作でメモリ不足が起きた場合、のエラー処理。
コレクションの追加や削除を頻繁に行うコードって、大体はもっと概念レベルが高い事をやってるので、1件の追加 レベルでエラー処理書いてたらアホな感じになる。
しかも、GUI プロセスを作ってて何か上手く動かないから特定のエラーだけを画面に表示したい、など、ことさら明確に対処したい場合です。プロセスが落ちればいいだけなら、main()の外側、の仕様がやってくれる。
古い本の情報だけど、SBリップマンによると、MS VC++と、sun、hp-ux の C++コンパイラで、例外を使う/使わないで速度性能調査したそうで、 4~6% の速度劣化があったとの事です。
前スレ 例外はループ脱出に使うような物じゃない、との意見に賛成です。
自分は、例外は「起こり得るけどいちいちエラー処理を書いたらアホな話を」「処理呼び出し毎ではないレベルで」「エラー対処コーディングするもの」と思ってます。
具体例は、
リンクリストなどコレクション操作でメモリ不足が起きた場合、のエラー処理。
コレクションの追加や削除を頻繁に行うコードって、大体はもっと概念レベルが高い事をやってるので、1件の追加 レベルでエラー処理書いてたらアホな感じになる。
しかも、GUI プロセスを作ってて何か上手く動かないから特定のエラーだけを画面に表示したい、など、ことさら明確に対処したい場合です。プロセスが落ちればいいだけなら、main()の外側、の仕様がやってくれる。
古い本の情報だけど、SBリップマンによると、MS VC++と、sun、hp-ux の C++コンパイラで、例外を使う/使わないで速度性能調査したそうで、 4~6% の速度劣化があったとの事です。
3デフォルトの名無しさん (ワッチョイ 6105-NMSe)
2023/10/31(火) 09:37:52.87ID:BnGGo/620 スレ終了間際に現れる質問いいですかオジなんなの?w.
4デフォルトの名無しさん (スププ Sd33-wFsA)
2023/10/31(火) 09:38:43.79ID:yneNhI3/d Pythonで言うと
forのStopIterationは へっ? だし
int()のValueErrorですら微妙
forのStopIterationは へっ? だし
int()のValueErrorですら微妙
5デフォルトの名無しさん (ワッチョイ 5397-ggTH)
2023/10/31(火) 11:32:52.74ID:5ddE/sJo0 うるせえstd::stoi()ぶつけんぞ
6デフォルトの名無しさん (アウアウウー Sad5-U1R4)
2023/10/31(火) 16:49:04.12ID:Xd7Dooyma >>3
ヘッダーの最後の行の #endif みたいなものだよ
ヘッダーの最後の行の #endif みたいなものだよ
7デフォルトの名無しさん (ワッチョイ 6105-NMSe)
2023/10/31(火) 23:53:09.44ID:BnGGo/620 >>6
と、言うことは対になる#ifがどこかに?
と、言うことは対になる#ifがどこかに?
8デフォルトの名無しさん (ワッチョイ 1945-FUJr)
2023/11/01(水) 10:50:51.42ID:NLQyML8a0 …(いくら5chとは言え、複数の人が集まる場所で、何かを教えて頂いてもお礼も言えず、面白い返しもできない人がいたとして。その人がプログラムに関してだけは素晴らしいコードを書ける、なんてことはあるのかな?と思う瞬間が人生の中であったり、なかったり)
9デフォルトの名無しさん (ワッチョイ 297c-tLJy)
2023/11/01(水) 12:51:50.53ID:h0xHi7n60 (礼儀とプログラミングスキルは関係ないと思う)
10デフォルトの名無しさん (ワッチョイ 13ad-feYx)
2023/11/01(水) 12:53:02.45ID:c3s+uM8y0 (俺の昼飯どこ行った?)
11デフォルトの名無しさん (アウアウウー Sad5-U1R4)
2023/11/01(水) 16:02:16.42ID:G1jsC9Xya (今日の昼飯はセブンのサバ塩焼弁当にしとくか・・・)
12デフォルトの名無しさん (ワッチョイ 1939-PupP)
2023/11/01(水) 18:24:49.00ID:m9AntJVX0 コードにはある程度そいつの人間性は反映されるな
スレチな話題ではあるけど
スレチな話題ではあるけど
13デフォルトの名無しさん (ワッチョイ b1f8-XCYI)
2023/11/01(水) 23:07:31.46ID:PfaqlzcX0 (本物のプログラマはPascalを使わない)
14デフォルトの名無しさん (ワッチョイ 6105-NMSe)
2023/11/01(水) 23:30:59.94ID:ZqfN6pKA0 (でもPythonは使ってもいいのかな?って時々思う)
15デフォルトの名無しさん (オイコラミネオ MM6d-H9h+)
2023/11/02(木) 00:03:32.45ID:aqkFofyNM そろそろキャストは止めてスマポ使いましょう
16デフォルトの名無しさん (ワッチョイ d94e-vgKx)
2023/11/02(木) 02:43:15.24ID:+4XO/JeH0 まちゅまちゅの3Dライブみた
前も思ったけどみこちとかなたそのダンス、めっちゃシンクロ率高い
リズムがぴったり一緒なんだよね
ダンスほんとにうまくなったよな
前も思ったけどみこちとかなたそのダンス、めっちゃシンクロ率高い
リズムがぴったり一緒なんだよね
ダンスほんとにうまくなったよな
17デフォルトの名無しさん (ワッチョイ d94e-vgKx)
2023/11/02(木) 02:43:45.89ID:+4XO/JeH0 誤爆った(´・ω・`)
18デフォルトの名無しさん (ワッチョイ 1bda-9b8G)
2023/11/02(木) 07:17:03.35ID:Hn8AmdCQ0 ホロライブか
19デフォルトの名無しさん (アウアウウー Sad5-U1R4)
2023/11/02(木) 10:44:27.02ID:BqsrFUCWa (まちゅまちゅの3Dライブ?・・・ちょっと気になる)
20デフォルトの名無しさん (ワッチョイ 6105-NMSe)
2023/11/02(木) 23:48:48.29ID:ebj85xCu0 (((お前ら括弧ばっかり使ってlisperかよ?)))
21デフォルトの名無しさん (ワッチョイ a905-fLgT)
2023/11/03(金) 10:21:23.72ID:sUQ44pbr0 ←vーー( ゚∀゚)!ー^ー
22デフォルトの名無しさん (ワッチョイ 6276-0SSA)
2023/11/04(土) 18:56:36.20ID:Y/q1DSa/0 コピーとムーブの挙動、というか管理難しい。。難しくない?
23はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0979-oDOv)
2023/11/04(土) 20:24:08.34ID:1CTu6tq50 コピーやムーブはパターンに沿って管理できるからそんなに難しいとは感じないな。
ワイとしては参照の畳み込み (Reference collapsing) や変換の規則を毎回のように確認するんだけど全然頭に入ってこない。
参照はオブジェクトではないので逆に言えば値に対応する型が参照になることはないのだが、それはそれとして参照を含む型があり得るというのが今でも腑に落ちない。
ワイとしては参照の畳み込み (Reference collapsing) や変換の規則を毎回のように確認するんだけど全然頭に入ってこない。
参照はオブジェクトではないので逆に言えば値に対応する型が参照になることはないのだが、それはそれとして参照を含む型があり得るというのが今でも腑に落ちない。
24デフォルトの名無しさん (ワントンキン MM92-JcAe)
2023/11/04(土) 20:28:09.97ID:KOZ2F//lM 参照しか知らんものだけど、ムーブて何か簡単に教えて
参照は実装上ただのポインタじゃん
ムーブはなにがどうなるん?
参照は実装上ただのポインタじゃん
ムーブはなにがどうなるん?
25はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0979-oDOv)
2023/11/04(土) 20:29:19.85ID:1CTu6tq50 ムーブコンストラクタが起動する。
それだけ。
それだけ。
26デフォルトの名無しさん (ワッチョイ 658d-qcxi)
2023/11/05(日) 09:49:50.04ID:6vgG9vCb0 >>24
考え方としては、shallow copyを二重開放リスクを避けて行うための仕組み。
右辺値という特別な一時変数のコピーで特別なコピー(ムーブコンストラクタ)を実行するようにして、クラス設計者が必要に応じてshallow copyを実装しやすくしている。
考え方としては、shallow copyを二重開放リスクを避けて行うための仕組み。
右辺値という特別な一時変数のコピーで特別なコピー(ムーブコンストラクタ)を実行するようにして、クラス設計者が必要に応じてshallow copyを実装しやすくしている。
27デフォルトの名無しさん (アウアウウー Saa5-CWlg)
2023/11/05(日) 10:41:04.16ID:ol9bMVcca >>24
moveはRustで言う所有権の移動じゃないか
moveはRustで言う所有権の移動じゃないか
28デフォルトの名無しさん (ワッチョイ 454e-0SSA)
2023/11/05(日) 13:06:56.97ID:Qkn7cpbH0 >>24
aに戻り値などの一時オブジェクトbをコピーすると通常は
aでメモリを確保
bからメモリコピー
bのデストラクタでメモリを破棄
という動作になるけど、moveの場合
aにbでメモリをポインタで持ってくる
bのインスタンスでは破棄したことにする
とすれば無駄なメモリ確保とコピーが発生せず効率が良い
aに戻り値などの一時オブジェクトbをコピーすると通常は
aでメモリを確保
bからメモリコピー
bのデストラクタでメモリを破棄
という動作になるけど、moveの場合
aにbでメモリをポインタで持ってくる
bのインスタンスでは破棄したことにする
とすれば無駄なメモリ確保とコピーが発生せず効率が良い
29はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-9NWm)
2023/11/05(日) 13:39:42.02ID:pHGS9osC0 標準ライブラリでのムーブは所有権 (ownership) の概念を前提として構築されているし、
慣例としてもそのようにするものではあるんだが
言語としてはムーブコンストラクタ (またはムーブ代入演算子) を呼び出すというだけで
所有権の面倒をみる機能は何もない。
(辻褄が合うようにするのはプログラマの責任。)
何が起きているのかは所有権の概念と実装レベルで分けて考えたほうがいいと思う。
どう説明していいかわからんから関連する要素を箇条書きにしたらこんな感じかな。
・ それがコピーの文脈であるかムーブの文脈であるか区別は出来る
・ 一般的にムーブの文脈であった場合 (寿命が尽きる直前の一時オブジェクトの再利用が出来る場合) にコピーより効率が良い動作が出来る可能性がある
・ どのように効率がよくなるのかはそのクラス (のムーブコンストラクタやムーブ代入演算子) の定義次第
・ 典型的なムーブの実装はリソース本体を指すポインタの交換によって実現される
・ ユーザーが定義を与えなかった場合のデフォルトのムーブは全てのサブオブジェクトをムーブすることになっている
慣例としてもそのようにするものではあるんだが
言語としてはムーブコンストラクタ (またはムーブ代入演算子) を呼び出すというだけで
所有権の面倒をみる機能は何もない。
(辻褄が合うようにするのはプログラマの責任。)
何が起きているのかは所有権の概念と実装レベルで分けて考えたほうがいいと思う。
どう説明していいかわからんから関連する要素を箇条書きにしたらこんな感じかな。
・ それがコピーの文脈であるかムーブの文脈であるか区別は出来る
・ 一般的にムーブの文脈であった場合 (寿命が尽きる直前の一時オブジェクトの再利用が出来る場合) にコピーより効率が良い動作が出来る可能性がある
・ どのように効率がよくなるのかはそのクラス (のムーブコンストラクタやムーブ代入演算子) の定義次第
・ 典型的なムーブの実装はリソース本体を指すポインタの交換によって実現される
・ ユーザーが定義を与えなかった場合のデフォルトのムーブは全てのサブオブジェクトをムーブすることになっている
30デフォルトの名無しさん (ワッチョイ 454e-0SSA)
2023/11/05(日) 13:42:20.39ID:Qkn7cpbH0 で、このmove動作を定義するために、
一時オブジェクト(右辺値)に対する参照動作を関数定義できるようになっている
一時オブジェクト(右辺値)に対する参照動作を関数定義できるようになっている
31デフォルトの名無しさん (ワントンキン MM92-JcAe)
2023/11/05(日) 14:05:22.83ID:wAmDr/fyM ムーブされるとそのポインタは変わってしまうと思うけど、そういうケースはないの?
32デフォルトの名無しさん (ワッチョイ 454e-0SSA)
2023/11/05(日) 14:18:09.07ID:Qkn7cpbH0 言っている意味がよく分からないが、純粋なポインタにはムーブという概念はないよ
ムーブを定義できるのはクラスに対してだけ
他の人も言っているようにムーブといっても実体は単なる関数呼び出しなので、その中でプログラマが自分の責任で必要なコードを書くことになる
ムーブを定義できるのはクラスに対してだけ
他の人も言っているようにムーブといっても実体は単なる関数呼び出しなので、その中でプログラマが自分の責任で必要なコードを書くことになる
33デフォルトの名無しさん (ワッチョイ 653d-2MVi)
2023/11/05(日) 14:58:05.35ID:vIwIC4VV0 質問した人じゃないけど説明ありがたいです
ムーブ難しいと思ってたけどもっと早く勉強して仕事で使うべきだった
(文法解析した要素をポインタいじって並べ変えるんだけど…
二重所有を防ぐのを手作業コーディングで責任を持たなければならないプログラムを作ってしまった)
ムーブ難しいと思ってたけどもっと早く勉強して仕事で使うべきだった
(文法解析した要素をポインタいじって並べ変えるんだけど…
二重所有を防ぐのを手作業コーディングで責任を持たなければならないプログラムを作ってしまった)
34デフォルトの名無しさん (ワッチョイ 454e-0SSA)
2023/11/05(日) 15:15:28.75ID:Qkn7cpbH0 ただ、右辺値参照を使うと、通常の参照や代入と使い分けるためにconstやnoexceptを厳密に指定しないといけなくなりがちだから、
その辺の総合的な理解が必要になってくるのは注意点だね
constは一度付け始めるとライブラリ全部に伝染するからな・・・それを嫌って使わない派も結構いる(いた)よね
その辺の総合的な理解が必要になってくるのは注意点だね
constは一度付け始めるとライブラリ全部に伝染するからな・・・それを嫌って使わない派も結構いる(いた)よね
35デフォルトの名無しさん (ワッチョイ ed7c-9LC0)
2023/11/05(日) 15:39:17.77ID:Vx5ySS520 実際のコードだとポインタのムーブはunique_ptrとかにぶん投げで、自分で移動コード書くことはまずないな
自分でムーブ特殊関数の中身書くのはハンドル的なもののムーブを実現したいときくらい
自分でムーブ特殊関数の中身書くのはハンドル的なもののムーブを実現したいときくらい
36デフォルトの名無しさん (アウアウウー Saa5-3l7D)
2023/11/05(日) 16:12:35.07ID:jiV3XvQ2a とにかく unique_ptr が便利すぎるから何でもかんでも全部 unique_ptr 使うようになってしまった
まあそれでいいのかもしれないが
まあそれでいいのかもしれないが
37デフォルトの名無しさん (アウアウウー Saa5-CWlg)
2023/11/05(日) 16:21:29.02ID:ol9bMVcca38はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-9NWm)
2023/11/05(日) 17:10:59.04ID:pHGS9osC0 所有権管理も結局はプログラマが書く (間違いを部分的にコンパイルエラーとして検出できることはある)、
所有権って具体的に何なんだってのはクラス定義に押し込めるという風に管理のレイヤを分けることが出来るってわけ。
クラス定義をした後は具体的に何をやってるのかを忘れて
所有権というものだと思い込むことが出来るという抽象化の仕組み。
所有権って具体的に何なんだってのはクラス定義に押し込めるという風に管理のレイヤを分けることが出来るってわけ。
クラス定義をした後は具体的に何をやってるのかを忘れて
所有権というものだと思い込むことが出来るという抽象化の仕組み。
39デフォルトの名無しさん (ワッチョイ 6540-pUwU)
2023/11/07(火) 10:10:32.04ID:5c9945xO040デフォルトの名無しさん (ワッチョイ 653a-qcxi)
2023/11/07(火) 19:02:58.77ID:Z7KocuHY0 >>33
エスパーするけど多分その用途だとmoveは使えない。
データを共有している感じなので素直にshared ptrを使うのがいいかと。shared ptrで性能的にキツイならshared ptrを参照渡しするか。
エスパーするけど多分その用途だとmoveは使えない。
データを共有している感じなので素直にshared ptrを使うのがいいかと。shared ptrで性能的にキツイならshared ptrを参照渡しするか。
41デフォルトの名無しさん (ワッチョイ 653a-qcxi)
2023/11/07(火) 19:09:56.10ID:Z7KocuHY0 >>40
ちょっと補足すると、戻り値をshared ptrの参照にするのはNGですな。そこは素直にRVOに期待するのが良いか。
ちょっと補足すると、戻り値をshared ptrの参照にするのはNGですな。そこは素直にRVOに期待するのが良いか。
42デフォルトの名無しさん (ワッチョイ e5a7-cSrA)
2023/11/09(木) 17:23:48.54ID:Op1F6lz40 VC++なんだけど32bitで_thiscallを関数ポインタ経由で呼ぶことってasm使わないと不可能?
メンバ関数を関数ポインタ変数とすることは出来てもそこから第一引数にインスタンス入れたりしてもコンパイル時エラーになる
メンバ関数を関数ポインタ変数とすることは出来てもそこから第一引数にインスタンス入れたりしてもコンパイル時エラーになる
43デフォルトの名無しさん (ワッチョイ 454e-0SSA)
2023/11/09(木) 18:09:02.18ID:vDu6brxv0 >>42
メンバ関数をポインタ経由で呼び出したいってことならstd::bindでできるはず
メンバ関数をポインタ経由で呼び出したいってことならstd::bindでできるはず
44はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-9NWm)
2023/11/09(木) 18:24:20.63ID:viBVvDAP0 VC++ のことは知らんけどメンバ関数ポインタは関数ポインタより大きい実装になってる処理系がある。
メンバ関数ポインタを関数ポインタに変換した時点で呼び出すのに必要な情報が失われているかもしれない。
メンバ関数ポインタを関数ポインタに変換した時点で呼び出すのに必要な情報が失われているかもしれない。
45デフォルトの名無しさん (ブーイモ MM62-wwCg)
2023/11/09(木) 19:04:30.42ID:YhbH7ApDM MJD?
46デフォルトの名無しさん (オイコラミネオ MM49-wdyj)
2023/11/09(木) 19:13:19.18ID:RZ9WOZDMM エラーメッセージにヒントはない?
47はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 097f-Nt8Z)
2023/11/09(木) 19:58:26.06ID:u3KRHVuW0 基本的には言語の規定内でやるに越したことはないので無理な型変換をしないで済ませられるように出来るものならそうしたほうがいい。
どうしてもそうできない事情がある(と質問者が認識している)ならもうちょっと詳しい状況をコードで示して欲しい。
どうしてもそうできない事情がある(と質問者が認識している)ならもうちょっと詳しい状況をコードで示して欲しい。
48デフォルトの名無しさん (ワッチョイ e5a7-cSrA)
2023/11/09(木) 21:12:03.97ID:Op1F6lz40 >>43
ありがとう、逆アセ見たら完璧にthiscallになってた
メンバ関数っていうかthiscall指定したものは32bitだとecxレジスタにthisポインタが隠されていてそれ以外はstdcallと同じ
なので下みたいに第一引数にインスタンスのポインタを入れる事でecxに代入される感じになりそうだなーと思ったら無理だった
ちなみに64bitの場合はどちらもfastcallで同じだから単純に第一引数にthisポインタが隠されてるだけ
auto pFunc = CDate::addDay; // CDate addDay(int value)
CDate tomorrow = pFunc(&instance, 1);
ありがとう、逆アセ見たら完璧にthiscallになってた
メンバ関数っていうかthiscall指定したものは32bitだとecxレジスタにthisポインタが隠されていてそれ以外はstdcallと同じ
なので下みたいに第一引数にインスタンスのポインタを入れる事でecxに代入される感じになりそうだなーと思ったら無理だった
ちなみに64bitの場合はどちらもfastcallで同じだから単純に第一引数にthisポインタが隠されてるだけ
auto pFunc = CDate::addDay; // CDate addDay(int value)
CDate tomorrow = pFunc(&instance, 1);
49デフォルトの名無しさん (ワッチョイ e5a7-cSrA)
2023/11/09(木) 21:28:58.67ID:Op1F6lz40 てかググったら簡単なシミュレーション方法載せてるブログあった
_fastcallで宣言して第二引数のedxを捨て駒にする事で疑似_thiscallになる
つまりint(__fastcall * pFunc)(CDate*, void*, int)とすれば一応アセンブラ的な辻褄は合う事になる
_fastcallで宣言して第二引数のedxを捨て駒にする事で疑似_thiscallになる
つまりint(__fastcall * pFunc)(CDate*, void*, int)とすれば一応アセンブラ的な辻褄は合う事になる
50デフォルトの名無しさん (ワッチョイ 1f63-1OcW)
2023/11/12(日) 10:07:59.74ID:j2Y95IYf0 質問なのですが型Tの参照を返す関数 const T& foo() の戻り値をautoのいくつかのバリエーションで受けてアドレスを見て見たのですが
auto x = foo();
auto& y = foo();
const auto z = foo();
const auto& zz = foo();
const volatile auto& zzz = foo();
cout << "&original=" << &g_vec << endl; // &original = 00B013D8 (このアドレスは一例)
cout << "&x=" << &x << endl; // &x = 010FF8AC // コピー(意図しないかも?)
cout << "&y=" << &y << endl; // &y = 00B013D8 // 参照(OK)
cout << "&z=" << &z << endl; // &z = 010FF888 // コピー(意図しないかも?)
cout << "&zz=" << &zz << endl; // &zz = 00B013D8 // 参照(OK)
cout << "&zzz=" << &zzz << endl; // &zzz = 1 // !!!!
という行末コメントに記載の結果になったお
Q1. 参照で受けたい場合は auto でなく auto& とせねばならない、で正しい?
Q2. 間違えてauto で受けても動いてしまい発見し難いケースが多いと思うのですが
意図しないパフォーマンス低下になるので防ぐ対策とか無い?
Q3. zzzのアドレスが1になるのは一体……
MSVC2019使用、言語の設定はC++14、
auto x = foo();
auto& y = foo();
const auto z = foo();
const auto& zz = foo();
const volatile auto& zzz = foo();
cout << "&original=" << &g_vec << endl; // &original = 00B013D8 (このアドレスは一例)
cout << "&x=" << &x << endl; // &x = 010FF8AC // コピー(意図しないかも?)
cout << "&y=" << &y << endl; // &y = 00B013D8 // 参照(OK)
cout << "&z=" << &z << endl; // &z = 010FF888 // コピー(意図しないかも?)
cout << "&zz=" << &zz << endl; // &zz = 00B013D8 // 参照(OK)
cout << "&zzz=" << &zzz << endl; // &zzz = 1 // !!!!
という行末コメントに記載の結果になったお
Q1. 参照で受けたい場合は auto でなく auto& とせねばならない、で正しい?
Q2. 間違えてauto で受けても動いてしまい発見し難いケースが多いと思うのですが
意図しないパフォーマンス低下になるので防ぐ対策とか無い?
Q3. zzzのアドレスが1になるのは一体……
MSVC2019使用、言語の設定はC++14、
51はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-zQu6)
2023/11/12(日) 11:02:37.63ID:O0gb6uIB0 >>50
A1. 単に auto としたときに参照になることはない。
参照として受け取りたい場合は auto& にせねばならないというのは正しい。
A2. 参照かどうかで自動的に場合分けして欲しいなら decltype(auto) とすればいいが……
参照で受けるのが正しい状況なのかどうかは状況による。
テンプレート内など自動的な場合分けが必要な場合を除いては参照は参照として明示したほうがよくない?
(個人的感想です。)
A3. いくつか用意されている operator<< の基本的なオーバーロードの内で bool にマッチするから。
void* もあるのだけれど C++ では任意のポインタは void* へは暗黙の型変換されないのでマッチング候補にならない。
アドレスとして解釈して欲しいなら void* へ明示的に型変換しないといけない。
A1. 単に auto としたときに参照になることはない。
参照として受け取りたい場合は auto& にせねばならないというのは正しい。
A2. 参照かどうかで自動的に場合分けして欲しいなら decltype(auto) とすればいいが……
参照で受けるのが正しい状況なのかどうかは状況による。
テンプレート内など自動的な場合分けが必要な場合を除いては参照は参照として明示したほうがよくない?
(個人的感想です。)
A3. いくつか用意されている operator<< の基本的なオーバーロードの内で bool にマッチするから。
void* もあるのだけれど C++ では任意のポインタは void* へは暗黙の型変換されないのでマッチング候補にならない。
アドレスとして解釈して欲しいなら void* へ明示的に型変換しないといけない。
52はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-zQu6)
2023/11/12(日) 11:38:27.18ID:O0gb6uIB0 ごめん。 間違いがあった。
ポインタは void* へ暗黙に変換できる。
この変換はオーバーロード解決時の候補になりうる。
ただ、 bool への変換とは優先順位に差がある。
ポインタは void* へ暗黙に変換できる。
この変換はオーバーロード解決時の候補になりうる。
ただ、 bool への変換とは優先順位に差がある。
53デフォルトの名無しさん (ワッチョイ 1f63-1OcW)
2023/11/12(日) 11:42:25.19ID:j2Y95IYf0 >>51>>52
㌧クス、
なるほど
わかりた
↓こうなったわ
decltype(auto) z = foo();
const auto& zz = foo();
const volatile auto& zzz = foo();
cout << "&original=" << (void*)&g_vec << endl; // &original=010213D8 (このアドレスは一例)
cout << "&z=" << (void*)&z << endl; // &z=010213D8 // 参照(OK)
cout << "&zz=" << (void*)&zz << endl; // &zz=010213D8 // 参照(OK)
cout << "&zzz=" << (void*)&zzz << endl; // &zzz=010213D8 // 参照(OK)
cout << std::boolalpha << "&zzz=" << &zzz << endl; // &zzz=true // boolean
boolへの変換は使うことは無いと思うが正体は調べてみるわ
㌧クス、
なるほど
わかりた
↓こうなったわ
decltype(auto) z = foo();
const auto& zz = foo();
const volatile auto& zzz = foo();
cout << "&original=" << (void*)&g_vec << endl; // &original=010213D8 (このアドレスは一例)
cout << "&z=" << (void*)&z << endl; // &z=010213D8 // 参照(OK)
cout << "&zz=" << (void*)&zz << endl; // &zz=010213D8 // 参照(OK)
cout << "&zzz=" << (void*)&zzz << endl; // &zzz=010213D8 // 参照(OK)
cout << std::boolalpha << "&zzz=" << &zzz << endl; // &zzz=true // boolean
boolへの変換は使うことは無いと思うが正体は調べてみるわ
54デフォルトの名無しさん (ワッチョイ 1f63-1OcW)
2023/11/12(日) 11:46:29.61ID:j2Y95IYf0 >テンプレート内など自動的な場合分けが必要な場合を除いては参照は参照として明示したほうがよくない?
非constなら考えるがこの場合foo()はconstオヌジェクトと参照を返してくるし、
これはもうdecltype(auto)一択で良いような気がが、
非constなら考えるがこの場合foo()はconstオヌジェクトと参照を返してくるし、
これはもうdecltype(auto)一択で良いような気がが、
55はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-zQu6)
2023/11/12(日) 12:07:32.76ID:O0gb6uIB0 volatile を追加する変換は出来るが除く変換は出来ないから
volatile 付きのオーバーロードを用意していない operator<< では候補から消えて
bool だけが候補として残ってしまうってことになるみたいだな。
volatile が付いていない場合は
void* への変換のほうが bool への変換より優先順位が高いので
そっちが呼ばれる。
volatile 付きのオーバーロードを用意していない operator<< では候補から消えて
bool だけが候補として残ってしまうってことになるみたいだな。
volatile が付いていない場合は
void* への変換のほうが bool への変換より優先順位が高いので
そっちが呼ばれる。
56あぼーん
NGNGあぼーん
57デフォルトの名無しさん (ワッチョイ 7fb1-qIOU)
2023/11/13(月) 02:33:43.38ID:eLF59GiN0 >>56
案内サンクス
案内サンクス
58デフォルトの名無しさん (ワッチョイ 1f01-XI6K)
2023/11/14(火) 02:19:13.60ID:DkCdWP9x0 CLion使ってる人いますか?
59デフォルトの名無しさん (ワッチョイ 1fad-XI6K)
2023/11/17(金) 17:16:02.48ID:TT3SJP5h060デフォルトの名無しさん (ワッチョイ 6ecf-ekUX)
2023/11/18(土) 16:16:09.27ID:5MckQHFy0 ラムダの参照キャプチャってconst参照に指定できないんだっけ?微妙に不便だな。
61デフォルトの名無しさん (ワッチョイ 7901-4XBo)
2023/11/18(土) 20:47:45.62ID:GRi2RJZB0 >>60
これじゃだめ?
#include <iostream>
using namespace std;
int main () {
const int a {0};
int b {0};
[&a, &b = const_cast <const int &> (b)] () {
++ a; // X
++ b; // X
} ();
return 0;
}
これじゃだめ?
#include <iostream>
using namespace std;
int main () {
const int a {0};
int b {0};
[&a, &b = const_cast <const int &> (b)] () {
++ a; // X
++ b; // X
} ();
return 0;
}
62デフォルトの名無しさん (ワッチョイ 4701-1fOb)
2023/11/26(日) 06:27:21.37ID:DSb557XU0 C++20 RangesはMicrosoftの説明がわかりやすかった
63デフォルトの名無しさん (ワッチョイ 791f-q5uF)
2023/12/05(火) 10:33:06.64ID:HLoKrA0o0 ふと今更思ったんだけど
ポインターpに対して演算子*が返す*pは、
値じゃなくて参照?
ポインターpに対して演算子*が返す*pは、
値じゃなくて参照?
64デフォルトの名無しさん (ワッチョイ b501-sZSb)
2023/12/05(火) 11:05:15.15ID:E3GJtsiR0 #include <type_traits>
#include <iostream>
using namespace std;
int main () {
int value {0};
int *p {&value};
cout << is_reference <int>::value << '\n';
cout << is_reference <int &>::value << '\n';
cout << is_reference <decltype (value)>::value << '\n';
cout << is_reference <decltype (*p)>::value << '\n';
return 0;
}
#include <iostream>
using namespace std;
int main () {
int value {0};
int *p {&value};
cout << is_reference <int>::value << '\n';
cout << is_reference <int &>::value << '\n';
cout << is_reference <decltype (value)>::value << '\n';
cout << is_reference <decltype (*p)>::value << '\n';
return 0;
}
65デフォルトの名無しさん (ワッチョイ edf6-JrwL)
2023/12/05(火) 11:09:19.91ID:IVr4NrBA066はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/05(火) 11:22:18.93ID:z5PiblaY067はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/05(火) 11:24:42.01ID:z5PiblaY0 あ、ごめん。 完全に間違った説明してたわ。 忘れて……。 恥ずかしい。
68はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/05(火) 11:34:00.06ID:z5PiblaY0 と思ってよく仕様を読んでみたらやっぱりこの (>>66) 考え方で正しいはず。
式が識別子式の時に限っては decltype は参照にならず式の型そのままで返すせいで decltype(value) は参照にならないが、
value と *p は型システム的にも値カテゴリ的にも同じだわ。
式が識別子式の時に限っては decltype は参照にならず式の型そのままで返すせいで decltype(value) は参照にならないが、
value と *p は型システム的にも値カテゴリ的にも同じだわ。
69デフォルトの名無しさん (ワッチョイ b501-sZSb)
2023/12/05(火) 12:43:28.97ID:E3GJtsiR0 >>68
なるほどー! 横からだが勉強になった
なるほどー! 横からだが勉強になった
70デフォルトの名無しさん (ワッチョイ b501-sZSb)
2023/12/05(火) 12:48:03.77ID:E3GJtsiR0 巷のスマートポインタはoperator*で参照型を返すので
生ポインタも同じかと思ってたよ
生ポインタも同じかと思ってたよ
71はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/05(火) 13:28:25.92ID:z5PiblaY0 互換性の都合とかがあるから仕方ないね。
場合分けが大量にあって単純な一般原則の組み合わせにはなってないから仕様を読み解くのがしんどい……
場合分けが大量にあって単純な一般原則の組み合わせにはなってないから仕様を読み解くのがしんどい……
72デフォルトの名無しさん (ワッチョイ 9f1f-oseA)
2023/12/11(月) 15:17:51.77ID:7vxydTfj0 ある構造体Aがあります
Aの比較関数が複数ありますcompA0,compA1,compA2,...
比較関数の関数ポインタがありますcompA
compA = &compA2;
別の構造体Bがあります
BはAを内包しています
struct B{ A a; ... };
この構造体Bを、Aの比較関数ポインタcompAで比較してソートするにはどう記述すればよいですか?
std::vector<B> bs;
bs.push_back(...);...
std::sort(bs.begin(),bs.end(),?);
できればラムダ式を使わずにできるとありがたいです
Aの比較関数が複数ありますcompA0,compA1,compA2,...
比較関数の関数ポインタがありますcompA
compA = &compA2;
別の構造体Bがあります
BはAを内包しています
struct B{ A a; ... };
この構造体Bを、Aの比較関数ポインタcompAで比較してソートするにはどう記述すればよいですか?
std::vector<B> bs;
bs.push_back(...);...
std::sort(bs.begin(),bs.end(),?);
できればラムダ式を使わずにできるとありがたいです
73デフォルトの名無しさん (ブーイモ MM5b-oUR/)
2023/12/11(月) 15:22:02.06ID:F1R6HyeLM >>72
ラムダ式使った方が良いと思うけど本当にラムダ式なしが良い?
ラムダ式使った方が良いと思うけど本当にラムダ式なしが良い?
74デフォルトの名無しさん (ワッチョイ 9f1f-oseA)
2023/12/11(月) 15:29:19.94ID:7vxydTfj0 使われると、ラムダ式の質問をすることになると思います・・・
75はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f3e-pD6R)
2023/12/11(月) 15:45:20.57ID:wAhsIAfi0 >>72
もし C++20 を使えるなら (std::sort と違って) std::ranges::sort では比較関数とは別に
比較すべき要素を取り出す操作をプロジェクションとして与えることが出来るから
これ一発でいけてだいぶん楽できる。
std::ranges::sort(bs, compA, &B::a);
もし C++20 を使えるなら (std::sort と違って) std::ranges::sort では比較関数とは別に
比較すべき要素を取り出す操作をプロジェクションとして与えることが出来るから
これ一発でいけてだいぶん楽できる。
std::ranges::sort(bs, compA, &B::a);
76デフォルトの名無しさん (ワッチョイ d701-Qbcu)
2023/12/11(月) 16:01:10.52ID:dil4ai7q0 >>75
すげ! 今そんなのあるんやね
すげ! 今そんなのあるんやね
77デフォルトの名無しさん (ワッチョイ d701-Qbcu)
2023/12/11(月) 16:34:20.59ID:dil4ai7q0 >>74
思い出すのがしんどくなってきた
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
struct A {int value_;};
bool compA2 (const A &lhs, const A &rhs) {
return lhs.value_ < rhs.value_;
}
struct B {A a;};
int main () {
vector <B> bs;
bool (*compA) (const A &, const A &) {compA2};
sort (bs.begin(), bs.end(), bind (compA, bind (mem_fn (&B::a), placeholders::_1), bind (mem_fn (&B::a), placeholders::_2)));
sort (bs.begin(), bs.end(), [compA] (const auto &lhs, const auto &rhs) {return (*compA) (lhs.a, rhs.a);});
return 0;
}
思い出すのがしんどくなってきた
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
struct A {int value_;};
bool compA2 (const A &lhs, const A &rhs) {
return lhs.value_ < rhs.value_;
}
struct B {A a;};
int main () {
vector <B> bs;
bool (*compA) (const A &, const A &) {compA2};
sort (bs.begin(), bs.end(), bind (compA, bind (mem_fn (&B::a), placeholders::_1), bind (mem_fn (&B::a), placeholders::_2)));
sort (bs.begin(), bs.end(), [compA] (const auto &lhs, const auto &rhs) {return (*compA) (lhs.a, rhs.a);});
return 0;
}
78デフォルトの名無しさん (ワッチョイ 771f-oseA)
2023/12/11(月) 17:14:54.00ID:cVrrslE5079はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f3e-pD6R)
2023/12/11(月) 17:25:04.51ID:wAhsIAfi0 その場で合成するのはさすがに見通しが悪すぎるので、
C++11 頃の C++ を仮定して私がやるならまずアダプタを作ると思う。
ちょっと雑ですまんがとりあえずこんな感じ。
class compB_adaptor {
private:
using comparator = std::function<bool(const A&, const A&)>;
comparator compA;
public:
compB_adaptor(comparator comp) : compA(comp) {}
bool operator()(const B& x, const B& y) {
return compA(x.a, y.a);
}
};
使うときには間にひとつ挟むだけで済む。
std::sort(bs.begin(), bs.end(), compB_adaptor(compA));
C++11 頃の C++ を仮定して私がやるならまずアダプタを作ると思う。
ちょっと雑ですまんがとりあえずこんな感じ。
class compB_adaptor {
private:
using comparator = std::function<bool(const A&, const A&)>;
comparator compA;
public:
compB_adaptor(comparator comp) : compA(comp) {}
bool operator()(const B& x, const B& y) {
return compA(x.a, y.a);
}
};
使うときには間にひとつ挟むだけで済む。
std::sort(bs.begin(), bs.end(), compB_adaptor(compA));
80デフォルトの名無しさん (ワッチョイ 771f-oseA)
2023/12/11(月) 22:08:32.24ID:cVrrslE5081デフォルトの名無しさん (ワッチョイ 1663-4if3)
2023/12/20(水) 23:47:12.14ID:tqHuIeXr0 int x;
std::cout << x;
でxが正ののときは「+」符号を付けさせるのってどうするんでしたっけ……
cout.form("%+d", x)とか以外で
std::cout << x;
でxが正ののときは「+」符号を付けさせるのってどうするんでしたっけ……
cout.form("%+d", x)とか以外で
82デフォルトの名無しさん (ワッチョイ 2701-NGr8)
2023/12/20(水) 23:58:48.32ID:Qfvbx0VO0 cout << showpos
83デフォルトの名無しさん (ワッチョイ 1663-4if3)
2023/12/21(木) 08:41:44.38ID:6wjPSKlj0 てきました㌧クス、
iosヘッダで探せば良かったのか、、、
iosヘッダで探せば良かったのか、、、
84デフォルトの名無しさん (ワッチョイ 63d2-XEY5)
2023/12/21(木) 20:01:46.13ID:i16TeC3D0 C++23だとこれ
std::print("{:+}", x);
std::print("{:+}", x);
85デフォルトの名無しさん (ワッチョイ 4ba7-JRUi)
2023/12/22(金) 13:56:54.85ID:pQLEje080 PythonやC#のようなf"{x}"構文が作られる事はないんだろうか
86はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d23e-E09z)
2023/12/22(金) 14:54:27.15ID:gr/vrzoo087デフォルトの名無しさん (ワッチョイ cf63-nyJS)
2023/12/24(日) 17:42:14.24ID:foDTiHm90 質問なのですが自作クラスFooのストリーム出力演算子に引数付きのマニピュレータを追加したいのですが
↓こんなやつ
Foo obj;
cout << custom_setw(10) << obj; // 整数のベクトル的なオブジェクトobjの要素を幅10文字で出力
custom_setw()で与えた10という数値をつつがなくFooのストリーム出力演算子
std::ostream& operator<<(std::ostream& os, const Foo& obj)
に渡すには一体どうすれば……orz
↓こんなやつ
Foo obj;
cout << custom_setw(10) << obj; // 整数のベクトル的なオブジェクトobjの要素を幅10文字で出力
custom_setw()で与えた10という数値をつつがなくFooのストリーム出力演算子
std::ostream& operator<<(std::ostream& os, const Foo& obj)
に渡すには一体どうすれば……orz
88デフォルトの名無しさん (ワッチョイ cf63-nyJS)
2023/12/24(日) 17:42:52.36ID:foDTiHm90 グローバル変数渡しは最初に思いつくのですが、ostringstream os1, os2とFoo obj1, obj2に対して異なるスレッドで
os1 << custom_setw(30) << obj1; // スレッド1
os2 << custom_setw(20) << obj2; // スレッド2
とかやったら詰むし
std::setw()とか一体どうやってるんじゃ……
os1 << custom_setw(30) << obj1; // スレッド1
os2 << custom_setw(20) << obj2; // スレッド2
とかやったら詰むし
std::setw()とか一体どうやってるんじゃ……
89はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-XnzH)
2023/12/24(日) 18:05:55.09ID:SfA3xmSz0 >>87-88
特定の型を出力するときにだけ作用する書式を設定するマニピュレータってこと?
std::setw がやってるのはストリームのメンバ関数 width を呼ぶのと同じ。
ストリームのオブジェクトが幅に関する情報を保存するデータメンバを持っていて、それを変更してる。
もちろんあなたが定義した独自の型 (この例では Foo) に結び付いた書式を保持するところなんて存在しないから単純にはできない。
私が思いつくのは
・ ストリームのほうも新しいものを定義する、つまり basic_ostream を継承して Foo 用の書式を格納するデータメンバを増やす
・ ストリームに対応付いたデータを格納するものを std::map かなんかで保持しておいて Foo を出力するときはそれを参照する
ということくらいかな。
スレッドが絡むと面倒くさいけど、しょうがないね。
特定の型を出力するときにだけ作用する書式を設定するマニピュレータってこと?
std::setw がやってるのはストリームのメンバ関数 width を呼ぶのと同じ。
ストリームのオブジェクトが幅に関する情報を保存するデータメンバを持っていて、それを変更してる。
もちろんあなたが定義した独自の型 (この例では Foo) に結び付いた書式を保持するところなんて存在しないから単純にはできない。
私が思いつくのは
・ ストリームのほうも新しいものを定義する、つまり basic_ostream を継承して Foo 用の書式を格納するデータメンバを増やす
・ ストリームに対応付いたデータを格納するものを std::map かなんかで保持しておいて Foo を出力するときはそれを参照する
ということくらいかな。
スレッドが絡むと面倒くさいけど、しょうがないね。
90デフォルトの名無しさん (ワッチョイ 337c-dsFJ)
2023/12/24(日) 19:04:41.48ID:vbUOIudY0 既存のcoutとかstringstreamとかで使いたいなら、グローバルのstd::unordered_map<std::ios_base*, MyManipData>にでも置いとくしかないだろうね
ストリームオブジェクトの状態で持たせるクソ設計が悪いんだ
ストリームオブジェクトの状態で持たせるクソ設計が悪いんだ
91デフォルトの名無しさん (ワッチョイ cf63-nyJS)
2023/12/24(日) 19:34:37.93ID:foDTiHm90 レス㌧クス、
>ストリームのオブジェクトが幅に関する情報を保存するデータメンバを持っていて、それを変更してる。
なるほど……
これはユザーの立場からはメンバの追加ができない領域なので、Fooの側にメンバを持たせることにしますか……
class FooWrp {
const Foo& m_objRef;
int m_nWidth;
public:
FooWrp(const Foo& obj, int width) : m_objRef(obj), m_nWidh(width) { }
friend std::ostream& operator<<(std::ostream& os, const FooWrp& wrp) { ...(wrp.m_objRefの要素をwrp.m_nWidthに描かれている幅で出力する処理)... }
};
>ストリームのオブジェクトが幅に関する情報を保存するデータメンバを持っていて、それを変更してる。
なるほど……
これはユザーの立場からはメンバの追加ができない領域なので、Fooの側にメンバを持たせることにしますか……
class FooWrp {
const Foo& m_objRef;
int m_nWidth;
public:
FooWrp(const Foo& obj, int width) : m_objRef(obj), m_nWidh(width) { }
friend std::ostream& operator<<(std::ostream& os, const FooWrp& wrp) { ...(wrp.m_objRefの要素をwrp.m_nWidthに描かれている幅で出力する処理)... }
};
92デフォルトの名無しさん (ワッチョイ cf63-nyJS)
2023/12/24(日) 19:35:17.01ID:foDTiHm90 // 使い方
Foo obj;
cout << FooWrp(obj, 10);
ダッサwwwwwwwwwwwwwwwwwww
しかし、「たかが表示の整形」のために排他制御しつつmapを弄ったりTLSの利用を考えるのもアレなのでこれはこれで仕方が無いのか、orz
Foo obj;
cout << FooWrp(obj, 10);
ダッサwwwwwwwwwwwwwwwwwww
しかし、「たかが表示の整形」のために排他制御しつつmapを弄ったりTLSの利用を考えるのもアレなのでこれはこれで仕方が無いのか、orz
93デフォルトの名無しさん (ワッチョイ a31e-H80b)
2023/12/24(日) 19:45:29.51ID:Y8qSN/i/0 ストリーム用の演算子なんか作らずに
オブジェクトの文字列表現を返す関数を用意したほうが汎用性高くない?
オブジェクトの文字列表現を返す関数を用意したほうが汎用性高くない?
94デフォルトの名無しさん (ワッチョイ cf63-nyJS)
2023/12/24(日) 19:50:06.00ID:foDTiHm90 Foo obj;
std::string s = obj.str(10); // 10億ギガ文字
cout << s;
出力を完遂できるんかこれ……
std::string s = obj.str(10); // 10億ギガ文字
cout << s;
出力を完遂できるんかこれ……
95はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-XnzH)
2023/12/24(日) 20:00:55.29ID:SfA3xmSz0 C++20 からは std::formatter を特殊化して書式指定を解釈するコードを入れておけば
std::format で独自の型を表示しようとしたときにその特殊化が使われる仕組みになってる。
std::format で独自の型を表示しようとしたときにその特殊化が使われる仕組みになってる。
96デフォルトの名無しさん (ワッチョイ a31e-H80b)
2023/12/24(日) 21:41:50.00ID:Y8qSN/i/0 オブジェクトの文字列表現が10億ギガ文字もあるの!?
FooWrpオブジェクトをうっかりログに出力しちゃったら大変だね!!
FooWrpオブジェクトをうっかりログに出力しちゃったら大変だね!!
97デフォルトの名無しさん (ワッチョイ cf63-nyJS)
2023/12/29(金) 19:34:46.18ID:MPSeCS+O0 実験せずに質問するますが、
int a, b;
cin >> &x >> &y;
に対し、
Q1. 「100 a」を入力したら例外もタイムアウト待ちも発生せず、cin.fail()がtrueになるだけ?
Q2. 「100」とだけ入力してそのまんま(リダイレクト元のファイルハンドルか何かが
タイムアウトもエラーもクローズもしなければ)ならそれっきり返ってこない?
int a, b;
cin >> &x >> &y;
に対し、
Q1. 「100 a」を入力したら例外もタイムアウト待ちも発生せず、cin.fail()がtrueになるだけ?
Q2. 「100」とだけ入力してそのまんま(リダイレクト元のファイルハンドルか何かが
タイムアウトもエラーもクローズもしなければ)ならそれっきり返ってこない?
98デフォルトの名無しさん (ワッチョイ cf63-nyJS)
2023/12/29(金) 19:40:39.84ID:MPSeCS+O0 EOFが抜けてたorz
Q2のケースにおいて「100 [EOF]」なら(多分)cin.fail()でとりあえずすぐ返ってくるのかそうか、
Q2のケースにおいて「100 [EOF]」なら(多分)cin.fail()でとりあえずすぐ返ってくるのかそうか、
99はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-XnzH)
2023/12/29(金) 21:37:06.10ID:0cvltfsQ0100デフォルトの名無しさん (ワッチョイ de63-J7+h)
2023/12/30(土) 05:42:41.89ID:3ksfrMrT0 >>99
>int x, y;
>cin >> x >> y;
おk
スマンカッタorz
エラーとEOFのどちらかを検知したかったら!cin.good()が正しいっぽい?
https://blog.emattsan.org/entry/20110819/1313743195
ここまでは分かった気がするが、
ストリーム入力演算子std::istream& operator>>(std::istream& os, Foo& obj)の中で入力に失敗した場合
どうやってエラーを呼び出し元に通知したらええんじゃ……
>int x, y;
>cin >> x >> y;
おk
スマンカッタorz
エラーとEOFのどちらかを検知したかったら!cin.good()が正しいっぽい?
https://blog.emattsan.org/entry/20110819/1313743195
ここまでは分かった気がするが、
ストリーム入力演算子std::istream& operator>>(std::istream& os, Foo& obj)の中で入力に失敗した場合
どうやってエラーを呼び出し元に通知したらええんじゃ……
101デフォルトの名無しさん (ワッチョイ de63-J7+h)
2023/12/30(土) 05:50:37.02ID:3ksfrMrT0 クラスFooの入力ストリーム演算子の中で整数を2個読むとして、
std::istream& operator>>(std::istream& os, Foo& obj) {
int x, y;
os >> x >> y;
if (!os.goot()) {
return os; // エラー発生時は単純にreturn os; でおk?
}
obj.m_x = x;
obj.m_y = y;
return os;
}
std::istream& operator>>(std::istream& os, Foo& obj) {
int x, y;
os >> x >> y;
if (!os.goot()) {
return os; // エラー発生時は単純にreturn os; でおk?
}
obj.m_x = x;
obj.m_y = y;
return os;
}
102はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 43c3-KM86)
2023/12/30(土) 08:47:16.28ID:XV37Te4m0103デフォルトの名無しさん (ワッチョイ de63-J7+h)
2023/12/30(土) 13:48:41.88ID:3ksfrMrT0 わかりた
ていうかエラー判定(eofbit以外のビットのセットを判定)なら!os.good()や!os.goot()ではなくて
os.failed()か!osですたね……orz
これらに関して追加の質問が出たら初心者スレに書くわサーセン;;;
ていうかエラー判定(eofbit以外のビットのセットを判定)なら!os.good()や!os.goot()ではなくて
os.failed()か!osですたね……orz
これらに関して追加の質問が出たら初心者スレに書くわサーセン;;;
104デフォルトの名無しさん (ワッチョイ e95f-pFp4)
2023/12/31(日) 20:09:05.68ID:tpduSr4A0 class A{
char buf_[size];
}
このbuf_に任意のオブジェクトをplacement newして使用するのだけど
このオブジェクトをコピーしたりムーブする場合、単純にコピー元のbuf_からコピー先のbuf_にmemcopyしてしまって大丈夫ですか?
char buf_[size];
}
このbuf_に任意のオブジェクトをplacement newして使用するのだけど
このオブジェクトをコピーしたりムーブする場合、単純にコピー元のbuf_からコピー先のbuf_にmemcopyしてしまって大丈夫ですか?
105デフォルトの名無しさん (ワッチョイ 06a2-M+UX)
2023/12/31(日) 20:44:02.18ID:bvEcnWMM0 全く大丈夫じゃない
初心者スレからどうぞ
初心者スレからどうぞ
106デフォルトの名無しさん (ワッチョイ 8101-KEYj)
2023/12/31(日) 20:54:11.90ID:NNsdlVTY0 構造体から派生させれば出来るよ
107デフォルトの名無しさん (ワッチョイ 06a2-M+UX)
2023/12/31(日) 21:04:16.47ID:bvEcnWMM0 せめてPODと言おう
初心者スレからどうぞ
初心者スレからどうぞ
108はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0904-OTTg)
2024/01/01(月) 00:18:02.48ID:6hyMwo3D0 POD は削除された。
trivially copyable の要件を満たすならその型は memcpy でコピーしてもよい。
std::is_trivially_copyable で判定できるのでどこかに制約を入れておけば安心かもね。
trivially copyable の要件を満たすならその型は memcpy でコピーしてもよい。
std::is_trivially_copyable で判定できるのでどこかに制約を入れておけば安心かもね。
109デフォルトの名無しさん (ワッチョイ 656a-R/a6)
2024/01/01(月) 00:36:03.09ID:an53Mx2V0 削除されたんですか?(バージョンいくつで?)
c++20 で非推奨になった、てのはすぐ調べられたんだけどその先が分からんです
c++20 で非推奨になった、てのはすぐ調べられたんだけどその先が分からんです
110はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0904-OTTg)
2024/01/01(月) 00:46:07.42ID:6hyMwo3D0 >>109
規格の文面としては C++20 で POD はもう削除されていて POD の概念を使わない形で再編されてる。
std::is_pod はまだある (非推奨) からこれが POD の定義だという意味ではまだあるとも言えるけど。
規格の文面としては C++20 で POD はもう削除されていて POD の概念を使わない形で再編されてる。
std::is_pod はまだある (非推奨) からこれが POD の定義だという意味ではまだあるとも言えるけど。
111デフォルトの名無しさん (ワッチョイ 06a2-M+UX)
2024/01/01(月) 00:46:34.65ID:l/ylj5kb0 アライメント忘れてるぞ
112デフォルトの名無しさん (ワッチョイ e1f0-JZT3)
2024/01/01(月) 03:01:35.02ID:5pNbZa2B0113デフォルトの名無しさん (ワッチョイ 8101-KEYj)
2024/01/01(月) 03:14:22.37ID:8zoq4UeO0 オワコン名称出してマウント。プークスクス
114はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-OTTg)
2024/01/01(月) 03:40:47.98ID:hmX3WjmM0 POD が削除されたかどうかは重要ではなくて、 POD より弱い制約 (trivially copyable) で memcpy が許されるというのが主旨。
その点は C++11 からそうなってる。
その点は C++11 からそうなってる。
115はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-OTTg)
2024/01/01(月) 04:06:49.46ID:hmX3WjmM0 「構造体」ってのも C++ 用語的にはイケてないと思うよ。
116デフォルトの名無しさん (ワッチョイ d24b-WshQ)
2024/01/01(月) 04:55:26.71ID:e5pnn2Xx0 アライメントは基本型のどれかと同じアライメント制約に合わせれば良いいということなら
使おうとしているうちで最も厳しいアライメント制約に一致する基本型を含むunionで解決するというのがC言語における伝統的な手法という印象、
C++でunionにしたら(それが可能なメンバのみなら) memcpyは安全とかにはならない?
使おうとしているうちで最も厳しいアライメント制約に一致する基本型を含むunionで解決するというのがC言語における伝統的な手法という印象、
C++でunionにしたら(それが可能なメンバのみなら) memcpyは安全とかにはならない?
117はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-OTTg)
2024/01/01(月) 05:30:52.12ID:hmX3WjmM0 >>116
コンストラクタや代入演算子がトリビアルであることなどの制約を守れば共用体も trivially copyable になりうる。
(C++ の共用体はコンストラクタやメンバ関数を定義できるがそこらが制限されることになる。)
コンストラクタや代入演算子がトリビアルであることなどの制約を守れば共用体も trivially copyable になりうる。
(C++ の共用体はコンストラクタやメンバ関数を定義できるがそこらが制限されることになる。)
118デフォルトの名無しさん (ワッチョイ 65e8-QK8A)
2024/01/01(月) 14:24:55.17ID:kge3DGj60 char* と long* のコピーは?
119はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-slPv)
2024/01/01(月) 15:31:30.97ID:hmX3WjmM0 ポインタも含めてスカラ型は Trivially copyable
https://timsong-cpp.github.io/cppwp/n4861/basic.types#9
https://timsong-cpp.github.io/cppwp/n4861/basic.types#9
120デフォルトの名無しさん (ワッチョイ e95f-pFp4)
2024/01/03(水) 23:34:38.84ID:w4EAqTeZ0 >>112
とりあえず書いてみたけどどうですかね?
template<std::size_t buf_size>
struct A {
private:
struct base_ {
virtual ~base_() {};
};
template <typename F>
struct derived_ : base_ {
F f_;
derived_(F f) : f_{ std::move(f) } {}
};
base_* p_;
alignas(alignof(std::max_align_t)) uint8_t buf[buf_size]={0};
public:
A() :p_(nullptr) {};
template <typename F>
void assign(F f) {
if (p_ == nullptr) {
p_ = ::new (buf) derived_<F>{std::move(f)};
}
}
//コピーコンストラクタ
A(A& src) {
p_ = ::new (buf) decltype(src.*p_); //ここが怪しい
};
};
とりあえず書いてみたけどどうですかね?
template<std::size_t buf_size>
struct A {
private:
struct base_ {
virtual ~base_() {};
};
template <typename F>
struct derived_ : base_ {
F f_;
derived_(F f) : f_{ std::move(f) } {}
};
base_* p_;
alignas(alignof(std::max_align_t)) uint8_t buf[buf_size]={0};
public:
A() :p_(nullptr) {};
template <typename F>
void assign(F f) {
if (p_ == nullptr) {
p_ = ::new (buf) derived_<F>{std::move(f)};
}
}
//コピーコンストラクタ
A(A& src) {
p_ = ::new (buf) decltype(src.*p_); //ここが怪しい
};
};
121デフォルトの名無しさん (ワッチョイ 9901-r6/T)
2024/01/04(木) 00:44:07.87ID:/FDyuY0i0 decltype(src.*p_)ってbase_なのでダメだろう
122デフォルトの名無しさん (ワッチョイ e1f0-JZT3)
2024/01/04(木) 00:58:18.81ID:ECF9R1Fj0 ていうか、decltypeで型指定してるだけだからコピーもなにもされてないぞソレ
123デフォルトの名無しさん (ワッチョイ 0644-M+UX)
2024/01/04(木) 02:28:40.49ID:oZapr/U70 std::anyのコードでも読んだほうが早い
124デフォルトの名無しさん (ワッチョイ 9901-r6/T)
2024/01/04(木) 09:11:56.12ID:/FDyuY0i0 A::base_に以下を足してA::derived_で実装し
Aのコピーコンストラクタから呼べば?
virtual base_ *clone (void *p) = 0;
Aのコピーコンストラクタから呼べば?
virtual base_ *clone (void *p) = 0;
125デフォルトの名無しさん (ワッチョイ 6564-QK8A)
2024/01/04(木) 13:26:37.40ID:1KQpMTCj0 void*って、ポインターの先のサイズ未知だよなぁ
126デフォルトの名無しさん (ワッチョイ e95f-pFp4)
2024/01/04(木) 17:16:40.43ID:ACseOt7T0127デフォルトの名無しさん (ワッチョイ e95f-pFp4)
2024/01/04(木) 21:53:05.60ID:ACseOt7T0 >>124
こんな感じです?
struct base_ {
virtual base_* clone (void *p) = 0;
virtual ~base_() {};
};
template <typename F>
struct derived_ : base_ {
F f_;
derived_(F f) : f_{ std::move(f) } {}
base_* clone (void *p_buf){
return new(reinterpret_cast<derived_<F>*>(p_buf))(f_);
}
};
A(A& src) {
p_ = src.clone((void*)buf);
};
こんな感じです?
struct base_ {
virtual base_* clone (void *p) = 0;
virtual ~base_() {};
};
template <typename F>
struct derived_ : base_ {
F f_;
derived_(F f) : f_{ std::move(f) } {}
base_* clone (void *p_buf){
return new(reinterpret_cast<derived_<F>*>(p_buf))(f_);
}
};
A(A& src) {
p_ = src.clone((void*)buf);
};
128デフォルトの名無しさん (ワッチョイ e1f0-JZT3)
2024/01/04(木) 22:19:16.70ID:ECF9R1Fj0 derived_(F f) ←この時点でムダなコピーが1度発生していることには気付いてる?
129デフォルトの名無しさん (ワッチョイ 9901-r6/T)
2024/01/04(木) 22:21:15.81ID:/FDyuY0i0 >>127
書き込む前にコンパイルしなよ
書き込む前にコンパイルしなよ
130デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/04(木) 22:41:26.61ID:Dv09vJ7A0 バッファの中にオブジェクトを作れたら、それで何をしたいのかが気になる
131デフォルトの名無しさん (ワッチョイ 0644-M+UX)
2024/01/04(木) 23:21:36.86ID:oZapr/U70132はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-OTTg)
2024/01/04(木) 23:35:27.70ID:td6kYpbC0 たぶんやりたいことは std::allocator_traits::construct なのかな
133デフォルトの名無しさん (ワッチョイ 7f7c-JApz)
2024/01/11(木) 04:45:44.72ID:wlSOhq+Y0 例外って全部mainで捕捉すべきかな?
調べてみたら例外が捕捉されずにプログラムが終了する場合スタックアンワインドが起こるかは実装定義みたいなんだけど、それじゃグローバルなオブジェクトのデストラクタが呼ばれないんじゃないかって思って試してみたのよ。
https://ideone.com/wSLZfL
やっぱりデストラクタは呼ばれなかったからリソースリークが起こりうるんじゃないかと思うんだけど、例外に対してはどういう態度でいるべきかな?
A. リソースリークはまずい。だから例外は全部捕捉するべき。
B. 例外はロジック上捕捉する必要があるものだけ捕捉して、それ以外はほっといていい。
C. 例外が捕捉されなければstd::abortが呼ばれるので、コアダンプなりで色々調べることもできる。だからmainで例外を全部握りつぶすようなことはすべきではない。
D. 時と場合による。
例外時の挙動とか仕様とか調べてるうちに頭ぐるぐるしてわけわかんなくなってきた
調べてみたら例外が捕捉されずにプログラムが終了する場合スタックアンワインドが起こるかは実装定義みたいなんだけど、それじゃグローバルなオブジェクトのデストラクタが呼ばれないんじゃないかって思って試してみたのよ。
https://ideone.com/wSLZfL
やっぱりデストラクタは呼ばれなかったからリソースリークが起こりうるんじゃないかと思うんだけど、例外に対してはどういう態度でいるべきかな?
A. リソースリークはまずい。だから例外は全部捕捉するべき。
B. 例外はロジック上捕捉する必要があるものだけ捕捉して、それ以外はほっといていい。
C. 例外が捕捉されなければstd::abortが呼ばれるので、コアダンプなりで色々調べることもできる。だからmainで例外を全部握りつぶすようなことはすべきではない。
D. 時と場合による。
例外時の挙動とか仕様とか調べてるうちに頭ぐるぐるしてわけわかんなくなってきた
134デフォルトの名無しさん (ワッチョイ dff7-1VUN)
2024/01/11(木) 08:40:16.50ID:8oRrkiTZ0 そもそもプログラムが終了してリソースリークするのかな?
メモリー、ファイルハンドル、ソケット、ミューテックスなどのリソースはOSが責任持って解放するよね
どのようなリソースがリークしますか?
メモリー、ファイルハンドル、ソケット、ミューテックスなどのリソースはOSが責任持って解放するよね
どのようなリソースがリークしますか?
135デフォルトの名無しさん (ワッチョイ 7f01-2R+Q)
2024/01/11(木) 08:45:02.51ID:ETJgFBFV0 すべてじゃね?
136デフォルトの名無しさん (ワッチョイ 7f01-2R+Q)
2024/01/11(木) 08:46:53.81ID:ETJgFBFV0137デフォルトの名無しさん (ワッチョイ 7f3a-NF1f)
2024/01/11(木) 09:02:22.25ID:dA95iQ6m0 OS管理なリソースはアプリの終了なんか知らないってのもあるからなぁ
得にドライバ関連とかな
得にドライバ関連とかな
138デフォルトの名無しさん (ワッチョイ dfab-acFs)
2024/01/11(木) 15:30:41.76ID:hAXa3uBd0139デフォルトの名無しさん (ワッチョイ ff11-Nf4k)
2024/01/11(木) 20:09:25.46ID:AWAYnmwT0 今どきのOS使ってたらOSリソースはリークしない
まぁプロセスがゾンビになるのはよくあるが
まぁプロセスがゾンビになるのはよくあるが
140デフォルトの名無しさん (ワッチョイ ff11-Nf4k)
2024/01/11(木) 20:09:51.72ID:AWAYnmwT0 >>137
しったかすんな
しったかすんな
141デフォルトの名無しさん (ワントンキン MMdf-7Pe6)
2024/01/11(木) 20:12:29.21ID:h5T3Zf1WM そもそもアプリ的にデータの不整合とか出るから論外だろう
ファイルやなんかの外部データ使わないなら関係ないだろうけど
ファイルやなんかの外部データ使わないなら関係ないだろうけど
142デフォルトの名無しさん (ワッチョイ ff11-Nf4k)
2024/01/11(木) 20:12:30.15ID:AWAYnmwT0 よくあるのは異常終了時にファイルをフラッシュしておきたいとかだろ
汎用的にこれを実現するのは結構むずい
汎用的にこれを実現するのは結構むずい
143デフォルトの名無しさん (ワッチョイ ff11-Nf4k)
2024/01/11(木) 20:14:10.04ID:AWAYnmwT0 あとコアダンプの観点では例外飛ばさずに即死したほうがいい
144デフォルトの名無しさん (ワッチョイ df5a-XokC)
2024/01/11(木) 21:36:53.22ID:40hQdtQK0 エラーだからって一時ファイル山盛り残して放置しないでください
145デフォルトの名無しさん (ワッチョイ 7f7c-acFs)
2024/01/11(木) 22:44:37.94ID:wlSOhq+Y0 質問した者だけど
確かに近代的なOSであればリソースの始末はよしなにやってくれるだろうし、「絶対にデストラクタが呼ばれなきゃ困る」って状況でもなければいちいちすべての例外を捕捉する必要はないのかな(毎回ボイラープレートコードみたいに書くのもやだし)
確かに近代的なOSであればリソースの始末はよしなにやってくれるだろうし、「絶対にデストラクタが呼ばれなきゃ困る」って状況でもなければいちいちすべての例外を捕捉する必要はないのかな(毎回ボイラープレートコードみたいに書くのもやだし)
146デフォルトの名無しさん (スッップ Sd9f-d+nK)
2024/01/12(金) 01:18:38.26ID:P05ikaaEd 例外処理って、メモリ破壊やファイルシステム破壊みたいな絶望的な状況を想定しなきゃいけないんだよ。
ファイルに何か書き込んだら他のファイルを壊しちゃうかもしれない、みたいな。
だからファイル関連の操作をしていいのは、ファイルシステム周りの無事を確信できるときだけ。
データを上書き保存とかしていいのは、データとファイルシステム両方の無事を確信できるときだけ。
何も確信できないときは、何もせずに墜ちなきゃいけない。
ってことで例外機構はデフォルトで何もせずに異常終了するようになってるんだよ。
ファイルに何か書き込んだら他のファイルを壊しちゃうかもしれない、みたいな。
だからファイル関連の操作をしていいのは、ファイルシステム周りの無事を確信できるときだけ。
データを上書き保存とかしていいのは、データとファイルシステム両方の無事を確信できるときだけ。
何も確信できないときは、何もせずに墜ちなきゃいけない。
ってことで例外機構はデフォルトで何もせずに異常終了するようになってるんだよ。
147はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Cx9t)
2024/01/12(金) 02:09:19.72ID:Z8/dVhwe0 理想的には全ての例外はキャッチされるべき。 ただ、現実は理想的ではない。
キャッチするのは対処するためなので想定漏れで思ってもなかったような例外が上がってきた (対処が出来てない) ならそれはバグなんだから検証して修正する必要があるわけだし、検証しやすい形で止まったほうがいい。
C++ ではスタックの巻き戻しの途中で例外を送出したときの挙動は未定義なので通例ではデストラクタから例外を投げないように設計される。
つまりデストラクタでの後始末に失敗したらもうそれを (例外機構の仕組みでは) フォローできない。
想定されてない例外が上がってるときに後始末がちゃんとできずにわけのわからない動作を引き起こしたら検証にも支障がある。
キャッチするのは対処するためなので想定漏れで思ってもなかったような例外が上がってきた (対処が出来てない) ならそれはバグなんだから検証して修正する必要があるわけだし、検証しやすい形で止まったほうがいい。
C++ ではスタックの巻き戻しの途中で例外を送出したときの挙動は未定義なので通例ではデストラクタから例外を投げないように設計される。
つまりデストラクタでの後始末に失敗したらもうそれを (例外機構の仕組みでは) フォローできない。
想定されてない例外が上がってるときに後始末がちゃんとできずにわけのわからない動作を引き起こしたら検証にも支障がある。
148デフォルトの名無しさん (ワッチョイ 7f7c-acFs)
2024/01/12(金) 09:48:31.22ID:1nCpSyqU0 じゃあ「投げられうるすべての例外に適切な対処ができるのが理想的だが、対処しきれない例外は投げられっぱなしにする(そしてプログラムを即座に異常終了させる)方が、思考停止でとりあえず捕捉しておくよりはまだマシ」ってことになるのかな
みんなありがとう
みんなありがとう
149デフォルトの名無しさん (ワントンキン MMdf-7Pe6)
2024/01/12(金) 09:51:15.81ID:Vmsz+UsIM いやいや、ちゃんとデバッグしろよ
こんなやつとは絶対一緒に仕事したくない
こんなやつとは絶対一緒に仕事したくない
150デフォルトの名無しさん (ワッチョイ 5f4e-1VUN)
2024/01/12(金) 09:58:11.40ID:yLdIK4jH0 ライブラリ書くときはライブラリで対処できない例外は握り潰さずに上位で伝搬させろ!と言われてるよね
アプリも同じだと思う
明確に対処すべきことがあるなら例外をキャッチすればいいし
ないならそのままプロセス落としてOSに任せればいいんでない?
アプリも同じだと思う
明確に対処すべきことがあるなら例外をキャッチすればいいし
ないならそのままプロセス落としてOSに任せればいいんでない?
151デフォルトの名無しさん (ワッチョイ 7f7c-acFs)
2024/01/12(金) 10:01:16.79ID:1nCpSyqU0 投げられっぱなしにするって言い方が不適切だったかな、別に例外のせいでプログラムが実際に異常終了するのを見ても知らんぷりするって意味じゃないよ
実際にプログラムが異常終了したんだったらその都度原因は突き止めて修正するし、そもそもすべての例外に網羅的に対処するのが現実的なときは最初からそうするよ
実際にプログラムが異常終了したんだったらその都度原因は突き止めて修正するし、そもそもすべての例外に網羅的に対処するのが現実的なときは最初からそうするよ
152デフォルトの名無しさん (ワッチョイ df09-dvWY)
2024/01/12(金) 10:06:03.47ID:Umd8uX9b0 try {} catch {}
153はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-TQnC)
2024/01/12(金) 17:12:14.63ID:Z8/dVhwe0 想定される状況には対処しているならどこで想定漏れがあるかはやってみないとわからない。
経験を蓄積し続けるしかしょうがないんだよな。
蓄積がテストケースの形などになっているとより良いと思う。
経験を蓄積し続けるしかしょうがないんだよな。
蓄積がテストケースの形などになっているとより良いと思う。
154デフォルトの名無しさん (ブーイモ MM0f-Nf4k)
2024/01/12(金) 17:26:50.90ID:059LeD4FM 自分の知らないライブラリの奥底からいつ投げられるかわからない例外なんて対処しようがない
かつスタックアンワインドしたらデバッグの手がかり消えるだけ
かつスタックアンワインドしたらデバッグの手がかり消えるだけ
155デフォルトの名無しさん (ブーイモ MM9f-2j6O)
2024/01/12(金) 17:44:35.30ID:bUlwQWI8M setjump()/longjump()
156デフォルトの名無しさん (ワッチョイ df63-+bVA)
2024/01/13(土) 13:54:58.62ID:rNqWj2dY0 やっぱC++の例外は悪……
構造化例外ならwindbgでコアダンプを開いて!analyze -vで発生源を調べられる(仕組みは知らん
がC++の例外は例外オブジェクトが持ち出した情報が全て……
という印象……
構造化例外ならwindbgでコアダンプを開いて!analyze -vで発生源を調べられる(仕組みは知らん
がC++の例外は例外オブジェクトが持ち出した情報が全て……
という印象……
157デフォルトの名無しさん (ワッチョイ df63-+bVA)
2024/01/13(土) 14:10:21.49ID:rNqWj2dY0 やっぱ例外というブツは、
アプリケーション領域においてプログラミがいろんなリソースを取り扱うようになった結果、
C言語流に関数の戻り値で起こり得る全てのエラーを網羅してチェックする方法が
現実的でなくなってきたから設けられたブツなので
>自分の知らないライブラリの奥底からいつ投げられるかわからない例外(>>154
すなわち設計に対して想定外の事象が起きた知らせとしてが飛んでくるというのが基本的かつ本来的な姿
起こりえる全ての例外の処置を書かなければ設計とは言えない主義の人(>>149)は
寧ろ例外の使用をやめてC言語的な書き方で全てのエラーをチェックすべき
(他人様が作ったライブラリが例外を飛ばしてくるのは仕方が無いから全てcatchする
アプリケーション領域においてプログラミがいろんなリソースを取り扱うようになった結果、
C言語流に関数の戻り値で起こり得る全てのエラーを網羅してチェックする方法が
現実的でなくなってきたから設けられたブツなので
>自分の知らないライブラリの奥底からいつ投げられるかわからない例外(>>154
すなわち設計に対して想定外の事象が起きた知らせとしてが飛んでくるというのが基本的かつ本来的な姿
起こりえる全ての例外の処置を書かなければ設計とは言えない主義の人(>>149)は
寧ろ例外の使用をやめてC言語的な書き方で全てのエラーをチェックすべき
(他人様が作ったライブラリが例外を飛ばしてくるのは仕方が無いから全てcatchする
158デフォルトの名無しさん (ワッチョイ df63-+bVA)
2024/01/13(土) 14:15:12.02ID:rNqWj2dY0 つなみにOSの内部ではすべてのリソースをOSが管理する前提なので例外の出る幕は無い
OSの設計に対して想定外の事象がOS内部で起きるとかあり得ないじゃない
レトロな(しかしメジャーな)OSがC++ではなくC言語で書かれ続けるのはそういう理由
OSの設計に対して想定外の事象がOS内部で起きるとかあり得ないじゃない
レトロな(しかしメジャーな)OSがC++ではなくC言語で書かれ続けるのはそういう理由
159はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-TQnC)
2024/01/13(土) 14:21:37.75ID:3bve4IFf0 何が返ってくるかわからん (ドキュメント化されていない) なら返却値の形になっていても正しく対処できないのは同じだろ。
160デフォルトの名無しさん (ワッチョイ ff18-Nf4k)
2024/01/13(土) 14:37:35.65ID:b/trpwza0 例外だとテストしないドキュメントにも書かないというモラルハザードがおきやすいとは言えるだろう
返り値はエラー体系を自分で定義しないといかんからそうはなりにくい
まぁそれでも失敗を安易にfalseに丸めるどアホは多いけど
返り値はエラー体系を自分で定義しないといかんからそうはなりにくい
まぁそれでも失敗を安易にfalseに丸めるどアホは多いけど
161デフォルトの名無しさん (ワッチョイ ffcf-mfjK)
2024/01/13(土) 15:22:27.34ID:o+zGF69d0 >>157
>すなわち設計に対して想定外の事象が起きた知らせとしてが飛んでくるというのが基本的かつ本来的な姿
それ一般にはリリース後に起きちゃいけないことでは。プロダクトにもよるが防ぐ努力は必要だと思うがね。
>すなわち設計に対して想定外の事象が起きた知らせとしてが飛んでくるというのが基本的かつ本来的な姿
それ一般にはリリース後に起きちゃいけないことでは。プロダクトにもよるが防ぐ努力は必要だと思うがね。
162デフォルトの名無しさん (ワッチョイ 7291-Qz6p)
2024/01/14(日) 13:01:30.73ID:H7tsxQrq0 >>138
全選択肢を同時に選ぶって意味に捉えられちゃったかな?
そうじゃなくて、その選択肢自体が同時に適用すべきレベルのものじゃないと思うの
例外をキャッチするって決めたなら、そこには目的があるよね?
設計手順としては目的を決めてから例外を使おうって判断になるわけ
その目的次第だよね?っていうのがD
目的がリソースリーク防止ならA
Aのような目的を達成するために、目的範囲内でB
デバッグ目的ならC
製品等で客の目に見せたくないなどの営業目的があるならCはダメで、のべつまくなしBというのもあるかもしれない
全選択肢を同時に選ぶって意味に捉えられちゃったかな?
そうじゃなくて、その選択肢自体が同時に適用すべきレベルのものじゃないと思うの
例外をキャッチするって決めたなら、そこには目的があるよね?
設計手順としては目的を決めてから例外を使おうって判断になるわけ
その目的次第だよね?っていうのがD
目的がリソースリーク防止ならA
Aのような目的を達成するために、目的範囲内でB
デバッグ目的ならC
製品等で客の目に見せたくないなどの営業目的があるならCはダメで、のべつまくなしBというのもあるかもしれない
163デフォルトの名無しさん (ワッチョイ 7291-Qz6p)
2024/01/14(日) 13:06:09.91ID:H7tsxQrq0 大きな目で全工程トータルを考えると全部の選択肢を適用する必要があるし、適用のしどころが違うと思うってのが>>136の真意でした
164デフォルトの名無しさん (ワッチョイ 7291-Qz6p)
2024/01/14(日) 13:12:37.16ID:H7tsxQrq0 >>148
これが正しいかどうかはおいといて、人命に関わらないなら、自分はその考え方に賛成!
完璧にデバッグしろというのは自動車と医療機器など人命にかかわるものだね
重要度に応じて工数のかけ方が変わってくるので、すべてのソフトウエアで一概にこうしなさいとは言えないかな
そういう意味ではD
これが正しいかどうかはおいといて、人命に関わらないなら、自分はその考え方に賛成!
完璧にデバッグしろというのは自動車と医療機器など人命にかかわるものだね
重要度に応じて工数のかけ方が変わってくるので、すべてのソフトウエアで一概にこうしなさいとは言えないかな
そういう意味ではD
165デフォルトの名無しさん (ワッチョイ 4d34-7Ntv)
2024/01/14(日) 15:16:56.65ID:by9QQMRz0166デフォルトの名無しさん (ワッチョイ 6ecf-CdjJ)
2024/01/15(月) 08:10:14.00ID:Y8oMeLNI0 人命にかかわらない場合であっても、末端の関数が投げる例外の種類を見落としただけでプログラム全体が
いきなり落ちるのは勘弁してほしいし、それを防ぐために全部の関数が投げる例外の種類を全部把握するというのも
無理ゲーに近い。
なので適当なレイヤーごとにざっくり std::exception をキャッチする造りにしてるな。例外の種類で選択したりはしない。
いきなり落ちるのは勘弁してほしいし、それを防ぐために全部の関数が投げる例外の種類を全部把握するというのも
無理ゲーに近い。
なので適当なレイヤーごとにざっくり std::exception をキャッチする造りにしてるな。例外の種類で選択したりはしない。
167デフォルトの名無しさん (ブーイモ MM22-7+/r)
2024/01/15(月) 11:54:06.38ID:0QYW1wwzM キャッチしてその後どうすんの?
168デフォルトの名無しさん (ワッチョイ 41f0-u9am)
2024/01/15(月) 18:12:26.71ID:FtZTeDOW0 何するか思い付かないならPG辞めろ
貴様には向いてない
貴様には向いてない
169デフォルトの名無しさん (ワッチョイ 6ecf-CdjJ)
2024/01/15(月) 18:20:04.00ID:Y8oMeLNI0 >>167
そのtryブロックの処理が失敗したものとして処理を続ける。
そのtryブロックの処理が失敗したものとして処理を続ける。
170デフォルトの名無しさん (ワッチョイ 46ea-7+/r)
2024/01/15(月) 18:42:14.36ID:Lgn9c/GO0 テストケース爆増じゃん
171デフォルトの名無しさん (ワッチョイ 6ecf-CdjJ)
2024/01/15(月) 19:20:39.72ID:Y8oMeLNI0 なんで爆増?
172デフォルトの名無しさん (ワッチョイ 46ea-7+/r)
2024/01/15(月) 20:40:13.04ID:Lgn9c/GO0 その失敗する処理の具体例言ってみて
173デフォルトの名無しさん (ワッチョイ 6ecf-CdjJ)
2024/01/15(月) 22:10:56.13ID:Y8oMeLNI0 んでテストケース爆増の話は?処理の具体例次第で話が変わったりするとか?
174デフォルトの名無しさん (ワッチョイ 46ea-7+/r)
2024/01/15(月) 22:45:20.95ID:Lgn9c/GO0 依存関係のあるものに影響あるのは当たり前
原因不明の例外起こっても突き進むんだったら擬似的にそのケース作ってテストするわな普通は
出し渋るなら別にださなくていいよ
参考にならなさそうだし
原因不明の例外起こっても突き進むんだったら擬似的にそのケース作ってテストするわな普通は
出し渋るなら別にださなくていいよ
参考にならなさそうだし
175デフォルトの名無しさん (ワッチョイ 6ecf-CdjJ)
2024/01/15(月) 23:24:57.00ID:Y8oMeLNI0 それはいったい何のテストなんだろう。原因不明の例外を首尾よくキャッチできるかどうかテストしろと言っているんだろうか。
そもそもそういう例外を想定するなら、スルーして影響範囲が広がる方がテストは厄介になると思うがなあ。
そもそもそういう例外を想定するなら、スルーして影響範囲が広がる方がテストは厄介になると思うがなあ。
176デフォルトの名無しさん (ワッチョイ 11fb-5Qxc)
2024/01/15(月) 23:36:35.23ID:rchiNbsm0 たとえば業務用のラベルプリンターでAPIが提供されてるとか
とりあえず try ~ catch して「印刷中に不明なエラーが発生しました」みたいなまとめかたはあるかなー
とりあえず try ~ catch して「印刷中に不明なエラーが発生しました」みたいなまとめかたはあるかなー
177デフォルトの名無しさん (ワッチョイ 2778-EFyZ)
2024/01/23(火) 17:00:13.54ID:kD0da0AW0 すみません。質問させて下さい。次のコードがMinGW-w64 g++ v13.2では --itrでエラーになります。わからないのはVisual studio 2022およびVisual StudioがサポートするClang LLVMでは通って正しく
実行しているように見えます。--itrの仕様がないのはMinGW-w64 g++v13.2が正しいのでしょうか?それともVisual Studioが正しいのでしょうか?
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<int> us = { 1,2,3,4,5,6 };
for(auto itr = begin(us); itr != end(us); ++itr) cout << *itr << endl;
auto itr = us.begin();
++itr; ++itr;
cout << *itr << endl;
--itr;
cout << *itr << endl;
cin.get();
return 0;
}
MinGW-w64 g++ v13.2のエラー
// error: no match for 'operator--' (operand type is 'std::__detail::_Node_iterator<int, true, false>')
実行しているように見えます。--itrの仕様がないのはMinGW-w64 g++v13.2が正しいのでしょうか?それともVisual Studioが正しいのでしょうか?
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<int> us = { 1,2,3,4,5,6 };
for(auto itr = begin(us); itr != end(us); ++itr) cout << *itr << endl;
auto itr = us.begin();
++itr; ++itr;
cout << *itr << endl;
--itr;
cout << *itr << endl;
cin.get();
return 0;
}
MinGW-w64 g++ v13.2のエラー
// error: no match for 'operator--' (operand type is 'std::__detail::_Node_iterator<int, true, false>')
178はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-G0Zh)
2024/01/23(火) 17:23:45.88ID:MIeJSKFF0 >>177
unordered_set は forward iterator をサポートしているという規定がある。
https://timsong-cpp.github.io/cppwp/n3337/unord.set.overview#1
forward iterator は進めることは出来ても戻ることはできない。
この場合は operator-- がないのが正しい。
拡張してより高機能なライブラリを提供しても仕様に反するってわけではないけど
マイクロソフトのドキュメントでも特に拡張しているという文面は見当たらないから
あんまりあてにしないほうが良さそうには思う。
https://learn.microsoft.com/en-us/cpp/standard-library/unordered-set-class?view=msvc-170#iterator
unordered_set は forward iterator をサポートしているという規定がある。
https://timsong-cpp.github.io/cppwp/n3337/unord.set.overview#1
forward iterator は進めることは出来ても戻ることはできない。
この場合は operator-- がないのが正しい。
拡張してより高機能なライブラリを提供しても仕様に反するってわけではないけど
マイクロソフトのドキュメントでも特に拡張しているという文面は見当たらないから
あんまりあてにしないほうが良さそうには思う。
https://learn.microsoft.com/en-us/cpp/standard-library/unordered-set-class?view=msvc-170#iterator
179デフォルトの名無しさん (ワッチョイ 2778-EFyZ)
2024/01/23(火) 17:34:44.31ID:kD0da0AW0 おお、ありがとうございます。
180デフォルトの名無しさん (ワッチョイ 6d63-H5uA)
2024/01/28(日) 11:36:45.25ID:W0uCnQb30 >>173
横やが関数foo()で1つの例外が発生したらその時点のfoo()呼び出しに至る10個かそこらの関数が中断されるわけや
すなわち関数bar()が
処理A→B→C→D→return
の順で処理が進むことを気体しているところに、Bで呼び出している関数baz()がfoo()を呼び出している結果、foo()で例外を生じると
処理A→B→return
という処理順に変更になる。こうなっても大丈夫なようにtry { 処理B } catch ((fooが投げる例外)& e) { (eに対する適切な処置) } を書かねばならず、
これが実は潜在的には処理A、B、C、Dのどこでも起き得るから厳密なことを言えば全てについて書かねばならず、
それがfoo()呼び出しに至る10個かそこらの関数それぞれについて行われねばならない。
検証もそんだけ組み合わせが増える。
横やが関数foo()で1つの例外が発生したらその時点のfoo()呼び出しに至る10個かそこらの関数が中断されるわけや
すなわち関数bar()が
処理A→B→C→D→return
の順で処理が進むことを気体しているところに、Bで呼び出している関数baz()がfoo()を呼び出している結果、foo()で例外を生じると
処理A→B→return
という処理順に変更になる。こうなっても大丈夫なようにtry { 処理B } catch ((fooが投げる例外)& e) { (eに対する適切な処置) } を書かねばならず、
これが実は潜在的には処理A、B、C、Dのどこでも起き得るから厳密なことを言えば全てについて書かねばならず、
それがfoo()呼び出しに至る10個かそこらの関数それぞれについて行われねばならない。
検証もそんだけ組み合わせが増える。
181デフォルトの名無しさん (ワッチョイ 6d63-H5uA)
2024/01/28(日) 11:40:58.52ID:W0uCnQb30 というわけでそんなの現実には不可能なので、現実的な処置としては
・ライブラリ製作者はなんか都合が悪い事が起きたら何でも呼び出し元に返す。
第1選択としてはエラーステータスを返すことを検討し、それではコードが煩雑になりすぎる場合は例外を投げて異常を知らせる
・ライブラリを使う人はライブラリが例外を投げない条件で使うことを心掛け、自前のコード内でtry { } catch() { }を極力しない
という処置になるわ
けや
・ライブラリ製作者はなんか都合が悪い事が起きたら何でも呼び出し元に返す。
第1選択としてはエラーステータスを返すことを検討し、それではコードが煩雑になりすぎる場合は例外を投げて異常を知らせる
・ライブラリを使う人はライブラリが例外を投げない条件で使うことを心掛け、自前のコード内でtry { } catch() { }を極力しない
という処置になるわ
けや
182デフォルトの名無しさん (ワッチョイ 66cf-5eDQ)
2024/01/28(日) 12:02:32.93ID:Gsm093HM0 catchしようがしまいが、例外が起きて 処理A→B→return となるのは同じだと思うが。
その場合の検証が必要だというならどっちも必要だろ。
その場合の検証が必要だというならどっちも必要だろ。
183デフォルトの名無しさん (ワッチョイ 6d63-H5uA)
2024/01/28(日) 12:13:11.85ID:W0uCnQb30 >>182
>catchしようがしまいが、例外が起きて 処理A→B→return となるのは同じだと思うが。
それは問題の認識がおかいし
例えば以下のコードにおいて、スレッドのゾンビを生じさせないためにはfuncB()をtry { } catch () { } は必須になる。
void bar() {
funcA(); // スレッドxを起動
funcB(); // 中でbaz() → foo()の呼び出し
funcC(); // スレッドxに停止シグナル発酵
funcD(); // スレッドxの終了待ち
return;
}
このように一般に例外が飛んでくる関数にはcatchするかしないかの選択権など無い
例外安全なオブジェクト「だけ」で事が済んでいない限り、例外を受けると決めた時点でcatchせねばならない
一方、例外を生じないライブラリの使い方(関数の呼び出し方)を心掛けるかどうか。これなら選択肢がある
>catchしようがしまいが、例外が起きて 処理A→B→return となるのは同じだと思うが。
それは問題の認識がおかいし
例えば以下のコードにおいて、スレッドのゾンビを生じさせないためにはfuncB()をtry { } catch () { } は必須になる。
void bar() {
funcA(); // スレッドxを起動
funcB(); // 中でbaz() → foo()の呼び出し
funcC(); // スレッドxに停止シグナル発酵
funcD(); // スレッドxの終了待ち
return;
}
このように一般に例外が飛んでくる関数にはcatchするかしないかの選択権など無い
例外安全なオブジェクト「だけ」で事が済んでいない限り、例外を受けると決めた時点でcatchせねばならない
一方、例外を生じないライブラリの使い方(関数の呼び出し方)を心掛けるかどうか。これなら選択肢がある
184デフォルトの名無しさん (ワッチョイ 6d63-H5uA)
2024/01/28(日) 12:14:54.75ID:W0uCnQb30 訂正orz
誤:例外安全なオブジェクト「だけ」で事が済んでいない限り、例外を受けると決めた時点でcatchせねばならない
正:例外安全なオブジェクト「だけ」で事が済んでいない限り、例外が飛んでくる想定であるならばcatchせねばならない
誤:例外安全なオブジェクト「だけ」で事が済んでいない限り、例外を受けると決めた時点でcatchせねばならない
正:例外安全なオブジェクト「だけ」で事が済んでいない限り、例外が飛んでくる想定であるならばcatchせねばならない
185デフォルトの名無しさん (ワッチョイ 797c-+np5)
2024/01/28(日) 12:19:26.10ID:/bXkl1Cz0 >>183
それはfuncB()に失敗の可能性がある時に必ず必要な話だろ?例外どうこうじゃないじゃん
funcB()が例外を投げずに古き良きintのエラーコードを戻り値で返す場合は何かが変わるの?
まさか「funcBの戻り値をガン無視すればfuncCもfuncDも実行されてくれるから完璧!だから例外はクソ!」っていうゴミカスみたいな主張をしたいわけじゃないよね?
それはfuncB()に失敗の可能性がある時に必ず必要な話だろ?例外どうこうじゃないじゃん
funcB()が例外を投げずに古き良きintのエラーコードを戻り値で返す場合は何かが変わるの?
まさか「funcBの戻り値をガン無視すればfuncCもfuncDも実行されてくれるから完璧!だから例外はクソ!」っていうゴミカスみたいな主張をしたいわけじゃないよね?
186デフォルトの名無しさん (ワッチョイ 66cf-5eDQ)
2024/01/28(日) 12:28:00.13ID:Gsm093HM0187デフォルトの名無しさん (ワッチョイ 5ef3-qitC)
2024/01/28(日) 15:40:48.23ID:JnoCOYDS0 そもそも未知の例外飛んできた時点でそれを通したライブラリの例外安全性が守られてるか怪しいと考えるべき
188デフォルトの名無しさん (ワッチョイ 66cf-5eDQ)
2024/01/28(日) 17:01:39.99ID:Gsm093HM0 例外安全性を守るのに例外の種類やそれが既知か未知かは関係ないだろうが、
仕様に明記した例外以外は堰き止めるのが正解だろうなあ。
仕様に明記した例外以外は堰き止めるのが正解だろうなあ。
189◆QZaw55cn4c (ワッチョイ 3583-LgJ8)
2024/01/28(日) 20:27:29.75ID:0TnCAHFI0 思い立って結城さんのデザパタ(古いjava で記述)を総称型(テンプレート)もちゃんと使ってC++ に書き直しているけれども、
new/delete からptr::shared_ptr に書きなおすと、もう構造がわかりにくくなってしまってどうしようもない
デザパタ=抽象クラスプログラミングは C++ ではオワコンなの?
Visitor パターン
new/delete: https://ideone.com/6d43LO スッキリ書けてきもちいい
std::shared_ptr: https://ideone.com/oYzkxh 恐ろしい宣言の連発
>std::shared_ptr<Iterator<std::shared_ptr<Entry>>> iterator() { return std::make_shared<VectorIterator<std::shared_ptr<Entry>>>(v); }
なんかもう書いてても意味不明
CONSTRUCTOR(CONSTRUCTOR *p) とかコピコン以外にもみたことのないコンストラクタが要求されるし
new/delete からptr::shared_ptr に書きなおすと、もう構造がわかりにくくなってしまってどうしようもない
デザパタ=抽象クラスプログラミングは C++ ではオワコンなの?
Visitor パターン
new/delete: https://ideone.com/6d43LO スッキリ書けてきもちいい
std::shared_ptr: https://ideone.com/oYzkxh 恐ろしい宣言の連発
>std::shared_ptr<Iterator<std::shared_ptr<Entry>>> iterator() { return std::make_shared<VectorIterator<std::shared_ptr<Entry>>>(v); }
なんかもう書いてても意味不明
CONSTRUCTOR(CONSTRUCTOR *p) とかコピコン以外にもみたことのないコンストラクタが要求されるし
190はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-vdg+)
2024/01/28(日) 20:53:25.29ID:hRRbWEE/0 >>189
スマートポインタを使わないバージョンも C++ 的にはすっきりしてない。
動的多態の必要が必要ないのに持つべきメンバ関数を強制するためだけに抽象クラスを使っていて不恰好に見える。
コンセプトの導入がだいぶん後回しになった C++ の問題でもあるんだが……。
設計理念が妥当かどうかはともかくとして、元が Java なら直訳めいた C++ への置き換えがすっきりと書けるはずがない。
スマートポインタを使わないバージョンも C++ 的にはすっきりしてない。
動的多態の必要が必要ないのに持つべきメンバ関数を強制するためだけに抽象クラスを使っていて不恰好に見える。
コンセプトの導入がだいぶん後回しになった C++ の問題でもあるんだが……。
設計理念が妥当かどうかはともかくとして、元が Java なら直訳めいた C++ への置き換えがすっきりと書けるはずがない。
191はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-vdg+)
2024/01/28(日) 21:08:52.58ID:hRRbWEE/0 ざっと見た感じだと抽象クラスとして必要なのは Entry だけかな。
ジェネリックラムダが visitor パターンで使いやすいのでそういうのが使いやすいように配慮するといいかも。
std::visit が C++ での visitor パターンのお手本だよ。
ジェネリックラムダが visitor パターンで使いやすいのでそういうのが使いやすいように配慮するといいかも。
std::visit が C++ での visitor パターンのお手本だよ。
192デフォルトの名無しさん (ワッチョイ b501-PlwZ)
2024/01/28(日) 22:46:18.85ID:VLKT1lFt0193デフォルトの名無しさん (JP 0Hbd-DQL8)
2024/01/28(日) 23:17:29.01ID:wkb3ctO/H 面白そうだからちょっと書いてみた。大きな変更点はこんな感じ。
・accept が受け取るのは単に Visitor の参照でいい。ここで shared_ptr を使う必要はない。
・Visitor が受け取るのも File や Directory の参照でいい。
・SizeVisitor もいらない。File と Directory はともに Entry の子クラスとして getSize() を実装してるんだから、無理に visitor パターンを使わなくても単に getSize() を呼べばいいだけ。
・iterator() が返すのも VectorIterator の shared_ptr ではなく、単に VectorIterator を返せばいい。
全体的に使う必要がない場面で shared_ptr を使ってるのが目立ったと思う。
https://wandbox.org/permlink/ZBKbF5iMVpb7Looi
だいぶすっきりしたんじゃない?
・accept が受け取るのは単に Visitor の参照でいい。ここで shared_ptr を使う必要はない。
・Visitor が受け取るのも File や Directory の参照でいい。
・SizeVisitor もいらない。File と Directory はともに Entry の子クラスとして getSize() を実装してるんだから、無理に visitor パターンを使わなくても単に getSize() を呼べばいいだけ。
・iterator() が返すのも VectorIterator の shared_ptr ではなく、単に VectorIterator を返せばいい。
全体的に使う必要がない場面で shared_ptr を使ってるのが目立ったと思う。
https://wandbox.org/permlink/ZBKbF5iMVpb7Looi
だいぶすっきりしたんじゃない?
194はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-MxBP)
2024/01/28(日) 23:52:27.85ID:hRRbWEE/0 なんかもうポインタをいじるのが面倒になったので値としてやりとりしていいやという気持ちと
標準ライブラリを積極的に活用することにしたらこうなった。
https://wandbox.org/permlink/BQCNjfdJRKWAR3dg
標準ライブラリを積極的に活用することにしたらこうなった。
https://wandbox.org/permlink/BQCNjfdJRKWAR3dg
195◆QZaw55cn4c (ワッチョイ 3583-LgJ8)
2024/01/29(月) 04:35:04.36ID:M6sadnnj0196◆QZaw55cn4c (ワッチョイ 3583-LgJ8)
2024/01/29(月) 05:00:34.95ID:M6sadnnj0197はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-MxBP)
2024/01/29(月) 12:08:36.13ID:WXyC0nMC0 スマートポインタを使うにしても std::shared_ptr って必要?
この場合は std::unique_ptr でよくない?
https://wandbox.org/permlink/dMolraFpQHKzYtF3
設計思想によるけどファイルシステムを表現するという前提だと
ひとつのルートディレクトリに連なる全てのエントリは実質的に一体のデータ構造なので
ルートディレクトリエントリの寿命が尽きれば全て解体ってことにしたほうが簡単でいいと思う。
ハードリンクの表現とかも考えるなら事情が変わってくることもあるだろうけど……。
この場合は std::unique_ptr でよくない?
https://wandbox.org/permlink/dMolraFpQHKzYtF3
設計思想によるけどファイルシステムを表現するという前提だと
ひとつのルートディレクトリに連なる全てのエントリは実質的に一体のデータ構造なので
ルートディレクトリエントリの寿命が尽きれば全て解体ってことにしたほうが簡単でいいと思う。
ハードリンクの表現とかも考えるなら事情が変わってくることもあるだろうけど……。
198デフォルトの名無しさん (ワッチョイ bda8-xxv9)
2024/01/29(月) 21:21:12.23ID:eAAuxXw40 >>189 c++
https://ideone.com/p3li2Y
・https://ideone.com/oYzkxh を元に若干の整理を行った
・他の人と同様shared_ptrを削除
値で持てるところは単に値で持つほうがC++っぽいと思う
ただ「Entry を値で持つのはいやだなあ」とのことなので部分的に残してる
Javaの参照型変数をshared_ptrに置き換えようとして困るのは
size_t File::accept(std::shared_ptr<Visitor> v) { return v->visit(std::make_shared<File>(this)); }
ここがJavaだと単にvisit(this)で済むからスッキリするんだけど
しかもこれmake_shared(this)だと多重開放するよね??
>>189 c++
https://ideone.com/2uUpwH
・https://ideone.com/p3li2Y を元に若干の整理を行った
・make_shared<File>(this)の多重開放?を修正
std::enable_shared_from_thisを使ってJavaの参照型変数っぽい使用感を得た。
・struct this_is_private {};
これは単にコンストラクタを実質的にprivateにするためだけに使ってる
https://en.cppreference.com/w/cpp/memory/enable_shared_from_this
https://stackoverflow.com/questions/8147027/how-do-i-call-stdmake-shared-on-a-class-with-only-protected-or-private-const
このへん参照されたし
https://ideone.com/p3li2Y
・https://ideone.com/oYzkxh を元に若干の整理を行った
・他の人と同様shared_ptrを削除
値で持てるところは単に値で持つほうがC++っぽいと思う
ただ「Entry を値で持つのはいやだなあ」とのことなので部分的に残してる
Javaの参照型変数をshared_ptrに置き換えようとして困るのは
size_t File::accept(std::shared_ptr<Visitor> v) { return v->visit(std::make_shared<File>(this)); }
ここがJavaだと単にvisit(this)で済むからスッキリするんだけど
しかもこれmake_shared(this)だと多重開放するよね??
>>189 c++
https://ideone.com/2uUpwH
・https://ideone.com/p3li2Y を元に若干の整理を行った
・make_shared<File>(this)の多重開放?を修正
std::enable_shared_from_thisを使ってJavaの参照型変数っぽい使用感を得た。
・struct this_is_private {};
これは単にコンストラクタを実質的にprivateにするためだけに使ってる
https://en.cppreference.com/w/cpp/memory/enable_shared_from_this
https://stackoverflow.com/questions/8147027/how-do-i-call-stdmake-shared-on-a-class-with-only-protected-or-private-const
このへん参照されたし
199デフォルトの名無しさん (JP 0Hbd-IHfd)
2024/02/03(土) 04:38:02.47ID:bq1KvR69H https://wandbox.org/permlink/LEl2MT7OdGIlVKC4
なんか「子クラスのコンストラクタに親クラスのオブジェクトを渡して子クラスのメンバを初期化する」(?)みたいなことができちゃってるんだけど、これってどういう仕様でこうなってんの?
Wandbox上だとC++2aではコンパイルできてC++17ではコンパイルできなかったからcpprefjpのC++20の機能の一覧も見てみたけどそれらしいものはなかったし
なんか「子クラスのコンストラクタに親クラスのオブジェクトを渡して子クラスのメンバを初期化する」(?)みたいなことができちゃってるんだけど、これってどういう仕様でこうなってんの?
Wandbox上だとC++2aではコンパイルできてC++17ではコンパイルできなかったからcpprefjpのC++20の機能の一覧も見てみたけどそれらしいものはなかったし
200はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-MxBP)
2024/02/03(土) 09:26:19.03ID:Sz70frqK0 >>199
designated initializer も C++20 からの機能なんだけど……それは脇に置く。
この場合は集成体初期化に該当する。
C++17 から基底の初期化も集成体初期化で扱えるので
child c{p};
というように初期化出来ていた。
更に C++20 では集成体初期化を丸括弧で書いても良いことになったので
child c(p);
とすることが許されるようになった。
designated initializer も C++20 からの機能なんだけど……それは脇に置く。
この場合は集成体初期化に該当する。
C++17 から基底の初期化も集成体初期化で扱えるので
child c{p};
というように初期化出来ていた。
更に C++20 では集成体初期化を丸括弧で書いても良いことになったので
child c(p);
とすることが許されるようになった。
>>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 は破綻しないと信じています
https://ideone.com/GUPcSu
それはともかく、皆様のご意見には感謝しております。これからもお伺いさせていただいた際にはよろしくお願いいたします。
>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 は破綻しないと信じています
https://ideone.com/GUPcSu
それはともかく、皆様のご意見には感謝しております。これからもお伺いさせていただいた際にはよろしくお願いいたします。
202デフォルトの名無しさん (JP 0Hbd-IHfd)
2024/02/03(土) 09:48:07.39ID:bq1KvR69H >>200
https://cpprefjp.github.io/lang/cpp17/extension_to_aggregate_initialization.html
これかあ
実は「childにコンストラクタがある場合」とか「childにprivateメンバがある場合」とか「childがparentをprivate継承している場合」とかはコンパイルが通らなくてもう意味が解らなかったんだけど、それもchildが集成体じゃなくなってたからだったんだね
ありがとう、勉強になった
https://cpprefjp.github.io/lang/cpp17/extension_to_aggregate_initialization.html
これかあ
実は「childにコンストラクタがある場合」とか「childにprivateメンバがある場合」とか「childがparentをprivate継承している場合」とかはコンパイルが通らなくてもう意味が解らなかったんだけど、それもchildが集成体じゃなくなってたからだったんだね
ありがとう、勉強になった
203◆QZaw55cn4c (ワッチョイ 3555-LgJ8)
2024/02/03(土) 10:15:36.86ID:21sfApha0 >>198
>値で持てるところは単に値で持つほうがC++っぽいと思う
時代の流れを感じさせるお言葉です。なにせ K&R1 で育った世代なので(K&R1 では構造体の実体渡しはできず、かならずポインタで渡さなければならなかった)。
C++ においても、コピコンを働かせないために const & を多用する毎日です
>値で持てるところは単に値で持つほうがC++っぽいと思う
時代の流れを感じさせるお言葉です。なにせ K&R1 で育った世代なので(K&R1 では構造体の実体渡しはできず、かならずポインタで渡さなければならなかった)。
C++ においても、コピコンを働かせないために const & を多用する毎日です
204はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-MxBP)
2024/02/03(土) 14:49:57.28ID:Sz70frqK0 >>203
内部的に値で持つのでもポインタで持つのでもいいけど
「簡単に値として取り出せる」のはあまりよろしくないと思う。
これ (>>189) がおそらくファイルシステムを表現しようとするもの
だという前提を考えたらオブジェクトの構造も
ファイルシステムのモデルを抽象するものであるべきだと思うから。
ファイルはそれがある場所にも意味があるからファイルを象徴するオブジェクトが
場所から離れてやりとりされるのは違和感がある。
まあファイルシステムのモデルをどう捉えるかは私の感想でしかないから
何が妥当とは強くは主張しないけど、
いずれにしても実装上の都合じゃなくて使う側の感覚でどうなってて欲しいかという視点が要ると思う。
内部的に値で持つのでもポインタで持つのでもいいけど
「簡単に値として取り出せる」のはあまりよろしくないと思う。
これ (>>189) がおそらくファイルシステムを表現しようとするもの
だという前提を考えたらオブジェクトの構造も
ファイルシステムのモデルを抽象するものであるべきだと思うから。
ファイルはそれがある場所にも意味があるからファイルを象徴するオブジェクトが
場所から離れてやりとりされるのは違和感がある。
まあファイルシステムのモデルをどう捉えるかは私の感想でしかないから
何が妥当とは強くは主張しないけど、
いずれにしても実装上の都合じゃなくて使う側の感覚でどうなってて欲しいかという視点が要ると思う。
205デフォルトの名無しさん (ワッチョイ f7da-tydm)
2024/02/04(日) 11:53:17.97ID:nmDLw2WS0 はちみつさん頭いいね
アドバイスが丁寧かつ的確でいつも感心する
アドバイスが丁寧かつ的確でいつも感心する
206デフォルトの名無しさん (ワッチョイ 5702-VoFb)
2024/02/05(月) 20:47:16.57ID:dvRwXcQL0 ある構造体(集成体)Aについてconstexprでa1, a2, a3・・・といくつか作りました
別のクラスBのメンバ変数にconst A* m_ptrAがあってconstexprで作ったインスタンスのどれかを指すことにします
この時Bのメンバ関数などで、
if(m_ptrA== &a1) という比較・条件分岐を行うのは意味のある比較になっているのでしょうか?
別のクラスBのメンバ変数にconst A* m_ptrAがあってconstexprで作ったインスタンスのどれかを指すことにします
この時Bのメンバ関数などで、
if(m_ptrA== &a1) という比較・条件分岐を行うのは意味のある比較になっているのでしょうか?
207デフォルトの名無しさん (ワッチョイ bfe1-tai3)
2024/02/05(月) 21:20:14.92ID:crhbGtf+0 意味はある
でもなるべくそういう判定は無しでいけるように設計したいところだよな
Aクラスを作ってる意義が薄れる
あと細かいこと言えばaddressofを使ったほうが汎用的というのはある
c++のクソっぷりが如実に表れている関数
でもなるべくそういう判定は無しでいけるように設計したいところだよな
Aクラスを作ってる意義が薄れる
あと細かいこと言えばaddressofを使ったほうが汎用的というのはある
c++のクソっぷりが如実に表れている関数
208デフォルトの名無しさん (ワッチョイ 5702-VoFb)
2024/02/06(火) 11:08:08.32ID:KJUqS3Ww0 ありがとうございました
本当に列挙型代わりに使えるのなら面白いとも思いましたが
まあ変なコードには間違いないですね
本当に列挙型代わりに使えるのなら面白いとも思いましたが
まあ変なコードには間違いないですね
209はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3732-11P2)
2024/02/06(火) 12:11:55.01ID:gR/xoQQt0 分岐の内容次第ではあるけど……Bが指しているAのオブジェクトごとに処理を切り替えるってのなら
a1, a2, a3 …… がそれぞれ関数 (関数オブジェクト) を指す (所有する) ようにするのが常道ではあるね。
Bのメンバ関数の中では呼び出しを一文書くだけでいい。
分岐条件を網羅しそこなうしょうもないミスはよくあることだから
手作業での網羅を避けられるならそのほうがいい。
a1, a2, a3 …… がそれぞれ関数 (関数オブジェクト) を指す (所有する) ようにするのが常道ではあるね。
Bのメンバ関数の中では呼び出しを一文書くだけでいい。
分岐条件を網羅しそこなうしょうもないミスはよくあることだから
手作業での網羅を避けられるならそのほうがいい。
210デフォルトの名無しさん (オイコラミネオ MMeb-tjaG)
2024/02/06(火) 20:42:09.19ID:WnlTLfV5M 「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」
とあるので、C 言語での配列添え字は符号付き整数
ですね。
しかし、C++ では、size_t とされ、符合なし整数
のようですが、矛盾しませんか?
VC++の以下のマクロでは、
#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
eが偽の時にエラーになるようになっているようです。
これはつまり、
typedef char aaa[-1];
がエラーになる事を前提にしているようです。
しかし、もし、配列の最大要素数が、符合なし整数
であるならば、32BIT 環境の場合、
-1 は、0xffff_ffff と同じと言えば同じであるはずで、
コンパイラ内部で効率よく区別するのは難しいはずです。
どうしてるんでしょう。
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」
とあるので、C 言語での配列添え字は符号付き整数
ですね。
しかし、C++ では、size_t とされ、符合なし整数
のようですが、矛盾しませんか?
VC++の以下のマクロでは、
#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
eが偽の時にエラーになるようになっているようです。
これはつまり、
typedef char aaa[-1];
がエラーになる事を前提にしているようです。
しかし、もし、配列の最大要素数が、符合なし整数
であるならば、32BIT 環境の場合、
-1 は、0xffff_ffff と同じと言えば同じであるはずで、
コンパイラ内部で効率よく区別するのは難しいはずです。
どうしてるんでしょう。
211デフォルトの名無しさん (オイコラミネオ MMeb-tjaG)
2024/02/06(火) 20:47:53.26ID:WnlTLfV5M 何がいいたいかと言えば、32BIT環境だと
符号付き整数の最大値は、
0x7fff_ffff ですから、
char a[0x7fff_ffff];
は合法ですが、
char a[0xffff_ffff];
はエラーです。よって、
char a[-1];
はコンパイラは難しい処理をしなくても、
-1 は内部表現が 0xffff_ffff ですので
そもそも範囲外の数値と見なせます。
ところが、もし、配列最大数が unsigned
の領域まで許されるならば、要素数が
0xffff_ffff の配列も合法だということに
なります。
ならば、要素数の[] の中に-1 を指定した
場合の処理は難しくなりそうだ、ということです。
なおそもそも、32BIT の Windows 環境
だと、ユーザーが使えるアドレス空間は
最大で 0x7fff_ffff 程度までですから、
バイト数的に確保は出来ませんが。
ならば、そもそも、C++がunsigned 型
であるところの、size_t を採用しているもの
なかなか不可思議であります。
符号付き整数の最大値は、
0x7fff_ffff ですから、
char a[0x7fff_ffff];
は合法ですが、
char a[0xffff_ffff];
はエラーです。よって、
char a[-1];
はコンパイラは難しい処理をしなくても、
-1 は内部表現が 0xffff_ffff ですので
そもそも範囲外の数値と見なせます。
ところが、もし、配列最大数が unsigned
の領域まで許されるならば、要素数が
0xffff_ffff の配列も合法だということに
なります。
ならば、要素数の[] の中に-1 を指定した
場合の処理は難しくなりそうだ、ということです。
なおそもそも、32BIT の Windows 環境
だと、ユーザーが使えるアドレス空間は
最大で 0x7fff_ffff 程度までですから、
バイト数的に確保は出来ませんが。
ならば、そもそも、C++がunsigned 型
であるところの、size_t を採用しているもの
なかなか不可思議であります。
212デフォルトの名無しさん (ワッチョイ bfe1-tai3)
2024/02/06(火) 21:10:01.10ID:cxCkHHUF0 長いからよく読んでないけどコンパイラは型を認識をしてんだから-1と0xFFFFFFFFは区別してるだろ
213デフォルトの名無しさん (ワッチョイ 5772-hPhG)
2024/02/06(火) 21:25:24.39ID:82wR+tAN0 call -151
214デフォルトの名無しさん (ワッチョイ 377c-Hbjn)
2024/02/06(火) 22:29:48.57ID:SZ6XHr3I0 C++の配列添字はstd::ptrdiff_t(符号付き)です
215デフォルトの名無しさん (JP 0H0b-KLri)
2024/02/06(火) 22:36:10.13ID:pbGHBGq1H 配列を宣言するときの構文と添字演算子を使うときの構文を混同してない?前者はブラケットの中身が正じゃなきゃだめで後者は負でもいいってだけの話だと思うんだけど
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には添字は「スコープ無し列挙型か整数型」て書いてあったよ(該当箇所だけつまみ読みしたから正しく読めてる保証はできないけど)
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:12.04ID:kuiQPbhX0 >>210
C の配列宣言子の角括弧内に書ける数値は 0 より大きい値に評価される整数定数式であることが条件で、具体的な型に規定はない。
式の型がなんらかの具体的な型に強制 (型変換) されたりはしないので signed int なら signed int だし、 unsigned int なら unsigned int のままだ。
VLA のときは定数式という条件は外れるけどそれ以外の制限はだいたい同じ。
C の添字演算子の場合もそう。 型は整数であればよい。
(値は制限の範囲内である必要はある。)
どこで見た説明を根拠にしているのか知らんけど、その signed が括弧書きなのは signed 「でもよい」という意味だと思うよ。
C の配列宣言子の角括弧内に書ける数値は 0 より大きい値に評価される整数定数式であることが条件で、具体的な型に規定はない。
式の型がなんらかの具体的な型に強制 (型変換) されたりはしないので signed int なら signed int だし、 unsigned int なら unsigned int のままだ。
VLA のときは定数式という条件は外れるけどそれ以外の制限はだいたい同じ。
C の添字演算子の場合もそう。 型は整数であればよい。
(値は制限の範囲内である必要はある。)
どこで見た説明を根拠にしているのか知らんけど、その signed が括弧書きなのは signed 「でもよい」という意味だと思うよ。
217デフォルトの名無しさん (ワッチョイ bf9a-Ehcu)
2024/02/07(水) 12:42:17.44ID:7NJYw5ei0 std::functionって、有効な関数がセットがされているかどうかでブール値を返しますが、
一旦有効化した後にこれを無効化したい場合って、nullptrを代入したりしていいんでしょうか
そしてその場合std::functionの中身はうまいこと解放されたりするんでしょうか
場合によってはラムダ式を使ってオブジェクトをキャプチャしていたりして
あまりその辺りの説明が見当たらない感じがしました
一旦有効化した後にこれを無効化したい場合って、nullptrを代入したりしていいんでしょうか
そしてその場合std::functionの中身はうまいこと解放されたりするんでしょうか
場合によってはラムダ式を使ってオブジェクトをキャプチャしていたりして
あまりその辺りの説明が見当たらない感じがしました
218デフォルトの名無しさん (ワッチョイ bfb0-tai3)
2024/02/07(水) 12:56:29.41ID:0txhPX/d0 それでいいよ
219はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3732-42qO)
2024/02/07(水) 13:12:18.32ID:kuiQPbhX0220デフォルトの名無しさん (ワッチョイ bf9a-Ehcu)
2024/02/07(水) 14:19:19.97ID:7NJYw5ei0 >>218
ありがとうございます!
ありがとうございます!
221デフォルトの名無しさん (オイコラミネオ MMeb-tjaG)
2024/02/07(水) 18:20:13.87ID:aGYGzZDDM >>212
>長いからよく読んでないけどコンパイラは型
>を認識をしてんだから-1と0xFFFFFFFFは
>区別してるだろ
char a[100-101];
みたいに結果的に -1 になった場合は、
32BITコンパイラの場合、果たして内部で
0xffff_ffff
と区別をつけているかどうか。
unsigned型と考えれば0xffff_ffffであり、
signed型と考えれば -1 です。
ターゲットが 32BIT Windows どちらもエラー
になる可能性は高いですが、理由は結構異なる
と言えば異なると思います。
>長いからよく読んでないけどコンパイラは型
>を認識をしてんだから-1と0xFFFFFFFFは
>区別してるだろ
char a[100-101];
みたいに結果的に -1 になった場合は、
32BITコンパイラの場合、果たして内部で
0xffff_ffff
と区別をつけているかどうか。
unsigned型と考えれば0xffff_ffffであり、
signed型と考えれば -1 です。
ターゲットが 32BIT Windows どちらもエラー
になる可能性は高いですが、理由は結構異なる
と言えば異なると思います。
222デフォルトの名無しさん (オイコラミネオ MMeb-tjaG)
2024/02/07(水) 18:25:16.10ID:aGYGzZDDM もっと言えば、32BIT ターゲットで、
char a[0x80000000 | 1];
みたいな場合、中味は signed と
捉えれば「負数」ですが、unisgned と
捉えれば、0x80000001 という大きな値
に過ぎません。
どちらもエラーになる可能性が高いですが。
char a[0x80000000 | 1];
みたいな場合、中味は signed と
捉えれば「負数」ですが、unisgned と
捉えれば、0x80000001 という大きな値
に過ぎません。
どちらもエラーになる可能性が高いですが。
223デフォルトの名無しさん (ワッチョイ bfb0-tai3)
2024/02/07(水) 18:40:38.44ID:0txhPX/d0 リテラルにも型がある
1はint
0x80000000はunsigned int
演算結果はunsigned int
ルール決まってるから
1はint
0x80000000はunsigned int
演算結果はunsigned int
ルール決まってるから
224デフォルトの名無しさん (ワッチョイ d7f0-P/QA)
2024/02/07(水) 18:55:38.23ID:V2I2BIn30 x86のアセンブラのディスプレースメントは符号付いてるけどな
他のマシン系はワカランけど
他のマシン系はワカランけど
225デフォルトの名無しさん (ワッチョイ bfa4-syIJ)
2024/02/07(水) 20:52:20.31ID:L6yrYnPT0 >>222
32bit環境には64bit整数はないと思ってるの??
32bit環境には64bit整数はないと思ってるの??
226デフォルトの名無しさん (オイコラミネオ MMeb-tjaG)
2024/02/08(木) 18:55:38.81ID:DVUqgRU9M >>223
なるほど。そうなるわけですね。
本当に書いた人の意図がどうかに関わらず、
規則で決まっていると。
1UL のように書いてあれば unsigned。
そして、UL のようなものを書いてない場合、
1 のように小さな値は、signed ですが、signed の
範囲を越えるようなものは、unsigned になる、
などの規則があるわけですね。
なるほど。そうなるわけですね。
本当に書いた人の意図がどうかに関わらず、
規則で決まっていると。
1UL のように書いてあれば unsigned。
そして、UL のようなものを書いてない場合、
1 のように小さな値は、signed ですが、signed の
範囲を越えるようなものは、unsigned になる、
などの規則があるわけですね。
227デフォルトの名無しさん (オイコラミネオ MMeb-tjaG)
2024/02/08(木) 18:56:00.93ID:DVUqgRU9M >>225
そういう問題ではないようですが。
そういう問題ではないようですが。
228デフォルトの名無しさん (ワッチョイ 5763-dZsi)
2024/02/10(土) 12:18:06.78ID:KJGevrBa0229デフォルトの名無しさん (ワッチョイ 5763-dZsi)
2024/02/10(土) 12:26:53.58ID:KJGevrBa0 >>186
>catchしたらテストケースが増えるかどうかという話とはなんも関係がない。
あっる
catchする必要性箇所を設計で厳選すればcatchが減るのだからテストケースは減らし得る
例外を使う場合:
スルーしたりcatchして再スローが生じるfoo()の呼び出し箇所(とするのが現実的でないなら呼び出しパティーン)がm個、
スルーしたりcatchして再スローする段数が(簡単のためここでは平均とする)a個、
foo()が例外を生じるパティーンがn個なら、m^a^n個のテストケースが必要なところであるが
catchする必要性箇所を設計で厳選した場合:
foo()の呼び出し箇所(とするのが現実的でないなら呼び出しパティーン)がm個だとしたら、
例外が飛んでこないことを確認するのテストケースがm個のオーダーで要るだけ……
>catchしたらテストケースが増えるかどうかという話とはなんも関係がない。
あっる
catchする必要性箇所を設計で厳選すればcatchが減るのだからテストケースは減らし得る
例外を使う場合:
スルーしたりcatchして再スローが生じるfoo()の呼び出し箇所(とするのが現実的でないなら呼び出しパティーン)がm個、
スルーしたりcatchして再スローする段数が(簡単のためここでは平均とする)a個、
foo()が例外を生じるパティーンがn個なら、m^a^n個のテストケースが必要なところであるが
catchする必要性箇所を設計で厳選した場合:
foo()の呼び出し箇所(とするのが現実的でないなら呼び出しパティーン)がm個だとしたら、
例外が飛んでこないことを確認するのテストケースがm個のオーダーで要るだけ……
230デフォルトの名無しさん (ワッチョイ 377c-Hbjn)
2024/02/10(土) 16:57:16.73ID:Qku1mp0Z0 >>228
読み飛ばしてねえよ
funcB()は処理を中断すべきエラーが発生する可能性があるんだろ?だったらそれを適切に処理して後続の処理をやったりやらなかったりする必要があるわけだろ?
それはfuncB()がエラーを例外で返そうと戻り値で返そうとなんか他の方法で返そうと何も変わらないはずじゃないか
読み飛ばしてねえよ
funcB()は処理を中断すべきエラーが発生する可能性があるんだろ?だったらそれを適切に処理して後続の処理をやったりやらなかったりする必要があるわけだろ?
それはfuncB()がエラーを例外で返そうと戻り値で返そうとなんか他の方法で返そうと何も変わらないはずじゃないか
231デフォルトの名無しさん (ワッチョイ ffcf-HxQs)
2024/02/10(土) 18:55:23.41ID:0f3gz8pL0 >>229
>例外が飛んでこないことを確認するのテストケースがm個のオーダーで要るだけ……
いったい何をテストしようとしているんだろうか。
仮に「例外が飛んでこないことを確認するテスト」なるものができたとして、catchしたらそれができなくなるのか?
前半のよくわからない計算はcatch句を書いたらそのC0網羅のためのテストケースが必要になるとかいうことなんだろうか。
>例外が飛んでこないことを確認するのテストケースがm個のオーダーで要るだけ……
いったい何をテストしようとしているんだろうか。
仮に「例外が飛んでこないことを確認するテスト」なるものができたとして、catchしたらそれができなくなるのか?
前半のよくわからない計算はcatch句を書いたらそのC0網羅のためのテストケースが必要になるとかいうことなんだろうか。
232デフォルトの名無しさん (ワッチョイ ffcf-HxQs)
2024/02/10(土) 20:56:08.28ID:0f3gz8pL0233デフォルトの名無しさん (ブーイモ MM8f-tai3)
2024/02/10(土) 21:22:31.20ID:dL54PN9cM234デフォルトの名無しさん (ワッチョイ ffcf-HxQs)
2024/02/10(土) 22:40:34.32ID:0f3gz8pL0 >>233
逆だろ。catchしないのはライブらにが未知の例外を投げてこないだろうと信用してるってことだろ。
逆だろ。catchしないのはライブらにが未知の例外を投げてこないだろうと信用してるってことだろ。
235デフォルトの名無しさん (ワッチョイ bf27-tai3)
2024/02/10(土) 23:44:13.35ID:iRyhZExm0236デフォルトの名無しさん (ワッチョイ ef63-uLm/)
2024/02/11(日) 03:08:09.08ID:4PD3HqyC0237デフォルトの名無しさん (ワッチョイ ef63-uLm/)
2024/02/11(日) 03:16:41.24ID:4PD3HqyC0 質問なのですが
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) で正しい?
(実際 std::ldexp(0.5, min_expn - digits + 1) > 0.0 やが std::ldexp(0.5, min_expn - digits + 1) / 2.0 == 0.0 であっる
Q3.にもかかわらず、
std::ldexp(0.5, min_expn - digits) > 0.0 になるのはなんで……orz
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) で正しい?
(実際 std::ldexp(0.5, min_expn - digits + 1) > 0.0 やが std::ldexp(0.5, min_expn - digits + 1) / 2.0 == 0.0 であっる
Q3.にもかかわらず、
std::ldexp(0.5, min_expn - digits) > 0.0 になるのはなんで……orz
238デフォルトの名無しさん (ワッチョイ ef63-uLm/)
2024/02/11(日) 03:25:12.56ID:4PD3HqyC0 訂正 |||。n_
誤1: IEEE735
正1: IEEE754
誤2: 非正規化数
正2: 非正規数
誤1: IEEE735
正1: IEEE754
誤2: 非正規化数
正2: 非正規数
239デフォルトの名無しさん (ワッチョイ 1e27-2ki6)
2024/02/11(日) 06:22:40.58ID:2tL2xZqD0 >>237
wandboxに書いてみ
wandboxに書いてみ
240はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f740-Kvqi)
2024/02/11(日) 07:55:26.62ID:nHqSm2on0241デフォルトの名無しさん (ワッチョイ 16cf-BOeC)
2024/02/11(日) 09:19:29.20ID:XOPhWcHA0242デフォルトの名無しさん (ワッチョイ 637c-IqbK)
2024/02/11(日) 09:29:04.38ID:9XvrSVak0 例外は「関数外にエラー発生を伝える」ための「方法の一つ」でしかない
関数の処理がどんなエラーを発生させうるか、受け取った外側の処理がその情報をどう取り扱うべきかという問題とは完全に直交してる
(言語ごとにある程度の慣例はあるけどあくまで慣例)
例外に変なこだわりや的外れな批判をしてる奴は大体そこを勘違いしてる
関数の処理がどんなエラーを発生させうるか、受け取った外側の処理がその情報をどう取り扱うべきかという問題とは完全に直交してる
(言語ごとにある程度の慣例はあるけどあくまで慣例)
例外に変なこだわりや的外れな批判をしてる奴は大体そこを勘違いしてる
243デフォルトの名無しさん (ワッチョイ 16cf-BOeC)
2024/02/11(日) 09:47:48.61ID:XOPhWcHA0244デフォルトの名無しさん (ワッチョイ 1e27-2ki6)
2024/02/11(日) 09:47:48.79ID:2tL2xZqD0 >>242
お前はバグのないお花畑を考えてるからそういう理想的な抽象論を持ち出すんだよ
c++の現実は道を踏み外したら即カオス
stlのコンテナのpopに返り値がない理由は知ってるか?
あのレベルの考察でソフトウェア設計している人間が世の中にどれだけいると思う?
お前はバグのないお花畑を考えてるからそういう理想的な抽象論を持ち出すんだよ
c++の現実は道を踏み外したら即カオス
stlのコンテナのpopに返り値がない理由は知ってるか?
あのレベルの考察でソフトウェア設計している人間が世の中にどれだけいると思う?
245デフォルトの名無しさん (ワッチョイ 1e27-2ki6)
2024/02/11(日) 09:55:44.37ID:2tL2xZqD0246デフォルトの名無しさん (ワッチョイ 637c-IqbK)
2024/02/11(日) 10:07:06.72ID:9XvrSVak0 >>244
バグのあるなしなんか関係ない設計の話だし、「例外はエラー伝達の具体的方法の一つ」って話のどこが抽象的なのかも分からないし、
「C++の現実」とか「カオス」が具体的に何のことで何の関係があるかも分からないし
STLにpopがないのはnoexcept moveがない時代に例外安全に出来なかったからだけど今の話に何の関係があるかわからないし
そんなのまともなC++erなら誰だって考えて設計してると思うけど、そうでないタコの話が何の関係あるかわからないし何もかも分からなすぎてすごい
仕事でそんなドキュメントやレビューコメント出すなよ
>>245
知らない例外を握り潰すのも、知らない戻り値をガン無視するのも一緒
errnoが変わってるのを無視するのもint*err引数に渡した変数の値を無視するのもexpected<T,E>で帰ってきたEを無視するのも「知らんエラーを無視した」という結果は一緒
知らんエラーを無視していいかどうかの意味論と、そのエラーがどう伝播して来るかかは関係ない
関係ない話を混ぜるからお前のC++はカオスなんだよ
バグのあるなしなんか関係ない設計の話だし、「例外はエラー伝達の具体的方法の一つ」って話のどこが抽象的なのかも分からないし、
「C++の現実」とか「カオス」が具体的に何のことで何の関係があるかも分からないし
STLにpopがないのはnoexcept moveがない時代に例外安全に出来なかったからだけど今の話に何の関係があるかわからないし
そんなのまともなC++erなら誰だって考えて設計してると思うけど、そうでないタコの話が何の関係あるかわからないし何もかも分からなすぎてすごい
仕事でそんなドキュメントやレビューコメント出すなよ
>>245
知らない例外を握り潰すのも、知らない戻り値をガン無視するのも一緒
errnoが変わってるのを無視するのもint*err引数に渡した変数の値を無視するのもexpected<T,E>で帰ってきたEを無視するのも「知らんエラーを無視した」という結果は一緒
知らんエラーを無視していいかどうかの意味論と、そのエラーがどう伝播して来るかかは関係ない
関係ない話を混ぜるからお前のC++はカオスなんだよ
247デフォルトの名無しさん (ワッチョイ 16cf-BOeC)
2024/02/11(日) 10:14:56.00ID:XOPhWcHA0248デフォルトの名無しさん (ワッチョイ ef63-uLm/)
2024/02/11(日) 11:18:37.96ID:4PD3HqyC0 >>231
>前半のよくわからない計算はcatch句を書いたらそのC0網羅のためのテストケースが必要になるとかいうことなんだろうか
例外が関数の階層をぶち抜いてfall-throughしてくることを忘れている発言
1. catchが書かれた関数が正しくcatchし、適切に処理するか(処理してせき止め or/and 必要な場合再スロー)(←要テスト!
2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!
2をテストもせずに放置するとおかしくなる例は>>183のとうーり
これにより、例外を生じる関数foo()の呼び出しパティーンn個それぞれに対し、a個のテストが必要になっる
例外を発生させない使い方をするなら、n*a*mではなくmの定数倍(例外を飛ばさない使い方に依存擦る定数)。
例外が飛んで来たらバグ。わかりやすい
例外を多用しつつn*a*mをよくわからない計算とか言っている時点で以下略
>前半のよくわからない計算はcatch句を書いたらそのC0網羅のためのテストケースが必要になるとかいうことなんだろうか
例外が関数の階層をぶち抜いてfall-throughしてくることを忘れている発言
1. catchが書かれた関数が正しくcatchし、適切に処理するか(処理してせき止め or/and 必要な場合再スロー)(←要テスト!
2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!
2をテストもせずに放置するとおかしくなる例は>>183のとうーり
これにより、例外を生じる関数foo()の呼び出しパティーンn個それぞれに対し、a個のテストが必要になっる
例外を発生させない使い方をするなら、n*a*mではなくmの定数倍(例外を飛ばさない使い方に依存擦る定数)。
例外が飛んで来たらバグ。わかりやすい
例外を多用しつつn*a*mをよくわからない計算とか言っている時点で以下略
249デフォルトの名無しさん (ワッチョイ ef63-uLm/)
2024/02/11(日) 11:18:50.45ID:4PD3HqyC0 >>244
以下の主張のどこが抽象論なのかkwsk、
1. ライブラリのドキュメントに従い、可能な限り例外を生じない使い方で設計する(>>236
2. 例外が生じない前提としたところは例外が生じないことをテストする(m個のオーダー)(>>229
3. 1と2の過程で意図に反して飛んでくる例外がある場合は原因を調査し、修正を試みる(>>228 例外が飛んで来たらバグ
4. 3を意図通りの形で解決できないことが判明した場合は
(ライブラリの使用方法の当方の誤解、ライブラリのドキュメントの不備、ライブラリの作りの粗さによりこれはあり得る、
結果的にtry { } catch (/*省略*/) { ... }を付ける可能性もある(>>228
5. 例外を複数段fall-throughか再スローを許し、かつそれが起きた後もプログラムの
正常な動作の継続を意図する場合はテストケースが爆発する(>>
設計し、検証し、必要とあらばtry { } catch ( ) の追加も含めた修正を行うと言っているのやぞ;;;
いっぽう藻前らの主張は
1. 例外をせき止めれば良い(←処理不能な未知の例外が飛んでくることが無いというライブラリに対する全幅の信頼
2. 例外を処理したりfall-throughしたり再スローしたりする関数はn*a*m個のテストしなくても動くっしょ
(←自己のコードに対する無制限の気体
3. ドキュメントは100%信頼せず、読まない
の3成分からなるわけやが……
以下の主張のどこが抽象論なのかkwsk、
1. ライブラリのドキュメントに従い、可能な限り例外を生じない使い方で設計する(>>236
2. 例外が生じない前提としたところは例外が生じないことをテストする(m個のオーダー)(>>229
3. 1と2の過程で意図に反して飛んでくる例外がある場合は原因を調査し、修正を試みる(>>228 例外が飛んで来たらバグ
4. 3を意図通りの形で解決できないことが判明した場合は
(ライブラリの使用方法の当方の誤解、ライブラリのドキュメントの不備、ライブラリの作りの粗さによりこれはあり得る、
結果的にtry { } catch (/*省略*/) { ... }を付ける可能性もある(>>228
5. 例外を複数段fall-throughか再スローを許し、かつそれが起きた後もプログラムの
正常な動作の継続を意図する場合はテストケースが爆発する(>>
設計し、検証し、必要とあらばtry { } catch ( ) の追加も含めた修正を行うと言っているのやぞ;;;
いっぽう藻前らの主張は
1. 例外をせき止めれば良い(←処理不能な未知の例外が飛んでくることが無いというライブラリに対する全幅の信頼
2. 例外を処理したりfall-throughしたり再スローしたりする関数はn*a*m個のテストしなくても動くっしょ
(←自己のコードに対する無制限の気体
3. ドキュメントは100%信頼せず、読まない
の3成分からなるわけやが……
250デフォルトの名無しさん (ワッチョイ 16cf-BOeC)
2024/02/11(日) 12:01:58.52ID:XOPhWcHA0 >>248
>例外が関数の階層をぶち抜いてfall-throughしてくることを忘れている発言
やっぱり意味不明だな。catchすれば「階層をぶち抜いて」ってことはないわけだが。
>2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!
もしそのテストが必要なんだとすれば、catchしない場合はその例外が通過する
呼び出し階層全部でテストをしなきゃならないってことになるが。
>例外が関数の階層をぶち抜いてfall-throughしてくることを忘れている発言
やっぱり意味不明だな。catchすれば「階層をぶち抜いて」ってことはないわけだが。
>2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!
もしそのテストが必要なんだとすれば、catchしない場合はその例外が通過する
呼び出し階層全部でテストをしなきゃならないってことになるが。
251デフォルトの名無しさん (ワッチョイ 16cf-BOeC)
2024/02/11(日) 12:31:22.40ID:XOPhWcHA0 >>249
>1. 例外をせき止めれば良い(←処理不能な未知の例外が飛んでくることが無いというライブラリに対する全幅の信頼
なるほどな。
catchする⇒無視する、握りつぶす って脳内変換されてんだな。
catch書いたからといって上に挙げられたようなテストができなくなるわけじゃないっしょ。必要と思うならやればいい。
3.の意図しない例外の原因調査なんて main() に例外が上がってきてプログラムが落ちてからより
発生個所に近い下層で catch できた方がはるかに調査しやすいと思うんだがな。感覚が違うなあ。
>1. 例外をせき止めれば良い(←処理不能な未知の例外が飛んでくることが無いというライブラリに対する全幅の信頼
なるほどな。
catchする⇒無視する、握りつぶす って脳内変換されてんだな。
catch書いたからといって上に挙げられたようなテストができなくなるわけじゃないっしょ。必要と思うならやればいい。
3.の意図しない例外の原因調査なんて main() に例外が上がってきてプログラムが落ちてからより
発生個所に近い下層で catch できた方がはるかに調査しやすいと思うんだがな。感覚が違うなあ。
252デフォルトの名無しさん (スプッッ Sd52-oDfP)
2024/02/11(日) 12:37:47.91ID:AyRTgUB7d 仕様書や規格書はその意図を正確に読み取ろうとするのに
掲示板の他人の書き込みは積極的に曲解しようとするのは何故か?
掲示板の他人の書き込みは積極的に曲解しようとするのは何故か?
253デフォルトの名無しさん (ワッチョイ ef8b-u/MX)
2024/02/11(日) 12:44:06.42ID:E8bU9+6D0 見下しているからよ
こいつらは俺より下なはずと
こいつらは俺より下なはずと
254デフォルトの名無しさん (ワッチョイ 5eda-5kwM)
2024/02/12(月) 07:49:39.70ID:4SfsXRB60 本気で面白いと思ってやってんだろう
255デフォルトの名無しさん (ワッチョイ 637c-IqbK)
2024/02/12(月) 08:44:56.68ID:WngRm50l0 例外は糞!危険!意味不明!テスト漏れる!って言ってる奴ほど
if (err != 0) { return -1; }が大好きなんだよな
本質的にやってること変わらないのに
if (err != 0) { return -1; }が大好きなんだよな
本質的にやってること変わらないのに
256デフォルトの名無しさん (ワッチョイ eba6-IqbK)
2024/02/12(月) 15:42:15.86ID:NdUIQhSh0 ファイル名に年月が使えないの困ります。
2024/02/11_データ.txt
とか
2024/02/11_データ.txt
とか
257デフォルトの名無しさん (ワッチョイ 4b5a-nvep)
2024/02/12(月) 15:46:00.47ID:QicyHe7E0258デフォルトの名無しさん (ワッチョイ 6fac-ND3n)
2024/02/12(月) 16:40:43.94ID:MdmHk5EH0 ふつう年月日はハイフンで区切るよね
259はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-A7R9)
2024/02/12(月) 17:02:03.84ID:4VueJhli0 スラッシュを使う習慣が悪いわけではないが
プログラマの感覚だと ISO 8601 の方式に馴染みが有ることが多いってのはある。
プログラマの感覚だと ISO 8601 の方式に馴染みが有ることが多いってのはある。
260デフォルトの名無しさん (ワッチョイ 5edc-s3Gl)
2024/02/12(月) 17:31:20.60ID:rGOG+Ewu0 年月日は「ふつう」がないのでみんなが苦労している
日本とアメリカとイギリスで順番が違うし
日本には「令和」とかあるし
日本とアメリカとイギリスで順番が違うし
日本には「令和」とかあるし
261デフォルトの名無しさん (ワッチョイ f78f-nOVH)
2024/02/12(月) 18:43:50.33ID:zGvIVge80 Windowsでも / をディレクトリ区切り文字として使えるけど(場面は限定的かもしれないけど)、その認識で使ってるのかな…
262はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-Kvqi)
2024/02/12(月) 20:07:00.91ID:4VueJhli0 Linux で * という名前のファイルを消そうとして
うわあぁぁぁとなった話はたまに聞く。
使えたとしても使うべきでない文字もある。
うわあぁぁぁとなった話はたまに聞く。
使えたとしても使うべきでない文字もある。
263デフォルトの名無しさん (ワッチョイ f7cb-nOVH)
2024/02/12(月) 21:44:07.99ID:zGvIVge80 262>>
それ以外のファイルをすべて退避した上でディレクトリごと削除したことがあったな
それ以外のファイルをすべて退避した上でディレクトリごと削除したことがあったな
264デフォルトの名無しさん (ワッチョイ f7cb-nOVH)
2024/02/12(月) 21:46:10.68ID:zGvIVge80 すみません、261ですが、Windows限定の話ではなかったですね
失礼しました…
失礼しました…
265デフォルトの名無しさん (ワッチョイ 5edc-s3Gl)
2024/02/13(火) 05:53:49.07ID:QIUviIGO0 Linuxならi-nodeをしていすれば
findと組み合わせてどんな名前のファイルも消去できるんだけどなあ
windowsはなんか複雑だったような気がした
findと組み合わせてどんな名前のファイルも消去できるんだけどなあ
windowsはなんか複雑だったような気がした
266デフォルトの名無しさん (ワッチョイ 1e27-2ki6)
2024/02/13(火) 09:36:03.89ID:7CLA20rP0 iso8901にしない人はたぶんこの規格を知らないわけで意識低すぎだろと思ってしまう
267はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-A7R9)
2024/02/13(火) 11:18:57.32ID:T85IlqBy0268デフォルトの名無しさん (ワッチョイ 5ed7-nvep)
2024/02/13(火) 12:55:27.90ID:c63MYIIQ0 >>267
エンドユーザーの文化的背景に配慮したデータフォーマットの利点は、エンドユーザーの知識やメタファーを利用した学習曲線の低勾配化であって、技術的には負の遺産になりやすいことには注意が必要。
典型的には小組織から始まるURLの並びですな。木構造との相性がひどく悪い。
あるいは大きな桁から始まるバイト列とか。あんなの1桁目から始めればエンディアン問題とか無かった。
エンドユーザーの文化的背景に配慮したデータフォーマットの利点は、エンドユーザーの知識やメタファーを利用した学習曲線の低勾配化であって、技術的には負の遺産になりやすいことには注意が必要。
典型的には小組織から始まるURLの並びですな。木構造との相性がひどく悪い。
あるいは大きな桁から始まるバイト列とか。あんなの1桁目から始めればエンディアン問題とか無かった。
269デフォルトの名無しさん (ワッチョイ 12ad-v2JO)
2024/02/13(火) 13:07:38.28ID:mTl8FNrx0 > 典型的には小組織から始まるURLの並びですな。木構造との相性がひどく悪い。
それは人間から見たときと機械から見たときの見やすさの違いでしかないような気がする
でも日本の住所は大きい方から始まるんだよな
アメリカは個人から始まる
文化の違いやけども、日本人は機械生命体だったのかもしれぬ
それは人間から見たときと機械から見たときの見やすさの違いでしかないような気がする
でも日本の住所は大きい方から始まるんだよな
アメリカは個人から始まる
文化の違いやけども、日本人は機械生命体だったのかもしれぬ
270デフォルトの名無しさん (ワッチョイ 6b74-e92p)
2024/02/15(木) 04:22:25.92ID:MOgQCM5N0 >>58
亀だがクロスで使ってるよ
亀だがクロスで使ってるよ
271デフォルトの名無しさん (ワッチョイ d62e-RfGy)
2024/02/16(金) 22:41:08.10ID:/bcZ41DF0 enable_shared_from_thisなクラスで、shared_from_this()はコンストラクタの中では
呼べないようですね
コンストラクタの中の処理でthisを渡したい処理があるのですが、どうしたら...
そもそもそれ自体が間違っているのでしょうか
コンストラクタが呼ばれる行の次でその処理を呼べばいいという説もありますが、
現在のコードがそれをやりにくい形になっていて
呼べないようですね
コンストラクタの中の処理でthisを渡したい処理があるのですが、どうしたら...
そもそもそれ自体が間違っているのでしょうか
コンストラクタが呼ばれる行の次でその処理を呼べばいいという説もありますが、
現在のコードがそれをやりにくい形になっていて
272デフォルトの名無しさん (ワッチョイ ef63-uLm/)
2024/02/17(土) 11:55:24.05ID:hsYxYbKj0 >>250
>>2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!
>もしそのテストが必要なんだとすれば、catchしない場合はその例外が通過する
>呼び出し階層全部でテストをしなきゃならないってことになるが。
その通り。テスト不要としたいなら、例外が出た原因を調べて出ないようにするのが筋
原因を調査して対策せずに予防的にテスト不十分のtry { } catch () をてんこ盛りにする方がソフトウェアー品質が上がるという考えのはおかしい
>>251
>catchする⇒無視する、握りつぶす って脳内変換
脳内変換ではなくて、予防的に入れたtry { } catch ()部分のテストが不十分な限り事実じゃーん?
>>252
>本質的にやってること変わらないのに
別に。
return -1; は呼び出し側のバグで見落とすかもしれないが
throw std::logic_error("*** ERR ***"); なら悪評千里を走ってバグの兆候が嫌でもワカル
むしろ予防的なtry { } catch () が例外のメリットをreturn -1; に縮小してゐる
>>2. fall-throughする関数が例外による処理の中断でおかしいことにならないか(←要テスト!
>もしそのテストが必要なんだとすれば、catchしない場合はその例外が通過する
>呼び出し階層全部でテストをしなきゃならないってことになるが。
その通り。テスト不要としたいなら、例外が出た原因を調べて出ないようにするのが筋
原因を調査して対策せずに予防的にテスト不十分のtry { } catch () をてんこ盛りにする方がソフトウェアー品質が上がるという考えのはおかしい
>>251
>catchする⇒無視する、握りつぶす って脳内変換
脳内変換ではなくて、予防的に入れたtry { } catch ()部分のテストが不十分な限り事実じゃーん?
>>252
>本質的にやってること変わらないのに
別に。
return -1; は呼び出し側のバグで見落とすかもしれないが
throw std::logic_error("*** ERR ***"); なら悪評千里を走ってバグの兆候が嫌でもワカル
むしろ予防的なtry { } catch () が例外のメリットをreturn -1; に縮小してゐる
273デフォルトの名無しさん (ワッチョイ ef63-uLm/)
2024/02/17(土) 12:01:54.73ID:hsYxYbKj0274デフォルトの名無しさん (ワッチョイ 12ad-hHXc)
2024/02/17(土) 12:35:51.03ID:mUyTgSzm0 テストって想定した動作環境、データ入力に対して想定した動作をするか確認をするわけで
想定しえないエラーや割り込みに対してはテストのしようがないんだけどな
そのための例外処理だろ
想定しえないエラーや割り込みに対してはテストのしようがないんだけどな
そのための例外処理だろ
275デフォルトの名無しさん (ワッチョイ 6332-A7R9)
2024/02/17(土) 13:04:42.05ID:4+T7+QKn0 例外が上がってくるってことはどこかで例外を投げてるってことだぞ。
問題が起きたところでその問題に対して例外を投げるという対処をしてる箇所がある。
想定してないなら例外送出すらできないよ。
その上で人間は大きいプログラムの全体を把握することは困難だし
機械的なチェックがしづらいという現実はあるって話だ。
問題が起きたところでその問題に対して例外を投げるという対処をしてる箇所がある。
想定してないなら例外送出すらできないよ。
その上で人間は大きいプログラムの全体を把握することは困難だし
機械的なチェックがしづらいという現実はあるって話だ。
276デフォルトの名無しさん (ワッチョイ 12ad-hHXc)
2024/02/17(土) 13:33:26.89ID:mUyTgSzm0 アプリケーションを作っているのとOSを作っている人は別
それと同様に利用するライブラリがどのような例外を投げてくるか、もしくはそのライブラリがさらに下位のライブラリから投げられた例外をどう処理しているか
アプリケーション開発者はそれらすべて想定できているとでも?
ハードウェアやシステム含めて全部ひとりで作り上げる(もしくは密に情報共有できている)ならお前の言う通りだけどな
それと同様に利用するライブラリがどのような例外を投げてくるか、もしくはそのライブラリがさらに下位のライブラリから投げられた例外をどう処理しているか
アプリケーション開発者はそれらすべて想定できているとでも?
ハードウェアやシステム含めて全部ひとりで作り上げる(もしくは密に情報共有できている)ならお前の言う通りだけどな
277デフォルトの名無しさん (ワッチョイ 6332-A7R9)
2024/02/17(土) 13:41:06.46ID:4+T7+QKn0278デフォルトの名無しさん (ワッチョイ 12ad-hHXc)
2024/02/17(土) 13:56:12.85ID:mUyTgSzm0 俺も、(もしくは密に情報共有できている)なら、と言う話をしているがな
ただ「現実の話」と言うならば、伝わっていないことをコミュニケーションの問題、自動化の問題と言うのはナンセンスだわな
お前自身がこう言っている
> その上で人間は大きいプログラムの全体を把握することは困難だし
> 機械的なチェックがしづらいという現実はあるって話だ。
ではWindowsと言う巨大プログラムにおいてMSの中の人はどの程度全体を把握していて、発生しうる例外を公開しているのか
アプリケーション開発者はその公開情報をもとに *想定し* プログラムを組まなくてはならない
さてアプリケーション開発者はOSなど下位のモジュールから飛んでくる例外をすべて想定できるのか?
そもそも致命的な例外でアプリケーション自身の継続が困難な場合を除いて
どんな例外でもあっても継続的な処理を可能にするのが例外処理だろうに
(ここで言う継続的な処理とは問題なしとして先に進むだけでなく、異常があったとして正常な(処理の)出発点に戻るという意味でもある)
起こりえる例外をすべて想定せずともプログラムを安全に継続するための仕組みが例外処理だろ
ただ「現実の話」と言うならば、伝わっていないことをコミュニケーションの問題、自動化の問題と言うのはナンセンスだわな
お前自身がこう言っている
> その上で人間は大きいプログラムの全体を把握することは困難だし
> 機械的なチェックがしづらいという現実はあるって話だ。
ではWindowsと言う巨大プログラムにおいてMSの中の人はどの程度全体を把握していて、発生しうる例外を公開しているのか
アプリケーション開発者はその公開情報をもとに *想定し* プログラムを組まなくてはならない
さてアプリケーション開発者はOSなど下位のモジュールから飛んでくる例外をすべて想定できるのか?
そもそも致命的な例外でアプリケーション自身の継続が困難な場合を除いて
どんな例外でもあっても継続的な処理を可能にするのが例外処理だろうに
(ここで言う継続的な処理とは問題なしとして先に進むだけでなく、異常があったとして正常な(処理の)出発点に戻るという意味でもある)
起こりえる例外をすべて想定せずともプログラムを安全に継続するための仕組みが例外処理だろ
279デフォルトの名無しさん (ワッチョイ 6332-A7R9)
2024/02/17(土) 15:09:15.47ID:4+T7+QKn0 C++ の設計理念としては「そうは言っても現実はこうなっとるやろが!」という
状況に対処する方法があることも大事にしてはいる。 たとえ綺麗な方法ではなくても。
どのような問題が起こりうるのか (それなりには) きちんと想定するのは当然の大前提で、
それでもこれからリリースするソフトウェアに何が起こるかわからんのは仕方がないという話であって、
想定が不十分でも構わないという話でもない。
よくは無いが悪いときでもなんとかなるという程度の仕組みだよ。
状況に対処する方法があることも大事にしてはいる。 たとえ綺麗な方法ではなくても。
どのような問題が起こりうるのか (それなりには) きちんと想定するのは当然の大前提で、
それでもこれからリリースするソフトウェアに何が起こるかわからんのは仕方がないという話であって、
想定が不十分でも構わないという話でもない。
よくは無いが悪いときでもなんとかなるという程度の仕組みだよ。
280デフォルトの名無しさん (ワッチョイ e33b-hZ+C)
2024/02/17(土) 15:39:40.77ID:snTd9S980 >>271
一番いいのはコンストラクタの中でthisを渡す部分を何とかすることだけど、それが必ずしも間違ってるかは分からないので
コンストラクタの中だけでその処理が呼ばれるなら生のthisを渡すことを許容しつつ、その処理の呼び出し可能範囲を限定するか
そのクラスの構築をファクトリ関数経由に限定して、ファクトリ関数の中に構築とその処理呼び出しをまとめてしまうとか
一番いいのはコンストラクタの中でthisを渡す部分を何とかすることだけど、それが必ずしも間違ってるかは分からないので
コンストラクタの中だけでその処理が呼ばれるなら生のthisを渡すことを許容しつつ、その処理の呼び出し可能範囲を限定するか
そのクラスの構築をファクトリ関数経由に限定して、ファクトリ関数の中に構築とその処理呼び出しをまとめてしまうとか
281デフォルトの名無しさん (ワッチョイ 12ad-hHXc)
2024/02/17(土) 15:49:12.98ID:mUyTgSzm0 > 想定が不十分でも構わないという話でもない。
誰もそれで構わないとは言っていないので
それでも起きてしまうエラーや割り込みに対応するための仕組みが例外処理だろ
身も蓋もない言い方をするなら
そもそも想定できているなら事前に排除するだけで済むわけで例外処理の必要もない
(もちろん分かっていても事前に排除せず意図的に例外処理に丸投げすることもあるのは知っている)
アプリケーション開発者にとってもっとも想定できない問題ってのは実行環境に起因するもの
誰もそれで構わないとは言っていないので
それでも起きてしまうエラーや割り込みに対応するための仕組みが例外処理だろ
身も蓋もない言い方をするなら
そもそも想定できているなら事前に排除するだけで済むわけで例外処理の必要もない
(もちろん分かっていても事前に排除せず意図的に例外処理に丸投げすることもあるのは知っている)
アプリケーション開発者にとってもっとも想定できない問題ってのは実行環境に起因するもの
282デフォルトの名無しさん (ワッチョイ 16cf-BOeC)
2024/02/17(土) 20:37:07.00ID:QSMcEn770 >>272
>原因を調査して対策せずに予防的にテスト不十分のtry { } catch () をてんこ盛りにする方がソフトウェアー品質が上がるという考えのはおかしい
相変わらずずれてるな。 catch する == 原因を調査しない じゃないわけ。
>return -1; は呼び出し側のバグで見落とすかもしれないが
>throw std::logic_error("*** ERR ***"); なら悪評千里を走ってバグの兆候が嫌でもワカル
戻り値のチェック漏れは静的局所的にチェックできるが例外は出てみなけりゃ結局澪とされるわけだが。
リリース後にユーザーサイドでその見落とされていた例外が発生してプログラムが落ちたりしたらそれはただのバグ。
>原因を調査して対策せずに予防的にテスト不十分のtry { } catch () をてんこ盛りにする方がソフトウェアー品質が上がるという考えのはおかしい
相変わらずずれてるな。 catch する == 原因を調査しない じゃないわけ。
>return -1; は呼び出し側のバグで見落とすかもしれないが
>throw std::logic_error("*** ERR ***"); なら悪評千里を走ってバグの兆候が嫌でもワカル
戻り値のチェック漏れは静的局所的にチェックできるが例外は出てみなけりゃ結局澪とされるわけだが。
リリース後にユーザーサイドでその見落とされていた例外が発生してプログラムが落ちたりしたらそれはただのバグ。
283デフォルトの名無しさん (ワッチョイ 1e85-XyAm)
2024/02/17(土) 23:18:00.46ID:v62CV0mD0 >>278
> そもそも致命的な例外でアプリケーション自身の継続が困難な場合を除いて
> どんな例外でもあっても継続的な処理を可能にするのが例外処理だろうに
それは幻想
c++の例外安全の達成がどれだけ難しいか理解していないね
簡単にリークするし、オブジェクトが想定外の状態を持ったりする
動作保証ができない
だから仕様に明示されていない例外が来たら基本は終了だよ
そのまま継続してそれが原因でその後別の場所で落ちられたら無駄な調査の手間が増えるだけ
> そもそも致命的な例外でアプリケーション自身の継続が困難な場合を除いて
> どんな例外でもあっても継続的な処理を可能にするのが例外処理だろうに
それは幻想
c++の例外安全の達成がどれだけ難しいか理解していないね
簡単にリークするし、オブジェクトが想定外の状態を持ったりする
動作保証ができない
だから仕様に明示されていない例外が来たら基本は終了だよ
そのまま継続してそれが原因でその後別の場所で落ちられたら無駄な調査の手間が増えるだけ
284デフォルトの名無しさん (ワッチョイ 16cf-BOeC)
2024/02/17(土) 23:48:07.59ID:QSMcEn770 例外安全と例外の種類には特に関係はないわけで、知らない例外だと例外安全の保証が困難になるなんてこともない。
285デフォルトの名無しさん (ワッチョイ 6fbc-ERL4)
2024/02/18(日) 00:24:49.13ID:JX7gxI3D0286デフォルトの名無しさん (ワッチョイ ffe0-UH2C)
2024/02/18(日) 09:00:09.02ID:c1Urupub0287デフォルトの名無しさん (ワッチョイ e3f9-NGC7)
2024/02/18(日) 09:39:44.00ID:9f8IS57r0 ぶっちゃけ>>283がなに言ってるのかわからない
継続してそれが原因で?
いやいやw
突如落ちるより、保存できるデータは保存してもらう機会を与えることは出来るだろ
なんでお前は何事もなかったかのように作業を続ける前提でしか話を聞かないんだ?
オブジェクトの状態が変わっているかも?
変更前のデータと比較して変わっていたらユーザに確認すればいいだろ
例えば図形情報のうちTopの読み込みで例外が発生した場合に想定してないからとアプリ落として全情報ロストさせる気か?
Topは0で初期化させ読み込めなかったことをユーザに伝えて修正、もしくは再読み込みの機会を与えるだけの話だろ
継続してそれが原因で?
いやいやw
突如落ちるより、保存できるデータは保存してもらう機会を与えることは出来るだろ
なんでお前は何事もなかったかのように作業を続ける前提でしか話を聞かないんだ?
オブジェクトの状態が変わっているかも?
変更前のデータと比較して変わっていたらユーザに確認すればいいだろ
例えば図形情報のうちTopの読み込みで例外が発生した場合に想定してないからとアプリ落として全情報ロストさせる気か?
Topは0で初期化させ読み込めなかったことをユーザに伝えて修正、もしくは再読み込みの機会を与えるだけの話だろ
288デフォルトの名無しさん (ワッチョイ cfcf-sYtR)
2024/02/18(日) 09:41:50.12ID:WHoJTRhT0289デフォルトの名無しさん (ワッチョイ e3f9-NGC7)
2024/02/18(日) 12:27:32.99ID:9f8IS57r0 > これはどういう意味なんだろうな。
そうそれ
tryブロックで囲った部分(つまり任意)の例外発生に対応するのが例外処理なのになにが出来ないというのか
想定している例外が発生して継続できると判断したなら続ければいいし
ダメならユーザに通知してもちょも安全な方法を選択させればいい
でもってそれは想定していない例外の発生でも同じ
ただ致命的でどうしようもないなら強制終了させるだけの話で、想定していない例外はなんでもかんでも強制終了じゃ例外処理使う意味が薄まってしまう
そうそれ
tryブロックで囲った部分(つまり任意)の例外発生に対応するのが例外処理なのになにが出来ないというのか
想定している例外が発生して継続できると判断したなら続ければいいし
ダメならユーザに通知してもちょも安全な方法を選択させればいい
でもってそれは想定していない例外の発生でも同じ
ただ致命的でどうしようもないなら強制終了させるだけの話で、想定していない例外はなんでもかんでも強制終了じゃ例外処理使う意味が薄まってしまう
290デフォルトの名無しさん (ワッチョイ e3f9-NGC7)
2024/02/18(日) 12:28:39.34ID:9f8IS57r0 もちょも は もっとも の まちがい
291デフォルトの名無しさん (ワッチョイ 6f5b-ERL4)
2024/02/18(日) 13:22:22.19ID:JX7gxI3D0 >>287
ファイル保存するなとか言ってない
それぐらい終了処理のひとつだろ
ログファイルもシグナルトラップして必ずフラッシュさせるのが常套手段だろ
意味不明な例外が発生しました
データが破損してないかあなたが確認してください
動作無保証ですが処理継続しますか?yes/no
こんなUIだすやつセンスの欠片もない
ファイル保存するなとか言ってない
それぐらい終了処理のひとつだろ
ログファイルもシグナルトラップして必ずフラッシュさせるのが常套手段だろ
意味不明な例外が発生しました
データが破損してないかあなたが確認してください
動作無保証ですが処理継続しますか?yes/no
こんなUIだすやつセンスの欠片もない
292デフォルトの名無しさん (ワッチョイ e304-hmqi)
2024/02/18(日) 14:01:41.78ID:6Yt/CDIt0 私が20代の頃に見かけた論争が今も繰り返されてるのかわいい🩷
293デフォルトの名無しさん (ワッチョイ ffad-mJpf)
2024/02/18(日) 15:55:07.22ID:1iQutSwY0294デフォルトの名無しさん (ワッチョイ cfcf-sYtR)
2024/02/18(日) 16:26:47.97ID:WHoJTRhT0 >>291
まさか、何も言わずにいきなり落とす方が良いとか言うわけじゃあるまい。
まさか、何も言わずにいきなり落とす方が良いとか言うわけじゃあるまい。
295デフォルトの名無しさん (スッップ Sd1f-p9fr)
2024/02/18(日) 17:54:38.27ID:L2mk1x1ad >>289
もちょカワイイよね
もちょカワイイよね
296デフォルトの名無しさん (ワッチョイ bf9a-/DPD)
2024/02/18(日) 18:17:37.55ID:LeQ06zof0 >>280
実生活のあれと似てますよね。「引っ越すことになりました。新住所はXXです」と早めに
連絡したら、気の早い知人がそこに押しかけてきて「なんやまだ引越しとらんやんけ」となる
やはり引越し作業完了を待ってからの方がいいのか。ってちがうか
実生活のあれと似てますよね。「引っ越すことになりました。新住所はXXです」と早めに
連絡したら、気の早い知人がそこに押しかけてきて「なんやまだ引越しとらんやんけ」となる
やはり引越し作業完了を待ってからの方がいいのか。ってちがうか
297デフォルトの名無しさん (ワッチョイ 1b63-9XlH)
2024/03/02(土) 23:41:07.84ID:C77pR/Zl0 >>282
>相変わらずずれてるな。 catch する == 原因を調査しない じゃないわけ
>249に賛同いただけていないということは、発生してもいない例外について予防的にtry { } catch () を入れようとしていることは
確定的に明らか
で、例外というブツは「例外なく」悪い知らせなので(∵仮に良い知らせを例外で寄越すライブラリがあったらそれ自体悪い知らせである
普通の人は悪い知らせが来る前に処置しようとする。すわなち例外が来ないように(可能な限り)修正する。
try { } catch ( ) でひっかけて原因調査兼確実な修正でざい、それが一番効率が良い方法論である、などと主張するのはおかしい人だけ……
>相変わらずずれてるな。 catch する == 原因を調査しない じゃないわけ
>249に賛同いただけていないということは、発生してもいない例外について予防的にtry { } catch () を入れようとしていることは
確定的に明らか
で、例外というブツは「例外なく」悪い知らせなので(∵仮に良い知らせを例外で寄越すライブラリがあったらそれ自体悪い知らせである
普通の人は悪い知らせが来る前に処置しようとする。すわなち例外が来ないように(可能な限り)修正する。
try { } catch ( ) でひっかけて原因調査兼確実な修正でざい、それが一番効率が良い方法論である、などと主張するのはおかしい人だけ……
298デフォルトの名無しさん (ワッチョイ 1b63-9XlH)
2024/03/02(土) 23:49:37.41ID:C77pR/Zl0 >>284
例外安全というもののスコープに対して考察が足りていない
1.
例外安全なオブジェクト foo のデストラクトが他の例外によって引き起こされるケースでは
foo の安全な終了は(メモリかファイルステムか何かが物理的にぶち壊れてOSがパニックになったとかでない限り
ほぼほぼ保たれるから>>284のような言い方はできるっていやーできるが、
システム全体については>>283の通りであって全然安全ではない
2.
fooの中の例外処理が本当に完璧かはfooのコードに書かれている全てのtry { } catch () について
全ての例外発生条件についてテストか厳格めのコードレビューでも行わないことには安全性が担保されない。
(つまり例外安全にした実装したと主張するだけでは話がただちには簡単にはならない
例外安全というもののスコープに対して考察が足りていない
1.
例外安全なオブジェクト foo のデストラクトが他の例外によって引き起こされるケースでは
foo の安全な終了は(メモリかファイルステムか何かが物理的にぶち壊れてOSがパニックになったとかでない限り
ほぼほぼ保たれるから>>284のような言い方はできるっていやーできるが、
システム全体については>>283の通りであって全然安全ではない
2.
fooの中の例外処理が本当に完璧かはfooのコードに書かれている全てのtry { } catch () について
全ての例外発生条件についてテストか厳格めのコードレビューでも行わないことには安全性が担保されない。
(つまり例外安全にした実装したと主張するだけでは話がただちには簡単にはならない
299デフォルトの名無しさん (ワッチョイ 1b63-9XlH)
2024/03/02(土) 23:57:46.67ID:C77pR/Zl0 それはそうとして、予防的なtry{ } catch () の何が一番駄目かというと、設計上のトレードオフをわけわかんなくすることが確実な点
例外発生後の状況というのはたいてい>>283の通りのわけなので、何かを捨てて何かを取る
(例えばシステムは最悪落ちても構わないが、例外安全なオブジェクトfooでリソースAの整合性は死守する等)
のトレードオフが発生するがそういうのこそ慎重な設計と考慮が必要な事項であることは確定的にあきらか
プログラムの全階層にtry { } catch ()入れたら完璧などというアフォはやっぱtry { } catch () しないのが正しい
例外発生後の状況というのはたいてい>>283の通りのわけなので、何かを捨てて何かを取る
(例えばシステムは最悪落ちても構わないが、例外安全なオブジェクトfooでリソースAの整合性は死守する等)
のトレードオフが発生するがそういうのこそ慎重な設計と考慮が必要な事項であることは確定的にあきらか
プログラムの全階層にtry { } catch ()入れたら完璧などというアフォはやっぱtry { } catch () しないのが正しい
300デフォルトの名無しさん (ワッチョイ 0fcf-0WZ8)
2024/03/03(日) 21:57:15.41ID:735dldsp0 >>298
自分が呼び出す関数が例外安全にできているかどうかと自分の処理が例外安全かどうかをごっちゃにしてるだろ。
しかも、呼び出す関数からドキュメント化されていない想定外の例外が発生するなら例外安全に作られていないだろうという
変な決めつけが混じってる。
例外安全なコードは例外の種類に依存しない。知ってる冷害に対しては安全だけど知らない例外が飛んできたら安全じゃない
なんてのはそもそも例外安全とは言わない。
自分が呼び出す関数が例外安全にできているかどうかと自分の処理が例外安全かどうかをごっちゃにしてるだろ。
しかも、呼び出す関数からドキュメント化されていない想定外の例外が発生するなら例外安全に作られていないだろうという
変な決めつけが混じってる。
例外安全なコードは例外の種類に依存しない。知ってる冷害に対しては安全だけど知らない例外が飛んできたら安全じゃない
なんてのはそもそも例外安全とは言わない。
301デフォルトの名無しさん (ワッチョイ ef0a-qSkN)
2024/03/03(日) 22:08:48.84ID:qMaLplcd0302デフォルトの名無しさん (ワッチョイ 3b7c-85wQ)
2024/03/03(日) 22:31:19.01ID:GdJ/jhkt0 >>301
自分でnoexcept指定した関数のことなら投げないことを確認するテストくらい書けよ当たり前だろ
自分でnoexcept指定した関数のことなら投げないことを確認するテストくらい書けよ当たり前だろ
303デフォルトの名無しさん (ワッチョイ 0fcf-0WZ8)
2024/03/04(月) 00:08:35.31ID:gWJ01aQ50 >お前さ、すべてのnoexcept関数呼び出しの例外テスト書いてんのか?
悪魔の証明をテストすんのか
悪魔の証明をテストすんのか
304デフォルトの名無しさん (ワッチョイ ef0a-qSkN)
2024/03/04(月) 07:57:02.63ID:D3yk9beu0305デフォルトの名無しさん (ワッチョイ 8b63-eOBD)
2024/03/04(月) 07:58:21.27ID:KYG2Ugpe0 なんか予想外に低レなレスポンスを寄越した>>299……
さすがに>>283の後に>>284のような楽天的なことを言えるだけのことはあるということか……
例外安全は確かに目指すべき境地であり、例外安全なオブジェクトだけでコードを書けば
その関数は例外安全となる。try { } catch ()など一切不要、となるわけで一見実現が簡単に思える
が、例外安全なオブジェクトだけかをもれなく機械的に確認する方法は無い上に、
中断したら別物になる(処理の順序が命)というアルゴリズムというものの本質的特性により、
>>183 のような try { } catch () が必要なケースは隙あらば混ざり込んでくるから(※1)
>>284が空想するようなシステム全体の例外安全化などは現実には不可能。
せいぜいある程度の規模のオブジェクトであれば、十分テストすれば
(自分が呼び出す関数が例外安全にできているかどうかと自分の処理が例外安全かどうかを慎重に確認せねばならない)
ほぼほぼの信頼度で実現できるというぐらい。
さすがに>>283の後に>>284のような楽天的なことを言えるだけのことはあるということか……
例外安全は確かに目指すべき境地であり、例外安全なオブジェクトだけでコードを書けば
その関数は例外安全となる。try { } catch ()など一切不要、となるわけで一見実現が簡単に思える
が、例外安全なオブジェクトだけかをもれなく機械的に確認する方法は無い上に、
中断したら別物になる(処理の順序が命)というアルゴリズムというものの本質的特性により、
>>183 のような try { } catch () が必要なケースは隙あらば混ざり込んでくるから(※1)
>>284が空想するようなシステム全体の例外安全化などは現実には不可能。
せいぜいある程度の規模のオブジェクトであれば、十分テストすれば
(自分が呼び出す関数が例外安全にできているかどうかと自分の処理が例外安全かどうかを慎重に確認せねばならない)
ほぼほぼの信頼度で実現できるというぐらい。
306デフォルトの名無しさん (ワッチョイ 8b63-eOBD)
2024/03/04(月) 07:59:55.02ID:KYG2Ugpe0 (※1) >>183 の関数そのものは、例外安全なスレッドオブジェクトでも使ったらtry { } catch () 無しの例外安全な関数うに書き直すことはできうる
307デフォルトの名無しさん (ワッチョイ 8b63-eOBD)
2024/03/04(月) 08:09:49.95ID:KYG2Ugpe0 あと寝てて思ったがプロセスが死んでもサービスが継続したらお客様には迷惑を掛けずに済むので
(直接そういうのをやってちるわけではないので強くは言わんが
ウォッチドッグタイマー的な死活監視で異常あらばプロセス再起動とかマシンを切り替えるとか方法はいくつもあって、
十分テストされたプログラムならクラッシュ頻度をポアソン分布とみなして信頼度も出せる
やっぱ「お客様の前で落ちたら恥ずかしいから」というつまらないプライドを基本的動機とする
try {
....
} catch (std::exception& e) {
log_e("std::exceptionがスローされました");
};
みたいなコードをリリースコードに含めましょうという>>282の調査のスタンスは全く正当化されない
100日に一回しか再現しないバグの修正を3日でやれと言われて手元にあるのがメモリダンプの代わりに上の23文字のログメッセージだけだったりしたら
>>282は自○が真剣に考慮すべき選択肢に……
(直接そういうのをやってちるわけではないので強くは言わんが
ウォッチドッグタイマー的な死活監視で異常あらばプロセス再起動とかマシンを切り替えるとか方法はいくつもあって、
十分テストされたプログラムならクラッシュ頻度をポアソン分布とみなして信頼度も出せる
やっぱ「お客様の前で落ちたら恥ずかしいから」というつまらないプライドを基本的動機とする
try {
....
} catch (std::exception& e) {
log_e("std::exceptionがスローされました");
};
みたいなコードをリリースコードに含めましょうという>>282の調査のスタンスは全く正当化されない
100日に一回しか再現しないバグの修正を3日でやれと言われて手元にあるのがメモリダンプの代わりに上の23文字のログメッセージだけだったりしたら
>>282は自○が真剣に考慮すべき選択肢に……
308デフォルトの名無しさん (ワッチョイ 9fad-ZLJX)
2024/03/04(月) 08:50:22.67ID:MzjtGtOW0309デフォルトの名無しさん (ワッチョイ 0fcf-0WZ8)
2024/03/04(月) 08:53:34.53ID:gWJ01aQ50 >例外安全は確かに目指すべき境地であり、例外安全なオブジェクトだけでコードを書けば
>その関数は例外安全となる。try { } catch ()など一切不要、となるわけで一見実現が簡単に思える
例外安全だからといってcatchが不要になるわけないだろ。
根本的なところで勘違いしてるから頓珍漢が主張を続けてるわけだな。
>その関数は例外安全となる。try { } catch ()など一切不要、となるわけで一見実現が簡単に思える
例外安全だからといってcatchが不要になるわけないだろ。
根本的なところで勘違いしてるから頓珍漢が主張を続けてるわけだな。
310デフォルトの名無しさん (ワッチョイ abe4-XE6S)
2024/03/04(月) 10:20:12.57ID:QvxlWFfk0 例外安全には基本保証・強い保証・no-fail保証がある
例外がスローされない関数を作ればno-fail保証がある
基本保証や強い保証は例外発生後も不整合が発生しないもの
たとえば例外が発生した関数をもう一度呼び出すと「すでに実行中です」とエラーを返すようなものは例外安全ではない(おそらく実行中フラグ変数が立ったままになっている)
例外がスローされない関数を作ればno-fail保証がある
基本保証や強い保証は例外発生後も不整合が発生しないもの
たとえば例外が発生した関数をもう一度呼び出すと「すでに実行中です」とエラーを返すようなものは例外安全ではない(おそらく実行中フラグ変数が立ったままになっている)
311デフォルトの名無しさん (ワッチョイ abe4-XE6S)
2024/03/04(月) 10:23:14.03ID:QvxlWFfk0 10行のデータをファイルに出力するとき、例外が発生して5行だけデータが出力されてしまうのは強い保証があるとはいえない
例外が発生した際にデータを書き込む前のファイル状態に戻れば強い保証がある(例外安全である)といえる
例外が発生した際にデータを書き込む前のファイル状態に戻れば強い保証がある(例外安全である)といえる
312はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b32-hL5K)
2024/03/04(月) 12:10:26.04ID:ASLjljy+0 誤解のないように念のため補足。
この場合の「強い」という用語は性質の分類であって強いことがより良いというわけではないという話をしてる。(んだよね?)
例外を出さずに済むならそれに越したことはないよ。
でも、ひとつの部品の中では問題を解決できないことがあるからこそ例外を用いて他の部品と連携しての解決を試みるわけ。
連携するには保証の強力さよりも保証範囲の明瞭さ (明瞭でもカバーしようがない設計はあかんが) が大事で、プログラム全体で整合性が保たれていれば例外安全と言える。
仕様が不明瞭なライブラリもあるのが現実だってのはそりゃそうだけど、出来が悪い部品とつじつま合わせをしきらないってのは例外のせいでも C++ のせいでもない。
この場合の「強い」という用語は性質の分類であって強いことがより良いというわけではないという話をしてる。(んだよね?)
例外を出さずに済むならそれに越したことはないよ。
でも、ひとつの部品の中では問題を解決できないことがあるからこそ例外を用いて他の部品と連携しての解決を試みるわけ。
連携するには保証の強力さよりも保証範囲の明瞭さ (明瞭でもカバーしようがない設計はあかんが) が大事で、プログラム全体で整合性が保たれていれば例外安全と言える。
仕様が不明瞭なライブラリもあるのが現実だってのはそりゃそうだけど、出来が悪い部品とつじつま合わせをしきらないってのは例外のせいでも C++ のせいでもない。
313デフォルトの名無しさん (ワッチョイ f7f0-B2uz)
2024/04/08(月) 15:38:53.52ID:IvxniXPw0 std::initializer_listについて質問です
下の例ですがコンストラクタの引数に配列リテラルを指定した場合、リストがコピーされてしまいますよね?
これは無駄なので回避したいのですが良い方法はありますか?
https://cpprefjp.github.io/reference/initializer_list/initializer_list.html
下の例ですがコンストラクタの引数に配列リテラルを指定した場合、リストがコピーされてしまいますよね?
これは無駄なので回避したいのですが良い方法はありますか?
https://cpprefjp.github.io/reference/initializer_list/initializer_list.html
314デフォルトの名無しさん (ワッチョイ df01-g9Lk)
2024/04/09(火) 12:13:11.96ID:gepNgOiE0 どこのコピー?
315デフォルトの名無しさん (ブーイモ MM3e-Nnmc)
2024/04/09(火) 12:52:21.68ID:80QuF/MqM リテラルのコピーを気にするならconstexprじゃねーの?
ほんとにコンパイル時に定数になるかは知らんけど
ほんとにコンパイル時に定数になるかは知らんけど
316デフォルトの名無しさん (ワッチョイ 7b32-B3tP)
2024/04/09(火) 15:22:07.81ID:hsAXyuRl0 >>313
C++ に配列リテラルはない。
その書き方で出てくる波括弧はリスト初期化の構文の一部で、
波括弧の部分単体は配列リテラルではない。
実行時にオブジェクトの構築を避けるならコンパイル時に構築することになるが
それはそれで色々と制約があるんでほんまにそれが必要なんか?
というのはよく考えないといけない。
あえてやるならこんな感じかな……。
https://wandbox.org/permlink/HStrLq8ddyC3tby2
C++ に配列リテラルはない。
その書き方で出てくる波括弧はリスト初期化の構文の一部で、
波括弧の部分単体は配列リテラルではない。
実行時にオブジェクトの構築を避けるならコンパイル時に構築することになるが
それはそれで色々と制約があるんでほんまにそれが必要なんか?
というのはよく考えないといけない。
あえてやるならこんな感じかな……。
https://wandbox.org/permlink/HStrLq8ddyC3tby2
317デフォルトの名無しさん (ワッチョイ c3c9-hAMa)
2024/04/09(火) 20:10:25.18ID:T/amOWJO0 とあるtemplateの関数を実装しているのですが、
const指定の振る舞いがよくわからなくなったので
質問させてください。
以下の(だいぶ簡略化した)コードで、
f_without_const<const int*>(const int* a)
はコンパイルが通るのですが
f_with_const<int*>(const int* a)
がコンパイルが通らないのは何故でしょうか。
https://wandbox.org/permlink/OIgKM2DTqvpGduRV
const指定の振る舞いがよくわからなくなったので
質問させてください。
以下の(だいぶ簡略化した)コードで、
f_without_const<const int*>(const int* a)
はコンパイルが通るのですが
f_with_const<int*>(const int* a)
がコンパイルが通らないのは何故でしょうか。
https://wandbox.org/permlink/OIgKM2DTqvpGduRV
318デフォルトの名無しさん (ワッチョイ f7f0-B2uz)
2024/04/09(火) 20:30:45.76ID:lDhzon+/0319デフォルトの名無しさん (ワッチョイ 2790-Bmwq)
2024/04/09(火) 21:45:08.71ID:+RmfoJzl0 >>317
templateは型が違うと全くの別物として処理するからだと思う
templateは型が違うと全くの別物として処理するからだと思う
320デフォルトの名無しさん (ワッチョイ 7b10-qE2a)
2024/04/09(火) 22:00:45.26ID:5hAg3cgl0321はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-B3tP)
2024/04/10(水) 08:39:45.44ID:Fk7YBwaR0 const T t に対して const int* a が来たら
字句の順序としては T に int* が対応してるように見えちゃうもんな……。
字句の順序としては T に int* が対応してるように見えちゃうもんな……。
322デフォルトの名無しさん (ワッチョイ c37a-hAMa)
2024/04/11(木) 21:42:31.84ID:0cjrPM+u0 317です、返信遅くなってすみません
確かに言われてみればconstが修飾してるのはint*なので、意味的にint *constが正しいですね…
ありがとうございました
確かに言われてみればconstが修飾してるのはint*なので、意味的にint *constが正しいですね…
ありがとうございました
323デフォルトの名無しさん (ワッチョイ b77c-0iQt)
2024/04/14(日) 14:49:11.63ID:tTNkn9kB0 先月東京で標準化委員会の会議あったらしいけどなんか情報ないの?
324デフォルトの名無しさん (ワッチョイ ff33-m4LK)
2024/04/14(日) 15:03:51.38ID:H7y3imqp0325デフォルトの名無しさん (ワッチョイ 7f52-9wFU)
2024/04/16(火) 00:50:18.09ID:38VQ+8UT0326デフォルトの名無しさん (ワッチョイ 67b1-Jq5A)
2024/05/01(水) 21:36:46.68ID:/DCu7vsT0 python みたいに何でも格納できる辞書型ってC++には無いよね?
327はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8732-nVjz)
2024/05/01(水) 22:29:05.62ID:IV4TsWNk0 >>326
要素を std::any にすればだいたいどんな型の値でも入れられる。
いろんな型を入れたところで使うときには元の型として取り出さないといけないから
処理は煩雑になってあまり良いことはないけど。
要素を std::any にすればだいたいどんな型の値でも入れられる。
いろんな型を入れたところで使うときには元の型として取り出さないといけないから
処理は煩雑になってあまり良いことはないけど。
328デフォルトの名無しさん (ワッチョイ 8f7c-Y/5H)
2024/05/09(木) 20:23:09.67ID:MzADiHDk0329デフォルトの名無しさん (ワッチョイ bed6-w0ma)
2024/05/09(木) 21:19:14.71ID:M6C6+6vz0 何いってんだ
330デフォルトの名無しさん (ワッチョイ bbda-JG92)
2024/05/10(金) 11:53:06.45ID:P+BretyD0 #elifは大昔からあるぞ
331デフォルトの名無しさん (ワッチョイ 8f7c-Y/5H)
2024/05/11(土) 09:12:25.64ID:YR9R4Y390 cpprefjpが間違ってるだけ?
それともずっと規格から欠落してたけど誰も気付いてなかったパターン?
それともずっと規格から欠落してたけど誰も気付いてなかったパターン?
332デフォルトの名無しさん (ワッチョイ bed6-w0ma)
2024/05/11(土) 11:19:25.57ID:PrWZroBw0 規格が読めないならC++やめろ
333デフォルトの名無しさん (ワッチョイ 0b63-IWIS)
2024/05/11(土) 19:02:18.20ID:RotYKdRC0 elifを逆から読んだらfile
ラリーはこれを嫌ってPerlではelsifにした(適当
ラリーはこれを嫌ってPerlではelsifにした(適当
334デフォルトの名無しさん (ワッチョイ bbda-JG92)
2024/05/11(土) 22:20:47.67ID:HBPowvO20 シェルが変だからな
case ~ esac
if ~ fi
case ~ esac
if ~ fi
質問なのですが
Q1. std::fstreamでファイルを開くときのフラグの指定の仕方は次のどれが正義?
std::fstream ofs("foo.txt", std::ios::out | std::ios::binary); // (1)
std::fstream ofs("foo.txt", std::basic_ios::out | std::basic_ios::binary); // (2)
std::fstream ofs("foo.txt", std::fstream::out | std::fstream::binary); // (3)
Q1. std::fstreamでファイルを開くときのフラグの指定の仕方は次のどれが正義?
std::fstream ofs("foo.txt", std::ios::out | std::ios::binary); // (1)
std::fstream ofs("foo.txt", std::basic_ios::out | std::basic_ios::binary); // (2)
std::fstream ofs("foo.txt", std::fstream::out | std::fstream::binary); // (3)
337デフォルトの名無しさん (ブーイモ MMde-FHn0)
2024/06/06(木) 15:53:22.90ID:Vp529NVwM フル手書き前提がくそださい
338デフォルトの名無しさん (ワッチョイ fe2c-7W3t)
2024/06/06(木) 19:13:19.37ID:FMMlTunO0 fstreamなんだったらfstreamのメンバで書くのがいいんじゃない
(1)は#include <ios>が要るし、
(2)は「basic_」の6文字×フラグの数 だけ長いし、
(3)も同様でありなおかつ>>337に従ったとき
use binary = std::fstream::binary;
use ibinary = std::ifstream::binary;
use obinary = std::ofstream::binary;
となってしまい、
どれもこれもコード量最小化原則的にビミョーなことに……
ていうかなんで同じことをするのに複数の書き方があるのかっていうか、
Perlじゃあるまいし……
(2)は「basic_」の6文字×フラグの数 だけ長いし、
(3)も同様でありなおかつ>>337に従ったとき
use binary = std::fstream::binary;
use ibinary = std::ifstream::binary;
use obinary = std::ofstream::binary;
となってしまい、
どれもこれもコード量最小化原則的にビミョーなことに……
ていうかなんで同じことをするのに複数の書き方があるのかっていうか、
Perlじゃあるまいし……
340デフォルトの名無しさん (ワッチョイ d68d-vvKF)
2024/06/06(木) 23:54:13.70ID:7ZzCG2hU0 iostreamはまあしゃーない…
341デフォルトの名無しさん (ワッチョイ a97c-3xqL)
2024/06/07(金) 02:20:24.96ID:GhXFHGen0 C++の悪評の4割くらいはiostreamのせいだからな
342デフォルトの名無しさん (ワッチョイ a944-l7CW)
2024/06/07(金) 04:24:11.05ID:qf+nnTv50 ここでCmakeとNinjaについて聞くのダメ?
どーも関係がよくわからなくて?
どーも関係がよくわからなくて?
343はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a932-zlCG)
2024/06/07(金) 05:26:04.94ID:zM43Xr/H0 >>342
そういう雑多な話題のちょうどよいスレは見当たらんし、単発で終わる質問程度なら許容されると思うが……。
質問の内容が漠然としているなら丁寧な回答は得られないと思う。
「よくわからない」という状況になるときってのは大抵の場合に関連する前提知識が足りてないので
質問が連鎖的に発生してダラダラ続いたりするから。
そういう雑多な話題のちょうどよいスレは見当たらんし、単発で終わる質問程度なら許容されると思うが……。
質問の内容が漠然としているなら丁寧な回答は得られないと思う。
「よくわからない」という状況になるときってのは大抵の場合に関連する前提知識が足りてないので
質問が連鎖的に発生してダラダラ続いたりするから。
344はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a932-zlCG)
2024/06/07(金) 05:36:24.41ID:zM43Xr/H0345デフォルトの名無しさん (ワッチョイ fee5-FHn0)
2024/06/07(金) 13:37:29.47ID:kav19u0f0 copilotで補完でok
346デフォルトの名無しさん (ワッチョイ 6af0-AYul)
2024/06/07(金) 17:07:58.06ID:NFmVQMC40 バカの解決策
347デフォルトの名無しさん (ブーイモ MMea-FHn0)
2024/06/07(金) 21:12:45.28ID:70o6R+hDM また時代に取り残されるじじい
348デフォルトの名無しさん (ワッチョイ 1563-WQ8n)
2024/06/07(金) 21:48:19.45ID:ORLoeNdF0349デフォルトの名無しさん (ワッチョイ fee5-FHn0)
2024/06/08(土) 01:03:51.86ID:k3Jnk/Aj0 静的解析で文句言われる可能性あるからやめときな
頻発するならスニペット作ればいいだけ
そういう表面的なことにこだわる奴は三流
頻発するならスニペット作ればいいだけ
そういう表面的なことにこだわる奴は三流
350デフォルトの名無しさん (ワッチョイ f344-7AaF)
2024/06/09(日) 04:26:59.39ID:RJYm8+UN0 lldb v14.0.0 で正しくプロセスを実行できません
apt insrall でインストールしたもので, 環境はwsl 1 です
具体的には下のサイトのIssue Encountered:と全く同じ症状です
https://stackoverflow.com/questions/78275920/troubleshoot-lldb-on-ubuntu-wsl
改めて書きますと Hello World 表示だけのソースを clang でコンパイルし,
lldb で読み込み run させると
Process 20784 launched: '/home/Hustler/c++/move/move' (x86_64)
と表示されたまま応答がなくなり 放置すると(サイトでは強制終了させてるようですが)
Process 20784 exited with status = -1 (0xffffffff) lost connection
となってコマンド入力待ち状態となります
ちなみにプログラムはそのまま実行して正しく動作しますし gdb でも何の問題もありません
これに関して何か情報をお持ちの方いますか?
apt insrall でインストールしたもので, 環境はwsl 1 です
具体的には下のサイトのIssue Encountered:と全く同じ症状です
https://stackoverflow.com/questions/78275920/troubleshoot-lldb-on-ubuntu-wsl
改めて書きますと Hello World 表示だけのソースを clang でコンパイルし,
lldb で読み込み run させると
Process 20784 launched: '/home/Hustler/c++/move/move' (x86_64)
と表示されたまま応答がなくなり 放置すると(サイトでは強制終了させてるようですが)
Process 20784 exited with status = -1 (0xffffffff) lost connection
となってコマンド入力待ち状態となります
ちなみにプログラムはそのまま実行して正しく動作しますし gdb でも何の問題もありません
これに関して何か情報をお持ちの方いますか?
351デフォルトの名無しさん (ワッチョイ f344-7AaF)
2024/06/09(日) 05:11:57.08ID:RJYm8+UN0 今やってみたのですが
lldb-14をuninstall(remove)し lldb-15をインストールしてみましたが
状況は改善しませんでした
lldb-14をuninstall(remove)し lldb-15をインストールしてみましたが
状況は改善しませんでした
352はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f332-Oh5j)
2024/06/09(日) 15:07:14.43ID:bthWHIYm0 WSL1 は (ある程度) Linux 互換のシステムコールを windows 内に実装することで実現していて Linux カーネルそのものではないので色々と不足がある。
(そのかわり Windows と親和性がある部分もある。)
WSL1 で用意してない Linux の機能に依存したアプリケーションは動かない。
まともな互換性が必要ならWSL2 を使いなさいという話なので手間をかけて WSL1 を積極的にはサポートしないと思う。
(そのかわり Windows と親和性がある部分もある。)
WSL1 で用意してない Linux の機能に依存したアプリケーションは動かない。
まともな互換性が必要ならWSL2 を使いなさいという話なので手間をかけて WSL1 を積極的にはサポートしないと思う。
353デフォルトの名無しさん (ワッチョイ f344-7AaF)
2024/06/09(日) 20:56:05.63ID:RJYm8+UN0354デフォルトの名無しさん (ワッチョイ 6363-vt9G)
2024/06/09(日) 21:14:14.41ID:VES2dE5O0 WSLはlldbが使うシステムコールが足りてないって昔から言われていたかと
ターゲット機を別にするとかWSL2にするとかじゃね?
ターゲット機を別にするとかWSL2にするとかじゃね?
355デフォルトの名無しさん (ワッチョイ f344-7AaF)
2024/06/09(日) 21:36:35.88ID:RJYm8+UN0 >>354
>WSLはlldbが使うシステムコールが足りてないって昔から言われていたかと
なるほどTHXです
clang使ってなかったので全然わかりませんでした
動かないlldbもさんざんggったんだけど system call未実装にはたどり着けませんでした
ようやくすっきりしました
>WSLはlldbが使うシステムコールが足りてないって昔から言われていたかと
なるほどTHXです
clang使ってなかったので全然わかりませんでした
動かないlldbもさんざんggったんだけど system call未実装にはたどり着けませんでした
ようやくすっきりしました
356はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f332-Oh5j)
2024/06/09(日) 22:04:05.34ID:bthWHIYm0 ざっとググってみた感じたと wsl1 では procfs が提供する情報が少ないのが lldb が動かない直接の原因みたいな数年前の情報は見つかる。
内部構造がまるで違うはずなのに表面的なインターフェースは互換にするなんてのは無理のある話なので互換性が「ある程度」にとどまるのは仕方ない。
内部構造がまるで違うはずなのに表面的なインターフェースは互換にするなんてのは無理のある話なので互換性が「ある程度」にとどまるのは仕方ない。
357デフォルトの名無しさん (ワッチョイ f344-7AaF)
2024/06/09(日) 22:18:48.29ID:RJYm8+UN0 んー
clangちょっと調べたかったんで
Visual Studioにclangインスコして調べますわ
できるならwslでやるのが手っ取り早いんですが
Q9550とQ9550sしか持ってないもんで
以来CPUの爆値上がりと最近の円の爆下がりで新しく組めてないんですわ
ダイサイズ変わらないのにCPU 3万ー> 10万とか購買意欲が萎える
clangちょっと調べたかったんで
Visual Studioにclangインスコして調べますわ
できるならwslでやるのが手っ取り早いんですが
Q9550とQ9550sしか持ってないもんで
以来CPUの爆値上がりと最近の円の爆下がりで新しく組めてないんですわ
ダイサイズ変わらないのにCPU 3万ー> 10万とか購買意欲が萎える
358デフォルトの名無しさん (ブーイモ MM1f-vt9G)
2024/06/10(月) 18:15:47.68ID:bkv2YMA2M359350 (ワッチョイ f344-7AaF)
2024/06/10(月) 21:38:00.71ID:gvR5xwnw0 自己レスです
その後 Visual Studioのインストールオプションでclangを選択し
正しく動作することは確認したのですが...
今や誰でもロハで使えるインテルコンパイラがとっくの昔にllvm化されてたんですね
clangに拘りがなければ x86/x64のwin/linux/wsl は素直にopenAPI使っとくのが幸せかも.
ちなみにwsl 1にlinux版をインストールしましたが
コンパイラicxもデバッガgdb-opwnapiも何の問題もなく動いてます(今のところは)
なので
Visual Studio はインストールオプションのclang は外してもとに戻し
wsl は
>apt remove clang clang-15
>apt remove lldb lldb-15
しときました
その後 Visual Studioのインストールオプションでclangを選択し
正しく動作することは確認したのですが...
今や誰でもロハで使えるインテルコンパイラがとっくの昔にllvm化されてたんですね
clangに拘りがなければ x86/x64のwin/linux/wsl は素直にopenAPI使っとくのが幸せかも.
ちなみにwsl 1にlinux版をインストールしましたが
コンパイラicxもデバッガgdb-opwnapiも何の問題もなく動いてます(今のところは)
なので
Visual Studio はインストールオプションのclang は外してもとに戻し
wsl は
>apt remove clang clang-15
>apt remove lldb lldb-15
しときました
360350 (ワッチョイ f344-7AaF)
2024/06/11(火) 06:20:17.73ID:Ip4/j3Hv0 ☓ openAPI
◯ oneAPI
◯ oneAPI
361あぼーん
NGNGあぼーん
362あぼーん
NGNGあぼーん
363デフォルトの名無しさん (ワッチョイ 43d7-pk1M)
2024/07/13(土) 19:06:26.39ID:Dtkl2SPB0 若者のBoost離れ
364デフォルトの名無しさん (ワッチョイ 0501-twcF)
2024/07/13(土) 19:56:34.01ID:vwgbCsGD0 と言いますと?
365デフォルトの名無しさん (ワッチョイ f5f9-pk1M)
2024/07/13(土) 21:42:42.00ID:Rh1MnFN10 VS17.10.xでBoostがビルドできなくなってるのに
誰も触れない
誰も触れない
366デフォルトの名無しさん (ワッチョイ f5f9-pk1M)
2024/07/13(土) 21:47:29.39ID:Rh1MnFN10 MSVC143から144に変わったせいでビルドできないらしいですよ
367デフォルトの名無しさん (ワッチョイ e91c-hIhh)
2024/07/16(火) 12:22:56.57ID:gS8T2k/f0 >>342
CMakeとNinjaはC++の話題なのでOKです
CMakeとNinjaはC++の話題なのでOKです
368デフォルトの名無しさん (ワッチョイ 4901-V77j)
2024/07/27(土) 17:57:44.53ID:KDd62vAV0 C++、
型の指定が、めんどい
速いぐらいしか、利点ないよな
型の指定が、めんどい
速いぐらいしか、利点ないよな
369デフォルトの名無しさん (ワッチョイ 7b95-4q6c)
2024/07/27(土) 20:53:02.50ID:eNksZtKQ0 顧客目線に立てない三流の感想
370デフォルトの名無しさん (ワッチョイ 4901-7phL)
2024/07/27(土) 21:03:15.66ID:zOSUCWw50 >>368
auto使えば?
auto使えば?
371デフォルトの名無しさん (ワッチョイ 1379-xel+)
2024/07/27(土) 23:40:34.69ID:iHlVB6Tw0 ランタイムに依存しない(し難い)のが最大の利点だろうに
さらに大抵のアーキテクチャには用意されてるからクロスプラットフォームの観点でもなんだかんだ最強なんだよ
むしろ最近はChatGPTが他の言語で書いたやつまで適当に書き直してくれるのもあって最強度がより高まってきてると感じるね
さらに大抵のアーキテクチャには用意されてるからクロスプラットフォームの観点でもなんだかんだ最強なんだよ
むしろ最近はChatGPTが他の言語で書いたやつまで適当に書き直してくれるのもあって最強度がより高まってきてると感じるね
372デフォルトの名無しさん (ワッチョイ 8e95-N8l3)
2024/07/28(日) 00:00:39.51ID:ePI6t8jD0 全く同意できんな
むしろ環境依存上等で使うのがC/C++だろ
パッケージシステムも標準がないしビルド環境もばらばら
どこが最強やねん
標準ライブラリで完結するようなしょぼいプログラムなら他の言語使ったほうが楽
むしろ環境依存上等で使うのがC/C++だろ
パッケージシステムも標準がないしビルド環境もばらばら
どこが最強やねん
標準ライブラリで完結するようなしょぼいプログラムなら他の言語使ったほうが楽
373デフォルトの名無しさん (ワッチョイ bdf0-+IYp)
2024/07/28(日) 00:11:55.23ID:4HqkcgMt0 型の指定のサンプル
GetProcAddressに変換をかけるマクロ
#define ENTRY_INTERFACE(api) api = (decltype(api)) GetProcAddress(hInst,"_INTERFACE_"#api)
ね?簡単でしょ?
GetProcAddressに変換をかけるマクロ
#define ENTRY_INTERFACE(api) api = (decltype(api)) GetProcAddress(hInst,"_INTERFACE_"#api)
ね?簡単でしょ?
374デフォルトの名無しさん (ワッチョイ 5d01-viEi)
2024/07/28(日) 12:00:20.72ID:x9q80Pnt0375デフォルトの名無しさん (ワッチョイ aa3e-cE1m)
2024/07/28(日) 17:36:32.24ID:9wLF96CX0 >>374
あとテンプレートを使ったダックタイプとかも便利。
あとテンプレートを使ったダックタイプとかも便利。
376デフォルトの名無しさん (オッペケ Sr05-viEi)
2024/07/28(日) 21:14:24.07ID:roXukc4Cr377デフォルトの名無しさん (ワッチョイ 4132-nuT0)
2024/07/29(月) 08:53:31.23ID:cQQT2a1I0 実践に入る前に言語の入門は読んだほうが良いと思う。
基礎を積まずに実践しようとするのは無謀。
基礎を積まずに実践しようとするのは無謀。
378デフォルトの名無しさん (ワッチョイ 9a05-pVLH)
2024/07/29(月) 15:25:34.30ID:heyNGOtI0 なんでも、まずは改造から入るんだぜ
こうですか、うんたぶんこう
こうですか、うんたぶんこう
379デフォルトの名無しさん (ワッチョイ 4132-nuT0)
2024/07/29(月) 19:25:02.89ID:cQQT2a1I0 C++ には未規定がやたらたくさんあるんだ。
実際の挙動から仕様を想像しようとすると意味不明でグダグダやねん。
実際の挙動から仕様を想像しようとすると意味不明でグダグダやねん。
380デフォルトの名無しさん (ブーイモ MM9a-N8l3)
2024/07/29(月) 20:07:37.15ID:Nl7D5VelM ネットでいくらでも勉強できるだろ
書籍なんかいらん
書籍なんかいらん
381デフォルトの名無しさん (ワッチョイ aa3e-cE1m)
2024/07/29(月) 20:36:26.35ID:9/o4+28+0 結局ライブラリが重要だから、作りたいアプリで流行っているライブラリの入門をやるのがいい。
作りたいアプリそのものじゃなくても、類似アプリを作るのはやる気に繋がる。
作りたいアプリそのものじゃなくても、類似アプリを作るのはやる気に繋がる。
382デフォルトの名無しさん (オッペケ Sr05-viEi)
2024/07/29(月) 22:02:41.02ID:8hMQwTW/r >>377
github にあがってるやつを、理解しようとして、助けになる本は、結局ない希ガス
実際、実践的なものがないので、文法理解で終わってしまうという
https://github.com/TadaoYamaoka/cmajiang
これ、再利用して、アプリを作りたいのだが
github にあがってるやつを、理解しようとして、助けになる本は、結局ない希ガス
実際、実践的なものがないので、文法理解で終わってしまうという
https://github.com/TadaoYamaoka/cmajiang
これ、再利用して、アプリを作りたいのだが
383デフォルトの名無しさん (ワッチョイ 4132-nuT0)
2024/07/29(月) 22:18:19.65ID:cQQT2a1I0384デフォルトの名無しさん (ワッチョイ 0168-qw7+)
2024/07/29(月) 23:36:56.61ID:7XbSB18u0 >>382
立直麻雀のシミュレーターなら mjx の方がいいんじゃないかな?
マイクロソフトで麻雀 AI Suphx の開発に携わってた人が作ったシミュレーターで
動作検証も天鳳の牌譜で実施したらしい
https://github.com/mjx-project/mjx
他のシミュレーターだと
- libriichi (Rust製 麻雀 AI Mortal に付属 天鳳ルール準拠 AGPL)
https://github.com/Equim-chan/Mortal
- kanachan.simulation (C++製 麻雀AI kanachan に付属 雀魂ルール準拠 MITL)
https://github.com/Cryolite/kanachan/tree/v2
とかも参考になると思う
作りたいアプリの内容がわからないけど
ネット麻雀を作りたいなら cmajiang の元ネタの電脳麻将
https://github.com/kobalab/Majiang
https://kobalab.net/majiang/
AI 用の対戦シミュレーターなら mjai.app
https://github.com/smly/mjai.app
https://mjai.app/
が参考になりそう
立直麻雀のシミュレーターなら mjx の方がいいんじゃないかな?
マイクロソフトで麻雀 AI Suphx の開発に携わってた人が作ったシミュレーターで
動作検証も天鳳の牌譜で実施したらしい
https://github.com/mjx-project/mjx
他のシミュレーターだと
- libriichi (Rust製 麻雀 AI Mortal に付属 天鳳ルール準拠 AGPL)
https://github.com/Equim-chan/Mortal
- kanachan.simulation (C++製 麻雀AI kanachan に付属 雀魂ルール準拠 MITL)
https://github.com/Cryolite/kanachan/tree/v2
とかも参考になると思う
作りたいアプリの内容がわからないけど
ネット麻雀を作りたいなら cmajiang の元ネタの電脳麻将
https://github.com/kobalab/Majiang
https://kobalab.net/majiang/
AI 用の対戦シミュレーターなら mjai.app
https://github.com/smly/mjai.app
https://mjai.app/
が参考になりそう
385デフォルトの名無しさん (ワッチョイ 0168-qw7+)
2024/07/29(月) 23:43:38.11ID:7XbSB18u0 >>382
書くのを忘れてた
cmajiang の元ネタ majiang-core は作者が解説本を出してる
実際買ってみたけど、やっぱりソースコードだけ読むより分かりやすい
https://www.shuwasystem.co.jp/book/9784798067889.html
ブログでも解説されてるけど、お目当ての記事を探すのが大変だし本の方が見やすいと思った
https://blog.kobalab.net/
書くのを忘れてた
cmajiang の元ネタ majiang-core は作者が解説本を出してる
実際買ってみたけど、やっぱりソースコードだけ読むより分かりやすい
https://www.shuwasystem.co.jp/book/9784798067889.html
ブログでも解説されてるけど、お目当ての記事を探すのが大変だし本の方が見やすいと思った
https://blog.kobalab.net/
386デフォルトの名無しさん (ワッチョイ bdf0-+IYp)
2024/07/30(火) 12:23:26.36ID:8UDCP+we0 >>379
未規定というか、C++11よりも古い規格のは、古参でないと扱いが難しいからね
そういう古い規格のものが仕事で入ってい来たりすると新人は頭悩ますかもしれんね
03~11まで結構間に空いてるしね
未規定というか、C++11よりも古い規格のは、古参でないと扱いが難しいからね
そういう古い規格のものが仕事で入ってい来たりすると新人は頭悩ますかもしれんね
03~11まで結構間に空いてるしね
387デフォルトの名無しさん (ワッチョイ 5d01-viEi)
2024/07/30(火) 23:52:38.43ID:KT8SFJ0h0388デフォルトの名無しさん (ワッチョイ 1bef-BWtz)
2024/08/04(日) 06:24:46.59ID:WlfSsbJh0 ラムダ式が渡された側って、キャプチャの内容をチェックしたりできないのでしょうか。
例えば以下の例で、funcA()の中でfの中のthisをチェックして挙動を変えたりとか?
そういうことをしたいなら、ラムダの引数で渡したりすべきでしょうか?
#include <iostream>
class A {
public:
void funcA(const std::function<void(int)>& f, int a) {
f(a); // can I check 'this' (B class) in f?
};
};
class B {
public:
void print(int b) {
A objA;
objA.funcA([this](int i) { std::cout << "val = " << i << "\n"; }, b);
}
};
int main(void) {
B objB;
objB.print(2);
}
例えば以下の例で、funcA()の中でfの中のthisをチェックして挙動を変えたりとか?
そういうことをしたいなら、ラムダの引数で渡したりすべきでしょうか?
#include <iostream>
class A {
public:
void funcA(const std::function<void(int)>& f, int a) {
f(a); // can I check 'this' (B class) in f?
};
};
class B {
public:
void print(int b) {
A objA;
objA.funcA([this](int i) { std::cout << "val = " << i << "\n"; }, b);
}
};
int main(void) {
B objB;
objB.print(2);
}
389はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a932-NesV)
2024/08/04(日) 10:12:57.69ID:w7HjtqNP0390デフォルトの名無しさん (ワッチョイ a94a-ImVy)
2024/08/04(日) 14:50:32.12ID:ao1w9dwD0 それはラムダ式を使う理由とズレてるな
A側で判定が必要なものならラムダ式の引数もしくはfuncAの引数で渡すべき
A側は受け取るものを「intをひとつ受け取ってvoidを出力する関数」として抽象化してるんだから、それ以外のことは知れないし、知るべきではない
Aは渡された関数が何であろうとintを一つ渡すだけで、その詳細 (関数がどのような値や参照をキャプチャしてるのか、渡した引数がどのように使われるのか) には触れられない
ラムダ式を使うのはこのような抽象化が目的のはずだから、キャプチャした値を知りたいというのは用途から外れるかと思う
A側で判定が必要なものならラムダ式の引数もしくはfuncAの引数で渡すべき
A側は受け取るものを「intをひとつ受け取ってvoidを出力する関数」として抽象化してるんだから、それ以外のことは知れないし、知るべきではない
Aは渡された関数が何であろうとintを一つ渡すだけで、その詳細 (関数がどのような値や参照をキャプチャしてるのか、渡した引数がどのように使われるのか) には触れられない
ラムダ式を使うのはこのような抽象化が目的のはずだから、キャプチャした値を知りたいというのは用途から外れるかと思う
391デフォルトの名無しさん (ワッチョイ 9b72-3sGu)
2024/08/04(日) 18:55:04.35ID:knGBcNlu0 なんか最近自分でで適切なインターフェースを定義して使うって発想がなくなってる気がする
ひたすらありものを繋ぐだけで作り切るみたいな
ひたすらありものを繋ぐだけで作り切るみたいな
392デフォルトの名無しさん (ワッチョイ c1f0-3TXu)
2024/08/04(日) 19:21:38.37ID:oxQURbTu0 仕組みを追求することをせずにどっかから完成した㌬をドッキングするだけの作業は情報収集力さえあれば組み込み系の作業員でもできるし己のチカラにはならんのよな
で、いろんなもの付け合わせていった結果、とんでもない容量のものが出来上がる上におまえそれメンテとかどうするんだよって方向に走ってって…あとは想像のとおりに
で、いろんなもの付け合わせていった結果、とんでもない容量のものが出来上がる上におまえそれメンテとかどうするんだよって方向に走ってって…あとは想像のとおりに
393デフォルトの名無しさん (ブーイモ MM8b-3sGu)
2024/08/04(日) 19:54:18.08ID:wSg2UiB1M オブジェクト指向オワコン論からの風潮
394デフォルトの名無しさん (ワッチョイ 1320-cRFB)
2024/08/04(日) 21:00:47.00ID:YVKn/U480 なんでオワコンなの?
395デフォルトの名無しさん (ワッチョイ c1f0-3TXu)
2024/08/06(火) 01:29:43.68ID:DDRjgUjC0 全然関係ないよな
取って貼っ付ける行為とオブジェクト指向は
全体の概要設計を把握してメンテ出来ていれば何の問題もない
取って貼っ付ける行為とオブジェクト指向は
全体の概要設計を把握してメンテ出来ていれば何の問題もない
396青木康善 (ワッチョイ 59d4-ANSA)
2024/08/07(水) 04:36:25.01ID:S6qXQ6lv0 素晴らしいなあみなさん。早すぎる!C plus plusは!
397デフォルトの名無しさん (ワッチョイ 5347-eg/E)
2024/08/07(水) 09:54:05.95ID:+pgWMXtY0 JavaはCの20倍速いを知らん人か
398デフォルトの名無しさん (アウアウエー Sa23-LX2u)
2024/08/07(水) 17:07:58.21ID:RPpAsXPKa399青木康善 (ワッチョイ 0bc8-ANSA)
2024/08/08(木) 00:15:58.93ID:Qfze0mfg0 マジっすか?Cの20倍?しかし、専門学校の先生に、青木!バカもん!プログラミング言語Cが一冊で事足りる、と言われても、高校数学でつまづいて大鬱病になったんで、問題が解けない。。。有隣堂本店さんで、リッチーの本置いているから、いつか買います!
400デフォルトの名無しさん (ワッチョイ 31fe-/5UW)
2024/08/08(木) 04:05:43.03ID:G3QDAupS0 今のANSI対応版は易しくなってると思うけどな。
不安ならアンサーブックとセットで買えば良いベ
不安ならアンサーブックとセットで買えば良いベ
401デフォルトの名無しさん (ブーイモ MM33-DGdp)
2024/08/08(木) 16:07:46.41ID:fgfi2g+JM VMのオーバーヘッドがあるのに20倍って?
あるいは20倍時間が掛かる?
あるいは20倍時間が掛かる?
402青木康善 (ワッチョイ 31e4-ANSA)
2024/08/09(金) 13:02:28.92ID:FZEpuz0a0 いや、プログミング言語は、駿台電子は、国語の倒置法なんです。夜間の一年で、javaからで、二年でCなんです。いや、アンサーブックは、池袋ジュンク堂本店さんには、置いてなかったような。。。。。ありがたいというか、ビックリ。。。。マジか。。。機械語を仕事でプログラミングしていた先生が、喫煙所で、青木、お前、一つのことを本当に深く考えたことがあるか?と質問してくれた恩師なんです。
403デフォルトの名無しさん (ワッチョイ 5384-eg/E)
2024/08/10(土) 12:16:45.89ID:xFKQiXk00 スカイネットの誕生日
404デフォルトの名無しさん (スフッ Sd33-QylA)
2024/08/10(土) 23:52:09.93ID:oQf4NdPPd 御巣鷹山ノボレ
405デフォルトの名無しさん (ワッチョイ 7f78-/FHh)
2024/08/24(土) 08:35:54.88ID:yYuYqoCz0 すみません。教えて下さい。
template<class T, class U>void (T& x, const U& y)
{
x=y;
...
}
double ←complex<double> の代入がコンパイルエラーとなるconceptの書き方あるんでしょうか?
complex<double> ← doubleの代入ではエラーが出てほしくないです。
template<class T, class U>void (T& x, const U& y)
{
x=y;
...
}
double ←complex<double> の代入がコンパイルエラーとなるconceptの書き方あるんでしょうか?
complex<double> ← doubleの代入ではエラーが出てほしくないです。
406デフォルトの名無しさん (ワッチョイ 7f78-/FHh)
2024/08/24(土) 09:05:25.59ID:yYuYqoCz0 あ、上では関数名fが抜けてましたね.concept使わずとも
template<class T> void f(complex<T>& x, const T& y)とすればいいでしょうけど、
y=xのときはどうかとか、あるいは complex<double>←float の代入はokにしたいとか、
いろいろ考えているとテンプレート関数なのに関数のオーバーロードが増えてしまって面倒だなと思ったものですから。
template<class T> void f(complex<T>& x, const T& y)とすればいいでしょうけど、
y=xのときはどうかとか、あるいは complex<double>←float の代入はokにしたいとか、
いろいろ考えているとテンプレート関数なのに関数のオーバーロードが増えてしまって面倒だなと思ったものですから。
407デフォルトの名無しさん (ワッチョイ 7f78-/FHh)
2024/08/24(土) 09:23:02.26ID:yYuYqoCz0 y=xのときは忘れてください。(f(complex<T>& y, const T& x)とすればいいだけ)。どういう状況のためにconceptが必要なのか要点がまとまっていませんね。失礼しました。
408デフォルトの名無しさん (ワッチョイ 7ff0-aWDb)
2024/08/24(土) 09:53:34.49ID:PPcTgFGr0 conceptで無理やりくくるよりか、static_assertのほうが楽そう
template<class T, class U>void f(T& x, const U& y)
{
static_assert(std::is_same<double,T>::value&&std::is_same<complex<T>,U>::value,"絶対にゆるさない!絶対ニダ!!");
x=y;
...
}
template<class T, class U>void f(T& x, const U& y)
{
static_assert(std::is_same<double,T>::value&&std::is_same<complex<T>,U>::value,"絶対にゆるさない!絶対ニダ!!");
x=y;
...
}
409デフォルトの名無しさん (ワッチョイ 7f78-/FHh)
2024/08/24(土) 11:11:32.60ID:yYuYqoCz0 && は右辺値参照ではなくてandの意味なんですね。std::is_same<double,T>はdouble型とT型が一致するかどうかを調べるヘルパー変数テンプレート、::value は trueかfalseのいずれかの値をとる定数ですか。static_assertは自分でエラーメッセージを作れるのがいいですね。完全にわかっていないですが、勉強します。ヒントありがとうございました。
410デフォルトの名無しさん (ワッチョイ 1f23-dwWB)
2024/08/24(土) 11:44:22.45ID:6PXbzil00 最近、初心者にいきなり右辺値参照とかテンプレート教える風潮は良くないと思うんだよなぁ・・・論理andとごっちゃになってるやんけ
ともあれis_same自体は構造体で、中にあるvalueは定数値やで
変数テンプレートはis_same_vの方。利便性(::value書くのがめんどい)のために用意されてるだけ
static_assertの第一引数(bool)に条件式を与えてるんだが、間違ってる
static_assert(!(std::is_same<double,T>::value&&std::is_same<complex<T>,U>::value),"絶対にゆるさない!絶対ニダ!!");
ともあれis_same自体は構造体で、中にあるvalueは定数値やで
変数テンプレートはis_same_vの方。利便性(::value書くのがめんどい)のために用意されてるだけ
static_assertの第一引数(bool)に条件式を与えてるんだが、間違ってる
static_assert(!(std::is_same<double,T>::value&&std::is_same<complex<T>,U>::value),"絶対にゆるさない!絶対ニダ!!");
411デフォルトの名無しさん (ワッチョイ 7ff0-aWDb)
2024/08/24(土) 12:20:38.61ID:PPcTgFGr0 !抜けてたわ
スマソ
スマソ
412デフォルトの名無しさん (ワッチョイ 7ff0-aWDb)
2024/08/24(土) 12:40:45.95ID:PPcTgFGr0 // こういう書き方もある
if const_expr ( std::is_same<double,T>::value && std::is_same<complex<T>,U>::value ) {
//許されない処理
static_assert(false,"許さんぞ!!");
}else {
//正常処理
}
if const_expr ( std::is_same<double,T>::value && std::is_same<complex<T>,U>::value ) {
//許されない処理
static_assert(false,"許さんぞ!!");
}else {
//正常処理
}
413デフォルトの名無しさん (ワッチョイ 7ff0-aWDb)
2024/08/24(土) 12:43:11.34ID:PPcTgFGr0 また間違えたw
× const_expr
● constexpr
× const_expr
● constexpr
414デフォルトの名無しさん (ワッチョイ 7f78-/FHh)
2024/08/24(土) 14:40:14.03ID:yYuYqoCz0 いろいろとありがとうございます。参考になりました。
template<class T, class U> void f(T& x, U& y)
{
if constexpr ( !(std::is_same<T,double>::value &&
std::is_same<U, std::complex<T>>::value) ) static_assert(false,"ワシャ許さんぞ!!");
y=x;
}
template <class T, class U> void g(T& x, U& y)
{
static_assert( (std::is_same<T,double>::value && std::is_same<U, std::complex<T>>::v
alue),"ワシャ許さんぞ!!" );
y=x;
}
int main()
{
using namespace std;
double x=3.14159265358979;
complex<double> z;
f(x,z);
g(z,x); // 順番変えたり、xをfloatにするとエラー
cout<<z<<endl;
しかし、コンパイル時にifがつかえるんですねえ。凄いな、constexpr
template<class T, class U> void f(T& x, U& y)
{
if constexpr ( !(std::is_same<T,double>::value &&
std::is_same<U, std::complex<T>>::value) ) static_assert(false,"ワシャ許さんぞ!!");
y=x;
}
template <class T, class U> void g(T& x, U& y)
{
static_assert( (std::is_same<T,double>::value && std::is_same<U, std::complex<T>>::v
alue),"ワシャ許さんぞ!!" );
y=x;
}
int main()
{
using namespace std;
double x=3.14159265358979;
complex<double> z;
f(x,z);
g(z,x); // 順番変えたり、xをfloatにするとエラー
cout<<z<<endl;
しかし、コンパイル時にifがつかえるんですねえ。凄いな、constexpr
415デフォルトの名無しさん (ワッチョイ 7f78-/FHh)
2024/08/24(土) 15:09:12.28ID:yYuYqoCz0 std::is_same<T,double>::valueの代わりにstd::same_as<T,double>でも良いみたいですね.
416デフォルトの名無しさん (ワッチョイ 9f63-rdaS)
2024/08/24(土) 16:42:04.52ID:6x2BzwZB0 #ifdef NDEBUG
/*pass*/
#else
class dbg_complex {
std::complex<double> m_complex;
public:
// std::complex<double> のメソッドのうち使うやつ同じシグネチャのメソッドを書き並べ、m_complexに移譲
...
private:
dbg_complex(doble); // 禁止
};
#define complex dbg_compled
#endif
※ 個人の感想です。
/*pass*/
#else
class dbg_complex {
std::complex<double> m_complex;
public:
// std::complex<double> のメソッドのうち使うやつ同じシグネチャのメソッドを書き並べ、m_complexに移譲
...
private:
dbg_complex(doble); // 禁止
};
#define complex dbg_compled
#endif
※ 個人の感想です。
417デフォルトの名無しさん (ワッチョイ 9f63-rdaS)
2024/08/24(土) 16:48:40.66ID:6x2BzwZB0 いちいち移譲せねばならないのはstd::complex<T>の継承が禁止されているためorz
実際デストラクタが十中八九virtualではないし、
>>416の最後の
#define complex dbg_complex
みたいな穴だらけの置換手段が嫌ならもうstd::complex<double> を普段からcomplexdbl という別名にすると決めてまう
すると
#ifdef NDEBUG
using complexdbl = std::complex<double>;
#else
using complexdbl = dbg_complex;
#endif
で済む
実際デストラクタが十中八九virtualではないし、
>>416の最後の
#define complex dbg_complex
みたいな穴だらけの置換手段が嫌ならもうstd::complex<double> を普段からcomplexdbl という別名にすると決めてまう
すると
#ifdef NDEBUG
using complexdbl = std::complex<double>;
#else
using complexdbl = dbg_complex;
#endif
で済む
418デフォルトの名無しさん (ワッチョイ ff67-kHtd)
2024/08/24(土) 18:35:31.16ID:BJpt+Mj00 >>412
これかなり新しめのコンパイラじゃないと動かないので注意
これかなり新しめのコンパイラじゃないと動かないので注意
419デフォルトの名無しさん (ワッチョイ 1f23-dwWB)
2024/08/24(土) 19:16:42.78ID:6PXbzil00 行うべき解放処理が無い上ポリモーフィズムも不要なら、別にデストラクタがvirtualである必要は無いぞ
このケースで継承すべきかどうかはまた別として
このケースで継承すべきかどうかはまた別として
420デフォルトの名無しさん (ワッチョイ 1fbe-3Zrt)
2024/08/24(土) 23:53:59.32ID:4DIR6G6I0 >>412
constexpr if が使える (= C++17以上) なら std::is_same<T, U>::value よりも std::is_same_v<T, U> を使う方がシンプルだと思う
constexpr if が使える (= C++17以上) なら std::is_same<T, U>::value よりも std::is_same_v<T, U> を使う方がシンプルだと思う
421デフォルトの名無しさん (ワッチョイ 02f0-HfY5)
2024/08/25(日) 00:16:13.89ID:LfSHCV3h0 ま、お好きなの使えいいんじゃないんすか~
こちとら例文示しているだけで極めているワケじゃないからぬ
こちとら例文示しているだけで極めているワケじゃないからぬ
422はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4d32-7Uxd)
2024/08/25(日) 01:15:32.96ID:zZ+WMAII0 >>414
テンプレート型引数に require 節などで制約を付けた場合に制約に合致しなければオーバーロード解決候補から除外されるが、 static_assert や if constexpr での判定は解決が終わってテンプレートが実体化されるときに判定される。
つまり、より優先順位の低い候補に当てはめたいかもしれない場合は static_assert や if constexpr での判定をすべきではない。
状況によって使い分けがある。
それと >>418 が注意しているのは、テンプレートはテンプレート引数に依存しない部分は実体化されなくても検証されるルールだから。
(Two phase name lookup について調べてみて。)
つまり static_assert(false, ほにゃらら) と書いてあったらそのテンプレートが使われるかどうかに関係なく問答無用でエラーとして報告されていた。
新しい仕様では static_assert は実体化のときまで検証しないように挙動が改められたのだが、これは欠陥報告の形で問題提起されて過去の仕様に遡って修正されるので C++11 からこの仕様だったことになった。
新しいコンパイラでは C++11 を指定したときでも新しい挙動になる。
テンプレート型引数に require 節などで制約を付けた場合に制約に合致しなければオーバーロード解決候補から除外されるが、 static_assert や if constexpr での判定は解決が終わってテンプレートが実体化されるときに判定される。
つまり、より優先順位の低い候補に当てはめたいかもしれない場合は static_assert や if constexpr での判定をすべきではない。
状況によって使い分けがある。
それと >>418 が注意しているのは、テンプレートはテンプレート引数に依存しない部分は実体化されなくても検証されるルールだから。
(Two phase name lookup について調べてみて。)
つまり static_assert(false, ほにゃらら) と書いてあったらそのテンプレートが使われるかどうかに関係なく問答無用でエラーとして報告されていた。
新しい仕様では static_assert は実体化のときまで検証しないように挙動が改められたのだが、これは欠陥報告の形で問題提起されて過去の仕様に遡って修正されるので C++11 からこの仕様だったことになった。
新しいコンパイラでは C++11 を指定したときでも新しい挙動になる。
423デフォルトの名無しさん (ワッチョイ 0278-RCJX)
2024/08/25(日) 01:34:45.73ID:GxcwnqZY0 まあ、そんな小難しいこと言われても。C++が嫌われる理由だわ
424デフォルトの名無しさん (ワッチョイ 02f0-HfY5)
2024/08/25(日) 02:05:31.18ID:LfSHCV3h0 実体化ってどっちみちコンパイルするときにエラー発生するんだから結果かわらねぇだろバカがよう
425デフォルトの名無しさん (ワッチョイ c5a7-8JDH)
2024/08/25(日) 06:41:14.01ID:n8ainESh0 static_assert(false, "")は何かしらダミーの値入れて回避してたけど修正されてたんだ、知らんかった
426デフォルトの名無しさん (ワッチョイ 02f0-HfY5)
2024/08/26(月) 00:27:52.82ID:JWWBXqLI0 false効かないバカコンパイラはどうしようもないからどうにもならんか
//requires を使った方法
template<class T, class U>
requires(!(std::is_same_v<double,T>&&std::is_same_v<complex<T>,U>))
void f(T& x, const U& y)
{
x=y;
...
}
//requires を使った方法
template<class T, class U>
requires(!(std::is_same_v<double,T>&&std::is_same_v<complex<T>,U>))
void f(T& x, const U& y)
{
x=y;
...
}
427デフォルトの名無しさん (ワッチョイ 2963-G6Q9)
2024/08/27(火) 07:16:06.25ID:NdPbjHCm0 特定の引数型についてテンプレート展開を阻止したいんなら
特殊化してその中にstatic_assert(false, "*** ERR ***")書いても昔は駄目だったんか恐ろしい……
特殊化してその中にstatic_assert(false, "*** ERR ***")書いても昔は駄目だったんか恐ろしい……
428デフォルトの名無しさん (ワッチョイ 2963-G6Q9)
2024/08/27(火) 07:35:09.57ID:NdPbjHCm0 しかしまあ特殊化してテンプレート引数の型Tについて
態と存在しないメソッドを呼ぶように書いたらその特殊化ケースについて展開を阻止できうる(適当
クラス内でint型定数が欲しかったら古き良き enum { ONE, TWO, THREE } で十分やし
同じことをやる手段を増やせば良いってもんじゃないぞPerlじゃあるまいし……
態と存在しないメソッドを呼ぶように書いたらその特殊化ケースについて展開を阻止できうる(適当
クラス内でint型定数が欲しかったら古き良き enum { ONE, TWO, THREE } で十分やし
同じことをやる手段を増やせば良いってもんじゃないぞPerlじゃあるまいし……
429デフォルトの名無しさん (アウアウエー Sa0a-PBPb)
2024/08/27(火) 14:55:30.59ID:oHcafaf7a perlの面白仕様
430デフォルトの名無しさん (ワッチョイ c5f3-8JDH)
2024/08/27(火) 17:14:33.06ID:K2iTXH930 まぁ普通にSFINAEなり=delete指定なりコンセプトなりでオーバーロード候補から外す方が利用者視点でいえば自然だな
431デフォルトの名無しさん (ワッチョイ 0278-RCJX)
2024/08/27(火) 17:33:30.75ID:K7dNHCWQ0 #include <iostream>
#include <complex>
template <class T> decltype(auto) f(T x)
{
decltype(abs(std::declval<T>())) w;
w=abs(x);
return w;
}
int main()
{
using namespace std;
cout<<f(-1) << endl;
cout<<f(2.f)<< endl;
complex<double> z=complex<double>(1.0,1.0);
cout<<f(z)<<endl;
cin.get();
return 0;
}
いちかばちかでやったら、通りました。abs! Who are you? sizeof演算子と同じくコンパイル時に評価されるんですか? というか、地味だけど declval が凄い。
#include <complex>
template <class T> decltype(auto) f(T x)
{
decltype(abs(std::declval<T>())) w;
w=abs(x);
return w;
}
int main()
{
using namespace std;
cout<<f(-1) << endl;
cout<<f(2.f)<< endl;
complex<double> z=complex<double>(1.0,1.0);
cout<<f(z)<<endl;
cin.get();
return 0;
}
いちかばちかでやったら、通りました。abs! Who are you? sizeof演算子と同じくコンパイル時に評価されるんですか? というか、地味だけど declval が凄い。
432はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4d32-7Uxd)
2024/08/27(火) 18:27:19.33ID:WfqXHPCU0 >>431
sizeof や decltype のオペランドは評価されないということになってる。
だからその文脈で関数を使う場合でもその関数が定義されている必要はない。 (宣言だけあればよい。)
評価されないけど実体化は起こるのでそのへんの理屈は複雑でよくわからん。
sizeof や decltype のオペランドは評価されないということになってる。
だからその文脈で関数を使う場合でもその関数が定義されている必要はない。 (宣言だけあればよい。)
評価されないけど実体化は起こるのでそのへんの理屈は複雑でよくわからん。
434デフォルトの名無しさん (ワッチョイ 0220-Fpn2)
2024/08/30(金) 05:15:18.21ID:ZIPlhev80 相互参照わっかんねぇ
435デフォルトの名無しさん (ワッチョイ 5f2f-+rLF)
2024/09/02(月) 12:36:59.33ID:bqeYsc0k0 相互参照は必要ない
最近はウェブプログラマのほうが賢くなった
すそ野が広がると質が良くなるらしい
最近はウェブプログラマのほうが賢くなった
すそ野が広がると質が良くなるらしい
436デフォルトの名無しさん (ワッチョイ bf0a-5+wm)
2024/09/02(月) 13:00:06.45ID:Rco2Fp/20 必要ない理由ぐらい言ったら?
437はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e732-CMA8)
2024/09/02(月) 14:42:22.37ID:o+5p2SR60 プログラムの文法要素が相互参照になっている状況という意味?
たとえば前方宣言が必要な場合とか。
それとも (実行時の) データ構造が相互参照ということ?
たとえば循環構造の後始末のやり方がわからんとか。
たとえば前方宣言が必要な場合とか。
それとも (実行時の) データ構造が相互参照ということ?
たとえば循環構造の後始末のやり方がわからんとか。
438デフォルトの名無しさん (ワッチョイ 0701-+rOo)
2024/09/02(月) 19:52:42.06ID:cn5uZ01w0 >>435
その「相互参照」って何?
その「相互参照」って何?
439デフォルトの名無しさん (アウアウエー Sa1f-XN8b)
2024/09/05(木) 00:06:16.92ID:/oUqYYg3a 相互参照も自己参照も一緒
自己参照なんて参照してるのは自己ではない
ホントの意味での自己参照は循環参照
自己参照なんて参照してるのは自己ではない
ホントの意味での自己参照は循環参照
440デフォルトの名無しさん (ワッチョイ 5f00-+rLF)
2024/09/05(木) 18:17:57.29ID:xTcyjaky0 shared_ptrを使いたくなったら設計を見直すべき
441デフォルトの名無しさん (ワッチョイ 277f-jESi)
2024/09/06(金) 07:27:10.33ID:Qb4sTpDj0 >>440
それは無理があるんじゃないのかね。
データ共有とかインターフェイス共有とか本質的に所有者が複数存在するオブジェクトはsharedptr使うべきかと。
設計ではモジュール間の疎結合・インターフェイスの汎用化を重視すべきで、そのためにはデータの共有方法が重要になる。
それは無理があるんじゃないのかね。
データ共有とかインターフェイス共有とか本質的に所有者が複数存在するオブジェクトはsharedptr使うべきかと。
設計ではモジュール間の疎結合・インターフェイスの汎用化を重視すべきで、そのためにはデータの共有方法が重要になる。
442デフォルトの名無しさん (ブーイモ MM7f-5+wm)
2024/09/06(金) 11:54:45.03ID:onD85wsiM443デフォルトの名無しさん (ワッチョイ e7df-UdSI)
2024/09/06(金) 22:35:55.77ID:0hxwMUxG0 recurcive_mutexが欲しくなったら設計を見直したい、なら分かる気もする
444デフォルトの名無しさん (ワッチョイ 0753-60ma)
2024/09/07(土) 11:45:08.02ID:Zy1zUumM0 C++11あたりから「生ポは使うな」みたいな極論で分かった気になってる思い上がった初心者が増えたからなぁ
445デフォルトの名無しさん (ワッチョイ bfac-jESi)
2024/09/07(土) 11:58:09.00ID:UFsx2JaR0 >>444
生ポ使うよりかスマートポインタの参照を使った方がマシだったりするからなぁ。スマートポインタがスタックフレームにあるなら安全だし。
スタック変数専用仮引数とかあればもっと安全になるのになぁ。
仮引数の種類はもっとあっていいと思う。
生ポ使うよりかスマートポインタの参照を使った方がマシだったりするからなぁ。スマートポインタがスタックフレームにあるなら安全だし。
スタック変数専用仮引数とかあればもっと安全になるのになぁ。
仮引数の種類はもっとあっていいと思う。
446デフォルトの名無しさん (ワッチョイ 27ea-60ma)
2024/09/07(土) 16:26:14.57ID:lSV8lU690 >>445
考え方にもよるだろうけど、確保も解放も所有もしない関数でスマポ受け取る必要あるか?
特定の用途で管理されている特定のポインタしか許容しない、という意図ならスマポの参照でもいいだろうけど、汎用性は無いよね
生ポ受け取る場合暗黙のキャストも効かないし
考え方にもよるだろうけど、確保も解放も所有もしない関数でスマポ受け取る必要あるか?
特定の用途で管理されている特定のポインタしか許容しない、という意図ならスマポの参照でもいいだろうけど、汎用性は無いよね
生ポ受け取る場合暗黙のキャストも効かないし
447デフォルトの名無しさん (ワッチョイ 8763-0xUn)
2024/09/07(土) 20:17:38.39ID:Ci+xhqlU0448デフォルトの名無しさん (ワッチョイ 8763-0xUn)
2024/09/07(土) 20:21:44.33ID:Ci+xhqlU0 んまー前方宣言が必須というのは言い杉やったかもしれんorz
TreeNodeみたいなクラスはノード毎にヒープを確保するなんてことはやめて専用のアロケーターを設けて
専用の領域をまとめて確保して、
木全体がいらなくなったら木をトラバースすることなく一気に解放するのが本当やが
その場合m_pLeftやm_pRightにあたるのはポインタではなくて専用の領域(配列)のindexとかにすれば
前方宣言は不要、
TreeNodeみたいなクラスはノード毎にヒープを確保するなんてことはやめて専用のアロケーターを設けて
専用の領域をまとめて確保して、
木全体がいらなくなったら木をトラバースすることなく一気に解放するのが本当やが
その場合m_pLeftやm_pRightにあたるのはポインタではなくて専用の領域(配列)のindexとかにすれば
前方宣言は不要、
449デフォルトの名無しさん (ワッチョイ 27ea-60ma)
2024/09/07(土) 21:38:34.24ID:lSV8lU690450デフォルトの名無しさん (ワッチョイ 069a-KwgP)
2024/09/08(日) 00:33:39.65ID:vgBqrjWA0 shared_ptrの内部的な参照カウンタとかはともかく
保持しているオブジェクト自体はアトミックでもなんでもないでしょ
ってなんか勘違いしてる?
保持しているオブジェクト自体はアトミックでもなんでもないでしょ
ってなんか勘違いしてる?
451デフォルトの名無しさん (ワッチョイ 91ea-IbtD)
2024/09/08(日) 01:27:17.93ID:6Lpw1aoe0 持ってるポインタの指す先のオブジェクトがアトミックになるとか言ってると思ってんの?アホかw
452デフォルトの名無しさん (ワッチョイ b501-I4rH)
2024/09/08(日) 01:32:50.82ID:TMvzCbR60 そこでRustですよ!
453デフォルトの名無しさん (ワッチョイ eaf0-8qrK)
2024/09/08(日) 12:52:42.06ID:Lw7YNDXG0 でたw
布教マソw
布教マソw
454デフォルトの名無しさん (ブーイモ MM0a-bJfQ)
2024/09/10(火) 11:29:59.05ID:v6KS9t6sM >>447
お前の理解はshared_ptrの一面だけだな
ようするにunique_ptrの延長でしか見てない
shared_ptrがどうしても欲しくなるのは
オブジェクトのリリースタイミングが非決定的であるとき
これは一般的にマルチスレッド環境
お前のTreeNodeの例はそれこそ生ポで実装しても対して苦労しないが
例えば動的可変multi producerなqueueの場合確実に安全なqueueの解放タイミングを知るにはリファレンスカウントのような制御が必要となる
当然この場合コピーすれば安全なんて寝ぼけたことにはならない
お前の理解はshared_ptrの一面だけだな
ようするにunique_ptrの延長でしか見てない
shared_ptrがどうしても欲しくなるのは
オブジェクトのリリースタイミングが非決定的であるとき
これは一般的にマルチスレッド環境
お前のTreeNodeの例はそれこそ生ポで実装しても対して苦労しないが
例えば動的可変multi producerなqueueの場合確実に安全なqueueの解放タイミングを知るにはリファレンスカウントのような制御が必要となる
当然この場合コピーすれば安全なんて寝ぼけたことにはならない
455デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/10(火) 13:20:49.36ID:KGjTz1X0a x 対して
456デフォルトの名無しさん (ワッチョイ 8a48-/VPw)
2024/09/10(火) 15:36:50.97ID:+l9ylb2n0 それで自己参照ってのは結局何のことを指して言っていたんだい
457デフォルトの名無しさん (ワッチョイ 8a48-/VPw)
2024/09/10(火) 15:39:03.70ID:+l9ylb2n0 あ、相互参照が先か
>>435>>436の言うところの
>>435>>436の言うところの
458デフォルトの名無しさん (ワッチョイ 1ede-2PHd)
2024/09/11(水) 12:14:54.12ID:n6/LwjNL0 (*this)
↑
自己参照
↑
自己参照
459デフォルトの名無しさん (ワッチョイ 1ede-2PHd)
2024/09/11(水) 12:19:01.05ID:n6/LwjNL0 木のノードはstd::vector<>で確保する
と言われて、だよねってなる人はnewもほとんど必要ない
と言われて、だよねってなる人はnewもほとんど必要ない
460デフォルトの名無しさん (ワッチョイ 1ede-2PHd)
2024/09/11(水) 12:22:29.60ID:n6/LwjNL0 木の巡回は、巡回方向別にアダプタとしてイテレータを用意することが出来る
良くある行きがかり順のイテレータはスタックを使って作る
良くある行きがかり順のイテレータはスタックを使って作る
461デフォルトの名無しさん (ブーイモ MM45-bJfQ)
2024/09/11(水) 15:12:04.16ID:1n/VD1trM でvectorの拡張で破綻すんだろ?
462デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/13(金) 16:29:50.66ID:bblj+c3pa move禁止
463デフォルトの名無しさん (ワッチョイ 5ef4-bJfQ)
2024/09/13(金) 19:59:43.80ID:2C9M8qgO0 move禁止したらvector使えないし
464デフォルトの名無しさん (アウアウエー Sadf-N1Zj)
2024/09/17(火) 12:59:42.12ID:TMGdiCOOa それならオブジェクトを保持するためのオブジェクトと
moveためだけのインデックスを分けるかな
moveためだけのインデックスを分けるかな
465デフォルトの名無しさん (ワッチョイ bf84-GITO)
2024/09/17(火) 16:24:30.60ID:DN+X/Cyr0 何がしたい
あほでしょ
あほでしょ
466447 (ワッチョイ d763-HdVQ)
2024/09/21(土) 20:05:42.93ID:FUSKAHoo0 何やら集中砲火を浴びている>>442 やが
マルチスレッド状況でshared_ptr<T>を超有効活用できる手が一つあったわ;;;
スレッド間の共有オブジェクトをポインタpで保持する際の問題点は、
そのポインタを知っている複数スレッドの間でpが指すオブジェクト*pへのアクセスを悉く排他制御せなばならない点やが
逆にpを知っているスレッドが任意の時刻につき1つだけなら、オブジェクトのアクセスに対して排他の必要が無い
それでいてスレッドへのデータの受け渡しに関してコピーの手間は減らせる
例:
なんちゃらWorkerスレッドオブジェクトをshared_ptr<Worker>のキューで保持しておく
スレッドfooが使うときWorker1をshared_ptr<Worker>としてpopする(←これは排他が要る
スレッドbarが使うときWorker2をshared_ptr<Worker>としてpopする(←これは排他が要る
...
(スレッドfooやbarはWorker1、2をそれぞれ独占的に使用できる) ←重要
...
スレッドfooが使い終わったWorker1をキューにpushする(←これは排他が要る
スレッドbarが使い終わったWorker2をキューにpushする(←これは排他が要る
マルチスレッド状況でshared_ptr<T>を超有効活用できる手が一つあったわ;;;
スレッド間の共有オブジェクトをポインタpで保持する際の問題点は、
そのポインタを知っている複数スレッドの間でpが指すオブジェクト*pへのアクセスを悉く排他制御せなばならない点やが
逆にpを知っているスレッドが任意の時刻につき1つだけなら、オブジェクトのアクセスに対して排他の必要が無い
それでいてスレッドへのデータの受け渡しに関してコピーの手間は減らせる
例:
なんちゃらWorkerスレッドオブジェクトをshared_ptr<Worker>のキューで保持しておく
スレッドfooが使うときWorker1をshared_ptr<Worker>としてpopする(←これは排他が要る
スレッドbarが使うときWorker2をshared_ptr<Worker>としてpopする(←これは排他が要る
...
(スレッドfooやbarはWorker1、2をそれぞれ独占的に使用できる) ←重要
...
スレッドfooが使い終わったWorker1をキューにpushする(←これは排他が要る
スレッドbarが使い終わったWorker2をキューにpushする(←これは排他が要る
467447 (ワッチョイ d763-HdVQ)
2024/09/21(土) 20:13:25.63ID:FUSKAHoo0 ていうか2週間ぐらい前から作っていたやつが今さっき完動すた、
468デフォルトの名無しさん (ワッチョイ d763-HdVQ)
2024/09/21(土) 20:35:47.52ID:FUSKAHoo0 std::vector<TreeNode> nodes;
ならnodesを拡張したとき破綻するかもしれんが(nodeをnodesのindexで管理するならその限りではない
std::vector<std::shared_ptr<TreeNode> > apNodes;
ならapNodesを拡張しても破綻しないYO!(要素の実アドレスは保たれる
ならnodesを拡張したとき破綻するかもしれんが(nodeをnodesのindexで管理するならその限りではない
std::vector<std::shared_ptr<TreeNode> > apNodes;
ならapNodesを拡張しても破綻しないYO!(要素の実アドレスは保たれる
469デフォルトの名無しさん (ワッチョイ e37c-C1Jv)
2024/09/22(日) 08:21:05.99ID:e5FZYjui0 それ何のためのshared_ptrなの?unique_ptrでいいというか横からコピーされないようにそうすべきでは
470デフォルトの名無しさん (ワッチョイ 1e52-VArp)
2024/09/25(水) 13:57:54.93ID:N5yN4IuU0 >>466
>>442 を書いたのおれだけど、なんでおれが集中砲火浴びてることになってんだよ
生ポとか意味不明なこといってる>>447は一見してわかるクソレスだろ
おまえはそれ以上のクソレスにクソコード
でもお前の勝ちだ
クソコードに2週間かけた情熱に免じて親切におしえてやるわ
shared_ptrはpに誰かがアクセスしている可能性がある間は決してdeleteされないことを保証できるのが肝
(pの先の排他ではこれは実現できない)
もちろんこれも正しく使わないと保証できない
よくあるミスは知ったかぶって参照カウントを操作しないようにshared_ptrを参照渡しとかにするやつな
その間に絶対deleteされない保証がないならやってはいけない
>>442 を書いたのおれだけど、なんでおれが集中砲火浴びてることになってんだよ
生ポとか意味不明なこといってる>>447は一見してわかるクソレスだろ
おまえはそれ以上のクソレスにクソコード
でもお前の勝ちだ
クソコードに2週間かけた情熱に免じて親切におしえてやるわ
shared_ptrはpに誰かがアクセスしている可能性がある間は決してdeleteされないことを保証できるのが肝
(pの先の排他ではこれは実現できない)
もちろんこれも正しく使わないと保証できない
よくあるミスは知ったかぶって参照カウントを操作しないようにshared_ptrを参照渡しとかにするやつな
その間に絶対deleteされない保証がないならやってはいけない
471デフォルトの名無しさん (ワッチョイ cb41-LUcV)
2024/09/26(木) 03:21:09.01ID:5BtHXQaO0 あーなるほど、一貫してshared_ptrの実体を渡してればそういう保証も出来るのか
自分の場合自前で排他処理や生存保証作ってたけど確かに大きなメリットだね
(オブジェクト内部の排他は別に必要だとしても)
自分の場合自前で排他処理や生存保証作ってたけど確かに大きなメリットだね
(オブジェクト内部の排他は別に必要だとしても)
472デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 10:52:52.31ID:R5lWYvWFa そんなあなたにRust
473デフォルトの名無しさん (ワッチョイ 3224-jZWQ)
2024/09/26(木) 11:26:35.22ID:r0pzUHiv0474デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 11:37:49.48ID:R5lWYvWFa もちろんRustをやるにはC++を捨てる覚悟が必要
C++コード(特にテンプレやclass)とは相性最悪
C++コード(特にテンプレやclass)とは相性最悪
475デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 11:38:22.04ID:R5lWYvWFa >c++コードと混在できるようになって
Rustについて言うなら
おそらくそんな未来は永久に来ない
Rustについて言うなら
おそらくそんな未来は永久に来ない
476デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 11:39:08.38ID:R5lWYvWFa 誤解の無いように言っておくと
(一部機能に限れば今でも混在出来るけど)
基本的にはC++とは相いれない
(一部機能に限れば今でも混在出来るけど)
基本的にはC++とは相いれない
477デフォルトの名無しさん (ワッチョイ 77da-jZWQ)
2024/09/26(木) 18:22:32.63ID:sl+cfKHN0 ならc++にRustの機能が取り込まれるのを待つ。
Rustが大人気になったら、さすがに標準委員の連中も初心者・コーダー向けの"Safe c++"をやる気になるだろ。
Rustが大人気になったら、さすがに標準委員の連中も初心者・コーダー向けの"Safe c++"をやる気になるだろ。
478はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/26(木) 18:52:53.17ID:B+Au+yIB0 >>477
もう Rust を使えばよくない……?
もう Rust を使えばよくない……?
479デフォルトの名無しさん (ワッチョイ 77da-jZWQ)
2024/09/26(木) 19:43:24.82ID:sl+cfKHN0480はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/26(木) 20:25:47.69ID:B+Au+yIB0 >>165
C++ のコードを Rust から呼び出したりするくらいのことは簡単に出来るよ。
たぶん (Java に対する) Kotlin みたいなこととして思い浮かべているようなことは出来る。
Rust がやってるような安全性の保障を自動では受けられない。
当然だが安全ではない (安全性が検証されていない) C++ のコードが Rust から呼び出すことで安全になったりはしない。
大抵の場合に Rust の都合に合わせてラッパーを書くことになる。
C++ のコードを Rust から呼び出したりするくらいのことは簡単に出来るよ。
たぶん (Java に対する) Kotlin みたいなこととして思い浮かべているようなことは出来る。
Rust がやってるような安全性の保障を自動では受けられない。
当然だが安全ではない (安全性が検証されていない) C++ のコードが Rust から呼び出すことで安全になったりはしない。
大抵の場合に Rust の都合に合わせてラッパーを書くことになる。
481デフォルトの名無しさん (ワッチョイ e39c-jZWQ)
2024/09/27(金) 10:23:27.00ID:n6BA5joS0482デフォルトの名無しさん (ブーイモ MMe3-VArp)
2024/09/27(金) 10:44:00.51ID:02Aq/BhWM cxxとかあるけど個人的には中途半端だから使わない
普通に共有ライブラリにして呼び出す方が素直で汎用的で良い
普通に共有ライブラリにして呼び出す方が素直で汎用的で良い
483デフォルトの名無しさん (ワッチョイ 5e79-w5sm)
2024/09/27(金) 12:33:43.81ID:6/1p1gGO0 スマートポインターを使うように強制できる機能とかなら必要ないなあ
484デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:51:52.33ID:pgg/4VuRa >>473 のような未来は永遠に来ない
485デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:54:13.57ID:pgg/4VuRa486デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:54:31.95ID:pgg/4VuRa >>481
同意
同意
487デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:54:58.40ID:pgg/4VuRa488デフォルトの名無しさん (ワッチョイ e39c-jZWQ)
2024/09/27(金) 17:14:28.28ID:n6BA5joS0489デフォルトの名無しさん (ワッチョイ 728c-rNKn)
2024/09/27(金) 18:24:18.27ID:dg7IL8lg0 極限のパフォーマンスは別に要らないから安全にしたいという要件なら GC が既に解決しているし
今更生ポインタを禁止したところで C# や Java と同じ方向性のナニカにしかならんじゃろ
今更生ポインタを禁止したところで C# や Java と同じ方向性のナニカにしかならんじゃろ
490デフォルトの名無しさん (ワッチョイ 1e02-VArp)
2024/09/27(金) 18:46:28.46ID:EoeiRCVP0 gcがあったらメモリリークしないなんて幻想未だに信じてるとはね
491デフォルトの名無しさん (ワッチョイ a778-KU+G)
2024/09/27(金) 18:59:34.32ID:RwmUzOsi0 リークの話なの?
492デフォルトの名無しさん (ワッチョイ e39c-jZWQ)
2024/09/27(金) 19:07:06.62ID:n6BA5joS0 >>489
ライブラリとかフレームワークを使う側のコーダーと作る側のライブラリアンは性能要件が全然別。
コーダーに対してライブラリアンが「コーダーのコードに極限のパフォーマンスは別に要らないから安全に「させたい」」というのはあるだろ。
ライブラリとかフレームワークを使う側のコーダーと作る側のライブラリアンは性能要件が全然別。
コーダーに対してライブラリアンが「コーダーのコードに極限のパフォーマンスは別に要らないから安全に「させたい」」というのはあるだろ。
493デフォルトの名無しさん (ワッチョイ cb9e-LUcV)
2024/09/27(金) 23:12:04.55ID:cfj6fT7K0 >>492
それならライブラリ側でメモリ周りを隠蔽するような作り方も出来ると思うけど
ユーザー(コーダー)にはインスタンス使わせるけど内部では参照カウントなりスマポなり使ってるみたいな
それですら問題が起きるようならユーザーがクソ
それならライブラリ側でメモリ周りを隠蔽するような作り方も出来ると思うけど
ユーザー(コーダー)にはインスタンス使わせるけど内部では参照カウントなりスマポなり使ってるみたいな
それですら問題が起きるようならユーザーがクソ
494デフォルトの名無しさん (ワッチョイ e37c-C1Jv)
2024/09/28(土) 10:42:06.28ID:swed/tX60 C++はどんな安全策敷いてもユーザー側がその気になればいくらでもぶち壊せるからね
ライブラリがあんまりそこ頑張っても仕方ない
ライブラリがあんまりそこ頑張っても仕方ない
495デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/28(土) 12:39:39.83ID:gf2/NL3ha Rustなら壊れないみたいな言い草だな
496デフォルトの名無しさん (ワッチョイ 77ba-vp5J)
2024/09/28(土) 13:06:22.71ID:ZP4SxDa50 C++で書かれたChrome V8エンジンをRustから扱えるRusty V8というライブラリがリリースされたというニュースを見た
メモリ安全性を確保して呼び出しオーバーヘッドもゼロなんだって
ほんとかな?
ただのラッパーじゃないの?
C++側でメモリアクセス違反があれば落ちそうだけど
メモリ安全性を確保して呼び出しオーバーヘッドもゼロなんだって
ほんとかな?
ただのラッパーじゃないの?
C++側でメモリアクセス違反があれば落ちそうだけど
497デフォルトの名無しさん (ブーイモ MMde-7TYI)
2024/09/28(土) 14:26:57.72ID:yW35cSECM その手の話はMICROSOFTの新機能ぐらいい思っておけば
腹も立たない
腹も立たない
498はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b332-XD+R)
2024/09/30(月) 22:26:30.09ID:JxqgGnHQ0 >>496
Rust の標準ライブラリだって内部は unsafe だらけだぞ。
unsafe は Rust のメモリ安全性検査の例外とする指定で、検査はされないが安全であることはプログラマが保証しないといけない。
ただ、 unsafe な部分を慎重に押し込めて (押し込めるのが正しく出来ていれば) あとは Rust のメモリ安全性検査に頼ることが出来る。
ずっと気を付けなきゃならない C++ よりは面倒ごとを基盤に押し込めたら後は機械が検査してくれるほうがマシという程度の話。
押し込めた中に問題があればそりゃ当然駄目だよ。
Rust の標準ライブラリだって内部は unsafe だらけだぞ。
unsafe は Rust のメモリ安全性検査の例外とする指定で、検査はされないが安全であることはプログラマが保証しないといけない。
ただ、 unsafe な部分を慎重に押し込めて (押し込めるのが正しく出来ていれば) あとは Rust のメモリ安全性検査に頼ることが出来る。
ずっと気を付けなきゃならない C++ よりは面倒ごとを基盤に押し込めたら後は機械が検査してくれるほうがマシという程度の話。
押し込めた中に問題があればそりゃ当然駄目だよ。
499デフォルトの名無しさん (ワッチョイ 6f79-uMZa)
2024/10/01(火) 02:05:59.60ID:J7GPtKrz0 V8エンジンてCVE脆弱性で毎月アップデートの口実にされる迷惑なやつだからさっさとRustで書き直せよ
500デフォルトの名無しさん (オイコラミネオ MMa7-Pc8v)
2024/10/01(火) 15:19:57.32ID:KXGxeTHwM >>498
>押し込めた中に問題があればそりゃ当然駄目だよ。
当然分かっているだろうが、unsafeの中だけでなく、
それが外側に及ぼす影響にも問題が生じないように作らなければなら
ないが、それにはunsafeとRustの両方に対する深い理解が
必要となるだろうな。
>押し込めた中に問題があればそりゃ当然駄目だよ。
当然分かっているだろうが、unsafeの中だけでなく、
それが外側に及ぼす影響にも問題が生じないように作らなければなら
ないが、それにはunsafeとRustの両方に対する深い理解が
必要となるだろうな。
501デフォルトの名無しさん (オイコラミネオ MMa7-Pc8v)
2024/10/01(火) 18:36:21.46ID:al1nAqGBM >>500
unsafeの中を通過する時には問題ないが、
戻り値などや、連携する他のメソッドなどが
関係した結果、どこかで分かりにくいメモリーエラー
になるようなことも避ける必要が有るが、
それにはかなりRustの内部構造(?)に対する深い知識
と理解が必要となりそうだ。
unsafeの中を通過する時には問題ないが、
戻り値などや、連携する他のメソッドなどが
関係した結果、どこかで分かりにくいメモリーエラー
になるようなことも避ける必要が有るが、
それにはかなりRustの内部構造(?)に対する深い知識
と理解が必要となりそうだ。
502デフォルトの名無しさん (ワッチョイ 1fb1-/QnX)
2024/10/17(木) 11:01:19.65ID:P7X9/HPx0 >>422
これ、static_assertだけ修正してもしょうがない気がするんだけどなぁ
他にも実体化しないはずの分岐でチェックされてエラーにされることあるし
まぁ条件式に無理矢理テンプレート入れて回避は出来るけど
これ、static_assertだけ修正してもしょうがない気がするんだけどなぁ
他にも実体化しないはずの分岐でチェックされてエラーにされることあるし
まぁ条件式に無理矢理テンプレート入れて回避は出来るけど
503デフォルトの名無しさん (ワッチョイ 2b63-4umj)
2024/10/19(土) 17:30:35.94ID:vb3IsOJN0504デフォルトの名無しさん (ワッチョイ 2b63-4umj)
2024/10/19(土) 17:31:10.99ID:vb3IsOJN0 >>490な発言になったんじゃないの
知らんけど
知らんけど
505デフォルトの名無しさん (ワッチョイ 8593-t4Y2)
2024/10/21(月) 07:19:50.64ID:ThoL8xQh0506デフォルトの名無しさん (ワッチョイ 1907-zDHq)
2024/10/21(月) 14:54:46.51ID:WHCxApN50 C++派だが、Rustをもってしても、相互参照みたいなものは、人類には早いらしい
(設計段階で)無理しないこったな。。
(設計段階で)無理しないこったな。。
507デフォルトの名無しさん (ワッチョイ c60f-zhf3)
2024/10/21(月) 15:57:11.21ID:Hhc6wfX80 そもそも静的解析で解決できる問題か?
508はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0d32-zDHq)
2024/10/21(月) 16:03:29.88ID:6JU3cZPt0 循環参照をしたいときに出来ないのも困るしな。
なるべくやらないに越したことはないが、やるなら後始末は人が考えないと仕方ないわ。
なるべくやらないに越したことはないが、やるなら後始末は人が考えないと仕方ないわ。
509デフォルトの名無しさん (ワッチョイ e963-f5bJ)
2024/10/21(月) 22:48:14.20ID:XvJERuqr0 食事する哲学者の問題……
Rustだと循環参照するコードを書きにくくなっているから
循環参照によるリークとか病的な反例のうちなんじゃないの
知らんけど
ノードNode同士が論理的には循環参照し得るんだけど
その所有権をスーパーバイザ的な配列superArray: Node[]が持っていて、
Rustだと循環参照するコードを書きにくくなっているから
循環参照によるリークとか病的な反例のうちなんじゃないの
知らんけど
ノードNode同士が論理的には循環参照し得るんだけど
その所有権をスーパーバイザ的な配列superArray: Node[]が持っていて、
510デフォルトの名無しさん (ワッチョイ e963-f5bJ)
2024/10/21(月) 22:53:33.76ID:XvJERuqr0 Node間の参照はsuperArrayのindexで済ませるというのもRustではすんなり通してくれな
いんだっけどうだっけ……
Node& node1 = superArray[0];
Node& node2 = superArray[1];
node1.next = 1;
superArray[node1.next].value = 123; // node2.valueに書く
node1.nextがsuperArray[]の添え字範囲内であることを機械的に保証するためにRustはどんな魔法を使ってくれる
のか
いんだっけどうだっけ……
Node& node1 = superArray[0];
Node& node2 = superArray[1];
node1.next = 1;
superArray[node1.next].value = 123; // node2.valueに書く
node1.nextがsuperArray[]の添え字範囲内であることを機械的に保証するためにRustはどんな魔法を使ってくれる
のか
511はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0d32-zDHq)
2024/10/22(火) 11:28:00.82ID:UXnTPhGj0 >>510
Rust では実行時にチェックされて範囲から外れていたら panic (C/C++ で言うところの abort みたいなもの) する。
https://doc.rust-lang.org/std/ops/trait.Index.html#tymethod.index
C/C++ のように配列がポインタになるということはなく、スライス (C++ で言うところの span みたいなもの) が基本型として組み込まれているので範囲チェック出来る。
コンパイル時に範囲内であることがわかる状況なら最適化で消えることもあるみたいだけど
実行時に外部から入ってくる値に依存することもあるので実行時にチェックしないとどうしようもない。
Rust では実行時にチェックされて範囲から外れていたら panic (C/C++ で言うところの abort みたいなもの) する。
https://doc.rust-lang.org/std/ops/trait.Index.html#tymethod.index
C/C++ のように配列がポインタになるということはなく、スライス (C++ で言うところの span みたいなもの) が基本型として組み込まれているので範囲チェック出来る。
コンパイル時に範囲内であることがわかる状況なら最適化で消えることもあるみたいだけど
実行時に外部から入ってくる値に依存することもあるので実行時にチェックしないとどうしようもない。
512デフォルトの名無しさん (ワッチョイ 8901-1CwD)
2024/10/28(月) 13:44:32.71ID:A9ortPvu0 enum、
文字列への変換、
大変すぎて、ビックリした
文字列への変換、
大変すぎて、ビックリした
513デフォルトの名無しさん (ワッチョイ 1901-2Yr6)
2024/10/28(月) 14:06:10.17ID:/lht/Ba/0 俺はenumの機能を拡張するクラスを自分で定義してるな
それで文字列変換も文字列からの変換も出来る
それで文字列変換も文字列からの変換も出来る
514デフォルトの名無しさん (ワッチョイ 4907-+Yhf)
2024/10/28(月) 15:41:01.09ID:xcgYWtNU0 autogenerated.txt.c みたいなの使うのも手だぞ 急がば回れ
そしてCよりはうまく書ける
そしてCよりはうまく書ける
515デフォルトの名無しさん (ワッチョイ 8901-1CwD)
2024/10/29(火) 08:22:28.04ID:XRXAB2XQ0516デフォルトの名無しさん (ワッチョイ 4907-+Yhf)
2024/10/29(火) 13:58:12.41ID:WYOK+g300 好きなように書いて、好きなように変換して、途中でincludeする
簡単に書くもよし、ガッチガチにチェックするもよし
簡単に書くもよし、ガッチガチにチェックするもよし
517デフォルトの名無しさん (ワッチョイ fb79-fQm0)
2024/10/30(水) 23:11:10.17ID:x0G86HEF0 HAGE(CAUWA1)
HAGE(CAUWA2)
HAGE(CAUWA3)
:
みたいなテキスト作っといて
手コキストを#includeする手前でHAGEの意味を変えてやるとうまいこと一元化できる
HAGE(CAUWA2)
HAGE(CAUWA3)
:
みたいなテキスト作っといて
手コキストを#includeする手前でHAGEの意味を変えてやるとうまいこと一元化できる
519デフォルトの名無しさん (ワッチョイ 7b4d-XqAs)
2024/10/31(木) 01:08:33.55ID:gisW4Gdb0 magic_enum教えてやれや
じじいは感度低いから知らんか
じじいは感度低いから知らんか
520デフォルトの名無しさん (ワッチョイ 4907-+Yhf)
2024/10/31(木) 05:43:35.79ID:J4xtBqBy0 みてきた それが人気の実装か
やりたいこと次第だが、オーバスペック感はある
ちょうどほしかったんなら止めないけどね
やりたいこと次第だが、オーバスペック感はある
ちょうどほしかったんなら止めないけどね
521デフォルトの名無しさん (ワッチョイ 1901-2Yr6)
2024/10/31(木) 10:56:16.92ID:++2hP8JV0 横からなるほどー!
__PRETTY_FUNCTION__ / __FUNCSIG__
__PRETTY_FUNCTION__ / __FUNCSIG__
522デフォルトの名無しさん (ワッチョイ 8901-1CwD)
2024/10/31(木) 15:32:14.58ID:IcW65SaY0 あのー、アメリカグーグルで、検索すれば、良いのがでてきた
日本は、でてこない
これは、やっぱり、レベルなんだろうね
日本は、でてこない
これは、やっぱり、レベルなんだろうね
523デフォルトの名無しさん (アウアウエー Sae3-07nO)
2024/11/01(金) 19:53:27.66ID:TgBKHsuNa >>518
あさひ奈央
あさひ奈央
524デフォルトの名無しさん (ワッチョイ 1395-VVnD)
2024/11/02(土) 09:17:27.71ID:KpOoS8wa0 >>522
アメリカグーグルって言い方からして頭悪そう
アメリカグーグルって言い方からして頭悪そう
525デフォルトの名無しさん (ワッチョイ 5910-fVPo)
2024/11/05(火) 08:04:39.53ID://VVBUiD0 magic_enumは個数制限がきついんだよな・・256くらいが限度じゃなかったっけ
526青木康善 (アウアウウー Sacd-P7MY)
2024/11/06(水) 17:05:23.05ID:vfgxFq1Ya c plus plusとjava、電子音楽作成にどっちが向いてるかな?早いのは無論c plus plusだろうけど。
527デフォルトの名無しさん (ワッチョイ 6107-Q1tn)
2024/11/06(水) 17:09:08.31ID:jrSvpMvx0 作成というが、記述したいのか、波形合成したいのか、はたまた生成(AI等)したいのか。。
528デフォルトの名無しさん (ワッチョイ f618-UxC2)
2024/11/06(水) 17:14:36.09ID:P7rcAaD30 なんでjava?
529デフォルトの名無しさん (ワッチョイ a901-jwtj)
2024/11/06(水) 20:06:37.45ID:TrFjb6KE0530青木康善 (アウアウウー Sacd-P7MY)
2024/11/06(水) 20:56:51.96ID:XG1hV+N8a C soundというのはかつてありましたが。javaでやろうかな。C++は自分にはハードル高すぎます。
531はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-Q1tn)
2024/11/06(水) 21:37:08.81ID:O6Mhx+Gj0 相談スレなんだから相談しなさいよ。
独り言を書きたいなら X で。
独り言を書きたいなら X で。
532デフォルトの名無しさん (オッペケ Sr79-Q1tn)
2024/11/06(水) 22:48:47.88ID:tlKINjNQr 5ちゃん初めてなんでしょ。浮いてるのはほっとこう、じきに慣れてくれる
コンパイラがCらしいね。でもjavaからも操作できる実績があるって
こういうときは、「やってみて脳汁が出そうなほう」でいいとおもう
結局モチベなんで
コンパイラがCらしいね。でもjavaからも操作できる実績があるって
こういうときは、「やってみて脳汁が出そうなほう」でいいとおもう
結局モチベなんで
533はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-JeGG)
2024/11/07(木) 03:05:44.48ID:LEgJ6Wm00 Csound は公式に Python や Java 用のラッパーは用意してるみたいだから得意なのでやればよさそう。
ところで固有名詞は正確に表記してくれないと探しにくいやで。
ところで固有名詞は正確に表記してくれないと探しにくいやで。
534デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 17:26:41.87ID:k0cYSKPq0 g++とclang++が混ざった環境なのですが、g++でコンパイルしたバイナリはstd::stringとか
名前に__cx11というプレフィックスが付き、一方clang++の方は__1というものが付くようです
とりあえず、clang++の方で__cx11が付くようなバイナリを生成するにはどうしたら
いいでしょうか?
名前に__cx11というプレフィックスが付き、一方clang++の方は__1というものが付くようです
とりあえず、clang++の方で__cx11が付くようなバイナリを生成するにはどうしたら
いいでしょうか?
535デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 17:28:48.87ID:k0cYSKPq0 すみません、__cx11じゃなくて__cxx11でした
536はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-JeGG)
2024/11/08(金) 17:41:34.61ID:Me1tPYCI0 名前だけ合わせても具体的な実装方法が違えばどうせクラッシュするから意図的にマングルルールを違えている。
https://gcc.gnu.org/onlinedocs/gcc/Interoperation.html#Interoperation
https://gcc.gnu.org/onlinedocs/gcc/Interoperation.html#Interoperation
537デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 17:52:36.03ID:k0cYSKPq0 >>536
なるほど、要は「C++コンパイラ、混ぜるな危険」ということでしょうか?
なるほど、要は「C++コンパイラ、混ぜるな危険」ということでしょうか?
538デフォルトの名無しさん (ワッチョイ a901-7tmY)
2024/11/08(金) 18:12:15.75ID:6Qfff3nN0 例外とか互換性があるんかいな?
539デフォルトの名無しさん (ワッチョイ a901-7tmY)
2024/11/08(金) 18:14:37.25ID:6Qfff3nN0 C++コンパイラでコンパイルするにしても
ソースコードをCの範囲に留めて
関数プロトタイプを
extern "C"
すれば大丈夫だよ
ソースコードをCの範囲に留めて
関数プロトタイプを
extern "C"
すれば大丈夫だよ
540デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 18:18:53.42ID:k0cYSKPq0 >>539
なるほど、例えばこんな感じなら大丈夫なんですかね?
g++でコンパイルされたバイナリのグループAとclang++でコンパイルされたバイナリの
グループBがあったとき、AからB(またはその逆)を呼ぶときは必ずCリンケージの関数
経由にする、とか....
なるほど、例えばこんな感じなら大丈夫なんですかね?
g++でコンパイルされたバイナリのグループAとclang++でコンパイルされたバイナリの
グループBがあったとき、AからB(またはその逆)を呼ぶときは必ずCリンケージの関数
経由にする、とか....
541はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 71e8-JeGG)
2024/11/08(金) 18:25:46.25ID:Evz7xgHe0542デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 18:35:59.90ID:k0cYSKPq0543デフォルトの名無しさん (ワッチョイ b163-+nMC)
2024/11/09(土) 19:08:22.86ID:djyKk80a0 昔std::vector<T>とかstd::stringを前のコンパイラでビルドしたDLLに渡したら以下略
やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌
文字列とか渡したかったらあくまでchar[]にすべき……
やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌
文字列とか渡したかったらあくまでchar[]にすべき……
544デフォルトの名無しさん (ブーイモ MM43-QLv+)
2024/11/10(日) 16:10:22.46ID:ck6aMoNGM >>536
この場合は別々に標準ライブラリがリンクされる、つまり2つ動くのかな?
この場合は別々に標準ライブラリがリンクされる、つまり2つ動くのかな?
545デフォルトの名無しさん (ワッチョイ 1b79-b0Xs)
2024/11/10(日) 17:48:03.99ID:cLh8//6O0 単にリンクするだけではどっちかのライブラリのスタートアップしか呼ばれないから
呼ばれてない方のライブラリの初期化がされなくてまともに動作しない問題が残ると思う
呼ばれてない方のライブラリの初期化がされなくてまともに動作しない問題が残ると思う
546はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 95cf-bar5)
2024/11/10(日) 18:18:05.60ID:R/A45v0+0 仮にどうにか辻褄合わせが出来てちゃんと動いたとしても将来の開発環境・実行環境でどうなるか予想しづらいというのもある。
547デフォルトの名無しさん (ワッチョイ 9bad-6tcr)
2024/11/10(日) 18:55:50.75ID:g8WH2rn90 こういう感じの実装を見かけたんだけど、ptrって解放済みの領域を指してないよね?
int *ptr = NULL;
std::map<char, int> m;
m.insert(std::make_pair('a', 30));
{
std::map<char, int>::iterator itr = m.find('a');
if (itr != m.end()) ptr = &(itr->second);
// ここでitrは解放される
}
if (ptr) printf("*ptr = %d\n", *ptr); // 大丈夫?
int *ptr = NULL;
std::map<char, int> m;
m.insert(std::make_pair('a', 30));
{
std::map<char, int>::iterator itr = m.find('a');
if (itr != m.end()) ptr = &(itr->second);
// ここでitrは解放される
}
if (ptr) printf("*ptr = %d\n", *ptr); // 大丈夫?
548はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-bar5)
2024/11/10(日) 19:59:53.20ID:a6nPaG4v0549デフォルトの名無しさん (ワッチョイ 9bad-6tcr)
2024/11/10(日) 20:31:11.60ID:g8WH2rn90 >>548
あざっす!なるほど、よかった〜
あざっす!なるほど、よかった〜
550デフォルトの名無しさん (ワッチョイ 1563-EHNx)
2024/11/11(月) 00:36:44.76ID:6qsu0cnY0551デフォルトの名無しさん (ワッチョイ 1563-EHNx)
2024/11/11(月) 00:38:49.39ID:6qsu0cnY0 ただしウィンドーズのDLLの呼び出し場合は>>539に従っていれば問題無いはず……
ランタイムの初期化エントリはDLL毎に_DllMainCRTStartup が用意されてDLL初期化時に呼ばれる
ランタイムの初期化エントリはDLL毎に_DllMainCRTStartup が用意されてDLL初期化時に呼ばれる
552デフォルトの名無しさん (ワッチョイ 759b-NX7e)
2024/11/11(月) 16:46:00.51ID:XlNa4SSE0553青木康善 (アウアウウー Saa9-gsEs)
2024/11/12(火) 22:22:32.82ID:svwbS+Oga 独習C++を図書館で借りました。よく、こんな、難しく、エグい言語が出来ますねみなさん。
554デフォルトの名無しさん (ワッチョイ 1d1f-hYHe)
2024/11/12(火) 22:26:44.98ID:r67kfyB40 他に選択肢がなかったんや😭
あと最近はobjective-cとかいう悪魔合体に比べたらなんでもマシな言語に思えてきてる
あと最近はobjective-cとかいう悪魔合体に比べたらなんでもマシな言語に思えてきてる
555デフォルトの名無しさん (ワッチョイ 0b9a-V0hi)
2024/11/13(水) 01:53:29.63ID:CoujH3FQ0 Objective-C++もよろしく
556はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-4Bi2)
2024/11/13(水) 02:14:12.02ID:Gj2zjD3b0557デフォルトの名無しさん (ワッチョイ 75c3-oheB)
2024/11/13(水) 03:47:19.43ID:rKuXlBFV0 そーだそーだ
C++は難しいからObject Pascalやろうぜ!
C++は難しいからObject Pascalやろうぜ!
558デフォルトの名無しさん (ワッチョイ 25db-QT1F)
2024/11/14(木) 07:49:57.71ID:z8CYzrjO0 C++女学院の人々ってまだ読める所ある?
大好きだったんだけど。
大好きだったんだけど。
559デフォルトの名無しさん (ワッチョイ a501-3n/g)
2024/11/14(木) 12:23:07.88ID:DkukOutW0 >>554
C++と悪魔合体してObjective-C++とかなってるけど自分は実用的に感じた
全部それで書こうとは思わんけど、C++との共存のレベルが高くて鼻血出そうになったわ
OSやその他Apple系APIとのやり取りはObjC++、それ以外のソースはC++のみ、とかも簡単だし
C++と悪魔合体してObjective-C++とかなってるけど自分は実用的に感じた
全部それで書こうとは思わんけど、C++との共存のレベルが高くて鼻血出そうになったわ
OSやその他Apple系APIとのやり取りはObjC++、それ以外のソースはC++のみ、とかも簡単だし
560デフォルトの名無しさん (アウアウエー Sa13-vkNS)
2024/11/14(木) 14:52:24.21ID:a5xmyjQfa561デフォルトの名無しさん (JP 0H1e-hB9O)
2024/11/19(火) 11:41:41.34ID:1x1cv+pZH 演算子のオーバーロードない言語はダメだ
562デフォルトの名無しさん (ブーイモ MM02-7yGp)
2024/11/19(火) 11:53:31.53ID:5+FMYvHmM 演算子オーバーロードがもたらす言語仕様の複雑性を理解してたら軽々しくそういうことは言えない
563デフォルトの名無しさん (ワッチョイ 5f01-P+OA)
2024/11/19(火) 12:47:14.19ID:3l+Mgxo20 演算子なんてなしでも書けるわけで単なる見た目だよ
些末な話
些末な話
564デフォルトの名無しさん (ブーイモ MM02-7yGp)
2024/11/19(火) 13:12:37.41ID:5+FMYvHmM 見た目はとても重要だが
見ただけでは何が実行されるかわからない
見ただけでは何が実行されるかわからない
565デフォルトの名無しさん (ワッチョイ 67ab-Nkdq)
2024/11/19(火) 15:35:04.94ID:k4Dguh0Y0 JavaのBigDecimalなんか見てると演算子オーバーロードのあるC++羨ましいよ
c = a.multiply(b); とか長くなり過ぎて何をやってる式なのか分からなくなる
c = a.multiply(b); とか長くなり過ぎて何をやってる式なのか分からなくなる
566デフォルトの名無しさん (ワッチョイ 67ab-Nkdq)
2024/11/19(火) 15:37:29.08ID:k4Dguh0Y0 いや固定小数型を言語仕様に盛り込まずにライブラリとして実装したJavaが悪いのか・・・
固定小数の取り扱い以外で演算子オーバーロードが欲しいと思ったことはない
固定小数の取り扱い以外で演算子オーバーロードが欲しいと思ったことはない
567デフォルトの名無しさん (JP 0H1e-hB9O)
2024/11/19(火) 15:45:09.52ID:1x1cv+pZH 複素数計算やったことないからそんなこと言える
568デフォルトの名無しさん (ブーイモ MM02-iirp)
2024/11/19(火) 17:03:01.93ID:cTSQFdSPM JAVAはコボラーが転んで使う言語だし
569デフォルトの名無しさん (JP 0H1e-hB9O)
2024/11/19(火) 17:38:58.74ID:1x1cv+pZH 自動微分のボトムアップ微分はC++の演算子オーバーロード機能のおかげで簡単に実現できる
570デフォルトの名無しさん (ワッチョイ 4218-KrXD)
2024/11/19(火) 18:42:30.52ID:ZMREqX8y0 javaって演算子オーバーロードないのか・・・
571デフォルトの名無しさん (アウアウエー Sa3a-iI0F)
2024/11/20(水) 17:06:14.09ID:vf/fflloa >>567
†とか造った?
†とか造った?
572デフォルトの名無しさん (ワッチョイ fb7c-rtho)
2024/11/20(水) 21:14:42.80ID:GASOinjS0 Javaが持て囃されてた頃は「演算子オーバーロード?+で引き算もできるってこと?なんて危険な機能なんだ!」って叩かれてて
そんな危険なものはJavaにはありません!って売り文句にされてたんだよ
アホみたいだけど本当の話
そんな危険なものはJavaにはありません!って売り文句にされてたんだよ
アホみたいだけど本当の話
573デフォルトの名無しさん (ワッチョイ 4e8d-7yGp)
2024/11/20(水) 21:21:46.59ID:JO5RbARc0 アホといい切れる根拠は言える?
574デフォルトの名無しさん (ワッチョイ 4243-gDrC)
2024/11/20(水) 22:54:39.86ID:g9sD9hG/0 アホみたいなカスの嘘です
575デフォルトの名無しさん (ワッチョイ 0e79-Yo0P)
2024/11/20(水) 23:28:22.48ID:KXgtJp1v0 演算子オーバーロードは定義のリスクや手間の割には結局自己満に完結する事が多くて、
しかも結局C++という小さな世界でしか通用しないから、他に楽しい事が沢山ある今の人は時間の無駄と考えるんじゃないかな
しかも結局C++という小さな世界でしか通用しないから、他に楽しい事が沢山ある今の人は時間の無駄と考えるんじゃないかな
576デフォルトの名無しさん (ワッチョイ ff07-pOJn)
2024/11/20(水) 23:48:15.85ID:F7TNJyq/0 無理に使うもんではないな たまにすごく便利
577デフォルトの名無しさん (ワッチョイ 7b71-nj0J)
2024/11/21(木) 00:20:44.87ID:PQXYbgG+0 std::chronoの時間型なんかは良い例だよね
・clock - clock = duration (例. 13時 - 12時 = 1時間)
・clock + duration = clock (12時+1時間=13時)
・duration + duration = duration (1時間 + 1時間 = 2時間)
・clock + clock: 不可
こういう型表現もできるのは良い点
・clock - clock = duration (例. 13時 - 12時 = 1時間)
・clock + duration = clock (12時+1時間=13時)
・duration + duration = duration (1時間 + 1時間 = 2時間)
・clock + clock: 不可
こういう型表現もできるのは良い点
578デフォルトの名無しさん (ワッチョイ 4e8d-7yGp)
2024/11/21(木) 01:22:06.15ID:KgLYxoZg0 初見で単に整数で取り出すのに一苦労だけどな
型安全厨くささ感じる
型安全厨くささ感じる
579デフォルトの名無しさん (ワッチョイ 06cf-xZnB)
2024/11/21(木) 08:22:14.09ID:5MMZVDCg0 演算の組み合わせが多いユースケースで可読性を上げるためのものだろう。
少ないなら関数のままでも十分。そういう意味で std::chrono は微妙。
少ないなら関数のままでも十分。そういう意味で std::chrono は微妙。
580デフォルトの名無しさん (JP 0H1e-hB9O)
2024/11/21(木) 10:15:07.08ID:F4Mnbej3H581デフォルトの名無しさん (JP 0H1e-hB9O)
2024/11/21(木) 10:20:45.90ID:F4Mnbej3H >>571
随伴行列(共役転置行列)か? それは演算子オーバーロードじゃなくて普通の関数でいいだろ
随伴行列(共役転置行列)か? それは演算子オーバーロードじゃなくて普通の関数でいいだろ
582デフォルトの名無しさん (ワッチョイ 8ee1-jy16)
2024/11/21(木) 19:11:25.04ID:U8jioV5J0 いわゆる演算子オーバーロードのメリットは、中置記法が使えるということと、一部の人間が使い慣れている演算子の算数・数学的記法のメタファーが使えることくらいかね。
その代償として文章構造の曖昧さや(その対処のための)優先順位といった規則の複雑化が必要になるので、言語設計観点からはメリット小さいよなぁ。
可能ならば中置記法を捨てて全部後置記法に統一したいところ。
その代償として文章構造の曖昧さや(その対処のための)優先順位といった規則の複雑化が必要になるので、言語設計観点からはメリット小さいよなぁ。
可能ならば中置記法を捨てて全部後置記法に統一したいところ。
583デフォルトの名無しさん (ワッチョイ 5f01-P+OA)
2024/11/21(木) 20:19:29.77ID:i1qXvmQ+0 嫌だよ! PostScriptじゃあるまいしw
584デフォルトの名無しさん (ワッチョイ ef63-ihPV)
2024/11/21(木) 22:03:09.07ID:vge40qUE0 チョムスキーの言語生得説って数学記号(の文法)も説明し切ってたっけ;;;
個人的には数学記号をプログラミング言語の文法に含めるのは悪手に思える
全部言葉にすべき
個人的には数学記号をプログラミング言語の文法に含めるのは悪手に思える
全部言葉にすべき
585デフォルトの名無しさん (ワッチョイ fb7c-rtho)
2024/11/21(木) 22:32:36.81ID:UrWSESvu0 そうだな
(8.0 * std::numbers::pi * G) / (c * c * c * c * mu0)よりも
divide(multiply(multiply(8.0, std::number::pi), G), multiply(c, multiply(c, multiply(c, multiply(c, mu0)))))の方がずっと分かりやすいもんな
(8.0 * std::numbers::pi * G) / (c * c * c * c * mu0)よりも
divide(multiply(multiply(8.0, std::number::pi), G), multiply(c, multiply(c, multiply(c, multiply(c, mu0)))))の方がずっと分かりやすいもんな
586デフォルトの名無しさん (ワッチョイ 0e79-Yo0P)
2024/11/21(木) 23:37:39.60ID:w61o9EHy0587デフォルトの名無しさん (ワッチョイ 5f01-P+OA)
2024/11/21(木) 23:41:45.40ID:i1qXvmQ+0 8.0 pi mul G mul c c mul c mul c mul mu0 mul div
588デフォルトの名無しさん (ワッチョイ fb9c-jy16)
2024/11/22(金) 12:04:14.61ID:OZOUVDIp0589デフォルトの名無しさん (ブーイモ MM02-fwvC)
2024/11/22(金) 16:24:36.41ID:prOH0XeSM590デフォルトの名無しさん (ワッチョイ 36e6-slOl)
2024/11/22(金) 17:47:03.18ID:ckHOQP240 ポーランドにでも移住しろ
591デフォルトの名無しさん (ワッチョイ 0e79-Yo0P)
2024/11/22(金) 20:09:04.65ID:YUhadtJk0 政治的発言でチョムスキーは晩節を汚したな
592デフォルトの名無しさん (ワッチョイ ef63-ihPV)
2024/11/22(金) 23:05:27.32ID:qWC0+5lZ0 絶対数に平方の係数の四倍を掛け、中間項の係数の平方を加え、同平方根をとって中間項の係数を引いてから、平方[の係数]の二倍で割ったものを出力せよ
593aser-fgki (JP 0H1e-hB9O)
2024/11/22(金) 23:22:42.09ID:TibAXEMeH594デフォルトの名無しさん (JP 0H1e-hB9O)
2024/11/22(金) 23:31:47.69ID:TibAXEMeH 怖ヒから、退散します。
595デフォルトの名無しさん (ワッチョイ 0e79-Yo0P)
2024/11/22(金) 23:46:57.45ID:YUhadtJk0 どんな記法でもメソッドチェーンできれば勝つる
596デフォルトの名無しさん (ワッチョイ ff9a-V0/I)
2024/11/24(日) 06:44:31.77ID:CW4G8jt70 昔Turbo C++とか使ってたなあ
597デフォルトの名無しさん (ワッチョイ f79c-0AJs)
2024/11/25(月) 11:18:23.17ID:mvnjDr0E0 >>593
それも算数を習っていて、記号の意味や結合の優先順位、()グループ化のトレーニングを受けている前提だろ。
中置記法ではなく前置記法のトレーニングを受けている想定なら
/(*(8.0, std::number::pi, G), *(c,c,c,c,mu0))
だし、日本語ベースの後置記法なら中置記法のような特別なトレーニング無しで>588ぐらいは使えるかと。
それも算数を習っていて、記号の意味や結合の優先順位、()グループ化のトレーニングを受けている前提だろ。
中置記法ではなく前置記法のトレーニングを受けている想定なら
/(*(8.0, std::number::pi, G), *(c,c,c,c,mu0))
だし、日本語ベースの後置記法なら中置記法のような特別なトレーニング無しで>588ぐらいは使えるかと。
598青木康善 (アウアウウー Sa5b-8bf6)
2024/11/27(水) 11:39:09.65ID:cLo+/Enba やっぱり、C++は、難しいんで、慣れてるjavaで音楽ソフトウェア作ります。皆さんの健闘を祈ります。best regard
599デフォルトの名無しさん (JP 0H4f-6m00)
2024/11/28(木) 01:12:28.19ID:aCNd/9ZkH ちん逃げやがったな。俺も人のこと言えんけど。
600デフォルトの名無しさん (ワッチョイ bfcc-6m00)
2024/11/29(金) 12:44:20.48ID:IhkudQsu0 Javaの構文的美しさは素晴らしかったけど
他言語に引っ張られて汚れてしまった
それならC++のほうが良い
何でもできるから
他言語に引っ張られて汚れてしまった
それならC++のほうが良い
何でもできるから
601デフォルトの名無しさん (ワッチョイ bfcc-6m00)
2024/11/29(金) 13:41:39.20ID:IhkudQsu0 やりたいことが出来る言語と
やりたいことが出来ない言語
やりたいことが出来ない言語
602デフォルトの名無しさん (ワッチョイ bf6c-6oxW)
2024/11/29(金) 16:19:14.67ID:xzsI3pih0 なんでもできるは他を知らないだけだろ
603デフォルトの名無しさん (ワッチョイ 5707-hCSs)
2024/11/29(金) 17:33:38.53ID:BYCpquOz0 一応、自分の技量と気力で、希望するわがままが通るかは、調べてみるけどね
EchoAPIは私のVS Codeのセットアップに素晴らしい追加となり、APIテストがとても簡単になった
605デフォルトの名無しさん (ワッチョイ 7f7e-zwOW)
2024/11/29(金) 22:11:11.77ID:C48YuSW20 やりたいこと以外何でもできる言語
606デフォルトの名無しさん (ワッチョイ 5707-hCSs)
2024/11/29(金) 23:01:12.73ID:BYCpquOz0 やりたいことはできない。(サボりの)どうでもいいことはできる。ってほっとけww
607デフォルトの名無しさん (アウアウエー Sadf-wjfe)
2024/11/30(土) 09:53:14.46ID:l0dFcapba x C++が難しい
o 頭が悪い
o 頭が悪い
608デフォルトの名無しさん (ワッチョイ bfd9-6oxW)
2024/11/30(土) 12:21:10.79ID:tlb45efI0 c++が簡単ってまあ勘違いだろ
脱初級で全部わかった気になるやつ
個人的に尊敬してる人でも難しいと言ってる
脱初級で全部わかった気になるやつ
個人的に尊敬してる人でも難しいと言ってる
609青木康善 (アウアウウー Sa5b-8bf6)
2024/11/30(土) 13:56:11.47ID:exhSsXMya javaで、簡単なドラムマシン作りました。C++では、到底オツムが良く無い僕には無理です。皆さんの健闘を祈ります。
610デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/01(日) 18:28:00.78ID:IuCKzQHfH xxx.h で namespace A { size_t intval, count, itr; } を宣言。もちろん、インクルードガードしてる。
ところが、作ったライブラリをテンプレート対応に修正したら、「intval, count, itr」が2重定義されてます。」
という旨のLINK1169のエラー(Visual Stuio 2022)が突然出てきた。前のライブラリではこんなエラー出てなかった
のに...ナンデダロー、ナンデダロー♪と悩んでいたが、
namespace A { extern size_t intval, count, itr; }
を宣言したら解決した。extern_や外部リンケージのことがが良くわからない。調べたら通りいっぺんのことは
わかるけど。LINK1169のエラーが出たら、extern宣言してみてLINK1169を殺す、という対症療法だけ学習しました。
ところが、作ったライブラリをテンプレート対応に修正したら、「intval, count, itr」が2重定義されてます。」
という旨のLINK1169のエラー(Visual Stuio 2022)が突然出てきた。前のライブラリではこんなエラー出てなかった
のに...ナンデダロー、ナンデダロー♪と悩んでいたが、
namespace A { extern size_t intval, count, itr; }
を宣言したら解決した。extern_や外部リンケージのことがが良くわからない。調べたら通りいっぺんのことは
わかるけど。LINK1169のエラーが出たら、extern宣言してみてLINK1169を殺す、という対症療法だけ学習しました。
611デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/01(日) 18:28:57.10ID:IuCKzQHfH くそ!また改行がめちゃくちゃ
612デフォルトの名無しさん (ワッチョイ 0e62-jXfH)
2024/12/01(日) 18:31:33.21ID:NWNsoufr0 MAPファイルの読み方を研究した方が良いかもな
613デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/01(日) 18:32:40.91ID:IuCKzQHfH それに誤字だらけだし。オワタ。高齢者の認知症検査試験大丈夫かな。5年後だけど。
614はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-mEgI)
2024/12/01(日) 19:20:01.62ID:rI1+OlKH0 >>610
定義はプログラム全体でひとつとする原則 (one definition rule) は診断不要な場合がある仕様になっていて処理系が問題を検出できなくてもかまわないことを意味する。
つまりエラーが出てなくても間違っている (未定義の挙動) かもしれないので理解せずにエラーメッセージに頼るのは悪い姿勢。
定義はプログラム全体でひとつとする原則 (one definition rule) は診断不要な場合がある仕様になっていて処理系が問題を検出できなくてもかまわないことを意味する。
つまりエラーが出てなくても間違っている (未定義の挙動) かもしれないので理解せずにエラーメッセージに頼るのは悪い姿勢。
615デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/01(日) 19:34:57.34ID:IuCKzQHfH テンプレートにすると(implテクニックを使わなければ)、定義も実装も同じファイルに書かなければならないからそれが原因かなあ。とりあえず、厄介なLINKエラーは除霊されました。
616はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-mEgI)
2024/12/01(日) 20:25:56.70ID:rI1+OlKH0 >>615
テンプレート内でグローバル変数にアクセスする箇所があるってこと?
それなら今はインライン変数を使うのが便利で行儀の良い作法のひとつだと考えられている。
インライン変数は C++17 からの機能なのでそれより古い規格しか使えないような事情があるなら仕方ないんだけど……
テンプレート内でグローバル変数にアクセスする箇所があるってこと?
それなら今はインライン変数を使うのが便利で行儀の良い作法のひとつだと考えられている。
インライン変数は C++17 からの機能なのでそれより古い規格しか使えないような事情があるなら仕方ないんだけど……
617デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/01(日) 20:32:06.26ID:IuCKzQHfH618デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/01(日) 21:38:54.98ID:IuCKzQHfH619デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/02(月) 22:09:00.59ID:/dQ47H+wH [][]演算子のオーバーロードが欲しい。行列を1次元配列で実装する場合、C++は行主順(行列を行ベクトルの集まりとみなす)。Blas、lapackのライブラリをビルドしたfortran77は列主順(行列を列ベクトルの集まりとみなす)。()演算子のオーバーロードでは、行主順だろうが列主順だろうが、行列Aのi行j列の要素にはA(i,j)とアクセスできるが、列主順の場合には[]演算子のオーバーロードをどうやってもA[j][i]となってしまう。それでeigenは()演算子のみをサポートしている(本当か?)。だが、A(i,j)が添字0から始まるのが気に入らん。添字が0から始まるのはA[i][j]やろうもん。
[][]のオーバーロードがあったらなあ。
[][]のオーバーロードがあったらなあ。
620デフォルトの名無しさん (ワッチョイ 00f0-X9QH)
2024/12/02(月) 22:22:03.04ID:7rlMEi700 propertyなら簡単に多次元配列扱えそうなのに
propertyいつになったら実装されるのやら
propertyいつになったら実装されるのやら
621デフォルトの名無しさん (ワッチョイ b701-5W+W)
2024/12/02(月) 22:30:10.13ID:6C6t/Sm50 >>619
O [][]演算子のオーバーロードが欲しい。
O 行列を1次元配列で実装する場合、C++は行主順(行列を行ベクトルの集まりとみなす)。
O Blas、lapackのライブラリをビルドしたfortran77は列主順(行列を列ベクトルの集まりとみなす)。
X ()演算子のオーバーロードでは、行主順だろうが列主順だろうが、行列Aのi行j列の要素にはA(i,j)とアクセスできるが、
X 列主順の場合には[]演算子のオーバーロードをどうやってもA[j][i]となってしまう。
O それでeigenは()演算子のみをサポートしている(本当か?)。
X だが、A(i,j)が添字0から始まるのが気に入らん。
X 添字が0から始まるのはA[i][j]やろうもん。
O [][]のオーバーロードがあったらなあ。
行頭Xで示した文章の意味が良く分からん
O [][]演算子のオーバーロードが欲しい。
O 行列を1次元配列で実装する場合、C++は行主順(行列を行ベクトルの集まりとみなす)。
O Blas、lapackのライブラリをビルドしたfortran77は列主順(行列を列ベクトルの集まりとみなす)。
X ()演算子のオーバーロードでは、行主順だろうが列主順だろうが、行列Aのi行j列の要素にはA(i,j)とアクセスできるが、
X 列主順の場合には[]演算子のオーバーロードをどうやってもA[j][i]となってしまう。
O それでeigenは()演算子のみをサポートしている(本当か?)。
X だが、A(i,j)が添字0から始まるのが気に入らん。
X 添字が0から始まるのはA[i][j]やろうもん。
O [][]のオーバーロードがあったらなあ。
行頭Xで示した文章の意味が良く分からん
622デフォルトの名無しさん (JP 0Hf2-Dj8N)
2024/12/02(月) 22:40:34.32ID:/dQ47H+wH ああ、そう。
ところで、A(i,j)が添字0から始まるのが気にならないんだ。じゃあ、もうええわ。
ところで、A(i,j)が添字0から始まるのが気にならないんだ。じゃあ、もうええわ。
623デフォルトの名無しさん (ワッチョイ 0e62-jXfH)
2024/12/02(月) 22:51:18.89ID:Fo02P0Bv0 msvc4.xxにoprater delete[]をoverideする機能が無い
所からCOMの仕様が策定されている所を考えると
面白いな
所からCOMの仕様が策定されている所を考えると
面白いな
624デフォルトの名無しさん (ワッチョイ b701-5W+W)
2024/12/02(月) 22:58:33.93ID:6C6t/Sm50625はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-mEgI)
2024/12/02(月) 23:07:19.64ID:5A4jg9rQ0 >>619
[] がカンマで区切られた複数の引数を受けとる機能は入る見込み。
そのための前準備として [] の中でカンマ演算子を使うのが C++20 から非推奨になってる。 必要なら括弧で囲めばいいだけだから深刻な互換性問題にもならんだろうし。
[][] をオーバロードするとなると辻褄合わせが難しいだろうから入ることは期待できないと思う。
[] がカンマで区切られた複数の引数を受けとる機能は入る見込み。
そのための前準備として [] の中でカンマ演算子を使うのが C++20 から非推奨になってる。 必要なら括弧で囲めばいいだけだから深刻な互換性問題にもならんだろうし。
[][] をオーバロードするとなると辻褄合わせが難しいだろうから入ることは期待できないと思う。
626はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-mEgI)
2024/12/02(月) 23:09:49.14ID:5A4jg9rQ0627デフォルトの名無しさん (ワッチョイ c89a-+Y4l)
2024/12/04(水) 01:53:48.90ID:DpkrBRqF0 結局はベクトルや行列の演算の何かなんだろうから
二重配列を直接操作するというよりベクトルや行列のオブジェクトの演算を
定義する、演算子オーバーロードする、とかそういうコードを一旦書くわけには
いかないのかな?
二重配列を直接操作するというよりベクトルや行列のオブジェクトの演算を
定義する、演算子オーバーロードする、とかそういうコードを一旦書くわけには
いかないのかな?
628デフォルトの名無しさん (オイコラミネオ MMdd-Qs+Z)
2024/12/04(水) 11:10:28.05ID:1b6O8ksjM [][]演算子が出来たら
[][][]の解釈に困るからできない
というより
[]が一つの演算子だから[][]はないし混乱のもと
[ , ]が正当
[][][]の解釈に困るからできない
というより
[]が一つの演算子だから[][]はないし混乱のもと
[ , ]が正当
629デフォルトの名無しさん (アウアウエー Sa6a-VZt9)
2024/12/05(木) 20:29:34.16ID:bsPx8jUja pythonみたいにhoge[:,:,::-1]みたいな描き方したい
operatorオーバーロードの仕方教えてくれ
operatorオーバーロードの仕方教えてくれ
630デフォルトの名無しさん (ワッチョイ 847c-0Hkv)
2024/12/06(金) 19:13:10.74ID:Ed4tJtIh0 どうしてもやりたいならユーザー定義リテラル使ってhoge[":;:;::-1"_slice]とか書かせるかなあ
631デフォルトの名無しさん (ワッチョイ 5e63-64DC)
2024/12/07(土) 17:49:57.38ID:hZoDLS6H0 [,]とカンマ演算子の優先順位はどうなるんじゃ……
まあすでに関数の引数部分で似たような状況((, , ,))だから良いのか……
まあすでに関数の引数部分で似たような状況((, , ,))だから良いのか……
632はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-LsAq)
2024/12/07(土) 19:05:42.44ID:bmFGOE/o0633デフォルトの名無しさん (ワッチョイ a7ad-7Ydj)
2024/12/08(日) 19:55:22.57ID:R/m6cDay0 mdspan でいいんじゃないかと
634350 (ワッチョイ 9744-3FWJ)
2024/12/30(月) 01:24:05.36ID:QjoRUJvQ0635デフォルトの名無しさん (ワッチョイ b6e7-F611)
2024/12/30(月) 02:23:21.03ID:OlG90g3v0 その話はもうええわ
636はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-1Vfr)
2024/12/30(月) 03:22:33.37ID:vy8OYYFk0 >>634
> これ配列リテラルちゃうの?
文字列リテラルは配列の一種ではあるが、この場合は配列一般を表すリテラルはないという意味。
(C にはコンパウンドリテラルがあるし、一部の処理系では C++ でも使える拡張があるけど。)
初期化子に現れる波括弧が配列リテラルだと誤解しているらしいことについての指摘なので文字列リテラルも配列リテラルだというのは関係がない。
> nameはポインタだが
いいえ。 name は配列。
> dc エリアに sazaesan\0 格納されるだろ
これはリテラルかどうかの話とは関係がない。
> これ配列リテラルちゃうの?
文字列リテラルは配列の一種ではあるが、この場合は配列一般を表すリテラルはないという意味。
(C にはコンパウンドリテラルがあるし、一部の処理系では C++ でも使える拡張があるけど。)
初期化子に現れる波括弧が配列リテラルだと誤解しているらしいことについての指摘なので文字列リテラルも配列リテラルだというのは関係がない。
> nameはポインタだが
いいえ。 name は配列。
> dc エリアに sazaesan\0 格納されるだろ
これはリテラルかどうかの話とは関係がない。
637デフォルトの名無しさん (ワッチョイ 9744-3FWJ)
2024/12/30(月) 08:13:16.60ID:QjoRUJvQ0 >文字列リテラルは配列の一種ではあるが、この場合は配列一般を表すリテラルはないという意味。
おおっと苦しいねぇw
おおっと苦しいねぇw
638デフォルトの名無しさん (ワッチョイ 9a79-yyCf)
2024/12/31(火) 23:26:05.62ID:xpoxeW+N0 >配列リテラル
そもそもこの言葉がおかしい
配列リテラルなんてものは存在しない
リテラルは数値や文字、文字列の変更不可な定数を指す用語で、配列等の変数とは間逆の存在
配列は文字列リテラルとかで初期化はできるがリテラルには分類されない
主にjavascript界隈で平気で配列リテラルなんて説明してるサイトがあるが全部間違い
そもそもこの言葉がおかしい
配列リテラルなんてものは存在しない
リテラルは数値や文字、文字列の変更不可な定数を指す用語で、配列等の変数とは間逆の存在
配列は文字列リテラルとかで初期化はできるがリテラルには分類されない
主にjavascript界隈で平気で配列リテラルなんて説明してるサイトがあるが全部間違い
639はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-1Vfr)
2025/01/01(水) 11:07:42.20ID:KjvDobUm0 >>638
英単語としての literal の意味にそぐわなくても、言語仕様でリテラルという用語を割り当てられたならリテラルというしかない。
JavaScript (ECMAScript) のことはよう知らんけど仕様を見たら [] で囲んで配列を表現する文法には ArrayLiteral と書いてあるぞ。
https://262.ecma-international.org/15.0/index.html#prod-ArrayLiteral
英単語としての literal の意味にそぐわなくても、言語仕様でリテラルという用語を割り当てられたならリテラルというしかない。
JavaScript (ECMAScript) のことはよう知らんけど仕様を見たら [] で囲んで配列を表現する文法には ArrayLiteral と書いてあるぞ。
https://262.ecma-international.org/15.0/index.html#prod-ArrayLiteral
640デフォルトの名無しさん (ワッチョイ 8b01-rRgN)
2025/01/01(水) 11:14:58.75ID:MMGltyx80 まぁ言葉の競合なんて稀によくあるし
641青木康善 (アウアウウー Sac7-DS50)
2025/01/02(木) 03:10:49.97ID:2OQRwfH2a 独習C++今から読みます。
642はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-1Vfr)
2025/01/02(木) 12:45:54.07ID:dC27qXct0 そうか。
643デフォルトの名無しさん (ワッチョイ 9a79-yyCf)
2025/01/02(木) 17:05:43.34ID:ZvjFvgyg0 >>639
そこ見たけどリテラルについては13.2.3 Literalsで定義されてるし
ArrayLiteralで検索したら13.2.4 Array Initializerと書いてあるから、ArrayLiteralはただの誤植だろ
そんなのを根拠にして配列リテラルなんておかしな説明が広まってるのか
そこ見たけどリテラルについては13.2.3 Literalsで定義されてるし
ArrayLiteralで検索したら13.2.4 Array Initializerと書いてあるから、ArrayLiteralはただの誤植だろ
そんなのを根拠にして配列リテラルなんておかしな説明が広まってるのか
644はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-mOud)
2025/01/02(木) 20:16:05.92ID:dC27qXct0 どうだろ?
同じものでも切り口によって呼び名が違うことはあるじゃないの。
たとえば字句的には識別子と呼ばれてるものが構文の上では変数だったり型だったりするわけで。
本当になんの使い分けの意図もなく単なる間違いなんか?
いやまあ、私はよう知らんから本当に間違いなんかも知らんけど。
同じものでも切り口によって呼び名が違うことはあるじゃないの。
たとえば字句的には識別子と呼ばれてるものが構文の上では変数だったり型だったりするわけで。
本当になんの使い分けの意図もなく単なる間違いなんか?
いやまあ、私はよう知らんから本当に間違いなんかも知らんけど。
645デフォルトの名無しさん (ワッチョイ 9744-3FWJ)
2025/01/03(金) 05:19:23.99ID:TELQMEJN0646はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-mOud)
2025/01/03(金) 08:22:15.04ID:N2a/+7s70 用語は概念と結び付いてる。
理屈の建て付けが用語に現れているのだから用語の間違いは理屈の理解の誤り。
こだわるべき。
訳の都合とか歴史的事情でわかりにくい変な用語になってるのもよくあることだけどな。
理屈の建て付けが用語に現れているのだから用語の間違いは理屈の理解の誤り。
こだわるべき。
訳の都合とか歴史的事情でわかりにくい変な用語になってるのもよくあることだけどな。
647はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-mOud)
2025/01/03(金) 15:37:54.39ID:N2a/+7s70 常に厳密であるべきとまでは言わないけど、必要なときに説明できる程度にはね。
648デフォルトの名無しさん (ワッチョイ 8b01-rRgN)
2025/01/03(金) 16:40:53.84ID:nAACv6m40 せやな
649デフォルトの名無しさん (ワッチョイ 23ef-s7Wh)
2025/01/04(土) 19:25:11.41ID:Dnxz33hn0 ECMAScript® 2024 Language Specification
A Grammar Summary
https://tc39.es/ecma262/2024/multipage/grammar-summary.html#sec-grammar-summary
より抜粋
| PrimaryExpression :
| Literal
| ArrayLiteral
| ObjectLiteral
| RegularExpressionLiteral
|
| Initializer :
| = AssignmentExpression
camel case の『ArrayLiteral』等は文法記法上のシンボルであり専用の(斜体)フォントが使用されている。
『ArrayLiteral』は『PrimaryExpression』の下に『Literal』や『RegularExpressionLiteral』等と並んで定義されているので『Literal』の下には無い。
これを踏まえて、何故『ArrayInitializer』というシンボル名にしなかったのかという疑問なら話が分かる。C や C++ の『Initializer』関連も参考になる。
A Grammar Summary
https://tc39.es/ecma262/2024/multipage/grammar-summary.html#sec-grammar-summary
より抜粋
| PrimaryExpression :
| Literal
| ArrayLiteral
| ObjectLiteral
| RegularExpressionLiteral
|
| Initializer :
| = AssignmentExpression
camel case の『ArrayLiteral』等は文法記法上のシンボルであり専用の(斜体)フォントが使用されている。
『ArrayLiteral』は『PrimaryExpression』の下に『Literal』や『RegularExpressionLiteral』等と並んで定義されているので『Literal』の下には無い。
これを踏まえて、何故『ArrayInitializer』というシンボル名にしなかったのかという疑問なら話が分かる。C や C++ の『Initializer』関連も参考になる。
650デフォルトの名無しさん (ワッチョイ b62b-F611)
2025/01/04(土) 19:40:45.61ID:tP/ja7AQ0 その話つまんないから
651デフォルトの名無しさん (ワッチョイ 9732-mOud)
2025/01/04(土) 19:51:17.23ID:1P+FhTZO0 関西人が河童を追い払う古代遺跡、カッパドキヤ
652デフォルトの名無しさん (ワッチョイ dbc7-PiQp)
2025/01/07(火) 15:04:17.79ID:njoKzNHl0 初心者が聞いたら間違いなく混乱するなこりゃ
普通リテラルってデータリソース「表現」のレベルでメタキャラと対な概念、って点をまず押さえるべきなんじゃないかと
Cならバックスラッシュがリテラルかメタキャラかはシングルクウォートで囲まれるかダブルクウォートで囲まれるかで変わる、みたいな感じで
あと表現と「実装」(配列orリストorタプルetc.)をごちゃ混ぜに議論してるのも良くない…気がする
JSでの用語用法に関しては正直どうでもいい他所でやれとしか
普通リテラルってデータリソース「表現」のレベルでメタキャラと対な概念、って点をまず押さえるべきなんじゃないかと
Cならバックスラッシュがリテラルかメタキャラかはシングルクウォートで囲まれるかダブルクウォートで囲まれるかで変わる、みたいな感じで
あと表現と「実装」(配列orリストorタプルetc.)をごちゃ混ぜに議論してるのも良くない…気がする
JSでの用語用法に関しては正直どうでもいい他所でやれとしか
653デフォルトの名無しさん (ワッチョイ 9944-7f6o)
2025/01/09(木) 16:41:07.20ID:G2VPgYgX0654デフォルトの名無しさん (ワッチョイ 9944-7f6o)
2025/01/09(木) 16:43:12.80ID:G2VPgYgX0 このはちみつなんとかて
なんでこのスレにずっと張り付いてるの?
なんでこのスレにずっと張り付いてるの?
655デフォルトの名無しさん (ワッチョイ d315-bDSa)
2025/01/09(木) 17:53:02.65ID:pauriN870 コテハンだから目立つというだけで、名無しでずっと張り付いてるのもいるでしょ
656デフォルトの名無しさん (ワッチョイ 93ad-ZS2K)
2025/01/10(金) 15:09:57.30ID:5TDMwabH0 むしろこの手のスレで名無しのすべてが毎回入れ替わって別人なんだと思えるほうが異常とも言える
657デフォルトの名無しさん (ワッチョイ 4b73-gMcM)
2025/01/10(金) 19:09:29.05ID:Sq5TZMET0 名前が売りたいならtwitterとかで活動された方がいいんじゃないのと思っている
658デフォルトの名無しさん (ワッチョイ 93ad-ZS2K)
2025/01/10(金) 19:28:58.52ID:5TDMwabH0 は?w
はちみつ餃子なんて名前売って何になるってんだ?
ペンネームかなんかで活動しているわけでもないのに
はちみつ餃子なんて名前売って何になるってんだ?
ペンネームかなんかで活動しているわけでもないのに
659はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9932-vZ9d)
2025/01/10(金) 19:32:01.54ID:2xRvglud0 名前が広く知られる必要も意味もない。
話を追いやすくするのが主目的であって「私」というキャラクタを主張したいわけではないので、むしろ意図的に 5ch 上でだけはちみつ餃子と名乗ってる。
(元々はSCHEME餃子と名乗っていたが Scheme スレ以外にも書き込むので変えた。)
Twitter (X) のアカウントも持ってはいるけど。
話を追いやすくするのが主目的であって「私」というキャラクタを主張したいわけではないので、むしろ意図的に 5ch 上でだけはちみつ餃子と名乗ってる。
(元々はSCHEME餃子と名乗っていたが Scheme スレ以外にも書き込むので変えた。)
Twitter (X) のアカウントも持ってはいるけど。
660はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9932-vZ9d)
2025/01/10(金) 19:36:59.79ID:2xRvglud0 議論してても別の主張と混同されたり自演認定してくるやつがいたりして本筋からズレまくって面倒くせぇことが結構あるんだよ。
コテハンはコテハンでなんだかんだ言うやつがいるからどっちもどっちで面倒くせぇけどな。
コテハンはコテハンでなんだかんだ言うやつがいるからどっちもどっちで面倒くせぇけどな。
661デフォルトの名無しさん (ワッチョイ b101-BLbR)
2025/01/11(土) 12:15:30.40ID:RVo7o+pP0 酉だけで十分では
662デフォルトの名無しさん (オッペケ Sr4d-8Wha)
2025/01/11(土) 20:48:36.46ID:bI8uLgjvr 「一応署名」するんなら、CNはあったらいいぞ
663デフォルトの名無しさん (ワッチョイ 9563-sRsu)
2025/01/18(土) 07:24:59.91ID:Kzk7GzSP0 動作から見るポインタと配列の違い……
char arr[] = "abc";
char* p = &(arr[0]);
assert(&p != &(arr[0]));
assert((void*)arr == (void*)&(arr[0]));
いや知らんけど多分……
メモリ割り付けまで見たらもっとはっきり違いがわかるパースン
char arr[] = "abc";
char* p = &(arr[0]);
assert(&p != &(arr[0]));
assert((void*)arr == (void*)&(arr[0]));
いや知らんけど多分……
メモリ割り付けまで見たらもっとはっきり違いがわかるパースン
664デフォルトの名無しさん (ワッチョイ 9563-sRsu)
2025/01/18(土) 07:27:41.04ID:Kzk7GzSP0 訂正orz……
誤: assert((void*)arr == (void*)&(arr[0]));
正: assert((void*)&arr == (void*)&(arr[0]));
誤: assert((void*)arr == (void*)&(arr[0]));
正: assert((void*)&arr == (void*)&(arr[0]));
665デフォルトの名無しさん (ワッチョイ cfaf-BCxs)
2025/01/24(金) 23:21:44.53ID:U5y9xmGO0 コンパイル時にsoファイルをリンクする時って参照されるsoファイルを参照している側よりも後ろに書くみたいなルールあると思うんだけど、
このルールに従わずsoファイルを前に書いた時にコンパイル成功する環境と失敗する環境がある
失敗するときのエラーはundefined reference errorでso側を参照しているところでエラーになってる
gccのバージョンは一応同じで、OSはwslのUbuntuとRedHat
Redhat側で成功している
コンパイルするときのコマンドは同じもの
原因ってどのへんにあるのかわかります? あるいは何らかの設定で回避できるとか
似た事象でこの辺が引っかかったけど答えはなかった
ttps://forums.debian.net/viewtopic.php?t=152808
このルールに従わずsoファイルを前に書いた時にコンパイル成功する環境と失敗する環境がある
失敗するときのエラーはundefined reference errorでso側を参照しているところでエラーになってる
gccのバージョンは一応同じで、OSはwslのUbuntuとRedHat
Redhat側で成功している
コンパイルするときのコマンドは同じもの
原因ってどのへんにあるのかわかります? あるいは何らかの設定で回避できるとか
似た事象でこの辺が引っかかったけど答えはなかった
ttps://forums.debian.net/viewtopic.php?t=152808
667デフォルトの名無しさん (ワッチョイ 0301-o26Q)
2025/01/25(土) 15:04:34.61ID:Q3LYFAxD0 LD_PRELOADが影響与えるのは実行時なのでは?
668デフォルトの名無しさん (ワッチョイ 7f70-FMGu)
2025/01/25(土) 15:11:01.85ID:LC7IJQQw0 せやな
書ける範囲で具体的なオプションを書いてくれると助かる
もしかしてディストリでsoの置き場所が違うのにそれに対応してないとか?
書ける範囲で具体的なオプションを書いてくれると助かる
もしかしてディストリでsoの置き場所が違うのにそれに対応してないとか?
669デフォルトの名無しさん (ワッチョイ 6f9b-Bxv4)
2025/01/25(土) 17:20:55.15ID:W3I6NstP0 使ったことないけどマニュアル見る限り-tでリンクするファイル表示できるっぽいな
670青木康善 (アウアウウー Saa7-XwLX)
2025/01/25(土) 18:16:04.92ID:s6qQIUHWa 今日から、reasonというDTMソフトの、rack extentionを作るために学ぶことに決めました。
671青木康善 (アウアウウー Sa47-7ROj)
2025/01/26(日) 10:12:34.34ID:bIavjdz2a core javaみたいな、書籍がC++にも無いかなあ。
672デフォルトの名無しさん (ワッチョイ 0eaf-cjCd)
2025/01/26(日) 16:16:40.95ID:ZRokd9b50 >>668
遅くなってすまぬ
だいたいこんな感じ
失敗するコマンド
g++ -L$LibPath -lTestLib -o Test main.cpp
成功するコマンド
g++ -L$LibPath -o Test main.cpp -lTestLib
TestLibのファイル名はlibTestLib.so
このあたりを読むに(ttps://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html)
リンク時のライブラリ指定の順番的は後者が正しいと思うんだけど、なぜかRedHatの方だとエラーが出ない
RedHatの動的ライブラリ周りの記述を見ると"gcc ... -Llibrary_path -lfoo ..."みたいな書き方しかしていない
https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/developing_c_and_cpp_applications_in_rhel_9/using-libraries-with-gcc_assembly_creating-c-or-cpp-applications#using-a-dynamic-library-with-gcc_using-libraries-with-gcc
遅くなってすまぬ
だいたいこんな感じ
失敗するコマンド
g++ -L$LibPath -lTestLib -o Test main.cpp
成功するコマンド
g++ -L$LibPath -o Test main.cpp -lTestLib
TestLibのファイル名はlibTestLib.so
このあたりを読むに(ttps://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html)
リンク時のライブラリ指定の順番的は後者が正しいと思うんだけど、なぜかRedHatの方だとエラーが出ない
RedHatの動的ライブラリ周りの記述を見ると"gcc ... -Llibrary_path -lfoo ..."みたいな書き方しかしていない
https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/developing_c_and_cpp_applications_in_rhel_9/using-libraries-with-gcc_assembly_creating-c-or-cpp-applications#using-a-dynamic-library-with-gcc_using-libraries-with-gcc
673デフォルトの名無しさん (ワッチョイ 0b01-jk+K)
2025/01/26(日) 21:28:32.98ID:h08Ozzg50 Redhatで俺様パッチでも当たってるんかな?
674はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1bed-QOli)
2025/01/27(月) 10:03:20.61ID:CEXr069M0 GNU Linker では順番通りに一度しか探査しない仕様なので指定の順番に意味がある。
どういう順番でも通るなら GNU Linker 以外が設定されてるんじゃないのかな。
g++ はフロントエンドに過ぎないし、呼び出すリンカを変えるように設定は出来る(されてるかもしれない)よ。
どういう順番でも通るなら GNU Linker 以外が設定されてるんじゃないのかな。
g++ はフロントエンドに過ぎないし、呼び出すリンカを変えるように設定は出来る(されてるかもしれない)よ。
675デフォルトの名無しさん (ワッチョイ 0e9d-cjCd)
2025/01/31(金) 00:55:21.04ID:07X4f1Va0 そういえばリンカーが何かって確認してなかった
後で確認してみる。ありがとう
後で確認してみる。ありがとう
676はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/10(月) 11:15:20.00ID:cWC6BpGk0 主要なリンカとしては gold, lld, mold などがある。
これらに比べると GNU Linker は単純に遅い。
ただ、オブジェクトファイルの構造には文書化されていない場当たり的に決められた不明瞭な部分も多くてよくわからんところは「GNU Linker の挙動が仕様」みたいな扱いなので確実に「正しい動作」を期待する保守的なディストリビューションは GNU Linker を採用することも結構ある。
これらに比べると GNU Linker は単純に遅い。
ただ、オブジェクトファイルの構造には文書化されていない場当たり的に決められた不明瞭な部分も多くてよくわからんところは「GNU Linker の挙動が仕様」みたいな扱いなので確実に「正しい動作」を期待する保守的なディストリビューションは GNU Linker を採用することも結構ある。
677デフォルトの名無しさん (ワッチョイ 8634-aAq2)
2025/02/10(月) 17:33:04.35ID:fQxZ+XGm0 グローバルな変数を使う時って、
namespace hoge{ constexpr int hoge; };
と
class hoge{ static int hoge; };
のどっちを使うべきですか?
namespace hoge{ constexpr int hoge; };
と
class hoge{ static int hoge; };
のどっちを使うべきですか?
678デフォルトの名無しさん (ワッチョイ 4663-6Hi7)
2025/02/10(月) 18:47:33.05ID:6W8L/x5D0 どうでもいい
好きにやれ
好きにやれ
679デフォルトの名無しさん (ワッチョイ ebda-2Ob3)
2025/02/10(月) 19:05:23.46ID:FgXBIPm00 上のconstexprはいらない
何のためにつけたか不明だが
何のためにつけたか不明だが
680デフォルトの名無しさん (ワッチョイ ff9c-mDEt)
2025/02/10(月) 19:22:59.53ID:LsLUwoXt0 昔はグローバル変数の代わりに関数のstatic local 変数を使ってたけど、最近はどうなのかしらん?
681はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/10(月) 19:32:01.21ID:cWC6BpGk0 >>677
どちらの変数もグローバル名前空間スコープで宣言されていない。
どちらの変数もグローバル名前空間スコープで宣言されていない。
682デフォルトの名無しさん (ワッチョイ fd63-KThN)
2025/02/16(日) 10:13:30.97ID:AY7cmtZI0 namespace foo { int hoge; } だとusing foo::hoge; ができるが
class Foo { public: static int hoge; } だと using Foo::hoge; できない
という印象、
class Foo { public: static int hoge; } だと using Foo::hoge; できない
という印象、
683デフォルトの名無しさん (ワッチョイ fd63-KThN)
2025/02/16(日) 10:17:01.36ID:AY7cmtZI0 オブジェクトの寿命がプログラムの開始から終わりまでずっとあるがグローバル名前空間スコープで宣言されていないがために
グローバル変数と言ってはいけないならが
オブジェクトの寿命がプログラムの開始から終わりまでずっとあるがグローバル名前空間スコープで宣言されていないオブジェクトは
何て言えば良いんじゃ……
グローバル変数と言ってはいけないならが
オブジェクトの寿命がプログラムの開始から終わりまでずっとあるがグローバル名前空間スコープで宣言されていないオブジェクトは
何て言えば良いんじゃ……
685デフォルトの名無しさん (ワッチョイ fd63-KThN)
2025/02/16(日) 10:21:00.02ID:AY7cmtZI0 今やDouble-Checked Locking is Fixed In C++11されたのだから
static local 変数を使う意味は無くなた
※ 個人の感想です
static local 変数を使う意味は無くなた
※ 個人の感想です
686デフォルトの名無しさん (ワッチョイ fd63-KThN)
2025/02/16(日) 10:23:32.78ID:AY7cmtZI0687はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-7Htj)
2025/02/17(月) 10:05:32.77ID:tIRsmIw80 言語仕様 (C++23) 内でグローバル変数 (global variable) という語を使っている箇所を検索してみたら二箇所みつけた。
https://timsong-cpp.github.io/cppwp/n4950/diagnostics.general#2
https://timsong-cpp.github.io/cppwp/n4950/fs.op.current.path#5
前者は意味がわからん……英語と C++ に詳しい人は解説してくれんか。
後者はどこで変更されるかわからんものというニュアンスで、文法上の分類としての意味はなさそう。
https://timsong-cpp.github.io/cppwp/n4950/diagnostics.general#2
https://timsong-cpp.github.io/cppwp/n4950/fs.op.current.path#5
前者は意味がわからん……英語と C++ に詳しい人は解説してくれんか。
後者はどこで変更されるかわからんものというニュアンスで、文法上の分類としての意味はなさそう。
688デフォルトの名無しさん (ワッチョイ e314-MHHu)
2025/02/17(月) 10:30:13.63ID:afCQWVrm0 errnoのことでしょ、昔は本当にグローバル変数だったらしいし、そのせいか今も「errnoはグローバル変数です」って説明がそこら中に転がってる
そこセクション概要だし、後者と同じで別に言語仕様上の意味はないと思う
お客様の中にC/C++/UNIX/POSIXそれぞれにおけるerrnoの仕様/記述の歴史家はおられませんか
そこセクション概要だし、後者と同じで別に言語仕様上の意味はないと思う
お客様の中にC/C++/UNIX/POSIXそれぞれにおけるerrnoの仕様/記述の歴史家はおられませんか
689デフォルトの名無しさん (ワッチョイ fd63-KThN)
2025/02/18(火) 00:30:31.98ID:lk7OswCX0 >グローバル変数とは、複数の関数から使用できる変数のことを言います。
>グローバル変数は、関数外で宣言された変数です。
>一方、関数の外側でも変数を宣言できます。 これを グローバル変数 と言います。
ぢつは自動変数以外はTLSもファイルスコープのやつも静的記憶期間の変数も全
部グローバル変数だったりして……
>グローバル変数は、関数外で宣言された変数です。
>一方、関数の外側でも変数を宣言できます。 これを グローバル変数 と言います。
ぢつは自動変数以外はTLSもファイルスコープのやつも静的記憶期間の変数も全
部グローバル変数だったりして……
690デフォルトの名無しさん (ワッチョイ fd63-KThN)
2025/02/18(火) 00:33:19.53ID:lk7OswCX0 当然オブジェクトのメンバ変数も関数の外でクラスが定義されている限り、
自動オブジェクトであってもメンバ変数は例外なくグローバル変数である
という定義にしたら単純で誤解の余地も無い
自動オブジェクトであってもメンバ変数は例外なくグローバル変数である
という定義にしたら単純で誤解の余地も無い
691デフォルトの名無しさん (ワッチョイ fd63-KThN)
2025/02/18(火) 00:44:49.13ID:lk7OswCX0 しかしよく考えたら
>グローバル変数とは、複数の関数から使用できる変数のことを言います。
には他の関数に参照渡しされた自動変数も含まれるから、アドレスが関数外に流出して
メモリエリアシングの可能性がある変数はみなグローバル変数ということなのかも……
>グローバル変数とは、複数の関数から使用できる変数のことを言います。
には他の関数に参照渡しされた自動変数も含まれるから、アドレスが関数外に流出して
メモリエリアシングの可能性がある変数はみなグローバル変数ということなのかも……
692デフォルトの名無しさん (ワッチョイ 6eda-u+d+)
2025/02/24(月) 18:03:30.63ID:0Dav+b+p0 現在C++を勉強しています
規格書を読んで分からないところはChatGPTに質問すれば
大体解決してしまうのですが、こんな楽な勉強方法でいいんでしょうか?
昔、入門書読んでは挫折を繰り返してたのがバカバカしくなりました
規格書を読んで分からないところはChatGPTに質問すれば
大体解決してしまうのですが、こんな楽な勉強方法でいいんでしょうか?
昔、入門書読んでは挫折を繰り返してたのがバカバカしくなりました
693デフォルトの名無しさん (ブーイモ MMfa-A0+M)
2025/02/24(月) 18:13:54.21ID:0Bg+pEV3M694デフォルトの名無しさん (ワッチョイ 0d01-xfM1)
2025/02/24(月) 21:25:46.59ID:JORyVgSx0 良い時代になったね
695はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-Ah42)
2025/02/25(火) 16:07:34.32ID:6jOr+W/20 初心者は何が分からないのか分からない。
つまり的確な質問は出来ない。
要領を得ない質問から上手く察して回答するのは難しいよ。
(人間の指導者でも。)
学習の最序盤では入門書を読んで一方的に知識を詰め込む段階は要ると思う。
(それによって最低限に意味が伝わる質問が出来るようになる程度には。)
基礎を詰め込んだ後なら詳細を規格から探し回るよりは AI のサポートがあると便利ではあるかもね。
つまり的確な質問は出来ない。
要領を得ない質問から上手く察して回答するのは難しいよ。
(人間の指導者でも。)
学習の最序盤では入門書を読んで一方的に知識を詰め込む段階は要ると思う。
(それによって最低限に意味が伝わる質問が出来るようになる程度には。)
基礎を詰め込んだ後なら詳細を規格から探し回るよりは AI のサポートがあると便利ではあるかもね。
696デフォルトの名無しさん (ワッチョイ fa07-Ah42)
2025/02/26(水) 09:46:27.50ID:nAW17uc20 超賢い検索サイトだと思って付き合ったらいい
いきなり答え出ちゃったり、違うそうじゃないっていうのが出たり
楽しめるようなら楽しめる
いきなり答え出ちゃったり、違うそうじゃないっていうのが出たり
楽しめるようなら楽しめる
697デフォルトの名無しさん (ワッチョイ 5a5b-ctcc)
2025/02/26(水) 20:06:27.25ID:lLwolgid0 初心者用のC++スレってここでいいですか?
698はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-FOV+)
2025/02/26(水) 22:17:10.74ID:6jOr+W/20699デフォルトの名無しさん (ワッチョイ 6e76-ctcc)
2025/02/27(木) 11:05:40.67ID:+3VmvrWI0700青木康善 (ワッチョイ 09f9-8/4C)
2025/02/28(金) 21:57:23.23ID:p5+awhy00 DTMソフトのReasonのRack Extensionを作るのに、C++を覚えなきゃいけなくなりました。
独習C++とchat GPT頼りになんとか作りたいです。
環境変数の段階で躓いてます。
独習C++とchat GPT頼りになんとか作りたいです。
環境変数の段階で躓いてます。
701デフォルトの名無しさん (スッププ Sdfa-5me9)
2025/02/28(金) 23:50:16.76ID:s8Qhss0ud 環境変数の話はC++の話ってより、Unix系の環境でのUIの話になるんだよね。
シェルスクリプトが中心にいるような世界だと、ああいうやりかたで設定するのが便利だったっていう。
正直、とりあえず無視して進んでもいい話だと思うよ。
優先度低いから、必要になってから学び直す感じで。
シェルスクリプトが中心にいるような世界だと、ああいうやりかたで設定するのが便利だったっていう。
正直、とりあえず無視して進んでもいい話だと思うよ。
優先度低いから、必要になってから学び直す感じで。
702はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-Ah42)
2025/03/01(土) 00:04:13.00ID:2btke4iS0703701 (スッププ Sdfa-5me9)
2025/03/01(土) 01:37:40.11ID:YfcGT65Md ああ…その発想はなかった。
そういう意味なら全くの見当外れなレスだったから、忘れて。
そういう意味なら全くの見当外れなレスだったから、忘れて。
704デフォルトの名無しさん (アウアウウー Sa39-c/TO)
2025/03/01(土) 11:39:29.07ID:dZ2eBKvGa VSTの話かと思ったz
705デフォルトの名無しさん (ワッチョイ 0a65-WS8c)
2025/03/01(土) 20:32:44.09ID:j9/xcCww0 まだ、chatGPTに「こういうプラグイン作って」で済む時代ではないのか
706デフォルトの名無しさん (ワッチョイ 8b8a-CnOn)
2025/03/02(日) 16:59:51.21ID:13MOl4uH0 グルーコードは頼んだら書いてくれそう
そういうのこそ、webから情報収集してもらって、AIに組んでもらいたい
そういうのこそ、webから情報収集してもらって、AIに組んでもらいたい
707デフォルトの名無しさん (ワッチョイ 117c-9dXb)
2025/03/02(日) 20:49:33.30ID:SR9sVVs70 「とりあえずHello World出すプラグイン書いて」とか「この情報どうやって取得すんの?」とかは今のAIでもやってくれるから
その手のコード書き捨てるのは格段に楽になった
その手のコード書き捨てるのは格段に楽になった
708デフォルトの名無しさん (ワッチョイ 7bf9-fnNf)
2025/03/03(月) 01:18:59.95ID:KmDT379s0 マイナーなライブラリの使い方きいたらデタラメばっかだよ
709デフォルトの名無しさん (ワッチョイ 59f0-PCPn)
2025/03/03(月) 01:53:36.51ID:t7PhNKj40710デフォルトの名無しさん (ワッチョイ 2ba2-KWHx)
2025/03/03(月) 09:52:35.09ID:ZrscZeKh0 >>708
結局ところ学習ソースはネットだからネットで情報の少ない分野がいい加減になるのはしゃーない
結局ところ学習ソースはネットだからネットで情報の少ない分野がいい加減になるのはしゃーない
711デフォルトの名無しさん (ブーイモ MMcb-fnNf)
2025/03/03(月) 10:09:12.99ID:11DxD7kOM712デフォルトの名無しさん (ワッチョイ 0901-Nguo)
2025/03/03(月) 10:23:10.28ID:Hx0aO5p40 自動小説製造機になに期待してんだか
713はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1132-rXBA)
2025/03/05(水) 18:11:47.24ID:+YosNdhq0 AI が人間の知能を模倣しようとする試みである以上は人間に似た限界もある。
何もかもの専門家であることは出来ない。
無料で使える ChatGPT はその性質上、汎用 AI として調整されてるし使えるリソースは少なめなのでこれで AI を判断しないほうがいいよ。
プログラミング専用に訓練した AI は本当に賢い。
何もかもの専門家であることは出来ない。
無料で使える ChatGPT はその性質上、汎用 AI として調整されてるし使えるリソースは少なめなのでこれで AI を判断しないほうがいいよ。
プログラミング専用に訓練した AI は本当に賢い。
714デフォルトの名無しさん (ワッチョイ 7956-s+rv)
2025/03/05(水) 18:48:09.02ID:LRhSWm980 プログラミング専用ってどゆこと?
715デフォルトの名無しさん (ワッチョイ 79d7-9m9g)
2025/03/05(水) 19:22:05.63ID:P80r5h460 Clineとかじゃね?しらんけど
716デフォルトの名無しさん (ワッチョイ 7956-s+rv)
2025/03/05(水) 19:41:16.61ID:LRhSWm980 プログラミングの専門家ってなに?という疑問
言語仕様や構文、標準ライブラリに詳しい人またはAIのことかな?
でもそれって特定ビジネスドメインの専門家ではないよね?
たとえば高度な会計処理のプログラミングをAIにしてもらうことって可能なのかな?
アプリケーションを完成させるにはプログラミングだけでなくビジネスドメインの知識も必要になると思うけど
言語仕様や構文、標準ライブラリに詳しい人またはAIのことかな?
でもそれって特定ビジネスドメインの専門家ではないよね?
たとえば高度な会計処理のプログラミングをAIにしてもらうことって可能なのかな?
アプリケーションを完成させるにはプログラミングだけでなくビジネスドメインの知識も必要になると思うけど
717デフォルトの名無しさん (ワッチョイ 7956-s+rv)
2025/03/05(水) 19:44:29.61ID:LRhSWm980 たとえば高位の税理士や会計士がプログラミング専門に訓練したAIに指示を出すことで会計ソフトを作ることはできるのだろうか?
718デフォルトの名無しさん (スッププ Sd33-F7vG)
2025/03/05(水) 19:45:37.93ID:7KFkamxVd AIについて語りたいならスレ違い。
719はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1132-rXBA)
2025/03/05(水) 19:51:32.43ID:+YosNdhq0 具体的な話はしないよ。
ChatGPT を試した程度で AI を評価すべきじゃないという主旨。
ChatGPT を試した程度で AI を評価すべきじゃないという主旨。
720デフォルトの名無しさん (ワッチョイ 7956-s+rv)
2025/03/05(水) 19:51:57.29ID:LRhSWm980 たとえば、はちみつ餃子さんはC++のこと詳しいけどどんなアプリでも作れるってわけじゃないよね?
医学とか専門性の高いものはその分野の知識も当然必要になってくると思うし
そうするとプログラミングの専門家AIってなんだ?
ほんとにプログラム作れるのか?という疑問が湧いてくる
医学とか専門性の高いものはその分野の知識も当然必要になってくると思うし
そうするとプログラミングの専門家AIってなんだ?
ほんとにプログラム作れるのか?という疑問が湧いてくる
721デフォルトの名無しさん (ワッチョイ fbef-qwdi)
2025/03/05(水) 23:39:44.64ID:+5QIrElo0 ハチミツさんはどんなプログラムでも作れるよ
時間さえあれば
時間さえあれば
722デフォルトの名無しさん (オイコラミネオ MMfd-4fLd)
2025/03/06(木) 00:09:24.53ID:r/i65GRXM ところで、「結局C++とRustってどっちが良いの?」でも質問したんだけど、
X(旧 twitter)で、C++ というキーワードが検索できないんだけど、
俺の環境だけなのか、一般的に他の人の環境でもそうなって
いるのかどっち?
X(旧 twitter)で、C++ というキーワードが検索できないんだけど、
俺の環境だけなのか、一般的に他の人の環境でもそうなって
いるのかどっち?
723デフォルトの名無しさん (ワッチョイ 0916-VeWP)
2025/03/06(木) 07:44:57.51ID:87cY651N0 unsigned intをkeyとするstd::mapである値以上ある値以下のkeyの要素を全て削除したいんだけどどうしたらいいかな?
725はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 692e-rXBA)
2025/03/06(木) 18:24:33.81ID:lbAGNheW0 >>722
記号を含むワードは検索できない。
投稿する側が配慮して #cpp や #cplusplus といったタグをつける習慣はあるけどそれほど浸透してないので網羅的に探す方法はないと思う。
普通のワードでも検索はなんかおかしいし。
おすすめが賢いようなのでフォローやお気に入りを積極的にしていくと快適に情報を集められるかもしれない。
昔はおすすめ機能に「いらんことするな」という意見が多かったけど思ったより良くできてるね。
記号を含むワードは検索できない。
投稿する側が配慮して #cpp や #cplusplus といったタグをつける習慣はあるけどそれほど浸透してないので網羅的に探す方法はないと思う。
普通のワードでも検索はなんかおかしいし。
おすすめが賢いようなのでフォローやお気に入りを積極的にしていくと快適に情報を集められるかもしれない。
昔はおすすめ機能に「いらんことするな」という意見が多かったけど思ったより良くできてるね。
726デフォルトの名無しさん (ワッチョイ 117c-9dXb)
2025/03/06(木) 19:34:30.93ID:e0LjRkKt0 最近Rustに押されてるのは検索性の悪さと無関係じゃないと思う
727はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1132-rXBA)
2025/03/06(木) 19:58:40.82ID:jh2IMGBN0 Go とか BASIC とか Scheme なんかも日常的な語彙すぎて検索性は悪いが、検索自体が出来ないってことはないから組み合わせるワード次第でなんとかなるもんな。
日本語の文章という制約を入れればそれなりに絞れるし。
日本語の文章という制約を入れればそれなりに絞れるし。
728青木康善 (ワッチョイ 694e-rQ/Z)
2025/03/07(金) 14:22:29.06ID:ANm5ssXN0 皆さん、アドバイス大感謝します。しかし、Javaはある程度分かるんですが、C++はなかなか手古摺ります。
729デフォルトの名無しさん (アウアウウー Sa1d-8P30)
2025/03/07(金) 14:57:48.23ID:xU3go4h6a そもそもtwitterを検索に使おうって言う発想が貧困アタオカ
730デフォルトの名無しさん (ワッチョイ c907-CnOn)
2025/03/07(金) 19:27:12.87ID:AEV18jyF0 通常のwebより、SNSのほうが新鮮でおいしいって若者は思ったりするらしいんだが
それなら5chもいいぞ、名無しでいけるだけあって、愚問こいちゃっても後腐れは少ない
それなら5chもいいぞ、名無しでいけるだけあって、愚問こいちゃっても後腐れは少ない
731デフォルトの名無しさん (ワッチョイ 2bc3-Ggml)
2025/03/07(金) 20:36:20.40ID:49H/kgbx0 >>729
そうやって解決策を示さずに初心者を排除していると老害と言われるよ。
そうやって解決策を示さずに初心者を排除していると老害と言われるよ。
732デフォルトの名無しさん (ワッチョイ 1302-aRqM)
2025/03/08(土) 14:23:59.19ID:UEd3TNkS0 自分が初心者だった頃を思い出せば
新参者に優しくなれるだろ?
新参者に優しくなれるだろ?
733デフォルトの名無しさん (ワッチョイ d6ab-ctMQ)
2025/03/09(日) 20:55:57.38ID:kn1fZdL+0 初心者だった頃は、好き放題にぶっ叩かれてたな
同じようにするまいとは思うものの、他人を制止するのは(ry
同じようにするまいとは思うものの、他人を制止するのは(ry
734デフォルトの名無しさん (アウアウウー Sa89-u0Z4)
2025/03/09(日) 21:48:59.36ID:ce6tc1GUa 初心者だったころはそもそもSNSもインターネッツもなくパソコン通信の黎明期で
周囲には俺以外C言語でプログラムしようという人間もいなかったから気楽だった
周囲には俺以外C言語でプログラムしようという人間もいなかったから気楽だった
735デフォルトの名無しさん (ササクッテロル Sp85-ZS5M)
2025/03/13(木) 18:20:47.77ID:0zFelsYRp 十年くらいC++触ってなくて、最近また触る機会があったんだが
なんだこの[]()ってのは…ラムダ式なんて初めて見たよ
なんだこの[]()ってのは…ラムダ式なんて初めて見たよ
736デフォルトの名無しさん (ワッチョイ 3d07-ctMQ)
2025/03/13(木) 19:23:59.55ID:UZM60pXP0 そういう古参さんは、頭に+つけるってのを聞くとちょっと喜ぶと思うw
738デフォルトの名無しさん (ワッチョイ c17c-aZJm)
2025/03/14(金) 07:38:33.30ID:iWVzvedA0 すっぽすっぽ先生がC
739デフォルトの名無しさん (ワッチョイ c17c-aZJm)
2025/03/14(金) 07:40:07.31ID:iWVzvedA0 すっぽすっぽ先生がC with Classesを作ってから最初の規格C++98まで19年
C++98からC++11まで13年
そしてC++11から今14年
C++98からC++11まで13年
そしてC++11から今14年
740デフォルトの名無しさん (ササクッテロル Sp85-ZS5M)
2025/03/14(金) 10:03:43.97ID:uQBcUqUtp 十年くらい前に最新の書式を導入する情報もリスクを被る勇気も無いわな
741デフォルトの名無しさん (ワッチョイ dd01-5p3Z)
2025/03/14(金) 10:23:25.48ID:PsWnmiZn0 >>736
なんスカそれ?
なんスカそれ?
742はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c132-ctMQ)
2025/03/14(金) 11:05:51.17ID:B4ilMY360 >>741
ラムダ式の前に + を付けると関数ポインタに型変換できるという小ネタの話だと思う。
ラムダ式の前に + を付けると関数ポインタに型変換できるという小ネタの話だと思う。
743デフォルトの名無しさん (アウアウウー Sa89-Cjjx)
2025/03/14(金) 15:50:51.90ID:43evLOjOa キャプチャ付lambdaでさらに脳汁
744デフォルトの名無しさん (ササクッテロル Sp85-ZS5M)
2025/03/14(金) 17:15:25.44ID:flvbk/67p 迷走してますなぁw
745デフォルトの名無しさん (ワッチョイ dd01-5p3Z)
2025/03/14(金) 21:47:11.78ID:PsWnmiZn0 >>742
初めて知った
初めて知った
746はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c132-ctMQ)
2025/03/15(土) 09:10:45.56ID:tr5ODwiQ0 >>745
実際にはラムダ式 (クロージャ型) に対しての特別な機能があるわけじゃなくて、単項 + にクロージャオブジェクトを渡そうとするとオーバーロード解決ルールの途中で適用可能な暗黙の変換が適用された結果としてそうなる
実際にはラムダ式 (クロージャ型) に対しての特別な機能があるわけじゃなくて、単項 + にクロージャオブジェクトを渡そうとするとオーバーロード解決ルールの途中で適用可能な暗黙の変換が適用された結果としてそうなる
747デフォルトの名無しさん (スフッ Sd9a-JU6R)
2025/03/15(土) 17:45:50.20ID:UQwxamXid [](){}();
748デフォルトの名無しさん (ワッチョイ 1963-BNp6)
2025/03/15(土) 22:57:27.79ID:nPJTLBuF0 停止性問題を一般のケースについて解く機械的手続きで有限時間で必ずおわるもの(アルゴリズム)は存在しないが
人間は納期までにプログラムえおデバッグできる……できる……たぶん……
人間は納期までにプログラムえおデバッグできる……できる……たぶん……
749はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI)
2025/03/16(日) 09:48:31.74ID:B4wnHsDg0 出来なかったら誰かがどういう形かで責任を取る。
それが社会ってもんだ。
それが社会ってもんだ。
750デフォルトの名無しさん (ワッチョイ d963-lHAu)
2025/03/16(日) 11:01:20.74ID:N4spayNe0 有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき
デバックの不可能なプログラムは存在しないという例の命題は偽な可能性、
もっともこの正確な引用は「バグのないプログラムは存在しないがデバックの不可能なプログラムもまた存在しない」であって全体として矛盾した主張であることは前から指摘されてあるが
デバックの不可能なプログラムは存在しないという例の命題は偽な可能性、
もっともこの正確な引用は「バグのないプログラムは存在しないがデバックの不可能なプログラムもまた存在しない」であって全体として矛盾した主張であることは前から指摘されてあるが
751デフォルトの名無しさん (ワッチョイ d963-lHAu)
2025/03/16(日) 11:04:22.68ID:N4spayNe0 訂正orz、
誤: 有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき
正: 任意のプログラムのデバッグと言う手続きが有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき
誤: 有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき
正: 任意のプログラムのデバッグと言う手続きが有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき
752デフォルトの名無しさん (ワッチョイ 1302-BOwI)
2025/03/17(月) 06:41:01.39ID:/+A5sOUu0 ラムダ式に+の話は始めて知った
勉強になった
勉強になった
753デフォルトの名無しさん (オッペケ Sr9d-exlI)
2025/03/17(月) 09:17:27.77ID:3/T8wXeSr >>746
それちょっとだけ解説きぼん ぶっちゃけなんとなくで使ってて気持ち悪かった
それちょっとだけ解説きぼん ぶっちゃけなんとなくで使ってて気持ち悪かった
754はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI)
2025/03/17(月) 09:55:35.41ID:xz+hBXXy0 オーバーロード解決のルールは大雑把には
・候補の中で実引数と完璧に型が一致するものがあればそれが選ばれる。
・完璧な一致がないが暗黙の型変換を適用したら一致するという候補があればそれが選ばれる。
ということになってる。
実際には変換の中にも優先順位がごちゃごちゃあってかなり複雑なんだけど……。
で、組み込みの単項 + が受け取りうる型は何かというと算術型、スコープなし列挙型、またはポインタ型の三つ。
https://timsong-cpp.github.io/cppwp/n3337/expr.unary#op-7
キャプチャなしのクロージャ型は関数ポインタへの変換関数を持っている。 つまり暗黙の型変換が可能。
https://timsong-cpp.github.io/cppwp/n3337/expr.prim.lambda#6
クロージャからポインタへ暗黙の型変換をすれば単項 + に一致するからそれが選ばれる。
そういうメカニズムだと私は理解してるんだけど間違いがあったら誰か指摘してね。
・候補の中で実引数と完璧に型が一致するものがあればそれが選ばれる。
・完璧な一致がないが暗黙の型変換を適用したら一致するという候補があればそれが選ばれる。
ということになってる。
実際には変換の中にも優先順位がごちゃごちゃあってかなり複雑なんだけど……。
で、組み込みの単項 + が受け取りうる型は何かというと算術型、スコープなし列挙型、またはポインタ型の三つ。
https://timsong-cpp.github.io/cppwp/n3337/expr.unary#op-7
キャプチャなしのクロージャ型は関数ポインタへの変換関数を持っている。 つまり暗黙の型変換が可能。
https://timsong-cpp.github.io/cppwp/n3337/expr.prim.lambda#6
クロージャからポインタへ暗黙の型変換をすれば単項 + に一致するからそれが選ばれる。
そういうメカニズムだと私は理解してるんだけど間違いがあったら誰か指摘してね。
755はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI)
2025/03/17(月) 09:58:44.63ID:xz+hBXXy0 単項 + の話題がウケたみたいなのでオマケで * の話もしようかな。
単項 * にクロージャを渡した場合は関数の参照になる。
つまり *[](){} としたら型は void(&)() ってことね。
式中に参照が現れたら参照が指す先の型に変換されて、関数指示子が現れたら関数ポインタに変換されるので多くの状況では最終的に関数ポインタになっちゃうんだけど。
単項 * にクロージャを渡した場合は関数の参照になる。
つまり *[](){} としたら型は void(&)() ってことね。
式中に参照が現れたら参照が指す先の型に変換されて、関数指示子が現れたら関数ポインタに変換されるので多くの状況では最終的に関数ポインタになっちゃうんだけど。
756デフォルトの名無しさん (ササクッテロル Sp9d-H5Hv)
2025/03/17(月) 10:46:49.46ID:qCQLpZeYp 要するに副作用って事か
環境によってとかオプティマイズ如何で違った動きになる事は無いのかなぁ
環境によってとかオプティマイズ如何で違った動きになる事は無いのかなぁ
757デフォルトの名無しさん (ブーイモ MM33-EPiB)
2025/03/17(月) 11:12:41.81ID:ly7jZf+WM ならんだろw
758デフォルトの名無しさん (ササクッテロル Sp9d-H5Hv)
2025/03/17(月) 11:24:02.10ID:F8F0vPkQp 昔、ARM系の環境で配列とポインタがまるっきり違う扱いになって困ったって事があったんだよなぁ
759はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI)
2025/03/17(月) 11:44:46.70ID:xz+hBXXy0 >>756
これは言語仕様の話なので言語仕様に沿わないことがあるなら単にコンパイラのバグってだけだ。
これは言語仕様の話なので言語仕様に沿わないことがあるなら単にコンパイラのバグってだけだ。
760デフォルトの名無しさん (スップ Sd33-pKjK)
2025/03/17(月) 13:02:56.94ID:kJ3GyyA+d 「関数の配列」なんてものが存在しないC++で、関数ポインタに合法的な加減算することなんてないはずなのに、その仲間である単項+が効いちゃうのは気持ち悪くはある
761デフォルトの名無しさん (ワッチョイ 711b-yxlS)
2025/03/17(月) 13:42:24.96ID:EbB+xfjB0 関数ポインタをインクリメントしたら次の関数になるとかだったら便利よね
762デフォルトの名無しさん (ブーイモ MM33-EPiB)
2025/03/17(月) 13:56:11.11ID:ly7jZf+WM 次ってどこだよ
763デフォルトの名無しさん (ワッチョイ 711b-yxlS)
2025/03/17(月) 14:43:44.88ID:EbB+xfjB0 関数のアドレス順とか
764デフォルトの名無しさん (ササクッテロル Sp9d-H5Hv)
2025/03/17(月) 15:28:39.42ID:nF5lR4//p コード書いた順だろw
765はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 217f-a7BF)
2025/03/17(月) 16:50:25.99ID:qL9fWs880 >>760
私もそう思う。
いつからこうなのか探ってみたら1984年のリファレンスマニュアルではそもそも単項 + は存在せず、
https://web.archive.org/web/20171002220954/http://www.eah-jena.de/~kleine/history/languages/Stroustrup-CplusplusReferenceManual.pdf
1989年には単項 + が現れていてポインタも受け取れるようになってる。
https://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_2.0/doc/ProductReferenceManual.pdf
この間にどんな議論があったのかよくわからん。
C の規格では今でも単項 + は算術型しか許してないし、それが自然だよな。
私もそう思う。
いつからこうなのか探ってみたら1984年のリファレンスマニュアルではそもそも単項 + は存在せず、
https://web.archive.org/web/20171002220954/http://www.eah-jena.de/~kleine/history/languages/Stroustrup-CplusplusReferenceManual.pdf
1989年には単項 + が現れていてポインタも受け取れるようになってる。
https://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_2.0/doc/ProductReferenceManual.pdf
この間にどんな議論があったのかよくわからん。
C の規格では今でも単項 + は算術型しか許してないし、それが自然だよな。
766デフォルトの名無しさん (アウアウエー Sa23-D2PX)
2025/03/18(火) 18:06:10.72ID:2EW8BzNca >>760-762
各要素のサイズが一定じゃないから無理なんやろな
各要素のサイズが一定じゃないから無理なんやろな
767デフォルトの名無しさん (ワッチョイ 1302-BOwI)
2025/03/21(金) 19:45:52.92ID:zuSmXANM0768デフォルトの名無しさん (ワッチョイ 1302-BOwI)
2025/03/21(金) 19:49:46.16ID:zuSmXANM0 関数のアドレスなら呼び出して
スタックに無理矢理アク(以下略)
スタックに無理矢理アク(以下略)
769デフォルトの名無しさん (ワッチョイ 0107-exlI)
2025/03/21(金) 22:32:50.41ID:pLF+KLC30 そういうむちゃくちゃが簡単にできるのがC/C++
そんなことしながら、チップを覚えるんだよなあ
自分、次はMIPS覚えないと
そんなことしながら、チップを覚えるんだよなあ
自分、次はMIPS覚えないと
770デフォルトの名無しさん (アウアウエー Sa23-D2PX)
2025/03/22(土) 14:21:53.59ID:U6/Lg1xxa どっかのタイミングでbpがスタックギリギリ飛ばすんじゃなくて
コンパイラが128bytesくらい飛ばす仕様になった気がするんだけど
あれは0埋めで(ホントはバグがあるのに)奇跡的にバグ回避するテクニックなのか
他に理由あるんか
コンパイラが128bytesくらい飛ばす仕様になった気がするんだけど
あれは0埋めで(ホントはバグがあるのに)奇跡的にバグ回避するテクニックなのか
他に理由あるんか
771はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-a7BF)
2025/03/22(土) 18:01:17.10ID:nNEN9uWE0772デフォルトの名無しさん (ワッチョイ d963-lHAu)
2025/03/22(土) 20:51:53.87ID:kbZO019Z0 質問なのですがstd::unique_ptr<T>とかstd::shared_ptr<T>みたいなSTLで定義済みの
テンプレートクラスをfriendにすることは合法?
用途はシングルトンパティーンのオブジェクトのプログラム終了時の自動解放
テンプレートクラスをfriendにすることは合法?
用途はシングルトンパティーンのオブジェクトのプログラム終了時の自動解放
773はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI)
2025/03/22(土) 21:29:46.22ID:nNEN9uWE0 >>772
T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと?
特に問題ないよ。
ところでテンプレートクラスじゃなくてクラステンプレートな!
T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと?
特に問題ないよ。
ところでテンプレートクラスじゃなくてクラステンプレートな!
774デフォルトの名無しさん (ワッチョイ d963-lHAu)
2025/03/22(土) 22:33:09.97ID:kbZO019Z0 >>773
㌧クス、
>T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと?
>特に問題ないよ。
それがTのコンストラクタがprivateなパティーンなのです!
friendにしないとビルドが通らないかった(VS2022、VS2015)。
多分moveとかの最にstd::unique_ptr<T>がTのコンストラクタにアクセスするのだと思う。
㌧クス、
>T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと?
>特に問題ないよ。
それがTのコンストラクタがprivateなパティーンなのです!
friendにしないとビルドが通らないかった(VS2022、VS2015)。
多分moveとかの最にstd::unique_ptr<T>がTのコンストラクタにアクセスするのだと思う。
775デフォルトの名無しさん (ワッチョイ d963-lHAu)
2025/03/22(土) 22:39:33.53ID:kbZO019Z0 >ところでテンプレートクラスじゃなくてクラステンプレートな!
なるほど……orz
コード例:
class Foo {
friend std::unique_ptr<Foo>;
static std::unique_ptr<Foo> m_pObj;
private:
static Foo* createInstance() {
if (m_pObj == NULL) { m_pObj = std::unique_ptr<Foo>(new Foo()); } return m_pObj.get()j;
// ↑ std::make_unique<Foo>()したらビルドエラー(使うには多分std::make_unique<Foo>()もfriendが要る
// スレッドセーフ化は省略
}
// ...
};
なるほど……orz
コード例:
class Foo {
friend std::unique_ptr<Foo>;
static std::unique_ptr<Foo> m_pObj;
private:
static Foo* createInstance() {
if (m_pObj == NULL) { m_pObj = std::unique_ptr<Foo>(new Foo()); } return m_pObj.get()j;
// ↑ std::make_unique<Foo>()したらビルドエラー(使うには多分std::make_unique<Foo>()もfriendが要る
// スレッドセーフ化は省略
}
// ...
};
776はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI)
2025/03/22(土) 23:40:24.86ID:nNEN9uWE0 >>775
new Foo() を Foo のメンバ関数の中でやる分には自分自身の中でやることなので friend 宣言は不要。
std::make_unique<Foo>() をすると std::make_unique の中で Foo のコンストラクタを呼ぼうとするから std::make_unique<Foo> をフレンド宣言する必要がある。
new Foo() を Foo のメンバ関数の中でやる分には自分自身の中でやることなので friend 宣言は不要。
std::make_unique<Foo>() をすると std::make_unique の中で Foo のコンストラクタを呼ぼうとするから std::make_unique<Foo> をフレンド宣言する必要がある。
777デフォルトの名無しさん (ワッチョイ d963-lHAu)
2025/03/22(土) 23:48:30.44ID:kbZO019Z0778はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-PAPZ)
2025/03/23(日) 00:18:05.56ID:Ft35v0Bz0 >>777
私は Visual Stuio 2022 (MSVC 17) にコンパイルさせてエラーが出ないことを確認した上で書いてる。
手元に Visual Studio を入れていないのでオンラインコンパイラだけど。
コードを呼び出す側なども補うとたぶんこんなのだよね? 私が問題の理解を間違えている箇所はある?
#include <memory>
class Foo {
private:
static std::unique_ptr<Foo> m_pObj;
Foo(void) = default; // デフォルトコンストラクタはプライベート
public:
static Foo* createInstance() {
if (m_pObj == NULL) {
m_pObj = std::unique_ptr<Foo>(new Foo);
}
return m_pObj.get();
}
};
std::unique_ptr<Foo> Foo::m_pObj;
int main(void) {
auto bar = Foo::createInstance();
}
私は Visual Stuio 2022 (MSVC 17) にコンパイルさせてエラーが出ないことを確認した上で書いてる。
手元に Visual Studio を入れていないのでオンラインコンパイラだけど。
コードを呼び出す側なども補うとたぶんこんなのだよね? 私が問題の理解を間違えている箇所はある?
#include <memory>
class Foo {
private:
static std::unique_ptr<Foo> m_pObj;
Foo(void) = default; // デフォルトコンストラクタはプライベート
public:
static Foo* createInstance() {
if (m_pObj == NULL) {
m_pObj = std::unique_ptr<Foo>(new Foo);
}
return m_pObj.get();
}
};
std::unique_ptr<Foo> Foo::m_pObj;
int main(void) {
auto bar = Foo::createInstance();
}
779デフォルトの名無しさん (ワッチョイ ed7c-etgo)
2025/03/23(日) 00:19:16.26ID:YXTjT4M+0780デフォルトの名無しさん (ワッチョイ ed7c-etgo)
2025/03/23(日) 00:20:25.80ID:YXTjT4M+0 あ、被った
内容は一緒
内容は一緒
781デフォルトの名無しさん (ワッチョイ 9901-Awih)
2025/03/23(日) 00:21:43.38ID:/EbbY7QB0782デフォルトの名無しさん (ワッチョイ e563-0why)
2025/03/23(日) 01:58:28.60ID:IgihfQRv0 >>778>>779
お騒がせしましたサーセン;;;orz ビルドが通らないというのは私めの勘違いだった模様。
コードはそれで良いです。
そのコード(最小サンプル)、および最小サンプルにする前のコード×VS2015でもfriend宣言部分をコメントアウトしてビルドが通った 。n_
フレンド宣言friend std::unique_ptr<Foo>; を付けるに至った履歴が無いので推測ですだが
デストラクタがprivateのままだったタイミングがあったのかも……
(m_pObjが生ポインタのタイプのSingletonはデストラクタがprivateでもビルドが通る(デストラクタを呼ぶ人が居ないため)
→この状態でm_pObjをstd::unique_ptr<Foo>に変更してビルドエラー、アクセス許可が無いとコンパイラに言われて慌ててfriend追加、だった可能性、
お騒がせしましたサーセン;;;orz ビルドが通らないというのは私めの勘違いだった模様。
コードはそれで良いです。
そのコード(最小サンプル)、および最小サンプルにする前のコード×VS2015でもfriend宣言部分をコメントアウトしてビルドが通った 。n_
フレンド宣言friend std::unique_ptr<Foo>; を付けるに至った履歴が無いので推測ですだが
デストラクタがprivateのままだったタイミングがあったのかも……
(m_pObjが生ポインタのタイプのSingletonはデストラクタがprivateでもビルドが通る(デストラクタを呼ぶ人が居ないため)
→この状態でm_pObjをstd::unique_ptr<Foo>に変更してビルドエラー、アクセス許可が無いとコンパイラに言われて慌ててfriend追加、だった可能性、
783デフォルトの名無しさん (ワッチョイ 622d-hk3H)
2025/03/23(日) 09:31:51.75ID:CXYOr+7B0 繰り返しになるが熟読した方がいいぞ
無視していいメッセージかそうでないかも区別できるようになるから
無視していいメッセージかそうでないかも区別できるようになるから
784はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-PAPZ)
2025/03/23(日) 09:32:31.18ID:Ft35v0Bz0 元の話題からはずれる余談だけれど、静的記憶域期間を持つブロックスコープの変数は最初に通過したときに初期化されるルールがある。 (条件によるので常にではない。)
https://timsong-cpp.github.io/cppwp/n3337/stmt.dcl#4
なのでシングルトンパターンはこう単純化して書くことも出来る。
#include <memory>
class Foo {
Foo() = default;
public:
static Foo* createInstance() {
static std::unique_ptr<Foo> m_pObj = std::unique_ptr<Foo>(new Foo);
return m_pObj.get();
}
};
int main(void) {
auto bar = Foo::createInstance();
}
https://timsong-cpp.github.io/cppwp/n3337/stmt.dcl#4
なのでシングルトンパターンはこう単純化して書くことも出来る。
#include <memory>
class Foo {
Foo() = default;
public:
static Foo* createInstance() {
static std::unique_ptr<Foo> m_pObj = std::unique_ptr<Foo>(new Foo);
return m_pObj.get();
}
};
int main(void) {
auto bar = Foo::createInstance();
}
785デフォルトの名無しさん (ブーイモ MM19-xG3a)
2025/03/23(日) 10:12:01.75ID:i5B9IukZM それunique_ptrにする意味ある?
shared_ptrなら意味わかるけど
shared_ptrなら意味わかるけど
787デフォルトの名無しさん (ワッチョイ e563-0why)
2025/03/23(日) 10:56:08.84ID:IgihfQRv0 >>784
サンプルコードでは省略したけんども、Double-checked lockingの実験をしたかったノデス!
■ Double-Checked Locking is Fixed In C++11
https://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/
つなみに関数内staticオブジェクト初期化(初回実行時)のスレッド安全性がどうーなっているのかは
よく知りま栓(よって採用には消極的
>>785
Singletonなので誰からもshareされないし……
この場合むしろshared_ptrの方が牛刀な可能性もあるし……
なぜなら、std::shared_ptrの参照カウンタはその利用特性上
異なるスレッドから非同期にインクリメント/デクリメントされることを想定せざるおえず、
スレッド安全性担保がそこそこ重い同期オブジェクトで一方unique_ptrの所有権移動は非同期に行われることはなさげ
サンプルコードでは省略したけんども、Double-checked lockingの実験をしたかったノデス!
■ Double-Checked Locking is Fixed In C++11
https://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/
つなみに関数内staticオブジェクト初期化(初回実行時)のスレッド安全性がどうーなっているのかは
よく知りま栓(よって採用には消極的
>>785
Singletonなので誰からもshareされないし……
この場合むしろshared_ptrの方が牛刀な可能性もあるし……
なぜなら、std::shared_ptrの参照カウンタはその利用特性上
異なるスレッドから非同期にインクリメント/デクリメントされることを想定せざるおえず、
スレッド安全性担保がそこそこ重い同期オブジェクトで一方unique_ptrの所有権移動は非同期に行われることはなさげ
788デフォルトの名無しさん (ワッチョイ e563-0why)
2025/03/23(日) 10:57:59.97ID:IgihfQRv0 すまんこTeamsのノリで途中送信すたorz
誤: スレッド安全性担保がそこそこ重い同期オブジェクトで一方unique_ptrの所有権移動は非同期に行われることはなさげ
正: スレッド安全性担保がそこそこ重い同期オブジェクトで行われている危険性がある。一方unique_ptrの所有権移動は非同期に行われることはなさげなので多分軽量
誤: スレッド安全性担保がそこそこ重い同期オブジェクトで一方unique_ptrの所有権移動は非同期に行われることはなさげ
正: スレッド安全性担保がそこそこ重い同期オブジェクトで行われている危険性がある。一方unique_ptrの所有権移動は非同期に行われることはなさげなので多分軽量
789デフォルトの名無しさん (ワッチョイ e563-0why)
2025/03/23(日) 11:03:44.18ID:IgihfQRv0 だいたいstd::unique_ptrとstd::shard_ptrでは前者が1個のポインタと同じサイズなのに後者は2個分ある(ヒープにとられた参照カウンタへのポインタを持つため
sizeof(shared_ptr)=16
sizeof(unique_ptr)=8
というのもあり、std::unique_ptr<T>で済むところをstd::shared_ptr<T>推しするのはいかがなものか……
sizeof(shared_ptr)=16
sizeof(unique_ptr)=8
というのもあり、std::unique_ptr<T>で済むところをstd::shared_ptr<T>推しするのはいかがなものか……
790デフォルトの名無しさん (ワッチョイ 0653-xG3a)
2025/03/23(日) 21:04:30.15ID:k0m2+uGk0 >>789
shared_ptrを使えと言ってるのでなくunique_ptrの意味が特にないと言ってる
別に使ってもいいけどお前それをわかってんの?ってこと?
ついでに言っておけばshared_ptrを使う場合ってのは参照カウントがゼロになったらシングルトンを破棄するみたいな凝った実装する場合に使う
shared_ptrを使えと言ってるのでなくunique_ptrの意味が特にないと言ってる
別に使ってもいいけどお前それをわかってんの?ってこと?
ついでに言っておけばshared_ptrを使う場合ってのは参照カウントがゼロになったらシングルトンを破棄するみたいな凝った実装する場合に使う
791デフォルトの名無しさん (ワッチョイ ed7c-etgo)
2025/03/24(月) 00:16:57.44ID:zeyD/Mo00 unique_ptrじゃなくてナマポ使えって言ってんの?どこでdeleteする気なの?
792デフォルトの名無しさん (ワッチョイ 0653-xG3a)
2025/03/24(月) 00:22:30.84ID:wvKmLjta0793デフォルトの名無しさん (ワッチョイ ed7c-etgo)
2025/03/24(月) 07:56:52.11ID:zeyD/Mo00 えぇ・・・?
794デフォルトの名無しさん (ワッチョイ 65e7-aE+1)
2025/03/24(月) 08:43:05.04ID:s0JFvm8m0795デフォルトの名無しさん (ワッチョイ 65e7-aE+1)
2025/03/24(月) 08:50:28.31ID:s0JFvm8m0796デフォルトの名無しさん (ブーイモ MM62-xG3a)
2025/03/24(月) 09:19:49.44ID:8nOZWVbeM >>795
もし解決されてないならunique_ptrでも問題出るでしょ
もし解決されてないならunique_ptrでも問題出るでしょ
797デフォルトの名無しさん (ワッチョイ 4602-BGJw)
2025/03/24(月) 23:17:27.23ID:C5SHS/Z30 Makefileについて教えてください。
ベースディレクトリにMakefileがあり、サブディレクトリは以下の構造としたいです
・src\内にhello.c func1.c func2.cが、include\内にfuncs.hがある
・*.oはobj\内に作る
・最終成果物は.\sample.exeとして作る
ソースファイル、ヘッダファイルの増減時にSRCS、INCSを修正すれば済むようにと、
以下のようなMakefileを作っているのですが、makeすると
*** No rule to make target 'obj/hello.o', needed by 'c_sample.exe'. Stop.
となってしまいます
ソースはsrc、オブジェクトはobjディレクトリとしている場合のサフィックスルールが正しくないので
src/hello.cからobj/hello.oを作るルールを表現できていない、と個人的に思っているのですが、
どのようにすれば動作するか教えてください
SRCDIR = ./src
OBJDIR = ./obj
INCDIR = ./include
SRCS = hello.c funcs1.c funcs2.c
OBJS = $(SRCS:%.c=%.o)
INCS = funcs.h
PROGRAM = c_sample.exe
CC = gcc
CFLAGS+= -g -Wall -I$(INCDIR)
.SUFFIXES: .c .o
all: $(PROGRAM)
$(PROGRAM): $(OBJDIR)/$(OBJS) $(INCDIR)/$(INCS)
$(CC) $(CFLAGS) -o $(PROGRAM) $^
.c.o:
$(CC) $(CFLAGS) -c $(SRCDIR)/$<
ベースディレクトリにMakefileがあり、サブディレクトリは以下の構造としたいです
・src\内にhello.c func1.c func2.cが、include\内にfuncs.hがある
・*.oはobj\内に作る
・最終成果物は.\sample.exeとして作る
ソースファイル、ヘッダファイルの増減時にSRCS、INCSを修正すれば済むようにと、
以下のようなMakefileを作っているのですが、makeすると
*** No rule to make target 'obj/hello.o', needed by 'c_sample.exe'. Stop.
となってしまいます
ソースはsrc、オブジェクトはobjディレクトリとしている場合のサフィックスルールが正しくないので
src/hello.cからobj/hello.oを作るルールを表現できていない、と個人的に思っているのですが、
どのようにすれば動作するか教えてください
SRCDIR = ./src
OBJDIR = ./obj
INCDIR = ./include
SRCS = hello.c funcs1.c funcs2.c
OBJS = $(SRCS:%.c=%.o)
INCS = funcs.h
PROGRAM = c_sample.exe
CC = gcc
CFLAGS+= -g -Wall -I$(INCDIR)
.SUFFIXES: .c .o
all: $(PROGRAM)
$(PROGRAM): $(OBJDIR)/$(OBJS) $(INCDIR)/$(INCS)
$(CC) $(CFLAGS) -o $(PROGRAM) $^
.c.o:
$(CC) $(CFLAGS) -c $(SRCDIR)/$<
798797 (ワッチョイ 4602-BGJw)
2025/03/24(月) 23:24:39.28ID:C5SHS/Z30 すいません、タブが崩れました
下の方ですが、全角スペースで記載してますが
$(PROGRAM): $(OBJDIR)/$(OBJS) $(INCDIR)/$(INCS)
$(CC) $(CFLAGS) -o $(PROGRAM) $^
.c.o:
$(CC) $(CFLAGS) -c $(SRCDIR)/$<
こうです
申し訳ありませんでした
下の方ですが、全角スペースで記載してますが
$(PROGRAM): $(OBJDIR)/$(OBJS) $(INCDIR)/$(INCS)
$(CC) $(CFLAGS) -o $(PROGRAM) $^
.c.o:
$(CC) $(CFLAGS) -c $(SRCDIR)/$<
こうです
申し訳ありませんでした
799Fish (ワッチョイ 652f-MaZR)
2025/03/25(火) 02:35:59.65ID:3npSY7mr0 OpenCVについての質問です。VS2022を使用し、includeやopencv_world4100d.libの設定が終わり、検証のためにMatを宣言してimread、imshowのみを書いて検証しようとしたのですが、dllの設定がうまくいってなかったのかコンソールにdllのloadがfailedと大量に出力されます。OpenCVの入れ方を教えてほしいです…まだC++初心者で5チャンの投稿も初心者なので何か変だったらすみません…
800デフォルトの名無しさん (アウアウウー Saa5-WcQO)
2025/03/25(火) 04:37:37.58ID:ztarSHRBa801デフォルトの名無しさん (ワッチョイ 9901-Awih)
2025/03/25(火) 12:24:02.95ID:sbXkgTme0 >>799
exeと同じディレクトリにloadがfailedと言われるdll置いてみたら?
exeと同じディレクトリにloadがfailedと言われるdll置いてみたら?
802デフォルトの名無しさん (ワッチョイ 6e6c-JaxA)
2025/03/26(水) 11:17:13.88ID:ZFGsgZnF0 Makefileを作る時の$<と$?と$^の使い分けを教えて下さい
特に$<が何のためにあるのか分かりません。これだと2番目以降の材料が無視されてしまって動かない場合があるんじゃないかと心配になります。あと、makeは常に新しい材料のみコンパイルするという事は、すべてのケースで$?で良いのではと思ってしまいます。超初歩的な質問だと思いますがよろしくお願いします
特に$<が何のためにあるのか分かりません。これだと2番目以降の材料が無視されてしまって動かない場合があるんじゃないかと心配になります。あと、makeは常に新しい材料のみコンパイルするという事は、すべてのケースで$?で良いのではと思ってしまいます。超初歩的な質問だと思いますがよろしくお願いします
803デフォルトの名無しさん (ワッチョイ 6518-hacg)
2025/03/26(水) 13:48:44.59ID:GrIMF1MA0 C言語だとオブジェクトファイルの依存ファイルは,cファイルとそのcファイルが使うhファイルだけどコンパイルするのはあくまでcファイルだけ
だから依存関係の1つ目にcファイルを,2個目以降にhファイルを書いておけば$<でコンパイルできる
とかかな
だから依存関係の1つ目にcファイルを,2個目以降にhファイルを書いておけば$<でコンパイルできる
とかかな
804デフォルトの名無しさん (アウアウウー Saa5-WcQO)
2025/03/26(水) 15:00:53.93ID:NpEBbPpga805デフォルトの名無しさん (ワッチョイ 6232-bZOK)
2025/03/26(水) 15:48:44.68ID:OM1iPrvu0 >>797
基本的にサフィックスルールは何十年も前からobsolete扱いなのでやめた方が良い
基本的にサフィックスルールは何十年も前からobsolete扱いなのでやめた方が良い
806はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 09fa-p0tU)
2025/03/26(水) 20:50:04.73ID:cSMtN3B/0 ところでこの場合の makefile の話は GNU Make を前提にするということでええんか?
807797 (ワッチョイ 4602-BGJw)
2025/03/26(水) 22:53:57.57ID:dm/+cX2j0 皆さんいろいろと情報をどうもです
結局、以下のようなものと落ち着いてます
ちなみに使ってる環境のmakeはGNU Make 4.4で、GNU Makeの機能を多用してます
「$(OBJDIR)%.o: $(SRCDIR)%.c」と書ける理由は、pattern rulesという機能なのですかね
ここをforeachとかで書こうとしてましたが、これでいけると聞き、書いてみたら動いたのでもうそのままです
以外に汎用性が出そうだと感じてますが、改良点があればまたご意見ほしいです
PROGRAM = c_sample.exe
SRCDIR = ./src/
OBJDIR = ./obj/
INCDIR = ./include/
SRCS = $(wildcard ${SRCDIR}*.c)
OBJS = $(addprefix $(OBJDIR), $(notdir $(patsubst %.c, %.o, ${SRCS})))
INCS = $(wildcard ${INCDIR}*.h)
CC = gcc
CFLAGS += -g -Wall -I$(INCDIR)
all: $(PROGRAM)
$(PROGRAM): $(OBJS)
$(CC) $(CFLAGS) -o $(PROGRAM) $^
$(OBJDIR)%.o: $(SRCDIR)%.c $(INCS) Makefile
$(CC) $(CFLAGS) -c $< -o $(patsubst $(SRCDIR)%, $(OBJDIR)%, $@)
結局、以下のようなものと落ち着いてます
ちなみに使ってる環境のmakeはGNU Make 4.4で、GNU Makeの機能を多用してます
「$(OBJDIR)%.o: $(SRCDIR)%.c」と書ける理由は、pattern rulesという機能なのですかね
ここをforeachとかで書こうとしてましたが、これでいけると聞き、書いてみたら動いたのでもうそのままです
以外に汎用性が出そうだと感じてますが、改良点があればまたご意見ほしいです
PROGRAM = c_sample.exe
SRCDIR = ./src/
OBJDIR = ./obj/
INCDIR = ./include/
SRCS = $(wildcard ${SRCDIR}*.c)
OBJS = $(addprefix $(OBJDIR), $(notdir $(patsubst %.c, %.o, ${SRCS})))
INCS = $(wildcard ${INCDIR}*.h)
CC = gcc
CFLAGS += -g -Wall -I$(INCDIR)
all: $(PROGRAM)
$(PROGRAM): $(OBJS)
$(CC) $(CFLAGS) -o $(PROGRAM) $^
$(OBJDIR)%.o: $(SRCDIR)%.c $(INCS) Makefile
$(CC) $(CFLAGS) -c $< -o $(patsubst $(SRCDIR)%, $(OBJDIR)%, $@)
809デフォルトの名無しさん (ワッチョイ 9901-Awih)
2025/03/27(木) 00:00:17.61ID:KC9fXGxH0 汎用するのならautotoolsを使った方が良いのでは?
810はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-p0tU)
2025/03/27(木) 01:07:35.19ID:gbE/Uiq80 拡張子に exe がついてるということはウィンドウズを想定してるんじゃないの?
cygwin とか msys2 とかだと autotools を入れるのは簡単だけどそうじゃないならめんどいかも。
cygwin とか msys2 とかだと autotools を入れるのは簡単だけどそうじゃないならめんどいかも。
811デフォルトの名無しさん (ワッチョイ 06b2-xG3a)
2025/03/27(木) 02:03:57.32ID:eJjdVc1D0 普通cmakeでしょ
好きじゃないけど
好きじゃないけど
812デフォルトの名無しさん (ワッチョイ 6262-bZOK)
2025/03/27(木) 08:24:51.71ID:8EB6UmzB0813デフォルトの名無しさん (ワッチョイ 9901-Awih)
2025/03/27(木) 09:16:55.35ID:KC9fXGxH0 makeスレなくなったね
814デフォルトの名無しさん (ワッチョイ 9901-Awih)
2025/03/27(木) 10:58:28.75ID:KC9fXGxH0 ないと思ったらUNIX板だったようだ
815デフォルトの名無しさん (ワッチョイ 4202-rYal)
2025/03/27(木) 14:55:01.12ID:OeqyroTj0816デフォルトの名無しさん (ワッチョイ 4279-Br5P)
2025/03/27(木) 18:38:06.75ID:bm95RmrL0 ノーマルスーツを着ろシャア
817デフォルトの名無しさん (アウアウウー Saa5-WcQO)
2025/03/28(金) 12:58:29.90ID:VPiwRdmLa818デフォルトの名無しさん (ワッチョイ 6ea1-pnyl)
2025/04/06(日) 00:01:49.29ID:xzDebXnC0 質問なのですが基底クラスでpublicとした仮想関数の可視性を派生クラスでprivateに狭めることができるのですが
なんでこんな仕様なの?
これは逆に言うと派生クラスでprivateとした一般メソッドに対し、
たまたま同じシグネチャの仮想関数を基底クラスで定義されたら基底クラス経由でprivateとしたメソッドを外部から呼び出せ
てしまいカプセル化の危機……!
そういう仕様になっているメリットとは一体……
なんでこんな仕様なの?
これは逆に言うと派生クラスでprivateとした一般メソッドに対し、
たまたま同じシグネチャの仮想関数を基底クラスで定義されたら基底クラス経由でprivateとしたメソッドを外部から呼び出せ
てしまいカプセル化の危機……!
そういう仕様になっているメリットとは一体……
819デフォルトの名無しさん (ワッチョイ 4587-wZYf)
2025/04/06(日) 07:42:00.02ID:xouJqKec0 前者は仮想関数を派生クラス経由で呼べないように出来る
というか派生のコンストラクタをprivateにして、friend指定したcreatorクラス経由でしか生成出来ないようにするとかそういうのに便利
あと後者は、試してないけど派生の同シグネチャの関数は基底経由で呼べないと思うよ、vtblに登録されてないから
というか派生のコンストラクタをprivateにして、friend指定したcreatorクラス経由でしか生成出来ないようにするとかそういうのに便利
あと後者は、試してないけど派生の同シグネチャの関数は基底経由で呼べないと思うよ、vtblに登録されてないから
820デフォルトの名無しさん (ワッチョイ 45f5-pnlG)
2025/04/06(日) 08:51:38.89ID:2WEREMbe0 継承に関しては早すぎる最適化の問題もあるから、そのまま使うんじゃなくてアダプタに切り離した方がいいと思う。
Boostあたりにアダプタ用のライブラリないかしらん。
Boostあたりにアダプタ用のライブラリないかしらん。
821はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-nY3F)
2025/04/06(日) 09:09:40.72ID:CSMreA7R0 >>818
コードで言えばこういう状況かな?
https://wandbox.org/permlink/gEndnLHWa7qEvNRP
基底にある仮想関数と同じシグネチャならオーバーライドするという規則は単純に言語設計の失敗。
だからこそ override 指定子が導入された。
override 指定子ではオーバーライドのつもりでオーバーライドになっていないときを検出できても
オーバーライドではないつもりでオーバーライドになってしまうことは検出できないのだが……
互換性を壊す変更を入れるわけにもいかずそのままズルズルと今まで失敗を引きずってきたという歴史的経緯。
コードで言えばこういう状況かな?
https://wandbox.org/permlink/gEndnLHWa7qEvNRP
基底にある仮想関数と同じシグネチャならオーバーライドするという規則は単純に言語設計の失敗。
だからこそ override 指定子が導入された。
override 指定子ではオーバーライドのつもりでオーバーライドになっていないときを検出できても
オーバーライドではないつもりでオーバーライドになってしまうことは検出できないのだが……
互換性を壊す変更を入れるわけにもいかずそのままズルズルと今まで失敗を引きずってきたという歴史的経緯。
822デフォルトの名無しさん (ワッチョイ 45ba-wZYf)
2025/04/06(日) 09:14:57.63ID:U2fAIE9I0 ああそっか、シグネチャ同じなら強制的にオーバーライドになるんだっけスマン
823はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-nY3F)
2025/04/06(日) 09:27:02.17ID:CSMreA7R0 意図せずオーバーライドになってしまうことがあるのは失敗だが、
意図して private でオーバーライドする分には「そういうインターフェイス」なのだからカプセル化の破綻ではないよ。
意図して private でオーバーライドする分には「そういうインターフェイス」なのだからカプセル化の破綻ではないよ。
824デフォルトの名無しさん (ワッチョイ cd7c-a/1F)
2025/04/06(日) 10:21:41.86ID:gleSakN+0 リスコフの置換原則を破るからあんまり良くはないと思うけどな
基底クラスとして振る舞わせる気がないならprivate継承すべきだ
基底クラスとして振る舞わせる気がないならprivate継承すべきだ
825デフォルトの名無しさん (ワッチョイ 6ea1-pnyl)
2025/04/06(日) 10:25:35.73ID:xzDebXnC0826デフォルトの名無しさん (ワッチョイ 6ea1-pnyl)
2025/04/06(日) 10:32:27.61ID:xzDebXnC0 んまーBaseクラスにメソッドを追加しようとする時点で変更の影響範囲を派生クラスまで広げて調査すべき
というのは正論やがコンパイラで検出可能な不都合のチェックのを人にやらせるのはイマイチ……
というのは正論やがコンパイラで検出可能な不都合のチェックのを人にやらせるのはイマイチ……
827デフォルトの名無しさん (ワッチョイ 457b-wZYf)
2025/04/06(日) 11:31:20.83ID:xouJqKec0 大抵のコンパイラで普通警告出るやろ?
828デフォルトの名無しさん (ワッチョイ bd5f-gX4K)
2025/04/06(日) 11:41:46.34ID:Qy9uUb820 純粋仮装関数でも無ければ影響無いだろ
だいいち使わない関数なら配慮する必要も無い
だいいち使わない関数なら配慮する必要も無い
829デフォルトの名無しさん (ワッチョイ bd5f-gX4K)
2025/04/06(日) 11:42:28.71ID:Qy9uUb820 全コンパイルは掛かるけどなw
830はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-nY3F)
2025/04/06(日) 11:43:04.77ID:CSMreA7R0 たとえば GCC なら -Wsuggest-override を付けておけば override 指定子なしでオーバーライドしているときを警告する。
https://wandbox.org/permlink/h6PGzqrDAAkAVeJO
だけどこのオプションは -Wall にも -Wextra にも含まれてないから個別に指定しなきゃならなくて、普段は有効になってないのが普通かも。
https://wandbox.org/permlink/h6PGzqrDAAkAVeJO
だけどこのオプションは -Wall にも -Wextra にも含まれてないから個別に指定しなきゃならなくて、普段は有効になってないのが普通かも。
831デフォルトの名無しさん (JP 0Hd1-yI6P)
2025/04/06(日) 11:54:04.73ID:4eCwmFCZH 前から思ってたけど -Wall と銘打ってるのに All じゃないとはこれいかに
832デフォルトの名無しさん (JP 0Hd1-yI6P)
2025/04/06(日) 11:54:05.20ID:4eCwmFCZH 前から思ってたけど -Wall と銘打ってるのに All じゃないとはこれいかに
833デフォルトの名無しさん (JP 0Hd1-yI6P)
2025/04/06(日) 11:54:58.77ID:4eCwmFCZH (二重投稿スマン)
834デフォルトの名無しさん (ワッチョイ 6e10-ZtHn)
2025/04/06(日) 12:20:48.70ID:JUJG8trR0 コンストラクタ呼び出しで()の時にinitializer_listを呼んでしまったときの警告と
逆に{}の時にinitializer_list以外を呼んでしまったときの警告がほしい
逆に{}の時にinitializer_list以外を呼んでしまったときの警告がほしい
835デフォルトの名無しさん (ワッチョイ f901-x8Qa)
2025/04/06(日) 12:33:44.13ID:KBEItHDk0 override指定子って初めて知ったけども-Wallで警告出るのは俺はやだな
警告が大量に出るソースばかりと思うし
警告出すほどにoverride指定子を付けるべきなのかちょっと疑問
警告が大量に出るソースばかりと思うし
警告出すほどにoverride指定子を付けるべきなのかちょっと疑問
836デフォルトの名無しさん (ワッチョイ bd5f-gX4K)
2025/04/06(日) 13:09:33.59ID:Qy9uUb820 overrideなんて飾りです
privateも飾りです
privateも飾りです
837デフォルトの名無しさん (ワッチョイ a574-CpEl)
2025/04/06(日) 15:06:13.11ID:BtyKUyO50 #define class struct
#define private public
#define protected public
すれば大体はすり抜けられる
#define private public
#define protected public
すれば大体はすり抜けられる
838はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-xzp7)
2025/04/06(日) 16:50:10.05ID:CSMreA7R0 >>837
`private` などは用途が限定的なキーワードだからそういうことも出来るけど `class` はちょっと問題があるな。
template<class T> class foo {};
みたいなのが破綻する。
`private` などは用途が限定的なキーワードだからそういうことも出来るけど `class` はちょっと問題があるな。
template<class T> class foo {};
みたいなのが破綻する。
839デフォルトの名無しさん (ササクッテロル Spd1-gX4K)
2025/04/07(月) 12:25:07.84ID:yN1PvO54p classとstructは別ものだからなぁ
840はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 696c-Uo71)
2025/04/07(月) 12:42:21.06ID:ioyUXCRU0 C++ の言語仕様的分類では構造体というものはないのだが、 C との関係の都合で微妙な形で struct キーワードは残されてしまった。
これも歴史的経緯による変なところ。
これも歴史的経緯による変なところ。
841デフォルトの名無しさん (ワッチョイ 6e10-ZtHn)
2025/04/07(月) 14:49:45.64ID:KdsoKBW+0 むしろキーワードとしてのclassがいらなかった
型は全部struct、構文の曖昧さを除くためのプレースホルダは全部typenameで良かった
型は全部struct、構文の曖昧さを除くためのプレースホルダは全部typenameで良かった
842デフォルトの名無しさん (アウアウウー Sa05-nY3F)
2025/04/07(月) 15:01:27.29ID:w0rhHNCza protectedは使った方が良いけどprivateは使いたくなるシーンがほとんど無い
843デフォルトの名無しさん (アウアウウー Sa05-nY3F)
2025/04/07(月) 15:02:24.36ID:w0rhHNCza >>841
Rust使え
Rust使え
844デフォルトの名無しさん (ワッチョイ 6e10-ZtHn)
2025/04/08(火) 02:19:24.63ID:o1kEMolW0 rustだってどうせ20年もすれば後からあーすればよかったこーすればよかった言ってるよ
845はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-Uo71)
2025/04/08(火) 07:45:44.78ID:veBTnWpR0 Rust はエディションごとに互換性が維持され、逆に言えばエディションをまたぐと互換性を損なっても良いというルール。
そして異なるエディションがひとつのプロジェクトに混在できる。
古いエディションから新しいエディションへの移行はかなり自動化されている。
最初から互換性を捨てることがありうる体制なので歴史的事情をいつまでも引きずることはない……と思うのだがこの体制でうまくいくかはやってみないとわからんね。
二十年くらいすれば結果が見えてくるだろう。
そして異なるエディションがひとつのプロジェクトに混在できる。
古いエディションから新しいエディションへの移行はかなり自動化されている。
最初から互換性を捨てることがありうる体制なので歴史的事情をいつまでも引きずることはない……と思うのだがこの体制でうまくいくかはやってみないとわからんね。
二十年くらいすれば結果が見えてくるだろう。
846デフォルトの名無しさん (ササクッテロル Spd1-gX4K)
2025/04/08(火) 09:56:44.28ID:HZL/zZFGp 開発ツールごと遺跡になって発掘される毎に解析されるんだよ
847デフォルトの名無しさん (ワッチョイ cd7c-a/1F)
2025/04/08(火) 19:53:49.89ID:S61wTbWN0 似たような仕組みは歴史上何度も再発明されて全て爆死してるし
今の所うまく行ってるように見えてるのは、まだ大して使われてない証拠でしかないっておじさんは思っちゃうよ
今の所うまく行ってるように見えてるのは、まだ大して使われてない証拠でしかないっておじさんは思っちゃうよ
848デフォルトの名無しさん (ワッチョイ bd5f-VGeA)
2025/04/10(木) 00:16:06.10ID:nvkavsn60 現在公開されている世界最速grepツールであるripgrepがRustで組んであるってのがすごい
849はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-9E30)
2025/04/10(木) 17:46:33.43ID:SlMXr4vG0 >>848
C や C++ でやってやれないことはないと思うが使えるプログラムがあるのにフルスクラッチで書きなおそうと思うことがそもそもあまり無いからね。
新しい言語が登場するという形で整理する機会が生じるのは健全な進歩だと思う。
C や C++ でやってやれないことはないと思うが使えるプログラムがあるのにフルスクラッチで書きなおそうと思うことがそもそもあまり無いからね。
新しい言語が登場するという形で整理する機会が生じるのは健全な進歩だと思う。
850デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 08:30:12.43ID:9LNHX+AUM rustで一部の高速なシステムコールが追加されたらそれを使えばC++だろうが何だろうが関係なくなる
でもどうせマルチスレッドのsimd使いなんだろうからシステム全体に過負荷になるからめんどくさい
でもどうせマルチスレッドのsimd使いなんだろうからシステム全体に過負荷になるからめんどくさい
851デフォルトの名無しさん (ワッチョイ 4694-PSZj)
2025/04/11(金) 08:37:04.65ID:5PthuDCs0 ↑何これ?w
852デフォルトの名無しさん (ワッチョイ 829f-1egp)
2025/04/11(金) 13:45:57.41ID:8HYvuWNF0 >システムコールが追加されたら
??
??
853デフォルトの名無しさん (ラクッペペ MM66-XbuE)
2025/04/11(金) 13:57:42.36ID:gEQ2gSNrM DOS「ファンクションコールと呼べ!」
854デフォルトの名無しさん (ササクッテロロ Spd1-gX4K)
2025/04/11(金) 14:31:46.86ID:2mKx2F8Up それってOS付属のランタイムをrustで書いたらって事?
855デフォルトの名無しさん (ワッチョイ 829f-1egp)
2025/04/11(金) 18:09:26.07ID:8HYvuWNF0 glibcのシステムコールラッパーみたいなものがRustにもあればってことなのかそれともsyscall命令で飛ぶカーネルのコードがRustで書かれてればってことなのか
分からんね
>>850は最近システムコールって言葉を知ったのかもしれない
分からんね
>>850は最近システムコールって言葉を知ったのかもしれない
856デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 18:48:50.71ID:qqgfnt32M なんか頭悪そうな人間がたくさん噛みついてきてるけど生産性ゼロだなとしか…
何が言いたいんだよ
お前らが単純にシステムコールを知らなかっただけだろう?
OSに対してサービスの要求するのがシステムコールだ
OSよって呼び方が違う
何が言いたいんだよ
お前らが単純にシステムコールを知らなかっただけだろう?
OSに対してサービスの要求するのがシステムコールだ
OSよって呼び方が違う
857デフォルトの名無しさん (ワッチョイ 4694-PSZj)
2025/04/11(金) 19:57:08.33ID:5PthuDCs0 ↑何を馬鹿にされてるかもわかってない
858デフォルトの名無しさん (ワッチョイ 42e6-XbuE)
2025/04/11(金) 20:02:48.75ID:S6J8cW8H0 イマドキgrepぐらいAPIで用意しとけと
859デフォルトの名無しさん (ワッチョイ cd7c-a/1F)
2025/04/11(金) 20:07:19.88ID:Yq7fRKgz0 Rustって今こんなレベル低い人間も流れ込んでるのか
そのうちJava化する運命だな
そのうちJava化する運命だな
860デフォルトの名無しさん (ワッチョイ 02ad-S7Iq)
2025/04/11(金) 20:07:35.60ID:9wDK2WuU0 >>856
そのシステムコールを提供するのはOS側であって「rustで一部の高速なシステムコールが追加されたら」ってのが意味不明だって話だぜ?
そのシステムコールを提供するのはOS側であって「rustで一部の高速なシステムコールが追加されたら」ってのが意味不明だって話だぜ?
861デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:08:42.81ID:qqgfnt32M >>857
理解不足なのはそっち
理解不足なのはそっち
862デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:09:54.47ID:qqgfnt32M863デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:14:09.35ID:qqgfnt32M システムコールはOSが提供するのは当たり前
それがRustの特性に合わせた高速化が行われていても使う側はなんでもよいと言う話がなんでわからないのか馬鹿なのかなと
それがRustの特性に合わせた高速化が行われていても使う側はなんでもよいと言う話がなんでわからないのか馬鹿なのかなと
864デフォルトの名無しさん (ワッチョイ 02ad-S7Iq)
2025/04/11(金) 20:15:15.52ID:9wDK2WuU0 >>862
「rustで一部の高速なシステムコールが追加されたら」について説明を
「rustで一部の高速なシステムコールが追加されたら」について説明を
865デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:15:47.00ID:qqgfnt32M >>864
幼稚園児なのかな?
幼稚園児なのかな?
866デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:18:14.21ID:qqgfnt32M お前らrust "に" 一部の高速なシステムコールが~ と書いてあると勘違いしたんだろ
馬鹿すぎる
システムコールが追加されるのはOSだろ
馬鹿馬鹿しい
馬鹿すぎる
システムコールが追加されるのはOSだろ
馬鹿馬鹿しい
867デフォルトの名無しさん (ワッチョイ 02ad-S7Iq)
2025/04/11(金) 20:19:44.78ID:9wDK2WuU0 つまり>>848で書かれているツールの高速性は「Rustの言語仕様や機能に依存した話ではなくOS提供のシステムコールによるものだ」と言いたいのか
ふぅ〜ん
ふぅ〜ん
868デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:20:27.06ID:qqgfnt32M >>867
幼稚園児並みの馬鹿発見
幼稚園児並みの馬鹿発見
869デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:23:13.43ID:qqgfnt32M 馬鹿発見
851 名前:デフォルトの名無しさん (ワッチョイ 4694-PSZj)[sage] 投稿日:2025/04/11(金) 08:37:04.65 ID:5PthuDCs0 [1/2]
↑何これ?w
851 名前:デフォルトの名無しさん (ワッチョイ 4694-PSZj)[sage] 投稿日:2025/04/11(金) 08:37:04.65 ID:5PthuDCs0 [1/2]
↑何これ?w
870デフォルトの名無しさん (ブーイモ MM22-PSZj)
2025/04/11(金) 20:28:30.50ID:G/OJx5+6M 連投おつかれ
知ったかぶりは恥ずかしいよね
知ったかぶりは恥ずかしいよね
871デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:29:30.23ID:qqgfnt32M サブ回線使いだすほうが恥ずかしい
872デフォルトの名無しさん (ワッチョイ cd7c-a/1F)
2025/04/11(金) 20:34:48.29ID:Yq7fRKgz0 なんだよRust界隈のお客さんじゃなくていつもの大天才様くんかよ
おもんな
おもんな
873デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:47:02.26ID:qqgfnt32M874デフォルトの名無しさん (ワッチョイ 45f2-1egp)
2025/04/11(金) 20:52:01.51ID:edOe0r2X0 ああ,自分の誤った主張を説明しようとするとボロが見えるから自分に反論してくる人にレッテル貼って誤魔化してるのか
875デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 20:55:02.66ID:qqgfnt32M それはどっちだよw
876デフォルトの名無しさん (ワッチョイ 4d3e-Vpyu)
2025/04/11(金) 21:01:06.49ID:yx7ZxPSb0 >>850
何を言っているのか全然わからん。
Rust開発者の主張は
「C/C++並に速くC/C++より安全」
だから、
「rustで一部の高速なシステムコールが追加されたらそれを使えばC++だろうが何だろうが関係なくなる」
というのが高速の話ならそりゃそうだろとしか。
Rustが違うと言っているのはそこじゃなくて、
「ビルド通ればダングリングポインタとかオーバーフローとか無いから安全だよ(safe rust なら)」
ということかと。
何を言っているのか全然わからん。
Rust開発者の主張は
「C/C++並に速くC/C++より安全」
だから、
「rustで一部の高速なシステムコールが追加されたらそれを使えばC++だろうが何だろうが関係なくなる」
というのが高速の話ならそりゃそうだろとしか。
Rustが違うと言っているのはそこじゃなくて、
「ビルド通ればダングリングポインタとかオーバーフローとか無いから安全だよ(safe rust なら)」
ということかと。
877デフォルトの名無しさん (ワッチョイ 02ad-S7Iq)
2025/04/11(金) 21:03:21.88ID:9wDK2WuU0 すぐさまサブ回線使いだすとか言う辺り、自分でもサブ回線使ってそうだよね
「rustで一部の高速なシステムコールが追加されたら」についての説明が出来ない時点でね
「rustで一部の高速なシステムコールが追加されたら」についての説明が出来ない時点でね
878デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 22:20:53.69ID:qqgfnt32M >>877
すぐ上のジジイは理解できてると言うのに…
すぐ上のジジイは理解できてると言うのに…
879デフォルトの名無しさん (ワッチョイ 02ad-S7Iq)
2025/04/11(金) 22:23:05.46ID:9wDK2WuU0 何を言われているのかも分かってないようだw
880デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 22:24:47.66ID:qqgfnt32M いやいやw
未だに
> 「rustで一部の高速なシステムコールが追加されたら」についての説明が出来ない時点でね
と言ってる時点で認知症だろ
未だに
> 「rustで一部の高速なシステムコールが追加されたら」についての説明が出来ない時点でね
と言ってる時点で認知症だろ
881デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 22:29:25.47ID:qqgfnt32M ChatGPTにさっきのメッセージ食わせてみた
回答
たしかに、Rustで高速なシステムコールが追加されて、それを直接叩けるようになれば、言語による違いはある程度意味を失いますよね。
C++でもRustでも、結局はそのシステムコールにアクセスできるかどうかでパフォーマンスの上限が決まる。
ただおっしゃる通り、高速化しようとしてマルチスレッド+SIMDをガチで使い始めると、リソースの使い方が雑になりがちで、
他プロセスにまで影響出たりするのが悩ましいところ。
特に、CPUキャッシュやメモリ帯域を食い尽くすと、システム全体が重くなって「なんかPC遅い…」ってなるやつですね。
回答
たしかに、Rustで高速なシステムコールが追加されて、それを直接叩けるようになれば、言語による違いはある程度意味を失いますよね。
C++でもRustでも、結局はそのシステムコールにアクセスできるかどうかでパフォーマンスの上限が決まる。
ただおっしゃる通り、高速化しようとしてマルチスレッド+SIMDをガチで使い始めると、リソースの使い方が雑になりがちで、
他プロセスにまで影響出たりするのが悩ましいところ。
特に、CPUキャッシュやメモリ帯域を食い尽くすと、システム全体が重くなって「なんかPC遅い…」ってなるやつですね。
882デフォルトの名無しさん (ワッチョイ 46ee-PSZj)
2025/04/11(金) 22:34:55.84ID:5PthuDCs0 恥の上塗りw
883デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 22:41:15.01ID:qqgfnt32M これぐらいの意味が取れないってどういうことなんだお前らは?
884デフォルトの名無しさん (ワッチョイ 4dd9-GhsC)
2025/04/11(金) 22:44:03.19ID:Lf3Jev+n0 cmakeでbuildするC++プロジェクトのバイナリを配布したいんだが
この場合生成されたbinディレクトリを抜き出せばいいんでしょうか?
こういうことは初めてでよくわかりません
この場合生成されたbinディレクトリを抜き出せばいいんでしょうか?
こういうことは初めてでよくわかりません
885デフォルトの名無しさん (ワッチョイ 46ee-PSZj)
2025/04/11(金) 22:47:45.89ID:5PthuDCs0 ChatGPTを使うにも知識と知恵がいるんだよ
バカは質問の仕方が下手
---
「Rustでシステムコールを追加する」という表現は 文脈によっては誤解を招きやすく、通常の意味では少し不適切 です
1. Rustで書かれたOSの中に、新たなシステムコールを実装する
→ 例:Rust製OS(例:Redox OSなど)にsyscallを加える。
→ この場合は正しい文脈。
2. Rustでカーネルモジュールを書いてシステムコールを追加する
→ 実現可能だがLinuxでは一般的ではなく、安全性に注意が必要。
3. RustでOSとやりとりするAPIを自作して、それを便宜的に「システムコール」と呼んだ
→ 厳密には誤用。OSレベルの syscall とは異なる。
バカは質問の仕方が下手
---
「Rustでシステムコールを追加する」という表現は 文脈によっては誤解を招きやすく、通常の意味では少し不適切 です
1. Rustで書かれたOSの中に、新たなシステムコールを実装する
→ 例:Rust製OS(例:Redox OSなど)にsyscallを加える。
→ この場合は正しい文脈。
2. Rustでカーネルモジュールを書いてシステムコールを追加する
→ 実現可能だがLinuxでは一般的ではなく、安全性に注意が必要。
3. RustでOSとやりとりするAPIを自作して、それを便宜的に「システムコール」と呼んだ
→ 厳密には誤用。OSレベルの syscall とは異なる。
886デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 22:54:08.95ID:qqgfnt32M >>885
自分では意味が取れなかったんだろ?ただの馬鹿自慢だろ?
自分では意味が取れなかったんだろ?ただの馬鹿自慢だろ?
887デフォルトの名無しさん (ワッチョイ 46ee-PSZj)
2025/04/11(金) 22:56:17.51ID:5PthuDCs0 ほんとこいつ頭悪いw
どうバカにされたかも理解できない
どうバカにされたかも理解できない
888デフォルトの名無しさん (オイコラミネオ MM95-exh5)
2025/04/11(金) 22:57:06.69ID:qqgfnt32M889デフォルトの名無しさん (JP 0H66-GhsC)
2025/04/11(金) 23:09:03.39ID:FTY9KFp+H cpack使えばいいのか
自己解決
自己解決
890デフォルトの名無しさん (ワッチョイ 0620-9hLw)
2025/04/12(土) 01:43:37.04ID:wegzxSOP0891デフォルトの名無しさん (ワッチョイ 2287-Q+wk)
2025/04/12(土) 02:47:01.21ID:8WRtHLwQ0 ミネオ大先生! 随分とカジュアルな言葉遣いになられたんですね
892デフォルトの名無しさん (ワッチョイ 4597-Vpyu)
2025/04/12(土) 06:55:20.32ID:9PpTsBpz0893デフォルトの名無しさん (ワッチョイ cd7c-a/1F)
2025/04/12(土) 08:18:10.89ID:O9vZbYm90 天才様くんは次に「俺様の天才的レスが理解できない白痴ばかりだな」と言い出す
相手するだけ無駄
相手するだけ無駄
894デフォルトの名無しさん (ササクッテロロ Spd1-gX4K)
2025/04/12(土) 08:50:38.72ID:7ueEveVip つまり、OSをrustで書き換えたらって話かなぁ?
895デフォルトの名無しさん (ワッチョイ 22f0-VGeA)
2025/04/12(土) 09:06:55.53ID:KALSJULX0 それ、なんか嫌じゃね?w
896デフォルトの名無しさん (ワッチョイ 6e39-N10g)
2025/04/12(土) 09:17:59.45ID:C5glPX3o0 こっちこい
結局C++とRustってどっちが良いの? 9traits
https://mevius.5ch.net/test/read.cgi/tech/1701997063/
こっちもみてるから、このスレが伸びたのかとおもうたわw
結局C++とRustってどっちが良いの? 9traits
https://mevius.5ch.net/test/read.cgi/tech/1701997063/
こっちもみてるから、このスレが伸びたのかとおもうたわw
897デフォルトの名無しさん (ラクッペペ MM66-XbuE)
2025/04/12(土) 09:34:56.96ID:VGLNjbvdM 24H2の売りはrustで書き換えたってとこだろ
グダグダだけど
グダグダだけど
898デフォルトの名無しさん (ワッチョイ 22f0-VGeA)
2025/04/12(土) 09:39:06.01ID:KALSJULX0 バカ矯正用言語だからな
899デフォルトの名無しさん (ワッチョイ ae21-xzp7)
2025/04/12(土) 12:41:18.56ID:tVJvX2Kc0 Rustは生メモリを扱えなくしてスマートポインタしか使えないので安全だって聞いたけど
900デフォルトの名無しさん (ワッチョイ fefb-Upwm)
2025/04/12(土) 15:12:38.91ID:50hOhfEU0 単純化すると「高速なAPIを呼ぶようにすればどんな言語でも高速になる」ってことだろ?
そりゃそうだろとしか思えんよな
話の肝は、「その言語で高速に組んだこと」だと思うのに
あれだろ、一番速い車の話しているときに「どんな車でも速い車に載せれば早くなれる」って言っているようなものだよな
知らんけど
そりゃそうだろとしか思えんよな
話の肝は、「その言語で高速に組んだこと」だと思うのに
あれだろ、一番速い車の話しているときに「どんな車でも速い車に載せれば早くなれる」って言っているようなものだよな
知らんけど
901デフォルトの名無しさん (ササクッテロロ Spd1-gX4K)
2025/04/12(土) 15:25:35.11ID:X5lME/jLp ハンドラを高速にしたって秒間何千回とか頻繁に呼んでるのでも無きゃ全体の処理速度は体感出来ないだろうに
902デフォルトの名無しさん (ラクッペペ MM66-XbuE)
2025/04/12(土) 16:44:12.03ID:VGLNjbvdM パワステの無いハンドル握ったこと無いんだろうなぁ
903デフォルトの名無しさん (ワッチョイ fefb-Upwm)
2025/04/12(土) 17:11:32.63ID:50hOhfEU0 >>901
でも850は大半をシステムコールに頼ってる感じで言ってる気がするんだよな
そうでなきゃメインプログラム(呼び出し元の意)が足を引っ張るから、全体のスループットは下がるってわかるはずだし
なんなら、データを渡せば全部やってくれて結果を受けとるだけ、ぐらいに思ってる気がしないでもない
でも850は大半をシステムコールに頼ってる感じで言ってる気がするんだよな
そうでなきゃメインプログラム(呼び出し元の意)が足を引っ張るから、全体のスループットは下がるってわかるはずだし
なんなら、データを渡せば全部やってくれて結果を受けとるだけ、ぐらいに思ってる気がしないでもない
904デフォルトの名無しさん (ワッチョイ 6ea1-pnyl)
2025/04/12(土) 19:49:48.77ID:ctMpwM2A0905デフォルトの名無しさん (ワッチョイ 6ea1-pnyl)
2025/04/12(土) 19:51:48.08ID:ctMpwM2A0 ひょっとしたらRustで書かれたRedoxはメチャクチャ速いのかもしれん……
906デフォルトの名無しさん (オッペケ Srd1-N10g)
2025/04/12(土) 20:47:35.95ID:Kq/N9vBkr907デフォルトの名無しさん (ワッチョイ 6ea1-pnyl)
2025/04/12(土) 21:04:16.73ID:ctMpwM2A0908デフォルトの名無しさん (ブーイモ MM22-PSZj)
2025/04/12(土) 21:23:50.46ID:laBjQjoGM909デフォルトの名無しさん (ワッチョイ 6e39-N10g)
2025/04/12(土) 23:26:15.15ID:C5glPX3o0 Cよりは「うまく」かけるけど、C++ほど「凝らずに」書けるのは、いいことのはず
Linusが、C++はボロクソ言ってNGしたが、Rustにはゴーサイン出したのは、そういうことだと思ってる
(念のために・後学のためにいっとくが、LinusはC++について、ユーザランドでは好きにしたらいいとも言ったはず)
Linusが、C++はボロクソ言ってNGしたが、Rustにはゴーサイン出したのは、そういうことだと思ってる
(念のために・後学のためにいっとくが、LinusはC++について、ユーザランドでは好きにしたらいいとも言ったはず)
910デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 00:04:43.19ID:cgsGBgQOM >>908
並列化
並列化
911デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 00:06:07.15ID:cgsGBgQOM 最初に書いたことは一切特別なことは書いてない
小学生でも流すような内容で当たり前の当たり前
それをアホが勘違いして騒いでいる
小学生でも流すような内容で当たり前の当たり前
それをアホが勘違いして騒いでいる
912デフォルトの名無しさん (ワッチョイ 5ff0-8xdJ)
2025/04/13(日) 00:11:33.04ID:YJSdSOOz0 Linusが昔触ったC++コンパイラの出来が最悪でキレ散らかした
要するにC++の仕様が悪いわけではなくて当時のg++の出来の悪さに嫌気をさしてC++を触らなくなった
どっちにしろバカに危ういコードを書かせないようにするセーフティ機構を導入したところでバカがコーディングしている時点で22H2も史上最悪の大型アプデで終わってるワケなんだがな
要するにC++の仕様が悪いわけではなくて当時のg++の出来の悪さに嫌気をさしてC++を触らなくなった
どっちにしろバカに危ういコードを書かせないようにするセーフティ機構を導入したところでバカがコーディングしている時点で22H2も史上最悪の大型アプデで終わってるワケなんだがな
913デフォルトの名無しさん (ワッチョイ 5ff0-8xdJ)
2025/04/13(日) 00:12:54.40ID:YJSdSOOz0 まちげーた
×22H2 〇24H2
どっちにしろセンスのないやつに触らせたら終わる罠
×22H2 〇24H2
どっちにしろセンスのないやつに触らせたら終わる罠
914デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 00:14:13.66ID:cgsGBgQOM C++は継承があるからコードが追い辛いとかそんな理由だろう
cだと関数はその点簡潔に挙動が追いやすい
cだと関数はその点簡潔に挙動が追いやすい
915はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2732-u90l)
2025/04/13(日) 00:48:59.24ID:PZbFvNAM0 >>909
抽象化モデルが非効率だったと何年もたってから発覚したときにはそのモデルに依存しきっていて全体の書き直ししか修正しようがないということをリーナスは書いている。
プログラムを凝らずに書けることが良いというよりは、凝ったプログラムが柔軟性がない (修正しにくい) ことを問題視してるように見える。
実行効率はやってみないとわからん場合もあるし事情が変わる場合もあるから、ある時点で設計として真っ当であってもずっとそうだとは限らんのだな。
抽象化モデルが非効率だったと何年もたってから発覚したときにはそのモデルに依存しきっていて全体の書き直ししか修正しようがないということをリーナスは書いている。
プログラムを凝らずに書けることが良いというよりは、凝ったプログラムが柔軟性がない (修正しにくい) ことを問題視してるように見える。
実行効率はやってみないとわからん場合もあるし事情が変わる場合もあるから、ある時点で設計として真っ当であってもずっとそうだとは限らんのだな。
916はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2732-u90l)
2025/04/13(日) 01:02:02.66ID:PZbFvNAM0 一度しか呼ばれないような関数は書かない (関数としてくくり出さない) とかいう方針の有名なプロジェクトがあったような気がするんだが、なんだったかわかる人はいる?
細部の処理の追いやすさとしてはそのほうが見通しがよいという論で、なるほどそういう考え方もあるんだなーと面白く思った記憶がある。
細部の処理の追いやすさとしてはそのほうが見通しがよいという論で、なるほどそういう考え方もあるんだなーと面白く思った記憶がある。
917デフォルトの名無しさん (ワッチョイ bf98-wr60)
2025/04/13(日) 01:35:44.56ID:b1PigeDH0918デフォルトの名無しさん (ワッチョイ bf02-ngEE)
2025/04/13(日) 01:36:41.03ID:wr7CGYg/0 >>916
有名なというと、デビット・カトラーのNTカーネル開発ではなかったか
逆に、「関数は30行以内」だったかなルールが採用されており、
普通に描いたら40行とか行ってしまう関数を、25行ずつの呼び出し元関数と呼び出し先関数に
書き換えられることが頻繁にあった、というので有名だったのはFileMakerだったかな
有名なというと、デビット・カトラーのNTカーネル開発ではなかったか
逆に、「関数は30行以内」だったかなルールが採用されており、
普通に描いたら40行とか行ってしまう関数を、25行ずつの呼び出し元関数と呼び出し先関数に
書き換えられることが頻繁にあった、というので有名だったのはFileMakerだったかな
919デフォルトの名無しさん (ワッチョイ 6797-0Spt)
2025/04/13(日) 06:32:10.84ID:Aq/uJRNv0 Rust見て羨ましいと思ったのはスタックフレーム重視の言語設計かね。
効率化の観点からは入れ子構造・スタック構造が優れているんだから、スタックを崩す例外とかgotoは廃止してほしい。
あとスタックにある自動変数は関数呼び出しが乱れない限り存在が保証されるんだから、自動変数の参照しか受け付けない仮変数も欲しいところ。スマートポインタの参照は効率的だし、もっと安全に使えるようにしてほしい。
効率化の観点からは入れ子構造・スタック構造が優れているんだから、スタックを崩す例外とかgotoは廃止してほしい。
あとスタックにある自動変数は関数呼び出しが乱れない限り存在が保証されるんだから、自動変数の参照しか受け付けない仮変数も欲しいところ。スマートポインタの参照は効率的だし、もっと安全に使えるようにしてほしい。
920デフォルトの名無しさん (ワッチョイ 7fa1-0ra6)
2025/04/13(日) 10:18:45.93ID:MoeuBZp20 アイタタタ……つ∀`;)
921デフォルトの名無しさん (ワッチョイ 07ad-GZf5)
2025/04/13(日) 10:31:02.45ID:K92VhJDO0 例外はもう実行が続けられないんだからスタックが壊れても問題ない
それよりも、単なるエラーを例外として実装したコードが多いのが問題
std::optional など使え
それよりも、単なるエラーを例外として実装したコードが多いのが問題
std::optional など使え
922デフォルトの名無しさん (スフッ Sd7f-g0pP)
2025/04/13(日) 10:42:06.37ID:3fI5Pb+md >>916
emacs
emacs
923デフォルトの名無しさん (ワッチョイ 7fa1-0ra6)
2025/04/13(日) 10:48:07.97ID:MoeuBZp20 >>921
ヒエッツ……、、、例外とスタックの関係について誤解が見受けられる……
例外発生時はスタックをアンワインドしてくれられるので(構築済みの)自動オブジェクトは解放される
もっとも救われるのはそれだけなので無神経なコーディングをしているとリソースリークがほとんど避けられないが
ヒエッツ……、、、例外とスタックの関係について誤解が見受けられる……
例外発生時はスタックをアンワインドしてくれられるので(構築済みの)自動オブジェクトは解放される
もっとも救われるのはそれだけなので無神経なコーディングをしているとリソースリークがほとんど避けられないが
924デフォルトの名無しさん (ワッチョイ 475f-8xdJ)
2025/04/13(日) 11:00:29.39ID:c0pIh3Hj0 今後はよく反省し「スタック」を狩野英孝のホスト物まねの口調で「スタック~」と音読するようにしなさい
925デフォルトの名無しさん (ワッチョイ 7fa1-0ra6)
2025/04/13(日) 11:02:27.24ID:MoeuBZp20 ライブラリ設計者なら一部のエラーを例外のスローとしたくなる気持ちあるある……
こんなん明らかに使う側(呼び出し元)のバグじゃねーの?!というケースまで律儀にエラー値をreturnする設計にすると
かえって全員が不幸に……
こんなん明らかに使う側(呼び出し元)のバグじゃねーの?!というケースまで律儀にエラー値をreturnする設計にすると
かえって全員が不幸に……
926デフォルトの名無しさん (ワッチョイ 7fa1-0ra6)
2025/04/13(日) 11:05:14.04ID:MoeuBZp20 ライブラリ設計ではなくて特定のアプリケーション内のアプリケーションロジックということなら
呼び出し元のバグはassert()なりで引っ掛けて十分テストするとか検出次第abort()してしまうという安直解決手はつかえまつがね……
呼び出し元のバグはassert()なりで引っ掛けて十分テストするとか検出次第abort()してしまうという安直解決手はつかえまつがね……
927デフォルトの名無しさん (ワッチョイ 277c-jwrR)
2025/04/13(日) 11:30:44.32ID:zW1FzTwb0 「C++のクソなとこを反面教師にしますた!」を標榜してる言語もだいたい例外は持ってるんだよなあ
928デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 13:17:51.55ID:cgsGBgQOM c,c++プログラマって縦に長いコード書くよね
929デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 13:24:42.29ID:cgsGBgQOM 一つの関数にずらずらそのまんま一続きの手続きを書いてる
関数の入り口でif判定の群れでその次はwhileの囲まれた深いfor
中にも数段階階層のあるif これが非常にわかりにくい
出てもif並んでて、次でまたforループとか
意味でわけようとしてないけど、上に書かれたような一度しか呼ばれない関数は書かないという方針なのかもしれない
読むのめんどくさい
関数の入り口でif判定の群れでその次はwhileの囲まれた深いfor
中にも数段階階層のあるif これが非常にわかりにくい
出てもif並んでて、次でまたforループとか
意味でわけようとしてないけど、上に書かれたような一度しか呼ばれない関数は書かないという方針なのかもしれない
読むのめんどくさい
930デフォルトの名無しさん (ワッチョイ a75f-A6GO)
2025/04/13(日) 13:31:35.49ID:wdBPVi5v0 case文とラムダ式だらけの長いコードなら見た事あるわw
931デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 13:38:49.68ID:cgsGBgQOM そういうのは仕方ないけど
関数で何らかのvectorを入力値として受け取ってまずそれの検証をしてループで何らかの処理やら分析をして特徴をリストアップ
その後それを基にまた解析して最後に出力用に整形して直接printf
ここまでが一関数で縦に並んでる
自分ならすぐ下請け関数作る
GUIなどのコンポーネントも同じでDrawLineが並んでるとかなり残念な気持ちになる
速度重視なのだろうか
自分ならDrawFrameとか対象別に関数に分けてるけど
関数で何らかのvectorを入力値として受け取ってまずそれの検証をしてループで何らかの処理やら分析をして特徴をリストアップ
その後それを基にまた解析して最後に出力用に整形して直接printf
ここまでが一関数で縦に並んでる
自分ならすぐ下請け関数作る
GUIなどのコンポーネントも同じでDrawLineが並んでるとかなり残念な気持ちになる
速度重視なのだろうか
自分ならDrawFrameとか対象別に関数に分けてるけど
932デフォルトの名無しさん (アウアウウー Sacb-gg6d)
2025/04/13(日) 13:42:08.58ID:4yNzrwxra933はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2732-gGXF)
2025/04/13(日) 14:08:52.79ID:PZbFvNAM0 ラダー図や状態遷移図などの形で設計してからコードに落とし込むような場合は愚直にダラダラと書いたほうが良いということもある。
元の設計図と一対一に対応するから。
理解するために読む必要があるならそのときに見るのはコードではなく設計図だから見通しの悪さは問題にならない。
一見してコードがクソなように見えても工程全体を見ないと妥当性はわからない。
わからないけど大体の場合にはクソなのが現実ではあるだろうけどさ。
元の設計図と一対一に対応するから。
理解するために読む必要があるならそのときに見るのはコードではなく設計図だから見通しの悪さは問題にならない。
一見してコードがクソなように見えても工程全体を見ないと妥当性はわからない。
わからないけど大体の場合にはクソなのが現実ではあるだろうけどさ。
934デフォルトの名無しさん (ワッチョイ a75f-A6GO)
2025/04/13(日) 14:12:51.06ID:wdBPVi5v0 if文のネストは2段まで
case文内は3行まで
1行は80文字以内
とかコーディングルールがあるはず
case文内は3行まで
1行は80文字以内
とかコーディングルールがあるはず
935デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 14:20:23.68ID:cgsGBgQOM いい悪いじゃなくて本当に縦に長い
見づらい
2画面上のwhileループ前なんて見たくない
見づらい
2画面上のwhileループ前なんて見たくない
936デフォルトの名無しさん (ワッチョイ 7f10-W6ws)
2025/04/13(日) 14:24:13.96ID:Mc7Qy6UQ0 書いたステップ数で会社での評定が決まるのだから短く簡潔に書くのは大損
徹底的にだらだら冗長に書いて行数を増やすべき
自分を大事に!自分を第一に!
徹底的にだらだら冗長に書いて行数を増やすべき
自分を大事に!自分を第一に!
937デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/13(日) 14:25:22.49ID:cgsGBgQOM それだったら関数に分けたほうが稼げる気がするけど
938デフォルトの名無しさん (ワッチョイ 277c-jwrR)
2025/04/13(日) 14:43:21.80ID:zW1FzTwb0 大昔や一部の組み込みみたいなスタックや関数呼び出しのコストが重い世界だと
余分な関数書くな全部main()に納めろみたいな文化もある
余分な関数書くな全部main()に納めろみたいな文化もある
939デフォルトの名無しさん (ワッチョイ a75f-A6GO)
2025/04/13(日) 14:45:54.31ID:wdBPVi5v0 >>938
ワンチップマイコンとかかなぁ
ワンチップマイコンとかかなぁ
940デフォルトの名無しさん (アウアウウー Sacb-gg6d)
2025/04/13(日) 15:14:08.46ID:4yNzrwxra stack8段しかないとかならそうなるわね
941デフォルトの名無しさん (ワッチョイ 2781-0Spt)
2025/04/13(日) 21:40:21.31ID:ui4bTaon0 基本はdon't repeat yourselfかね。
繰り返しで無いのなら縦長のブロックも許容できる。
繰り返しで無いのなら縦長のブロックも許容できる。
942デフォルトの名無しさん (ワッチョイ bf1a-wr60)
2025/04/13(日) 22:13:41.04ID:b1PigeDH0 コンテキストの量にもよるよな
高速化の結果複雑なコンテキストになること多いけど、そうなると関数分けが難しくなる
高速化の結果複雑なコンテキストになること多いけど、そうなると関数分けが難しくなる
943はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2732-u6Dv)
2025/04/15(火) 09:57:20.08ID:jku5RD3N0 極端にリソースが制限されているマイコンの場合はそもそも C や C++ が適した選択肢なのかどうかという疑問がある。
どうせインラインアセンブラまみれになるのだし、いっそマクロアセンブラのほうが見通しが良い気がするよ。
どうせインラインアセンブラまみれになるのだし、いっそマクロアセンブラのほうが見通しが良い気がするよ。
944デフォルトの名無しさん (ワッチョイ 5f11-gGXF)
2025/04/15(火) 11:01:48.32ID:l4YFawe/0 【脳科学】「政治行動の激しさ」に関連する脳回路の存在が研究で判明 [すらいむ★]
http://egg.5ch.net/test/read.cgi/scienceplus/1744637408/
上記のリンクをたどったリンク先の本文とコメントを読まれると・・・
余裕ありますか・・・
大々的にインターネット上にばらまかれました!
http://egg.5ch.net/test/read.cgi/scienceplus/1744637408/
上記のリンクをたどったリンク先の本文とコメントを読まれると・・・
余裕ありますか・・・
大々的にインターネット上にばらまかれました!
945デフォルトの名無しさん (ワッチョイ 7f10-3hik)
2025/04/15(火) 11:31:51.94ID:vVagySV10946デフォルトの名無しさん (ワッチョイ ff1d-NDjU)
2025/04/15(火) 20:44:04.00ID:WjK3uBtU0 contractsのこと言ってるのなら単なるassertの別記法ではないぞい
947デフォルトの名無しさん (ワッチョイ ff3d-/z+w)
2025/04/17(木) 00:57:26.62ID:TtQSF/vr0 >>923
ヒープ領域はどうなんの?
ヒープ領域はどうなんの?
948デフォルトの名無しさん (ワッチョイ bfa4-wr60)
2025/04/17(木) 01:00:09.35ID:A9DKvgPb0 >>947
生ポ使う方が悪い
生ポ使う方が悪い
949はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2732-u6Dv)
2025/04/17(木) 01:58:20.90ID:IaMMIkKx0 リソースの後始末はデストラクタでやる (スマートポインタの利用を含む) ように設計するのが基本ではあるが……。
どうしてもそうできない事情があるなら後始末が必要な場所で例外を一旦キャッチすればいい。
例外が投げられるのは例外が投げられるような状況に対処させるためだ。
対処が必要な箇所でキャッチするというシンプルな話だろ。
どうしてもそうできない事情があるなら後始末が必要な場所で例外を一旦キャッチすればいい。
例外が投げられるのは例外が投げられるような状況に対処させるためだ。
対処が必要な箇所でキャッチするというシンプルな話だろ。
950デフォルトの名無しさん (ワッチョイ f196-4ocp)
2025/04/20(日) 16:24:04.18ID:Eo/IXC4V0 MCPって面白そうだけどもC++のSDKってないんだな
ラッパーとかないんかな?
ラッパーとかないんかな?
951デフォルトの名無しさん (ワッチョイ b670-qtpD)
2025/04/21(月) 09:32:27.45ID:W4eIGfRa0 MCPは単なるJSON-RPCだから仕様書とスキーマをAIに突っ込めばすぐできるでしょ
MCPサーバーなんてどうせAI丸投げで実装させるのが基本だし、
速度も完全にIOとLLMがボトルネックだから、わざわざC++で実装しようなどという奴はいないのだろう
MCPサーバーなんてどうせAI丸投げで実装させるのが基本だし、
速度も完全にIOとLLMがボトルネックだから、わざわざC++で実装しようなどという奴はいないのだろう
952青木康善 (アウアウウー Sa21-0ulL)
2025/04/21(月) 20:22:54.72ID:ArvlOry0a reasonというソフトのrack extentionを作りたいです。
953青木康善 (アウアウウー Sa21-0ulL)
2025/04/21(月) 20:23:58.17ID:ArvlOry0a javaの鉄則、では、goto文は使うな!と書いてましたが、皆さんどうっすか?
954デフォルトの名無しさん (ワッチョイ 797c-ixHo)
2025/04/21(月) 20:40:44.85ID:NUGisEOi0 Dijkstra先生の例の論文でも読んでこい
955はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-imSP)
2025/04/21(月) 21:41:22.47ID:++xqwTI40 >>953
防災設備みたいなものだ。
使わないで済むほうが良いけど必要なときに避けようとすれば被害が大きくなる。
だけど goto は使わないで済むときに使ってしまうと更に被害が出る。
なので自分の判断に自信がないなら教条的に goto を避けたほうが全体としては比較的にマシなんだよ。
そもそも状況が理想的でないことも多いのだから理想通りにプログラムを構成できなくても仕方がない。
もうぐちゃぐちゃになってるものでもどうにかしなきゃならないときはあるだろ。
防災設備みたいなものだ。
使わないで済むほうが良いけど必要なときに避けようとすれば被害が大きくなる。
だけど goto は使わないで済むときに使ってしまうと更に被害が出る。
なので自分の判断に自信がないなら教条的に goto を避けたほうが全体としては比較的にマシなんだよ。
そもそも状況が理想的でないことも多いのだから理想通りにプログラムを構成できなくても仕方がない。
もうぐちゃぐちゃになってるものでもどうにかしなきゃならないときはあるだろ。
956デフォルトの名無しさん (ワッチョイ f969-3oCd)
2025/04/21(月) 22:36:31.36ID:amcA96LQ0 >>953
プログラミングにおいて再帰は最も重要な構造であり、C++もスタックフレームやASTなど再帰的な構造を暗黙の了解として成り立っている。
しかしgotoはこの再帰構造を容易く破壊してプログラムに混沌をもたらす。よってgotoは使ってはならない。
プログラミングにおいて再帰は最も重要な構造であり、C++もスタックフレームやASTなど再帰的な構造を暗黙の了解として成り立っている。
しかしgotoはこの再帰構造を容易く破壊してプログラムに混沌をもたらす。よってgotoは使ってはならない。
957デフォルトの名無しさん (ワッチョイ b501-4ocp)
2025/04/21(月) 23:23:45.99ID:7ucDJhu90958デフォルトの名無しさん (ブーイモ MM3e-N74K)
2025/04/22(火) 07:13:32.77ID:UYuDPI7gM gotoが駄目ならlongjmpを使えば良いじゃない by マリー
959デフォルトの名無しさん (ワッチョイ 8af0-pFs9)
2025/04/22(火) 08:22:15.23ID:oDpGVZXg0 setjmp/longjmpをANSIに詰め込んでるの💩だよね
960青木康善 (ワッチョイ 8a72-0ulL)
2025/04/23(水) 17:25:43.12ID:4FkXeR/00 アドバイスありがとうございます。駿台電子のネットワークの先生が昔、あらゆるプログラミング言語の中で一番、処理が早いのはC++だと言っていたので、頑張ります。
961デフォルトの名無しさん (ワッチョイ 5e85-M5IX)
2025/04/23(水) 23:23:42.67ID:1cvTRmDz0 いまだにgoto論とかw
いかに効率的にAIに作らせるかの時代だぞ
誤差レベルの最適化なんかやってる場合かよ
いかに効率的にAIに作らせるかの時代だぞ
誤差レベルの最適化なんかやってる場合かよ
962デフォルトの名無しさん (ワッチョイ 6639-nw4i)
2025/04/24(木) 00:55:04.53ID:ClCGshC50 まずAIにテストをつくらせてだな。。
963デフォルトの名無しさん (ワッチョイ 6610-VXNn)
2025/04/24(木) 08:02:23.17ID:3fimUhF30 C++使いはジジィが多いからAIどころかIDEすら拒絶してるもんな
70年代からずっとgoto論だのインデント文字数だのvi vs emacs論争をたぶん絶滅するまで続けてるよ
70年代からずっとgoto論だのインデント文字数だのvi vs emacs論争をたぶん絶滅するまで続けてるよ
964デフォルトの名無しさん (ワッチョイ 5e01-3oCd)
2025/04/24(木) 08:42:38.65ID:WKi0rg0u0 >>961
そのあたりは要件定義とかユースケースとかの話だから、問題領域が違うよ。
しかし>961もそうだけど、AIの使い方の話をしているやつからPM知識の匂いがしないのはなんでかね。
AI利用法とかPMで長年研究してきた問題と重複する部分が多いのに。
そのあたりは要件定義とかユースケースとかの話だから、問題領域が違うよ。
しかし>961もそうだけど、AIの使い方の話をしているやつからPM知識の匂いがしないのはなんでかね。
AI利用法とかPMで長年研究してきた問題と重複する部分が多いのに。
965デフォルトの名無しさん (ブーイモ MM3e-M5IX)
2025/04/24(木) 08:45:22.69ID:YbDQClr8M また香ばしいの来たなw
966デフォルトの名無しさん (ワッチョイ 8a1d-69r1)
2025/04/24(木) 11:46:10.31ID:cjL4AtoW0 まずそのgotoの話し始めたコテがどう見ても知的に問題がありそうな感じなのに
そいつの話題に乗って語り始めちゃったところで、まともな結論にたどり着けるはずもなく…
そいつの話題に乗って語り始めちゃったところで、まともな結論にたどり着けるはずもなく…
967デフォルトの名無しさん (アウアウウー Sa21-NXaD)
2025/04/24(木) 13:24:56.21ID:ndm7u60Wa C++よりCの方が速い
968デフォルトの名無しさん (ササクッテロロ Spbd-0ulL)
2025/04/24(木) 13:38:32.65ID:rhg+hx6mp まあ、クラス関数テーブル参照する分C++の方が遅いかなw
969はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-C6fW)
2025/04/24(木) 13:43:43.90ID:pnRjJMwb0 クラス関数テーブルって何?
970デフォルトの名無しさん (ワッチョイ 8af0-pFs9)
2025/04/24(木) 13:51:17.41ID:XeDfAgiK0 vtableのことかよ
最近のはプリフェッチ改善されてきているからな
最近のはプリフェッチ改善されてきているからな
971デフォルトの名無しさん (ワッチョイ b501-4ocp)
2025/04/24(木) 16:00:45.28ID:ewKS50go0 >>968
メンバ関数は必ずvtableを参照するものではない(非仮想のメンバ関数)
参照しなければCと変わらん
Cでvtable相当のものを用意してそれを介して関数呼べば
仮想メンバ関数呼ぶのと変わらん
メンバ関数は必ずvtableを参照するものではない(非仮想のメンバ関数)
参照しなければCと変わらん
Cでvtable相当のものを用意してそれを介して関数呼べば
仮想メンバ関数呼ぶのと変わらん
972青木康善 (アウアウウー Sa21-0ulL)
2025/04/24(木) 16:39:12.09ID:aYrGN0fKa rack extention作りますが、グラニュラーとstutterとフーリエ変換付けたら、デスマーチ状態になりそうだなあ。
973デフォルトの名無しさん (ワッチョイ 8a1d-69r1)
2025/04/24(木) 16:55:57.61ID:cjL4AtoW0 ね、バカに反応するだけ時間の無駄だって
974はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-imSP)
2025/04/24(木) 20:09:19.15ID:pnRjJMwb0 この場合に何を指してクラス関数という言葉を使ったか (そしてそれが速度的ペナルティに繋がると思ったか) は当人にしかわからんが、私なりに推測すると Java Python Ruby などで言うところのクラスメソッドから間違った類推をして得られた概念ではないかと思う。
これらの言語は「クラスはオブジェクトである」というパラダイムの世界で、抽象メソッドでもインスタンスメソッドでもない場合でも動的なディスパッチを必要とする場合がある。
もちろん C++ ではそうではなく、仮想関数を除けばコンパイル後には関数を指す唯一無二のアドレスが確定していて C の関数と比べて速度的不利はないし、仮想関数のようなことを C でやろうとすれば間接参照なり分岐なりのコストはどうせ必要なので仮想関数を C++ の速度的不利というのは無理筋だ。
ただ、充分な理解なく不必要に速度的不利な機能を使ってしまうことが (C よりは) 高いだろうという意味では C++ が不利と言えなくもないかもね。
これらの言語は「クラスはオブジェクトである」というパラダイムの世界で、抽象メソッドでもインスタンスメソッドでもない場合でも動的なディスパッチを必要とする場合がある。
もちろん C++ ではそうではなく、仮想関数を除けばコンパイル後には関数を指す唯一無二のアドレスが確定していて C の関数と比べて速度的不利はないし、仮想関数のようなことを C でやろうとすれば間接参照なり分岐なりのコストはどうせ必要なので仮想関数を C++ の速度的不利というのは無理筋だ。
ただ、充分な理解なく不必要に速度的不利な機能を使ってしまうことが (C よりは) 高いだろうという意味では C++ が不利と言えなくもないかもね。
975デフォルトの名無しさん (ワッチョイ 797c-ixHo)
2025/04/24(木) 20:50:08.03ID:4KP0cuFt0 vectorは境界チェックするから遅くてゴミでCの配列には必要ないから最強だって暴れてた超天才Cグラマ様おったなあ
976デフォルトの名無しさん (オッペケ Srbd-nw4i)
2025/04/24(木) 23:12:29.97ID:DqjjH7fdr 境界チェックはしてるんだけど、最適化の過程で霧散する…
…いまは、どこの言語もそのくらいはできるからね
…いまは、どこの言語もそのくらいはできるからね
977青木康善 (アウアウウー Sa21-0ulL)
2025/04/24(木) 23:14:17.38ID:Nm4FYEaNa オライリーで、head first C++が洋書で無いかなあ。
978青木康善 (アウアウウー Sa21-0ulL)
2025/04/25(金) 07:29:57.52ID:IL/no3kVa そりゃ、あなたたちは、プログラマーというサラリーマンなんだから、僕はバカですよ。。。とほほ。。。
979デフォルトの名無しさん (アウアウウー Sa21-NXaD)
2025/04/25(金) 14:23:29.54ID:M7r6gaHPa fstream iostream は糞ですね判ります
980デフォルトの名無しさん (ワッチョイ 0a07-nw4i)
2025/04/25(金) 18:10:11.03ID:nRYa5Nu+0 C++に触れるものは、遅かれ早かれ、duck test ってものを解する
バカのように振舞うな
バカのように振舞うな
981デフォルトの名無しさん (オイコラミネオ MM71-h0BB)
2025/04/25(金) 19:48:12.66ID:fabJEISTM なんでも基礎的な内容をしっかりと勉強しておけば後で役に立つから頑張ればよい
ジジイになる前に少しでも覚えろ
ジジイになる前に少しでも覚えろ
982デフォルトの名無しさん (オイコラミネオ MM71-h0BB)
2025/04/25(金) 20:07:56.20ID:fabJEISTM 大昔はmemsetが最適化で消されて気が付かないで徹夜してデスク蹴ったりマウス投げたりしてたんだぞ
関数のアドレスすら存在しない超高速処理で速度的には超有利
流石C++
関数のアドレスすら存在しない超高速処理で速度的には超有利
流石C++
983デフォルトの名無しさん (ワッチョイ 6639-nw4i)
2025/04/26(土) 02:15:34.80ID:kmHF58M00984デフォルトの名無しさん (ワッチョイ b501-N74K)
2025/04/26(土) 05:38:20.00ID:qC2gIsX80 昔と出力コードが変わったなと思うのはコプロ周りの処理がSSE前提になった事かなぁ
985デフォルトの名無しさん (ワッチョイ 1132-NXaD)
2025/04/26(土) 10:35:41.92ID:pbPDl6lv0986デフォルトの名無しさん (オイコラミネオ MM71-h0BB)
2025/04/26(土) 15:49:00.51ID:G2uFKMwFM みなさんはstd::filesystem::path使ってますか?それともただの文字列操作してますか
987デフォルトの名無しさん (アウアウウー Sa21-NXaD)
2025/04/26(土) 15:54:33.92ID:IX/fzv3ga boostの方のは使ってた
988デフォルトの名無しさん (ワッチョイ 66a1-0INX)
2025/04/26(土) 17:25:44.72ID:DKbZdqM30 >>961
breakもcontinueもgotoの一種なのだから仕方が無い
行先がスコープの始まりか終わりに限定される、というのが良心的なだけで
実行フローをぐちゃぐちゃにできうる能力のはgotoとほとんど変わらないし、、、
for (i=0; i < 100; i++) {
if (i == a) { continue; }
if (i == b) { break; }
if (i == c) { continue; } // i== aとi==cをまとめるとしたら、if (i == a && i != b && i == c) { continue; }としないとバグ
if (i == d) { break; }
}
また例外はスローする関数と条件を把握していない限り、
いつ炸裂するかわからないステルスgoto文がコード中にばらまかれているのとだいたい同じ……
従って構造化プログラミングで議論に結論がデタと考えるのは早計で、goto問題は永遠に古くて新しい問題……
breakもcontinueもgotoの一種なのだから仕方が無い
行先がスコープの始まりか終わりに限定される、というのが良心的なだけで
実行フローをぐちゃぐちゃにできうる能力のはgotoとほとんど変わらないし、、、
for (i=0; i < 100; i++) {
if (i == a) { continue; }
if (i == b) { break; }
if (i == c) { continue; } // i== aとi==cをまとめるとしたら、if (i == a && i != b && i == c) { continue; }としないとバグ
if (i == d) { break; }
}
また例外はスローする関数と条件を把握していない限り、
いつ炸裂するかわからないステルスgoto文がコード中にばらまかれているのとだいたい同じ……
従って構造化プログラミングで議論に結論がデタと考えるのは早計で、goto問題は永遠に古くて新しい問題……
989デフォルトの名無しさん (ワッチョイ 5ee3-M5IX)
2025/04/26(土) 21:55:33.90ID:P90TCdD80 一生やってろよw
990デフォルトの名無しさん (ワッチョイ 66cf-jhy/)
2025/04/26(土) 23:03:17.16ID:KeLpsr3P0 大量のコードが不可分にもつれあった状態を作れるgotoと
連接・分岐・反復という構造を崩さないcontinue/breakの
違いがわからないようならどうしようもない。
連接・分岐・反復という構造を崩さないcontinue/breakの
違いがわからないようならどうしようもない。
991デフォルトの名無しさん (ワッチョイ b501-N74K)
2025/04/26(土) 23:12:16.46ID:qC2gIsX80 古いXLISPのソース見たら発狂するのかしら?
992デフォルトの名無しさん (ワッチョイ b77c-ko3M)
2025/04/27(日) 00:35:43.45ID:J2DPm7Xn0 そんなに構造化が嫌なら最初から機械語で書けばいい
gotoしかないから楽しいかもよ
私は嫌です
gotoしかないから楽しいかもよ
私は嫌です
993デフォルトの名無しさん (ワッチョイ ff39-VpId)
2025/04/27(日) 05:06:56.76ID:sqtCgEt90 いや普通の機械語・アセンブラでも、いまどきキレイに書くからw
AIがコード生成しだしたらもうしらん あいつら疲れ知らずの限界なしだから
AIがコード生成しだしたらもうしらん あいつら疲れ知らずの限界なしだから
994デフォルトの名無しさん (アウアウウー Sa1b-Dl8r)
2025/04/27(日) 14:53:44.65ID:rRExk4WBa 「機械語はgotoしかない」は明らかに嘘だな
995デフォルトの名無しさん (ワッチョイ 1701-7NrX)
2025/04/27(日) 15:18:04.41ID:5TUg21k+0 せやば
996はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b732-jewZ)
2025/04/27(日) 17:44:14.12ID:0aN/b0Iq0 ダイクストラが言う構造化プログラミングはモジュールとか抽象データ型とかも含む広範で抽象的な概念として説明されている。
連接・分岐・反復で構成しようという話はそれより前に発表されたものだが、この時代は構造化もクソもないプログラムがまかり通っていたという前提がある。
まずはその三要素を基礎に据えて構成したらわかりやすくね? という提案 (というか感想?) に過ぎず、それで全て事足りるみたいな主張ではない。
(理論上は連接・分岐・反復で全て表現可能であるという証明はされている。)
構造化プログラミングの考え方のキモは構造は人間の認知の中にあるということ。
人間が思考しているときの構造を書き表すためにどんな言語機能 (またはデザインパターン) があればよいの? ってのが構造化プログラミングの議論なんだよ。
書いた人が思ってる構造が表現されているなら構造化プログラミングだし、構造化プログラミングのために用意された機能を使っていても構造が表れていなければ構造化プログラミングではない。
まあついでに言えば書き表されたものについて (コンパイラも人間も) 検証しやすいことも大事だ。
機械的に goto を除去したらむしろ構造が失われるという例をクヌースが出したりもしていて、結局のところはどんな機能も正しく使えば正しいし、悪い使い方をすれば駄目になるというシンプルな話。
そんなわけで break が構造化を崩すか崩さないかは使い方による。
ただ、常識的に考えて break は goto より構造を破綻させにくいだろうってだけ。
連接・分岐・反復で構成しようという話はそれより前に発表されたものだが、この時代は構造化もクソもないプログラムがまかり通っていたという前提がある。
まずはその三要素を基礎に据えて構成したらわかりやすくね? という提案 (というか感想?) に過ぎず、それで全て事足りるみたいな主張ではない。
(理論上は連接・分岐・反復で全て表現可能であるという証明はされている。)
構造化プログラミングの考え方のキモは構造は人間の認知の中にあるということ。
人間が思考しているときの構造を書き表すためにどんな言語機能 (またはデザインパターン) があればよいの? ってのが構造化プログラミングの議論なんだよ。
書いた人が思ってる構造が表現されているなら構造化プログラミングだし、構造化プログラミングのために用意された機能を使っていても構造が表れていなければ構造化プログラミングではない。
まあついでに言えば書き表されたものについて (コンパイラも人間も) 検証しやすいことも大事だ。
機械的に goto を除去したらむしろ構造が失われるという例をクヌースが出したりもしていて、結局のところはどんな機能も正しく使えば正しいし、悪い使い方をすれば駄目になるというシンプルな話。
そんなわけで break が構造化を崩すか崩さないかは使い方による。
ただ、常識的に考えて break は goto より構造を破綻させにくいだろうってだけ。
997デフォルトの名無しさん (ワッチョイ 9f35-3+vo)
2025/04/27(日) 18:16:26.55ID:yHO53gwR0 ダイクストラがじゃなくてもうちょい場を学ぼう
便所でいきなり大声で演説垂れ始める人がいたらみんな引くもんなんだよw
便所でいきなり大声で演説垂れ始める人がいたらみんな引くもんなんだよw
998デフォルトの名無しさん (ワッチョイ ff39-VpId)
2025/04/27(日) 19:25:43.76ID:sqtCgEt90999デフォルトの名無しさん (スフッ Sdbf-Nh+M)
2025/04/28(月) 10:15:47.67ID:3WBgyNGdd 連接と分岐があれば反復は要らない説
1000デフォルトの名無しさん (ワッチョイ 7732-Dl8r)
2025/04/28(月) 10:19:08.06ID:AuNLagCl010011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 545日 2時間 41分 30秒
新しいスレッドを立ててください。
life time: 545日 2時間 41分 30秒
10021002
Over 1000Thread 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 高市総理の周辺「小さな火種が火事になりかけている。早く鎮火しないといけない」 ★5 [Hitzeschleier★]
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 [煮卵★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る [蚤の市★]
- 高市総理の周辺「小さな火種が火事になりかけている。早く鎮火しないといけない」 ★6 [Hitzeschleier★]
- 【外交】日中関係悪化、長期化の様相 2012年には自動車輸出80%減も ロイター★2 [1ゲットロボ★]
- 早大名誉教授が高市早苗首相の発言に言及「台湾も迷惑だと言っている」… [BFU★]
- 【んな専🏡】姫森ルーナ(・o・🍬)総合スレッド🏰【ホロライブ▶】★2
- 安倍晋三「台湾省は中国様のものでゲス~🤓」 1年後安倍晋三「台湾で中国と米国の武力衝突が起きた場合、米側で参戦する [455031798]
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
- 【高市悲報】経団連会長、高市と面談「おい!ちゃんと中国と対話しろよ!😨」 [359965264]
- 【実況】博衣こよりのえちえち雀魂1位耐久🧪★4
- TV「港区美女スペシャル」👉すべからくカリカリが出てきて界隈に衝撃が走る [329329848]
