C++相談室 part159

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
2022/03/30(水) 08:22:59.56ID:WX1Rp50C
>>796
本当だ逆だった…お恥ずかしい
2022/03/30(水) 12:47:10.06ID:mFVNBRSc
しばらくpythonとか触ってたけど今更C++の隠蔽設計とかバカらしく思えてきた
799776
垢版 |
2022/03/30(水) 17:13:54.11ID:+a7BCMWw
>>782
ありがとう
2022/03/30(水) 19:26:05.50ID:xRfGRGrW
オープンな性格なのです
2022/03/30(水) 23:38:58.59ID:rveKwnBH
>>767
河野@琉球大学?(記憶モード
2022/03/30(水) 23:47:02.15ID:rveKwnBH
しばらくgoとか触ってたけど今更C++のクラスベースのオブジェクト指向とかバカらしく思えてきた
2022/03/30(水) 23:49:39.17ID:rveKwnBH
ていうかプログラミング言語とか人間の愚かさに対する対策なので
特にシンタックスシュガー的な言語要素は突き詰めれば突き詰めるほど頭おかしい言語になっていくのは必定
2022/03/30(水) 23:52:55.50ID:eQfKD0DM
>>802
GoもRustもclassなんてなくてstructしかないが困らないもんな
2022/03/31(木) 01:51:31.09ID:nXMYhSR8
>>802,804
チンチャそれな!
2022/03/31(木) 02:10:02.10ID:lTtwcp13
C++とオブジェクト指向を関連付けて考えるからおかしくなる
C++の内包する多様なパラダイムの中にオブジェクト指向が含まれてるだけ
C++の良いところは何でもありなところ
2022/03/31(木) 02:53:58.08ID:lTtwcp13
C++のclassもオブジェクト指向のための文法として捉えるべきではない
2022/03/31(木) 03:00:57.77ID:3NXOGCnE
C++のclassにpolymorphicというキーワードがあればclassとして理解しやすかっただろうに

C++自体が古いから仕方ない面もあるのだが
2022/03/31(木) 05:37:45.41ID:ZLovgCJ7
>>804
C++ も struct だけでもたいして困らんけどな
2022/03/31(木) 06:50:05.99ID:yEOSoCRj
SmalltalkやEiffielみたいにOOPとしての完璧さを目指した言語ではないからなC++は
PascalへのアンチテーゼがCであったように、完璧さを目指すことへのアンチテーゼでもある
そこを批判するやつとは根本的に相容れない
2022/03/31(木) 06:54:16.14ID:ivAOVlIc
CからC++へ行かずに
CからGoとRustへ行けば十分に問題ない
2022/03/31(木) 08:09:28.04ID:il5bYK9P
>>811
>>787
2022/03/31(木) 17:34:12.61ID:4cSTCvUa
>>767
言い回しがそいつのtwitterに出てくる感じと同じすぎる
ワイ大学生なんだけどその人20年以上前からそんな口調なのか
2022/03/31(木) 17:45:20.70ID:R4GrqV7T
河野氏になんか恨みあんの?
俺知り合いだから代わりに言っとくよ
2022/03/31(木) 19:53:32.15ID:mHRscCZz
if (xmm0 == xmm1)って下のやり方しかない?
_mm_movemask_epi8(_mm_cmpeq_epi...) == 0xFFFF
2022/03/31(木) 21:25:00.23ID:SxSNo1AU
>>814
嫌な知り合いすぎる
無自覚?
2022/04/01(金) 01:39:47.02ID:/eP2awHk
PTESTがあるぞ
2022/04/01(金) 20:07:44.20ID:kF+DLIFz
>>817
_mm_testc_si1281命令でできるのか
サンクス
2022/04/02(土) 03:00:41.15ID:JI80ciY+
ハンガリアン記法、いまだ健在なり
820デフォルトの名無しさん
垢版 |
2022/04/02(土) 05:57:08.65ID:iaVgC0+D
プログラムほぼ未経験だけどこれから始めます
今は坊主頭の人の本を読み始めたところです
IDEのCLionを考えています
他におすすめあったら教えてください
2022/04/02(土) 08:28:40.83ID:KzPuamrt
Visual studioオススメ。VSCode+CMakeでもいいぞ
2022/04/02(土) 12:16:55.77ID:roqf8g4r
bitsetで実装し終わった後にvector<bool>がconstexpr対応してる事知ったんだが?
はー先に教えてくれよ(クソデカため息)
2022/04/02(土) 12:49:25.68ID:/j0/DBCU
vector<bool>なんか使っちゃいけません
2022/04/02(土) 14:22:05.97ID:YBLKDYh3
bitsetを実現するのならvector<bool>は妥当
だと思う派
2022/04/02(土) 14:30:40.42ID:YBLKDYh3
しかしvectorKbool>様のブツ(一般に数千ビットとかのデカくて比較的疎なやつ)がconstexpr対応している
と特段のありがたみと
かあるん??
2022/04/02(土) 14:35:10.49ID:X+p83iug
二進法で書いちまった方が…
2022/04/02(土) 14:36:56.48ID:T5fexWVc
vector<bool> 駄目って言ってる奴らって思考停止のバカでしょ

「特殊化されてるのである時は注意が必要」というのを理解できず思考停止でとりあえず禁止と見なしてるバカ
2022/04/02(土) 14:38:37.01ID:YBLKDYh3
これか
https://cpprefjp.github.io/lang/cpp20/more_constexpr_containers.html
やっぱ内部でループのみならず、new / deleteするような関数までconstexprであってほしいと願うマニアが一定数居るんやな……
2022/04/02(土) 14:40:50.98ID:CNYN+CEs
キューとかスタック的な使い方なら自然だと思うね
2022/04/02(土) 14:44:28.98ID:p6D1htC0
一度作ってみたけどconstexpr関数内でnewしたらその関数内でdeleteまでしなきゃいけないのは使いづらい気がする
2022/04/02(土) 14:53:16.59ID:ARI85DWJ
まずはvector<bool>で実装してみて問題あるなら考える派
2022/04/02(土) 14:53:28.58ID:YBLKDYh3
だがちょっとまって欲しい毎秒1億も2億も回るようなループの中でこそ高速化が必須だが
そんなループ内でnew /deleteしようとする発想が最初からなんかおかしいのではないか
2022/04/03(日) 18:44:27.58ID:NmP3n2Yz
struct Hoge
{
std::vector<Hoge> hoges_;
};

ってなんでコンパイル通るの?
hoges_の定義時点ではまだ、Hogeの定義は完了していないのに。
2022/04/03(日) 19:05:25.24ID:Yvr+7/y4
struct Hoge {
 Hoge* ptr;
};
が通るのと同じ理屈なんじゃない?
2022/04/03(日) 19:25:23.89ID:7tOdFV5I
ソースコード次第やな
allocatorでサイズ使いそうなもんだけど
2022/04/03(日) 19:33:06.66ID:5C/3HoVM
宣言の時点では別に適当
2022/04/03(日) 19:35:01.81ID:BfkCmsi5
宣言?
どこにも宣言のみの記述はありませんけど?
2022/04/03(日) 19:48:52.09ID:CJTxuxUG
半角全角使うな厨が絶滅しますように (AA略
2022/04/03(日) 20:07:54.56ID:Mnzv/avn
定義自体は再帰してても大丈夫じゃない?
2022/04/03(日) 20:32:55.79ID:sNbs7j4z
>>839
あそう、だったら

struct Hoge {
 Hoge hoger;
};

これもOKだろw
2022/04/03(日) 20:58:54.41ID:NWvQ4doQ
参照だったらサイズが一意になるから問題なく処理できる
実態だったら無間地獄に落とされるからNG
2022/04/03(日) 21:17:02.42ID:sNbs7j4z
>>841
839は参照じゃないじゃん
話し通じないな
2022/04/03(日) 22:20:50.07ID:wOH19oBO
えっstd::vector<T> hoge_; とやった場合Tが何であってもその場でhoge_のサイズは決まるから
struct Hogeのメモリレイアウトは鎧袖一触で決まるか
ら何の問題も無い

決まらないのはhoge_のインスタンスがポインタで保持することになるヒープ上の領域のサイズであって
struct Hogeのサイズは上述の通りstruct Hogeの定義を一通り見たとき鎧袖一触で決まっているから
Hoge::hoge_をインスタンス化するタイミングで問題無くインスタンス化されるという印象のような希ガス
いや知らんけど
※ 個人の感想です
2022/04/03(日) 22:33:18.09ID:wOH19oBO
とオモタがなんかVS2019(C++14)で試したら以下のコードのビルドが通る怪現象やな……
template<class T, int N>
class VarArr {
 int T[N];
};

struct Hoge {
 VarArr<Hoge, 3> m_arr;
 int m_x;
};

Hoge x;

多分環境に拠るんだと思う
2022/04/03(日) 22:35:40.26ID:wOH19oBO
VarArr<T, N>の定義をまつがえたサーセン……orz
以下のコードなら正しくビルドエラーになる
template<class T, int N>
class VarArr {
T m_arr0[N];
};

struct Hoge {
VarArr<Hoge, 3> m_arr;
int m_x;
};

Hoge x;

ワイの答えはこれや!
2022/04/03(日) 23:14:48.08ID:Mnzv/avn
>>839で適当に回答したけどメンバとしてを実体で持つかポインタで持つかで通るかが決まるな
2022/04/03(日) 23:38:16.75ID:sNbs7j4z
struct Hoge
{
int a[sizeof(Hoge)];
};
はHogeがまだ定義されていないから、コンパイルできない
だったら、なぜ
std::vector<Hoge> hoges_;
は許可できるんだ
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
ファイルならまだしもオンメモリーで高速なランダムアクセスとか言語の範囲では工夫しようがなくね?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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