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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(3): デフォルトの名無しさん (ワッチョイ efda-9b8G) [sage] 2023/10/31(火) 07:37:38.52 ID:+ZyYyqMO0(1) AAS
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part164
2chスレ:tech VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2
(2): デフォルトの名無しさん (ワッチョイ 194e-FUJr) [sage] 2023/10/31(火) 08:59:52.78 ID:DBRUqQAF0(1) AAS
>1 乙です

前スレ 例外はループ脱出に使うような物じゃない、との意見に賛成です。

自分は、例外は「起こり得るけどいちいちエラー処理を書いたらアホな話を」「処理呼び出し毎ではないレベルで」「エラー対処コーディングするもの」と思ってます。

具体例は、
リンクリストなどコレクション操作でメモリ不足が起きた場合、のエラー処理。
コレクションの追加や削除を頻繁に行うコードって、大体はもっと概念レベルが高い事をやってるので、1件の追加 レベルでエラー処理書いてたらアホな感じになる。

しかも、GUI プロセスを作ってて何か上手く動かないから特定のエラーだけを画面に表示したい、など、ことさら明確に対処したい場合です。プロセスが落ちればいいだけなら、main()の外側、の仕様がやってくれる。

古い本の情報だけど、SBリップマンによると、MS VC++と、sun、hp-ux の C++コンパイラで、例外を使う/使わないで速度性能調査したそうで、 4~6% の速度劣化があったとの事です。
3
(1): デフォルトの名無しさん (ワッチョイ 6105-NMSe) [sage] 2023/10/31(火) 09:37:52.87 ID:BnGGo/620(1/2) AAS
スレ終了間際に現れる質問いいですかオジなんなの?w.
4: デフォルトの名無しさん (スププ Sd33-wFsA) [] 2023/10/31(火) 09:38:43.79 ID:yneNhI3/d(1) AAS
Pythonで言うと
forのStopIterationは へっ? だし
int()のValueErrorですら微妙
5: デフォルトの名無しさん (ワッチョイ 5397-ggTH) [sage] 2023/10/31(火) 11:32:52.74 ID:5ddE/sJo0(1) AAS
うるせえstd::stoi()ぶつけんぞ
6
(1): デフォルトの名無しさん (アウアウウー Sad5-U1R4) [sage] 2023/10/31(火) 16:49:04.12 ID:Xd7Dooyma(1) AAS
>>3
ヘッダーの最後の行の #endif みたいなものだよ
7: デフォルトの名無しさん (ワッチョイ 6105-NMSe) [sage] 2023/10/31(火) 23:53:09.44 ID:BnGGo/620(2/2) AAS
>>6
と、言うことは対になる#ifがどこかに?
8: デフォルトの名無しさん (ワッチョイ 1945-FUJr) [sage] 2023/11/01(水) 10:50:51.42 ID:NLQyML8a0(1) AAS
…(いくら5chとは言え、複数の人が集まる場所で、何かを教えて頂いてもお礼も言えず、面白い返しもできない人がいたとして。その人がプログラムに関してだけは素晴らしいコードを書ける、なんてことはあるのかな?と思う瞬間が人生の中であったり、なかったり)
9: デフォルトの名無しさん (ワッチョイ 297c-tLJy) [sage] 2023/11/01(水) 12:51:50.53 ID:h0xHi7n60(1) AAS
(礼儀とプログラミングスキルは関係ないと思う)
10: デフォルトの名無しさん (ワッチョイ 13ad-feYx) [sage] 2023/11/01(水) 12:53:02.45 ID:c3s+uM8y0(1) AAS
(俺の昼飯どこ行った?)
11: デフォルトの名無しさん (アウアウウー Sad5-U1R4) [sage] 2023/11/01(水) 16:02:16.42 ID:G1jsC9Xya(1) AAS
(今日の昼飯はセブンのサバ塩焼弁当にしとくか・・・)
12: デフォルトの名無しさん (ワッチョイ 1939-PupP) [sage] 2023/11/01(水) 18:24:49.00 ID:m9AntJVX0(1) AAS
コードにはある程度そいつの人間性は反映されるな
スレチな話題ではあるけど
13: デフォルトの名無しさん (ワッチョイ b1f8-XCYI) [sage] 2023/11/01(水) 23:07:31.46 ID:PfaqlzcX0(1) AAS
(本物のプログラマはPascalを使わない)
14: デフォルトの名無しさん (ワッチョイ 6105-NMSe) [sage] 2023/11/01(水) 23:30:59.94 ID:ZqfN6pKA0(1) AAS
(でもPythonは使ってもいいのかな?って時々思う)
15: デフォルトの名無しさん (オイコラミネオ MM6d-H9h+) [sage] 2023/11/02(木) 00:03:32.45 ID:aqkFofyNM(1) AAS
そろそろキャストは止めてスマポ使いましょう
16: デフォルトの名無しさん (ワッチョイ d94e-vgKx) [] 2023/11/02(木) 02:43:15.24 ID:+4XO/JeH0(1/2) AAS
まちゅまちゅの3Dライブみた
前も思ったけどみこちとかなたそのダンス、めっちゃシンクロ率高い
リズムがぴったり一緒なんだよね
ダンスほんとにうまくなったよな
17: デフォルトの名無しさん (ワッチョイ d94e-vgKx) [] 2023/11/02(木) 02:43:45.89 ID:+4XO/JeH0(2/2) AAS
誤爆った(´・ω・`)
18: デフォルトの名無しさん (ワッチョイ 1bda-9b8G) [sage] 2023/11/02(木) 07:17:03.35 ID:Hn8AmdCQ0(1) AAS
ホロライブか
19: デフォルトの名無しさん (アウアウウー Sad5-U1R4) [sage] 2023/11/02(木) 10:44:27.02 ID:BqsrFUCWa(1) AAS
(まちゅまちゅの3Dライブ?・・・ちょっと気になる)
20: デフォルトの名無しさん (ワッチョイ 6105-NMSe) [sage] 2023/11/02(木) 23:48:48.29 ID:ebj85xCu0(1) AAS
(((お前ら括弧ばっかり使ってlisperかよ?)))
21: デフォルトの名無しさん (ワッチョイ a905-fLgT) [sage] 2023/11/03(金) 10:21:23.72 ID:sUQ44pbr0(1) AAS
←vーー( ゚∀゚)!ー^ー
22: デフォルトの名無しさん (ワッチョイ 6276-0SSA) [sage] 2023/11/04(土) 18:56:36.20 ID:Y/q1DSa/0(1) AAS
コピーとムーブの挙動、というか管理難しい。。難しくない?
23: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0979-oDOv) [sage] 2023/11/04(土) 20:24:08.34 ID:1CTu6tq50(1/2) AAS
コピーやムーブはパターンに沿って管理できるからそんなに難しいとは感じないな。

ワイとしては参照の畳み込み (Reference collapsing) や変換の規則を毎回のように確認するんだけど全然頭に入ってこない。
参照はオブジェクトではないので逆に言えば値に対応する型が参照になることはないのだが、それはそれとして参照を含む型があり得るというのが今でも腑に落ちない。
24
(3): デフォルトの名無しさん (ワントンキン MM92-JcAe) [sage] 2023/11/04(土) 20:28:09.97 ID:KOZ2F//lM(1) AAS
参照しか知らんものだけど、ムーブて何か簡単に教えて
参照は実装上ただのポインタじゃん
ムーブはなにがどうなるん?
25: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0979-oDOv) [sage] 2023/11/04(土) 20:29:19.85 ID:1CTu6tq50(2/2) AAS
ムーブコンストラクタが起動する。
それだけ。
26: デフォルトの名無しさん (ワッチョイ 658d-qcxi) [sage] 2023/11/05(日) 09:49:50.04 ID:6vgG9vCb0(1) AAS
>>24
考え方としては、shallow copyを二重開放リスクを避けて行うための仕組み。
右辺値という特別な一時変数のコピーで特別なコピー(ムーブコンストラクタ)を実行するようにして、クラス設計者が必要に応じてshallow copyを実装しやすくしている。
27: デフォルトの名無しさん (アウアウウー Saa5-CWlg) [] 2023/11/05(日) 10:41:04.16 ID:ol9bMVcca(1/2) AAS
>>24
moveはRustで言う所有権の移動じゃないか
28: デフォルトの名無しさん (ワッチョイ 454e-0SSA) [] 2023/11/05(日) 13:06:56.97 ID:Qkn7cpbH0(1/4) AAS
>>24
aに戻り値などの一時オブジェクトbをコピーすると通常は

aでメモリを確保
bからメモリコピー
bのデストラクタでメモリを破棄

という動作になるけど、moveの場合

aにbでメモリをポインタで持ってくる
bのインスタンスでは破棄したことにする

とすれば無駄なメモリ確保とコピーが発生せず効率が良い
29: はちみつ餃子◆8X2XSCHEME (ワッチョイ 823e-9NWm) [sage] 2023/11/05(日) 13:39:42.02 ID:pHGS9osC0(1/2) AAS
標準ライブラリでのムーブは所有権 (ownership) の概念を前提として構築されているし、
慣例としてもそのようにするものではあるんだが
言語としてはムーブコンストラクタ (またはムーブ代入演算子) を呼び出すというだけで
所有権の面倒をみる機能は何もない。
(辻褄が合うようにするのはプログラマの責任。)
何が起きているのかは所有権の概念と実装レベルで分けて考えたほうがいいと思う。

どう説明していいかわからんから関連する要素を箇条書きにしたらこんな感じかな。

・ それがコピーの文脈であるかムーブの文脈であるか区別は出来る
・ 一般的にムーブの文脈であった場合 (寿命が尽きる直前の一時オブジェクトの再利用が出来る場合) にコピーより効率が良い動作が出来る可能性がある
・ どのように効率がよくなるのかはそのクラス (のムーブコンストラクタやムーブ代入演算子) の定義次第
・ 典型的なムーブの実装はリソース本体を指すポインタの交換によって実現される
・ ユーザーが定義を与えなかった場合のデフォルトのムーブは全てのサブオブジェクトをムーブすることになっている
30: デフォルトの名無しさん (ワッチョイ 454e-0SSA) [] 2023/11/05(日) 13:42:20.39 ID:Qkn7cpbH0(2/4) AAS
で、このmove動作を定義するために、
一時オブジェクト(右辺値)に対する参照動作を関数定義できるようになっている
31: デフォルトの名無しさん (ワントンキン MM92-JcAe) [sage] 2023/11/05(日) 14:05:22.83 ID:wAmDr/fyM(1) AAS
ムーブされるとそのポインタは変わってしまうと思うけど、そういうケースはないの?
32: デフォルトの名無しさん (ワッチョイ 454e-0SSA) [] 2023/11/05(日) 14:18:09.07 ID:Qkn7cpbH0(3/4) AAS
言っている意味がよく分からないが、純粋なポインタにはムーブという概念はないよ
ムーブを定義できるのはクラスに対してだけ
他の人も言っているようにムーブといっても実体は単なる関数呼び出しなので、その中でプログラマが自分の責任で必要なコードを書くことになる
33
(2): デフォルトの名無しさん (ワッチョイ 653d-2MVi) [sage] 2023/11/05(日) 14:58:05.35 ID:vIwIC4VV0(1) AAS
質問した人じゃないけど説明ありがたいです

ムーブ難しいと思ってたけどもっと早く勉強して仕事で使うべきだった

(文法解析した要素をポインタいじって並べ変えるんだけど…
二重所有を防ぐのを手作業コーディングで責任を持たなければならないプログラムを作ってしまった)
34: デフォルトの名無しさん (ワッチョイ 454e-0SSA) [] 2023/11/05(日) 15:15:28.75 ID:Qkn7cpbH0(4/4) AAS
ただ、右辺値参照を使うと、通常の参照や代入と使い分けるためにconstやnoexceptを厳密に指定しないといけなくなりがちだから、
その辺の総合的な理解が必要になってくるのは注意点だね
constは一度付け始めるとライブラリ全部に伝染するからな・・・それを嫌って使わない派も結構いる(いた)よね
35: デフォルトの名無しさん (ワッチョイ ed7c-9LC0) [sage] 2023/11/05(日) 15:39:17.77 ID:Vx5ySS520(1) AAS
実際のコードだとポインタのムーブはunique_ptrとかにぶん投げで、自分で移動コード書くことはまずないな
自分でムーブ特殊関数の中身書くのはハンドル的なもののムーブを実現したいときくらい
36: デフォルトの名無しさん (アウアウウー Saa5-3l7D) [sage] 2023/11/05(日) 16:12:35.07 ID:jiV3XvQ2a(1) AAS
とにかく unique_ptr が便利すぎるから何でもかんでも全部 unique_ptr 使うようになってしまった
まあそれでいいのかもしれないが
37
(1): デフォルトの名無しさん (アウアウウー Saa5-CWlg) [] 2023/11/05(日) 16:21:29.02 ID:ol9bMVcca(2/2) AAS
>>33
銀の弾丸ではない
手作業コーディングで責任を持たなければならないのは変わらない
38: はちみつ餃子◆8X2XSCHEME (ワッチョイ 823e-9NWm) [sage] 2023/11/05(日) 17:10:59.04 ID:pHGS9osC0(2/2) AAS
所有権管理も結局はプログラマが書く (間違いを部分的にコンパイルエラーとして検出できることはある)、
所有権って具体的に何なんだってのはクラス定義に押し込めるという風に管理のレイヤを分けることが出来るってわけ。

クラス定義をした後は具体的に何をやってるのかを忘れて
所有権というものだと思い込むことが出来るという抽象化の仕組み。
39: デフォルトの名無しさん (ワッチョイ 6540-pUwU) [sage] 2023/11/07(火) 10:10:32.04 ID:5c9945xO0(1) AAS
>>37
アホか
普通に考えて、そのコード(クラス)の利用者が所有権について明示的に何かしなきゃいけなかったということだろ
40
(1): デフォルトの名無しさん (ワッチョイ 653a-qcxi) [sage] 2023/11/07(火) 19:02:58.77 ID:Z7KocuHY0(1/2) AAS
>>33
エスパーするけど多分その用途だとmoveは使えない。

データを共有している感じなので素直にshared ptrを使うのがいいかと。shared ptrで性能的にキツイならshared ptrを参照渡しするか。
41: デフォルトの名無しさん (ワッチョイ 653a-qcxi) [sage] 2023/11/07(火) 19:09:56.10 ID:Z7KocuHY0(2/2) AAS
>>40
ちょっと補足すると、戻り値をshared ptrの参照にするのはNGですな。そこは素直にRVOに期待するのが良いか。
42
(1): デフォルトの名無しさん (ワッチョイ e5a7-cSrA) [sage] 2023/11/09(木) 17:23:48.54 ID:Op1F6lz40(1/3) AAS
VC++なんだけど32bitで_thiscallを関数ポインタ経由で呼ぶことってasm使わないと不可能?
メンバ関数を関数ポインタ変数とすることは出来てもそこから第一引数にインスタンス入れたりしてもコンパイル時エラーになる
43
(1): デフォルトの名無しさん (ワッチョイ 454e-0SSA) [] 2023/11/09(木) 18:09:02.18 ID:vDu6brxv0(1) AAS
>>42
メンバ関数をポインタ経由で呼び出したいってことならstd::bindでできるはず
44: はちみつ餃子◆8X2XSCHEME (ワッチョイ 423e-9NWm) [sage] 2023/11/09(木) 18:24:20.63 ID:viBVvDAP0(1) AAS
VC++ のことは知らんけどメンバ関数ポインタは関数ポインタより大きい実装になってる処理系がある。
メンバ関数ポインタを関数ポインタに変換した時点で呼び出すのに必要な情報が失われているかもしれない。
45: デフォルトの名無しさん (ブーイモ MM62-wwCg) [sage] 2023/11/09(木) 19:04:30.42 ID:YhbH7ApDM(1) AAS
MJD?
46
(1): デフォルトの名無しさん (オイコラミネオ MM49-wdyj) [sage] 2023/11/09(木) 19:13:19.18 ID:RZ9WOZDMM(1) AAS
エラーメッセージにヒントはない?
47: はちみつ餃子◆8X2XSCHEME (ワッチョイ 097f-Nt8Z) [sage] 2023/11/09(木) 19:58:26.06 ID:u3KRHVuW0(1) AAS
基本的には言語の規定内でやるに越したことはないので無理な型変換をしないで済ませられるように出来るものならそうしたほうがいい。
どうしてもそうできない事情がある(と質問者が認識している)ならもうちょっと詳しい状況をコードで示して欲しい。
48: デフォルトの名無しさん (ワッチョイ e5a7-cSrA) [sage] 2023/11/09(木) 21:12:03.97 ID:Op1F6lz40(2/3) AAS
>>43
ありがとう、逆アセ見たら完璧にthiscallになってた

メンバ関数っていうかthiscall指定したものは32bitだとecxレジスタにthisポインタが隠されていてそれ以外はstdcallと同じ
なので下みたいに第一引数にインスタンスのポインタを入れる事でecxに代入される感じになりそうだなーと思ったら無理だった
ちなみに64bitの場合はどちらもfastcallで同じだから単純に第一引数にthisポインタが隠されてるだけ
auto pFunc = CDate::addDay; // CDate addDay(int value)
CDate tomorrow = pFunc(&instance, 1);
1-
あと 954 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.972s*