19/01/18 18:57:17.35 X3ceYQ3H.net
ダウソファイルのファイル名置換する簡単なプログラムをC++とC#で書いてみた(C++で作って、それ見ながらC#に変換した)
もともとシェルスクリプトでもいいようなプログラムなんで実行速度とかどーでもいい
コンパイル時間長が
C# <<< 超えられない壁 <<< C++
C++のコンパイル時間と比べるとC#は一瞬で完了する。これは、快適性がだんちだな。
201:デフォルトの名無しさん
19/01/18 19:12:22.57 seZYByET.net
if文使うな。
ということか?
202:デフォルトの名無しさん
19/01/18 20:07:49.64 BPWAMvDw.net
リターンコードスタイルにすると
無駄な変数が増える
無駄な分岐が増える
エラーコード追加時に全ての呼び出し元を精査しなければならない
エラーに付随する情報を伝達する標準的な規則が存在しない
全ての正常系の処理にコードチェックのオーバーヘッドが追加される
ライブラリ内部で発生する例外への対処が困難(例外を基本としていれば容易に対処可能)
参照透過性が壊滅する
デメリットだらけ
203:デフォルトの名無しさん
19/01/18 20:59:01.43 BmxrQ6cX.net
>エラーコード追加時に全ての呼び出し元を精査しなければならない
>参照透過性が壊滅する
例外ならそれが解決すると考えているならちょっとやばい。
204:デフォルトの名無しさん
19/01/18 23:06:15.78 BPWAMvDw.net
>>203
返り値でエラー通知するようなセピア色の世界にいるとわからんかもしれんが普通に解決するぞ
205:デフォルトの名無しさん
19/01/19 01:49:00.66 gJ7zJmkH.net
参照透過性ってそういう意味だっけ?w
最近例外ない言語増えてる事実はどう考える?
206:デフォルトの名無しさん
19/01/19 07:07:12.07 +IqL7b8U.net
>>203
リターンコード方式や例外と参照透過性になんの関係があるんだろう…
>>205
> 最近例外ない言語増えてる事実はどう考える?
Go以外にあったっけ?
207:デフォルトの名無しさん
19/01/19 07:37:40.03 FscMnE/k.net
まぁ、実際関係ないね。
同じ入力に対して常に同じエラーコードを返すなら参照透過性があると言えるし、
入力によらず場合によって例外を返すことがあるなら参照透過じゃない。
208:デフォルトの名無しさん
19/01/19 07:43:37.22 WVD5Mi4y.net
「呼び出し元を精査」とかプログラム内のデバッグに例外使ってるような書き方やね
例外処理は外部的要因(ハード、通信等)のエラーのように自分の責任外のエラーを積極的に通知するために使うべきだと思うけどな
209:デフォルトの名無しさん
19/01/19 08:51:08.36 fPDnzLoP.net
戻り値形式ではそもそも式として書けないから参照透過性もクソもないということをまずは理解しろ
int h(P const & p, Q const & q, Z & out_z) {
X x;
Int ret_f = f(p, x); // out ref x
if (is_error(ret_f)) return ret_f;
Y y;
int ret_g = g(q, y); // out ref y
if (is_error(ret_g)) return ret_g;
z = x * y;
return RET_OK;
}
↑例外を使わない下品すぎるコード
↓例外を使ったスーパーエレガントなコード
Z h(P const & p, Q const & q) { return f(p) * g(q); }
210:デフォルトの名無しさん
19/01/19 09:21:20.09 XwZdf3Vk.net
Real Programmers Don't Use Exception.
211:デフォルトの名無しさん
19/01/19 12:10:48.67 gJ7zJmkH.net
>>206
rust
swiftは最初なくて後で追加
積極的に使うスタンスでない
212:デフォルトの名無しさん
19/01/19 12:13:26.40 gJ7zJmkH.net
>>209
そこに丹念なエラー処理を追加していくと、あら不思議どっちもあまりかわらない
213:デフォルトの名無しさん
19/01/19 13:16:34.67 +IqL7b8U.net
>>211
それってやっぱりいるじゃん
ってことだよね w
>>212
え?
何言ってるの?
エラー処理ってなんのこと?
具体的に書いてみて
214:デフォルトの名無しさん
19/01/19 14:04:33.44 gJ7zJmkH.net
>>213
エラー処理って言ったらまぎらわしかった
異常系の対応ってこと
215:デフォルトの名無しさん
19/01/19 14:08:49.01 fPDnzLoP.net
何にでも丹念なエラー処理が必要になることはないし
丹念なエラー処理も例外の方がやりやすい
216:デフォルトの名無しさん
19/01/19 14:30:15.46 +IqL7b8U.net
>>214
エラー処理でも異常系の対応でもいいから具体的に書いてくれよ
>>209程度ならたいしたことないだろ
217:デフォルトの名無しさん
19/01/19 14:50:30.01 FscMnE/k.net
案の定、参照透過性は関係ない話だった。
218:デフォルトの名無しさん
19/01/19 16:58:07.69 gJ7zJmkH.net
>>216
具体的にするには前提がいるでしょ
f、gは外部から与えられてる関数で中身を書き換えることはできない
かつ至る所で使われている
p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
異常の場合は何かおかしかったの後で調査できるようにログに残す、
または人間にフィードバックしてリトライさせる必要がある
製品レベルのソフトウェアならいたって普通の前提と要件
これを実現するとどうなるかは想像つくでしょ?
おれは例外否定派ではないよ
役に立つところは限定的と言う主張
>>188 がおれだから
まぁ確かにどちらかで言えばなくてもいいとは思ってる
ただ現状C++の標準ライブラリは例外ありきの設計に突き進んでいるから
エラーコードで突き進むのは筋が悪いのは確か
219:デフォルトの名無しさん
19/01/19 17:14:14.89 +IqL7b8U.net
>>218
> p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
意味わからん
220:デフォルトの名無しさん
19/01/19 17:16:52.76 fPDnzLoP.net
コード書けないならそう言えば?
長文で言い訳してないでさ
221:デフォルトの名無しさん
19/01/19 17:33:46.39 XYN5JTgF.net
普通は馬鹿に割く時間がもったいないからコード書けません
222:デフォルトの名無しさん
19/01/19 17:53:36.92 +IqL7b8U.net
そう言ういいわけ要らんし
223:デフォルトの名無しさん
19/01/19 18:31:39.45 fPDnzLoP.net
信者ですらわずかなサンプルコードを書くのをためらうほどには戻り値スタイルは厄介な代物ということがわかったね
くだらない言い訳で長文を書く労力よりも高くつくということがはっきりした
224:デフォルトの名無しさん
19/01/19 20:10:32.29 XwZdf3Vk.net
普通signalで実装するよね~
225:デフォルトの名無しさん
19/01/19 20:17:23.95 gJ7zJmkH.net
勝利宣言の後で申し訳ないけど
h()でハンドルするとしたら単に
Z h(P const & p, Q const & q) {
try {
return f(p) * g(q)
} catch (exception_invalid_arg_f e) {
throw exception_invalid_arg("arg p is invalid");
} catch (exception_invalid_arg_g e) {
throw exception_invalid_arg("arg q is invalid");
}
}
みたいにリアス海岸になるわけでしょ
でもこれはpとqの異常の区別が下からあがってくる例外で区別できてしまう特殊例
Z h2(P const & p, Q const & q0, Q const & q1) {
return f(p) * g(q0) * g(q1);
}
だとより複雑になる
じゃあこれ次の人やってみて
226:デフォルトの名無しさん
19/01/19 20:34:58.74 DlKBTFO2.net
天狗だ天狗が出たぞぉ
227:デフォルトの名無しさん
19/01/19 21:39:06.68 .net
やっぱり例外機構はオカルトだった。皆が長い間この迷信に惑わされ疲弊した
228:デフォルトの名無しさん
19/01/19 22:11:28.98 +IqL7b8U.net
疲弊してるのは君みたいだけど w
229:デフォルトの名無しさん
19/01/19 22:15:24.45 wCv/sLww.net
>>227
少し休め
人生は長いぞ
230:デフォルトの名無しさん
19/01/20 09:40:39.15 GKseTsKF.net
>>225
例外の使い方知らないのか
231:デフォルトの名無しさん
19/01/20 10:17:17.63 0AQxsU+K.net
具体的に書いてくれよ
232:デフォルトの名無しさん
19/01/20 10:50:52.46 mVpLWWyp.net
>>231
まさかと思うけど>>225でcatch書かなきゃf()やg()で発生した例外はそのままh()の呼び出し側に伝搬すること知らんのか?
あと、例えば引数がおかしいと言う例外なら例外情報に引数の値などを含めて一番外側でログを採るとかするから
> Z h2(P const & p, Q const & q0, Q const & q1) {
> return f(p) * g(q0) * g(q1);
> }
> だとより複雑になる
なんてことはない
233:デフォルトの名無しさん
19/01/20 11:19:55.89 GKseTsKF.net
ほらな言った通りになった
戻り値スタイルはただ異常処理を上位に委ねるだけでも多量のコードを書かなければならない
だから本当に処理すべき異常や正常系の処理が異常伝達に埋もれてしまいコードの可読性が著しく低下してしまう
>>225が>>209のサンプルコードの意図を誤解した理由がこれだ
>>225が間違えたのは予想された事だったんだ
>>225が例外スタイルでは必要ない障害伝達を書いてしまった理由も根は同じ
戻り値スタイルを書き続ける事によって関数コールの周りに障害伝達を書くのは当たり前の事なんだと頭の中に刷り込まれて思考停止してしまった
結果として例外スタイルを書く際にもいつもの癖で不要な障害伝達を書いてしまった
そして戻り値スタイル派の人々は自分達が戻り値スタイルの常識にしたがって書いた例外スタイルの酷いコードを見てこう言うのだ
「ほらやっぱり例外はダメじゃないか」
とね
234:デフォルトの名無しさん
19/01/20 11:22:27.27 GKseTsKF.net
ちなみに言った通りのレスは>>181のことな
235:デフォルトの名無しさん
19/01/20 13:52:10.31 Y8m3wOFq.net
>>232
> > だとより複雑になる
> なんてことはない
具体的にコードで書けよw
要件は >>218 な
h()が異常処理の責任を持つ前提でな
上に例外伝搬させてるだけでは問題は何も解決しねーから
236:デフォルトの名無しさん
19/01/20 14:06:11.05 Y8m3wOFq.net
あと
>>225
で例外投げなおしてるのは本質じゃない
単にそこでなにかしら異常系の対応をするという意味合い
人間にリトライさせることを考えると h()を呼び出したのがUIのフレームワークで
呼び出し側が "arg p is invalid" というメッセージでどっちの間違いが判定するなど
(現実には文字列で判定させる実装にしないだろうが、例な)
そこをそのまま exception_invalid_arg_f を上に伝搬させればいいだろと思うのはど素人
h() から外部ライブラリの exception_invalid_arg_f、exception_invalid_arg_g がそのまま
あがってくるというのは一般的にソフトウェアのレイヤー構造を崩してる
もちろん自分が担当している範囲ならありだが、
h() を外部に公開するような場合は仕様の責任をもつために自分で定義した例外で
投げなおすのは当たり前
237:デフォルトの名無しさん
19/01/20 14:24:17.92 mVpLWWyp.net
とりあえず戻り値スタイルでコード書いてくれよ
例外版に直してあげるからさ
238:デフォルトの名無しさん
19/01/20 14:29:19.26 GKseTsKF.net
>>235
ほら何もわかってない
エラー発生箇所でなんでも解決しなきゃならないと洗脳されてんだね
何もなくてもエラー処理コードを書かなければならない戻り値スタイルの書きすぎで感覚がおかしくなってる
239:デフォルトの名無しさん
19/01/20 14:32:48.63 Q8jHF7yk.net
printfの戻り値もチェックしろよ
240:デフォルトの名無しさん
19/01/20 14:40:21.16 GKseTsKF.net
>>236
戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
そして本当に変換が必要な例外は何かということも考えなくなってしまう
必要かどうかわからないけど何かしなきゃって強迫観念に苛まれてるのだろうね
戻り値スタイルだと伝達処理が必須だから例外スタイルになると不安になるのだろうな
241:デフォルトの名無しさん
19/01/20 17:06:39.20 z2xvgkTe.net
戻り値って何?
242:デフォルトの名無しさん
19/01/20 17:27:50.05 wW/QZhoY.net
戻り値を使う例
printf("%d\n",printf("1+2+3="));
243:デフォルトの名無しさん
19/01/20 17:45:51.48 Q2ecPa0m.net
配列・ポインタ・構造体・クラス→「プログラミング楽勝ンゴwwwwww」
スレッド・コルーチン・テンプレート→「あばばばば・・・」
244:デフォルトの名無しさん
19/01/20 21:20:28.02 Y8m3wOFq.net
はい誰もコード書かないw
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ
245:デフォルトの名無しさん
19/01/20 21:31:17.80 .net
やっぱり例外機構はオカルトだった。皆が長い間この銀の弾丸を装った迷信に惑わされ疲弊した
246:デフォルトの名無しさん
19/01/20 21:52:33.91 mVpLWWyp.net
>>244
だから後出し条件出されると困るから戻り値スタイルでコード書いてくれ
って書いてあるだろ
例外とあまり変わらないんだから書けるよね?
247:デフォルトの名無しさん
19/01/20 22:13:54.05 GKseTsKF.net
>>244
>>209
248:はちみつ餃子
19/01/20 22:17:29.98 /TyOXJfP.net
あのなぁ、俺は他の機能についての話で何度か書いてるけど、
適切な場面で適切に使えってだけの話で、
どんな機能だってそんなに万能だと思ってるやつなんていねぇよ。
どうせ回復できない異常ならちまちまと返却値をとりまわして
上まで運ぶのはクソ面倒くせぇし、
その場で対処する必要があるようなものは
try/catch よりも if で書いた方が短くて簡単だし取りこぼしにくいってのはわかる。
どちらにするべきか判断を付けるコストの方がデカいわっていう場面なら
各プロジェクトのポリシーで一方に決めつけたって別にかまわん。
当たり前すぎて主張するのがアホくさいんだけど、
そんなことは場合によるとしか言いようが無いだろ。
249:デフォルトの名無しさん
19/01/20 22:18:21.76 GKseTsKF.net
異常系の処理がシビアになればなるほど例外が有利になる
リターンコードスタイルは複雑化した分岐と大量の変数のせいでミスを誘発しまくる
例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
例外スタイルにはまったく過不足がない
やりたいことをジャストそのまま書けばよろしい
250:デフォルトの名無しさん
19/01/20 22:25:39.40 GTDVzsz1.net
>>248
中身のない長文は要らんよ
251:デフォルトの名無しさん
19/01/20 22:33:30.46 ps+hJNCY.net
例外はその機構が重いから極端な異常系にしか使わないようにしてるのも今は昔の考え方なのかな
252:デフォルトの名無しさん
19/01/20 22:36:51.24 XHg9p3tl.net
>>250
ここ数10レスほど続いていた中身のない不毛なやり取りより>>248の1レスの方が有意義だと思うぞ
253:デフォルトの名無しさん
19/01/20 22:39:23.56 GTDVzsz1.net
>>252
お前もな~
254:デフォルトの名無しさん
19/01/20 22:55:26.02 GKseTsKF.net
>>251
そもそも正常系では例外の方が速い
255:デフォルトの名無しさん
19/01/20 23:31:58.94 PO2ZqArQ.net
>戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
レイヤーの境界やエラーの粒度の違いに頓着しないのは、どっちかというと安直に例外投げれば良いと
考えている方のような気がするがな。
この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
言及してた人いないでしょ。
256:はちみつ餃子
19/01/21 00:00:25.72 seIeK7lJ.net
>>251
例外にもいくつかの方式があって、SJLJ ってやつは例外を投げないときもやたら遅いが、
他のほとんどの方式は例外を投げないときはゼロに近いコストのはず。
ただ、 SJLJ 以外の方法というのはデバッグ情報を使うためにツールチェインとの連携が必須だとか、
ハードウェアの機能を使うとかいった制約があって移植性に難があったりもするので、 SJLJ も滅びずに残ってる。
要するに例外の処理速度は場合によるが、
普通のデスクトップコンピュータで SJLJ を使わざるを得ないようなみみっちいツールチェイン、ハードウェアって
ことはあんまりなかろうと思う。 (ある?)
257:デフォルトの名無しさん
19/01/21 00:16:50.05 xYP7RvSv.net
>>255
リターンコードスタイルはレイヤ境界どころか体系的にエラー処理を考えるということをしないからなぁ
例外スタイルの人はじゃあどこで処理すんのということもちゃんと考えてる
258:デフォルトの名無しさん
19/01/21 02:42:47.97 sP4gcHu6.net
例外でイベント発生させて、イベントハンドラで受けるのはど?
259:デフォルトの名無しさん
19/01/21 06:13:04.33 NbFzEAOW.net
>>255
> この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
> 言及してた人いないでしょ。
保証は言語側でやってくれるから言及する必要がないだけのこと
そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ
260:デフォルトの名無しさん
19/01/21 07:28:30.34 sP4gcHu6.net
swith caseで分岐する場合もあれば、
関数へのポインタテーブル作って、ジャンプさせる場合もあるわけで、
例外も戻り値分岐も両方普通に使わないか?
C++てイベントとかイベントハンドラは環境とかboost任せで、言語仕様としては未だに確定してないのか?
C++11でようやくマルチスレッドや排他制御が仕様に盛り込まれたり、
テンプレートの仕様いじくるよりこっちの方がよっぽど大事なんじゃないのか?
261:デフォルトの名無しさん
19/01/21 08:25:41.60 vJCo0PxF.net
>保証は言語側でやってくれるから言及する必要がないだけのこと
保証なんてしないよね?catch忘れたらそのまま上まですっ飛んでいくだけ。
Javaのような検査例外ならそこに差異があることを意識されられるかもしれないけど。
>そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ
そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
それを防ぐためには呼び出し先から送られる可能性のあるすべての例外を把握する必要があるが、
検査例外がないなら動的型付言語のように投げる側と受け取る側とで平仄を合わせてやるしかない。
262:デフォルトの名無しさん
19/01/21 08:37:50.82 Kndge7xV.net
大前提が間違ってる
例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ
途中でキャッチして処理するのはあくまでベターなオプションであり、それを必須とするような作りにしてはいけない
263:デフォルトの名無しさん
19/01/21 08:55:24.27 NbFzEAOW.net
>>261
> catch忘れたらそのまま上まですっ飛んでいくだけ。
闇雲にキャッチしたいならcatch(...)ってやればいいだけ w
> そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
本来キャッチが必要な例外を漏らしているならそれはバグ
それは戻り値スタイルでも同じ話
違うのは例外はキャッチする必要の無い例外についてはそこで考慮する必要はない、自動的に上位に渡されるから上位の然るべき場所で考慮すればいいから
それが>>249の言う
> 例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
ってこと
264:デフォルトの名無しさん
19/01/21 08:56:49.38 vJCo0PxF.net
>>262
半分同意。
結局のところエラーの種類に応じてきっちり対処するなら検査例外的な仕組みが必要になるが
そうでなければエラーの内容など見ずにlet it crash的に対処するしかない。
どっちつかずが一番ダメなやつ。
265:デフォルトの名無しさん
19/01/21 08:58:29.41 Kndge7xV.net
(検査例外とかいうJava自身も認める失敗作は論外として、)例外機構は正しく使えばエラー処理に対する関心の分離に有効なんだよ。
ところがC++では例外を煩わしいノイズと見做す人が多い。これは即ち関心の分離ができてないわけだ。
その一番の原因は、例外型がロクに標準化されてないことだろうね。
最上位での集約処理を実現するには、下位の全てのコードが制御下になければならない。
これは膨大な既存資産と貧弱な標準ライブラリを持つC++においては非現実的な前提である。
266:デフォルトの名無しさん
19/01/21 08:58:39.64 unEY8tjt.net
すべての例外を把握する必要はない
回復可能かつ回復が要件に含まれるなら個別に処理すべき
それ以外はアスペクトで処理すればいい
267:デフォルトの名無しさん
19/01/21 09:04:47.90 nVlZ7k5e.net
>>247
だからさ、比較できるように例外スタイルで一度きちっと異常系対応して
かつスーパーエレガントなのを書いてくれよって言ってんの
お前のは体よく異常系の処理全無視してるだけじゃん
catchしたい人が必要なところでcatchすればとか言うんだろうけど
例外発生場所から遠くなればなるだけ何が原因で例外が発生して、
その回避はどうすればいいかが不明瞭になっていくってのは
散々語られてる例外の欠点
リターンコードは泥臭いが下層からくるエラーをどう処理してるかはコード見れば一目瞭然
エラーを上位に伝搬させるか、リカバリーするか、その場でクラッシュさせるか
ローカルに記述が完結できてる
APIとして外部に公開するときもインタフェースの仕様にきっちり責任持たせることができる
ちなみにプルリクでレビューする文化があればエラー無視してるような雑はコードは突き返されるだろう
見ればすぐわかるんだから
大規模な開発を経験したことない人はこういう観点でソフトウェア開発を
考えられないんだよ
最後にもう一度言っておくけどおれは例外を完全否定してるわけじゃねーから
使える場所は限られるって意見ね
268:デフォルトの名無しさん
19/01/21 09:07:50.76 nVlZ7k5e.net
>>262
> 大前提が間違ってる
> 例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ
これがど素人の意見
ソフトウェアの品質について考えたことがない
269:デフォルトの名無しさん
19/01/21 09:11:48.87 nVlZ7k5e.net
「不正な入力です」
「ネットワークでエラーが発生しました」
「書き込みに失敗しました」
こういう情けないダイアログが表示させて終わりのアプリを作るやつね
270:デフォルトの名無しさん
19/01/21 09:19:18.64 9okmCQOj.net
>>269
それでも正常に回復できてるならそれでいいケースは多い
例外の最大の利点は例外安全さえ死守できていればアドホックな例外処理が必須でなくなることで、
より丁寧な処理が必要になれば後から追加すればよい
まあ組み込みとかやってる人には馴染まない考え方だろうね
271:デフォルトの名無しさん
19/01/21 09:35:09.59 9okmCQOj.net
まあC++開発者が未処理例外=クラッシュと短絡的に考えてしまう気持ちはよく分かるよ
呼び出し階層の途中に一つでも if (hoge() != SUCCESS) errorhandle(); があれば例外安全は破綻するわけで、あまりにも非現実的
272:デフォルトの名無しさん
19/01/21 09:54:05.98 NbFzEAOW.net
>>267
仕様は>>218が決めるんだから>>218がコードを提示すべき
>>236みたいに後出しの条件出されても困るからな
273:デフォルトの名無しさん
19/01/21 10:02:59.35 +Z2Zhk1G.net
>>267
> 例外発生場所から遠くなればなるだけ何が原因で例外が発生して、
> その回避はどうすればいいかが不明瞭になっていくってのは
> 散々語られてる例外の欠点
それ戻り値スタイルでも同じだろ
> リターンコードは泥臭いが下層からくるエラーをどう処理してるかはコード見れば一目瞭然
だからそれはすぐ上位で処理することが前提になってるだろ
上位に何度も伝搬したら例外と同じになる上に伝搬するコードをそこら中に書く羽目になる
> ちなみにプルリクでレビューする文化があればエラー無視してるような雑はコードは突き返されるだろう
例外処理を書かないことはエラーを無視するんじゃなくてそのまま上位に伝搬してるだけ
書かないと無視してると取るのは例外をきちんと理解してないってこと
> 見ればすぐわかるんだから
お前の能力がな w
274:デフォルトの名無しさん
19/01/21 12:21:37.48 Di3L4KSP.net
>>267
例外を使いこなせていないね
例外の型とパラメータをみれば何が起こったかはっきりわかる
おそらく君は例外の種類を使い分ける習慣がないだろ?
あったとしてもせいぜい標準ライブラリの例外をなんとなくふり分ける程度だろうね
でないとこんな発言はしないから
まずは例外を定義するところから初めてごらん
それと大規模開発をしたことがないのはそちらだろう
関数コールするたびにずらずらと変数や分岐を書かれたらあっという間に管理不能になる
大規模だからこそ標準的なコード、必要十分なコードというのが大切になる
275:デフォルトの名無しさん
19/01/21 12:52:23.62 Di3L4KSP.net
リターンコードスタイルをレビューに出すと袋叩きにされるぞ
・ノイズが多すぎて正常系のレビューが不可能
・同じくどのエラーが上位伝達、エラー変換、共通対応、個別対応なのか見てすぐにわからない
・同じく要件漏れを見落としやすい
・正常系、異常系、判断、伝達などあらゆる要素が密集して強く結合しているため仕様変更があった場合の影響が大きすぎてレビューしきれない
276:デフォルトの名無しさん
19/01/21 13:00:29.05 9okmCQOj.net
>>275
考え方自体には同意するけど、>>271で示したように例外安全が破綻しているケースについてどう考える?
エラーコードを前提にクリーンアップ処理が記述されているコードが混入しているような場合ね
あくまでC++に限った話だけど、大規模開発で完全な例外安全を維持するのは極めて困難だか実際には絵に書いた餅と思ってる
277:デフォルトの名無しさん
19/01/21 13:01:15.22 9okmCQOj.net
>>276
訂正
極めて困難で、実際には絵に描いた餅
278:デフォルトの名無しさん
19/01/21 13:05:57.47 eQbQQa6X.net
レビュアーの経験値不足って感が否めない
279:デフォルトの名無しさん
19/01/21 13:14:15.22 NbFzEAOW.net
>>276-277
必要なら直せばいいだけ
非常に稀な事象についてまで例外安全を遵守する必要はないでしょ
そもそもそういう変なコードが混入してる体質の組織で何を言ってるんだよ? って話だと思うけど
280:デフォルトの名無しさん
19/01/21 13:20:41.40 9okmCQOj.net
>>279
文化と素養の問題だよ
例外の是非でこれだけ荒れる現状を見てれば、例外のスルーなんて怖くてできねえよ
そりゃあんたが全てのコードをレビューしてマサカリ投げまくってくれるなら別だけどねえ
281:デフォルトの名無しさん
19/01/21 13:46:08.82 NbFzEAOW.net
>>280
ごめん、言ってることがよくわからん
そもそも
if (hoge() != SUCCESS) errorhandle();
なんてコードがあったら戻り値スタイルでもどうしようもない
例外は魔法の杖じゃないんだから何でもかんでも例外使えば解決するわけじゃなくて戻り値スタイルより楽にできるというだけの事だよ
プログラムがデカくなるほどその差は開くけど
282:デフォルトの名無しさん
19/01/21 15:00:28.97 9okmCQOj.net
>>281
result = hogehoge();
if (failure(result)) エラー処理();
リソース解放();
これhogehogeが例外起こしたらリークするだろ
283:デフォルトの名無しさん
19/01/21 15:09:35.03 NbFzEAOW.net
>>282
スマートポインタ使うなりcatchしてリソース解放して例外再送出するなりいくらでもやりようはあるだろ…
ちょっとレベル低くね?
284:デフォルトの名無しさん
19/01/21 15:25:30.15 9okmCQOj.net
>>283
だからそれが例外安全だよ
勉強になったね
285:デフォルトの名無しさん
19/01/21 15:27:04.68 NbFzEAOW.net
流石に恥ずかしくね? w
286:デフォルトの名無しさん
19/01/21 15:51:37.78 GjW/cezm.net
>>283
基本的にデストラクタやリソース開放系は例外投げられると大変なことになる
catchしてなんて簡単にいってるけどもcatch(...)をそこに入れることになるのはわかるかね
287:デフォルトの名無しさん
19/01/21 16:15:33.27 NbFzEAOW.net
で、そんな当たり前のことを言って何が言いたいの?
聞きかじりの知識を披露してるとしか思えないんだが… w
288:デフォルトの名無しさん
19/01/21 18:01:37.80 .net
例外機構は宗教
多くの人が正しいと盲信しているに過ぎない
289:デフォルトの名無しさん
19/01/21 21:32:31.75 sP4gcHu6.net
戻り値でイベント投げるという選択肢がない言語使用自体くそじゃね?
290:デフォルトの名無しさん
19/01/21 22:06:05.18 5kYBxhZB.net
Cにそんな機能あったっけ?
それとも別の言語の信者が折伏に来ているの?
291:デフォルトの名無しさん
19/01/21 23:00:01.73 vJCo0PxF.net
>>265
そう、検査例外を正しく使うのはしばしば困難で批判も多いな。ただ、呼び出す処理がどのような
例外を返すか、静的な型検査による保証を与えてくれる仕組みとしては他に無いのも事実。
検査例外を否定するのであれば例外型に頼らない(>>264の後者)か、プログラマの努力で
整合をとってやる(>>261の最後)カウボーイ的プログラミングになる。
>>265はあくまでも例外に型を期待しているようだからカウボーイの方なんだろう。
292:
19/01/21 23:52:35.55 N0KGcgmj.net
>>291
>プログラマの努力で整合をとってやる(>>261の最後)カウボーイ的プログラミングになる。
…
…
これって「カウボーイ的」と形容されるべきものだったんですか?
catch の引数は値ではなくて、「型」だから、
テキトーな super class ERROR の下に個別エラー用派生クラスを列挙しておき、
臨機応変に catch (ERROR &e) を噛ましています…
>>256
一応例外を投げておくけれども、まじめにサポートする気はさらさらなく、
そもそもやる気は皆無・全くゼロであることを、ただ、それだけを全心全霊で表現するためだけに
throw 13;
293:はちみつ餃子
19/01/22 02:54:09.24 FdSNzm47.net
例外の処理速度については、こういう提案もある。
URLリンク(ezoeryou.github.io)
要するに、投げるオブジェクトが条件を満たすときは、
暗黙の返却値のような形で例外を伝播する仕組み。
バイナリレベルの取り扱いも ABI を決めさえすれば済むだろうし、
互換性も確保しやすそうに思う。
294:デフォルトの名無しさん
19/01/22 07:12:53.52 c7vqWXz4.net
どう見ても例外否定派の方が宗教がかってる…
295:デフォルトの名無しさん
19/01/22 08:50:21.38 Z/sMOZE7.net
環境の方の質問NGなら完全スルーでお願いします
Windows8.1 64bit のうえで Windows98SE でも動く C のバイナリを作ろうと思ってるのですが
LSI C 試食版以外に何か良い方法がないかなあと…
Windows98SE の方に Visual C++ 6.0 & SP6 をインストールしても良いのかも知れませんが
DLL の整合性とか不安
VC++ 2005 は iso 持ってるだけ…Windows98SE で動くバイナリが生成できるとか何とか
296:デフォルトの名無しさん
19/01/22 09:09:13.74 Z/sMOZE7.net
業務で使った経験は一切ないです
使い捨てレベルのものを書くのが目的です
297:デフォルトの名無しさん
19/01/22 12:47:22.45 beRmTaV+.net
TEST::TEST()
{
うんたら
}
ってコンストラスタがあって、このクラスにパラメータ付のコンストラスタを追加したいとき
C# だったら
TEST::TEST(int param) : this()
{
増やす機能
}
みたいに書きますが C++ の場合はどうやって書きますか
298:デフォルトの名無しさん
19/01/22 13:28:39.91 /wbMKv3O.net
TEST::TEST(int param) : クラスのパラメータ(param)
{
増やす機能
}
299:デフォルトの名無しさん
19/01/22 14:01:29.45 mZt3aCP3.net
>>297
委譲コンストラクタでググると出てくると思う。
たしかC++11で追加された機能。
300:はちみつ餃子
19/01/22 14:03:25.02 FdSNzm47.net
>>295-296
LSI-C試食版 って Windows 用どころか MS-DOS (16bit) の、しかもスモールモデルしか作れないじゃん。
使い捨ての、いいかげんな富豪的プログラミングしたらすぐメモリ足りなくなるぞ。
ワイとしては Open Watcom C++ を推すやで。
301:デフォルトの名無しさん
19/01/22 14:11:32.02 /wbMKv3O.net
>>295
URLリンク(bellard.org)
URLリンク(en.wikipedia.org)
URLリンク(dyama.org)
URLリンク(github.com)
302:デフォルトの名無しさん
19/01/22 15:51:04.50 DsO4NZlu.net
LSI-Cとかなっつw
昔の勉強用コンパイラといったらこれだったな
303:デフォルトの名無しさん
19/01/22 16:10:30.87 3oaAhSoC.net
LS愛ちゃん
304:はちみつ餃子
19/01/22 16:47:15.38 FdSNzm47.net
>>302
Cマガの付録CDに常に収録されてたよな!
305:デフォルトの名無しさん
19/01/22 17:01:23.17 8l7UUA+M.net
LatticeCとかBDS-Cとか使ってたわ
306:デフォルトの名無しさん
19/01/22 17:22:22.39 beRmTaV+.net
>>298-299
TEST::TEST(int param) : TEST()
{
増やす機能
}
で出来ました。ありがとうございました。
307:デフォルトの名無しさん
19/01/22 18:21:52.81 Z/sMOZE7.net
bcc32c でコンパイルしたバイナリが Win98SE 上で動くことを確認…
Win98SE 上だと Turbo C が動くことを確認…
Open Watcom C++ というのは存じませんでした
確認してみます
308:デフォルトの名無しさん
19/01/22 18:30:45.76 hELj0NVW.net
森公一郎さん、4年前に亡くなってる
309:デフォルトの名無しさん
19/01/22 18:51:51.72 c7vqWXz4.net
>>295
> VC++ 2005 は iso 持ってるだけ…Windows98SE で動くバイナリが生成できるとか何とか
なんで試さんの?
310:デフォルトの名無しさん
19/01/22 20:54:28.21 Z/sMOZE7.net
DLL hell に躊躇
311:デフォルトの名無しさん
19/01/22 23:43:17.99 f8uEJHYw.net
LSI-C試食版www
懐かしいなあ
あの頃はものすごくCPU遅かったよね
486にして感激したからな
もうC言語でプログラムはしたくない
C++だ・・・
312:デフォルトの名無しさん
19/01/23 03:50:30.92 2NaZdHzA.net
コメントに//が使えない時点でもうダメだな俺はw
313:デフォルトの名無しさん
19/01/23 06:49:23.93 u7DJzLvn.net
古いOSでも動作させたいけど、ソースは新しい規格で書きたい、
と言うのは要望としてはありうるな。
>>295 はLSI-C試食版(C89相当だっけ?)を使ってるようだから、
そのクチではないのかも知れんけど。
314:デフォルトの名無しさん
19/01/23 07:14:34.51 aGw/aeEH.net
>>310
今時なら仮想マシンでやればいいだけだろ
315:デフォルトの名無しさん
19/01/23 08:57:06.72 A4LjhfFf.net
>>312
コメント前に // つけるより
/*
コメント
*/
あるいは
#if 0
コメント
#endif
のほうがすっきりしないか?
316:315
19/01/23 08:57:45.81 A4LjhfFf.net
コメントが複数行にわたる前提ね
317:デフォルトの名無しさん
19/01/23 09:18:31.94 NxchbiGL.net
だから何?
それに同意しようがしまいが単一行コメントのときに面倒なのは変わらないよね
個人的にはエディタがコメントの一括付け外しに対応してるなら複数行でも//の方が見やすいと思ってるけど
318:デフォルトの名無しさん
19/01/23 09:36:35.20 WSWjtujW.net
C言語の a=b; って
アセンブラで言うと、メモリ→レジスタ→メモリって移し替えてるのと同じ?
メモリ→メモリにデータコピーする時って、必ずレジスタを経由しないとだめなのかな?
アセンブラ勉強初めたばっかで何言ってんだこいつ的な感じだったらごめん。
319:はちみつ餃子
19/01/23 10:06:54.98 +T2/7smM.net
>>318
CPU の種類による。
アセンブラはアセンブラという言語の規格があるわけではなくて、
各コンピュータの機械語の単語を便宜的に読みやすい書式に置き換えた
ものの総称なので、使える命令は各アーキテクチャのデザインに従うし、
書式のバリエーションもある。 いくつかの伝統的な習慣はあるけれど。
データの移送にレジスタを経由しなければならないようなデザインの CPU もあるし、
そうでないものもある。
メモリアクセスをする命令とその他演算の命令を明確に分離するようなデザインの
アーキテクチャを特に Load?store architecture と呼んでる。
URLリンク(en.wikipedia.org)
コンピュータの設計の根本を左右する方針の違いなので、
理解があやふやとはいえ、ここに引っかかりを感じたというのは才能を感じる。
320:デフォルトの名無しさん
19/01/23 15:54:30.09 WSWjtujW.net
>>319
自分が勉強してたCPUがたまたまレジスタ必要とするものだったということですね。ありがとうございます。
あと、intelとryzenは、どちらのCPUであっても殆どのソフトは動作しますが
この2つのCPUのアーキテクチャオペランドは同じということでしょうか?
ゲームなんかは高速化の部分でアセンブラ使う場所も頻繁にあるんじゃないかなと思うのですが。
321:デフォルトの名無しさん
19/01/23 16:07:56.74 WSWjtujW.net
すみません自己解決。
x64ですね。
322:デフォルトの名無しさん
19/01/23 22:57:36.31 A4LjhfFf.net
>>317
wwww
逆に、だから何?
エディタが/* 入力と同時に
*/ を自動挿入してくれるなら全く変わらないだろ
それともおまえのエディタは / 入力で
もひとつ/ を自動挿入するように設定でもしてるのか?
ゆとりもここまで来るとどーしよーもねーな。
323:デフォルトの名無しさん
19/01/23 23:18:56.27 A4LjhfFf.net
>>318
>>319
状況によるが、
a = b;
はメモリを介せず、できるだけレジスタ間コピーになるように最適化される。
んでメモリ to メモリを許すのはCISCと相場が決まってる
RISCはメモリ to メモリは命令にない 。命令セットを減らしてるからこそ reduce
このおかげで回路が簡単になり、所用クロック数をほぼ等しくして、クロック(Hz)をあげることができた。
このタイプはメモリ→レジスタ→メモリとせざるを得ない
今は、パイプラインを深くして、CISCでもクロックをあげられるようになったのでRISC/CISCはあんまり関係なくなった。
CICSの代表はx86なのでメモリ→メモリ命令セット調べてみ。
CISCの歴史的な経緯がわかるのは、これもCISC代表のx68kやH8は、命令セットごとに大幅に所用クロック数が違う。
それに対してx86の流れをくむ最新設計のRL78だとほとんどの命令セットが1クロックとなって。RISCと変わらない上に、
メモリ to メモリが可能となってる。それでも メモリ to レジスタに比べて1クロック増えてる。
メモリ to メモリ とレジスタ to メモリを同クロック数で実行しようとするなら、 バスラインがもう一組(例えば32bit)必要になった上に、
2ポートメモリが必要になってしまうwwww
324:デフォルトの名無しさん
19/01/23 23:20:08.21 A4LjhfFf.net
アンカー違い
× >>319
○ >>320
325:デフォルトの名無しさん
19/01/23 23:21:30.54 MK/3pF0O.net
>>322
自分で複数行が前提だと言っときながら何言ってんの君
326:デフォルトの名無しさん
19/01/24 00:07:57.67 sZmPY6bv.net
>>325
*/の自動補完は複数行だろうが単一行だろうが関係ないだろが。
おまえがエディタ支援による入力補助を持ち出したから応じてやっただけだろゆとり
入力の手間はむしろ/* */の方が楽なんだよお馬鹿さん
327:デフォルトの名無しさん
19/01/24 00:17:17.17 sZmPY6bv.net
>>325
それとさ俺が複数行限定といってるのに
>>317
>単一行コメントのときに面倒なのは変わらないよね
また単一行の話をしてるのはそっちだろーが。
おまえは朝鮮人か?それともボケてんのか?
328:はちみつ餃子
19/01/25 04:31:55.12 D9LdM3uI.net
まあ例えばインテルアーキテクチャでも、
機械語の命令列を内部で μop に分解して最適化してから実行したりするので、
機械語のレベルなんてまだまだ高級な層。
内側では RISC 的なデザインとも融合していて
正直言って、そこで何が起きているのか正確に理解するのは無理。
(結果に影響しない範囲で) 命令を並べ替えることすらあり、
しかし、マルチスレッドと絡むとわけわかんなくなりがち。
Z80 の牧歌的な世界を知ってると隔世の感がある。
実際、演算能力で言えば何百倍とか何千倍とかいう規模で違うもんな……
329:デフォルトの名無しさん
19/01/25 04:48:14.16 RBnOR415.net
Z80Aで、おおむね4Mhzだったような
無印Z80は知らない
日本人だとZ80AよりμPD870Cの方が普及???
330:デフォルトの名無しさん
19/01/25 05:29:09.86 VVNAHEZ9.net
>>329
μPD780C-1な。870だと電卓チップになってしまう。
詰めが甘いな :-P
331:デフォルトの名無しさん
19/01/25 09:28:14.11 U8XeH6tm.net
>>328
自分もこの結論に達した
332:デフォルトの名無しさん
19/01/26 10:50:23.69 ibgF9MiT.net
初心者です
関数の引数の1つとして3種類の構造体を受け入れたいという場合オーバーライドで3つ書くのよりスマートなやり方ありますか?
333:デフォルトの名無しさん
19/01/26 11:07:13.35 MaEquCGy.net
オーバーロードで3つ書く方がスマートですよ
334:デフォルトの名無しさん
19/01/26 11:19:38.97 UuAHSy+r.net
関数テンプレートというものが一応存在する。
tempate<class T> void func(T arg)
{
...
}
このように記述すると、型に応じたオーバーライドをコンパイラが自動で作成してくれるという機能。
ただ、実際に呼び出すコードを書かないと(型が確定してないから)コンパイル対象にならなず限定的なエラーチェックしか行われない、
エラーが出た時に問題が関数内なのか呼び出し元なのかが分かりづらい、エラーメッセージもわけわからない、という欠点があるので、
あまり初心者向きとは言えない。すごく便利なんだけどね。
335:デフォルトの名無しさん
19/01/26 13:38:51.24 ibgF9MiT.net
>>333-334
ありがとうございます
オーバーロードでしたね^^;
336:デフォルトの名無しさん
19/01/26 17:08:07.75 a/6Wmtam.net
>>335
Variantが使えるならVariant
対照的にunionはおすすめしない
337:デフォルトの名無しさん
19/01/26 18:04:32.62 wmp8xlgD.net
結局中で分岐だろ
338:デフォルトの名無しさん
19/01/27 04:46:54.79 tVyD3cTv.net
>>336
variant勉強します
ありがとうございます
339:デフォルトの名無しさん
19/01/27 23:53:20.30 PNYmCs1E.net
投機実行がセキュリティホールになるなんて
当時の技術者は予見できたのだろうか
340:デフォルトの名無しさん
19/01/30 21:22:57.38 pEOkr0Qg.net
いやー
論文ネタに困った情報系の役にたたん学者がひねり出したネタだろ
投機実行を攻撃に使った実例なんてあるのか?
341:デフォルトの名無しさん
19/01/31 10:11:52.05 .net
煽ってたら論文ネタに困った情報系の役にたたん学者が投機実行を攻撃に使った実用法をひねり出したらどうすんだ
342:
19/01/31 23:01:04.87 GI5VQ7Hx.net
>>340
手元にようやく SandyBridge(IvyBridge) を確保しましたのでいろいろ試してみようと思っています
343:デフォルトの名無しさん
19/01/31 23:07:28.54 sIpyZVmV.net
Googleだったっけ、見つけたのは?
役に立たない暇な部門があったんだ
344:デフォルトの名無しさん
19/02/01 03:34:40.30 fFpCRDyYq
twitter で見かけたのですが、a[i++] = 0; って定義済みですよね?
345:デフォルトの名無しさん
19/02/02 08:27:42.12 tJohl//6.net
C++って未だにasync,awaitがないんだな?
江添とかtemplate使えないC++プログラマはポインタを使えないCプログラマと同じゴミとかいってるんだが、
templateは確かに面白いし頭の体操になるけど、templateはひな形があれば、泥臭くエディタちょい編集して使い回したり、
yacc/lex使うとか、ループのアンロールはスクリプトで展開するとかいくらでも手段はあるので、
どう考えてもasync,awaitあたりの実装の方が重要だと思うけどな。
346:デフォルトの名無しさん
19/02/02 08:50:29.54 UyxpbyFe.net
futureでいいんじゃね。C#のawaitもFutureパターンの実装でしょ。
347:デフォルトの名無しさん
19/02/02 11:01:27.11 tJohl//6.net
>>346
.net動いてるのとそれが前提でないC++では全く同じにはいかんのだろな
教えてくれてありがと
348:デフォルトの名無しさん
19/02/02 11:23:05.73 ZfwOhOL2.net
コルーチン拡張は提案段階なんだっけ?
MS界隈ならC++/WinRTで使用例があるけど
349:デフォルトの名無しさん
19/02/02 11:47:15.38 qgXcCvEo.net
>>347
いや別に
C#のasync/awaitって単なるステートマシンジェネレータだし
標準化は至難だろうけど技術的にはC++でできない理由はない
350:デフォルトの名無しさん
19/02/02 13:08:31.83 cZfjknnV.net
>>345
再帰includeとdefineの組み合わせでも大抵はなんとかなったりするなw
templateは型に縛られてるから安全な反面、不便なこともあるよね。
sjisとutf8が区別できないし。なぜchar8_tを作らなかった…(´・ω・`)
351:デフォルトの名無しさん
19/02/02 13:11:59.53 OjPcxytf.net
テンプレートよりObjective-Cのやり方の方が好き
352:デフォルトの名無しさん
19/02/03 12:10:14.76 JIYTTgNa.net
江添なんて最新仕様知ってる俺スゲーやりたいだけの奴だからな。
まともに使えるプログラムを書いてるわけじゃない。
353:デフォルトの名無しさん
19/02/03 14:07:26.32 IhqR/Csp.net
でもプログラム書くなんて誰でも出来るじゃん
354:デフォルトの名無しさん
19/02/03 14:11:00.19 s/ZudwPt.net
おまえのgithubさらせよ
355:デフォルトの名無しさん
19/02/03 14:15:39.93 IhqR/Csp.net
>>354
お前が先に晒せ
356:デフォルトの名無しさん
19/02/03 14:56:06.74 nprxb46h.net
きっとはぶられる
357:
19/02/03 15:08:24.54 t4xt++Qj.net
>>354
そろそろ github に移行しようか…
スレリンク(tech板)
スレリンク(tech板)
スレリンク(tech板)
スレリンク(tech板)
スレリンク(tech板)
358:デフォルトの名無しさん
19/02/04 12:56:22.82 Y0slw8we.net
>>352
江添とか書いてることみてるとムカっ腹立たないか?
何様だこいつ。しかもやってることキチガイだろ
359:デフォルトの名無しさん
19/02/04 13:07:21.17 qU4d2Hmv.net
>>358
は?お前じゃあ江添より仕様に詳しくてC++のコンパイラを実装出来るような能力なのかね?ええ?
360:デフォルトの名無しさん
19/02/04 14:02:36.47 zmkNdOJF.net
工学部生よりましやろ
361:デフォルトの名無しさん
19/02/04 14:08:27.48 n76odGjc.net
例え世界一の物知りでもそんな口の効き方をする人とは
付き合いたくないな
RMSにはEMACSやgccといった作品があるから許される
362:デフォルトの名無しさん
19/02/04 14:56:20.34 iZ37iel0.net
この3冊は、日本人が作った神の書。
皆、基地外。基地外しか、こんな本を書けない
Linux プログラミング・インタフェース、Michael Kerrisk、2012
この本は、神の書と言われていて、翻訳本は日本しか出ていない。
著者は10年、man-pagesを書いてきた人で、翻訳者・アドバイスの千住治郎も、技術者
C++11/14 コア言語、江添 亮、2015
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
ドワンゴ江添は需要があれば、テンプレートの本を出そうか、なんて言ってるけど、既にこの本がある
C++テンプレートテクニック 第2版、
επιστημη(えぴすてーめー)・高橋 晶、2014
363:デフォルトの名無しさん
19/02/04 15:06:30.08 zmkNdOJF.net
ステマ宣伝乙
5ちゃんでは禁止
364:デフォルトの名無しさん
19/02/04 15:58:27.96 n76odGjc.net
Linuxの黎明期にman page 書いていたのは janneさん事、中谷千絵さんだよ
エピスメーテーさんは昔っから雑誌に記事を書いていたな
The Basicだった?
真ん中の人は知らないけどどんな貢献をしたの?
365:はちみつ餃子
19/02/04 16:09:06.48 kMmgpke2.net
>>364
ざべは読んだことないけど、Cマガでεπιστημηの名前はよく見たな。
今では Teratail で C++ の質問をするとたまに回答者として出現するよ。
366:デフォルトの名無しさん
19/02/04 16:27:32.33 n76odGjc.net
>>365
そうでしたか、CUJJとかは買っていたけど...CMAGは
時々だったので
367:デフォルトの名無しさん
19/02/04 17:40:44.94 Y0slw8we.net
>>362
えぴすてーめーと高橋のC++テンプレ本は神だわ。
なんというか、読者に理解させてあげたいという熱意が伝わってくる
江添とは大違い
江添にお布施するつもりは毛頭ない。死ねばいいのに
368:デフォルトの名無しさん
19/02/04 17:42:39.71 Y0slw8we.net
>>359
本人様のご登場wwww
369:361
19/02/04 18:14:10.83 iZ37iel0.net
>362 の3冊は、単なる規格の文章ではなく、それをソースコードの実例にした所がすごい!
だから、プログラマーは皆、Kerrisk の本を枕にして寝ろって、言われている
たぶん、江添やMISRA‐C の本も、外国で発売されていれば、大絶賛されるはず!
370:デフォルトの名無しさん
19/02/04 19:01:28.11 GH1lEwiX.net
エピスや高橋ageて江添sageってのもよくわからんな
立ち位置違うし江添は委員会の人間だから
仕様や提案について素晴らしいとかクソとか言う権利や責務がある
それをsageるってことは「現行仕様マンセー、標準規格に欠点など無い!」みたいなことか?
371:
19/02/04 19:11:50.08 CLpqTC7n.net
>>362
エピさん単著は買わないですね、エピさんの文章は今の言葉で表現するとすれば「ポエマー」が近い
同じくポエマーに分類される私がいうことではないのですけど…
372:361
19/02/04 19:22:56.32 iZ37iel0.net
元々は、Kerrisk も、江添やMISRA‐C のメンバーも、
規格をソースコードの実例で、表示してやろうという、とんでもない企画!
よく規格厨みたいな香具師がいて、企画書を読めって言うけど、
文章で書かれてもわからないし、全く出来るようにならないから、業を煮やして書き始めた
こんな面倒くさいことを、何年も掛けて書くかね?
こういうのは、忍耐力がある日本人が得意なんだろう。
外人は、まずやらない
373:デフォルトの名無しさん
19/02/04 19:24:18.62 n76odGjc.net
MISRA はBOSCH を引き込み損なった時点で絵に描いた餅でしょうね
デンソーが勝利すれば勝ちの目も出て来るかもしれないが
374:デフォルトの名無しさん
19/02/04 19:29:03.26 Y0slw8we.net
>>372
>規格をソースコードの実例で、表示してやろうという、とんでもない企画
いや言語の解説本は規格をわかりやすく、ソースコードを例示して解説するでしょ。
それがなければ、規格だけでいいわけで、解説にならない。
わかりやすく書こうとしてるけど、そこの熱意の持ち方と、おつむのレベルでほんとにわかりやすいかどうかが問題なんだろ。
375:デフォルトの名無しさん
19/02/04 19:32:47.98 GH1lEwiX.net
そら商業目的の本だったらわかりやすく書くの当たり前だろ
江添の本は読んだことないから分からんけど
売られてる本とブログで比較してないか?
376:デフォルトの名無しさん
19/02/04 19:36:24.60 Y0slw8we.net
>>372
>こういうのは、忍耐力がある日本人が得意なんだろう。
>外人は、まずやらない
K&R も Stroustrapも規格になるまえからやってますがな
ソース示してこつこつと。
何もプログラム言語だけじゃないわ。人に説くこと、伝道師のようなwriterは日本人よりむしろ、英米人に多い。
クヌースの The Art of Computer Programmingあたり読んでみ。
377:デフォルトの名無しさん
19/02/04 19:46:25.23 Y0slw8we.net
>>375
反響見て、読んだやつにバグだしさせてたあとブログ印刷物なり、ebook販売するんだから
金取ろうが、無償でやるかはどーでもいい話
日本語のコンピュータ書籍なんて販売数からしてとてもとてもメシ食えないから
ほぼ実益のないめんどくさいだけの作業
ブログでわかりにくければ本になってもわかりにくいことは保証する
378:デフォルトの名無しさん
19/02/04 19:48:43.30 9WmylojK.net
クヌースの4-1巻目は、かなりの分量をZDD/BDDの説明に割いていて
このアルゴリズムは北海道大学で日本人が考えた物だね
で、その江添さんという方はどの様な技術貢献をしたの?
379:デフォルトの名無しさん
19/02/04 20:02:32.24 Y0slw8we.net
>>378
警察に喧嘩売って訴訟おこしたこと以外知りませんがな
きちがいの所業なんざ
380:デフォルトの名無しさん
19/02/04 20:32:13.56 GH1lEwiX.net
まぁC++テンプレートテクニックがわかりやすい良書なのは同意するけど
高橋晶ってたまにテクニックのメリットを語るときに
デメリットに気づいてない(またはスルーしてる)ことがあるんだよな
わかりやすくても鵜呑みには出来ない
381:デフォルトの名無しさん
19/02/04 20:36:58.42 Y0slw8we.net
ま、江添が好きならどーぞご勝手に俺は願い下げってだけ
382:デフォルトの名無しさん
19/02/04 20:39:36.21 GH1lEwiX.net
好きとは言ってないよ
結局役に立つ&正確な情報を書いてるかどうかが全てだ
383:デフォルトの名無しさん
19/02/04 20:41:05.88 GH1lEwiX.net
というか江添のブログでも「あれ?おかしくね?」みたいなことあったから
どっちがどうとも言えないけど
384:デフォルトの名無しさん
19/02/04 21:00:45.66 Y0slw8we.net
だいたい
ドマンコ
とかいう社名が下品すぎる
385:デフォルトの名無しさん
19/02/04 22:23:14.32 ZVfvG47Q.net
>>365
毎月題材がカウンタークラスの人…
386:デフォルトの名無しさん
19/02/04 23:23:10.64 Y0slw8we.net
URLリンク(qiita.com)
実に参考になった
387:デフォルトの名無しさん
19/02/04 23:47:34.63 xjVdC68S.net
型指定するのが嫌だから最初にautoを使うc++入門書籍を書こうとしてたり、
まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
普通の精神してりゃ信用せんわな。
根本的にありゃ馬鹿だよ。
388:デフォルトの名無しさん
19/02/04 23:59:20.89 GH1lEwiX.net
>まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
江添みたいに標準化委員会に属してたら正しいと思うけどね
何もコミュニティに貢献しない趣味グラマだったりライターでもない奴が言ってたらアホだが
389:デフォルトの名無しさん
19/02/05 01:34:09.47 PwKFrksX.net
趣味グラマにドワンゴが給料払ってるんだろwww
390:デフォルトの名無しさん
19/02/05 06:14:00.98 sYtbTM3p.net
すみません
n秒ごとに関数foo()を繰り返し実行するような、かつ「低負荷な」方法を教えてください。
n秒は、精度はだいたいでよくて、たぶんnは600(つまり10分)程度にしたいと思っています。
windows 10 で、gccで最新の標準C++ とboost C++ が使用可能です
よろしくお願いいたします
391:はちみつ餃子
19/02/05 06:20:20.09 VmiK9YL/.net
>>390
SetTimer API を使って WM_TIMER イベントの発生を待つのが妥当な方法だと思う。
イベントが発生するまでは何もせずに待つだけなので低負荷。
392:389
19/02/05 06:57:10.23 sYtbTM3p.net
>>391
windows API をつかう方法で行ってみます
ありがとうございます。
標準C++ で導入された
thread とchrono を用いて、while (1 )を回すという方法がGoogle検索で 出てきますが、低負荷な方が良いので、windows API で行ってみます。
ありがとうございます。
393:デフォルトの名無しさん
19/02/05 07:12:26.12 kZRbw8C2.net
whileは単なる無限ループじゃなく、スレッドが立ち上がるまで、sleep で CPU を眠らせてるんじゃないの?
whileだけだと、負荷かかるし、sleep一発だと、繰り返し待ちできないから
394:デフォルトの名無しさん
19/02/05 07:23:19.83 kZRbw8C2.net
URLリンク(ja.cppreference.com)
gccは並列STLまだ実装できてないんだな。がかーり
C++2xは後回しでいいから先に実装してもらいたいな
msvcがしらん間にgccを上回るC++17準拠状況になってるんだな
msがかなり頑張ってるのがかなり意外
395:デフォルトの名無しさん
19/02/05 10:24:17.44 Jquzc2Ph.net
趣味グラマーって本職が焼そば職人だっけ
396:デフォルトの名無しさん
19/02/05 10:36:43.43 PCiHKxWL.net
MSが標準をわざと外して潰し合う戦略を取ってたのは遥か昔
今は協調してシェアを取り込んでから独占する戦略がメイン
397:デフォルトの名無しさん
19/02/05 13:32:56.11 HSCecGQW.net
>>395
ブロガーで良くね?
398:デフォルトの名無しさん
19/02/05 18:47:37.04 VoURnPvV.net
スパゲッティーでは?
399:デフォルトの名無しさん
19/02/05 21:03:29.46 6rjCuhxB.net
>>397
つ URLリンク(cpplover.blogspot.com)
400:デフォルトの名無しさん
19/02/06 08:14:04.23 QvJUH+Yd.net
>>395
Oishii Sru Paの話?
401:デフォルトの名無しさん
19/02/07 11:49:12.65 nCm+DDSJX
【製作中 の wasm(WebAssembly)/MS Windows 共通の Window System】
URLリンク(nowsmartsoft.atwebpages.com)
ひきこもりの L より。
402:デフォルトの名無しさん
19/02/07 12:01:48.93 nCm+DDSJX
>>401
何日か前から5chで公開した(「つもり」だ)けど、Ninja Analyzer によれば、そのリンク先
を訪れたユニークユーザー数は、今のところ「1」。
どうなってるの。
403:デフォルトの名無しさん
19/02/09 10:04:34.12 Js3eMSlM.net
6
だまれ朝鮮人
失せろ
404:デフォルトの名無しさん
19/02/09 13:43:15.52 n731AUSx.net
Class TA{
public:
TB B;
}
Class TB{
・・・
}
Class TA::TA(){ //コンストラクタ
B = new TB;
}
で、TAのデストラクタが走った時点でBも一緒に消えるんですかね。
それともTAのデストラクタで delete B が必要なんですかね。
405:
19/02/09 14:02:51.11 1JWnTnfH.net
>>404
new したのなら delete は必ず書かないといけない
URLリンク(ideone.com)
406:デフォルトの名無しさん
19/02/09 14:24:00.17 6TG0Gkwe.net
必ずというわけではないよ
407:
19/02/09 14:36:03.78 1JWnTnfH.net
>>406
理解はしますが薦める気にはならないのです…
408:デフォルトの名無しさん
19/02/09 15:47:27.40 YAWSonmT.net
>B = new TB;
エラーになるんじゃね?
409:デフォルトの名無しさん
19/02/09 16:20:31.91 NnmcfWng.net
>>408
それぐらいは忖度してやれよ
410:デフォルトの名無しさん
19/02/10 13:20:38.44 MWi64iyD.net
メンバ変数にクラスを持つときはポインタ型にしてコピーコンストラクタを作るべきですか?
それともクラスの実体を持たせても大差ありませんか?
411:デフォルトの名無しさん
19/02/10 13:21:20.82 XMMc9iis.net
クラスと用途による
412:デフォルトの名無しさん
19/02/10 13:40:02.39 Ix0Ul5tp.net
実体で用が足りるならすべて実体でよい
効率云々はまず一通り動くものが出来上がった上でそこが問題になってから考えろ
413:デフォルトの名無しさん
19/02/10 13:41:09.49 MWi64iyD.net
わかりました
ありがとうございます
414:デフォルトの名無しさん
19/02/10 14:15:19.12 0+1G/wKU.net
値型とエンティティを意識して作って下さい
エンティティはスマポで管理、値型は実体を持たせるべきでしょう
415:デフォルトの名無しさん
19/02/10 14:26:23.71 KPch74RC.net
エンティエィって何?
定性的な定義を頼むわ
416:デフォルトの名無しさん
19/02/10 14:30:03.09 0+1G/wKU.net
>>415
インスタンスがアイデンティティを持つならエンティティ
417:
19/02/10 15:14:36.29 nGIVWkyn.net
>>416
実数はエンティティですか?
符号付整数はエンティティですか?
418:デフォルトの名無しさん
19/02/10 15:16:29.18 sKzQuR0e.net
あーやだやだ
こういう宗教じみた設計論語るやつ
419:デフォルトの名無しさん
19/02/10 15:16:40.47 0+1G/wKU.net
>>417
値です
420:デフォルトの名無しさん
19/02/10 15:17:40.51 0+1G/wKU.net
>>418
現実を見据えて追求すると自然と出てくる答えです
421:デフォルトの名無しさん
19/02/10 16:25:18.62 scT3207q.net
親クラスとライフサイクルが同じか数値型なら実体、そうでないならポインタでいいだろ。
動的確保よりコピーやmoveのほうがコストが低い場合とか検討の余地はあるけど、考えすぎると禿げる。
422:デフォルトの名無しさん
19/02/10 16:31:34.44 25jgEgQt.net
>>404
デストラクタは virtual に汁
423:デフォルトの名無しさん
19/02/10 20:26:50.17 EWmLbbO6.net
どうせそこまで最適化も厳密なメモリ管理も必要なプログラムじゃないだろ。
424:デフォルトの名無しさん
19/02/10 21:57:11.00 sKzQuR0e.net
>>420
ほらね、こういう精神論がでてくる
425:デフォルトの名無しさん
19/02/11 01:02:52.04 QKPibkAC.net
組み込み以外に使い道あるんですか?
426:デフォルトの名無しさん
19/02/11 07:24:34.72 KN5ZTrY9.net
OS作ったり、ブラウザ作ったり、3Dバリバリのゲームを作ったり、他の言語向けに機械学習や科技計算等のライブラリを作ったり、いろいろあるよ
427:デフォルトの名無しさん
19/02/11 12:01:51.83 itY+kGJR.net
RubyはC++が嫌いだからCで書かれている
428:デフォルトの名無しさん
19/02/11 12:06:46.94 QKPibkAC.net
>>426
天才達だけに許された言語なのでしょうか?
もっと身近なプロダクトはないんですか?
429:デフォルトの名無しさん
19/02/11 12:32:11.46 PRVQuzHN.net
古い例だとニコニコ動画がC++
まあおかげで開発がスケールせずオワコン化したわけだが
430:デフォルトの名無しさん
19/02/11 12:32:14.48 itY+kGJR.net
the door is open
431:デフォルトの名無しさん
19/02/11 12:43:40.65 MmPS3pUZ.net
>>428
聞いてばっかりじゃなくてお前がどういうものを探しているか書いたら?
432:デフォルトの名無しさん
19/02/11 13:10:19.37 Y0EVtjJ+.net
CADとか画像処理とかビット演算系アルゴリズム(cf.ZDD)なんかは
まだまだ他の言語には負けないね
433:
19/02/11 13:44:01.42 HT+vwAFW.net
>>429
>開発がスケールせずオワコン化した
これってどういう意味ですか?
434:デフォルトの名無しさん
19/02/11 13:51:23.27 awXFg/MG.net
JavaからC++勉強中です
C++の場合、他のクラスのオブジェクトを複数持たせるときは、一般的にどうするんでしょうか
・コンテナにオブジェクトそのものを突っ込む(一番わかりやすいけど、ムーブの定義忘れとかでミスが出そう)
・コンテナにオブジェクトへのポインタを持たせる(コンテナ解放時に、クラスごとに同じようなメモリ解放処理書くのかしら)
・コンテナにポインタをスマートポインタで持たせる
辺りをネットで読ませてもらいましたが、こんな感じで良いんでしょうか?
不勉強な上、他のオブジェクト持つという基本的なことなので、なんかもっと簡単な方法を見落としてる気がしてしまいまして
435:デフォルトの名無しさん
19/02/11 13:54:24.78 QKPibkAC.net
>>434
時と場合によりますので一般的な答えはありません
436:さまよえる蟻人間
19/02/11 14:06:14.14 fD0IDjkv.net
>>434
Javaのオブジェクト参照はC++のポインタに該当する。
C++のオブジェクトは、型を持ったバイト列だと考えていい。
C++で自動変数を宣言すると、スタックにバイト列が割り当てられる。
newやスマポやコンテナを使うと、ポインタによりヒープでメモリーが割り当てられる。
ポインタも型を持ったバイト列。ポインタは配列のように周りのメモリーにアクセスできる。
C++のクラスは構造体に関数群を追加したもの。C++でクラスを継承すると、関数群とバイト列を引き継いだサブクラスになる。
437:デフォルトの名無しさん
19/02/11 14:12:14.41 0TxoCFW6.net
>>434
大体、その3つの通りで、そこに述べられたものの上から優先的に選ぶ。
つまり、普通にメンバ変数にオブジェクトとして宣言するのがC++では
最も効率が良くて伝統的な書き方。それでは問題が生じる場合にオブジェクトの
ポインタとして持たせる。スマートポインタは後になって導入されたもので、
人気があるものではないので無視して良い。
二番目のポインタとして持たせるのは、例えば、今定義している最中の
クラス(自分自身)と同じ型のデータで、子どもや親にあたるデータへ
リンクを作りたいようなときか、または、ある基本クラスを継承した
色々なクラスのオブジェクトを持ちたい場合に用いる。
438:さまよえる蟻人間
19/02/11 14:16:41.10 fD0IDjkv.net
C/C++では、sizeofキーワードを使えば、簡単にvoid以外の型のサイズがコンパイル時に取得できる。Javaではオブジェクトのサイズを簡単に取得することはできない。
C/C++はよくオブジェクトのサイズやバイトの並びを意識してプログラミングする。
439:デフォルトの名無しさん
19/02/11 14:17:25.55 a3vDiVrE.net
結局CのポインタってJavaとかの言語で表すなら何なんだ?
440:さまよえる蟻人間
19/02/11 14:23:20.42 fD0IDjkv.net
なぜなら、例えばスタックに巨大なデータを割り当てると、スタックオーバーフローというエラーが発生するし、
ヒープだって、巨大なデータの割り当ては失敗することがある。
また、構造体を変更すると、構造体のサイズやデータ構造が変化して、互換性の問題が発生することがある。
441:デフォルトの名無しさん
19/02/11 14:24:23.31 awXFg/MG.net
>>437氏他
丁度今、ウェブ上のC++で書かれたCompositeパターンのソースを読ませて頂いてました
正に2番目で実装されてましたが、都度メモリ解放処理書くくらい当たり前なんですね、流石C++です
独学なもんで、こうはっきり言ってもらえると本当にありがたいです、使い分けて行きたいと思います
他の皆様もありがとうございました、勉強になりました
442:さまよえる蟻人間
19/02/11 14:34:10.39 fD0IDjkv.net
>>439
Javaの動的配列はCのポインタに近いが、Javaの配列では危険なアクセスは制限されているし、参照カウントで管理されている点が異なる。
Javaのオブジェクト参照は、参照カウントで管理されており、C++の構造体/クラス型に対するstd::shared_ptrに該当する。
443:さまよえる蟻人間
19/02/11 14:37:16.50 BEdrdhIs.net
しかし、std::shared_ptrはヌルポを指定できるが、Javaはできない。
444:デフォルトの名無しさん
19/02/11 14:49:43.57 0TxoCFW6.net
>>441
C++ は、デストラクタに必ずメモリ解放処理を書いておけば、そんなに
メモリーリークを気にすることはない。多くの場合にはそれで完全に処理できるから。
次のように書くだけで、ほとんどの場合、メモリーリークは起きない:
class CMyClass {
BYTE *m_pBuf;
CMyClass() { // コンストラクタ
m_pBuf = NULL; // メモリをまだ未割り当てであることをマークするためにこうしておく
}
~CMyClass() { // デストラクタ
if ( m_pBuf != NULL ) {
delete [] m_pBuf; // メモリの解放
}
}
}
445:デフォルトの名無しさん
19/02/11 14:52:47.12 dGdUrFsa.net
すごく古い書き方だ
446:さまよえる蟻人間
19/02/11 14:54:57.57 BEdrdhIs.net
>>444
ナマポの場合、代入したらまずいよ。例外安全にも問題があるし。
447:デフォルトの名無しさん
19/02/11 14:55:46.62 DnOcmNTU.net
確かに、人に教えるレベルじゃないね
448:デフォルトの名無しさん
19/02/11 14:56:36.09 0TxoCFW6.net
>>444
正しくは、次のようにアクセス制御のための「public :」を書かないといけない。
class CMyClass {
protected :
BYTE *m_pBuf; // 高速化のため、自動的には初期化はされないのでコンストラクタで初期化する。
public :
CMyClass() { // コンストラクタ
m_pBuf = NULL; // メモリをまだ未割り当てであることをマークするためにこうしておく
}
~CMyClass() { // デストラクタ
if ( m_pBuf != NULL ) {
delete [] m_pBuf; // メモリの解放
}
}
}
なお、必要に応じて、コンストラクタの中で、m_pBuf = new BYTE [xxx]; のように書いても良い。
それと、BYTE は、「オブジェクト」ではないので、あなたの書いているような場合には、
BYTE *m_pBuf の部分を CSomeObject m_pObj; のように変えて、m_pObj = new CSomeObject;
のようにする。
449:さまよえる蟻人間
19/02/11 14:58:34.69 BEdrdhIs.net
>>448
ダメだこりゃ。
450:デフォルトの名無しさん
19/02/11 15:03:05.98 MkFOBvt9.net
良い子のみんなは>>444の危険性が理解できるまではスマートポインタを使ってね
おじさんとのお約束だよ
451:デフォルトの名無しさん
19/02/11 15:11:57.93 Qk3j4qw0.net
>>448のデストラクタでnullチェック必要?
nullポインタをdeleteしても問題ないはずだが
二重解放防止にはならんし意味わからん
452:さまよえる蟻人間
19/02/11 15:18:49.80 BEdrdhIs.net
>>451
超独自仕様の組み込み開発とか、メモリー管理がbuggyなプログラムでは意味があるらしい。
例えば解放したメモリーブロックをアクセスするような行儀の悪いプログラムでは意味がある。
453:はちみつ餃子
19/02/11 15:19:34.89 eS7AzULV.net
>>444 >>448
・ 初期化を初期化リストでやらずに代入でやるのは邪悪。
・ delete に NULL を渡した場合には何もしないことが保証されているので、
無駄にヌルチェックする必要はない。
・ ポインタ型や整数型の値もまたそういう型の「オブジェクト」である。
(元質問者が Java から入ってきてるから「Java の用語で言うところの」という意味?)
454:デフォルトの名無しさん
19/02/11 15:19:51.73 3tLemvMU.net
初心者なので確認
コンストラクタの中に飛び込む前のメンバの初期化で例外発生したら m_pBuf は中途半端になるから
コンストラクタの中で代入するんじゃなく、メンバ初期化子で初期化しろ
という認識でいいのかしら
455:さまよえる蟻人間
19/02/11 15:29:14.84 BEdrdhIs.net
>>454
「C++ 例外安全」でググれ。ナマポを使わずに、素直に生配列、コンテナ、スマポのどれかを使えば済むこと。マネージされてないナマポは村八分にしろ。
456:デフォルトの名無しさん
19/02/11 15:39:02.97 3tLemvMU.net
なんとなくわかった ような気がする
生ポそのものはコンストラクタもデストラクタに何ら操作しないから宙ぶらりんこになるのか
457:デフォルトの名無しさん
19/02/11 15:41:57.41 dGdUrFsa.net
ちょっち理解は大変だけど生ポはスマポにドンドン置き換えたい
458:さまよえる蟻人間
19/02/11 15:43:11.94 BEdrdhIs.net
スマポならコピーコンストラクター・代入のややこしさからも解放される。
459:はちみつ餃子
19/02/11 15:52:25.23 eS7AzULV.net
まあまあ。
スマートポインタを活用しろというのはその通りだが、
ポインタ (や例外機構) を理解せずに
思考停止してスマートポインタを使うのはあかんやろ。
ここの元質問者はまだそこを理解しようとしている
ところなんだから、スマートポインタを使わなかった場合にどう書けば良いのか、
きちんと書くと面倒くさすぎるという体験も必要だろ。
460:さまよえる蟻人間
19/02/11 16:16:38.24 fD0IDjkv.net
所有権の管理は人類には早すぎる。
所有権が変動するときは、スマポでOK.
461:さまよえる蟻人間
19/02/11 16:28:46.52 fD0IDjkv.net
こんなときはナマポを使ってもよい:
処理の中で所有権が移動・消滅しない場合。
バイナリーデータやPODを生で扱う場合。
処理系がナマポやトークンやハンドルの入力を要求する場合。
462:デフォルトの名無しさん
19/02/11 16:36:19.07 QKPibkAC.net
生ポはスマポのオーバーヘッドすら許容できないときに使うものです
だから初心者は無理して生ポを使わなくていいです
463:デフォルトの名無しさん
19/02/11 16:59:08.84 V2lM2C5l.net
>>437
スマポは後になって導入されたもので人気がない、なんて意見は一般的ではないので無視して良い
464:デフォルトの名無しさん
19/02/11 18:19:37.85 j549IniP.net
スマポをC#のusing感覚で使ってる
465:デフォルトの名無しさん
19/02/12 13:19:56.52 VqanzRzk.net
エアプwwwwwwwww今は参照カウントじゃねーよw残念だったなクソ蟻wwww
466:デフォルトの名無しさん
19/02/12 13:20:43.00 VqanzRzk.net
それで、Cの生ポってC/C++以外で表現するなら何なんだ?
467:デフォルトの名無しさん
19/02/12 16:02:24.32 VerJGrBE.net
>>466
native int
468:デフォルトの名無しさん
19/02/12 17:27:09.82 VqanzRzk.net
>>467
仮装アドレス的な意味で来るとは思ってなかったwでも本質はそうだよなあ
469:デフォルトの名無しさん
19/02/12 17:29:23.18 t+DTqVP+.net
CALL -151
470:デフォルトの名無しさん
19/02/13 06:16:37.08 2WlGbphz.net
>>466 今の言語は極力「生のポインタ」が見えないようにしてるからなぁ。
オレの乏しい知識で無理矢理ヒネリ出すなら、
「古いBASICの peek, poke のアドレス指定に変数を使った場合」かのう。
型のない単なるアドレスって言うか数値だけど。
471:デフォルトの名無しさん
19/02/13 15:13:52.62 Yg4iFXpY.net
upvar
472:デフォルトの名無しさん
19/02/13 15:46:18.41 SgfrIpbp.net
>>466
BYTE ptr = アドレス値;
BYTE MEM[4096 * 1024]; // 4GB のメモリ配列
*ptr ---> MEM[ptr] // ptr は MEM[] 配列の添え字
473:デフォルトの名無しさん
19/02/13 15:46:56.07 GHq8zte2.net
訂正:
BYTE MEM[4096 * 1024 * 1024]; // 4GB のメモリ配列
474:デフォルトの名無しさん
19/02/13 15:48:00.46 GHq8zte2.net
訂正:
Uint32 ptr = アドレス値;
475:デフォルトの名無しさん
19/02/13 18:19:07.37 QnNf1eu6.net
恥の上塗り
476:デフォルトの名無しさん
19/02/13 19:18:53.91 BFnAt9lr.net
intptr_t とか、INTPTRとか。
477:デフォルトの名無しさん
19/02/13 19:41:39.99 D91GFqhb.net
eax
478:デフォルトの名無しさん
19/02/13 22:43:21.58 8CyDgeqf.net
行儀よく バッファなんて 守れやしなかった
夜のサーバ オーバフロー起こしてまわった
*印見て アナルといわれた 早く添え字になりたかった
信じられぬ カーニハンとの 争いの中で
許しあい いったい何 解りあえただろう
うんざりしながら それでも過ごした ひとつだけ解ってたこと
このポインタからの 卒業
479:デフォルトの名無しさん
19/02/14 07:38:16.87 fSoz/vTj.net
まあstatic変数やglobal変数使ってリークしてないとか言い張るバカよりかは
ナマポ使えやとは思う。
それならまだコード修正効くからな。
初心者にスマポ使わせればリークしないコード書かせることができるって考えははっきりいって幻想だわ。
480:デフォルトの名無しさん
19/02/14 22:35:36.88 vW9ukCJU.net
昔研究室の後輩でポインタがわからないから全部グローバル変数でプログラム作ってるって奴がいて、
それはそれである意味すごいなって思ったわ。
マルチメディア系ライブラリを触る必要がある研究室なのだが。
元々組込系が得意な奴だったってのもあると思うけど。
481:デフォルトの名無しさん
19/02/14 22:50:47.58 tlcLfILV.net
COBOLERだったんじゃね
482:デフォルトの名無しさん
19/02/15 00:04:29.72 tnuHGyjk.net
一度切りの使い捨て用途とかなら全然よくね
483:デフォルトの名無しさん
19/02/15 00:36:18.42 kpfA4lgp.net
>>479
スマートポインタを使うとコード修正効かなくなるの?どういうこと?
484:デフォルトの名無しさん
19/02/15 00:46:46.72 TR5VS7Vw.net
mp4boxをちょこっといじったのを作ろうとしたんだけど、
signed int32の計算で -2112000 / 48000 の結果が 89434 になるんですが。
VS2015のx64です。
485:デフォルトの名無しさん
19/02/15 06:57:51.95 OZ8Dcboc.net
>>484 「-2112000 / 48000 の結果が 89434」
その環境を持ってないんで分からないけど、
-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
両者のビットパターンが一致することと関係ありそうね。
被除数の -2112000 を64bitで表現する際に
符号拡張 0x_ffff_ffff_ffdf_c600 とすべきなのに
ゼロ拡張 0x_0000_0000_ffdf_c600 にしちゃって、
その後の計算は64bit正数でやってる感じかな。
486:デフォルトの名無しさん
19/02/15 07:20:58.81 1DfV94Wg.net
>>483
本人がスマポ理解できてないってオチだろ
487:デフォルトの名無しさん
19/02/15 07:22:53.73 1DfV94Wg.net
>>480
組み込みが得意でポインタがわからない後輩
設定に無理がありすぎw
488:482
19/02/15 07:53:28.61 OZ8Dcboc.net
再び >>484 「-2112000 / 48000 の結果が 89434」 (間違いを訂正)
-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
ビットパターン一致してないね。桁数多くて見間違えちゃった(テヘペロ)。
-2112000 を32bitで表現すると 0xffdfc600 であり、
これをゼロ拡張した 0x_0000_0000_ffdf_fc600 == 4292855330 を
48000 で割り算して小数部を捨てれば 89434 という答えが出る。
ということなら合ってるかな。
489:
19/02/15 07:57:48.46 8MeM2Ami.net
>>484
コードを URLリンク(ideone.com) に貼っていただけませんか?
490:デフォルトの名無しさん
19/02/15 09:49:31.73 tuwIijw4.net
>>484
どうせ48000がunsignedなんじゃねーの
それにつられて -2112000もunsignedになって4292855296
その結果が薬師美代ちゃん
491:デフォルトの名無しさん
19/02/15 13:45:38.25 TNDmXWGM.net
>>482
自分が何してるか判って使う分には問題無いな
適材適所だ
492:デフォルトの名無しさん
19/02/15 21:13:40.77 kkRd+/gL.net
>>483
>スマートポインタを使うとコード修正効かなくなる
どういう風に読むとそういう理解になるのか。。
まずは日本語の理解が必要だな。
493:デフォルトの名無しさん
19/02/17 07:14:37.91 KxX3tJEE.net
超初歩的な質問になるのですが
scanf関数を使って20個未満の任意の数だけ、数値を配列変数で受け取りたいです
たとえば「2 4 8 9」と入力し、Enterが押されたらそれで確定
num[0]=2
num[1]=4
num[2]=8
num[3]=9
としたいわけです。
どうしたらよいでしょうか?
一応自分で考えたコード(期待通りの動きをしません)を掲載します
for(i=0;i<20;i++){
scanf("%d",&num[i]);
if(num[i]==‘¥n’){
break;
}
}
494:デフォルトの名無しさん
19/02/17 07:30:35.53 a45/WyPQ.net
for(i=0;i<20;i++) if (scanf("%d",&num[i]) != 1) break;
495:デフォルトの名無しさん
19/02/17 09:09:16.12 uZDoAvc4.net
>>493
scanfや標準ライブラリの関数など、参考書とかで普通の使い方はわかると思うけど、細かい仕様をmsdnやmanコマンドで調べるようにするとかなり理解が広がると思うよ。
496:デフォルトの名無しさん
19/02/17 22:37:58.74 O/E0SKNM.net
中途半端なUI使うよりもcsvパーサーを作るかどっかからとってくるかすれば?
497:デフォルトの名無しさん
19/02/18 00:02:29.61 yZfkTbdS.net
autoってコンパイル遅くなりますか?
498:
19/02/18 00:59:53.43 aN2QSVsl.net
>>497
むしろ遅くなる方に振れるでしょうけれど、そんなのどうでもいいのでは?
499:デフォルトの名無しさん
19/02/18 01:22:44.39 c9cLPpQ7.net
autoって変数の型宣言の話だよね?
コンパイルは遅くなるのか
速くしたい時はどうすりゃ良いの?
500:はちみつ餃子
19/02/18 01:27:51.06 ViRlfcsh.net
C++ の auto は右辺と一致させるように推論するだけの単純機構で、
ややこしい演算で推論するわけではないので、
コンパイル速度ではほとんど差はないと思うよ。