C++相談室 part159

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
2022/04/03(日) 23:53:21.86ID:dOp+WKyA
>>847
規格的に問題ないからだが、まあポインタなんでサイズ知らんでもええからだな
2022/04/04(月) 00:18:36.05ID:F+M9/rKi
>>847
std::vector<Hoge> hoges_; はクラスないしstructのサイズには影響しないからじゃないの?
そのクラスないしstructはstd::vector<Hoge> hoges_へのアドレスを保持するだけでしょ?
クラスないしstructの中でのhoges_のサイズはすでに決まっている
2022/04/04(月) 00:23:58.82ID:NuCanqg0
>>847
>>843に書いたが
struct Hoge {
 std::vector<Hoge> hoge_;
};
の実質は
struct Hoge {
 struct {
   (&(hoge_[0])を指すポインタ);
   (管理用のいくつかのメンバ)
 } hoge_;
};
とゆーことなのでstruct Hogeの中にhoge_[0..]の実体が埋め込まれるわけでは無いから、
hoge_[0..]の型が決まっていなくともstruct Hogeのサイズは問題無く決まるというしくみ

一方hoge_[0]の実体がstruct Hogeに埋め込まれる>>845のケースは気体どおりエラーになる
というワケ
2022/04/04(月) 09:09:53.47ID:14cK0a9Z
>>843
鎧袖一触の使い方間違いで草w
2022/04/04(月) 23:12:20.74ID:JNKuDAOB
4、5年c++やってるけどまともなものを作れない
どれくらいで、ネットで有名なソフトって作れるものなの?
例えばvscodeみたいな便利なアプリ
2022/04/04(月) 23:46:47.47ID:9GHqD2yn
>>852
VScodeはElectronつまりJavaScriptで書かれてるよね
2022/04/05(火) 00:26:55.67ID:btSnYNGS
>>852
C++Builderが楽だよ
2022/04/05(火) 01:43:21.89ID:QuV3GhxG
windowsは触ったことがない
2022/04/05(火) 02:00:35.56ID:QYslDBWm
ならばElectronかTauriがオススメ
WindowsだけでなくMacでもLinuxでも動くマルチプラットフォーム
2022/04/05(火) 06:11:04.09ID:PM3+0qST
>>852
言語だけ触ってても無理
自分は◯◯を作るんだという
一途な意思がいる

ネットでウケるかどうかは通常どうにもできない
もし市場の需要を読んで開拓ができるなら
もうそのままプロになれる
2022/04/05(火) 10:33:40.77ID:FcLzG6G8
>>852
まともって言うか一定規模以上のソフトを作ろうと思ったらオブジェクト指向デザインパターンを網羅していく事の方が大事
難しいハッキングをやるよりも設計の方がなんだかんだで難易度高いからな
2022/04/05(火) 17:09:26.03ID:PM3+0qST
「成功者」の法則をなぞるだけでは成果は出せない
そんなの誰でもできるから

形振り構うことより興味の向くまま突っ走るほうが肝心
そうして何かを成し遂げると自分なりの法則ができている

それまで周りは散々バカにしてくれるが
そんなのに折られないメンタルも大事だ
2022/04/05(火) 17:46:09.74ID:YcgsN5By
メモリマップドファイルのライブラリが標準入りするのってまだまだ先ですか??
標準ライブラリとするのに何か問題でもあるの?
2022/04/05(火) 19:10:03.35ID:Ssg9XCyk
<filesystem>ですら入ったの最近だしあんまり期待してない

socketとかのネットワークライブラリも標準にはないんだぜ?
2022/04/05(火) 19:53:34.34ID:AUzgrMft
>>852
個人でなんらかのソフトを作る場合には「動くプログラム」を意識するといいよ。
構想通りに設計しようとするよりは機能を極小に絞ってでも動く状態のプログラムを作ってみて、
それを拡張していくという形にすれば行き詰まったところが学ぶべきことが潜んでいるところだとわかる。

ある程度までいったら最初から作り直したくなるときがくる。
学びながら作ったものなんてろくでもないんだから作り直すはめになるもんなんだよ。
どうせ作り直すと割り切って色々やってみればいい。
2022/04/05(火) 20:56:02.32ID:6DtMUNMI
Googleの人もイテレーティブな開発が良いって言ってたなあ
864デフォルトの名無しさん
垢版 |
2022/04/05(火) 21:08:43.94ID:79YAP4SX
あーすべき、こーすべきと雁字搦めにPGを縛る硬直的で強迫的な教条主義が
投げやりなやっつけ仕事を大量生産するという教訓から色々な提案が出てるのに
教わったことにしがみつく後ろ向きな人が悪しき循環を継続させちまう
2022/04/05(火) 21:15:39.04ID:YcgsN5By
C++って他の言語と違って何でも出来るから情報収集に時間使いすぎるんだよな
プランAからZまであらゆる手法を検討して最善手を打たなければどこかで詰む事になる
2022/04/05(火) 21:15:57.95ID:rM7yNqDT
大昔の記憶だけどメモリマップというかネットワーク系のライブラリはC++に追加されないのかって聞いたときに
OS依存の仕様は実装されないって聞いた記憶あるけど最近のC++は方針変わったのか?
2022/04/05(火) 22:34:00.51ID:QFtrY3nt
C++とSTLは別だよ
2022/04/05(火) 22:39:47.79ID:vLZKRt0y
threadみたいにするならかまわんのだろ
869デフォルトの名無しさん
垢版 |
2022/04/05(火) 22:54:42.49ID:79YAP4SX
プロセスがサポートされないアレでか
2022/04/05(火) 23:18:25.53ID:AUzgrMft
スレッドは OS が提供するスレッドと一対一で対応することを意図しているという記述がある。

https://timsong-cpp.github.io/cppwp/n3337/thread.threads#1

スレッドを持たないシステムに対応付けるならスレッドの生成に常に失敗するような実装になってても仕様には反しないんじゃない?
noexcept は例外を送出しないことを保証するけど実行時エラーがないことを保証するわけではない。
871デフォルトの名無しさん
垢版 |
2022/04/05(火) 23:23:24.49ID:79YAP4SX
今さらDOSでC++11か
いや否定はできんけど・・・
2022/04/05(火) 23:31:23.00ID:EtikemGC
プロセスを持ち出す意味がわからん
スレッドがあればいいんじゃ?
873デフォルトの名無しさん
垢版 |
2022/04/05(火) 23:37:46.31ID:79YAP4SX
なんで?
アドレス空間の多重化とプロセス間通信はOSが違ったら移植性なしで割り切るの?
2022/04/05(火) 23:42:47.00ID:EtikemGC
それがないとスレッドも許されんという理屈がわからない
875デフォルトの名無しさん
垢版 |
2022/04/05(火) 23:52:53.92ID:79YAP4SX
スレッドも許されないなんて主張してないが
2022/04/06(水) 07:13:16.72ID:e/YNs2XJ
質問ですがイテレータ間の距離はstd::distance<T>(first, last)で求められるそうなんですが
求めた距離を再びイテレータに戻す場合はどうすれば良いですのん?firstとlastがラ
ンダムアクセスイテレータならfirst + std::distance(last, first) == lastが成立するという具合に
足せば良いけどランダムアクセスイテレータか否かによらず共通に使えるテンプレートは?
2022/04/06(水) 08:10:41.61ID:tJlAug24
>>876 std::next() https://cpprefjp.github.io/reference/iterator/next.html
2022/04/06(水) 08:51:32.67ID:hbDmvmaG
>>876
std::advance(イテレタ,求めた距離)
2022/04/06(水) 14:47:30.60ID:/VxyOfiN
technical default とかいう新技が出てきたね
2022/04/06(水) 18:03:31.71ID:OIlaSdNT
みなさん多次元配列ってどうやって持ってますか?
・blas, lapack等fortranの資源を使いたいからローメジャー、カラムメジャーは宣言時に決めたい
・添字アクセスがネイティブの多次元配列並みに早い
・STLコンテナみたいに使える
等の条件を満たす良いライブラリありますかね

本当はSTLに入ってほしいんですが、なぜ未だにないんですかね?
2022/04/06(水) 18:15:07.58ID:Iu/ahyl1
ネイティブの多次元配列とは
2022/04/06(水) 18:18:59.68ID:OIlaSdNT
>>881
ああすみません私めは言語障害者だから変な言葉使ってるかもしれません
Cの多次元配列のことを変な呼び方をしてしまいました
すみません
2022/04/06(水) 18:30:19.00ID:aY4pnG+o
eigen gmtlとか?
2022/04/06(水) 19:07:48.95ID:ofj8wLUE
1つめがよーわからんけど
・次元数はコンパイル時決定
・要素数もコンパイル時決定
・子要素のサイズは全て同じ(arr[0].size()==arr[1].size() が常に成り立つ)

ってことでええの?
それなら単純にstd::array<std::array<T, 4>,5>でいいとは思うが
2022/04/06(水) 19:36:43.45ID:vJ8PYFJ1
全部arrayだとスタックに配置される事あるからvector<array>でやってるな
2022/04/06(水) 21:17:51.29ID:tUlkAQY7
>>880
std::mdspanというのが提案中だがまだ時間かかりそう
2022/04/06(水) 23:18:21.83ID:NvxWnsbd
>>877 >>878
レスdクス
やっぱいろいろ一般化されたテンプレートがいっぱいあったら
テンプレートを特殊化せずに済む幅がひろがりんぐ、
2022/04/07(木) 03:17:05.89ID:yw7pyl+g
>>883
eigenは遅い
gmtlはメンテナンスされてない

>>884-885
一次元配列にマップしたときの並び方が柔軟であってほしいって書いてるでしょ
外部ライブラリ必須じゃないかな現状

>>886
mdspanは実体を持たなくてmdarrayは実態を持つんだっけ
C++23に入るって話じゃなかったっけ?
俺C++の新機能はそんなに熱心に追ってないけどこれだけは待望してる

>>880
ということで、現状はboostじゃないかな
これもメンテナンスされてないようだが、マシだと思う
良いライブラリがあったら俺も知りたい
2022/04/07(木) 03:34:21.33ID:zyrTrwHF
柔軟な多重配列なんて自分ですぐ作っておしまいな話なのに
なぜ標準にないとかライブラリがないと言い出したり将来の仕様に期待するとか意味不明
2022/04/07(木) 03:49:06.16ID:g2f/LEmv
numpyを使う。もちろん他にpython併用する理由があればだけど。
ローメジャーなのでメモリ上での向きは個別にやってる。
891デフォルトの名無しさん
垢版 |
2022/04/07(木) 05:59:06.00ID:kMhdBz2h
>>880
blas使いたいんならstd::sliceがモロそのものだよ
2022/04/07(木) 06:13:35.95ID:yw7pyl+g
>>889
やってから言えや
例えば、高速なランダムアクセスとか添字の組と要素番号の間の高速なマッピングとか、どう実装するつもりでいるの?
2022/04/07(木) 06:17:36.20ID:OOyqDhdW
あるクラスのコンストラクタがvector<int>をとるんだけど、たまにvector<size_t>を渡したいときがあるからオーバーロードするようにしたらambiguousだとエラーが出た

1) ambiguous にならない方法はありますか
2) vector<size_t>の各要素がintの範囲に収まるくらい小さいとき、これをvector<int>にキャストするナイスな書き方はありますか
894デフォルトの名無しさん
垢版 |
2022/04/07(木) 06:40:42.70ID:kMhdBz2h
ambigousにはならんようだが
https://ideone.com/YrFYsI
2022/04/07(木) 07:18:15.48ID:3YRGB6r4
>>892
自作すれば自分の使う方法に合わせてカスタマイズできるから圧倒的に有利
インデックシングも汎用だと毎回多段計算になるが自作なら用途に合わせて最適化できる
2022/04/07(木) 08:17:57.53ID:CaxjwvsJ
ファイルならまだしもオンメモリーで高速なランダムアクセスとか言語の範囲では工夫しようがなくね?
2022/04/07(木) 08:32:07.21ID:Ym/mh0iz
近傍のアクセスが速いというのは言語関係ないしな
2022/04/07(木) 10:27:53.88ID:2nzlX6cZ
そういえばSTLのコンテナに[]で範囲外アクセスしたとき、デバッグモードだとちゃんとアサート出してくれるけど
あれってSTL実装した人がそう書いたから出るの?それともOSの機能か何か?
2022/04/07(木) 10:32:39.68ID:2HgVVA+6
全てそう書いたから出るんだよ
OSはレイヤが違う話
2022/04/07(木) 10:39:14.99ID:2nzlX6cZ
へえ、じゃやっぱマクロ使ってガシガシ書いてるんだろうね
自分じゃ絶対やりたくないなw
2022/04/07(木) 17:34:09.66ID:mHsgrYEE
ifdefで括るだけだろ
902デフォルトの名無しさん
垢版 |
2022/04/07(木) 18:22:02.97ID:kMhdBz2h
>>898
ルール上、保証がないことでも
やってくれてることって、どこにでもあるだろ

operator[](size_t)で範囲外アクセスした場合の動作は未定義なので
どんな扱いをされても合法なんだよ

# 一時期流行った気持ち悪い喩えはもうしない
2022/04/07(木) 21:49:18.59ID:6+zrl0OG
SNSの気持ち悪いノリ持ち込むなよ
2022/04/08(金) 01:44:38.29ID:jwLlCRWe
>>900
お客様根性丸出しのプログラマとか・・・
2022/04/09(土) 13:06:11.18ID:NDf9sYGT
メモリが足らないから64ビットにするとかいうやつがいて
ソース見たら
double hoge[300][300][300];
って笑った
2022/04/09(土) 13:37:31.78ID:gSPSOhuN
64bit化だけじゃ無理でしょ
スタックサイズを512MBぐらいにしなきゃ
2022/04/09(土) 13:47:10.70ID:a9m8EYfT
ツッコミどころが違う…
32bitのままヒープに確保で十分だから
2022/04/09(土) 13:49:15.33ID:jXZanj6A
ヒープを使って良いのはアマチュアまでだからな
2022/04/09(土) 13:53:57.22ID:qQptZxW8
世の中マシン性能で解決おじさんみたいなのばっかり
2022/04/09(土) 14:20:15.81ID:erlZKZM8
>>907
それを言うなら32bitのままスタックサイズを増やすだけで充分だろ
ソース変更要らんし
2022/04/09(土) 15:54:11.32ID:LbeQCC1G
デフォルトでのスタックサイズ上限がだいぶん小さめ (数メガバイト程度) になってるのは
基本的にそれで足りる、 なるべくそれで足りるように書けという暗黙の圧力だと思う。
必要に応じて柔軟に対処すりゃいいけど、最初からあえて逆らうべきでもないだろ。

なんでもかんでもスタックを使ってるとデバッガで追いづらいし、
流れを制御するための変数と処理する対象になるデータ (大抵はある程度に大きい) は分けたい。
回路設計に喩えると制御線と動力線を分けるみたいな感じ。
(わかりにくい比喩ですまんがあくまで感覚なのでこういう形でしか表現できない。)
2022/04/09(土) 16:35:28.22ID:50hSXO1R
>>911
>回路設計に喩えると制御線と動力線を分けるみたいな感じ。

昔、試作基盤として、天地にべったり Vcc とアースを上辺と下辺に貼り付けて、間に島(ランド)をたくさん並べるっていうのを聞いたことがあります
どういう名称だったか忘れちゃいましたが…
2022/04/09(土) 16:45:04.63ID:erlZKZM8
おれおれコーディングルールを開陳されても困る
2022/04/09(土) 18:42:32.24ID:njPxFZn6
>>906
笑ったって書いてあんじゃん
また、笑った
2022/04/09(土) 19:24:26.54ID:mI1Pq9ZL
300が何の数字か知らんけど、それが変更や拡張で800くらいになったら溢れるんだから
64bitが必要って判断はなくはないでしょ
何の数字か知らんけど
2022/04/09(土) 19:56:02.24ID:NDf9sYGT
>>915
君は本物のバカだな
2022/04/09(土) 21:01:35.50ID:/RZJpXw8
規格にスタックって出てくる?
2022/04/09(土) 22:53:29.39ID:NDf9sYGT
出てくるわけねーじゃん
バカですか?
2022/04/09(土) 23:32:57.29ID:lfgNvR7s
std::threadで作ったスレッドのスタックサイズは1 MBで
変更はできないら
しい

今日日は仮想メモリがあるからなリ
ッチなマシンなら……
2022/04/10(日) 01:07:52.01ID:OW76vhVn
標準ライブラリなんて普通使わないだろ
汎用的にしすぎてて、いらない機能が多いからやたらと遅いし
2022/04/10(日) 01:48:34.97ID:vpYyJyBE
標準以外なにをつかうんだ
2022/04/10(日) 04:47:34.93ID:Fso6oKAR
_beginthreadex()
2022/04/10(日) 05:15:04.39ID:RmTwSS8K
pthread
924デフォルトの名無しさん
垢版 |
2022/04/10(日) 05:58:59.81ID:xcZwEbFY
<thread>で抽象化されていないOS特有の機能を使いたきゃAPI使うってだけ
2022/04/10(日) 11:29:27.51ID:lpHEMRFm
>>921
大抵は自社でフレームワーク構築してるよ
iostreamですら、includeしたプルリク蹴らられるし
2022/04/10(日) 11:37:41.44ID:vpYyJyBE
>>925
被せるだけじゃなくて自作すんの?
2022/04/10(日) 11:57:59.43ID:Np98oj9K
ちんちんシュッ!シュッ!シュッ!
2022/04/10(日) 13:14:21.25ID:wqaUV7TG
>>921
OSのAPI直で叩けってことやろ
例えばCreateThreadならスタックサイズ指定できるし
2022/04/10(日) 16:50:49.57ID:8UzTPUX4
>>925
うちもstringとかコンテナクラスは全部自作してる
昔はプラットフォームがUNIXもあったりして、環境によってはSTL使うと
コンパイルエラーになってたからな
2022/04/11(月) 06:43:40.41ID:x3kzaSAd
関数群をまとめたいときってクラスで切るべき? 名前空間で切るべき?
例えば sub1、 sub2 というサブルーチンがあって、これらが func1、func2 から呼ばれるときに、これらをまとめたいと思うんです
931デフォルトの名無しさん
垢版 |
2022/04/11(月) 06:51:36.36ID:r64ZejsB
べきという言い方はあまり好まんが

関数間で連携させるならクラス
連携しない単なるグループなら名前空間
というのが俺がよく使う手だ
2022/04/11(月) 06:54:00.91ID:sjzgKw67
> これらをまとめたいと思うんです
どうまとめたいんだよ…
2022/04/11(月) 12:12:27.70ID:sxIacEU4
mc++d読んだけど、これが20年前以上に書かれたってことがすごいな
今となっては、当たり前のことをばっかだけど
当時は革新的だったんじゃないかな
2022/04/11(月) 13:01:51.57ID:7nQKgh0L
>>930
特定の範囲でしか使わない関数があるという意味?
それだけの理由なら名前空間でもクラスでも分ける必要はない。
その翻訳単位で内部リンケージにしておけば十分だよ。

名前空間やクラスは外部に対してどう見せるかの問題なんだから
機能単位の中で階層を分ける必要はあんまりない。
2022/04/11(月) 15:33:36.87ID:gXppguDy
そういや翻訳単位の管理として新しくモジュールがc++20から導入されたけど、使い心地どうかしらん?
既存コードもモジュール化した方がいいくらい便利だったりするのかしらん?
2022/04/11(月) 16:44:48.15ID:bKclHLZw
>>930 >>934
staticおにいさん「class外、*.cppにstatic修飾して書く」
2022/04/11(月) 19:36:19.35ID:KtON6/oU
>>935
昨年末あたりにvisual studioで試したらどうやってもビルド通らなくて諦めたけど今もう使えるようになってるんかな
2022/04/12(火) 01:31:53.93ID:EgjH8LRN
実験した程度でしかないけど使えてたよ。
2022/04/12(火) 10:13:21.46ID:5vVn8Fqf
>>934
その翻訳単位がグローバル領域だったら? って意味でしょ
2022/04/12(火) 11:04:00.65ID:5njWaFr4
>>939
言いたいことがわからない。
2022/04/12(火) 16:43:20.82ID:qoqTD/fb
dfs とか bfs みたいな名前の関数はそれを呼ぶ関数とまとめたくなるよね分かる
関数内関数にすると他の関数から呼べなくなるしな

名前を変えよってのはナシなw
2022/04/12(火) 17:25:13.49ID:nzV1CUkS
モジュール……
943デフォルトの名無しさん
垢版 |
2022/04/12(火) 17:51:32.45ID:RKLCiqJK
アホな質問かもしれないのですが……
今までユニークポインタで実体領域確保していたクラスを、どうせ一つしかnewしないからと、クラス内部に自身型の静的変数を保持して使用する方法へと変更しました。
所謂シングルトンに似た感じのものだと思うのですが。

std::unique-ptr<Hoge>Temp=std::make-unique<Hoge>();

static Hoge& GetInstance(){static Hoge temp;return temp;}

使用する分には問題ないのですが、実体化させたいクラス数が多く、結果的には静的変数のガズが増え、実体がグローバルに多数存在する状態になってしまっていると思います。
この場合、名前衝突以外に何か想定される不具合はありますか?
データを保持させるクラス以外は全てこれに置き換えようと思っているのですが、今までnewして使っていたため何か罠があると思えてなりません。
この方法はクラス名から実態を呼び出せて私に大変便利です。
2022/04/12(火) 18:22:24.95ID:fdFUG1QI
>>943
ないです
2022/04/12(火) 18:27:41.73ID:Dt0TGPDO
>>943
マルチスレッドじゃないよな
946デフォルトの名無しさん
垢版 |
2022/04/12(火) 18:29:33.15ID:RKLCiqJK
>>944
ありがとうございます!
>>945
違います!

無さそうで安心でした
2022/04/12(火) 18:39:03.10ID:FTlcB8DO
クラス外側でtemplate実装にしろよとは思うが

template<class T>
inline T Instance;

int main(){
Instance<Hoge>.Execute();
}
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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