21/01/08 21:17:01.55 U7HVBqAl.net
絵文字プログラミングが来る
なので独自オペレータは出来た方がいい
11:デフォルトの名無しさん
21/01/08 21:44:49.24 gxkYqo9D.net
>>4
わしは20年ぐらい前にその道を通った
だから若者がその道を通ることについては何もいわない
ほっといて気がつかないならダメ人材だし
使える人材は自分で気がつく
12:デフォルトの名無しさん
21/01/09 00:35:22.39 8yDnsj0x.net
キーワードも再定義可能にしてホスイ
13:デフォルトの名無しさん
21/01/09 01:15:10.33 CT/R4i5r.net
#defineでイケるやろ
14:デフォルトの名無しさん
21/01/09 01:39:13.52 InkVVK6p.net
#define private public
ってテクニックのことか。
15:デフォルトの名無しさん
21/01/09 04:17:16.54 kjQQkk+g.net
>>14
それコンパイル通っちゃうの?
プリプロセスだからOKなのか・・・
16:デフォルトの名無しさん
21/01/09 09:21:23.56 c2CH7ey/.net
キーワードをdefineするのは規格上は未定義動作
でもだいたい通っちゃうな
17:デフォルトの名無しさん
21/01/09 09:27:02.27 lvRTpcj7.net
その条文どこだっけ
18:デフォルトの名無しさん
21/01/09 10:07:37.60 c2CH7ey/.net
この辺かなC++20ドラフトより
16.5.1.2 Headers [headers]
8 Identifiers that are keywords or operators in C++ shall not be defined as macros in C++ standard library headers.
(標準ライブラリはキーワードをマクロにすんな)
16.5.4.3.2 Macro names [macro.names]
2 A translation unit shall not #define or #undef names lexically identical to keywords, to the identifiers listed in Table 4, or to the attribute-tokens described in 9.12, except that the names likely and unlikely may be defined as function-like macros (15.6).
(キーワード・文脈依存キーワード・予約済み属性トークン(ただしlikelyとunlikelyを除く)をdefineやundefすんな)
19:デフォルトの名無しさん
21/01/09 11:17:12.79 lvRTpcj7.net
thx
20:デフォルトの名無しさん
21/01/09 20:30:21.03 w9vYk25X.net
>>13
何言ってんだおめー;;;
21:デフォルトの名無しさん
21/01/09 21:18:55.59 jpx8Mcv4.net
C++はプリプロセッサが発展する方向にいかなくて本当に良かった
プリプロセッサを吸収して凄いことになってる気はするが
22:デフォルトの名無しさん
21/01/09 21:24:33.16 lvRTpcj7.net
禿の方針だからね
スコープに従わない反逆者の排除は
23:デフォルトの名無しさん
21/01/09 21:37:52.40 Te5slSqE.net
(でも楽しいよね
(コンパイル直前のコードが数個のプリミティブにまで還元されちまう楽しい言語もあるしな))
24:デフォルトの名無しさん
21/01/09 22:11:02.76 w9vYk25X.net
プリプロセッサはC言語の目的(OSを様々なプラットフォームに移植可能な共通ソースコードとして書く)ための
必要欠く書くべからざるしくみとして導入され、できた時点で仕様としてはほぼ過不足なかった
という印象
そういう目的のブツなので、キーワードの再定義には全く不向き
25:デフォルトの名無しさん
21/01/10 07:00:15.18 NGSbpihh.net
プリプロセスおもしろいやん
俺プリプロセス大好き
26:デフォルトの名無しさん
21/01/10 07:04:45.26 pzwk9NYM.net
最近は#includeと#defineしか使ってない。
27:デフォルトの名無しさん
21/01/10 08:03:37.57 pzwk9NYM.net
#defineじゃなくて#pragma onceだった。
28:デフォルトの名無しさん
21/01/10 10:29:09.95 eq9L0D9i.net
どうやったらその2つを取り違えできるんだww
ほんとにつかってる??
29:デフォルトの名無しさん
21/01/10 10:29:46.47 Cbi+hphF.net
#pragma onceとか#inlude_nextとか標準に入れてほしくはある
30:デフォルトの名無しさん
21/01/10 10:45:39.55 J1w4FPK7.net
#pragma onceはもう標準のつもりで使ってるわ
31:デフォルトの名無しさん
21/01/10 11:35:58.46 MuZPu68S.net
>>25
そういう時期もあったな…(遠い目)
32:デフォルトの名無しさん
21/01/10 11:49:17.12 WbJbdET/.net
#pragma便利よね ライブラリのリンク指定とかも
33:はちみつ餃子
21/01/10 11:50:54.98 smlN1G6e.net
>>8
そう、 iostream は「仕方ない」と思うんだよな。
C++11 で variadic template が導入されるまでは
可変長引数を安全な型システムの中で扱えなかった。
仕方がないから演算子でなんとかそれっぽくしただけ。
演算子の中で比較的それっぽいのが << や >> だっただけ。
>>9
そういう観点から見ると、パスや日付の区切りに / を使うのは
演算子にしなければならない仕方なさは感じられない。
演算子にするなら / は比較的自然な選択ではあると思うけど。
34:デフォルトの名無しさん
21/01/10 11:53:18.07 5+d8OMjE.net
シフト演算なんてほとんど使わんしなあ
35:デフォルトの名無しさん
21/01/10 11:57:06.83 uVXyGOJo.net
ファイルパスってチェーンしたいものの筆頭格だから演算子にするのは妥当だと思うけど
36:デフォルトの名無しさん
21/01/10 12:20:31.40 pzwk9NYM.net
>>28
使ってるわい。
37:デフォルトの名無しさん
21/01/10 12:20:58.71 pzwk9NYM.net
とはいえレスくれてありがとうw
38:デフォルトの名無しさん
21/01/10 12:38:01.52 stlWAB5c.net
>>35
std::path だと operator/= だな。
優先順位とか戻り値の型とか理由はあるんだろうが、やはり無理してる感は拭えない。
39:デフォルトの名無しさん
21/01/10 23:28:34.84 9cXVj8qL.net
mutexって同時だとどうなるの?
40:デフォルトの名無しさん
21/01/10 23:32:27.11 9cXVj8qL.net
信用して使うしかないけど…本当に同時で来たら…どうなるのかなぁ…と思って…。
41:デフォルトの名無しさん
21/01/10 23:43:03.84 1knBg1rC.net
同時に入ろうとしたら同時に入るのではない別の世界線に分岐するから
結局同時にならない
42:デフォルトの名無しさん
21/01/11 00:43:54.84 KM6/Ii6v.net
posix平行宇宙論
43:デフォルトの名無しさん
21/01/11 00:44:15.09 AtO8PUuj.net
それだと…CPUの負荷や調子によって…同時になるって…事だよ…。
44:デフォルトの名無しさん
21/01/11 00:45:46.62 AtO8PUuj.net
mutex…危ういな…どうしよう…。運に任せて…諦めるか…。
45:デフォルトの名無しさん
21/01/11 00:54:29.81 AtO8PUuj.net
運任せは辛い…。
46:デフォルトの名無しさん
21/01/11 01:30:50.91 AtO8PUuj.net
URLリンク(stackoverflow.com)
大丈夫だと言っているが…ほんまかいな…と思います…迷信はつきもの。
47:デフォルトの名無しさん
21/01/11 01:37:51.07 KM6/Ii6v.net
テストプログラム作ってさっさと検証しろ無能
48:デフォルトの名無しさん
21/01/11 01:59:20.31 3nmpeNiQ.net
>>46
信用できないならソースやアセンブリ読めよ。ここで名無しに答えてもらっても、信用できないんだろ?
49:デフォルトの名無しさん
21/01/11 03:08:34.69 KSKcxhht.net
MutexはOSに依存するので絶対に大丈夫ということはないですが、数々のトラブルを引き起こし最も懸念されたLinuxが安定してきてるので、現在では実用上問題がないレベルにあると思います。
50:デフォルトの名無しさん
21/01/11 03:36:14.65 dLrb5ZQk.net
マルチCPUでバスリクエストが同時に出た場合の制御なんて明確に定義されてんだろうが
OS依存だハード依存だと逃げているから見えない不安に怯えることになるんだよ
51:デフォルトの名無しさん
21/01/11 06:01:13.69 vFi9Z+AQ.net
LinuxのMutexって使いにくいよね
俺はWindowsから入ったからMutexって名前付きが当たり前だと思ってたんだけどLinuxのMutexには名前がない
どうやって複数のプロセス間で同じMutexを使うんだよ・・・って悩んだ
共有メモリなんかでMutexのアドレスを受け渡しするらしいんだけどさ
面倒くさくなってLinux版の同期制御はファイルロックにしちゃった。。
52:デフォルトの名無しさん
21/01/11 06:47:08.93 KSKcxhht.net
LinuxのファイルロックはNFSで(※私たちにはバグのように見える)仕様通りの動作をするので気を付けたほうが良いですよ。
ユーザーが指定したファイルやディレクトリを不用意に使用すると再現性の無いバグに悩まされます。
53:デフォルトの名無しさん
21/01/11 06:56:23.61 vFi9Z+AQ.net
>>52
アドバイスありがとう
Linuxで共有メモリの使い方もよく分からなくて
共有メモリも書いてる途中で読み取りされたら困るから
「書いたよー」「読み終わったよー」ってプロセス間同期したいんだけどMutex受け渡しの前に同期処理って・・・
それで共有メモリの読み書きをファイルロックで同期してMutexを渡すかなーって考えてるうちに
もうファイルロックだけでいいんじゃないかってなってしまった
一般的にはどうやってやるのがよかったんだろ?
54:デフォルトの名無しさん
21/01/11 07:35:12.79 KSKcxhht.net
>>53
結局、「NFSではバグります」と注意したうえでファイルロックを使うことが一般的に行われてるみたいですよ。
逆に言うと、NFSだけ気を付ければ、問題が起きないみたいです。
55:デフォルトの名無しさん
21/01/11 08:06:23.60 RSMcM3e3.net
ちょっとググっただけだけどそんなに難しいかなぁ?
URLリンク(www.geekpage.jp)
56:デフォルトの名無しさん
21/01/11 08:06:43.86 vFi9Z+AQ.net
>>54
ありがとう ちょと安心した
57:デフォルトの名無しさん
21/01/11 08:16:58.50 vFi9Z+AQ.net
>>55
コード見てみましたけどMutexの作成と共有メモリの書き込みが終わってからforkしてますね
forkした親と子ならそれでもいいんでしょうけど
実際は親子ではないプロセス間でMutex使いたくなったりするじゃないですか
Mutexが作成される前や共有メモリへの書き込み完了前にスレーブがMutexを要求しに来ると困ります
58:デフォルトの名無しさん
21/01/11 08:38:54.12 WYfXTDe9.net
>>51
名前付きも普通にある
sem_open
名前はセマフォだが当然mutexとして使える
目的がメッセージのやり取りならmkfifoも使える
59:デフォルトの名無しさん
21/01/11 08:48:31.88 3OtB0f6U.net
mutexじゃなくて名前付きセマフォなら普通にプロセス間で使えなかったっけ?
60:デフォルトの名無しさん
21/01/11 09:14:02.58 RSMcM3e3.net
>>57
応用力ないの?
>>58-59みたいにセマフォ使うこともできるし、名前付き共有メモリー + Mutexでもいいだろ
61:デフォルトの名無しさん
21/01/11 09:22:15.64 KSKcxhht.net
>>60
Linuxではファイルロックで良いよ。
62:デフォルトの名無しさん
21/01/11 09:28:25.14 vFi9Z+AQ.net
セマフォのほうには名前付きあったんですね見落としてました
ありがとう!
63:デフォルトの名無しさん
21/01/11 09:39:24.93 vFi9Z+AQ.net
あと別のところでソケットを排他リソースで使うというアイデアを教えてもらったことあります
同じポート番号をバインドできるのは1つだけだからこれを排他に使うという案
64:デフォルトの名無しさん
21/01/11 09:52:46.06 KSKcxhht.net
3年ぶりの建設的なスレだな。
65:デフォルトの名無しさん
21/01/11 10:09:50.89 RSMcM3e3.net
>>61
ファイルロックはロックしたままプロセス死ぬとリブートしても解消できないのがね
66:デフォルトの名無しさん
21/01/11 10:39:47.37 sBoV/AFh.net
>>51
pthread周りはなんであんな仕様なのか謎
CPUのアーキテクチャーを深く知れば合理性を得心できるのかどうか、
67:デフォルトの名無しさん
21/01/11 11:25:14.07 vFi9Z+AQ.net
>>65
それはファイルロック(flock関数)ではなく、単純にファイルの存在チェックをしているだけじゃないですか?
flockを使ったファイルロックならプロセス異常終了時にOSによってロックが解放されます
68:デフォルトの名無しさん
21/01/11 12:46:20.78 vpEQZDgx.net
ミックスジュースよりセックスジュースが好きですね
69:デフォルトの名無しさん
21/01/11 14:25:33.73 EL34sMb+.net
唐突に何いいだすねん君は!
(‘д‘⊂彡☆))Д´)パーン <ミックスジュースよりセックスジュースが好きですね
70:デフォルトの名無しさん
21/01/11 14:41:16.25 dLrb5ZQk.net
ラブジュースだろ
71:デフォルトの名無しさん
21/01/11 16:14:45.22 AtO8PUuj.net
39です…。
mutexの信頼性をずーと疑ってたら…POSIXスレッド…pthread_mutex_lockに行き着きました…
ブロックもするそうです…ソース見てたら…カーネルの様です…pthread_mutex_lock_fullであれば…atomic_compare_and_exchange_val_acq…などもあります…テストアンドセットです…
アトミック操作です…しかし…普通にmutexを実装してpthread_mutex_lock_fullが呼ばれるかは…
分かりません…どんなmutexライブラリも最終的に…このカーネルを呼んでるだけだと思います…
呼ばれてるのは…fullではなく…弱い方のpthread_mutex_lockだと仮定しても…カーネルを疑うなんて…
本当に…ナンセンスな話なので…一応…信用して使うことにします…。
72:デフォルトの名無しさん
21/01/11 16:55:02.21 AtO8PUuj.net
39です…。
結局…fullでなくても…atomic_exchange_acqが呼ばれているようです…アトミック操作です…。
なので…みなさん…安心して使いましょう…。
73:デフォルトの名無しさん
21/01/11 16:56:14.48 KSKcxhht.net
>>72
そこでやめずに、atomic_exchange_acqの中まで追いかけてみませんか?
74:デフォルトの名無しさん
21/01/11 16:56:26.10 AtO8PUuj.net
URLリンク(blog.sakasin.net)
ソースです…。
75:デフォルトの名無しさん
21/01/11 21:32:01.48 KM6/Ii6v.net
Debian woody の頃まで posix thread は使い物にならなかったが Debian etch からようやく使い物になった印象だな
当時から利用している身にしては
76:デフォルトの名無しさん
21/01/12 05:50:41.37 pJAexhLb.net
わりと最近ですね。
77:デフォルトの名無しさん
21/01/12 07:34:00.56 V95G+u6D.net
woodyって20年くらい前だっけ
最初はJavaVMもグリーンスレッドというVM内の仮想スレッド実装だったんだよね
あれもOSネイティブのスレッドが信用されてなかったからなのかな
もちろん、現在のJavaVMはOSのネイティブスレッド使う実装になってるけどね
78:デフォルトの名無しさん
21/01/12 07:44:47.10 pJAexhLb.net
Javaといえばブラック何とかプロジェクトがSUNに文句言ってなかったっけ?
79:デフォルトの名無しさん
21/01/12 07:45:53.88 pJAexhLb.net
Etchが2007年と書いてあるな。
80:デフォルトの名無しさん
21/01/12 09:08:57.41 e5lAHXYT.net
設計思想的なことについて質問があります。
クラスの使い方がよく分かりません。
僕が今何かを作ろうと思ったら、関数の集まりが引数や返り値のやり取りを通じて協調するような設計をしてしまいます。
この引数や返り値が多く複雑になったりしてきたらクラスを用いた設計を考える、という理解は正しいでしょうか?
81:デフォルトの名無しさん
21/01/12 09:22:47.73 XkW3hQXX.net
>>80
正しいかどうかは知らないし気にしないでいいと思うけど、
そういう場合はただのデータの集まりとして構造体(これもクラスの一種だけど)を使うだけでも簡単になるだろうね。
82:デフォルトの名無しさん
21/01/12 13:35:30.39 lxco4c0J.net
個人的には、一度無理にでも概念(ウインドウとか表示とか作ってるソフトの主要な概念)をクラス名にして作ってみるといいとおも
やってるうちに慣れてくる
83:デフォルトの名無しさん
21/01/12 14:01:10.35 V95G+u6D.net
そうだね
なにかを題材にしてオブジェクト指向やってみるのがいいと思う
でもウインドウはどうかなー そもそもUIツールキットをある程度知らないといけないし
GUIってオブジェクト指向らしからぬ部分も多いので
もっとビジネスロジック中心の題材がいいと思うよ たとえば掲示板システムとか
板には複数のスレがあって、各スレの中には複数のレスが並んでて、スレの書き込むメソッドでレスが1つ増えてーみたいな
84:デフォルトの名無しさん
21/01/12 15:56:33.61 LUlB/OIG.net
>>4 >>11
. を再定義したいと思った
85:デフォルトの名無しさん
21/01/12 17:32:55.18 +0XoTmdG.net
>>82
初歩的な質問なのですが、クラスってモノじゃなくて概念でも良いのでしょうか
つまり、歩く人のプログラムを作るとき、人というクラスが歩くというメソッドを持っていても良いし、歩くというクラスが一歩進むというメソッドを持っていても良いのでしょうか
言語の仕様上はもちろんどちらでも良いと思いますが、どちらの設計の方が筋が良いということはないと思って良いですか?
86:デフォルトの名無しさん
21/01/12 17:34:51.31 fQCYjk84.net
ナントカ系の関数群みたいに相互に関連し合っているものを
暗黙じゃなく明確化するのがクラスだよ
87:デフォルトの名無しさん
21/01/12 17:38:10.34 V95G+u6D.net
>>85
「歩く」をクラスにするよりは「歩ける」をインターフェースにしたらどうかな
人間クラスに「歩ける」インターフェースを実装�
88:キることで「歩く」メソッドがあることを保証できる 対象ドメインをどのようにモデル化するかは状況や要件次第
89:デフォルトの名無しさん
21/01/12 19:05:06.19 mPDSlMxM.net
メタファとして生き物がよく用いられるけどなんだかなあっていつも思う
90:デフォルトの名無しさん
21/01/12 19:50:41.34 YNFRivpW.net
>>87
「歩け」インターフェースを定義したらインスタンスが歩ける想定であることは自明なのでは…
ちなメソッドは一般にオブジェクトの状態変化を引き起こすブツなので
命令型プログラミングの範疇であり命令形で命名すうるが正しい
※ 個人の感想です
91:デフォルトの名無しさん
21/01/12 19:52:42.41 YNFRivpW.net
しかしインスタンスの生成というプロセスは関数型プログラミングから拝借しており、
命令型と関数型のいいとこ取りしようとして失敗した
classベースのオブジェクト志向は
92:デフォルトの名無しさん
21/01/12 19:58:16.79 GTfU1r+6.net
何ベースのが成功なの?
93:デフォルトの名無しさん
21/01/13 09:25:15.89 X1FbeZvQ.net
場合によっては歩くクラスもありだと思うよ。
ゲームで次の行動を一つずつ記憶させたい場合とか。
commandパターン、mementoパターンでググって
94:デフォルトの名無しさん
21/01/13 09:45:27.73 D0cZCa+j.net
歩くということは、位置が変化する。
現在位置は人オブジェクトのプロパティなのか?
それでええのか?
95:デフォルトの名無しさん
21/01/13 11:14:57.57 XODVGtfI.net
>>93
良くね?
>>87
インターフェースって継承される前提のものなんですよね?
どのクラスが「歩ける」を継承するんですか?
96:デフォルトの名無しさん
21/01/13 12:34:30.18 QVnLWQ3q.net
>>85
数値化できるものなら何でもオーケーだ
歩行を数値化するにはN個の関節を持つM本の脚をパラメータとし時間経過ごとの接地点と関節の位置をジェネレータみたいに連続的に返すような設計が考えられる
97:デフォルトの名無しさん
21/01/13 13:12:01.01 D0cZCa+j.net
>>94
じゃあ将棋の駒オブジェクトはプロパティとして位置を持っているのか?
98:デフォルトの名無しさん
21/01/13 14:09:32.74 D0cZCa+j.net
俺の考えるOOシステムでは、駒オブジェクトは盤面オブジェクトやルールブックオブジェクトへの参照を持っいる。
駒オブジェクトへ前へ3移動とメッセージを送ると、駒オブジェクトはルールブックオブジェクトと盤面オブジェクトを用いて、移動可能であれば盤面オブジェクトへ自身を移動するようメッセージングする。
99:デフォルトの名無しさん
21/01/13 15:31:14.00 Dg6tKq+M.net
intを継承してmyintクラスを作ることは可能ですか?
100:デフォルトの名無しさん
21/01/13 15:38:23.35 CyYDkVRJ.net
システム次第でしょ。
もしも将棋の駒が自律歩行多脚戦車だったら、GPSシステムがすべての位置情報を管理してるなんておかしいし。
101:デフォルトの名無しさん
21/01/13 15:38:43.61 D0cZCa+j.net
enum class なら可能。
102:デフォルトの名無しさん
21/01/13 20:01:32.91 D0cZCa+j.net
C++はテンプレートがあるので設計の詳細を先送りできる。
その特徴を生かせるように、プッシュ型を流行らせませんか?
プッシュ型は、前提が少ないので、利用者が自由に組み合わせることが出来ます。
これは、インターフェースによって事前に詳細を設計してしまう方式と真逆かもしれないが、組み合わせによって機能を作ることが出来まっする。
103:デフォルトの名無しさん
21/01/13 21:14:51.93 XHABqTxh.net
プッシュ型って何?
104:デフォルトの名無しさん
21/01/14 06:54:42.42 mrWYZ3Pm.net
Caper や Bison でプッシュ型を調べてみるとわかると思います。
105:デフォルトの名無しさん
21/01/14 06:59:25.06 mrWYZ3Pm.net
あらゆるソフトウェアで使いまわされるライブラリにおいて、詳細が既に決まっているのは不自由なことです。
106:デフォルトの名無しさん
21/01/14 07:12:21.89 FFXK54Rt.net
templateと比べてプッシュ型の利点が分からん。
107:デフォルトの名無しさん
21/01/14 07:23:48.43 mrWYZ3Pm.net
>>105
プッシュ型はパーサーでよく使われます。
ユーザーが柔軟性を求めるからです。
Caperはプッシュ型、Bisonはパーサー側が文字を読む方式ですが、オプションとしてプッシュ型を選べます。
パーサにおいてプッシュ型とは、(パーサではなく)パーサを呼び出す側が文字を送り込みます。
それによって何が起きるでしょうか?
従来のパーサーは状態と共に行番号を保存します。
プッシュ型の場合、行番号を保存するのは呼び出し側です。
パーサーが読む文字とは何でしょうか?
プッシュ型において、Cではint、C++ではユニコード。コードポイントです。
文字デコードを行うのは、呼び出し側です。
では従来のパーサでは?
行番号を管理するためには、文字デコードもパーサーの仕事です。
つまりパーサーは大きな塊でアリ、組み合わせる部品ではありません。
108:デフォルトの名無しさん
21/01/14 07:27:04.63 mrWYZ3Pm.net
プッシュ型はUNIXに通じるものがありますが、UNIXでは実現されませんでした。
109:デフォルトの名無しさん
21/01/14 07:47:44.25 mrWYZ3Pm.net
パーサーは本来、構文解析が仕事です。
しかし、現状多くのパーサーは、構文解析以外の機能を密に結合している。
本来の仕事以外は分離して、小さな部品にすることで再利用性が高まる。
という感じですかね。
これはテンプレートと同じでもろ刃の剣でもあるんですよ。
詳細を設計しないんですから。
しかし、STLの寿命の長さを見て分かる通り、詳細が設計されていないという事は利用者が自由に設計できるという事で、使い出があるんです。
110:デフォルトの名無しさん
21/01/14 07:48:23.53 mrWYZ3Pm.net
もちろん、パーサーに限った話ではないですよ。
例です。
111:デフォルトの名無しさん
21/01/14 09:22:59.17 EIDQMz1r.net
みんながみんなパーサーを開発する側じゃないからなー
もっと身近な例はないですか?
このようなデザインパターンがプッシュ型だとこうなる、みたいな
112:デフォルトの名無しさん
21/01/14 09:29:21.76 mrWYZ3Pm.net
>>110
使う側にとって良いことなんですよ。
それと、プッシュ型は万能ではないんですよ。
一部のコンポーネントの部品化に対して利益があるのです。
113:デフォルトの名無しさん
21/01/14 10:01:10.49 mp+NLhBe.net
>>111
身近な例はないかという問いに対しその回答は意味不明では?
114:デフォルトの名無しさん
21/01/14 10:15:16.01 mrWYZ3Pm.net
まあそうですね。
すいませんでした。
115:デフォルトの名無しさん
21/01/14 10:22:13.84 FFXK54Rt.net
身近な例で利点があるなら広めるのに協力するのもいいが今の時点で利点が分からん。
116:デフォルトの名無しさん
21/01/14 15:40:36.18 qrpkNJTC.net
別にC++だけの問題じゃないんだけど…質問…例えば…エクスプローラのようにファイル一覧出すじゃん…
画像や動画は…サムネイルを出すじゃん…このサムネイルは非同期で更新になるじゃん…
一度開いたら…キャッシュから読み込みたいじゃん…このキャッシュの保存ってさぁ…一意にするのに…
ファイルパス・更新日時・サイズである程度一意になるけど…完璧な一意ではないじゃん…
同じ名前・同じ更新日時・同じサイズで上書きされたら、前の画像がサムネイルに出るじゃん…
どうすんの?
117:デフォルトの名無しさん
21/01/14 15:42:53.95 qrpkNJTC.net
キャッシュなんてそんなものだから…それでいいのかなぁ…
118:デフォルトの名無しさん
21/01/14 15:53:35.11 mp+NLhBe.net
その気持ち悪い「...」をやめてくれ
119:デフォルトの名無しさん
21/01/14 15:55:13.17 EIDQMz1r.net
ファイルパスと更新日時で一意になると考えていいでしょ
コンテンツが変更されれば更新日時が進むという前提で
それさえも許せないクリティカルなシステムならファイルの全バイト列から衝突率の低いハッシュ作るとかファイル読むのと変わらんことになる
クリティカルなシステムではキャッシュ使わんな
120:デフォルトの名無しさん
21/01/14 16:05:02.51 qrpkNJTC.net
なるほど…。
121:はちみつ餃子
21/01/14 16:09:33.34 9qLPLWCT.net
URLリンク(martinfowler.com)
> There are only two hard things in Computer Science: cache invalidation and naming things.
計算機科学においては二つの難しいことがあります。
キャッシュの無効化と名前の付け方です。
122:はちみつ餃子
21/01/14 16:16:29.09 9qLPLWCT.net
ファイルシステムによるけど iノード番号だったり
それに近い管理機構で一意に特定できる場合もあるんじゃないの。
サムネイルくらいなら雑でいいやという割り切りもあると思うけど、
ある程度は不整合がないようにする努力もしてると思う。
123:デフォルトの名無しさん
21/01/14 23:16:54.98 9gUF6PTW.net
特徴的な文体はblogでも見た!
124:デフォルトの名無しさん
21/01/14 23:49:25.09 9gUF6PTW.net
スヌープとLRUでおk
この2つでダメだという香具師は、
スヌーピングのロジック設計をサボっているか、
メモリをケチって必要量に未達なだけ
125:デフォルトの名無しさん
21/01/16 08:13:56.08 dLwYQ6PK.net
おはようございますみなさま、質問させてください
ユーザー定義クラスを作成し、循環参照を防止するためweak_ptrをメンバに持たせています。
そして任意の処理でshared_ptrをweak_ptrに代入し使用したいと思っておりました。
しかし、メンバ関数内部でweak_ptrを使用すると、式にはポインタ型が必要です、旨のエラーが出てしまいます。
調べてみたところ、lock()でshared_ptrに再度権利委譲するとshared_ptr側から動くのですが、私が初心者な事もあり何か釈然としません(我が儘でしょうか……)
一度weak_ptrに落とし込んだものを再度shared_ptrに戻す部分が引っかかっているのだと思います(気にしすぎですかね)
そこでお聞きしたいのですが、クラス内部で動的に定めたいと思っているweak_ptrを使う際に、これ以外の方法はありますでしょうか?
それとも上記の通りlock()で一時的なshared_ptrに束縛した方がいいのでしょうか?
朝から長文失礼しました
126:デフォルトの名無しさん
21/01/16 08:49:06.94 ld2GCDwz.net
ロックしないと知らない間に参照先のshared_ptrで持ってるオブジェクトが破壊されてても文句言えないけどそれでもいいの?
weak_ptrってそういうものだぞ
127:デフォルトの名無しさん
21/01/16 09:17:41.99 dLwYQ6PK.net
>>125
ありがとうございます。
おっしゃる通りだと思います。
納得いたしマスター!
128:デフォルトの名無しさん
21/01/19 02:35:16.36 y82ZfCrD.net
移譲って要は継承せずにオブジェクトとして使うってことですよね?
なぜ「移譲」なんてわけわからない名前がついてるんですか?
129:デフォルトの名無しさん
21/01/19 04:45:45.04 KGVX5wki.net
移譲じゃなくて委譲な。
転送でもいいと思うよ
130:デフォルトの名無しさん
21/01/19 07:52:05.16 Uy0+fZqK.net
代理、丸投げ
131:デフォルトの名無しさん
21/01/19 09:18:39.64 xem4SJ/U.net
日本語の問題だけど移譲は同じレベルに権限等を移すこと、委譲は下のレベルに移すことらしい
委譲は継承より権限の制限があるという含みがあるんだと思う
あくまで人間の組織での比喩なんだろうけど
132:デフォルトの名無しさん
21/01/19 09:54:48.36 QmODXpTw.net
名前付けるほどのことか?と問われればたしかにそう思う
クラス内で他のクラスオブジェクトを使ってるだけw
133:デフォルトの名無しさん
21/01/19 11:29:25.06 Bl6CuSRR.net
移譲コンストラクタってC++11まで存在しなかったの?
134:はちみつ餃子
21/01/19 11:40:18.61 Zp03eKCw.net
>>132
はい。 C++11 で導入された機能です。
それまで存在しませんでした。
135:デフォルトの名無しさん
21/01/19 16:38:03.96 8JRMUdmW.net
C++03の頃のプログラミングめちゃくちゃ大変そうだね・・・
136:デフォルトの名無しさん
21/01/19 20:00:27.80 rn87bDt4.net
「オブジェクト指向?じゃあ継承しなきゃ!共通実装はみんな継承でポリモにしろ!」みたいなノリのクソ設計が溢れかえった時期があって
カウンターとして無理に継承せんでもオブジェクト持って使えばええんやでっていう事に名前付けたのが委譲とかコンポジションとか
しょうもないんだけど継承教に対抗するには名前が必要だったんよ
137:はちみつ餃子
21/01/19 21:06:03.25 Zp03eKCw.net
>>134
そのとおりだよ!
前スレで C++11 (以降) に否定的な意見も出てるが、
使える状況であえて C++03 (以前) を選択したがる感覚はわかんね。
138:デフォルトの名無しさん
21/01/19 22:52:29.91 Bl6CuSRR.net
テンプレート使わなければC++03でもいける(かも)
139:デフォルトの名無しさん
21/01/19 23:09:23.44 7+t4BBWY.net
なんか、ここはどこ私はだあれなやついるなw
なんでテンプレートが出てくるのか
140:デフォルトの名無しさん
21/01/19 23:29:07.70 LToFUUAC.net
C++03にはテンプレート無いしな
141:デフォルトの名無しさん
21/01/19 23:43:32.07 7+t4BBWY.net
何を狙ってボケてんのかわからん
解説求む
142:デフォルトの名無しさん
21/01/20 19:27:35.22 kPiTytYK.net
C++スゲー=俺スゲーしたいだけの学生が増えたんだろ
>>134, >>136
エアプ乙
便利にはなったが、メタプログラミングやってても委譲コンストラクタ無くてもそんなに困らんかったぞ
メンバの初期化には関数の戻り値だって使えただろ、どこで困るんだ?
143:デフォルトの名無しさん
21/01/20 19:33:42.85 kPiTytYK.net
あ、委譲コンストラクタが無くても、の話であって03と11がどうこうじゃないよ
144:デフォルトの名無しさん
21/01/20 21:35:54.62 UBOdXm83.net
constメンバの初期化をしたいとき
初期化リストで初期化すれば良いっていやー良いが
コンストラクタ毎に初期化リストを書かねばならない
メドイ…
145:デフォルトの名無しさん
21/01/20 21:36:27.27 UBOdXm83.net
あと参照メンバも…!
146:デフォルトの名無しさん
21/01/20 21:47:26.52 MvJ8v0/f.net
>>141
C++03で何が困るって、<system_error>や<filesystem>や<execution>みたいのがなかったことだよ
新機能を乱発してプログラマを喜ばせるのを慎むというハゲの主張はわかるが
あまりにも保守的すぎて現実から乖離し始めていた
147:デフォルトの名無しさん
21/01/20 21:48:56.40 MvJ8v0/f.net
<valarray>の立場がなくなるから<execution>をためらうとか本末転倒だろうが
148:デフォルトの名無しさん
21/01/20 21:57:51.96 kPiTytYK.net
>>143-144
え、そんな場面滅多に無いと思うが・・・
委譲するときは他のコンストラクタしか初期化子使えないはず・・
と思ったが非constなものは全部コンストラクタ本体で初期化、ならいけるか
149:デフォルトの名無しさん
21/01/20 23:00:47.64 UBOdXm83.net
>>146
同じことをするのに複数のやり方があったらプログラミング言語界のPerlになってしまう
お禿様の気持ちはワカル
150:デフォルトの名無しさん
21/01/21 02:42:42.14 /P5UVCOb.net
まるで Perl はプログラミング言語界の外に居るような言い方ね。
151:デフォルトの名無しさん
21/01/21 06:07:35.61 lL8gSm1b.net
なんだろう、スクリプト言語とかコンパイラ言語とかいうのかね
152:デフォルトの名無しさん
21/01/21 07:17:30.26 /ZdL1i9k.net
厄介者のperl
153:デフォルトの名無しさん
21/01/21 07:40:13.27 Z8coO7Zb.net
perlは遊び道具としては面白いのかもしれないけど本番で使うにはちょっと…
154:デフォルトの名無しさん
21/01/21 08:36:52.78 RnFvGHUF.net
Git for windowsと一緒にインストールされる遊び道具、という世界観ですね。大切にしなさい。
155:デフォルトの名無しさん
21/01/21 08:52:53.32 2LdLfW0X.net
へー、findやopenss
156:lは便利に使ってたけどperlまで入ってたのか。 まぁ、もう使うことはないだろうけど。
157:デフォルトの名無しさん
21/01/21 09:35:52.84 RnFvGHUF.net
Perlを厄介と考えるPGのほうがPerlよりも先に厄介払いされる。若いくせに向学心がないことが垣間見える。
158:デフォルトの名無しさん
21/01/21 10:09:36.15 rjSQv0Wq.net
向学心とかw
むしろperl使ったことあるからこその意見だろ
159:デフォルトの名無しさん
21/01/21 10:25:31.85 RnFvGHUF.net
Perlを難しいと思うようだとあまり伸びしろがないね。職業変えたほうがいいかもね。正直でごめんね。
160:デフォルトの名無しさん
21/01/21 10:51:23.68 /0jxrBnU.net
>>155はマジで言ってるのか
10年くらい眠ってたのか?
161:デフォルトの名無しさん
21/01/21 11:09:21.23 rjSQv0Wq.net
最近のモダン(この言い方自体が既に古いがw)な言語使ったことないんじゃね?
あとそれなりの規模の開発したことないんだろうね
perlは書捨てのツール作ったりするには便利だったけど今更新規で使うことはないわ
162:デフォルトの名無しさん
21/01/21 15:15:36.61 upjC6TmF.net
Perlの開発者ってタッチタイピングできなかったのかな?
なんであんなに1文字の特殊変数だらけの言語作っちゃったの?キーボード入力が楽になるとか思っちゃったのかな?
結果は可読性の低いクソースコードが量産されただけだったよね
163:デフォルトの名無しさん
21/01/21 16:04:26.02 eIfq2EBT.net
>>160
gnu-makeやshell scriptも同じ。
emacsも、キーバインドを丸覚え出来る人しか使えない。
作者が記憶力が桁違いにいい人だったりしてな。
164:デフォルトの名無しさん
21/01/21 16:22:10.60 jCImDRpq.net
>16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ~んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。
165:デフォルトの名無しさん
21/01/21 16:57:53.30 eIfq2EBT.net
表を見た直後なら、俺も暗記してるぞ。
しばらくたったら忘れる。
短期記憶と長期記憶の違いだ。
166:デフォルトの名無しさん
21/01/21 18:03:23.48 ukSw99eK.net
Perlはglobが使えるようになったらuse strictの下でも参照渡しとかできてC++的に組めるようになるからおk
しかしglobを使うことと理解することは別宇宙の話なのであった
167:デフォルトの名無しさん
21/01/21 18:10:26.51 ukSw99eK.net
正確には型グロブ、
168:デフォルトの名無しさん
21/01/21 18:24:32.27 RnFvGHUF.net
このスレ、初心者多すぎ。丸暗記なんて誰もしないぞ。何のためにオンラインヘルプあると思ってんだろう。
辞書持ち込み禁止に慣れた学生の気分なのかな。
169:デフォルトの名無しさん
21/01/21 18:26:55.41 RnFvGHUF.net
自身の理解力のなさを胡麻化すために大げさな言い回ししているように見える。マジでPGむいてないから転職したほうがいいよ。
170:デフォルトの名無しさん
21/01/21 18:30:55.76 RnFvGHUF.net
>>160 みたいな己の能力のなさを棚に上げておおげさな物言いをする人には調査の仕事を振ることすらできないんだが。
171:デフォルトの名無しさん
21/01/21 19:06:10.15 /ZdL1i9k.net
URLリンク(descartes-search.com)
Perlファンたちはその堅牢なパフォーマンスとスケーラビリティを主張するが、すでにPythonのような他の言語に代替され始めている。10年後にはその信者の数も減り、永久に消え去ることだろうw
172:デフォルトの名無しさん
21/01/21 19:17:51.03 RnFvGHUF.net
ちょっと
173:したことをやるのに適しているのがスクリプト言語なのに、そのスクリプト言語の初歩にさえつまづいてしまう人はPGに向いてないんだよ。 正直でごめんね。Perlだけの話してるわけじゃないんだわ。
174:デフォルトの名無しさん
21/01/21 21:03:47.74 ukSw99eK.net
>>169
Perl 6が出るまで無限に待たされそうな気がするから
バージョン5系の消滅は無限の未来なんじゃないかな…
175:デフォルトの名無しさん
21/01/21 21:28:48.83 cjnTDlz3.net
人って第一印象が重要でしょ。
言語もそうだと思うの。
Perlだけの話をするけど、Perlは第一印象で損してる感じ。
PG経験あれば直感的に避けようとする人も少なくないのでは?
176:はちみつ餃子
21/01/21 21:30:02.98 ooF1treM.net
>>171
Perl 6 は 2015 年に安定板がリリースされたぞ。
ただし、旧来の Perl と互換性は全然ないので後に Raku と改称された。
要するに別言語になってしもうた。
177:デフォルトの名無しさん
21/01/21 21:40:40.11 RnFvGHUF.net
>>172
ドルマークを多用するPerlはシェルスクリプトに慣れた人にはむしろ入りやすいはずだけどね。
178:デフォルトの名無しさん
21/01/21 21:46:06.32 6tk1Snw3.net
あわしろ氏はJavaはオワコンこれからはPerlと言ってるけどな。
179:デフォルトの名無しさん
21/01/21 22:21:06.42 rjSQv0Wq.net
なんでこの人自分以外はperl使えない前提なんだろ…
180:デフォルトの名無しさん
21/01/21 22:23:21.95 RnFvGHUF.net
知っている人も多いと思うけど、bash/zsh向けに便利な入力補完ツール fzf が存在する。
そのGitHubにはfzfにPerlを併用するサンプルコードが散見される。
URLリンク(github.com)
今やPerlは、sedやawkより多機能なちょっとしたテキスト改変ツールとして、Perl本来の役割に回帰している。
PerlをCGIを書くための言語と思っている人にはPerlがオワコンに見えるかもしれないが、現実は違う。
181:デフォルトの名無しさん
21/01/21 22:35:21.87 RnFvGHUF.net
python3が入っていない環境はわりとあるけどperlが入っていない環境はまずない。
182:デフォルトの名無しさん
21/01/21 22:35:36.69 Z9MWAls1.net
なんでC++スレでPerl, Perlと連呼するんだろう
おおかた、その心理を察することができるので草生えるwww
183:デフォルトの名無しさん
21/01/21 22:41:15.38 RnFvGHUF.net
本スレテーマであるC++やJavaなどのコンパイル言語のコーディングの生産性を高めるにはスクリプト言語の有効活用が欠かせない。
makeやantではかゆい所に手が届かないもどかしさは今も昔も同じなんだよ。
184:デフォルトの名無しさん
21/01/21 22:54:28.47 H50jUx0j.net
>>168
Perl狂信者かよ
185:デフォルトの名無しさん
21/01/21 22:59:11.40 /ZdL1i9k.net
うかつにもPerl厨の秘口を突いてしまった
186:デフォルトの名無しさん
21/01/21 23:06:26.51 rjSQv0Wq.net
>>177
> PerlをCGIを書くための言語
いつの時代の人よw
187:デフォルトの名無しさん
21/01/22 00:49:01.09 di1fs6eX.net
たしかルビーの素となった言語がペールでは?
188:デフォルトの名無しさん
21/01/22 01:19:07.37 55qwSi9o.net
macOSのソフトウェア更新ツールHomebrewはRuby製。マカーがいる限りRubyは不滅。
189:デフォルトの名無しさん
21/01/22 13:19:25.84 pJ+Dy7HC.net
>>157
PerlもPHPも難しいとは思わないけど
だからこそ排除すべき
190:デフォルトの名無しさん
21/01/22 13:20:41.30 pJ+Dy7HC.net
>>160
>1文字の特殊変数だらけの言語
Rubyのことですね判ります
191:デフォルトの名無しさん
21/01/22 14:12:04.30 aLDuncuZ.net
>>187
Rubyはそれはない。
Perlと間違ってないか?
192:デフォルトの名無しさん
21/01/22 14:18:28.68 WLGQ46hZ.net
C++のところで延々と続けるのもなんだけど、TECOってのは相当複雑怪奇だったみたいね
193:デフォルトの名無しさん
21/01/22 22:15:36.76 HHqI
194:RAh/.net
195:デフォルトの名無しさん
21/01/22 22:18:18.81 3W/g7okM.net
<functinal>で足りるんじゃね?
196:デフォルトの名無しさん
21/01/22 22:50:10.68 LtnZZu+T.net
こちらでどうぞ
スレリンク(tech板)
197:デフォルトの名無しさん
21/01/22 23:49:36.96 LcAiXyQN.net
>>192
C++の「マルチパラダイム」の中に関数型が今後入ることはあるか (あるいはもう入ってるか) という質問なんですが、変なことを聞いていますか?
198:デフォルトの名無しさん
21/01/23 00:00:03.65 rMuiLyZn.net
ぅえ?
199:デフォルトの名無しさん
21/01/23 01:38:03.71 PXGkLjAZ.net
もう入ってるでしょ?
200:デフォルトの名無しさん
21/01/23 04:37:52.61 Vx6mcd5N.net
Perlのソース汚いイメージしかないけどな
201:デフォルトの名無しさん
21/01/23 07:19:17.61 E7+6hgZm.net
std::functionとラムダ式で関数はほぼ第一級オブジェクトとして扱えるからC++はとっくに関数型言語ですよ
モナドだってやろうと思えば作れるよ
202:デフォルトの名無しさん
21/01/23 13:50:31.25 1/fAmr9E.net
じゃーHaskellにできることはC++でもできるし、同じように書けるって言うのかい
203:はちみつ餃子
21/01/23 13:52:40.96 Q+Wu8A2P.net
>>198
なんでそうなるのかようわからんが。
204:デフォルトの名無しさん
21/01/23 14:06:29.89 pKYkJfCY.net
>>160
>1文字の特殊変数だらけの言語
APL記号?
205:はちみつ餃子
21/01/23 14:54:28.68 Q+Wu8A2P.net
>>188
URLリンク(docs.ruby-lang.org)
206:デフォルトの名無しさん
21/01/23 16:26:10.57 LPDMRZtK.net
>>200
懐かしいな
俺アンペールのいじってたよ
207:デフォルトの名無しさん
21/01/23 18:58:05.34 C4WlxIYr.net
>>198
そんなクソみたいなこと言うんだったら、まず「関数型言語」の定義から言えよ。
Lispが関数型言語じゃないとか言い始めそうだな。
208:デフォルトの名無しさん
21/01/24 11:36:54.35 wSlEv8S7.net
Rubyは関数型ωωω
209:デフォルトの名無しさん
21/01/24 12:17:53.22 /MPXRGah.net
カオスコードって意味ならc++とperlが双璧だわな。rubyは別の意味で糞だが。
210:デフォルトの名無しさん
21/01/24 14:46:51.42 bXJjYU1w.net
rubyの糞とrailsの糞がかけ合わさって悪臭漂う糞になる
211:デフォルトの名無しさん
21/01/24 21:13:47.08 hPeuQsPP.net
肛門を保護するために出る粘液はイイ匂いがするので、化学的に類似品が合成され、香水の原料になっています。
ウンコは臭いですが、ウンコの周りには良いものがあるかもしれない。
212:デフォルトの名無しさん
21/01/24 23:17:47.88 bXJjYU1w.net
Co-mon++
213:デフォルトの名無しさん
21/01/25 00:51:35.02 h/LmkNzq.net
>>207
腸液は質感、匂いともに精液に酷似してるっていうのはよく言われてるけど、それのことじゃないよね?
良い匂いの分泌液なんて聞いたことがない
214:デフォルトの名無しさん
21/01/25 09:53:48.54 RU5Fvovq.net
やだこのスレホモ臭い
215:デフォルトの名無しさん
21/01/25 10:13:42.80 uSgkqdKl.net
と言いつつ嬉しそうな吉宗であった。
216:デフォルトの名無しさん
21/01/25 13:06:55.63 sPc2eBUP.net
PerlとC++は、見づらいソースコードに慣れる能力を鍛えてくれる。
Perlをオワコン扱いする人は情弱である。
217:デフォルトの名無しさん
21/01/25 13:11:37.73 54hHF458.net
厄介者のperl厨
218:デフォルトの名無しさん
21/01/25 13:34:11.10 lM5Uli0g.net
糞コードに触れるとアンチパターンがわかるというのは確かにあるが、それを人に勧めるのは気がひける。
219:デフォルトの名無しさん
21/01/25 13:48:32.46 sPc2eBUP.net
まずい酒の味を知らない者には、うまい酒の味を見分けることはできない。
220:デフォルトの名無しさん
21/01/25 21:12:20.67 bQwFUjl3.net
美味い酒の味を知ったら不味い酒は飲めん
221:デフォルトの名無しさん
21/01/25 22
222::13:56.33 ID:IR169uBT.net
223:デフォルトの名無しさん
21/01/25 22:56:10.85 sPc2eBUP.net
まずい酒を飲めなくなることは、プログラミングに置きかえればクソコードのメンテナンスができなくなることを意味しており、スキル低下でしかない。
224:デフォルトの名無しさん
21/01/25 23:11:18.97 bBvI6B4m.net
まずい酒はわかるけどうまい酒はマジわからん…
225:デフォルトの名無しさん
21/01/25 23:57:21.75 sPc2eBUP.net
うまい酒については「水のように飲みやすい」というほめ表現もあるが、なら水飲んどけよという話でもある。
226:デフォルトの名無しさん
21/01/25 23:57:36.36 t4dFVxvz.net
<body>
!unti {nuritakuri}
<body/>
227:デフォルトの名無しさん
21/01/26 00:02:06.39 Qnn6Y+tc.net
<head>
<bukkake> seisi <bukkake/>
<strong> naaaaaaaaa!!!<strong/>
<head/>
228:デフォルトの名無しさん
21/01/26 02:05:34.14 wg8lZWjJ.net
>>220
ほんまこれ
前にカエルの肉を食ったやつが「ほんと鶏肉とおんなじようなもんだから!食べてみて!」
ってしつこいんだが、だったら鶏肉でいいだろなんでわざわざゲテモノ食わにゃならんのか??となる
229:デフォルトの名無しさん
21/01/26 03:51:19.13 uiGtA95I.net
寄生虫が良い風味出すから。
230:デフォルトの名無しさん
21/01/26 06:09:38.08 ZRZozNwf.net
macOSのHomebrewいいね。Perlが最新の5.32.1に即対応。人柱上等なところに惚れる。
231:デフォルトの名無しさん
21/01/26 07:49:52.25 ZI8ZD6Xl.net
安めの食材や有り合わせでうまいもん作れる腕があっても
腐ったものはどうにもできない
例えるなら、これだろ
232:デフォルトの名無しさん
21/01/26 07:59:37.62 xVPuSdRM.net
>>220
酔える水なら。
233:デフォルトの名無しさん
21/01/26 11:52:17.15 XuLptVzr.net
>>223
今ジビエなどとおしゃれに言ってるがゲテモノ食いが今の事態を招いてる
中途半端な科学信仰が何もかも迷信にしてしまって自然を正しく畏れなくなった
234:デフォルトの名無しさん
21/01/26 13:45:24.16 uiGtA95I.net
ちょっと腐ったほうが柔らかくなってアミノ酸も多いよ。
熟成させたと言えばグルメも安心だし。
235:デフォルトの名無しさん
21/01/26 13:48:13.24 uiGtA95I.net
野菜は立てておくと腐らないんだけど、その代わり成長するからね。
光合成できるかも?と思ってなけなしの養分使って葉を伸ばすんだろうけど、光合成は出来ません。
236:デフォルトの名無しさん
21/01/26 13:54:11.58 uiGtA95I.net
野菜の活〆を発明したら儲かるだろな。
放射線以外で。
237:デフォルトの名無しさん
21/01/26 21:06:31.25 Du8Hqhh0.net
いいかげんスレ違い。
238:デフォルトの名無しさん
21/01/26 21:46:24.92 ZRZozNwf.net
プリプロセッサマクロだらけの“汚い”コードを否定したらC/C++の強みを失うことになる。
JavaやC#はプリプロセッサマクロが貧弱なのが玉にキズだ。
239:デフォルトの名無しさん
21/01/26 21:51:10.66 ZRZozNwf.net
pybind11スレがないこんな世の中じゃ~Python~
まぁマクロの塊のような代物だが。
240:デフォルトの名無しさん
21/01/27 06:03:44.65 yQalyIAE.net
C++はコミュニティで発言力のある人が大抵率直にものを言い過ぎる、悪く言えば口が悪いので忌み嫌われてるとこある
241:デフォルトの名無しさん
21/01/27 07:30:48.85 eLUquqZ0.net
>>229
カダベリンやムスカリンが発生してたり
セレウス菌が大量にいるのは
そういう問題じゃねえぜ
242:デフォルトの名無しさん
21/01/27 07:48:28.28 4l9V085Z.net
でも、Linux板なんか失敗したボランティアの住所載せて、放火しろとは言ってませんよ??言ってませんよ??・・・などの書き込みあるからな。
それに比べれはだいぶ良識的では?
243:デフォルトの名無しさん
21/01/27 11:26:52.94 cJSBZXf9.net
C/C++のプリプロセッサも貧弱すぎ
244:デフォルトの名無しさん
21/01/27 17:43:27.13 nPuTGnvU.net
C++例外のスタック情報がとれないのはC++の欠点。
例外でスタック情報を使えるJava/C#/Python/Perlはエライ。
245:デフォルトの名無しさん
21/01/27 21:51:38.91 NT655YPf.net
おまえは二度とC++使うな
246:デフォルトの名無しさん
21/01/27 23:04:53.57 TqcnYSNG.net
>>239
スタックフレーム作ればイケるってば
247:デフォルトの名無しさん
21/01/28 09:07:27.76 dmDIUcy2.net
>>235
例えば誰?
248:はちみつ餃子
21/01/28 10:23:46.51 vBYpvnJx.net
>>239
gdb にアタッチしたことないんか?
C++23 には stacktrace が入るから
デバッガを使いこなせなくても少し楽にトレースできるかもな。
249:デフォルトの名無しさん
21/01/28 10:52:39.05 dNWrUHbO.net
>>223
フグは豚肉に触感似てるけどフグの方が美味い
250:デフォルトの名無しさん
21/01/28 10:54:00.53 dNWrUHbO.net
>>228
日本で感染爆発が起きてないのは以前からジビエが流行してたからか
251:デフォルトの名無しさん
21/01/28 10:55:14.42 dNWrUHbO.net
>>230-231
白菜は外の皮じゃなくて中の芯から先に食べろと言われている
252:デフォルトの名無しさん
21/01/28 11:40:01.79 eLxqvNeX.net
>>200
ユニコ時代だからAPLよりずっと先行ってるぞ
組み込み演算子で∩∉とか集合論の記号採用してたりアトミックな演算子は⚛++とか洒落効いてたりする
一方で古代perlのプレフィックスは緩和されてる
253:デフォルトの名無しさん
21/01/28 11:51:37.25 eLxqvNeX.net
∅∘∩ ⊍∪ ⊖ ⊎ ∖≅ ∈ ∉ ∋ ∌ ≡
≢ ⊂ ⊄ ⊃ ⊅ ⊆ ⊈ ⊇ ⊉ ≼ ≽.«»≠
他組み込みではこんな感じか
>= やらよりmずっと可読性高いと思う、エディタもvimとか高機能なのなら問題なかろう
文字を表示してくれるのは特に便利
254:デフォルトの名無しさん
21/01/28 11:58:59.45 kskG1wa2.net
>>245
さすがにコウモリはどこの地方でも食わんだろ
255:デフォルトの名無しさん
21/01/28 17:23:15.04 8Al9oSyF.net
なんでプリミティブ型って継承できんの?
256:はちみつ餃子
21/01/28 17:29:22.44 vBYpvnJx.net
>>250
やりたいときってあるか?
257:デフォルトの名無しさん
21/01/28 17:41:41.73 GsoT0xyU.net
クラスAのオブジェクトをクラスBのメンバにするときってどうやってAのコンストラクタ呼ぶの?
class B{
A a;
public:
B(){
// この辺でAのコンストラクタを呼びたい
}
};
258:デフォルトの名無しさん
21/01/28 17:48:00.82 WrE+/6so.net
>>252
メンバのコンストラクタの方が先に呼ばれる。だからそこでは既にAは構築済み。
どうしてもBのコンストラクタ内でAのコンストラクタ呼びたいなら、メンバ変数はポインタで持つ
259:デフォルトの名無しさん
21/01/28 18:07:20.07 IHrlZHr2.net
>>243
gdbはおいとくとして、Visual StudioってC++例外のスロー位置を追跡できたっけ?
260:デフォルトの名無しさん
21/01/28 18:50:38.47 Hqj+H5f7.net
>>252
初期化リストを使う
B() : a(hoge, piyo)
261:デフォルトの名無しさん
21/01/28 18:54:30.61 IHrlZHr2.net
あとで再初期化したくなること多いから、結局コンストラクタの実装を別の関数に分離すること多いよね。
コンストラクタの種類が増えたら使いまわしたくなるし。
262:デフォルトの名無しさん
21/01/28 19:24:37.48 q3mIN91/.net
>>243
デバッガ使いこなせないとか話にならんだろ・・
263:デフォルトの名無しさん
21/01/28 19:28:49.13 IHrlZHr2.net
264:デバッガやシンボルがない環境でもスタックトレースできたほうが良いと思うけどね。 後発言語の生産性の高さはこの辺の充実ぶりにあるでしょ。
265:デフォルトの名無しさん
21/01/28 19:42:24.27 IHrlZHr2.net
他プロセスと連携するシステムにはデバッガを当てにくい事が多い。
タイミング依存の不具合を追跡する場合、デバッガがまったく役に立たない。
266:デフォルトの名無しさん
21/01/28 20:25:47.81 eBfsAdOM.net
>>258
その手の生産性と成果物の効率はトレードオフでどっちを重視するかが違うだけでしょ
267:デフォルトの名無しさん
21/01/28 20:36:13.14 IHrlZHr2.net
デバッガ使いこなすとか言って悦に入ってる人と会話が噛み合わないんだが。
268:デフォルトの名無しさん
21/01/28 20:36:14.66 yp+dwtvR.net
>>258
だよね
むしろデバッガをアタッチできる環境ならスタックトレースはなくてもなんとかなる
ユーザー環境でスタックトレースがテキストファイルに落ちるようになってるとトラブルシューティングがしやすい
269:デフォルトの名無しさん
21/01/28 21:29:31.41 oPlwADge.net
>>261
ここほとんどアマチュアの人だから許してやろうやw
270:デフォルトの名無しさん
21/01/28 21:48:11.74 q3mIN91/.net
>>261, >>263
悪いがプロだよ
IDEの機能を使いこなせてない初心者が、先に学ぶべきことから逃げて言語だけでどうにかさせようとするような
(いつものことだが)はちみつのミスリードに釘を刺しただけだ
271:デフォルトの名無しさん
21/01/28 21:51:13.66 q3mIN91/.net
>>261
あと、流れを読む限り俺の発言が気に入らなくてファビョってるのは君の方だよね、俺1行しか書いてなかったし(しかも大した内容じゃない)w
何が気に障ったんだ?
272:デフォルトの名無しさん
21/01/28 21:51:23.69 oPlwADge.net
いやごめん、俺は流れは一切追ってなくて他意はないよ
茶化したかっただけ
気にしないで
273:デフォルトの名無しさん
21/01/28 23:50:09.41 g6qVZG7L.net
発狂やないかw
Perlの人かな
274:デフォルトの名無しさん
21/01/28 23:53:15.94 RfcrpqT0.net
>>253,255
じゃあ、Bを構築してしばらく経ってからわかる情報を使ってAを構築したいとき、Aのインスタンスをメンバとして持つのは不可能ということですか?
ポインタで持つ以外の方法はない (想定されてない?) のでしょうか
constなメンバ変数を初期化するときも近いことを思います
275:デフォルトの名無しさん
21/01/29 00:10:27.15 ZIYbfTXe.net
>>268
そういうコンストラクタ制約を持つクラスはけっこう多い。
WindowsのC++向けGDI+ライブラリのクラス群はまさにこれが当てはまる。
広範に存在している以上は受け入れるしかない。
今時は標準でshared_ptrなどの共有ポインタクラスを使えるので、さほど問題にならないでしょ。
276:デフォルトの名無しさん
21/01/29 00:19:48.35 SRnp44iw.net
>>268
Aに引数なしのコンストラクタ、コピーorムーブ代入演算子があるなら、後で作って代入でもいいけど
まぁ特に理由なければ(スマート)ポインタで持った方が無難だし楽
constはどうしようもない
277:デフォルトの名無しさん
21/01/29 00:22:16.89 MWSZTtHp.net
>>268
「Bを構築してしばらく経ってからわかる情報」を返すヘルパー関数を作って初期化リストの中で呼べばいいじゃない
278:デフォルトの名無しさん
21/01/29 07:49:13.10 /axUqcOX.net
データメンバをconstってあんまりやらないな
publicに晒すとかじゃなきゃメンバ関数を
constにするだけで足りるから
あ、staticメンバのconstはよくやるけどね
279:デフォルトの名無しさん
21/01/29 08:02:53.38 1V7SRlCX.net
>>251
ある
実装は同じunsigned longでも意味が違うから別クラスとして扱いたいときとか
private継承できたらナア……
現状(C++03)はプリミティブ型と同じ演算子(のうちの当座のアプリケーションで使うやつ)をいちいち実装したクラスを作って
NDEBUGマクロで実装を切り替えるみたいな涙ぐましい努力が要る
280:デフォルトの名無しさん
21/01/29 08:05:13.74 1V7SRlCX.net
訂正orz
誤: private継承
正: public継承かつoperator unsigned long()はprivateかつunsigned longからの構築はexplicit
281:デフォルトの名無しさん
21/01/29 08:08:37.91 1V7SRlCX.net
メンバをconstにして代入演算子を定義せずにいるとデフォルトの代入演算子をが定義できないとコンパイラに文句を言われる俺環、
282:デフォルトの名無しさん
21/01/29 09:20:50.39 koPyq8om.net
>>273
それ、継承できたとして式の中で混在しても区別されないんじゃね?
テンプレートの型引数で区別するような使い方くらいしか思いつかないが。
283:デフォルトの名無しさん
21/01/29 12:20:22.74 c2S2Mocm.net
メンバ変数のconstはポインタ型ならすることあるけど、値で持つメンバ変数はあんまり意味なくない?
constなくても勝手に外部から書き換えられないように、ちゃんと隠蔽しとけばいいだけでしょ
284:デフォルトの名無しさん
21/01/29 12:35:16.78 2DekME/2.net
>>277
class内の処理においても変更しないつもりだ、変更されることはない、と明示することで意識しておかなければならないことを少し軽減できるのだから、無駄ではないと思う。
手間をかけずにconstにできるならしておけばいいし、逆に無理して複雑なことをしてまでconstにする必要はないという程度のことかと思う。
285:デフォルトの名無しさん
21/01/29 12:55:03.34 c2S2Mocm.net
>>278
たしかにconst付いてればコンストラクタで設定した値がずっと変わらないことが
明示的になるから無意味ではないか
286:はちみつ餃子
21/01/29 14:10:30.45 heeNhc25.net
>>273
そういう用途なら opaque alias という提案だけは出てるけど
どう見てもグダグダなんで、場当たり的な方法のほうがマシだと思うよ。
287:デフォルトの名無しさん
21/01/29 16:04:20.47 5pIDnM+S.net
>>251
3値のboolean作るときってboolean継承すべき?
288:デフォルトの名無しさん
21/01/29 16:07:44.73 5pIDnM+S.net
>>256
言いたいことは判るが
コピーコンストラクタやムーブコンストラクタが勝手に使われるから
デフォルトに任せてると何が起こるかは判ってた方が良い
289:デフォルトの名無しさん
21/01/29 16:10:21.66 5pIDnM+S.net
>>259
COMサーバーというかDX用にフィルタ書いてると訳判らなくなった
290:デフォルトの名無しさん
21/01/29 16:56:37.48 RxAp4EkX.net
>>281
3値のbooleanを作って何するの?
boolへのポインタにしてtrue / false / nullptr の3値でなんとかならんか?
291:デフォルトの名無しさん
21/01/29 17:20:59.69 ADFs+h5F.net
boostにtriboolってのがあるな
292:はちみつ餃子
21/01/29 17:23:22.91 t7wU8l8M.net
>>281
仮に真偽値型を継承可能であったとして、三値型が真偽値型を継承するのはおかしいだろう。
場合によって柔軟な判断が必要な場合はあるものの、
継承は is-a 関係を表したいときに限ったほうがよろしいというのが一般的な設計原則だと思うが。
293:デフォルトの名無しさん
21/01/29 17:25:47.23 GtDK4kd8.net
nullableか、DBのフィールド値?
294:デフォルトの名無しさん
21/01/29 18:57:54.24 ZIYbfTXe.net
はちみつ餃子「スタックトレースできないならデバッガ当てればいいじゃない」
295:デフォルトの名無しさん
21/01/29 19:41:08.91 rAmh2V0K.net
典型的な円楕円問題だな
296:デフォルトの名無しさん
21/01/29 19:56:26.71 ZIYbfTXe.net
テンプレートを使えば、クラス継承に依存しない記述が可能。
iostreamが黒歴史扱いである現実を踏まえての話。
297:デフォルトの名無しさん
21/01/29 21:24:08.77 WFMo+mcm.net
とりあえずiostream批判しとけば訳知り顔ができた気に浸れる浅はかなやつ
298:デフォルトの名無しさん
21/01/29 21:35:39.96 nnAlz0gZ.net
c++ニワカあるあるだよなw
iostreamとりあえず批判奴w
299:デフォルトの名無しさん
21/01/29 21:39:11.47 ZIYbfTXe.net
iostreamは使いもしないメンバ変数を継承することを強要される悪い手本でしょ。
300:デフォルトの名無しさん
21/01/29 22:16:38.63 WFMo+mcm.net
何も説得力を示さずに突然「悪い」と言い出す
301:デフォルトの名無しさん
21/01/30 01:56:51.26 SJAC6oP5.net
iostreamはクソなのは正解だが別に批判するようなことでもない
なぜなら使わなければいいだけの話だからだ
302:デフォルトの名無しさん
21/01/30 02:06:50.03 OHt9F1SU.net
無理にクラス継承を使わずオーバーライド関数とそれを使うテンプレート関数を充実させたほうが幸せになれる。
303:デフォルトの名無しさん
21/01/30 02:41:04.49 PJvUkb6d.net
別に無理して継承を使っているわけではない
どっかの馬の骨が気に入らんからといって
あれを使うなこれを使うなと言われるほうが無理そのものだ
304:デフォルトの名無しさん
21/01/30 02:53:37.72 OHt9F1SU.net
例えば、ファイルに書き込む処理があったとする。
ファイルハンドルとして有名な型としては、int型、FILE*型、iostream型、Win32APIのHANDLE型などがあげられる。
これらを派生クラスに閉じ込めて抽象化するよりも、関数名が同じになるオーバーライド関数を作ってテンプレート関数から呼んだ方がはるかに楽。
int WriteBuffer(int fp, const char* buffer);
int WriteBuffer(FILE* fp, const char* buffer);
int WriteBuffer(ostream& fp, const char* buffer);
int WriteBuffer(HANDLE fp, const char* buffer);
template<typename FILE_OBJECT>
void WriteContent(FILE_OBJECT o)
{
WriteBuffer(o, "write test1");
WriteBuffer(o, "write test2");
}
305:デフォルトの名無しさん
21/01/30 03:53:39.52 ULcRPxme.net
ドヤってるところすまんがそれオーバーライドじゃない
306:デフォルトの名無しさん
21/01/30 04:01:05.04 PJvUkb6d.net
プゲラ
307:デフォルトの名無しさん
21/01/30 05:45:11.84 SLqQC90z.net
フリー関数とクラスメンバでは、インテリセンスが効くか効かないかの違いもある。
308:デフォルトの名無しさん
21/01/30 05:52:17.44 OHt9F1SU.net
そんなあなたに名前空間
309:デフォルトの名無しさん
21/01/30 06:06:53.60 SLqQC90z.net
クラスの場合、名前空間を書かなくても、インテリセンスが効く。
310:デフォルトの名無しさん
21/01/30 06:47:43.00 budoESfZ.net
コンストラクタの初期化リストで
class A{
int x;
public:
A(int x) : x(x) {}
};
みたいにしたとき、ちゃんとメンバのxがコンストラクタの引数のxで初期化されますよね?
メンバの x と同名の引数の x が同一のスコープに同居しているようで紛らわしいかなと思ったのですが、こういう書き方を避ける慣習はありますか
311:デフォルトの名無しさん
21/01/30 07:04:07.72 ULcRPxme.net
自分は普通にその書き方してる
避ける人も居るっぽいけど好きなようにすればいい
312:デフォルトの名無しさん
21/01/30 09:09:49.20 PHKUCpSE.net
iostreamマンセーバカってのは型安全ならどんな仕様でも良いと思ってるカスが多いからな。
型安全は評価する一項目に過ぎないってのに。
313:デフォルトの名無しさん
21/01/30 09:29:38.23 vDjChjwr.net
iostreamは整形のための情報をわざわざ状態として持たされるのがクソ
当時は状態が邪悪だっていう考え方が一般的じゃなかったからしょうがないけど
314:デフォルトの名無しさん
21/01/30 09:38:20.91 2pTx0la6.net
でも状態もってなかったら記述が煩雑になりすぎない?
HTMLのマークアップとまでは言わんまでも
315:デフォルトの名無しさん
21/01/30 09:59:20.80 OHt9F1SU.net
整形設定を記憶する変数インスタンスをiostreamインスタンスと分離すべきって話でしょ。
必要に応じて差し替えできるように参照渡しするか、逆にiostreamを参照渡しするとか色々やれたはず。
316:デフォルトの名無しさん
21/01/30 10:06:40.70 OHt9F1SU.net
というか他のオブジェクト指向言語だと整形情報がFormatterクラスとかに分離されているのが普通だし。
317:デフォルトの名無しさん
21/01/30 10:32:05.24 PJvUkb6d.net
FORTRANのFORMAT文が好きな人をどうこうしようとは思わない
318:デフォルトの名無しさん
21/01/30 10:40:52.47 hVJYorL3.net
初歩的な質問なのですが、stringクラスの内部バッファはデストラクタで破棄されるため自分では一切管理しなくていいという認識で良いのでしょうか?
319:デフォルトの名無しさん
21/01/30 11:17:24.76 SLqQC90z.net
アロケータによるけど、普通は管理しなくて良いのでは?
320:デフォルトの名無しさん
21/01/30 12:47:13.80 EWZvTk3z.net
>>308
状態持ってても無駄に煩雑(複雑ではない)
321:デフォルトの名無しさん
21/01/30 12:57:10.51 8FYOnD7D.net
iostream 型安全なのはいいけど、char/signed char/unsigned char ぜんぶ文字扱いするのはやめて欲しかった。
322:デフォルトの名無しさん
21/01/30 13:18:35.30 SLqQC90z.net
単項プラスで。
323:はちみつ餃子
21/01/30 13:18:38.04 4OMKN/Z4.net
>>309
入出力を直接的に司るバッファクラス (basic_streambuf) と
書式制御を司るストリームクラスを分離したデザインになっているし、
必要に応じて差し替えることも出来るよ。
iostream においてそれがわかりやすいか、良いデザインであるかは別として、
ちゃんと分離したデザインになってる。
324:
21/01/30 14:53:52.50 L1O2TNoD.net
>>304
私は馬鹿なのでメンバ変数とコンストラクタ引数を x, _x というふうに書き分けています、馬鹿が感染るかもしれないのでお勧めはしません
325:デフォルトの名無しさん
21/01/30 15:08:20.24 S5wIZr5N.net
C++でのメンバ変数は、標準的には m_xと書く。
326:デフォルトの名無しさん
21/01/30 16:04:40.96 0ahE8ZR3.net
>>319
何処信者だよ
ダッサw
327:デフォルトの名無しさん
21/01/30 16:41:05.48 SLqQC90z.net
MicrosoftとAdobeがその書き方多いですね。
328:デフォルトの名無しさん
21/01/30 17:13:12.28 S5wIZr5N.net
なお、_x は、命名規約上、禁止。先頭が _ の名前はコンパイラなどの
システム予約なため。
329:デフォルトの名無しさん
21/01/30 17:14:26.98 2r/QlSUC.net
そうだったっけ?
330:はちみつ餃子
21/01/30 17:19:55.79 4OMKN/Z4.net
>>304
>>318-319
命名規約の方法論は色々なのでプレフィクスを付けるルールが定めてある場合もあるし、
むしろ一致させていくようにしているものもある。
私自身は、少なくともメンバに値を設定するだけの単純なコンストラクタである場合には
名前を一致させていくスタイルで書く。
C++ を使う上でのガイドラインとしてよく参照されているのはグーグルのスタイルガイドで、
データメンバの名前は最後にアンダースコアを付けるようにルールを定めている。
URLリンク(google.github.io)
その一方では C++ の設計者である Stroustrup は型やスコープを変数名に含めるのは好ましくない
(しかし部分的に便利な場合もあることは認めている) と書いている。
URLリンク(stroustrup.com)
どちらの習慣が圧倒的優勢ということはないと思う。
>>322
グローバル変数としてはアンダースコアで始まる名前は予約されているけど、
そうでない場合には問題ない。
ただし、
・ アンダースコアで始まって大文字が続く名前
・ アンダースコアが連続 (名前の先頭部分以外でも) する名前
は名前の種類やスコープにかかわらずどこでも予約されている。
331:デフォルトの名無しさん
21/01/30 17:30:01.20 2r/QlSUC.net
互いの信仰を侵害してはならないがチーム内では統一されている必要がある
規約の背景は明確である必要がある
332:デフォルトの名無しさん
21/01/30 18:08:50.99 OHt9F1SU.net
>>317
まず、FILE*とostreamが一対一対応していないのがダメ。
せっかくC言語でファイル、パイプ、標準IOがFILE*型としてで統合化・抽象化されていたのに、
C++でostreamとfstreamで分離される劣化が起きた。
333:デフォルトの名無しさん
21/01/30 18:30:25.89 PJvUkb6d.net
ios_baseで統一する形に変わっただけ
それをFILE*がどうたらと駄々こねるのは
頭が堅すぎる実年齢に無関係の老害だ
334:デフォルトの名無しさん
21/01/30 18:36:35.02 OHt9F1SU.net
パイプ処理をostream系で書く奇特な人ってどのくらいいるの?
335:デフォルトの名無しさん
21/01/30 18:41:09.24 OHt9F1SU.net
pythonは定数がないから全部大文字の変数は定数のようにみなしましょう的な談合がある。
336:デフォルトの名無しさん
21/01/30 19:00:34.72 0ahE8ZR3.net
定数というか型もない
337:
21/01/30 19:09:23.04 L1O2TNoD.net
>>322
束縛領域が狭いローカル変数とかには、_x を使ってもいいのではないか?と考えていますが‥‥
338:デフォルトの名無しさん
21/01/30 20:32:34.21 PJvUkb6d.net
data_
size_
339:デフォルトの名無しさん
21/01/31 03:18:57.87 6QCY/vGM.net
>>331
実は#defineマクロの中で使われるケースがあってね。
_xが、アプリの中で使われてない事を前提にしないとマクロが作れない
場合とか。
340:デフォルトの名無しさん
21/01/31 06:52:18.40 gXTMTlGe.net
HTTPサーバーのサンプルで、関数型言語がCを凌駕して、C実装の作者が??になってるやり取りをどこかで見たのですが、わかる方いらっしゃいませんか?
おそらくC++は簡単に勝てるはずなんですが。
341:デフォルトの名無しさん
21/01/31 07:27:56.74 fCVb5Gn/.net
dmrが?
342:デフォルトの名無しさん
21/01/31 09:14:46.77 bSEeGU13.net
>>333
c++実装者がユーザから参照可能な形でそれやってるの見たことあるの?
343:デフォルトの名無しさん
21/01/31 09:22:03.74 fCVb5Gn/.net
>>333
#define A(_x) (std::cout << #_x)
int main()
{
int _x = 5;
A(_x);
std::cout << _x;
}
何か問題でも?
344:デフォルトの名無しさん
21/01/31 10:19:42.43 BqL9JwJS.net
ひどいな
URLリンク(qiita.com)
345:デフォルトの名無しさん
21/01/31 10:23:16.43 BqL9JwJS.net
>>331
_で始めると激しくコンパイラ依存になる
346:デフォルトの名無しさん
21/01/31 10:50:22.50 BqL9JwJS.net
>>334
Erlang?
347:はちみつ餃子
21/01/31 10:57:57.30 +XHxoAeu.net
>>339
繰り返すが言語仕様上はグローバル変数ではない名前の頭がアンダースコアで始まるだけなら問題ない。
現実に出来が悪いコンパイラがたくさんあるのであれば仕方がないが、
少なくとも俺はそんなのに遭遇したことはない。
348:デフォルトの名無しさん
21/01/31 11:04:21.78 fCVb5Gn/.net
>>338
DLLのビルドに使ったコンパイラと
そのDLLを使うアプリをビルドするコンパイラが違っても動くんだぞ
ABIの指定は仕方ねえだろ
349:デフォルトの名無しさん
21/01/31 11:29:10.73 2WBeknRq.net
>>334
これか?
サーバーじゃなくてパーサー部分だけだけど
URLリンク(blog.8arrow.org)
350:デフォルトの名無しさん
21/01/31 12:10:02.04 gXTMTlGe.net
>>343
それです。
ありがとうございます。
351:デフォルトの名無しさん
21/01/31 13:12:26.22 ZnRwde8F.net
>>341
英語サイトでも、説明の仕方が誤解を招くようなものがありまして、もしかしたらそれは誤解かも知れません。
URLリンク(stackoverflow.com)
「Here's wh
352:at the C standard says (section 7.1.3): 1. All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use. 2. All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.」 訳: 1. アンダースコアで始まって直後に英大文字が続くか、または、アンダースコアが連続して 続く識別子は、いかなる使用も予約されている。 2. アンダースコアで始まる全ての識別子は、通常または、タグ名前空間における ファイルスコープの識別子として常に予約されている。 1. の方は、_XXX か、__xxx は予約されていると言うことですが、 2. の方は、_xxx の形式は、例え xxx の部分の先頭が小文字であっても、ファイルスコープにおける 識別子として予約されており、ローカル変数名としては使うべきではないということだと思われます。 また、C++の方では、 https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier *Reserved in any scope, including for use as implementation macros: 10. identifiers beginning with an underscore followed immediately by an uppercase letter 11. identifiers containing adjacent underscores (or "double underscore") *Reserved in the global namespace: 12. identifiers beginning with an underscore この12.の書き方が(あなたに)誤解を招いた気がします。 また、11.によれば、xxx__yyy のように _ が連続するものは、識別子の中間であっても予約されている とのことです。
353:デフォルトの名無しさん
21/01/31 13:18:09.37 ZnRwde8F.net
>>337
それは問題ではないんだけど、
#define a(x) { int _x = 1; _x = x * 2; printf("%d",_x);}
のようなマクロが有ったとすれば、
int y = 5;
a(y); // 10 と表示される。
と
int _x = 5;
a(_x); // 2 と表示される。
354:デフォルトの名無しさん
21/01/31 13:42:32.29 Rr91L/mp.net
int と自作クラス A の pair を priority_queue に入れようと思ったら pair<int, A> に対する less の定義(?)が要るって言われました
int だけに基づいてソートしてくれたら結構なんですが、最も簡単な書き方はどんなですか
また、自作クラス A は array を継承しているのですが、less の定義も引き継ぐ方法はないのでしょうか
355:デフォルトの名無しさん
21/01/31 14:05:10.94 WjHCKOmN.net
いろんな見解があってややこしいから、安全側に倒して「_で始まる名前は一切使うな」でいいと思ってる
コンパイラ実装するような奴以外はそれで困らんやろ
356:デフォルトの名無しさん
21/01/31 14:10:22.05 gXTMTlGe.net
【HOW】予約済みの席に座る方法【TO】
357:デフォルトの名無しさん
21/01/31 14:15:41.43 WjHCKOmN.net
>>347
using Aitem = std::pair<int, A>;
using Aqueue = std::priority_queue<Aitem>, std::vector<Aitem>, [](const Aitem& lhs, const Aitem& rhs){ return lhs.first < rhs.first; }>
Aqueue your_queue;
358:デフォルトの名無しさん
21/01/31 14:54:17.91 bSEeGU13.net
>>345
ファイルスコープとローカルスコープは違うよ。
あと、今議論中なのはアンダースコアひとつで始まるメンバ変数についてなんで、アンダースコアの連続がアウトなのは誰でも知ってるし、餃子も324で書いてる
359:デフォルトの名無しさん
21/01/31 15:06:11.72 gXTMTlGe.net
盛 り 上 が っ て ま い り ま し た ↑
360:デフォルトの名無しさん
21/01/31 15:07:16.87 gXTMTlGe.net
SRELLって知ってますか?
361:デフォルトの名無しさん
21/01/31 15:15:54.45 ZnRwde8F.net
>>351
undersocre で始まる識別子は、Cの仕様ではこうなっています:
「All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.」
「undersocre で始まる識別子はfile scopeでは使用してはいけない」
とは言っておらず。
「undersocre で始まる識別子はfile scopeの識別子として使用される
ことが予約されている」
と言っています。
with file scope
の前置詞がなぜ in ではなく with になっているかは私には分かりかねますが、
その直後にも in が使われているので in が二重に使われるのを避けたのかも
知れません。
362:デフォルトの名無しさん
21/01/31 15:18:08.68 gXTMTlGe.net
inを踏むとか言ってみたくなるじゃないか。
責任とれ。
363:デフォルトの名無しさん
21/01/31 15:18:17.21 ZnRwde8F.net
どうやら、
「identifiers with file scope」は、「ファイルスコープを持つ識別子」
であり、with は、「持つ」の意味で使われているようです、。
364:デフォルトの名無しさん
21/01/31 15:41:47.21 bSEeGU13.net
>>354
予約されてるとはつまり使うなってことだけど、いずれにせよファイルスコープの話であって、ローカル変数の話じゃないよ。
365:デフォルトの名無しさん
21/01/31 16:03:58.33 fCVb5Gn/.net
>>346
#define a(x) { int z = 1; z = x * 2; printf("%d",z);}
int y = 5; a(y);
int z = 5; a(z);
これと何が違うの?
下線で始まることとは無関係だろ
366:デフォルトの名無しさん
21/01/31 16:08:45.08 q0ry4PhJ.net
STLコンテナの継承ってしない方が良いんですかね?
たとえばarrayに機能を追加 ([i][j] で i 行 j 列の要素を取得する等) して行列クラスを作りたいとき、
・arrayを継承する
・行列クラス内で要素を格納するメンバを array として持つ
の2パターンが考えられますが、皆さん的にはどっちが好ましいですか?
行列 is an array なので今こそ継承の使いどころだと思ったのですがいかがでしょうか
367:デフォルトの名無しさん
21/01/31 16:16:47.40 WjHCKOmN.net
arrayは仮想デストラクタ持ってないからポリモは出来ない
データ構造使うだけなら必要ない
やめとけ
368:デフォルトの名無しさん
21/01/31 16:20:57.91 NgKJGEE4.net
かか関数型マクロなら不用意に定義されていても
int y = (a)(x)
という書き方おすれば問題無くマクロじゃない関数a()の方が呼ばれるので問題無い!
事前に
typedef double a;
とかされていた場合は知らんが、
369:デフォルトの名無しさん
21/01/31 16:21:36.60 2wqasnUt.net
好きにしたら?
C++なんて自己流全開で俺スゲーしてなんぼ、他人の顔色伺ってたらダメ
行列なんてプロダクションではどうせ出来合いのライブラリ使うんだし
370:デフォルトの名無しさん
21/01/31 16:22:25.80 q0ry4PhJ.net
>>360
じゃあメンバとして要素(array)を持てば良いってことですよね?
[]の定義の仕方はわかるのですが、[][]ってどうやって定義するんでしたっけ?
371:はちみつ餃子
21/01/31 16:27:00.30 +XHxoAeu.net
>>363
直接には出来ない。 (二引数を受け取れるようにしようという提案はある。)
operator[] を持つ別のクラス (のオブジェクト) を返すという形で実装する。
372:デフォルトの名無しさん
21/01/31 16:27:38.50 X7lGC0go.net
case by case だろうけど
Array と Matrix に関してなら
直観的に考えると後者かな
継承する意味が無い
373:デフォルトの名無しさん
21/01/31 16:30:29.11 X7lGC0go.net
[][][]だと3引数になるの?
[][][][]だと4引数になるの?
って疑問が出るので
operator[] を持つ自分自身のクラス (のオブジェクト)が正解だと思う
374:デフォルトの名無しさん
21/01/31 16:31:13.60 NgKJGEE4.net
std::array<std::vector<double> > x;
みたいな
375:デフォルトの名無しさん
21/01/31 16:32:01.22 NgKJGEE4.net
ジャグ配列になってしまう…orz
376:デフォルトの名無しさん
21/01/31 16:32:06.68 fCVb5Gn/.net
継承といえば
type_infoは仮想デストラクタ持ってるけど
派生クラス作ったやついる? 実験でなく
377:デフォルトの名無しさん
21/01/31 16:34:24.04 ZnRwde8F.net
>>358
命名規約に従って変数名をつけていれば、>>346のマクロはバグらない。
一方、>>358のマクロは、命名規約に従って合法的に定義されたローカル
変数zに対して使ってもバグる。
その違い。
378:はちみつ餃子
21/01/31 16:34:43.94 +XHxoAeu.net
>>366
operator{] にこだわらずに要素にアクセスするメンバ関数を用意するのでもそんなに困らない。
見栄えだけの問題。
まあ見栄えも大事なんだけど。
379:デフォルトの名無しさん
21/01/31 16:36:28.41 ZnRwde8F.net
>>357
そうではなく、_xxx は、グローバル変数で使うことが予約されているので、
ローカル変数では使ってはならない、と読み取れるように思う。
380:デフォルトの名無しさん
21/01/31 16:38:11.57 q0ry4PhJ.net
>>366
すみません。どう書いたら良いのか分かりません
[]は
int& operator [] (int i) {return elem[i];}
みたいな感じですよね?
381:デフォルトの名無しさん
21/01/31 16:43:15.04 fCVb5Gn/.net
>>370
そのためにinlineとconstexprが用意されてるわけだが
なぜマクロで作らなければならないんだ?
どこぞのOS屋がmaxなんてクソマクロ作ってたせいで
みんな迷惑してたよな
382:はちみつ餃子
21/01/31 16:45:04.61 +XHxoAeu.net
>>372
ファイルスコープで予約されている名前とローカル変数で名前がかぶっても
単にシャドウされるだけなので衝突しない。
ローカル変数名として使うべきでないという理由にならない。
383:デフォルトの名無しさん
21/01/31 16:51:19.01 ZnRwde8F.net
>>370
[補足]
マクロ引数が二重に評価されてしまうのを防ぐため、マクロ作者が
気を利かせたつもりで次のようなマクロを書いたとする:
#define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); }
作者の意図としては、
char *ptr1, *ptr2;
b(*ptr1++, *ptr2++);
のような場合にも正しく動作するようにしたいということで、
この場合は、*ptr1++, *ptr2++ は、それぞれ1回ずつ評価されるので、
ptr1, ptr2 は、それぞれ 1ずつ前に進むので、アプリ作者の意図を
組むことが出来る。
一方、使う側が命名規約に従わず、アプリのローカル変数で_x,_yを定義し、
int _x=1;
int _y=2;
b(_y,_x);
とすると、このマクロは誤動作し、
int x=1;
int y=2;
b(y,x);
と書いたときと結果が変わってくる。
384:デフォルトの名無しさん
21/01/31 16:55:15.98 wwbd/Qx2.net
こういうクソしょーもない話って馬鹿でも理解できるから盛り上がるよね
385:デフォルトの名無しさん
21/01/31 16:57:55.61 ZnRwde8F.net
>>375
まあ、そうなんだけども、多分、英語の意味をそのまま素直に汲み取れば、
単純に>>372の意味のはず。
またそれは>>376のような状況を防ぐことが出来る。
>>374
まあ実際それはそういうこともあることは有るが、マクロでしか書けないような
例もあるわけで、>>376のようなマクロ作者のせっかくの配慮が、命名規約
を破って書かれたアプリでは逆効果になってしまうことがある。
386:デフォルトの名無しさん
21/01/31 17:00:34.53 ZnRwde8F.net
[補足]
なお、Cの伝統だと、
#define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); }
ではなく、
#define b(x,y) do {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } while(0)
と書く。
こうしておくと、このマクロを{}ブロックを伴わないif文に書いたときに異常動作
をしない。