C++相談室 part159at TECH
C++相談室 part159 - 暇つぶし2ch809:デフォルトの名無しさん
22/03/30 07:12:05.54 7Zu/8ZF2.net
>>791
おいおい逆だろw
禿もアクセス種別の省略時の解釈は十中八九誤りだったと言ってるね

810:デフォルトの名無しさん
22/03/30 08:22:59.56 WX1Rp50C.net
>>796
本当だ逆だった…お恥ずかしい

811:デフォルトの名無しさん
22/03/30 12:47:10.06 mFVNBRSc.net
しばらくpythonとか触ってたけど今更C++の隠蔽設計とかバカらしく思えてきた

812:776
22/03/30 17:13:54.11 +a7BCMWw.net
>>782
ありがとう

813:デフォルトの名無しさん
22/03/30 19:26:05.50 xRfGRGrW.net
オープンな性格なのです

814:デフォルトの名無しさん
22/03/30 23:38:58.59 rveKwnBH.net
>>767
河野@琉球大学?(記憶モード

815:デフォルトの名無しさん
22/03/30 23:47:02.15 rveKwnBH.net
しばらくgoとか触ってたけど今更C++のクラスベースのオブジェクト指向とかバカらしく思えてきた

816:デフォルトの名無しさん
22/03/30 23:49:39.17 rveKwnBH.net
ていうかプログラミング言語とか人間の愚かさに対する対策なので
特にシンタックスシュガー的な言語要素は突き詰めれば突き詰めるほど頭おかしい言語になっていくのは必定

817:デフォルトの名無しさん
22/03/30 23:52:55.50 eQfKD0DM.net
>>802
GoもRustもclassなんてなくてstructしかないが困らないもんな

818:デフォルトの名無しさん
22/03/31 01:51:31.09 nXMYhSR8.net
>>802,804
チンチャそれな!

819:デフォルトの名無しさん
22/03/31 02:10:02.10 lTtwcp13.net
C++とオブジェクト指向を関連付けて考えるからおかしくなる
C++の内包する多様なパラダイムの中にオブジェクト指向が含まれてるだけ
C++の良いところは何でもありなところ

820:デフォルトの名無しさん
22/03/31 02:53:58.08 lTtwcp13.net
C++のclassもオブジェクト指向のための文法として捉えるべきではない

821:デフォルトの名無しさん
22/03/31 03:00:57.77 3NXOGCnE.net
C++のclassにpolymorphicというキーワードがあればclassとして理解しやすかっただろうに
C++自体が古いから仕方ない面もあるのだが

822:デフォルトの名無しさん
22/03/31 05:37:45.41 ZLovgCJ7.net
>>804
C++ も struct だけでもたいして困らんけどな

823:デフォルトの名無しさん
22/03/31 06:50:05.99 yEOSoCRj.net
SmalltalkやEiffielみたいにOOPとしての完璧さを目指した言語ではないからなC++は
PascalへのアンチテーゼがCであったように、完璧さを目指すことへのアンチテーゼでもある
そこを批判するやつとは根本的に相容れない

824:デフォルトの名無しさん
22/03/31 06:54:16.14 ivAOVlIc.net
CからC++へ行かずに
CからGoとRustへ行けば十分に問題ない

825:デフォルトの名無しさん
22/03/31 08:09:28.04 il5bYK9P.net
>>811
>>787

826:デフォルトの名無しさん
22/03/31 17:34:12.61 4cSTCvUa.net
>>767
言い回しがそいつのtwitterに出てくる感じと同じすぎる
ワイ大学生なんだけどその人20年以上前からそんな口調なのか

827:デフォルトの名無しさん
22/03/31 17:45:20.70 R4GrqV7T.net
河野氏になんか恨みあんの?
俺知り合いだから代わりに言っとくよ

828:デフォルトの名無しさん
22/03/31 19:53:32.15 mHRscCZz.net
if (xmm0 == xmm1)って下のやり方しかない?
_mm_movemask_epi8(_mm_cmpeq_epi...) == 0xFFFF

829:デフォルトの名無しさん
22/03/31 21:25:00.23 SxSNo1AU.net
>>814
嫌な知り合いすぎる
無自覚?

830:デフォルトの名無しさん
22/04/01 01:39:47.02 /eP2awHk.net
PTESTがあるぞ

831:デフォルトの名無しさん
22/04/01 20:07:44.20 kF+DLIFz.net
>>817
_mm_testc_si1281命令でできるのか
サンクス

832:デフォルトの名無しさん
22/04/02 03:00:41.15 JI80ciY+.net
ハンガリアン記法、いまだ健在なり

833:デフォルトの名無しさん
22/04/02 05:57:08.65 iaVgC0+D.net
プログラムほぼ未経験だけどこれから始めます
今は坊主頭の人の本を読み始めたところです
IDEのCLionを考えています
他におすすめあったら教えてください

834:デフォルトの名無しさん
22/04/02 08:28:40.83 KzPuamrt.net
Visual studioオススメ。VSCode+CMakeでもいいぞ

835:デフォルトの名無しさん
22/04/02 12:16:55.77 roqf8g4r.net
bitsetで実装し終わった後にvector<bool>がconstexpr対応してる事知ったんだが?
はー先に教えてくれよ(クソデカため息)

836:デフォルトの名無しさん
22/04/02 12:49:25.68 /j0/DBCU.net
vector<bool>なんか使っちゃいけません

837:デフォルトの名無しさん
22/04/02 14:22:05.97 YBLKDYh3.net
bitsetを実現するのならvector<bool>は妥当
だと思う派

838:デフォルトの名無しさん
22/04/02 14:30:40.42 YBLKDYh3.net
しかしvectorKbool>様のブツ(一般に数千ビットとかのデカくて比較的疎なやつ)がconstexpr対応している
と特段のありがたみと
かあるん??

839:デフォルトの名無しさん
22/04/02 14:35:10.49 X+p83iug.net
二進法で書いちまった方が…

840:デフォルトの名無しさん
22/04/02 14:36:56.48 T5fexWVc.net
vector<bool> 駄目って言ってる奴らって思考停止のバカでしょ
「特殊化されてるのである時は注意が必要」というのを理解できず思考停止でとりあえず禁止と見なしてるバカ

841:デフォルトの名無しさん
22/04/02 14:38:37.01 YBLKDYh3.net
これか
URLリンク(cpprefjp.github.io)
やっぱ内部でループのみならず、new / deleteするような関数までconstexprであってほしいと願うマニアが一定数居るんやな……

842:デフォルトの名無しさん
22/04/02 14:40:50.98 CNYN+CEs.net
キューとかスタック的な使い方なら自然だと思うね

843:デフォルトの名無しさん
22/04/02 14:44:28.98 p6D1htC0.net
一度作ってみたけどconstexpr関数内でnewしたらその関数内でdeleteまでしなきゃいけないのは使いづらい気がする

844:デフォルトの名無しさん
22/04/02 14:53:16.59 ARI85DWJ.net
まずはvector<bool>で実装してみて問題あるなら考える派

845:デフォルトの名無しさん
22/04/02 14:53:28.58 YBLKDYh3.net
だがちょっとまって欲しい毎秒1億も2億も回るようなループの中でこそ高速化が必須だが
そんなループ内でnew /deleteしようとする発想が最初からなんかおかしいのではないか

846:デフォルトの名無しさん
22/04/03 18:44:27.58 NmP3n2Yz.net
struct Hoge
{
std::vector<Hoge> hoges_;
};
ってなんでコンパイル通るの?
hoges_の定義時点ではまだ、Hogeの定義は完了していないのに。

847:デフォルトの名無しさん
22/04/03 19:05:25.24 Yvr+7/y4.net
struct Hoge {
 Hoge* ptr;
};
が通るのと同じ理屈なんじゃない?

848:デフォルトの名無しさん
22/04/03 19:25:23.89 7tOdFV5I.net
ソースコード次第やな
allocatorでサイズ使いそうなもんだけど

849:デフォルトの名無しさん
22/04/03 19:33:06.66 5C/3HoVM.net
宣言の時点では別に適当

850:デフォルトの名無しさん
22/04/03 19:35:01.81 BfkCmsi5.net
宣言?
どこにも宣言のみの記述はありませんけど?

851:デフォルトの名無しさん
22/04/03 19:48:52.09 CJTxuxUG.net
半角全角使うな厨が絶滅しますように (AA略

852:デフォルトの名無しさん
22/04/03 20:07:54.56 Mnzv/avn.net
定義自体は再帰してても大丈夫じゃない?

853:デフォルトの名無しさん
22/04/03 20:32:55.79 sNbs7j4z.net
>>839
あそう、だったら
struct Hoge {
 Hoge hoger;
};
これもOKだろw

854:デフォルトの名無しさん
22/04/03 20:58:54.41 NWvQ4doQ.net
参照だったらサイズが一意になるから問題なく処理できる
実態だったら無間地獄に落とされるからNG

855:デフォルトの名無しさん
22/04/03 21:17:02.42 sNbs7j4z.net
>>841
839は参照じゃないじゃん
話し通じないな

856:デフォルトの名無しさん
22/04/03 22:20:50.07 wOH19oBO.net
えっstd::vector<T> hoge_; とやった場合Tが何であってもその場でhoge_のサイズは決まるから
struct Hogeのメモリレイアウトは鎧袖一触で決まるか
ら何の問題も無い
決まらないのはhoge_のインスタンスがポインタで保持することになるヒープ上の領域のサイズであって
struct Hogeのサイズは上述の通りstruct Hogeの定義を一通り見たとき鎧袖一触で決まっているから
Hoge::hoge_をインスタンス化するタイミングで問題無くインスタンス化されるという印象のような希ガス
いや知らんけど
※ 個人の感想です

857:デフォルトの名無しさん
22/04/03 22:33:18.09 wOH19oBO.net
とオモタがなんか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;
多分環境に拠るんだと思う

858:デフォルトの名無しさん
22/04/03 22:35:40.26 wOH19oBO.net
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;
ワイの答えはこれや!

859:デフォルトの名無しさん
22/04/03 23:14:48.08 Mnzv/avn.net
>>839で適当に回答したけどメンバとしてを実体で持つかポインタで持つかで通るかが決まるな

860:デフォルトの名無しさん
22/04/03 23:38:16.75 sNbs7j4z.net
struct Hoge
{
int a[sizeof(Hoge)];
};
はHogeがまだ定義されていないから、コンパイルできない
だったら、なぜ
std::vector<Hoge> hoges_;
は許可できるんだ

861:デフォルトの名無しさん
22/04/03 23:53:21.86 dOp+WKyA.net
>>847
規格的に問題ないからだが、まあポインタなんでサイズ知らんでもええからだな

862:デフォルトの名無しさん
22/04/04 00:18:36.05 F+M9/rKi.net
>>847
std::vector<Hoge> hoges_; はクラスないしstructのサイズには影響しないからじゃないの?
そのクラスないしstructはstd::vector<Hoge> hoges_へのアドレスを保持するだけでしょ?
クラスないしstructの中でのhoges_のサイズはすでに決まっている

863:デフォルトの名無しさん
22/04/04 00:23:58.82 NuCanqg0.net
>>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のケースは気体どおりエラーになる
というワケ

864:デフォルトの名無しさん
22/04/04 09:09:53.47 14cK0a9Z.net
>>843
鎧袖一触の使い方間違いで草w

865:デフォルトの名無しさん
22/04/04 23:12:20.74 JNKuDAOB.net
4、5年c++やってるけどまともなものを作れない
どれくらいで、ネットで有名なソフトって作れるものなの?
例えばvscodeみたいな便利なアプリ

866:デフォルトの名無しさん
22/04/04 23:46:47.47 9GHqD2yn.net
>>852
VScodeはElectronつまりJavaScriptで書かれてるよね

867:デフォルトの名無しさん
22/04/05 00:26:55.67 btSnYNGS.net
>>852
C++Builderが楽だよ

868:デフォルトの名無しさん
22/04/05 01:43:21.89 QuV3GhxG.net
windowsは触ったことがない

869:デフォルトの名無しさん
22/04/05 02:00:35.56 QYslDBWm.net
ならばElectronかTauriがオススメ
WindowsだけでなくMacでもLinuxでも動くマルチプラットフォーム

870:デフォルトの名無しさん
22/04/05 06:11:04.09 PM3+0qST.net
>>852
言語だけ触ってても無理
自分は◯◯を作るんだという
一途な意思がいる
ネットでウケるかどうかは通常どうにもできない
もし市場の需要を読んで開拓ができるなら
もうそのままプロになれる

871:デフォルトの名無しさん
22/04/05 10:33:40.77 FcLzG6G8.net
>>852
まともって言うか一定規模以上のソフトを作ろうと思ったらオブジェクト指向デザインパターンを網羅していく事の方が大事
難しいハッキングをやるよりも設計の方がなんだかんだで難易度高いからな

872:デフォルトの名無しさん
22/04/05 17:09:26.03 PM3+0qST.net
「成功者」の法則をなぞるだけでは成果は出せない
そんなの誰でもできるから
形振り構うことより興味の向くまま突っ走るほうが肝心
そうして何かを成し遂げると自分なりの法則ができている
それまで周りは散々バカにしてくれるが
そんなのに折られないメンタルも大事だ

873:デフォルトの名無しさん
22/04/05 17:46:09.74 YcgsN5By.net
メモリマップドファイルのライブラリが標準入りするのってまだまだ先ですか??
標準ライブラリとするのに何か問題でもあるの?

874:デフォルトの名無しさん
22/04/05 19:10:03.35 Ssg9XCyk.net
<filesystem>ですら入ったの最近だしあんまり期待してない
socketとかのネットワークライブラリも標準にはないんだぜ?

875:はちみつ餃子
22/04/05 19:53:34.34 AUzgrMft.net
>>852
個人でなんらかのソフトを作る場合には「動くプログラム」を意識するといいよ。
構想通りに設計しようとするよりは機能を極小に絞ってでも動く状態のプログラムを作ってみて、
それを拡張していくという形にすれば行き詰まったところが学ぶべきことが潜んでいるところだとわかる。
ある程度までいったら最初から作り直したくなるときがくる。
学びながら作ったものなんてろくでもないんだから作り直すはめになるもんなんだよ。
どうせ作り直すと割り切って色々やってみればいい。

876:デフォルトの名無しさん
22/04/05 20:56:02.32 6DtMUNMI.net
Googleの人もイテレーティブな開発が良いって言ってたなあ

877:デフォルトの名無しさん
22/04/05 21:08:43.94 79YAP4SX.net
あーすべき、こーすべきと雁字搦めにPGを縛る硬直的で強迫的な教条主義が
投げやりなやっつけ仕事を大量生産するという�


878:ウ訓から色々な提案が出てるのに 教わったことにしがみつく後ろ向きな人が悪しき循環を継続させちまう



879:デフォルトの名無しさん
22/04/05 21:15:39.04 YcgsN5By.net
C++って他の言語と違って何でも出来るから情報収集に時間使いすぎるんだよな
プランAからZまであらゆる手法を検討して最善手を打たなければどこかで詰む事になる

880:デフォルトの名無しさん
22/04/05 21:15:57.95 rM7yNqDT.net
大昔の記憶だけどメモリマップというかネットワーク系のライブラリはC++に追加されないのかって聞いたときに
OS依存の仕様は実装されないって聞いた記憶あるけど最近のC++は方針変わったのか?

881:デフォルトの名無しさん
22/04/05 22:34:00.51 QFtrY3nt.net
C++とSTLは別だよ

882:デフォルトの名無しさん
22/04/05 22:39:47.79 vLZKRt0y.net
threadみたいにするならかまわんのだろ

883:デフォルトの名無しさん
22/04/05 22:54:42.49 79YAP4SX.net
プロセスがサポートされないアレでか

884:はちみつ餃子
22/04/05 23:18:25.53 AUzgrMft.net
スレッドは OS が提供するスレッドと一対一で対応することを意図しているという記述がある。
URLリンク(timsong-cpp.github.io)
スレッドを持たないシステムに対応付けるならスレッドの生成に常に失敗するような実装になってても仕様には反しないんじゃない?
noexcept は例外を送出しないことを保証するけど実行時エラーがないことを保証するわけではない。

885:デフォルトの名無しさん
22/04/05 23:23:24.49 79YAP4SX.net
今さらDOSでC++11か
いや否定はできんけど・・・

886:デフォルトの名無しさん
22/04/05 23:31:23.00 EtikemGC.net
プロセスを持ち出す意味がわからん
スレッドがあればいいんじゃ?

887:デフォルトの名無しさん
22/04/05 23:37:46.31 79YAP4SX.net
なんで?
アドレス空間の多重化とプロセス間通信はOSが違ったら移植性なしで割り切るの?

888:デフォルトの名無しさん
22/04/05 23:42:47.00 EtikemGC.net
それがないとスレッドも許されんという理屈がわからない

889:デフォルトの名無しさん
22/04/05 23:52:53.92 79YAP4SX.net
スレッドも許されないなんて主張してないが

890:デフォルトの名無しさん
22/04/06 07:13:16.72 e/YNs2XJ.net
質問ですがイテレータ間の距離はstd::distance<T>(first, last)で求められるそうなんですが
求めた距離を再びイテレータに戻す場合はどうすれば良いですのん?firstとlastがラ
ンダムアクセスイテレータならfirst + std::distance(last, first) == lastが成立するという具合に
足せば良いけどランダムアクセスイテレータか否かによらず共通に使えるテンプレートは?

891:デフォルトの名無しさん
22/04/06 08:10:41.61 tJlAug24.net
>>876 std::next() URLリンク(cpprefjp.github.io)

892:デフォルトの名無しさん
22/04/06 08:51:32.67 hbDmvmaG.net
>>876
std::advance(イテレタ,求めた距離)

893:デフォルトの名無しさん
22/04/06 14:47:30.60 /VxyOfiN.net
technical default とかいう新技が出てきたね

894:デフォルトの名無しさん
22/04/06 18:03:31.71 OIlaSdNT.net
みなさん多次元配列ってどうやって持ってますか?
・blas, lapack等fortranの資源を使いたいからローメジャー、カラムメジャーは宣言時に決めたい
・添字アクセスがネイティブの多次元配列並みに早い
・STLコンテナみたいに使える
等の条件を満たす良いライブラリありますかね
本当はSTLに入ってほしいんですが、なぜ未だにないんですかね?

895:デフォルトの名無しさん
22/04/06 18:15:07.58 Iu/ahyl1.net
ネイティブの多次元配列とは

896:デフォルトの名無しさん
22/04/06 18:18:59.68 OIlaSdNT.net
>>881
ああすみません私めは言語障害者だから変な言葉使ってるかもしれません
Cの多次元配列のことを変な呼び方をしてしまいました
すみません

897:デフォルトの名無しさん
22/04/06 18:30:19.00 aY4pnG+o.net
eigen gmtlとか?

898:デフォルトの名無しさん
22/04/06 19:07:48.95 ofj8wLUE.net
1つめがよーわからんけど
・次元数はコンパイル時決定
・要素数もコンパイル時決定
・子要素のサイズは全て同じ(arr[0].size()==arr[1].size() が常に成り立つ)
ってことでええの?
それなら単純にstd::array<std::array<T, 4>,5>でいいとは思うが

899:デフォルトの名無しさん
22/04/06 19:36:43.45 vJ8PYFJ1.net
全部arrayだとスタックに配置される事あるからvector<array>でやってるな

900:デフォルトの名無しさん
22/04/06 21:17:51.29 tUlkAQY7.net
>>880
std::mdspanというのが提案中だがまだ時間かかりそう

901:デフォルトの名無しさん
22/04/06 23:18:21.83 NvxWnsbd.net
>>877 >>878
レス㌧クス
やっぱいろいろ一般化されたテンプレートがいっぱいあったら
テンプレートを特殊化せずに済む幅がひろがりんぐ、

902:デフォルトの名無しさん
22/04/07 03:17:05.89 yw7pyl+g.net
>>883
eigenは遅い
gmtlはメンテナンスされてない
>>884-885
一次元配列にマップしたときの並び方が柔軟であってほしいって書いてるでしょ
外部ライブラリ必須じゃないかな現状
>>886
mdspanは実体を持たなくてmdarrayは実態を持つんだっけ
C++23に入るって話じゃなかったっけ?
俺C++の新機能はそんなに熱心に追ってないけどこれだけは待望してる
>>880
ということで、現状はboostじゃないかな
これもメンテナンスされてないようだが、マシだと思う
良いライブラリがあったら俺も知りたい

903:デフォルトの名無しさん
22/04/07 03:34:21.33 zyrTrwHF.net
柔軟な多重配列なんて自分ですぐ作っておしまいな話なのに
なぜ標準にないとかライブラリがないと言い出したり将来の仕様に期待するとか意味不明

904:デフォルトの名無しさん
22/04/07 03:49:06.16 g2f/LEmv.net
numpyを使う。もちろん他にpython併用する理由があればだけど。
ローメジャーなのでメモリ上での向きは個別にやってる。

905:デフォルトの名無しさん
22/04/07 05:59:06.00 kMhdBz2h.net
>>880
blas使いたいんならstd::sliceがモロそのものだよ

906:デフォルトの名無しさん
22/04/07 06:13:35.95 yw7pyl+g.net
>>889
やってから言えや
例えば、高速なランダムアクセスとか添字の組と要素番号の間の高速なマッピングとか、どう実装するつもりでいるの?

907:デフォルトの名無しさん
22/04/07 06:17:36.20 OOyqDhdW.net
あるクラスのコンストラクタがvector<int>をとるんだけど、たまにvector<size_t>を渡したいときがあるからオーバーロードするようにしたらambiguousだとエラーが出た
1) ambiguous にならない方法はありますか
2) vector<size_t>の各要素がintの範囲に収まるくらい小さいとき、これをvector<int>にキャストするナイスな書き方はありますか

908:デフォルトの名無しさん
22/04/07 06:40:42.70 kMhdBz2h.net
ambigousにはならんようだが
URLリンク(ideone.com)

909:デフォルトの名無しさん
22/04/07 07:18:15.48 3YRGB6r4.net
>>892
自作すれば自分の使う方法に合わせてカスタマイズできるから圧倒的に有利
インデックシングも汎用だと毎回多段計算になるが自作なら用途に合わせて最適化できる

910:デフォルトの名無しさん
22/04/07 08:17:57.53 CaxjwvsJ.net
ファイルならまだしもオンメモリーで高速なランダムアクセスとか言語の範囲では工夫しようがなくね?

911:デフォルトの名無しさん
22/04/07 08:32:07.21 Ym/mh0iz.net
近傍のアクセスが速いというのは言語関係ないしな

912:デフォルトの名無しさん
22/04/07 10:27:53.88 2nzlX6cZ.net
そういえばSTLのコンテナに[]で範囲外アクセスしたとき、デバッグモードだとちゃんとアサート出してくれるけど
あれってSTL実装した人がそう書いたから出るの?それともOSの機能か何か?

913:デフォルトの名無しさん
22/04/07 10:32:39.68 2HgVVA+6.net
全てそう書いたから出るんだよ
OSはレイヤが違う話

914:デフォルトの名無しさん
22/04/07 10:39:14.99 2nzlX6cZ.net
へえ、じゃやっぱマクロ使ってガシガシ書いてるんだろうね
自分じゃ絶対やりたくないなw

915:デフォルトの名無しさん
22/04/07 17:34:09.66 mHsgrYEE.net
ifdefで括るだけだろ

916:デフォルトの名無しさん
22/04/07 18:22:02.97 kMhdBz2h.net
>>898
ルール上、保証がないことでも
やってくれてることって、どこにでもあるだろ
operator[](size_t)で範囲外アクセスした場合の動作は未定義なので
どんな扱いをされても合法なんだよ
# 一時期流行った気持ち悪い喩えはもうしない

917:デフォルトの名無しさん
22/04/07 21:49:18.59 6+zrl0OG.net
SNSの気持ち悪いノリ持ち込むなよ

918:デフォルトの名無しさん
22/04/08 01:44:38.29 jwLlCRWe.net
>>900
お客様根性丸出しのプログラマとか・・・

919:デフォルトの名無しさん
22/04/09 13:06:11.18 NDf9sYGT.net
メモリが足らないから64ビットにするとかいうやつがいて
ソース見たら
double hoge[300][300][300];
って笑った

920:デフォルトの名無しさん
22/04/09 13:37:31.78 gSPSOhuN.net
64bit化だけじゃ無理でしょ
スタックサイズを512MBぐらいにしなきゃ

921:デフォルトの名無しさん
22/04/09 13:47:10.70 a9m8EYfT.net
ツッコミどころが違う…
32bitのままヒープに確保で十分だから

922:デフォルトの名無しさん
22/04/09 13:49:15.33 jXZanj6A.net
ヒープを使って良いのはアマチュアまでだからな

923:デフォルトの名無しさん
22/04/09 13:53:57.22 qQptZxW8.net
世の中マシン性能で解決おじさんみたいなのばっかり

924:デフォルトの名無しさん
22/04/09 14:20:15.81 erlZKZM8.net
>>907
それを言うなら32bitのままスタックサイズを増やすだけで充分だろ
ソース変更要らんし

925:はちみつ餃子
22/04/09 15:54:11.32 LbeQCC1G.net
デフォルトでのスタックサイズ上限がだいぶん小さめ (数メガバイト程度) になってるのは
基本的にそれで足りる、 なるべくそれで足りるように書けという暗黙の圧力だと思う。
必要に応じて柔軟に対処すりゃいいけど、最初からあえて逆らうべきでもないだろ。
なんでもかんでもスタックを使ってるとデバッガで追いづらいし、
流れを制御するための変数と処理する対象になるデータ (大抵はある程度に大きい) は分けたい。
回路設計に喩えると制御線と動力線を分けるみたいな感じ。
(わかりにくい比喩ですまんがあくまで感覚なのでこういう形でしか表現できない。)

926:ハノン
22/04/09 16:35:28.22 50hSXO1R.net
>>911
>回路設計に喩えると制御線と動力線を分けるみたいな感じ。
昔、試作基盤として、天地にべったり Vcc とアースを上辺と下辺に貼り付けて、間に島(ランド)をたくさん並べるっていうのを聞いたことがあります
どういう名称だったか忘れちゃいましたが…

927:デフォルトの名無しさん
22/04/09 16:45:04.63 erlZKZM8.net
おれおれコーディングルールを開陳されても困る

928:デフォルトの名無しさん
22/04/09 18:42:32.24 njPxFZn6.net
>>906
笑ったって書いてあんじゃん
また、笑った

929:デフォルトの名無しさん
22/04/09 19:24:26.54 mI1Pq9ZL.net
300が何の数字か知らんけど、それが変更や拡張で800くらいになったら溢れるんだから
64bitが必要って判断はなくはないでしょ
何の数字か知らんけど

930:デフォルトの名無しさん
22/04/09 19:56:02.24 NDf9sYGT.net
>>915
君は本物のバカだな

931:デフォルトの名無しさん
22/04/09 21:01:35.50 /RZJpXw8.net
規格にスタックって出てくる?

932:デフォルトの名無しさん
22/04/09 22:53:29.39 NDf9sYGT.net
出てくるわけねーじゃん
バカですか?

933:デフォルトの名無しさん
22/04/09 23:32:57.29 lfgNvR7s.net
std::threadで作ったスレッドのスタックサイズは1 MBで
変更はできないら
しい
今日日は仮想メモリがあるからなリ
ッチなマシンなら……

934:デフォルトの名無しさん
22/04/10 01:07:52.01 OW76vhVn.net
標準ライブラリなんて普通使わないだろ
汎用的にしすぎてて、いらない機能が多いからやたらと遅いし

935:デフォルトの名無しさん
22/04/10 01:48:34.97 vpYyJyBE.net
標準以外なにをつかうんだ

936:デフォルトの名無しさん
22/04/10 04:47:34.93 Fso6oKAR.net
_beginthreadex()

937:デフォルトの名無しさん
22/04/10 05:15:04.39 RmTwSS8K.net
pthread

938:デフォルトの名無しさん
22/04/10 05:58:59.81 xcZwEbFY.net
<thread>で抽象化されていないOS特有の機能を使いたきゃAPI使うってだけ

939:デフォルトの名無しさん
22/04/10 11:29:27.51 lpHEMRFm.net
>>921
大抵は自社でフレームワーク構築してるよ
iostreamですら、includeしたプルリク蹴らられるし

940:デフォルトの名無しさん
22/04/10 11:37:41.44 vpYyJyBE.net
>>925
被せるだけじゃなくて自作すんの?

941:デフォルトの名無しさん
22/04/10 11:57:59.43 Np98oj9K.net
ちんちんシュッ!シュッ!シュッ!

942:デフォルトの名無しさん
22/04/10 13:14:21.25 wqaUV7TG.net
>>921
OSのAPI直で叩けってことやろ
例えばCreateThreadならスタックサイズ指定できるし

943:デフォルトの名無しさん
22/04/10 16:50:49.57 8UzTPUX4.net
>>925
うちもstringとかコンテナクラスは全部自作してる
昔はプラットフォームがUNIXもあったりして、環境によってはSTL使うと
コンパイルエラーになってたからな

944:デフォルトの名無しさん
22/04/11 06:43:40.41 x3kzaSAd.net
関数群をまとめたいときってクラスで切るべき? 名前空間で切るべき?
例えば sub1、 sub2 というサブルーチンがあって、これらが func1、func2 から呼ばれるときに、これらをまとめたいと思うんです

945:デフォルトの名無しさん
22/04/11 06:51:36.36 r64ZejsB.net
べきという言い方はあまり好まんが
関数間で連携させるならクラス
連携しない単なるグループなら名前空間
というのが俺がよく使う手だ

946:デフォルトの名無しさん
22/04/11 06:54:00.91 sjzgKw67.net
> これらをまとめたいと思うんです
どうまとめたいんだよ…

947:デフォルトの名無しさん
22/04/11 12:12:27.70 sxIacEU4.net
mc++d読んだけど、これが20年前以上に書かれたってことがすごいな
今となっては、当たり前のことをばっかだけど
当時は革新的だったんじゃないかな

948:はちみつ餃子
22/04/11 13:01:51.57 7nQKgh0L.net
>>930
特定の範囲でしか使わない関数があるという意味?
それだけの理由なら名前空間でもクラスでも分ける必要はない。
その翻訳単位で内部リンケージにしておけば十分だよ。
名前空間やクラスは外部に対してどう見せるかの問題なんだから
機能単位の中で階層を分ける必要はあんまりない。

949:デフォルトの名無しさん
22/04/11 15:33:36.87 gXppguDy.net
そういや翻訳単位の管理として新しくモジュールがc++20から導入されたけど、使い心地どうかしらん?
既存コードもモジュール化した方がいいくらい便利だったりするのかしらん?

950:デフォルトの名無しさん
22/04/11 16:44:48 bKclHLZw.net
>>930 >>934
staticおにいさん「class外、*.cppにstatic修飾して書く」

951:デフォルトの名無しさん
22/04/11 19:36:19.35 KtON6/oU.net
>>935
昨年末あたりにvisual studioで試したらどうやってもビルド通らなくて諦めたけど今もう使えるようになってるんかな

952:デフォルトの名無しさん
22/04/12 01:31:53 EgjH8LRN.net
実験した程度でしかないけど使えてたよ。

953:デフォルトの名無しさん
22/04/12 10:13:21.46 5vVn8Fqf.net
>>934
その翻訳単位がグローバル領域だったら? って意味でしょ

954:はちみつ餃子
22/04/12 11:04:00.65 5njWaFr4.net
>>939
言いたいことがわからない。

955:デフォルトの名無しさん
22/04/12 16:43:20.82 qoqTD/fb.net
dfs とか bfs みたいな名前の関数はそれを呼ぶ関数とまとめたくなるよね分かる
関数内関数にすると他の関数から呼べなくなるしな
名前を変えよってのはナシなw

956:デフォルトの名無しさん
22/04/12 17:25:13.49 nzV1CUkS.net
モジュール……

957:デフォルトの名無しさん
22/04/12 17:51:32.45 RKLCiqJK.net
アホな質問かもしれないのですが……
今までユニークポインタで実体領域確保していたクラスを、どうせ一つしかnewしないからと、クラス内部に自身型の静的変数を保持して使用する方法へと変更しました。
所謂シングルトンに似た感じのものだと思うのですが。
std::unique-ptr<Hoge>Temp=std::make-unique<Hoge>();

static Hoge& GetInstance(){static Hoge temp;return temp;}
使用する分には問題ないのですが、実体化させたいクラス数が多く、結果的には静的変数のガズが増え、実体がグローバルに多数存在する状態になってしまっていると思います。
この場合、名前衝突以外に何か想定される不具合はありますか?
データを保持させるクラス以外は全てこれに置き換えようと思っているのですが、今までnewして使っていたため何か罠があると思えてなりません。
この方法はクラス名から実態を呼び出せて私に大変便利です。

958:デフォルトの名無しさん
22/04/12 18:22:24.95 fdFUG1QI.net
>>943
ないです

959:蟻人間
22/04/12 18:27:41.73 Dt0TGPDO.net
>>943
マルチスレッドじゃないよな

960:デフォルトの名無しさん
22/04/12 18:29:33.15 RKLCiqJK.net
>>944
ありがとうございます!
>>945
違います!
無さそうで安心でした

961:デフォルトの名無しさん
22/04/12 18:39:03.10 FTlcB8DO.net
クラス外側でtemplate実装にしろよとは思うが
template<class T>
inline T Instance;
int main(){
Instance<Hoge>.Execute();
}

962:デフォルトの名無しさん
22/04/12 19:21:11.76 72/2frZ9.net
static ローカル変数が定石じゃないの?

963:デフォルトの名無しさん
22/04/12 20:27:31.77 vgUv52EM.net
は?

964:デフォルトの名無しさん
22/04/12 20:30:19.09 X1V1J1VK.net
経験的にはどうせ静的なら変に隠さずグローバル変数の方が使いやすいです

965:デフォルトの名無しさん
22/04/12 21:36:16.25 RKLCiqJK.net
ちょっと皆さんの言ってることがよくわからないのですが……
テンプレートにして有効範囲で使用する、グローバルでいつでも呼び出せるようにする
ということでしょうか?
使用を想定しているのは膨大なデータのコンプレックスではなく、外部データ加工用に少量のローカル変数を持たせたクラスなので、実体はひつとで大丈夫だと思います。
その際には、衝突を考えないならば、グローバウに無造作に置いた方が使いやすいよ、ということでしょうか?

966:デフォルトの名無しさん
22/04/12 22:13:59.90 oNokQpOT.net
左再帰が無限ループになる理由を教えて

967:蟻人間
22/04/12 23:03:12.33 Dt0TGPDO.net
>>952
実引数と戻り先アドレスをスタックに繰り返し積むから。

968:蟻人間
22/04/12 23:31


969::14.39 ID:Dt0TGPDO.net



970:デフォルトの名無しさん
22/04/12 23:39:21.85 EarvAF13.net
停止しないから無限ループする
…って酷い理由だな

971:デフォルトの名無しさん
22/04/13 00:21:12.99 bubjF7cO.net
じゃあ停止するかどうかを判定する汎用ルーチンHを作ればいいんだよ。

972:947
22/04/13 01:25:51.41 qfz8Xp88.net
>>951
シングルトンを確保しておくためだけにstatic関数が10も20も並ぶのがアホくさいじゃん?
template 1つだけ書いておこうよって意図で書いた。
が、>>951 のように一時変数として使うならローカル変数にして使い捨てるべき。
グローバル変数(>>943 もやってることは同じ)を使うデメリットは調べればすぐ出てくる

973:デフォルトの名無しさん
22/04/13 05:51:58.22 8pcHyiAe.net
staticにインスタンス入れるやり方だとマルチスレッドマルチプロセスにした時すぐ破綻するから大き目の定数入れる以外には使ってないな

974:デフォルトの名無しさん
22/04/13 08:11:33 ZQqXT36F.net
グローバル変数は初期化順序が環境依存になる問題があるから、
呼び出し順序で初期化するインライン関数のstaticローカル変数の方が扱いやすい
という話があったかと思うけど、最近は回避するテクニックできたの?

975:デフォルトの名無しさん
22/04/13 09:44:11 abmOAw0D.net
>>959
それでも競合は起きうるよね
排他制御は必須

976:デフォルトの名無しさん
22/04/13 10:25:01.35 2DJG1h+b.net
相談
抽象的なノードクラスがあり、上流ノードから下流ノードが接続され情報を取り出したいとする
この時、接続時に上流ノードの出力タイプと、下流ノードの入力タイプが符合するかどうかを調べたい
今考えている実装方法としてenum型でタイプを列挙しておき、ノードの出力属性としてもたせ
入力に必要な属性を接続時に調べておく方法
シンプルでベストかなとは思うが、タイプが増えていくとその管理がやや大変かと思う
文字列で符合させるやり方も考えたが、例えば"int"と"integer"とかでごちゃごちゃしそう
なにか妙案があればお聞かせ願いたい

977:デフォルトの名無しさん
22/04/13 10:28:21.90 CyvaZh5F.net
抽象的でわからん

978:デフォルトの名無しさん
22/04/13 10:36:53.86 2DJG1h+b.net
すいません、もうちょっと自分で考えて相談点まとめます

979:デフォルトの名無しさん
22/04/13 10:44:17.47 zii+x7Ds.net
それぞれのスレッドでは個別だけど スレッド内では唯一のインスタンス
スレッドをまたいでも共通で唯一のインスタンス
あたまがこんらんする

980:デフォルトの名無しさん
22/04/13 12:06:05.65 IuPW2iUE.net
>>961
どのみち符号の管理・徹底は必須だから、文字列で符号化し、表とかにまとめてバージョン管理・周知徹底する。
protocol bufferとかでインターフェイス管理すれば少しは楽かね。
protocol buffer以外だとなにがいいかしらん?

981:デフォルトの名無しさん
22/04/13 12:12:18.93 5KnL277L.net
// A と Bのところだけが異なるfとf2
// うまくこの関数をまとめれませんか?
#include <iostream>
#include <vector>
#include <algorithm>
struct Foo
{
void Func() const
{}
};
void f(const std::vector<Foo>& vf)
{
std::for_each(vf.begin(),vf.end(),
[](auto&& f)
{
f.Func();//A
}
);
}
void f2(const std::vector<Foo*>& vf)
{
std::for_each(vf.begin(),vf.end(),
[](auto&& f)
{
f->Func();//B
}
);
}
int main( int argc, char *argv[] )
{
std::vector<Foo> vf;
std::vector<Foo*> vfp;
 f(vf);
 f2(vfp);
}

982:蟻人間
22/04/13 12:20:05.74 +YltrYoo.net
std::vector<Foo*>
std::vector<Foo>
のインターフェイスに共通部分がない。アキラメロン。

983:947
22/04/13 13:02:01 sgl3F80B.net
type_traitsで殴ればいけそう

template<class T>
auto& to_reference_if_pointer(T&t){
if constexpr(std::is_pointer_v<T>){
return *t;
}else{
return t;
}
}


to_reference_if_pointer(f).Func();

984:はちみつ餃子
22/04/13 13:12:01.75 qCcEdGhE.net
>>965
URLリンク(kaitai.io)

985:デフォルトの名無しさん
22/04/13 18:00:26 m7JtDTD6.net
>>957
今実機で確認して、インライン化したテンプレートをヘッダーに咥える方法が自分にとって良い事を確認しました!
ありがとうございます。
いちいちスタティック咥えるより良いと思います。

マルチスレッドは使用したことがないのでわかりませんが、なるべき勉強してみたいと思います。

皆さんありがとうございます!

986:デフォルトの名無しさん
22/04/13 18:15:56.73 I4ieD//T.net
>>966
std::for_each(vf.begin(),vf.end(),std::mem_fn(&Foo::Func));
または
for (auto &&x : vf) { std::invoke(&Foo::Func, x); }

987:デフォルトの名無しさん
22/04/13 18:28:24 U0E88zpG.net
オマンコハンター チンポマン!
股間の銃を携えて今日もおまんこ狙い撃ち

988:デフォルトの名無しさん
22/04/13 23:40:49.30 grUsXYkY.net
>>971
ラムダが消されてて笑った

989:デフォルトの名無しさん
22/04/13 23:53:02.59 nvVh9cdQ.net
>>967

スキル低っ

990:デフォルトの名無しさん
22/04/14 07:29:49.75 Qd4x1CZh.net
シングルトンは要らない子、とヴァカにしていたが
グローバルなオブジェクトのコンストラの呼び出し順序が翻訳単位を超えた呼び出し順序がまるきり不
定になるというC/C++の仕様を回避するのには有効おと1 mgぐらい考えを新ためた
OSのwrapperを書いて、main()でそれを初期化することにして
グローバルなオブジェクトのコンストラから思わずOSのwrapper経由でログを吐かせようとしたらクラッシュして気づいたから
最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン  ← まんまシングルトン
main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
 

991:デフォルトの名無しさん
22/04/14 07:33:43.77 Qd4x1CZh.net
訂正orz、
誤: 最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン  ← まんまシングルトン
正: 最初のOSのwrapperの最初の呼び出しでまだ未初期化なら初期化したら良い(ビコーン  ← まんまシングルトン

992:デフォルトの名無しさん
22/04/14 08:28:49 79II+WyL.net
別にシングルトンじゃなくても単に起動時に初期化して渡せばええやん

993:デフォルトの名無しさん
22/04/14 09:59:18.13 wwxSZsaE.net
いや要るでしょシングルトン
何らかのリソースマネージャ作るときとか避けて通れないし

994:デフォルトの名無しさん
22/04/14 10:35:30.42 dlHUY+WK.net
>>977
初期化順序の問題って回避できたっけ?

995:デフォルトの名無しさん
22/04/14 10:40:07.14 79II+WyL.net
mainでリソース用意しろという話よ
ライブラリだったら初期化用になんか叩いてもらえ

996:デフォルトの名無しさん
22/04/14 10:47:06 rsrkTEkU.net
グローバル変数をポインタにしておいてmainでnewとか
friend int main(int, char**); とか?

997:デフォルトの名無しさん
22/04/14 10:56:36 79II+WyL.net
なんでグローバル変数にこだわるんだよ

998:デフォルトの名無しさん
22/04/14 10:58:53 dlHUY+WK.net
>>980
シングルトンより制限多くてメリット感じないなぁ。
マキャベリスト対策は難しいかもしれないけど、マーフィーに呪われないように運用で回避するのは最後の手段にすべき。

999:デフォルトの名無しさん
22/04/14 15:09:30.09 4tVKG4Xu.net
1個でもグローバルなりがあると
エントリポイントの main よりも前に走るコンストラクタ内部であれこれされる可能性を想定する必要に迫られる と

1000:デフォルトの名無しさん
22/04/15 00:01:53.91 he9C7sX7.net
>>981
> グローバル変数をポインタにしておいてmainでnewとか
> friend int main(int, char**); とか?
それは最初にやったがブ


1001:ツがOSのwrapperなのでカッコワルダサいと思い考え直した 結果がマルチスレッド対応を含まないライトなシングルトンの適用 >>980 main()に入ってから初期化するというだけでは初期化が間に合わないケースがあるから何とかしたいという話



1002:デフォルトの名無しさん
22/04/15 00:06:58.93 xDiQzMrD.net
mainの実行より前に意味があることしようと思ったらコンパイル時しかなかろうよ

1003:デフォルトの名無しさん
22/04/15 00:13:00.39 he9C7sX7.net
>>986の主観の話をしているのではない件について:

1004:デフォルトの名無しさん
22/04/15 00:22:10.66 xDiQzMrD.net
>>987
お前のグローバル変数愛は主観じゃないんかいな
もっと崇高な何かがあるのか

1005:デフォルトの名無しさん
22/04/15 04:08:04.71 sm6VHVYM.net
静的ストレージは実装と心中するプログラム以外マジでやめといたほうがいい
移植性が大幅に低下する

1006:デフォルトの名無しさん
22/04/15 04:23:41.78 1Y3hD0GJ.net
グローバルやstaticな変数を使用する時は排他制御を必ず行なう
これを厳守していれば使っても大丈夫です
もちろん使わずに済む別の方法がある時は別の方法を取るべきです

1007:デフォルトの名無しさん
22/04/15 06:36:24.15 he9C7sX7.net
>>988
・任意のユーザーが任意のクラスをグローバル変数として使うことをOSが禁止するわけにはいかない
・クラスのコンストラクタでOS資源を確保することは普通(イベントオブジェクトを確保する等、ハンドルのメンバを有効な値で初期化しようとする
・誰かがグローバル変数のコンストラクタでOSの資源を確保しようとしたら、この場合初期化前のOSのwrapperが呼ばれる
ここまで書かないと>>986がいかにたわごとを言っているかわからないわけ?!
>>990
>グローバルやstaticな変数を使用する時は排他制御を必ず行なう
まあそれはそう。今回排他制御を避けられるのは
>main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
>OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
というktgi行為が無いことの条件付き。

1008:デフォルトの名無しさん
22/04/15 07:35:15 xDiQzMrD.net
>>991
えっと、つまり、使えるものは使わずにはおれない一族に生まれたということですか?

1009:デフォルトの名無しさん
22/04/15 08:15:20.73 xhqbcuaF.net
>>991
c++11から静的ローカル変数の初期化は自動的に排他制御され、スレッドセーフとなる[10]。 だって。
シングルトンパターンの何を問題視しているんだっけ?

1010:デフォルトの名無しさん
22/04/15 08:29:52.88 y04/Kx9U.net
自分で記述するだけならどうとでもなるけど
他人に使ってもらう前提だと
限度はあるにしても色々防護策を講じたくなるのもわかる

1011:デフォルトの名無しさん
22/04/15 08:31:14.00 xDiQzMrD.net
モジュールの結合度を評価するのにまず排他がどうとか気にするもんかね?

1012:デフォルトの名無しさん
22/04/15 08:40:46.42 WMzvufu2.net
C++相談室 part160
スレリンク(tech板)

1013:デフォルトの名無しさん
22/04/15 08:43:44.23 ZcCJtqdn.net
>>995
それとは独立の問題
並行&並列でも動くことが現代では求められているため
一般的にグローバルやstatic変数の読み書きには排他制御が必ず必要となる
厳密な意味で変数ではなく一度限り初期化される定数のようなものの場合はその初期化が排他制御される保証のみでも大丈夫なだけ

1014:デフォルトの名無しさん
22/04/15 08:44:18.42 wykOop5a.net
>>994
シングルトンパターンならコンストラクタをプライベートにするんだから、そもそもグローバル変数として初期化できないんじゃない?

1015:デフォルトの名無しさん
22/04/15 08:44:58.60 wykOop5a.net
>>997
>>993

1016:デフォルトの名無しさん
22/04/15 08:49:06.65 xDiQzMrD.net
>>997
グローバル変数批判でまずそれが問題だと思うのはどうかしてるよ

1017:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 54日 20時間 52分 24秒

1018:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch