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/

テンプレおしまい
142デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:40:26.69ID:+cbHRaf/
2chだった頃、このスレでもプッシュ型インターフェースが流行りかけてたんだよな。
5chになって若干質が落ちたんじゃないだろか。
2020/10/14(水) 13:41:57.79ID:HhRPmWpc
初心者くんはこの世の全ての範囲のendが「先頭からの個数」で決まる場合しかないと思い込んでるみたいだけど
例えばfindの検索結果とか、GUIの現在カーソル位置とかで決まる場合もあって、その場合だと本質的でない「個数」という数字を求めるコードが結局長くなってしまうことに注意しよう
簡単な練習問題だよ
144デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:44:01.55ID:ssGc8zMA
>>137
その配列のラッパークラスは作らんの?
2020/10/14(水) 13:51:26.20ID:Z4l68xx0
>>127
マクロ変数(定数?)とかグローバル変数とか生配列とか、旧態依然としたCの作法が好きなら無理にC++やSTLを使わずに自分の好きな道具を使えばいいんでないの?
今でも(そして恐らくこれから先も)変わらず使えるのだから。

自分の好みに合わないものを他人が嬉しそうに使ってるのが気に入らないの?
146デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:54:48.00ID:OK1/udlE
配列が個数を持ってるなら
fill(配列, 値);
で良くね?
2020/10/14(水) 14:08:57.43ID:lJFXTbVx
>>141
いや、数学的ならむしろSTLより理解できる。
2020/10/14(水) 14:35:28.55ID:fAfIBrSZ
>>146
常に全要素ならな
2020/10/14(水) 14:38:31.07ID:fAfIBrSZ
> こっちはプログラミングのエキスパートだが。

にーしちゃ恥ずかしいミスしてたね、さっき
fill(dim, 2, 98, 0); //引数4個
fill(dim + 2, dim + 98, 0); //引数3個
fill(dim +2, 98, 0); //伝統的にはCでは、(中略)と書ける。 ←これw
2020/10/14(水) 14:39:14.81ID:fAfIBrSZ
引数4個と3個の違いは有耶無耶にしたいのかな?
151デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:03:45.73ID:d5S3+KHs
GCC9で-std=c++2aが使えるんだけど…C++20です…これってさぁ…
実験的にサポートみたいな事行ってるけど、使ってもOKなの?
experimental supportって言ってるけど…みんなどうしてるの?
152デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:07:19.79ID:ssGc8zMA
>>151
「腕に自信のある奴は無償デバッグ要員になってくれ」という委員会からのお願い
見つけたバグやあやしい挙動の個数に応じて名を上げることも出来る
2020/10/14(水) 15:14:57.44ID:lJFXTbVx
>>149
あなた、話の流れを理解して無いですよ。
154デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:15:36.27ID:d5S3+KHs
C++17で行きます…17でも十分新しい…。
2020/10/14(水) 15:16:35.85ID:fAfIBrSZ
>>153
で、終点アドレスではなく個数にすると
引数が少なく済むの?
156デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:37:35.37ID:+cbHRaf/
https://isocpp.org/std/status
2020/10/14(水) 15:41:12.49ID:lJFXTbVx
>>155
今回は、引数の個数は議題にはして無い。
2020/10/14(水) 15:45:10.45ID:lJFXTbVx
>>157
つまり「引数の個数が多くなるからSTLが問題」などとは全く言って無いということ。
別に個数方式にしても引数が少なくなると言うことではない。
引数の個数ではなく、コーディングする時の引数の記述量を減らせることが多い。
+演算子も使わなくて済むのでケアレスミスも減らせる。
またtopとbtmで重複する事を書かなくて済む。
そしてそれは安全性に繋がる。
なぜなら同じであるべきところを誤って異なるように書く可能性がなくなるから。
159デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:51:28.70ID:+cbHRaf/
お前の考える正しいライブラリがSTL以上に使われるなら、お前の意見にも一理あるのかもしれないけど。

ここで見た分には、初心者が使い方わからんと騒いでるだけに見える。
2020/10/14(水) 15:53:12.69ID:fAfIBrSZ
>>157
いやいや、100に対して111の流れは引数の個数だよ

===== 引用開始 =====

100 自分:デフォルトの名無しさん[sage] 投稿日:2020/10/14(水) 06:46:30.43 ID:fAfIBrSZ [4/15]
fill(dim, 2, 98, 0); //引数4個
fill(dim + 2, dim + 98, 0); //引数3個

111 返信:デフォルトの名無しさん[sage] 投稿日:2020/10/14(水) 09:45:58.36 ID:lJFXTbVx [5/19]
>>100
>fill(dim, 2, 98, 0); //引数4個
これは違う。
インタプリタ言語ではこのようになってしまうが、伝統的にはCでは、
fill(dim +2, 98, 0); //引数3個
と書ける。

===== 引用終了 =====

しかもだよ、これインタプリタ方式とコンパイラ方式でどんな違いが出るの?
変に逃げ回ったり139みたいなプリティ発言するほど墓穴がでかくなるだけだぜ
ミスはミスで潔く認めたほうが被害拡大を防げると思うよ
2020/10/14(水) 15:54:50.74ID:lJFXTbVx
>>160
逃げたりとかじゃなく、あなたの言っている意味がこちらには伝わってないから
混乱が生じているだけ。
あなたの説明は言葉が足りて無いから。
2020/10/14(水) 16:07:49.07ID:lJFXTbVx
>>160
>しかもだよ、これインタプリタ方式とコンパイラ方式でどんな違いが出るの?
インタプリタ方式だと必ずそうなると言う意味ではなく、arr + 2
が「3番目の要素のアドレス」の意味で使えるのは、大体コンパイラ系の言語の仕様。
その意味で、
xxx(arr + 2,...) ではなく、xxx(arr, 2,...) のように書くのはインタプリタ言語
に多い書き方だから。
2020/10/14(水) 16:49:10.93ID:fAfIBrSZ
>>161
いや伝わってるよ
配列と個数で渡す方式と、始点と終点で渡す方式で
引数の個数に違いが出るという100におまえさんは反応してて
しかも引数の個数を減らす例を示そうとしてた(そしてミスった)

>>162
コンパイラ方式というよりCの影響を受けた言語ってことだね
そうでない言語では配列+整数はSYNTAX ERRORかvalarrayのような話で
2020/10/14(水) 16:53:34.15ID:lJFXTbVx
>>163
あなたの言っていることは、理解できないので議論を終えることにします。
逃げているのではなく、意味が分からないので。
2020/10/14(水) 17:07:55.33ID:fAfIBrSZ
結局、配列と個数で渡す方式が、始点と終点で渡す方式よりも
優位であることを示すのを諦めたわけだね

示せるわけがないという俺の予想どおりだわ
2020/10/14(水) 17:14:10.14ID:lJFXTbVx
>>165
いや、十分に示せているはずなのに、このスレでは頑なに理解して貰えないだけです。
167デフォルトの名無しさん
垢版 |
2020/10/14(水) 17:15:40.91ID:+cbHRaf/
「我はSTLを超える者なり!!」などと初心者が言い出してビックリしたわ。
2020/10/14(水) 17:32:06.99ID:EoVZjJO9
これだけくだらない問題に白熱してる時点でセンスがない
2020/10/14(水) 17:36:09.65ID:fAfIBrSZ
>>166
で、配列と個数で渡すことで、始点と終点より引数の個数は減ったのか?
2020/10/14(水) 17:37:36.44ID:RddNL28g
だよね
どの話題に食いつくかでそいつの能力がわかる
このスレの老害はどうでもいいレベルの話を延々語る
171デフォルトの名無しさん
垢版 |
2020/10/14(水) 17:42:38.61ID:ZV1nncqg
>どの話題に食いつくかで

自称数学者の発想ですね判ります
2020/10/14(水) 17:48:04.39ID:4qg33D8d
131見るとわかるけど
コピペや置換する発想すらない人がstlの利点とか理解できるわけないし
2020/10/14(水) 17:55:52.69ID:lJFXTbVx
>>169
外国の人?
引数の個数が減るとは一言も言ってない。
引数の記述上の長さが減り、分かり易さや間違いにくくなるといっている。
さんざん同じ事を言っているのに、全く違うことを言ったことになってしまっている。
2020/10/14(水) 18:23:42.32ID:lJFXTbVx
機械翻訳して、長さと個数が混乱して訳されてしまっているのだろうか。
2020/10/14(水) 18:53:52.73ID:qpMvVLdo
>>147
数学で言う関数は関数型じゃないよ。
写像とか勉強したら?
2020/10/14(水) 19:16:14.41ID:fAfIBrSZ
>>173
> fill(dim, 2, 98, 0); //引数4個
> 98は個数だと認識して書いた。

間違いにくいとか、間違えやすいとか、
それはおまえさんの個人的なことじゃねえかよ

配列と個数で渡すのが、始点と終点で渡すことよりも
優位だというのは、おまえさん個人が間違いにくいってことか?

言うまでもないが、俺は間違えずにコード示してて
間違えたのはおまえさんだけだぞ
それを一般論として優位ということにはできんだろ
2020/10/14(水) 19:16:18.40ID:qpMvVLdo
この手の配列の話でrangeが出てこないのはなんで?
最近の標準には疎いけど、この手の問題のほとんどがboost::rangeで解決しない?
178デフォルトの名無しさん
垢版 |
2020/10/14(水) 19:18:22.41ID:d5S3+KHs
@std::list<Path>* pathListをソートするとします…。
Aどっかのメソッドは…void sort(std::list<Path>* pathList)で受けるとします…。
B内部で以下のようにソートするとします…。
pathList->sort([](Path& o1, Path& o2) {
if(o1.getFileName().compare(o2.getFileName()) < 0) {
return true;
} else {
return false;
}
});

このときに!Aメソッドで…void sort(std::list<Path>*& pathList)
としておかないと…なんか気持ち悪いんですが…
なんで参照の値渡しstd::list<Path>*だけで大丈夫なのかメモリアドレスまでは
僕は把握してません…参照の値渡しだけで行くだろうけど…なぜ大丈夫なのか説明できません…。

誰か…。
2020/10/14(水) 19:19:42.63ID:fAfIBrSZ
>>174
長さと個数の混同は「先頭アドレスを渡す」って前提で起きることだよな
dim + 2という例を示したら見事に思う壺にハマるやつがいてワロタ
2020/10/14(水) 20:10:37.92ID:qrfIlgcS
>>178
日本語でどうぞ
2020/10/14(水) 20:23:03.09ID:j1TiW1+l
伝統的なバッドノウハウ
「ニワカなやつほど語りたがる」
ID:lJFXTbVxのことね
2020/10/14(水) 20:37:36.49ID:fAfIBrSZ
俺も本当はもっとおとなしく話すつもりだったのに
エキスパートとかプリティ発言するから予定外にいじめっちゃうのを余儀なくされたのよ
2020/10/14(水) 20:49:16.68ID:+PdAwU8N
Go や Rust でスライスを言語の基本要素として取り入れたのは
ポインタでやりくりするのが (少なくとも今となっては) あまりイケてない方式
という判断があってのことなんだろうな。
2020/10/14(水) 20:55:00.69ID:j1TiW1+l
ポインタこそが大事
ポインタこそが肝心
Cで一番大事なのはポインタ
C++は知らん
2020/10/14(水) 20:55:45.47ID:z3Ys6y55
>>178
俺はお前さんの文章が「なんか気持ち悪い」よ。
話し言葉もそんな感じなのか?
186デフォルトの名無しさん
垢版 |
2020/10/14(水) 21:04:32.42ID:EoVZjJO9
>>178
https://ideone.com/x1NTqd
std::list<Path>& pathList
でいいじゃん.なぜ
std::list<Path>* pathList
なんだ?
2020/10/14(水) 21:27:18.64ID:eS9CcskG
>>116
なんじゃそりゃ;;
>>116は周りが死ね言うたら死ぬんか…?
2020/10/14(水) 21:35:17.95ID:4qg33D8d
>>178
ポインタの値自体はコピーされるけどその指してる先は同じだから
189デフォルトの名無しさん
垢版 |
2020/10/14(水) 23:24:35.72ID:ssGc8zMA
>>137
aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx_NUM]

これのラッパークラスとかは作らんの?
2020/10/15(木) 00:28:14.53ID:ecxFi3He
begin, lengthでなくてbegin、endになっているのは
具体的に言えばNULL終端の文字列みたいなものにでもゼロコストで対応できるからでしょ
わかりやすさ〜とかそういう感覚的なもの以前の話として、
length案は共通インタフェースを定める目的にあってない
既に上に何人かが同じ内容を書いてるけどなぜわからんかな
2020/10/15(木) 01:29:04.51ID:z3OAjGAN
>>ID:+cbHRaf/
>>120には言い返して来ないんだなww
2020/10/15(木) 06:05:35.87ID:qGtCPYoD
>>187
で、おまえさんの周りには値引数にconstつけてるバカはいたのか、いなかったのか、どっちだ?
2020/10/15(木) 07:48:07.21ID:8g5pkzoR
初心者はぼくちんのコードさえ短くわかりやすくなればそれでいいしそれが正しいと考えがちなので
共通インターフェースの必要性とか重要性は理解以前に想像もできないんだよね
その辺を教え込むのはたいへんだ
2020/10/15(木) 08:40:54.84ID:Rskl+IBz
STLは共通インターフェースの策定の失敗例。
2020/10/15(木) 09:24:37.63ID:vnecXNks
配列ではポインタがイテレータとして機能するし、イテレータとしての要件を満たしてもいる。
そうなるようにデザインされたのは自明だな。

ポインタに合わせて統一したのが全面的に良いとは言えないのかもしれないが、
イテレータの枠組みに配列やポインタを含まないデザインにするというのは
C++ の立場からするとありえない選択でもあるし、
要するに「仕方ない」としか言えんわ。
2020/10/15(木) 14:12:18.99ID:kscRf0sZ
autoないときはイテレータめんどくさかったけど今は別になあ
2020/10/15(木) 14:25:43.71ID:btt8eLo1
もうautoなしでは書けんわ
2020/10/15(木) 15:41:54.19ID:qGtCPYoD
catch(nested_exception& nx)
{
auto C2065_p = dynamic_cast<C2065_t*>(&nx);
auto C2146_p = dynamic_cast<C2146_t*>(&nx);
auto C2653_p = dynamic_cast<C2653_t*>(&nx);
auto C2672_p = dynamic_cast<C2672_t*>(&nx);
}
2020/10/15(木) 17:12:09.30ID:lq1gR0YQ
lengthなんて数行で実装できるじゃんw
自分用のテンプレに入れときゃ解決w
2020/10/15(木) 17:13:29.26ID:ecxFi3He
std::distance
2020/10/15(木) 17:23:04.67ID:qGtCPYoD
ワロタ
2020/10/15(木) 18:27:46.64ID:ZxgioYKc
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
↑この時点で手遅れレベルで腐ってるのは誰も指摘してやらないんだなw

>>192
> 値引数にconstつけてるバカ

お題スレで答えてるやつにおったわ
みんなに空気として扱われてたけど
203202
垢版 |
2020/10/15(木) 18:29:24.72ID:ZxgioYKc
俺は>>187じゃなくて横からね
いちおう断っておく
204デフォルトの名無しさん
垢版 |
2020/10/15(木) 19:32:56.49ID:o1whfqB0
思ったほど落ちてなかった
205デフォルトの名無しさん
垢版 |
2020/10/15(木) 19:51:50.58ID:o1whfqB0
>>202
手遅れだからそっとしといた
2020/10/15(木) 20:52:33.99ID:qGtCPYoD
>>203
はいはい横ねー
207デフォルトの名無しさん
垢版 |
2020/10/15(木) 21:25:48.32ID:+lHmSCSK
エディタでは中核のデータであろう文字列の配列が
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
っていう名前で、しかもそれとは別に
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx
みたいな、また別の文字列配列が存在する世界観なんでしょ

しかもそれぞれにどういうワケか
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx_NUM
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx_NUM
みたいな定数がdefineされている

それらの配列は
aXxxxXxxxXxxxXxxxXxxxXxxx_NUM
で統一されているわけではない
208デフォルトの名無しさん
垢版 |
2020/10/15(木) 21:33:12.16ID:+lHmSCSK
「変数名を長くすればSTLの書き方ではとても長くなるので、STLの書き方はダメです」
と言うためだけにわざわざ作られた長い名前だから、名前が長い

ダメと言うためにわざわざ作られたダメな例なんだから、そのリクツの中ではSTLがダメなように見えるのは、彼の中では当然だよ
だってダメになるように作られたダメな例だもん
2020/10/15(木) 22:14:19.51ID:LO3W6bS9
頭おかしいのがまた湧いてるな
2020/10/16(金) 05:15:42.21ID:3AzgsKTP
値引数にconstつけてても別にいいと思うけどね
コピーで渡してなおかつconstであることを明示したいなら
むしろconstで引数渡さないって言いはるのは思考停止のバカ
2020/10/16(金) 06:18:41.00ID:y0b2R3Tf
同意
自分はそれ思いつつも、文法上の、狭い関数内だけでのバグ抑止以上の価値は無いだろうと考えて、やってないけど
あえてやってる人が居てもバカにしようとは思わない
2020/10/16(金) 06:43:39.95ID:5553rdQz
>>210
仮引数は変更しないって前提で思考停止してるのはお前だよ
void fill(int* first, int n, int val)
{
while (n--) *first++ = val;
}
関数の定義を別の翻訳単位に分離したら
それこそ定義かくやつだけの問題で
const付けろ付けるなと騒いでも他人の仕事に口出すなってだけ

おまえらと違ってこちとらおまえらごとき論破するのに侮辱語はいらねえ
2020/10/16(金) 06:57:04.56ID:3AzgsKTP
>>212
関数定義について言ってるに決まってるだろ
変更しないっていう前提で固定してるわけじゃないし
妄想激しいね
2020/10/16(金) 07:10:15.57ID:5553rdQz
日本語でおk
2020/10/16(金) 07:21:08.18ID:3AzgsKTP
そうやって僕ちゃんが正しいんだ!
あいつはくそだ!
って一生逃げ回ってろカス
2020/10/16(金) 07:35:25.34ID:5553rdQz
捨て台詞にしちゃ迫力も何もねえなw
2020/10/16(金) 09:55:58.36ID:6oF3ghE4
>>211
同感。いうほど意味はないけどまあ悪いことではないよな、みたいな感覚
2020/10/16(金) 10:02:26.25ID:hiR4Fq2K
>>216
小学生が「やーい、おまえのかーちゃん出べそ」って言うのと似たような感じだな。
昭和の漫画の中にしか存在しないけどw
2020/10/16(金) 12:45:32.25ID:5553rdQz
絵に描くとこんな感じだなw
https://image.middle-edge.jp/medium/e5bfb87b4c39b4617142493862b64455.jpg
2020/10/16(金) 13:05:10.30ID:E37X09wd
今ゲーム開発に向いてるライブラリってなんですか?
これまでdxlibとsiv3dは使ったことありますが今の主流が知りたいです
221デフォルトの名無しさん
垢版 |
2020/10/16(金) 13:42:16.84ID:CKS46Mg3
UE4
2020/10/16(金) 13:45:36.97ID:RKtFr9bS
2次元で良ければ
ama損.co.jp
dp/4899774451
dp/4899775067
dp/4899774117
2020/10/16(金) 14:02:19.57ID:oFLj+i8c
EASTL
2020/10/16(金) 15:10:49.53ID:y0b2R3Tf
>>223
本気で言ってんの?
225デフォルトの名無しさん
垢版 |
2020/10/16(金) 15:15:51.65ID:3AzgsKTP
SFML
2020/10/16(金) 15:18:07.81ID:3AzgsKTP
SDL2 + OpenGL
2020/10/16(金) 16:22:38.33ID:5553rdQz
>>220
ゲームの内容による
Xウイングでタイファイターと戦うようなのもあれば
将棋やウォーゲームみたいのもある
2020/10/16(金) 17:53:05.24ID:y0b2R3Tf
>>227
dxlibとsiv3dに代わるものはあるかと聞かれてんのに的外れ
知ったか乙とでも言って欲しいのか
2020/10/16(金) 17:53:07.57ID:gzagFIoh
>>224
冗談で言ってるとでも?使ったこともないくせに。


俺はないよ
2020/10/16(金) 17:57:48.24ID:8wgq9mv1
>>220
C#に浮気してUnityという手もある。
といっても扱ったの6年前(大学生の頃)だから現ゲーム業界事情は詳しくないが。

てか、この手の質問がでてきたということは、現状の開発に限界を感じているということでは?
2020/10/16(金) 17:58:03.44ID:y0b2R3Tf
知ったかこいてマウント取るしか出来ないアホばっかだな
EASTLがレンダリングとか担ってくれるのかよ
2020/10/16(金) 18:00:30.56ID:gzagFIoh
冗談か通じない奴だな…
2020/10/16(金) 18:04:19.22ID:y0b2R3Tf
嘘つけ

>>220
てかDirectXスレかゲ制作技術板行った方がいいよマジで
ここに住み着いてるのはまともにソフト書き上げたことすら無い奴ばっかだから
2020/10/16(金) 18:14:08.55ID:8wgq9mv1
DirectXって...
ゲーム作る以前に、車輪の再発明して終わりそう。
2020/10/16(金) 18:14:09.24ID:+fSNMqF3
>>228
よく読めよ。
「主流が知りたい」だろ。
代わるものじゃない。
2020/10/16(金) 18:21:09.26ID:y0b2R3Tf
ライブラリの主流は何か=dxlib等に代わるもの、だと思ったんだが
まぁそもそもC++で一から作りたいのか勉強がしたいのか、単に趣味でゲーム作りたいのかわからんから
何とも言えないけど
2020/10/16(金) 19:19:09.58ID:a9PKFHNt
これ以上話も続かなそうだからボカすけど
俺はそれこそがすっごいアホっぽいと思う
C++で言うとイテレータのインクリメントをi++で書いちゃってるのより
必要も無いのにnewしてdeleteしてるのより
それよりももっと恥ずかしいと思う
2020/10/16(金) 20:16:18.37ID:VgjMdtJh
C++/WinRTやってる人いる?
ここの人達はあまりWindows好きじゃないかな
2020/10/16(金) 20:17:19.97ID:YHv0PA1W
winはやまほどいるだろうけどrtは全然おらんのじゃないか
2020/10/16(金) 20:45:00.91ID:VgjMdtJh
だよね
ちょっと自力でがんばってみる!
2020/10/17(土) 01:31:18.67ID:P3PLPttw
>>227
バカのくせに思慮深さを見せようとしてんじゃねえよw
結局オナニーしかできないんだな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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