C++相談室 part153

■ このスレッドは過去ログ倉庫に格納されています
2020/10/10(土) 23:18:20.00ID:i4F+i14Y
https://mevius.5ch.net/test/read.cgi/tech/1589424805/
※前スレ
C++相談室 part152
https://mevius.5ch.net/test/read.cgi/tech/1594528940/

テンプレおしまい
2020/11/06(金) 16:04:48.24ID:cCU0l/b0
コンストラクタの引数と初期化リスト上のメンバー変数が同じ名前でも、ビルドが通って意図どおりに動いちゃうのだけど、これって仕様通りの動作?

こんなん
: apple(apple)
2020/11/06(金) 16:58:12.08ID:O5a96eYY
>>478
仕様通り。 問題ないし、むしろ名前を一致させるスタイルを好む人もいる。
2020/11/07(土) 17:39:09.77ID:gsFmAuV5
Foo::Foo(const Fruit& apple)
: apple(apple),
 banana(apple),
 orange(this.apple) // できない
{

}
が問題無いのか左様か、

いや待てFoo::appleが実はFruitクラスでなくてFruit2クラスで、
orangeにFruit2クラスを受け取るコンストラクタしか持たずかつconstメンバだったらどうすんじゃ…
2020/11/07(土) 17:53:59.86ID:gsFmAuV5
Foo::apple、Foo::banana、Foo::orangeではなくて
Foo::m_apple、Foo::m_banana、Foo::m_orangeとしておけば悩む必要は無い
ヘッダファイルでもこの順で宣言したとして、

Foo::Foo(const Fruit& apple)
: m_apple(apple),
 m_banana(apple),
 m_orange(m_apple) // できる
{

}
でおk
2020/11/07(土) 17:56:49.27ID:24XfCTPm
>>480
普通に出来るやで。 this->apple の間違いじゃろ。

メンバの初期化順は (初期化リストの順序と関係なく) クラス定義内でデータメンバを書いた順序なので気を付けてな。
483デフォルトの名無しさん
垢版 |
2020/11/07(土) 17:57:34.44ID:CPm1qeuk
this
javascriptのやりすぎで脳が壊れたか
2020/11/07(土) 18:00:03.51ID:24XfCTPm
>>481
名前を同じにしてもうたらまずいケースがあるやないけということを >>480 は言ってるので、
名前変えればいいよってのは的外れ。
2020/11/07(土) 18:13:54.67ID:gsFmAuV5
>orange(this->apple)
ホンマやΣ(゚д゚;)!いけたわ、
警告をいつもエラー扱いにしているからてっきりエラーかとオモテタ、(言い訳
2020/11/07(土) 18:30:43.14ID:2NiwF/8v
みなさまthx
classのときはメンバ変数に何らかのprefixなりsuffixなり付けてるから名前が被ることはなかったのだけど、構造体は何も付けないことが多くて、あれ、これってOKなんだっけ、って今更ながら気になってしまいました。
メンバ定義順に初期化ってのも知らんかった…
2020/11/07(土) 20:28:30.69ID:CTlV0YTN
>>485
いや、エラーだろ
2020/11/07(土) 22:09:33.18ID:gsFmAuV5
warning C4355: 'this' : ベース メンバー初期化子リストで使用されました。
やもーん
489デフォルトの名無しさん
垢版 |
2020/11/07(土) 22:24:32.33ID:CdQvP3Xl
みんなC++でなにしてるの
490デフォルトの名無しさん
垢版 |
2020/11/07(土) 22:24:57.26ID:9rEAH6th
polymorphic_allocator対応ですね。
2020/11/07(土) 22:55:56.65ID:8rmSPqJO
>>489
c++仕様のお勉強。マウントかますためだけにお勉強。
2020/11/07(土) 23:11:57.20ID:yroa9NTK
ジョークに聞こえるがまじでそういうやつがいるからな
2020/11/07(土) 23:39:31.38ID:24XfCTPm
>>485
念のため規格の当該箇所を探してみたら this についてわざわざ脚注で書いてあったわ。
https://timsong-cpp.github.io/cppwp/n3337/class.base.init#12
初期化順序はくれぐれも気を付けんとあかんけど、this が駄目ということはないのは間違いない。
494デフォルトの名無しさん
垢版 |
2020/11/07(土) 23:42:39.92ID:9rEAH6th
おせーな。
5分で探して来い。
2020/11/14(土) 18:09:43.36ID:FszncLid
VC++って今でも最先端のシステムでも使われていますか?
2020/11/14(土) 18:57:11.05ID:ovQs8svh
>>495
うちの会社では 2008年くらいからは C++ ではアプリは作っていなくて、もうすっかり C# に移行してしまっているようです…
いや、私は施設管理をやっているので、会社の深いところはさっぱりわからないんですけど
2020/11/14(土) 18:58:45.49ID:ovQs8svh
mfc42.dll
の内部バージョン違いに、ほとほと懲りたらしいです……
2020/11/14(土) 19:03:42.05ID:liKT9ZZB
あれはひどかったな
2020/11/14(土) 19:21:56.26ID:IHUe5vhA
>あれはひどかったな
ちょっなんで??
DLLにstd::vector<T>やstd::string<T>とか渡そうとした???
2020/11/14(土) 19:23:33.64ID:liKT9ZZB
仕様が違うものを同じファイル名にするなって話
ISO/IEC14882のライブラリは全く無関係
2020/11/14(土) 19:25:17.74ID:IHUe5vhA
手製DLLへのデータ渡しににはchar[]とか基本型onlyとして
CRTをスタティックリンクしたらランタイムのインストールすら不要
で完全解決…!

全要素手製でコントロールできればの話ではある
2020/11/14(土) 19:37:00.66ID:liKT9ZZB
なんか話になってないな
つまらんからやめる
2020/11/14(土) 19:41:20.95ID:wQlu6eHI
std::string<T>て
2020/11/14(土) 19:56:02.78ID:IHUe5vhA
CRTではなくてこの場合MFCをスタティックリンクしたらやったスマンコ、
2020/11/15(日) 12:36:52.05ID:YXN+C+qx
>>496
ありがとうございます
2020/11/15(日) 12:45:20.15ID:z250o8Kw
VC++ってことはプラットフォームはWindows固定か
Windows前提ならC++使い続ける理由は特にないね
507デフォルトの名無しさん
垢版 |
2020/11/15(日) 14:27:41.73ID:1NoBqfO6
MFCなんか使うからだろ
自己責任
508デフォルトの名無しさん
垢版 |
2020/11/15(日) 15:39:12.99ID:ZF6xjL9s
webサイトぐらいしか作った事無いド素人なのですが
cheatengineのようなツールはどうやって作るのですか?
509デフォルトの名無しさん
垢版 |
2020/11/15(日) 16:01:31.41ID:fUqPXTtq
ツールはReactかVueですね。
510デフォルトの名無しさん
垢版 |
2020/11/15(日) 16:32:14.80ID:U+/Dwi3J
マルチ禁止
2020/11/15(日) 21:02:27.25ID:XnBy/n8J
>>510
そのマルチポスト禁止っていうのは fj の時代ならまだしも、2ch に当てはまるのですか?
マルチポストとクロスポストの違いはなんですか?
2020/11/15(日) 21:29:20.86ID:UQYtdYHl
自分の頭で考えることを放棄したマニュアル人間
2020/11/15(日) 21:57:12.59ID:9LlY7wvz
いまは2chは無いんだよおっさん
2020/11/15(日) 22:32:36.77ID:UQYtdYHl
くだらねえ突っ込みだな
それで誰かはっとする奴がいるとでも思っているなら
どうしようもねえバカ野郎だ
2020/11/15(日) 23:02:36.34ID:QB7zB470
なんにせよスレチなんで
2020/11/15(日) 23:22:10.25ID:AQ/HY5jp
>>511
せっかくちょい調べて回答したのに他スレで一時間前に回答が出てたらイラッとするのは当然だろ
2020/11/15(日) 23:35:29.19ID:XnBy/n8J
>>516
確かにその感情は理解できます
2020/11/16(月) 00:15:05.39ID:tkpwZn9D
>>508
windowsだけで動けば満足ならメモリ読み書き関連はwinapi
デバッガ、逆アセ関連は pythonによるバイナリ解析技法 とかそれに似たような本読めば少しは載っていると思います。
2020/11/16(月) 04:42:45.86ID:tkpwZn9D
スレを全く読まないで反射で答えてしまいました。
今気付きました、すみませんでした。
2020/11/16(月) 06:44:11.49ID:OL16ghBV
>>516
心が狭い、というかてめーの都合だろそれ
勝手にイラついてろよ、こっちにゃ関係ねえわ
2020/11/16(月) 07:50:58.47ID:u3jXok4q
>>520
マルチするのはお前の都合だろ。人の時間を無駄に使わすな
2020/11/16(月) 07:59:26.89ID:OL16ghBV
互いにてめーの都合だからな
知らん馬の骨に命令すんな
何様のつもりだ
2020/11/16(月) 08:01:26.23ID:QRq3yxwv
時間を無駄に使うって>>516みたいな話?
他で解決済みだったら無駄になるって意味がよくわからん。回答したらちゃんと感謝してほしいとか?
2020/11/16(月) 08:05:45.08ID:OL16ghBV
ここは技術板なのに
クロスポストできるシステムを作ろうともしない
フリーライダーが吠えてるだけだ
2020/11/16(月) 08:26:08.12ID:GdRLcc7O
bool GoToHell(bool gotoTravel, bool gotoEat)
{
return (gotoTravel || gotoEat);
}
2020/11/16(月) 09:04:54.68ID:T8j9su4c
>>522
お前は自分のことを馬の骨だと思ってんのか。自覚はあるんだなw
2020/11/16(月) 10:24:06.29ID:OL16ghBV
>>526
だからどうした?
ぐうの音も出なくてそんなくだらんことぬかしたか?
2020/11/16(月) 11:03:12.40ID:2ijHHLJY
ぐう😪
2020/11/16(月) 11:23:44.07ID:hTDmnJOp
腹ペコかよ
2020/11/16(月) 11:36:22.45ID:OL16ghBV
勝負あったな
これからもマルチであろうが何であろうが
どこにどんな投稿をしようが口出しは無用だ
収穫ゼロでご苦労だったな
531デフォルトの名無しさん
垢版 |
2020/11/16(月) 12:57:31.91ID:sF1WJXNT
仮に百歩万歩譲ってクロスポストの機能が無いからマルチを許すとしても
マルチ投稿にはオリジナルのスレとレス番へのリンクの同時投稿を義務付けるべき
2020/11/16(月) 13:00:20.03ID:OL16ghBV
義務違反したらどうなるんだ?
実効性のない俺ルールを勝手に吠えてろセンズリこき野郎
2020/11/16(月) 13:07:05.30ID:BvdXplQc
義務ではないよ
答えの付かない質問だけが残ってるのって寂しくない?
質問に答えが付かないって認識が定着しちゃうとコミュニティの衰弱にも繋がる
悲しいね
2020/11/16(月) 15:15:24.81ID:OL16ghBV
どう書けば回答が付きやすいかなんて
みんなそれぞれ考えてることだ

俺様が考えたベストな方法なんて誰も興味ねえんだよ
コミュニティの衰弱に繋がるキリッだっておバンバン

俺様が自分の頭で考えてるのはまだマシなほうで、
fj時代で頭の更新が止まったままの化石か
古代遺跡から発掘した碑文に洗脳されたバ…若者か知らんが
おおかたそういう手合いのマニュアル人間だろどーせ
2020/11/16(月) 16:33:15.96ID:MWCEXPaa
誰か教えてほしい。データベースの基本中の基本だと思うけどよくわからんです
数万の部品の名前があるとして簡単にa,b,c,d,eとする
すでに、c,b,a,eと登録されているところに新たにdを登録するとき、順番も大事で、
d,c,b,a,eとなります
ここで、cを削除したいとき、この順番だけで並んでいると数万のデータをひとつずつ一致確認していかなくてはいけないので
めちゃくちゃ時間がかかる。よってソートして順番もひもづけした
a4,b3,c2,d1,e5というのを作っておいて、cを削除するときはここから2分探索でcは2番目というのがわかるのでd,c,b,a,eの2番目のcを
削除するのと同時に、a4,b3,c2,d1,e5のc2も削除するとこちらはa4,b3,d1,e5となってしまう。でもこちらで欲しいのは
a3,b2,d1,e4で、つまり、2以上の数字は全部マイナス1して回らないといけなくなって、ここにまた時間もかかってしまう
これは新しいデータを登録するときも同じ原理でプラス1しないといけないです
もっとスマートないい方法はないでしょか
2020/11/16(月) 17:09:54.39ID:OL16ghBV
a4,b3,c2,d1,e5
↓わざわざこんなことしなくていいと思う
a3,b2,d1,e4

a4,b3,c0,d1,e5 さらには
43015 でいいじゃないか
2020/11/16(月) 17:40:46.63ID:hTDmnJOp
データベースは空き時間にデータをソートするからな
登録したてのデータはライトバックデフォだろ
で、参照数の多いデータを頭に持ってくる
木というかハッシュを何個かに分けて参照数の差で管理すればやり易い
2020/11/16(月) 18:17:01.54ID:uQizIpoB
そもそも既製RDBを使う話?それともデータベース的なものを自分で作る話?
そこハッキリしないと平行線だぞ
2020/11/16(月) 18:43:02.87ID:MWCEXPaa
>>536
では、
d,NULL,b,a,e
a4,b3,c0,d1,e5
としたあとに、新しいデータda(dとeの間)が来たとき、順番は
da,d,NULL,b,a,e
となりますが、ソートの方は
a4,b3,c0,d1,da??,e5
はどうなりますか?逆順にすればいいという話もありますがもっと本質的にいい方法はないかと
>>538
自分でプログラミングする話です
C++なので、アドレス参照の*x や**x みたいのを上手に使って出来ないかなあって
2020/11/16(月) 19:00:52.03ID:uQizIpoB
単に順序の管理用と名前検索用の赤黒木かなんかを作っとけばいいだけの話じゃないの?
違うの?
2020/11/16(月) 19:00:58.93ID:Jgt25IWR
例えば
map<id,parts> master; // パーツマスター
list<id> seq; // パーツの並び
map<id, list<id>::iterator> lookup// 各パーツのseq中の位置の参照テーブル
ってしておいて、seqに突っ込んだ要素はlookupに参照用の登録をする。
2020/11/16(月) 19:32:53.88ID:Z6yFFWiy
>>540
そう言うことやね
そもそも配列で要素削除したら詰める処理にめっちゃ時間かかるし
2020/11/16(月) 19:36:29.66ID:oSwqK6E+
>>535
「間に入れる」という操作が少ないのなら、ソート用のシリアル番号を項目に用意する。
頻繁に挿入操作するとしてもシリアル番号を有理数化して調整すればいい。
2020/11/16(月) 20:21:10.58ID:K6OrqUDY
>>537
RDBS はデフォではソートなんかしないし、ソートされたデータが欲しかったら INSERT/UPDATE/DELETE 時にすでにインデックスを張っておくように、あらかじめわざわざ指定するものだと思いますが
空き時間にバックグラウンドでソートする DB なんて聞いた事がないですね
よろしかったら、そういう DBS が何か教えていただけませんか?
2020/11/16(月) 20:33:56.43ID:hTDmnJOp
ソートじやねぇ
デフラグだ
2020/11/16(月) 21:12:03.78ID:BvdXplQc
>>544
ソートという言い方はちょっとおかしいけどそれに近いことをRDBはしてるよ
インデックスが探索しやすいようにディスク上でも物理的に並べ替えて配置される
クラスタ化インデックスならレコード自体が並べ替えられると言えるね

といっても隙間なくギッチリ詰めて並べ替えてしまうと中間挿入が発生するたびにソートが必要になってしまうので
通常はある程度の余白を持たせて中間挿入や削除に耐えられる
ように配置される
これを充填率やフィルファクターという
そして定期的にインデックスを再構成・再構築することで充填率が高くなり過ぎないようにする
これはバックグラウンドで行われるよ
2020/11/16(月) 21:16:37.23ID:K6OrqUDY
>>546
コメントありがとうございます!
でも「インデックスを再配置する」タイミングは、やっぱり update/insert/delete のタイミングなんじゃないでしょうか?
2020/11/16(月) 21:25:44.06ID:BvdXplQc
充填率100%ならトランザクション中にリアルタイムで再配置するしかないけど
充填率100%未満ならその場でインデックスを再構築したりはしない
最近のRDBは行バージョンに対応してるからトランザクションログさえ書ければガンガンいくよ
実データファイルの書き換えは後回しにしても整合性保てるので
2020/11/16(月) 21:33:03.21ID:hTDmnJOp
だからそれがライトバックだろバカもんが
2020/11/16(月) 21:34:06.52ID:OL16ghBV
>>539
フルスペルからエントリ番号を引ける辞書か数学関数があればいいだろ
2020/11/16(月) 22:10:00.49ID:2ijHHLJY
エネルギー充填率120%!!
2020/11/17(火) 00:16:25.08ID:UNFUL2Kr
主キーでB-treeを構成する
PostgreSQLは明示的にバキュームする(B-treeの調整だけではないが

ところでB-treeってなんですか(・∀・)?
2020/11/17(火) 12:40:30.03ID:PuHDpULa
二分木、binary tree

b-tree, b+tree とか色々な種類がある。
データベースは、b+treeが多い
2020/11/17(火) 12:52:49.72ID:lifPo1s+
B木 (B-tree) は二分とは限らないよ。
ところでこのBはバランスのBかと思ってたんだけど
考案者とか関連会社の頭文字という説もあるみたいだね。
555デフォルトの名無しさん
垢版 |
2020/11/17(火) 13:16:51.60ID:XfP96roT
BinaryかBalanceかどっち?
2020/11/17(火) 13:40:13.56ID:LFLSoNm5
binaryじゃ二分になっちまうから違うな
2020/11/17(火) 13:40:16.49ID:KFJ2cj0W
発祥はわからんけど今となってはBalanced/Balancing Treeだろうな
日本語訳も平衡木だしね
558デフォルトの名無しさん
垢版 |
2020/11/17(火) 17:31:51.25ID:gGBQNTu8
定期的に最小完全ハッシュ関数を求めて置き換える。
2020/11/17(火) 19:20:00.69ID:Tiv5/dm/
B-Treeが平衡木に分類されることはあってもイコールじゃない。
平衡木というと代表的なのはAVL-Treeとかじゃね。

B-Treeの語源というと俺は broad を推したいが。
Bayer and McCreight never explained what, if anything, the B stands for: Boeing, balanced, broad, bushy, and Bayer have been suggested.
2020/11/17(火) 21:21:24.35ID:LFLSoNm5
完全ハッシュって、衝突が起こりえないってこと?
ハッシュの使い方の基本がわかってねえやつが考えることの典型だが
2020/11/17(火) 23:48:10.65ID:UNFUL2Kr
PostgreSQLのハッシュは衝突したら線形リストに収める的なやつだったはず…
562デフォルトの名無しさん
垢版 |
2020/11/18(水) 10:04:24.66ID:fvU2iODC
完全ハッシュ関数は簡単に作れる。

auto hash(auto a) { return a; }

最小であることが重要。
563デフォルトの名無しさん
垢版 |
2020/11/18(水) 10:11:34.00ID:fvU2iODC
constexprでコンパイル時に最小ハッシュ関数が静的に解決される。

これぞ神言語。
2020/11/18(水) 10:11:37.19ID:hkPPdx4I
まあIdentityも定義には嵌まるかな
2020/11/18(水) 10:57:38.49ID:+eOywhWF
>>562
ぷw
2020/11/18(水) 13:28:57.32ID:oGkGNlvA
確か、ハッシュが衝突した所を、h-tree に納めるものもあったような

Ruby のハッシュでは、データ数と共に、バケット数を増やしていく。
バケット数は、2 の累乗の次に現れる素数。
2^n + a, 2 <= n <= 30

8 + 3 = 11
16 + 3 = 19
32 + 5 = 37
64 + 3 = 67
128 + 3 = 131
256 + 27 = 283
512 + 9 = 521

データ数が、バケット数の5倍を超えると、ハッシュが再構成される。
再構成時には、極端に遅くなる

例えば、11 * 5 = 55 だから、データ数が56 個になると、バケット数が19 になる。
19 * 5 = 95 だから、データ数が96 個になると、バケット数が37 になる
567デフォルトの名無しさん
垢版 |
2020/11/18(水) 16:06:44.89ID:fvU2iODC
C++も結構風呂敷広げる系言語だけど、Haskellには負けてしまうなあ。
2020/11/18(水) 20:57:21.43ID:v8HWKopj
ハッシュ関数とハッシュテーブルの話がごっちゃになってる
2020/11/18(水) 21:45:14.61ID:m5UtHFcK
わてほんまによー言わんわ♪
570デフォルトの名無しさん
垢版 |
2020/11/18(水) 21:47:58.74ID:fvU2iODC
上げ。
571デフォルトの名無しさん
垢版 |
2020/11/18(水) 21:51:25.76ID:fvU2iODC
完全最小ハッシュ関数は、Nginxで使われてたんじゃなかったかな。
前に調査した時見たと思うわ。
2020/11/20(金) 16:43:55.07ID:WhXHGWda
Windows環境のVC++2010でマクロプログラムを作ってます。
CapsLock状態をプログラム上から直接変更する手段はありますか?
最悪仮想キーコードでシフト押下、Caps押下、離す、離すの4手で実現はできるのかなとは思いますが
2020/11/20(金) 16:49:03.01ID:JmNduuKf
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setkeyboardstate
2020/11/20(金) 17:05:17.17ID:KM6YfWXc
>>572
できなかったと思う
できたとしてもやるべきではない
CapsLock状態かどうかを調べることはできる
プログラムでAを入力するときCapsLock状態ならaを送る
CapsLock状態でないならShift+aを送る
なんてことをやったことある
575デフォルトの名無しさん
垢版 |
2020/11/20(金) 17:48:13.50ID:2Xtms9kk
質問するときくらい、あげていきましょうや。
2020/11/20(金) 18:07:40.81ID:QATBBV0x
専用ブラウザでお気に入りスレを巡回するし、
スレ一覧を見るときもタイトルで検索かけるから
上がってるか下がってるかなんて見てないな。
見てる人ってそんなにいる?
577デフォルトの名無しさん
垢版 |
2020/11/20(金) 18:39:27.79ID:2Xtms9kk
専ブラってなんすか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況