X



C++相談室 part153
レス数が1000を超えています。これ以上書き込みはできません。
0002デフォルトの名無しさん
垢版 |
2020/10/11(日) 00:17:54.48ID:yrSMEX+0
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0003デフォルトの名無しさん
垢版 |
2020/10/11(日) 07:46:00.50ID:2CDQ3L3B
>>1
乙。
0004デフォルトの名無しさん
垢版 |
2020/10/11(日) 07:49:37.39ID:eYoRN2yM
>>1
このほとんど投げやりな感じのテンプレがじつにいい
いかにもC++っていう感じがして好き
0005デフォルトの名無しさん
垢版 |
2020/10/11(日) 07:52:39.24ID:2CDQ3L3B
などと自画自賛。
0006デフォルトの名無しさん
垢版 |
2020/10/11(日) 09:59:16.21ID:kZXFoyze
stdafx.h include したら負け
0008◆QZaw55cn4c
垢版 |
2020/10/11(日) 16:35:47.97ID:sJNU+9dX
>>https://mevius.5ch.net/test/read.cgi/tech/1594528940/914
>普段から、馬鹿な応答が多かったし、

認めましょう

>「自分でコンテナクラス(リストなど)を作れるから天才」
>だとか、男だったら基本中の基本の出来て当たり前の事が出来るだけで天才と言っている

そんな発言はしていませんよ、確かにコンテナを自作する、というのはやったことはありますが、「自分でつくるとイマイチだよね」というのが私の実感です
https://mevius.5ch.net/test/read.cgi/tech/1434079972/33

>如何に周りのレベルが低いかが分かったから。

周り?
私はアマチュアだから、周りにプログラミングをする人はゼロですよ……
0012デフォルトの名無しさん
垢版 |
2020/10/12(月) 02:50:13.21ID:+FLMYxu9
QZ数ヶ月前俺にスルースキルが無いとか偉そうに言ってなかったっけ
C++に関わる話なら個人的には荒れててもいいと思うが、お前のプロフィールなんか誰も興味ないぞ
0013デフォルトの名無しさん
垢版 |
2020/10/12(月) 09:52:20.31ID:941JO02h
>>12
ttps://mevius.5ch.net/test/read.cgi/tech/1601271690/125
0014デフォルトの名無しさん
垢版 |
2020/10/12(月) 09:57:09.05ID:O4GtI7oq
>>13
それは仕方ないんじゃないかな。
人間だもの。
0016デフォルトの名無しさん
垢版 |
2020/10/12(月) 12:54:31.37ID:GHsqP2MR
今とあるOSSのライブラリの動きがあやしいのでデバッグしているんだけど
やっぱりいわゆるモダンなc++はデバッグがつらいわ
デバッガで見てもwrapの嵐でデータの中身になかなかたどり着けない
ステップ実行しててもRAIIをはじめ表面上見えない実装がノイズになってわけわかんなくなる
あとデバッグビルドは恐ろしくパフォーマンス落ちる(Cとかと比べてね)
0017デフォルトの名無しさん
垢版 |
2020/10/12(月) 14:12:21.06ID:941JO02h
C++ より C が良いね
0018デフォルトの名無しさん
垢版 |
2020/10/12(月) 15:18:22.15ID:Z3Kcjb2S
STLの unique_ptr, shared_ptr, vector, list, forward, move
といった非常に基本的なものもソースを解読するのはとても難しく
strcmpが3行くらいしかなかったのが懐かしい。
それにC++11以降の機能は非常に好みが分かれ、好きな人は好きだが
嫌いな人は反吐が出るほど嫌い。
0019デフォルトの名無しさん
垢版 |
2020/10/12(月) 15:23:21.42ID:N0jxybIn
Ubuntu20.04でGtkmmでアプリを作っています…ディレクトリとファイル一覧が欲しくて…。
C++17のstd::filesystemを使ったほうがスマートだと思うけど…使えません…。
そんな古い環境ではないと思うんだけど…direntやstatをやればできると思うけど…古いよね?
これカーネルだし…std::filesystemがスマートだと思うんだけど…このUbuntuではまだなの?
-std=c++17のオプションをつけてコンパイルしても駄目だった…。
0020デフォルトの名無しさん
垢版 |
2020/10/12(月) 15:27:01.65ID:O4GtI7oq
Ubuntuはgcc9使えたんじゃなかったかな。
gcc8はファイルシステム使うとき、ライブラリをリンクしないといけなかったと思う。

-lstdc++fs

gcc9から必要なかったと思うので、gcc9を使う方をお勧めします。
0021デフォルトの名無しさん
垢版 |
2020/10/12(月) 16:15:10.34ID:N0jxybIn
できました!できました!できましたが…EclipseCDT上で…名称が解決できてない感じ…。
とりあえず…動きました…もう少し調査します…。
0022デフォルトの名無しさん
垢版 |
2020/10/12(月) 16:27:02.58ID:N0jxybIn
名称も解決できました…使うよ!
0023デフォルトの名無しさん
垢版 |
2020/10/12(月) 16:56:02.38ID:941JO02h
>>18
速度も落ちてそう
0024デフォルトの名無しさん
垢版 |
2020/10/12(月) 19:26:54.38ID:Z3Kcjb2S
>>23
メタプログラミングの部分が複雑なだけで生成されるコードは最短に近い
のではないかと思う。
0027デフォルトの名無しさん
垢版 |
2020/10/12(月) 20:50:41.81ID:O4GtI7oq
文芸的プログラミングですね。
0028デフォルトの名無しさん
垢版 |
2020/10/13(火) 02:00:34.30ID:y5TdNrxl
>>25
STLの性能を維持しつつ簡潔に書ける人間
にしか許されない発言
0029はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/13(火) 03:46:05.57ID:jBq+pHZV
汎用的な部品は広い範囲をカバーするわけだから想定すべき状況が多くなるし、
その分だけ相応に複雑になるのは当たり前の話なんだよな。

逆に strcmp が簡潔だったとか言ってもそりゃあ char から成る文字列の比較に
特化していいなら簡潔に出来て当たり前ですよねってだけのことで、
機能が違うものの複雑さを比べようとするのは馬鹿馬鹿しいよ。
0030デフォルトの名無しさん
垢版 |
2020/10/13(火) 07:14:55.86ID:AAkThgLB
・同名の一時変数を使いまわす
・メモリの節約のために早めにデストラクタを呼ぶ
・スコープを小分けにして可読性を上げる

みたいな目的のために中括弧を多用するのってアリですか?
それともスコープじゃなくて関数を分けろってなりますか?
0032デフォルトの名無しさん
垢版 |
2020/10/13(火) 09:19:57.42ID:2ekPMyol
STLガーSTLガー言ってるやつ
そもそも++でないCでもポインタ引数2個で始点終点渡すのがロクに書けなさそうだね
0033デフォルトの名無しさん
垢版 |
2020/10/13(火) 09:53:49.84ID:f6jDEgc3
STLの凄さがわからない人もいるという。
0034デフォルトの名無しさん
垢版 |
2020/10/13(火) 10:50:05.42ID:y5TdNrxl
知ってることの精一杯がポインタのそれなんだな
クスクス
0035デフォルトの名無しさん
垢版 |
2020/10/13(火) 12:20:09.76ID:2ekPMyol
void fill(int first[], int last[], int val)
{
while (first < last) //えー、配列の大小比較って変じゃん
{
first[0] = val; //常にゼロの添え字って気持ち悪いよー
++first; //やだよー、配列を++なんて
}
} //これだから変態どもは・・・まったく

void fill(int first[], int n, int val) //素直にこう書きやがれ
{
for (int i = 0; i < n; i++) //変数が増えることを気にしないのが富豪だ
{
first[i] = val; //配列要素へのアクセスには[]があるべきなんだよ
}
} //知ってることの精一杯がポインタのそれなんだなksks


もうさ、こいつ無理にC++使わなくてよくね?
003731
垢版 |
2020/10/13(火) 12:48:18.65ID:alJhtdGu
いや、あの・・・
STL自体は非常に良く出来てると思うが、俺普段C++(あるいはC++11以降)マンセーSTLマンセーしてる連中は馬鹿にしてるからね・・・w
お前が作ったんちゃうやろと
0038デフォルトの名無しさん
垢版 |
2020/10/13(火) 12:50:17.06ID:FpFGKRx+
void fill(int *first, int *last, int val)
{
while(first < last) *first++ = val;
}
0039デフォルトの名無しさん
垢版 |
2020/10/13(火) 12:52:08.93ID:jGpIs/AO
理解は出来ないわけじゃなくSTL流に書くのが汚くて馬鹿みたいに感じるだけだ。
0040デフォルトの名無しさん
垢版 |
2020/10/13(火) 12:54:03.28ID:jGpIs/AO
配列は処理対象を個数で表現するほうが分かり易いし完結なのに、終端要素で
表そうとするのは単にSTLのとった設計思想の都合でしかないので
馬鹿っぽく感じる。
0041デフォルトの名無しさん
垢版 |
2020/10/13(火) 12:56:47.00ID:2ekPMyol
>>37
C++11の何が気に入らんの?
C++98でストレス溜まってたところを楽にしてくれてるやん
型指定子autoは同じことを二度も書かされる屈辱から解放してくれるし
range-based-for-statementの見た目からは驚かされる簡潔さなんかクールだろ
俺的にはテンポラリにconstが必須でなくなって痒いところに手が届いた
0042デフォルトの名無しさん
垢版 |
2020/10/13(火) 13:17:38.74ID:y5TdNrxl
@
void fill(int first[], int n, int val) //素直にこう書きやがれ
{
for (int i = 0; i < n; i++) //変数が増えることを気にしないのが富豪だ
{
first[i] = val; //配列要素へのアクセスには[]があるべきなんだよ
}
} //知ってることの精一杯がポインタのそれなんだなksks



A
void fill(int *first, int *last, int val)
{
while(first < last) *first++ = val;
}

明らかに配列添字明示してる@のほうが無駄が多くて馬鹿っぽいけど
0044デフォルトの名無しさん
垢版 |
2020/10/13(火) 13:32:32.38ID:alJhtdGu
>>41
別に気に入らんとか言うとらんよvariadic templates無しの時代はキツかったし(逆に言えばテンプレート以外ではそんなに困らん)
新しいもの使ってる=上級者、だと思ってるような、権威を傘に着てる連中を馬鹿にしてると言ったの
マンセーとかの辺りで察してくれ
0045デフォルトの名無しさん
垢版 |
2020/10/13(火) 13:43:16.33ID:jGpIs/AO
伝統的にはこうで、速度も速い。
void fill(int *ptr, int n, int val)
{
 for (int i = 0; i < n; i++) {
  *ptr++ = val;
 }
}

さらに、以下のように書くほうが速い。
void fill(int *top, int n, int val)
{
 int *ptr = top;
 for (int i = n; i > 0; --i) {
  *ptr++ = val;
 }
}
0046デフォルトの名無しさん
垢版 |
2020/10/13(火) 13:47:15.59ID:jGpIs/AO
>>42 >>43
fill()関数自体はどれでも分かりにくさは感じない。
問題はfill()関数を使う側の分かりにくさ。
btmで終わりを示す方式だと多くの場合、個数numに対して
fill(first, first + num, val);
のようにしか書けないことが多い。
0047デフォルトの名無しさん
垢版 |
2020/10/13(火) 13:49:44.76ID:2ekPMyol
>>44
新しいものって現行規格に従っただけで馬鹿呼ばわりか? ブーメランだろ
何を基準に新しいとか古いとか言ってるの?
俺に言わせりゃK&R1で憶えた立場からはC89でさえ新しいんだが
0048デフォルトの名無しさん
垢版 |
2020/10/13(火) 13:52:16.91ID:jGpIs/AO
>>46
Ruby, Perl, Python, JS, BASIC のどれでも、配列の処理範囲を示すのに
個数のパラメータを持っている。C言語でも、memcpyやmemcmpは、
memcpy(ptr1, ptr2, num)
memcmp(ptr1, ptr2, num)
であった。
numは、ptr1, ptr2 に共通の要素数なので1,2に対称性があり、とても分かり易いが
STLの流儀に倣って書き直すなら
memcpy(fisrt1, btm1, fisrt2, num)
memcmp(fisrt1, btm1, fisrt2, num)
となってしまうだろう。
この場合、btm1は「1」の終端であるが、「2」とは関連が分かりにくく、
「対称性」が失われている。
だから汚く見える。
0051デフォルトの名無しさん
垢版 |
2020/10/13(火) 13:56:07.20ID:jGpIs/AO
>>45
速度効率をさらに高めたいなら、
void fill(int *top, int n, int val)
{
 int *ptr = top;
 int *btm = top + num;
 while(ptr < btm) *ptr++ = val;
}
と書いても良い。
なので、fill()の内部的な処理効率自体はいくらでも速くできる。
問題は、fill()を使う側の利便性や分かり易さや対称性(=美しさ)。
0053デフォルトの名無しさん
垢版 |
2020/10/13(火) 14:14:12.35ID:2ekPMyol
>>51
void fill(int* first, int* last, int val)
{
while (first != last) *first++ = val; //nがなきゃtop+nなんて計算そもそもいらん
}
呼び出し側でfill(first, last - first, val)なんてやられた日にゃ引いてから足し直すことになるだろ
0054デフォルトの名無しさん
垢版 |
2020/10/13(火) 14:19:38.29ID:FpFGKRx+
これはダメなんか遅いんか
void fill(int *first, int *last, int val)
{
while(first != last) *first++ = val;
}
0055デフォルトの名無しさん
垢版 |
2020/10/13(火) 14:44:57.22ID:jGpIs/AO
>>53
>呼び出し側でfill(first, last - first, val)なんてやられた日にゃ引いてから足し直すことになるだろ

それは屁理屈と言うか、もしあなたが頭のいい人なのに本気でそう思っているなら
机上の空論というか、実際のアプリ作製の経験が足りないと思われる。
ほとんどの場合、配列の処理範囲はlastではなく個数のnumの方が便利。
lastは割り出すのにワンクッション手間が増えてしまう。
0056デフォルトの名無しさん
垢版 |
2020/10/13(火) 15:08:27.75ID:f6jDEgc3
初心者がSTLを批判してもダメだろ。
0057デフォルトの名無しさん
垢版 |
2020/10/13(火) 15:19:48.82ID:f6jDEgc3
キミたちが言いたいのは、事前に個数がわからないのに関数を呼び出せるのはオカシイって事だろ?

STLは事前に個数がわからないにもかかわらず、関数を呼び出せてしまう。
これはストリームの機能ではないか?
オカシイ!と。

それは、呼び出せる方が汎用性があるんだよ。
全然オカシクない。
0059デフォルトの名無しさん
垢版 |
2020/10/13(火) 16:14:05.11ID:jGpIs/AO
>>57
そういう問題じゃない。
利便性が損なわれているから批判しているだけ。
論理的に正しいかどうかではなく、便利かどうかの観点。
0061デフォルトの名無しさん
垢版 |
2020/10/13(火) 16:21:31.28ID:jGpIs/AO
>>60
なんでこんな汚いライブラリに慣れなきゃならないの。
C++委員会がプログラマの思想を強制する権利は無い。
0063デフォルトの名無しさん
垢版 |
2020/10/13(火) 16:48:01.34ID:2ekPMyol
>>55
標準のcopy関数もロクに知らないくせに・・・いや、これは置いとく

では、おまえさんは配列の終点をどのように渡すんだ?
int main()
{
int dim[100];
fill(dim, /*ここ*/, 0);
}
0064デフォルトの名無しさん
垢版 |
2020/10/13(火) 16:49:01.87ID:zWj2VWPf
同値比較はコストがかかるケースもあるんじゃないですか?
要素数を指定するほうが処理コストが抑えられるような気がします
素人意見ですみません;_;
0065デフォルトの名無しさん
垢版 |
2020/10/13(火) 17:13:32.12ID:FpFGKRx+
配列だから話がややこしくなるんで
リストだったらどうみても始点終点やろ
インターフェースを合わせるために
配列も始点終点にしただけやろ
0066デフォルトの名無しさん
垢版 |
2020/10/13(火) 17:16:38.67ID:jGpIs/AO
>>65
リストでも繰り返しなら個数でもいける。

>>63
終点ではなく、個数で渡す:
fill(dim, 100, 0);  // めちゃくちゃ分かり易い。

fill(dim, dim + 100, 0);  // めちゃくちゃ不便。何このタイピング量。
0067デフォルトの名無しさん
垢版 |
2020/10/13(火) 17:19:05.56ID:jGpIs/AO
しかも問題なのは、vectorの中ほどで追加や削除をしても、終点が自動修正されないこと。
それでは始点と終点で管理している意味が無い。
listならいけることはいけるが。
しかし、結局、vetorとlistの違いを意識しなければバグることになる。
0072デフォルトの名無しさん
垢版 |
2020/10/13(火) 18:08:23.24ID:2ekPMyol
>>66
ズコー(aary

↓こんなコード書いたらバカにしまくってやろうと思ってたのに
#define N 100
int dim[N];
fill(dim, N, 0);

その下をいきやがったw
マジックナンバーって言葉知ってる?
0073デフォルトの名無しさん
垢版 |
2020/10/13(火) 18:42:42.89ID:f6jDEgc3
レベルが低すぎて議論するだけ無駄なので、この話題はこれでお終いにしてはどうだろか。
0074◆QZaw55cn4c
垢版 |
2020/10/13(火) 20:06:42.81ID:455DutI7
>>41
>C++11の何が気に入らんの?

右辺値 && が……
よくわかりません

RVO 前提コードで私は妥協しているのですが
0077デフォルトの名無しさん
垢版 |
2020/10/13(火) 22:53:46.89ID:mhza1+DZ
>>35
×: void fill(int first[], int n, int val) //素直にこう書きやがれ
○: void fill(int first[], const int n, const int val) //素直にこう書きやがれ
0078デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:00:47.08ID:1+uImEGd
個数不定や個数を数えるのがハイコストでも走査できたり、実在しないアドレスや好きな値でも番兵値として指定できたりするのがlast指定のifのメリットなんじゃね?

マップから取得した項目から走査したいとか、項目ごとにサイズが異なる連続データをメモリから読み出すとか、はたまたインタラクティブにユーザが終了指示するまで繰り返すとか。

個数指定のifもあれば便利だけど、どちらかを選択しないといけないなら、last指定のifだけ存在するほうがダメージが少ない


気がする
0079デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:07:21.55ID:jGpIs/AO
>>78
もちろんそうなんだが、STLは馬鹿なので、そういう役目はほぼ果たしてない。
証拠として、途中の要素を削除してしまうとlastが全く意味を成さなくなるから。
0081デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:27:15.76ID:SS1TQwr/
流れ全部読んでないけど上のほうで言ってる人がいるように
> void fill(int *first, int *last, int val)
を見た時点でCやってる人間からしたら関数内部が
> while(first < last) *first++ = val;
こう簡潔になってるだろうと想像しやすくてスッキリしてない?
別に想像する必要は無いんだけど想像してしまうというか

あと開始がポインタで終わりもポインタってのは対称的で良いと思う
> fill(dim, dim + 100, 0); 
これも上記の理由により気にならない
このわずかなタイピング量すら気になるんなら
そのソースコードには多分他の問題がある
0082デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:50:29.75ID:jGpIs/AO
>>81
>あと開始がポインタで終わりもポインタってのは対称的で良いと思う
良くないよ。
その対称性は不要。
むしろ copyするときに dstとsrcの対称性がなくなることの方がずっと問題。
なぜなら間違い易いから。
それに
 fill(dim, dim + 100, 0); 
と書くときも dimの部分にケアレスミスが生じ易く、たとえば、
 fill(dim1, dim2 + 100, 0); 
と書いてもコンパイルエラーにはならないが結果は重大である。
0083デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:51:31.80ID:jGpIs/AO
>>82
誤: と書くときも dimの部分にケアレスミスが生じ易く、たとえば、
正: と書くときも dim + 100 の部分にケアレスミスが生じ易く、たとえば、
0084デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:56:23.05ID:SS1TQwr/
>  fill(dim1, dim2 + 100, 0); 

そう間違えちゃう人は
fill(dim1, dim1 + 200, 0);
fill(dim1, dim1 + 100, 2);
fill(dim2, dim1 + 100, 0);
とも間違っちゃうから大変だね
そういう人は何より
fill(dim2, 100, 0);
の表記を使いたいんやろね
何か分かったわ
0085デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:58:38.02ID:BWJh5EXt
全然別のコンテナのイテレータを混ぜて指定できてしまうのは確かに欠点なんだよね
だからRangeが必要だったんですね
0086デフォルトの名無しさん
垢版 |
2020/10/14(水) 00:11:56.45ID:lJFXTbVx
>>84
あなたの脳内にはプログラミングのセンスの様なものがまだ育ってない。
そういう人ばかりがC++委員会にいるので
「机上の空論的な設計」
と言われるようになっている。
0087デフォルトの名無しさん
垢版 |
2020/10/14(水) 00:20:29.03ID:lJFXTbVx
>>86
それに、先頭アドレスと長さを組にするというのは、プログラミングにおける
伝統になっていてPascal文字列やWin32のバッファの指定などもそれを
踏襲している。
topとbtmを指定する方法は番兵方式ともまた違う、STL独特の方式。
番兵方式はミスが入りにくいが、btmアドレスを指定する方式はbtmに
間違った値をしていた時にとんでも無い結果を生み、バッファオーバーラン
より酷い。
btmにtopとは全く関係の無いとんでもない値を指定できてしまうから。
配列は、0〜N-1までの分かり易い値で位置を指定できることが特徴の一つなのに
STLはそれも破壊してしまっており、範囲チェックも分かりにくくなる。
高級言語なのに、アセンブラより複雑。
アセンブラでは少しでも高速化するためにtop,btm方式が使われたこともあったが、
この高級言語の時代にはそぐわない。
分かりにくい。
0088デフォルトの名無しさん
垢版 |
2020/10/14(水) 00:24:28.14ID:lJFXTbVx
もっといえば、MSがグラフィックで矩形を描くときに、
左上の点と右下の点を指定する方法もセンスが無いといわれている。
これも沢山グラフィックのプログラムをしてくると
左上の点と「サイズ」を指定するのが合理的であることが分かってくるが
経験が足りて無い人には「好みの差」程度にしか認識できない。
それともとても似ている。
0090デフォルトの名無しさん
垢版 |
2020/10/14(水) 00:36:44.29ID:eS9CcskG
つか(sx, sy, width, height)式の矩形表現は
クリッピングとかしだすと結局内部で
(sx, sy, ex, ey)表現に
0091デフォルトの名無しさん
垢版 |
2020/10/14(水) 00:40:01.03ID:eS9CcskG
効率的な番兵法は常にアルゴリズムとともにあるから
  ↓こんなやつ
  while (buf[i] < buf[i]) { std::swap(buf[i], buf[i]); i--; } // buf[0]はINT_MAX

範囲の一般的表現のうちに含めるのは頭おかしい
0092デフォルトの名無しさん
垢版 |
2020/10/14(水) 00:44:56.12ID:W3antmDc
fill(p, p + n, 0);は
fill(p + m, p + n, 0);という表現にもスムーズに拡張できる
個数の場合は
fill(p + m, n - m, 0);って書くことになるね
0094デフォルトの名無しさん
垢版 |
2020/10/14(水) 01:12:33.89ID:qrfIlgcS
>>88
なんで?中心の点とサイズなら分かるけど
ついでに言うと左上右下で矩形表現するのは重なりや画面外は見出しの判定が楽だからそっちの方が便利な場合もある
事情に応じた使い分けを考慮できないあたりが経験足りないっすねあなた
0095デフォルトの名無しさん
垢版 |
2020/10/14(水) 02:21:44.28ID:dCmiKU7l
>>41
>range-based-for-statementの見た目からは驚かされる簡潔さなんかクールだろ
これに対して
>>55
>机上の空論というか、実際のアプリ作製の経験が足りないと思われる。
>ほとんどの場合、配列の処理範囲はlastではなく個数のnumの方が便利。
ここには同意する

実際問題、STLあるいはそれに倣ったコード以外、ソフト開発の場面で
range-basedで簡潔に済むループはそんなに無い(無理矢理書き換えることは出来るとしても)
0096デフォルトの名無しさん
垢版 |
2020/10/14(水) 02:44:00.29ID:EuYzPNma
てか
せっかくC++使ってんのに何故
リストの始点と終点とを別々に渡したり
リストの始点と要素数とを別々に渡したり
とかやりたがるの?
0098デフォルトの名無しさん
垢版 |
2020/10/14(水) 06:42:43.22ID:fAfIBrSZ
>>88
ここC++スレってこと忘れてねえか?
矩形クラス作って右下とサイズと両方使えるようにすれば済む話だろ
0102デフォルトの名無しさん
垢版 |
2020/10/14(水) 08:14:56.28ID:eS9CcskG
>>97
>>97が同じ関数を定義したのだから仕方が無い
>>77は×と○は×を○に修正せよと言う意味であって書き並べよと言う意味ではない
0103デフォルトの名無しさん
垢版 |
2020/10/14(水) 08:25:44.48ID:fAfIBrSZ
>>102
修正せよという主張が誤っていると指摘しているんだ
intというかポインタでも参照でもない値の引数のconstは多重定義において意味を成さない
0104デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:06:12.19ID:+cbHRaf/
完全に初心者のイチャモンで、他の言語も使えて無さそうだから、何か一つやり遂げてみたら良いと思います。
0105デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:18:06.97ID:fAfIBrSZ
具体性のない、更には漠然としすぎて一体何の話かわからんことしか言えないやつこそ初心者だろうが
0106デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:31:01.91ID:eS9CcskG
>>103
関数内で修正しない変数にconstをつけよという当たり前の話、
C++ではCよりも関数引数についてもやりやすくなっているからやったら?
という話ェ、
0108デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:39:06.95ID:aLuhanwR
int引数にconst付ける意味ってなんですか?
値渡しされるのだから関数内で値が更新されても呼び出し元には関係ないこと(関心がないこと)だと思えますが
0109デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:42:59.50ID:eS9CcskG
>>108
>呼び出し元には関係ないこと(関心がないこと)
左様
呼び出し元に見せる宣言文では値渡しのconstは外して良い
C++ならそれができる
Cではできない(constをつけるとしたら定義と宣言の両方に付けねばならない
0110デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:43:23.77ID:lJFXTbVx
>>92
あなたは経験不足だからどちらの方が便利かが分かって無い。
どちらの方式も互いに単純変換できるが、現実のアプリにおいては個数の方が
便利だと言っているのだが、あなたにはそれが分からない。
そういう人達がC++委員会に多くなってきているからC++の仕様が変になって
きていると言われているのだよ。
0111デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:45:58.36ID:lJFXTbVx
>>100
>fill(dim, 2, 98, 0); //引数4個
これは違う。
インタプリタ言語ではこのようになってしまうが、伝統的にはCでは、
fill(dim +2, 98, 0); //引数3個
と書ける。
0113デフォルトの名無しさん
垢版 |
2020/10/14(水) 09:52:34.69ID:eS9CcskG
ていうか>>91まつがえた。n_、
正: while (buf[i-1] < buf[i]) { std::swap(buf[i-1], buf[i]); i--; } // buf[0]はINT_MAX
アウチ、
0114デフォルトの名無しさん
垢版 |
2020/10/14(水) 10:09:01.38ID:lJFXTbVx
>>90 >>94
それはクリッピングする場合のみだ。
しかし、いまのグラフィックライブラリはクリッピングは基本的に自動化されているので
クリッピングをアプリプログラマが自分で行う必要がある頻度はとても低い。
そういうことが優先順位ということ。
ライブラリの良し悪しは優先順位の高い作業が楽に書けるかどうかで決まる側面がある
から経験不足の人は優先順位が分かって無いので良いライブラリはなかなか作れない。
0116デフォルトの名無しさん
垢版 |
2020/10/14(水) 10:52:50.19ID:fAfIBrSZ
>>106
全然当たり前じゃねえよ
値引数にconstはつけねえんだよ
周り見てみろよ
周りがあればの話だが
0118デフォルトの名無しさん
垢版 |
2020/10/14(水) 11:38:41.41ID:+cbHRaf/
「個数のほうが便利で現代的で洗練されている」と言ってる人は、STLが何故このような設計になったのか、全く理解していないので
、公共の場で主張するのはよくないのでは?
0120デフォルトの名無しさん
垢版 |
2020/10/14(水) 11:44:04.35ID:dCmiKU7l
>現代的で洗練されている
誰がそんなこと書いてんだ
てか現代的とか洗練とかアホかと
なぜそうなっているか理解出来てないのはお前、D&Eの日本語版にその辺の話は載ってるから読んでこい
0121デフォルトの名無しさん
垢版 |
2020/10/14(水) 11:53:23.30ID:fAfIBrSZ
標準を盲信しろとは言わない
おかしいと思うことはおかしいと言っていい
いい、つーか歓迎で議論には付き合う
「議論には」な、感情論だの押しつけだの
そういう見苦しいのは相手せん
0122デフォルトの名無しさん
垢版 |
2020/10/14(水) 12:09:10.96ID:lJFXTbVx
>>117
あなたが何も書いてなかったから、98は個数だと認識して書いた。
もし、btm要素であるなら、
fill(dim + 2, dim + 98, 0);
と書くことになるが、このような btm 要素を指定する書き方が現実的な
アプリではコーディング的に非効率な問題のある書き方だと昨日から主張し続けている。
0123デフォルトの名無しさん
垢版 |
2020/10/14(水) 12:15:37.74ID:lJFXTbVx
>>122
なぜかといえば、現実の大規模アプリでは配列の先頭の名前は、もっとずっと長く、
たとえば、aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
のようになっていることが多い。それで昔ながらの C スタイルであれば、
fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, 個数, value);
と書けば済むのに、STLスタイルだと、
fill_stl(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx,
   aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx + 個数,
   value);
のように複数行で書かないといけないハメになってしまう。
そして、aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxxに似た
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx
というような他の変数もあることが多く、そうなると、
fill_stl(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx,
   aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx + 個数,
   value);
のように書き間違えてもコンパイルエラーにならないので非常に重大な問題を巻き起こす。
また、少し修正したい場合、topとbtmの両方を修正しなくてはならないのに、
どちらか片方の
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
だけを
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx
に書き換えてしまって変数名が長いので気づきにくくてどこでバグが入ったか分からない
重大な問題が入り込んでしまうことが有る。
その点、昔ながらのCスタイルではこのような問題が起きないので安全。
0124デフォルトの名無しさん
垢版 |
2020/10/14(水) 12:20:41.76ID:GsUUoEHv
なるほど一里塚
0125デフォルトの名無しさん
垢版 |
2020/10/14(水) 12:23:42.24ID:fAfIBrSZ
>>123
只でさえ長い識別子に名前空間だのスコープだのテンプレート引数がついて読む気なくさせるようなのはよく見かけるね
そういうのはusingでエイリアス作ったり左辺値参照でスコープを狭めたりで対応するのがよくあるケース
auto first = aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.begin();
auto last = aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.end();
とでもやっとけば楽になるのもある

昔ながらのCやC++98にしがみつくのをやめてC++11〜17の新機能を有り難く頂戴することで
色んなストレスから解放される
0126デフォルトの名無しさん
垢版 |
2020/10/14(水) 12:40:03.79ID:ssGc8zMA
>>123
「個数」で誤魔化されてんな
個数でもこうなるんじゃね

fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.size(), value);
0127デフォルトの名無しさん
垢版 |
2020/10/14(水) 12:52:15.34ID:lJFXTbVx
>>126
それは経験的にならないことが多い。
なぜなら、個数は配列自体が覚えているだけでなく、何らかの変数に入っている事がとても多いから。
典型的には、個数はマクロ変数やconst int変数などに入っているか
または、ファイルから読み込んだ場合には読み込んだときの個数が
グローバル変数などに入っている。
0128デフォルトの名無しさん
垢版 |
2020/10/14(水) 12:55:51.73ID:lJFXTbVx
>>127
それから、
>fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.size(), value);
の場合だと、たとえ第二引数の部分に間違いがあってもバグの程度がまだまし。
なぜなら、xxx.size()は個数なので間違いがあってもデバッガで見てもまだ分かり易いバグとなるし、
バッファオーバーランしても個数なのでどこかで停止してくれる。
ところが、btm要素方式の場合、書き間違えてbtm要素が全く別の配列の中を指してしまっている場合には
バッファオーバーランが停止することなくほぼ無限に続くことになる。
0129デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:02:09.57ID:ssGc8zMA
つまりずっと配列前提の話をしてたワケ?

そりゃ旧来的な書き方の方が合理的だ
配列とその個数のデータ構造なら明らかにdefineされてる個数を与えた方がラクになるな
0131デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:04:53.29ID:lJFXTbVx
>>128
さらに、その場合、全要素を対象にしているから専用の関数などや
for each文などで対応できる。
一方、良くある例として、あるところから10個の要素に対して処理したい
などというものがある。
それは例えば、エディタを作っている場合に画面内に10行表示されていることが
分かっている場合だ。
そういう場合に、C流だと
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top], 10);
で良いのに対し、STL流だと
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top], &aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top + 10]);
ととても長くなる。
0133デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:11:45.84ID:lJFXTbVx
>昔ながらのCやC++98にしがみつくのをやめてC++11〜17の新機能を有り難く頂戴することで
>色んなストレスから解放される
同意しかねます。
0134デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:20:20.16ID:ssGc8zMA
>>131
にしてもdefineされてる配列の個数の名前もお長いんでしょ?

#define A_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_SIZE (100000)
#define A_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_YYYY_XXXX_SIZE (100000)

***

今度は「個数」の代わりに「10」になってる
行数を受け取る変数名もやっぱり長いんじゃなくて?
肝心のところを短く書いてるから、短く見える

こういう変数になるんじゃないのかな
const int aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx_Lines = get_draw_lines();
0135デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:22:47.51ID:EoVZjJO9
よくこんなくだらないことに熱くなれるな
0136デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:32:19.34ID:+cbHRaf/
STLは設計のお手本的な部分があり、誰もが良く学ぶべきだけど、今回の事例で初心者がどう感じるのか、データが取れたのでは?
0137デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:34:00.13ID:lJFXTbVx
>>134
その様な場合でも、
C流:
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top],
      numXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx);
STL流:
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top],
      &aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top + numXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx]);
となりC流の方がまだまし。

それとC流だとハンガリアン記法で名前を付けて置けば、なんとかなってる。
STL流は最悪で、非常に危険な書き方。
0138デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:34:55.35ID:HhRPmWpc
初心者は「ぼくちんのコードが長くなるからこの設計はクソ!」と言いがちなことが分かったので今後の教育の時に注意しようと思いました
0139デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:35:10.63ID:lJFXTbVx
>>136
ちなみにどっちが初心者だと考えているのか。
こっちはプログラミングのエキスパートだが。
0140デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:35:22.62ID:+cbHRaf/
引数に個数を指定するほうが洗練されていると初心者が言うけれど、設計の観点から言えば、事前に個数がわからなくても呼び出せるほうが汎用性がある。
つまり、ジェネリック。
0141デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:37:07.37ID:+cbHRaf/
STLごときでつまずいてたら、関数型なんかさっぱり理解できないだろな。
0142デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:40:26.69ID:+cbHRaf/
2chだった頃、このスレでもプッシュ型インターフェースが流行りかけてたんだよな。
5chになって若干質が落ちたんじゃないだろか。
0143デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:41:57.79ID:HhRPmWpc
初心者くんはこの世の全ての範囲のendが「先頭からの個数」で決まる場合しかないと思い込んでるみたいだけど
例えばfindの検索結果とか、GUIの現在カーソル位置とかで決まる場合もあって、その場合だと本質的でない「個数」という数字を求めるコードが結局長くなってしまうことに注意しよう
簡単な練習問題だよ
0144デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:44:01.55ID:ssGc8zMA
>>137
その配列のラッパークラスは作らんの?
0145デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:51:26.20ID:Z4l68xx0
>>127
マクロ変数(定数?)とかグローバル変数とか生配列とか、旧態依然としたCの作法が好きなら無理にC++やSTLを使わずに自分の好きな道具を使えばいいんでないの?
今でも(そして恐らくこれから先も)変わらず使えるのだから。

自分の好みに合わないものを他人が嬉しそうに使ってるのが気に入らないの?
0146デフォルトの名無しさん
垢版 |
2020/10/14(水) 13:54:48.00ID:OK1/udlE
配列が個数を持ってるなら
fill(配列, 値);
で良くね?
0149デフォルトの名無しさん
垢版 |
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
0151デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:03:45.73ID:d5S3+KHs
GCC9で-std=c++2aが使えるんだけど…C++20です…これってさぁ…
実験的にサポートみたいな事行ってるけど、使ってもOKなの?
experimental supportって言ってるけど…みんなどうしてるの?
0152デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:07:19.79ID:ssGc8zMA
>>151
「腕に自信のある奴は無償デバッグ要員になってくれ」という委員会からのお願い
見つけたバグやあやしい挙動の個数に応じて名を上げることも出来る
0154デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:15:36.27ID:d5S3+KHs
C++17で行きます…17でも十分新しい…。
0158デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:45:10.45ID:lJFXTbVx
>>157
つまり「引数の個数が多くなるからSTLが問題」などとは全く言って無いということ。
別に個数方式にしても引数が少なくなると言うことではない。
引数の個数ではなく、コーディングする時の引数の記述量を減らせることが多い。
+演算子も使わなくて済むのでケアレスミスも減らせる。
またtopとbtmで重複する事を書かなくて済む。
そしてそれは安全性に繋がる。
なぜなら同じであるべきところを誤って異なるように書く可能性がなくなるから。
0159デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:51:28.70ID:+cbHRaf/
お前の考える正しいライブラリがSTL以上に使われるなら、お前の意見にも一理あるのかもしれないけど。

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

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

示せるわけがないという俺の予想どおりだわ
0167デフォルトの名無しさん
垢版 |
2020/10/14(水) 17:15:40.91ID:+cbHRaf/
「我はSTLを超える者なり!!」などと初心者が言い出してビックリしたわ。
0170デフォルトの名無しさん
垢版 |
2020/10/14(水) 17:37:36.44ID:RddNL28g
だよね
どの話題に食いつくかでそいつの能力がわかる
このスレの老害はどうでもいいレベルの話を延々語る
0171デフォルトの名無しさん
垢版 |
2020/10/14(水) 17:42:38.61ID:ZV1nncqg
>どの話題に食いつくかで

自称数学者の発想ですね判ります
0172デフォルトの名無しさん
垢版 |
2020/10/14(水) 17:48:04.39ID:4qg33D8d
131見るとわかるけど
コピペや置換する発想すらない人がstlの利点とか理解できるわけないし
0173デフォルトの名無しさん
垢版 |
2020/10/14(水) 17:55:52.69ID:lJFXTbVx
>>169
外国の人?
引数の個数が減るとは一言も言ってない。
引数の記述上の長さが減り、分かり易さや間違いにくくなるといっている。
さんざん同じ事を言っているのに、全く違うことを言ったことになってしまっている。
0176デフォルトの名無しさん
垢版 |
2020/10/14(水) 19:16:14.41ID:fAfIBrSZ
>>173
> fill(dim, 2, 98, 0); //引数4個
> 98は個数だと認識して書いた。

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

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

言うまでもないが、俺は間違えずにコード示してて
間違えたのはおまえさんだけだぞ
それを一般論として優位ということにはできんだろ
0177デフォルトの名無しさん
垢版 |
2020/10/14(水) 19:16:18.40ID:qpMvVLdo
この手の配列の話でrangeが出てこないのはなんで?
最近の標準には疎いけど、この手の問題のほとんどがboost::rangeで解決しない?
0178デフォルトの名無しさん
垢版 |
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>*だけで大丈夫なのかメモリアドレスまでは
僕は把握してません…参照の値渡しだけで行くだろうけど…なぜ大丈夫なのか説明できません…。

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

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

ポインタに合わせて統一したのが全面的に良いとは言えないのかもしれないが、
イテレータの枠組みに配列やポインタを含まないデザインにするというのは
C++ の立場からするとありえない選択でもあるし、
要するに「仕方ない」としか言えんわ。
0198デフォルトの名無しさん
垢版 |
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);
}
0199デフォルトの名無しさん
垢版 |
2020/10/15(木) 17:12:09.30ID:lq1gR0YQ
lengthなんて数行で実装できるじゃんw
自分用のテンプレに入れときゃ解決w
0202デフォルトの名無しさん
垢版 |
2020/10/15(木) 18:27:46.64ID:ZxgioYKc
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
↑この時点で手遅れレベルで腐ってるのは誰も指摘してやらないんだなw

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

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

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

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

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

おまえらと違ってこちとらおまえらごとき論破するのに侮辱語はいらねえ
0213デフォルトの名無しさん
垢版 |
2020/10/16(金) 06:57:04.56ID:3AzgsKTP
>>212
関数定義について言ってるに決まってるだろ
変更しないっていう前提で固定してるわけじゃないし
妄想激しいね
0215デフォルトの名無しさん
垢版 |
2020/10/16(金) 07:21:08.18ID:3AzgsKTP
そうやって僕ちゃんが正しいんだ!
あいつはくそだ!
って一生逃げ回ってろカス
0218デフォルトの名無しさん
垢版 |
2020/10/16(金) 10:02:26.25ID:hiR4Fq2K
>>216
小学生が「やーい、おまえのかーちゃん出べそ」って言うのと似たような感じだな。
昭和の漫画の中にしか存在しないけどw
0220デフォルトの名無しさん
垢版 |
2020/10/16(金) 13:05:10.30ID:E37X09wd
今ゲーム開発に向いてるライブラリってなんですか?
これまでdxlibとsiv3dは使ったことありますが今の主流が知りたいです
0221デフォルトの名無しさん
垢版 |
2020/10/16(金) 13:42:16.84ID:CKS46Mg3
UE4
0225デフォルトの名無しさん
垢版 |
2020/10/16(金) 15:15:51.65ID:3AzgsKTP
SFML
0227デフォルトの名無しさん
垢版 |
2020/10/16(金) 16:22:38.33ID:5553rdQz
>>220
ゲームの内容による
Xウイングでタイファイターと戦うようなのもあれば
将棋やウォーゲームみたいのもある
0228デフォルトの名無しさん
垢版 |
2020/10/16(金) 17:53:05.24ID:y0b2R3Tf
>>227
dxlibとsiv3dに代わるものはあるかと聞かれてんのに的外れ
知ったか乙とでも言って欲しいのか
0230デフォルトの名無しさん
垢版 |
2020/10/16(金) 17:57:48.24ID:8wgq9mv1
>>220
C#に浮気してUnityという手もある。
といっても扱ったの6年前(大学生の頃)だから現ゲーム業界事情は詳しくないが。

てか、この手の質問がでてきたということは、現状の開発に限界を感じているということでは?
0231デフォルトの名無しさん
垢版 |
2020/10/16(金) 17:58:03.44ID:y0b2R3Tf
知ったかこいてマウント取るしか出来ないアホばっかだな
EASTLがレンダリングとか担ってくれるのかよ
0233デフォルトの名無しさん
垢版 |
2020/10/16(金) 18:04:19.22ID:y0b2R3Tf
嘘つけ

>>220
てかDirectXスレかゲ制作技術板行った方がいいよマジで
ここに住み着いてるのはまともにソフト書き上げたことすら無い奴ばっかだから
0236デフォルトの名無しさん
垢版 |
2020/10/16(金) 18:21:09.26ID:y0b2R3Tf
ライブラリの主流は何か=dxlib等に代わるもの、だと思ったんだが
まぁそもそもC++で一から作りたいのか勉強がしたいのか、単に趣味でゲーム作りたいのかわからんから
何とも言えないけど
0237デフォルトの名無しさん
垢版 |
2020/10/16(金) 19:19:09.58ID:a9PKFHNt
これ以上話も続かなそうだからボカすけど
俺はそれこそがすっごいアホっぽいと思う
C++で言うとイテレータのインクリメントをi++で書いちゃってるのより
必要も無いのにnewしてdeleteしてるのより
それよりももっと恥ずかしいと思う
0242はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/17(土) 01:53:28.92ID:EbfBq8oa
>>220
dxlib や siv3d (OpenSiv3d) は十分に主流の一翼を担っているように思うが……。
C++ 的には dxlib は設計が古臭い感じはあるかな。

具体的なことが決まっているわけじゃなくて単に他にどんな選択肢があるのか
ということなら、私が知っているのはこれくらい。

https://github.com/altseed/Altseed
http://www.tilengine.org/
https://www.sfml-dev.org/
https://box2d.org/
https://godotengine.org/

Twitter とかで流れてきた話題の中で面白そうなのをちょっとブックマークしていた
という程度なんで具体的に利用してみたことはないんだが、
話題になる程度にはまともな完成度なんだと思う。
0243デフォルトの名無しさん
垢版 |
2020/10/17(土) 06:29:23.89ID:U3N3/O+C
>>228
235の指摘もそうだが
知ったかって「内容による」と言ったのが
お前さんにはそんなに高度な指摘に聞こえたのか?
手加減しきれねえ相手だなw
0244デフォルトの名無しさん
垢版 |
2020/10/17(土) 06:31:19.72ID:U3N3/O+C
>>241
バカ?
おまえさんにだけは言われたくねえな

昨日までいじめっちゃったやつだろ
悔しいそうだなw
0246デフォルトの名無しさん
垢版 |
2020/10/17(土) 06:40:29.09ID:P3PLPttw
> おまえらと違ってこちとらおまえらごとき論破するのに侮辱語はいらねえ
このあと逆に論破されて小学生みたいな煽りしてたなw
0248デフォルトの名無しさん
垢版 |
2020/10/17(土) 06:51:39.36ID:foE/glNf
>>243
いつものアホだろうから相手したくないんだが
「内容によらない」と言われてんだよ気付けよ
0252デフォルトの名無しさん
垢版 |
2020/10/17(土) 07:27:40.09ID:lpP9BTeB
将棋に向いてるライブラリと向いてないライブラリを具体的に言えばばいいんじゃないの
0253デフォルトの名無しさん
垢版 |
2020/10/17(土) 07:36:13.01ID:foE/glNf
いやいや、質問者が書いてるのはどちらも3Dの(2Dでも使えるけど)"グラフィックス周りの"ライブラリだぞ
0254デフォルトの名無しさん
垢版 |
2020/10/17(土) 07:46:35.47ID:lpP9BTeB
いや適当なこと抜かすから将棋に向いたゲームライブラリあるなら上げてみればって言っただけだけど
0261デフォルトの名無しさん
垢版 |
2020/10/17(土) 14:30:06.82ID:bl1AtnqD
まあ江添みたいな輩といっしょに働いてたらメンタル壊れるだろうな。
まともに話ききやしねーし。
0262デフォルトの名無しさん
垢版 |
2020/10/17(土) 14:47:43.15ID:/Ip3Dsod
奇貨居くべし
0263◆QZaw55cn4c
垢版 |
2020/10/17(土) 15:07:46.75ID:fHznvt//
>>261
>>259 をよく読め
>>259 は「メンター」と付き合うとメンタルが壊れる、と言っているのではなく
「メンター」自身がメンタルが壊れて、結果、メンターという存在が皆無になる、と言っているのだよ、事態はより深刻なんだ
0264デフォルトの名無しさん
垢版 |
2020/10/17(土) 16:52:45.52ID:U3N3/O+C
>>258
既成のソフト以外の何だと思ったの?

マウント取り損なったのが誰かは、誰の目にも明らかなので
安っぽいネットスラングで返しても無駄だよw
0265デフォルトの名無しさん
垢版 |
2020/10/17(土) 17:20:58.06ID:l+Syhppg
もはやC++でゲーム開発は向いていないのでは
今時型安全なんて時代遅れだよ
0267デフォルトの名無しさん
垢版 |
2020/10/17(土) 19:10:46.71ID:RsKDaYmq
>>265
1つくらい正しいこと言えよ。
今でも重量級ゲームはC++が主流。rustに流れる可能性はあるけど
あとC++は型安全ではない
0275デフォルトの名無しさん
垢版 |
2020/10/18(日) 00:28:03.87ID:oU6L/1KQ
大学生起業家が設立1年で20億円調達! 単発バイトアプリに外食企業など出資【タイミー】
https://foodfun.jp/archives/3490
誰でもカンタンにオンラインサロン・情報配信ができる便利アプリ【TOUKU(トーク)】が登場
https://prtimes.jp/main/html/rd/p/000000001.000061569.html
中学時代の車いす生活から、17歳で起業するまで
https://www.advertimes.com/20200130/article306925/
ミャンマー発 AIダイニングアプリ「Yathar」をしかける日本人起業家
https://roboteer-tokyo.com/archives/14840
自分の視野は「世の中の0.001%」と自覚せよ。ビジネスチャンスを掴む4つの習慣
https://headlines.yahoo.co.jp/hl?a=20200511-00010001-srnijugo-life
アプリの視聴率がわかる 高専卒起業家の独創力
https://www.nikkei.com/article/DGXMZO46695580Y9A620C1000000/
1万人の若者を支援!インターンが日本を変えるかも!? glowshipの若き創業者・足立卓也氏インタビュー
https://sogyotecho.jp/glowship-adachi-interview/
まだ22歳の学生社長が得た、23億円の「使い道」 あの橋本環奈をCMに使うバイトアプリの雄
https://toyokeizai.net/articles/-/319511
0278デフォルトの名無しさん
垢版 |
2020/10/18(日) 07:44:07.32ID:+ySY8JLF
そんな極端なキチガイみたいなこと言うな!
・・とかつっこみたいかもしれないが、意外とそれ真理から困る >>277
C++ が現状あちこち解り辛い仕様になってる色々な理由のほとんどが
コンパイラの実装の都合であることがおおい
0279デフォルトの名無しさん
垢版 |
2020/10/18(日) 09:07:32.28ID:CqLBM1Q2
>>273
この人達>>277>>278の言う事を真に受けるのなら、組み込み開発をやるといい。
アセンブラレベルでC++が理解できる。
コンストラクタ、デストラクタがどのようなタイミングで呼ばれるのか、グローバル変数、ローカル変数はどのようなメモリ領域を使うのか、ヒープ領域の挙動...経験を積むと自然にC++の細かい挙動が理解できる。

そういうミクロな話じゃない?
なら、常にC++の最新企画の仕様を調べよ。
入門書に書かれていない便利な機能が色々あるぞ。

そういえば質問内容は完全に理解したいだったな。じゃあ、どっちもやれ。
0281デフォルトの名無しさん
垢版 |
2020/10/18(日) 11:52:18.14ID:H1xH1BRx
>>279
そういう話になるから結局C++じゃなくてCからやれって話になるんだよ
C++は有害
0283デフォルトの名無しさん
垢版 |
2020/10/18(日) 14:45:22.41ID:5IG+e1ti
>>279
そうしてソフト構築能力皆無な
C++博士ができあがったのだった
0284279
垢版 |
2020/10/18(日) 15:23:40.89ID:Erm+FeMo
> そうしてソフト構築能力皆無な
> C++博士ができあがったのだった

まぁ、C++を完全に理解したところでっていうね。
そんな暇あれば別言語を学んだり、フレームワークの使い方を学んだりDDDやTDDとか学べって話だわな。
0285デフォルトの名無しさん
垢版 |
2020/10/18(日) 20:08:20.51ID:347vI+AY
オブジェクト指向プログラミングと言っても、各コンポーネントというかプログラムの最小単位は多くの場合手続き型で記述することになるよな?
どこからどこまでを「最小単位」と見なすか、という問に対する基準というかガイドラインを知りたいな(筆者の主観が混じるとしても)
0286デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:04:28.67ID:oU6L/1KQ
この時代に生きててSNS発信を頑張らないやつはアホだ。
https://www.youtube.com/watch?v=TPMNmuWQm_o
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&;t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
YouTubeを伸ばすコツ【5つの本質論/初心者向けのセミナーです】
https://www.youtube.com/watch?v=fn-LxP9Unmc
【悲報】YouTuberはマジで難しいので、ほぼ挫折すると思う【無理ゲー】
https://www.youtube.com/watch?v=iKREw5p0Yqc
0287デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:05:46.61ID:e/dVAB4j
ソフトウェアの良い設計というのは
結果的に破綻も漏れも無く抽象化できていればおk
あくまで結果
成功の秘訣は8割方センス
0288デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:10:04.50ID:N2+RrN1t
>>287
あらゆる仕事はスーパーマンがやれば全て解決という
結局何も言ってない空論

現場でマジこれ言ってるやつは求人にクリプトン星人と書いている
人事屋としての究極の無能
0289デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:13:31.38ID:OvLc2vD2
>>285
正直言うと、当たり前のように使われる手続き型という言葉がピンと来ない。

オブジェクト指向におけるソースコードの適切な分割方法を知りたいってこと?
0290デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:20:59.62ID:OvLc2vD2
抽象レイヤーから具象レイヤーまで順番に話を進めていく方が俺は好きだがな。
一言目で無能呼ばわりするのはどうかと。
0291デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:26:52.52ID:e/dVAB4j
>>288
早くうまく書けた奴に次の仕事もやらせるのが一番弊害が少ない
理解や気づきの機会は外から与えることはできるが
それがどう理解や吸収につながるかとなると当人の資質や性向のファクターが大きいすぐる
0292デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:36:12.84ID:OvLc2vD2
>>287

> ソフトウェアの良い設計というのは
> 結果的に破綻も漏れも無く抽象化できていればおk

そうだね。ただ、具体的にどんなノウハウを与えれば、>>288の言うスーパーマンを生み出すかってのが次の疑問だろうな。

自分はOOP、TDDあたりのノウハウが身につけば余裕だと思っているが。
0293デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:42:13.49ID:e/dVAB4j
OOPは物事を整理する仕組みは提供してくれるが
どう整理をつけるかはやっぱ設計者のセンスに委ねられたままやんけ
実際>>287にゼロベースで的確に答えることは難しい
TDDは設計を検証する仕組みは提供してくれるが以下略

んまーテストケースをいっぱい書くというのは
物事簡潔に済ませる習慣が身につく良い経験かも試練、
0294デフォルトの名無しさん
垢版 |
2020/10/18(日) 22:21:54.75ID:OvLc2vD2
>>293

> OOPは物事を整理する仕組みは提供してくれるが
> どう整理をつけるかはやっぱ設計者のセンスに委ねられたままやんけ

その通り。だからこそ、そのセンスを磨かせるためにTDDもセットで紹介してみた。
まず、自分の設計が正しいか妥当性確認する手段も無いと間違ったオブジェクト指向が身に付く恐れがあるからね。

結局のところ、個々のセンスを磨かせないと駄目だが...センスを磨かせる環境を整えるのはリーダーの役割だと思う。
何もない状態でセンスで何とかせよ、よりは改善が期待できるよ。
0295デフォルトの名無しさん
垢版 |
2020/10/19(月) 00:20:11.11ID:lLBStDOZ
コンパイラの都合というよりかはcとの互換性とランタイム速度優先のための仕様によるものだろう。
てかむしろもっとコンパイラの都合考えたらもう少しまともな仕様になっとるわ。
0296デフォルトの名無しさん
垢版 |
2020/10/19(月) 05:23:08.92ID:f5AfjsGE
スーパーマンはある種の天才で、体系的に天才を教育する方法はないと思う。特に今現在の教育は全体の平均値を上げる事に主眼を置いているから。

大多数がほどほど幸せになる方法としてある程度うまくいってたけど、極少数が全体に絶対的な影響を及ぼすソフトウェアの世界だと効率の悪さが目立ってくるよね。

天才を見つけておいて必要な時に協力してもらうしかないんじゃないかな。全てにおいて天才はいないし来てもくれないので、得意分野では天才的みたいな奴と仲良くしておくぐらいか
0297デフォルトの名無しさん
垢版 |
2020/10/19(月) 11:06:36.21ID:4f6/Swqm
体系的に天才を教育する方法
ってのは実は簡単で、C++をやらせればいい
0300デフォルトの名無しさん
垢版 |
2020/10/19(月) 12:11:42.92ID:0OpHGeV7
プログラムの才能のある人材を発掘する方法は、以前だとLispかHaskellをやらせるのが定番だったけど今はどうなのかね?
0301デフォルトの名無しさん
垢版 |
2020/10/19(月) 12:44:51.59ID:QMGC8XAt
まずクソ企業で天才が居座るメリット無くね?
誰かが頑張ってくれるだろうみたいな雑魚集団と仕事したくねーわ。
0302デフォルトの名無しさん
垢版 |
2020/10/19(月) 13:49:59.16ID:asy7wTux
>>296
天才とは言っていない
ttp://equallove-2017.blog.jp/archives/24499215.html
ttp://equallove-2017.blog.jp/archives/24508935.html
ttps://star.programming-study.com/
2020年10月17日放送分
TK-80の産みの親?
元マイクロソフトでwindows95の開発に参加?
良く判らんけど
Windows95の生みの親に直撃!開発秘話やプログラミングの裏話、子どもたちに伝えたい思いを告白
0306デフォルトの名無しさん
垢版 |
2020/10/20(火) 03:00:21.68ID:C47XLKZf
deleteで解放しようとするとたまに落ちるバグがあるのですが
try〜catchで囲っても、やっぱ落ちます。
これって例外で処理することはできないんでしょうか?
それともやばいバグ過ぎてつかまえられないだけなのでしょうか?
0307デフォルトの名無しさん
垢版 |
2020/10/20(火) 03:05:40.63ID:U9bI1hKI
投げない例外は捕まえられないのでは?
0308デフォルトの名無しさん
垢版 |
2020/10/20(火) 03:09:48.67ID:C47XLKZf
>>307
これじゃダメなんでしょうか?
すみませんC++よくわかってなくて…

try{
delete p;
}catch(...){
std::cerr << "error!" << std::endl;
}
0309デフォルトの名無しさん
垢版 |
2020/10/20(火) 03:14:10.05ID:U9bI1hKI
>>308
pのデストラクタの中で何かが起きていて、そこで例外が投げられないから補足できないのでは?

それと経験的に、再現性の無いバグは、十中八九、未定義の記憶域を読むことで発生する。
0311デフォルトの名無しさん
垢版 |
2020/10/20(火) 03:27:44.66ID:C47XLKZf
>>309
デストラクタは何もないので
どこかでメモリ処理がおかしくなってるんでしょうね…
一旦、動くようにしてみたかったのですが、もうちょっと調べてみます。
ありがとうございました。
0312デフォルトの名無しさん
垢版 |
2020/10/20(火) 03:36:12.53ID:NaQDrxzK
そういうときに役に立つのがprintfデバッグだろ
どの工程で起こったのかある程度目星がつく
0313デフォルトの名無しさん
垢版 |
2020/10/20(火) 04:45:58.59ID:C47XLKZf
>>321
継承元の親クラスを何個も辿ってよく調べたら
コンストラクタの中で怪しいポインタにアクセスしている個所がありました。
おそらくこれが原因だと思います。
皆さん有難うございました。
0316デフォルトの名無しさん
垢版 |
2020/10/20(火) 08:40:05.01ID:OBwoowsU
いや、今回の問題の解決のために書いたわけではなくて、
>>308のように書いても無駄だと伝えるために書いた。
そのあたり明示せずに書き込んですまん。
0317デフォルトの名無しさん
垢版 |
2020/10/20(火) 11:34:12.27ID:pHiz9StD
atexit()
exit()
で捕捉出来ないかな
0319デフォルトの名無しさん
垢版 |
2020/10/20(火) 11:56:25.10ID:pHiz9StD
プロは logger 使うし
百歩譲っても使うのは fprintf の方
0320デフォルトの名無しさん
垢版 |
2020/10/20(火) 13:10:32.17ID:wzOsKsv0
printfが使える環境ならな
そうでない場面がごまんとあるから
選択肢は多いに越したことはない
0322デフォルトの名無しさん
垢版 |
2020/10/20(火) 13:21:52.61ID:vcQhkuUZ
基本的にprintfデバッグの延長
制度化体系化されたprintfデバッグがログ取り

loggerはより高度なprintfデバッグであり、その基本がprintfデバッグになる
この変数を眺めりゃ万事OK という直感が涵養される

loggerの出力先が10万キロ離れたプリンタなこともある
0327デフォルトの名無しさん
垢版 |
2020/10/20(火) 14:27:50.64ID:Y3GT62kx
C#を作ったアンダース・ヘルスバーグもデバッガのステップ実行よりもprintfを使うってインタビューで言ってたな
0329デフォルトの名無しさん
垢版 |
2020/10/20(火) 17:41:32.21ID:AdA8N6MK
C++23のdraftが公開されてた
http://wg21.link/n4868
0331◆QZaw55cn4c
垢版 |
2020/10/20(火) 22:08:32.52ID:glKVTYwZ
>>300
C のポインタ、特に関数ポインタ、とか
リカーシブ、とかで十分でしょう
0333デフォルトの名無しさん
垢版 |
2020/10/21(水) 11:15:30.61ID:xBgAWF1Y
シッタカブリ
0334デフォルトの名無しさん
垢版 |
2020/10/21(水) 11:18:26.05ID:F4fghCXJ
printfデバッグなんてあり得んけどな。
0335◆QZaw55cn4c
垢版 |
2020/10/21(水) 11:45:48.97ID:SYSvovlW
>>334
でも最初のうち、プログラムが小さいうちは、それが一番手っ取り早いですね
0336デフォルトの名無しさん
垢版 |
2020/10/21(水) 11:52:32.13ID:xBgAWF1Y
printf デバッグは完成後に printf の行を消すと動かなくなったりするω
0337デフォルトの名無しさん
垢版 |
2020/10/21(水) 12:15:19.02ID:EPxGxCCv
関数化やクラス化でプログラムを小さくするわけで、あんまり関係ないな
assertを使うときもそうだが、デバッグ用のコードに副作用を入れちまうのはヘボ以下
0338デフォルトの名無しさん
垢版 |
2020/10/21(水) 12:41:52.63ID:BgzupaSs
デバッグOffして弊害残すヤツは動作の仕組み把握出来てないだけだろ
>>336、まず貴様のコーディングセンスを磨いてから出直してこい青二才
0339デフォルトの名無しさん
垢版 |
2020/10/21(水) 23:09:27.50ID:oE8Yb73v
非同期で動くブツ同士の通信はprintfデバッグ大活躍なのでは…
誰がいつ何を呼んで何を渡したのかと呼ばれたほうが本当に受け取ったのかがすぐワカル

printf消去忘れについては条件コンパイルを使えば良いし、
Ad-hocな追加ならいかに大量にやってもソースコード管理システムで安全に消すこともできるわけやし、
0340デフォルトの名無しさん
垢版 |
2020/10/22(木) 00:49:05.87ID:VEHOj23m
未定義動作踏んでるときとかにprintfを呼び出すことでたまたま動くようにできたりする
ということか
0341デフォルトの名無しさん
垢版 |
2020/10/22(木) 10:43:36.11ID:vPWH9GQz
>本当に受け取ったのかがすぐワカル

buffer flush しないと判らんし
flush すると勝手に改行する環境とかあるし
そこまで便利ってほどでもなくね
nonbuffered しろってか
0343デフォルトの名無しさん
垢版 |
2020/10/22(木) 12:25:12.96ID:QhFI+vyp
#ifdef DEBUG
 #define PUTCHAR(a) (putchar(a), fputc(a, _fpDbg))
#else
 #define PUTCHAR(a) (putchar(a))
#endif
PUTCHAR(*ptr++);
みたいなことをやれば デバッグ時だけ*ptr++ が二回評価されて結果は変わってしまう。
0348デフォルトの名無しさん
垢版 |
2020/10/22(木) 12:38:34.09ID:QhFI+vyp
>>347
駄目な例を敢えて書いたんだ。
どうしてそれが分からないの、あなた達には?
IQが高い人には駄目な例が単なる例として出されたのだと分かるのに
ここの人達にはそれがわからない。
0349デフォルトの名無しさん
垢版 |
2020/10/22(木) 12:39:39.22ID:3l9/RVrp
>>339
非同期なアプリでprintf使うとタイミングが変わることがあるから安心できんな
デバッガよりは遥かに良いけど
0350デフォルトの名無しさん
垢版 |
2020/10/22(木) 12:41:58.22ID:QhFI+vyp
>>336
「printf デバッグは完成後に printf の行を消すと動かなくなったりするω」
と書いていたが、>>340が指摘した理由だけではないので、
そうなる他の理由の1例を>>343で書いた。
0351デフォルトの名無しさん
垢版 |
2020/10/22(木) 12:45:00.97ID:QhFI+vyp
これが考える力なんだよ。
マスコミを含めて「知識知識」と言う人が多いが、生まれつきの頭が悪いと
>>344 >>347 のような馬鹿な発想しか出来ないのでどうにもなら無い。
俺に比べれば、おまえが池沼の癖に。
0357デフォルトの名無しさん
垢版 |
2020/10/22(木) 18:56:55.19ID:N0tQIHiY
>>350
たぶんみんなは
そりゃマクロ使えば何でもありありだろ
そんなことでドヤるとかバカじゃねーの
って思ってる…
0360デフォルトの名無しさん
垢版 |
2020/10/22(木) 19:11:08.49ID:dQkQeqlj
今はJTAGがあるので、そんなにお金がかからない。
それでも、プロセッサごとにデバッグ環境を用意できるわけないだろ!!というのが日本企業の現状なら、中韓に任せて野菜でも育てる道が効率よい。
中韓は用意できるし、売り切ることが出来る。
printfデバッグなんてインパール作戦と同じ。
物量が違いすぎる。
0361デフォルトの名無しさん
垢版 |
2020/10/22(木) 19:15:22.48ID:dQkQeqlj
お前たちは農民に戻れ。
ハイ解散。
0362◆QZaw55cn4c
垢版 |
2020/10/22(木) 20:52:46.17ID:RiQFyYLu
>>360
私のマザーボードの JTAG/IEEE1149.1 はどれですか?
0363デフォルトの名無しさん
垢版 |
2020/10/22(木) 21:09:21.98ID:dQkQeqlj
>>362
OS開発の場合は、専用のボードを用いることを視野に入れる。
それが無理なら、中韓に任せて撤退するべし。
0364デフォルトの名無しさん
垢版 |
2020/10/22(木) 23:42:23.12ID:PrgepFj3
#ifdef DEBUG
 #define PUTCHAR(a) do{auto b=a;putchar(b), fputc(b, _fpDbg);}while(0)
#else
 #define PUTCHAR(a) (putchar(a))
#endif
死ねザコw
0367デフォルトの名無しさん
垢版 |
2020/10/23(金) 12:34:55.69ID:wQpWPNJn
教師が「こういうやり方はしてはなりません」と言っただけなのに、
生徒「そういう場合は、inline使えよ馬鹿教師」
という馬鹿生徒の集まり。
学級崩壊。
0368デフォルトの名無しさん
垢版 |
2020/10/23(金) 12:38:30.14ID:DuAJkWLf
教師が「こういうやり方はしてはなりません」と言っただけなのに、
生徒A「そういう場合は、inline使えよ馬鹿教師」
生徒B「こういうやり方ならいいんだよ、死ねザコw」
教師「」
0369デフォルトの名無しさん
垢版 |
2020/10/23(金) 12:48:55.12ID:wQpWPNJn
inline関数や、>>364のやり方が分かった上で教師は言っている。
それとも、おまえらの通った学校の教師はそんなことも分からない
くらい程度が低かったのか?
どこの学校だよ。
0371デフォルトの名無しさん
垢版 |
2020/10/23(金) 13:52:00.54ID:DuAJkWLf
俺が通った学校の教師か
化学のおじいちゃん先生だったな
当時C++はまだ世に出てなかったから
マクロの使い方は知らなかっただろうな
0373◆QZaw55cn4c
垢版 |
2020/10/23(金) 16:10:04.88ID:HRhvOpQY
>>372
#define マクロはありますが、lisp 様仕様マクロはありません
0374デフォルトの名無しさん
垢版 |
2020/10/23(金) 16:52:36.06ID:GtGn5ZF1
c++の文句をいって
cの話を延々はじめる
そしてどっちも言い尽くされた話

printfデバッグやってるじじいの特徴
0375デフォルトの名無しさん
垢版 |
2020/10/23(金) 16:57:39.47ID:DuAJkWLf
>>372
C++が世に出る前っていつ頃かわかってる?
その頃のCを化学のおじいちゃん先生がやってると思ったの?
おまえさんでさえK&R Cなんか使えるのか?
0376デフォルトの名無しさん
垢版 |
2020/10/23(金) 17:12:38.69ID:2f10zgGH
DxLib は printfDx で printf 推奨ω
0377デフォルトの名無しさん
垢版 |
2020/10/23(金) 17:55:43.35ID:vvEFmscd
>>371 ではC++はまだ世に出てなかったからマクロの使い方は知らなかっただろうと言ってるのに
>>375 では化学のおじいちゃん先生がCなんてやってるわけないだろうと言っている

それではC++が世に出ててもその頃のC++なんておじいちゃん先生はやらなかったのでは。
だとすると >>371 はいったい何が言いたかったのか…
0381デフォルトの名無しさん
垢版 |
2020/10/23(金) 20:32:42.02ID:DuAJkWLf
もちろん1よ
2なんて馬鹿言うわけねえだろ
何が言いたいの? おまえさんは
0382デフォルトの名無しさん
垢版 |
2020/10/24(土) 00:28:14.62ID:5I5noegP
>>341
>nonbuffered しろってか
別に
非同期要素同士のハンドシェークがうまく行っているかは
callerとcallerの呼び出し順序に崩れが無いことをメッセージの中身とともに確認できればほぼほぼ十分なので
printf()を呼んでから出力されるまでの時間はあんま拘る意味は無い
0383はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/24(土) 02:46:57.76ID:yf0wmlMH
非同期な処理を観察するってのは非同期な処理が「失敗しているかもしれない」のを見つけ出さなきゃいけないってことだよね。
複数のスレッドが競合したりする場合もあるってことだよね。
printf は歳入可能でもないし、問題があるときは printf の処理も信用できないと思うんだけど。

信用できないけどバッファに溜まったまま吐き出されないということはなるべくないようにしたいって話でしょ。
0386デフォルトの名無しさん
垢版 |
2020/10/24(土) 08:40:39.80ID:VP+yyMyu
単一スレッドでも再帰なんかで再入は発生しうる
関数内でクリティカルセクションなどを使ってスレッド同期するようにしていても状態を持つ作りだと同一スレッドからの再入で異常になることはある
0387デフォルトの名無しさん
垢版 |
2020/10/24(土) 08:44:50.93ID:VP+yyMyu
Cランタイムは通常スレッドセーフだよね
だから複数スレッドでprintfを読んだりerrnoを参照してもよい
Windowsの場合、_beginthreadで作成したスレッドはCランタイム安全、CreateThreadで作成したスレッドはCランタイム安全ではないとかいう話もあった
0388デフォルトの名無しさん
垢版 |
2020/10/24(土) 11:13:00.25ID:aZOaF4i3
>>385
今、リエントラント(再入可能)という言葉は余り聞かなくなっているが、
ハードウェアに密着したプログラムを書くときに、ハードウェア割り込みの
割り込みルーチンがまだ終わってないタイミングで、同じ割り込みが生じ、
同じルーチンが再帰的に呼び出されることがあり、そのような呼び出しに
対応しているものを「リエントラント」と呼ぶことがあった。
ただし、そのようなプログラムは複雑になりがちなので、ハードウェア
割り込みが生じ、割り込みルーチンがまだ終わってないタイミングで、
同じ割り込みを発生させる原因がもう一度発生しても、割り込みルーチン自体を
呼び出さないようにする手法が使われることが多かった、というか、
その様にプログラムすることが標準とされ、そのためにプログラマブル割り込み
コントローラなるものが、その役割を果たすモードを持っており、それが通常、
有効な状態にされていた。
0389デフォルトの名無しさん
垢版 |
2020/10/24(土) 11:21:13.53ID:aZOaF4i3
>>388
一方、単一スレッドプログラムの場合、mallocの中からmallocが再帰的に呼び出される
ことはそもそもない。printfも同様。
なので、複数スレッドが動作している場合でも、各スレッドにおいては、
mallocやprintfが再帰的に呼び出されることはない。
そして、mallocを作る場合、Heapに関する重要データを読み書きする時、クリティカルセクション
のようなもので囲って、1つのスレッドだけが読み書きできるようにするような手法が使われる。
この場合、その区間を実行しているのは、最大で1スレッドのみであり、複数スレッドが
同時に実行することはない。
もちろん、malloc自体は同時に複数のスレッドが呼び出しても良いが、malloc内部で重要データ
の読み書きが行なわれるのは、必ず1スレッドのみで、それ以外のスレッドは待機させられる。

割り込みハンドラをリエントラントにする場合には、このようなクリティカルセクション的な
やり方は絶対に使えない。
まず、割り込みハンドラは、実際に実行しているのは1スレッドと言えば1スレッド。
割り込み自体が、1コアしかなかったZ80などにおいても有った概念でもあるし、それは当然であるが。
0391デフォルトの名無しさん
垢版 |
2020/10/24(土) 12:29:55.83ID:+GevKgJx
coutデバッグと言うべきってか
0392デフォルトの名無しさん
垢版 |
2020/10/24(土) 12:34:34.81ID:UCFHvZt3
>>388
多重割り込みの話と勘違いしてねーか?
同一割り込みなんて起きなくてもメインルーチンで使ってる関数を割り込みルーチンで使う可能性があるならリエントラントでないとおかしくなるよ
そもそもシングルスレッドで割り込み使ってなくてもある関数内で直接的もしくは間接的に自分自身が呼ばれる場合もリエントラントでないとおかしくなる
最近の言語だとグローバル変数とか静的変数使ってなきゃ(例外はあると思うが)リエントラントになるのであまりに気にする必要はなくなった
0393デフォルトの名無しさん
垢版 |
2020/10/24(土) 14:30:45.75ID:ZbhxKyMw
ちゅうことはスレッドセーフなloggerが全部同じファイルにログを書き込むんだろ
これもうそのまんま出力に逐一印字させた方がいいんじゃね
0394デフォルトの名無しさん
垢版 |
2020/10/24(土) 15:33:28.19ID:H3Ix9ZgH
>>391
いや、厳密にはstd::coutデバッグというべき(ドヤ
0395デフォルトの名無しさん
垢版 |
2020/10/24(土) 15:35:14.21ID:LXBNuCv6
printf()はスレッドセーフ
複数スレッドから呼べる
規格のどこに書いてあるかは示せないが探せばあるはず
なぜなら、ファイルI/Oやからなあれ

もちろんこれは、printf(("ABC")とprintf("CDE")をそれぞれ別スレッドで呼んだ場合、
ABC、CDEという表示になるという保障にはならないが
実際にはたいていのケースで行単位で分かれてくれるからデバッグには困らない
行が頻繁に混じってしまってデバッグにならないようなら初めて行単位の排他の追加を検討する
みたいな
0396デフォルトの名無しさん
垢版 |
2020/10/24(土) 15:37:01.80ID:LXBNuCv6
ただしもちろん割り込みルーチンからprintf()を呼ぼうとするような猛者は知らん
火の粉がこっちに降りかからない限り
放っておいて差し上げなさい
0398デフォルトの名無しさん
垢版 |
2020/10/24(土) 17:06:18.74ID:ZbhxKyMw
printf使ってヘンになってるならまだ許せるが自前のクソloggerが全般的にクソ動作してると排除したくなる
0401デフォルトの名無しさん
垢版 |
2020/10/24(土) 18:01:02.56ID:H3Ix9ZgH
printf実行中に割り込みが発生して、なおかつそのhandlerでprintf使ってると
デッドロックが発生する(?)
※printfは内部でmallocを使ってるので、>>389に書いてあるようにheapの
操作時にロックを取得しようとするため
という感じかな?
0403◆QZaw55cn4c
垢版 |
2020/10/24(土) 18:13:44.58ID:sM3RwuUT
>>402
>自前のprintf作ればいい
こういう台詞は、その能力の欠けたものが得てして言いがちなことだよなあ‥‥と
0404デフォルトの名無しさん
垢版 |
2020/10/24(土) 18:32:15.74ID:lGAQOfIr
己の道は己で切り開くものだ
貴様らジャップどもは文句たらたらと言ってるだけで行動に移そうとはしない
猿に退化する課程の獸だな
0406デフォルトの名無しさん
垢版 |
2020/10/24(土) 19:34:38.35ID:kvu4j0jg
>>404
無関係な問題まで何でもかんでも民族や国籍に結びつけて的外れな非難をしようとするとは、怒りに囚われて論理的思考力が壊滅的にダメージを受けてるんだろう。プログラマとしては致命的だなw
0407デフォルトの名無しさん
垢版 |
2020/10/24(土) 19:40:13.77ID:LXBNuCv6
割り込みルーチンの中からprintfを読んだら危険なのは
一般にOS機能のうちクリティカルセクション(ロック)みたいな高級な機能が
ユーザーが勝手に定義した割り込みルーチンのコンテキストでは使えないからじゃわ;

OSはOSで割り込みを受けてスレッドのコンテキストを管理しているので、
それとは非同期に起きたOSのあずかり知らない割り込みで
OSの高級な機能が呼ばれたらOSの管理情報の排他が崩れる
0408デフォルトの名無しさん
垢版 |
2020/10/24(土) 19:44:20.88ID:LXBNuCv6
割り込みルーチンから呼んでも安全なprintf()を自力で実装するとしたら
メインのOSとコードベースをまったく異にする必要があるのでOSの自力実装に近くなってくる
やっぱ割り込みルーチンからはprintf()呼ばないというのが一番スマート
0409384
垢版 |
2020/10/25(日) 08:15:28.48ID:B8Qi0Gue
聞くんじゃなかった
printf( → fprintf(stdout,
みたいなもんでstdoutが静的記憶域期間とか
そういう説明が聞けるのかと思いきや
なんだこりゃ・・・
0410デフォルトの名無しさん
垢版 |
2020/10/25(日) 08:36:53.97ID:fEg6VUML
stdoutが静的記憶だとして(大概のOSではIOBで管理しておりそうなっているはずだが
printf()をユーザー定義な割り込みルーチンから呼ぶと
それの排他を安全に行える人がだれも居なくなる、
0411デフォルトの名無しさん
垢版 |
2020/10/25(日) 10:46:14.61ID:zd7LSfWt
printfデバッグでダメならputデバッグでいいじゃん
0416デフォルトの名無しさん
垢版 |
2020/10/27(火) 23:25:33.33ID:IA9V1GzZ
そんなに楽しい事ならお前がやれば?
0418デフォルトの名無しさん
垢版 |
2020/10/28(水) 14:00:21.64ID:a3TqMSUE
普通は成果物に対して報酬を得るよね
バグを出したら潰すのは当たり前

お金払わなきゃデバッグしないとか言ってる人は客先常駐のような労働時間に対して賃金を得る労務提供型なんだろうか
労働者から脱却しないとソフトウェア開発の本当の楽しさを知ることはできない
0419デフォルトの名無しさん
垢版 |
2020/10/28(水) 14:20:56.34ID:XBU5yUok
1レスの中で矛盾していくスタイル嫌いじゃない

成果に対して報酬があるならお金のためにバグ潰す

時間給なら貰えるお金は変わらないから「バグ潰すのは当たり前」と洗脳したり脅したりしないとバグは潰されない
0420デフォルトの名無しさん
垢版 |
2020/10/28(水) 14:50:59.10ID:K+lW0Fsg
いや、いるんだよ
他人が書いたコードを有料で引き継ぐ人
414がそうとは見えないけどね
0421デフォルトの名無しさん
垢版 |
2020/10/28(水) 21:57:28.94ID:bY6aZzj9
つーか普通に仕事してたらちょいちょい
前任者が逃げた、とか潰れた、とか逮捕された、とかで
クソみたいなゴミクソウンコのコードをわたされて
これ保守してねー、みたいなクソみたいな仕事
おしつけられることなんてまれによくあることだろ
そんでなぜかそいつのクソゴミコードのバグを
まるでおれが出したかのように責められる、までがセット
0426デフォルトの名無しさん
垢版 |
2020/10/29(木) 15:25:24.71ID:wtO1e/xm
>>423
こういう人間はソフトウェアなんかやらんでコンビニバイトでもやってた方が向いてるよ。
0427デフォルトの名無しさん
垢版 |
2020/10/30(金) 00:03:30.35ID:Wx+7ZgRN
C++でもPythonの内包表記みたいにVectorの要素舐めていって
全ての要素に特定の処理をしたものを別のVectorに代入することってできますか?
0429デフォルトの名無しさん
垢版 |
2020/10/30(金) 00:26:39.96ID:XbvTe/rK
内包表記に近いことは無理じゃない?
initialize listでもしかして?って思ったけどうまくできそうにない
0431デフォルトの名無しさん
垢版 |
2020/10/30(金) 09:52:48.93ID:5giIBuWJ
std::transform(s.begin(), s.end(), t.begin(), [](int e) -> int { return e * 2 });

きっとforのほうが読みやすくて速いと思う
0433デフォルトの名無しさん
垢版 |
2020/10/30(金) 10:06:43.70ID:uffCAw9U
表現上はあたかもラムダ式使った華麗なことやってるように見えるけど
マジでそう見えてるだけで、コンパイルするとfor文とそんなに変わらなくなるんじゃね

むしろどっかの時点でただのfor文に置き代わったりしてるんじゃないの
0437デフォルトの名無しさん
垢版 |
2020/10/30(金) 11:41:09.18ID:7MkyV1Cp
>>433
ループ分解されて要素分コード増えてる可能性もあるな
0438デフォルトの名無しさん
垢版 |
2020/10/30(金) 13:24:53.40ID:Z0VCec0D
forよりも関数的に書いた方が順序は気にせんでいいってメッセージを込めることはできるわけだが、
まあそういう風にかける場合って大抵forで書いても可読性下がらんほど簡易な内容のことが多い。
0440デフォルトの名無しさん
垢版 |
2020/11/01(日) 15:21:18.11ID:iuijWT2g
競プロで使いたいのですが
if i = 0 then return 0
elif i > 0 then return i - 1
を出来るだけ早く求めるには何かいい方法ありますかね?
ビット演算とかでなんとかなりませんかね?
0441デフォルトの名無しさん
垢版 |
2020/11/01(日) 15:26:15.37ID:Ncbqgsya
>>440
それの速度が競プロで問題になることなんてないだろう。
そんなこと気にするよりアルゴリズムの計算量のオーダーを小さくするとか枝刈りをしっかりするとか有意義な方に頭を使った方がいい。
0442デフォルトの名無しさん
垢版 |
2020/11/01(日) 15:26:18.66ID:BdB3gM+x
unsignedですか?
0443デフォルトの名無しさん
垢版 |
2020/11/01(日) 15:36:25.10ID:f5GbRfBo
simdの比較使えば結果がビットマスクで取得できるのでそれを使うのが定石
両方計算してビット演算で選択
c++関係ない
0446デフォルトの名無しさん
垢版 |
2020/11/01(日) 15:50:59.41ID:Lkejt9vc
>>440
ていうか比較は一回でいいだろコレ
なんで2回も余計に比較してんだ?
ちょっと間違えた
return i>0?i-1:0;
0448デフォルトの名無しさん
垢版 |
2020/11/01(日) 17:02:44.45ID:h5xlMYDq
つか>>440はelseが何かわからんが、
iがi≧0でやってくるのならデクリメントの飽和演算に見える件について:
0449デフォルトの名無しさん
垢版 |
2020/11/01(日) 17:10:40.93ID:h5xlMYDq
SIMD使うと飽和演算は楽勝かもしれんが、4個とか同時に並列に計算するんでなければ
かえって遅いんじゃ…
0450デフォルトの名無しさん
垢版 |
2020/11/01(日) 19:21:41.23ID:PTqWSgE4
>>440
アセンブラだったら、
 sub eax,1
 jnb lab1
 xor eax,eax
lab1:
 ret
でおしまい。最大で4クロック。
jmp命令は1つだけ。同じことをCで書くなら、
if (--i < 0) {
 i = 0;
}
return i;
とか。
0452デフォルトの名無しさん
垢版 |
2020/11/01(日) 23:07:30.49ID:gRIt+Ld+
減算が必ず実行されるのはもったいない

... and eax,eax
... jz f@
... dec eax
@@:
... ret
0454デフォルトの名無しさん
垢版 |
2020/11/01(日) 23:32:16.35ID:h5xlMYDq
and eax,eaxも同じようなものなのでは…
どっちも多分パイプライン1段消費

ていうか投機的実行から戻す際のペナルティーは
常にデクリメントする>450の方が小さい可能性が微レ存
知らんけど
0455デフォルトの名無しさん
垢版 |
2020/11/02(月) 00:26:45.06ID:dW4oDZpY
そっかー
投機的実行はまったく念頭にありませんでした
i が 0 である確率が小さいと考えるのかしら
0457デフォルトの名無しさん
垢版 |
2020/11/02(月) 14:18:33.78ID:WhiKrslV
>>450
一瞬でも < 0 になったらまずい環境なら
if(--i < 0) はダメ
0458デフォルトの名無しさん
垢版 |
2020/11/02(月) 15:41:23.80ID:OFRBeKTl
>>452
減算を行う場合の方が頻度が高いと予想されるので、>>450の方がその場合に
命令数が少なくなるので平均速度は速い。
0461デフォルトの名無しさん
垢版 |
2020/11/04(水) 00:22:15.96ID:eR5jspY1
Macで環境構築どうすればいいですか
適当に記事あさればいいですか
0463デフォルトの名無しさん
垢版 |
2020/11/04(水) 08:22:43.71ID:3PEz6xa2
>>461
新し目のC++使うならhomebrewでg++-9でも入れるのがベターかも。
たとえばstd::filesystemとかcatalinaのXCode(clang++)でも対応したんだが、
バイナリを古いmacに持ってったら予想通り動かんかった。
0464デフォルトの名無しさん
垢版 |
2020/11/04(水) 20:11:40.32ID:X2fHUOCE
自クラスの終了時のコールバックメソッドで…delete this;すると…うまく消えるんだけど…。
コールバックメソッドは…boolを返す…delete this;した後も…メソッドは動き続けて…るんだよ…。
std::coutも反応してる…メインスレッドとかで…処理されているからですか?何故かが…解らない…。
0465デフォルトの名無しさん
垢版 |
2020/11/04(水) 20:26:01.44ID:X2fHUOCE
464です…。いろいろ調べたら…できるみたいですが…なんでできるのかは…解りません…。
0466蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/11/04(水) 20:30:16.22ID:tdZ4i2Gl
thisインスタンスに影響しない関数のコードは多分、C言語の関数みたいに生成される。
関数のコードは不変な実体だと思う。
0467デフォルトの名無しさん
垢版 |
2020/11/04(水) 20:50:15.92ID:H9SHlq4g
難しく考えすぎ
extern "C" void the_call_back(struct obj_ptr* This)
{
free(This);
}
こうなってるだけだよ
*Thisを殺しても関数から戻るためのスタック情報はどうもせんだろ
0468デフォルトの名無しさん
垢版 |
2020/11/04(水) 21:35:20.66ID:rY/M/1xY
struct S1;

using V1 = std::variant<S1>;

struct S1
{
  std::vector<V1> m_v;
};

これ合法?
0470デフォルトの名無しさん
垢版 |
2020/11/04(水) 21:44:35.56ID:rY/M/1xY
主要3コンパイラでコンパイル出来るうえ
https://python5.com/q/djlpoyyw
紹介してる人が居る。
0471デフォルトの名無しさん
垢版 |
2020/11/04(水) 22:56:42.61ID:rY/M/1xY
駄目な根拠わかりませんか?
0473デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:14:10.93ID:E+L4EB1M
C++17以降、std::vectorは不完全型を許容していて、std::variantは
using V1 = std::variant<S1>;
の時点でインスタン化されていない。

これはどう解釈すればいいのかな?
0474デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:20:36.91ID:E+L4EB1M
これが合法なら良かったんだけど、どうも無理っぽいな。
0475デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:46:23.37ID:E+L4EB1M
using V1 = std::variant<S1>;
の時点では、テンプレートの明示的なインスタンス化はしていないし、使用していないので暗黙的なインスタンス化もされていない。

ってことでいいよね?
0476デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:54:08.91ID:E+L4EB1M
boost::make_recursive_variantやstd::anyを知らないわけじゃないんだけど、オブジェクトが必要になるたびにnewするならC#やJavaで十分なわけで、C++のうまみ成分はこういうところにあると思うんですよね。
何とかなりませんかね?
0477デフォルトの名無しさん
垢版 |
2020/11/05(木) 02:27:49.98ID:tM7hzUED
>>463
ありがとうございます。
Mojaveあたりです。
0478デフォルトの名無しさん
垢版 |
2020/11/06(金) 16:04:48.24ID:cCU0l/b0
コンストラクタの引数と初期化リスト上のメンバー変数が同じ名前でも、ビルドが通って意図どおりに動いちゃうのだけど、これって仕様通りの動作?

こんなん
: apple(apple)
0480デフォルトの名無しさん
垢版 |
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メンバだったらどうすんじゃ…
0481デフォルトの名無しさん
垢版 |
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
0482はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/11/07(土) 17:56:49.27ID:24XfCTPm
>>480
普通に出来るやで。 this->apple の間違いじゃろ。

メンバの初期化順は (初期化リストの順序と関係なく) クラス定義内でデータメンバを書いた順序なので気を付けてな。
0483デフォルトの名無しさん
垢版 |
2020/11/07(土) 17:57:34.44ID:CPm1qeuk
this
javascriptのやりすぎで脳が壊れたか
0484はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/11/07(土) 18:00:03.51ID:24XfCTPm
>>481
名前を同じにしてもうたらまずいケースがあるやないけということを >>480 は言ってるので、
名前変えればいいよってのは的外れ。
0485デフォルトの名無しさん
垢版 |
2020/11/07(土) 18:13:54.67ID:gsFmAuV5
>orange(this->apple)
ホンマやΣ(゚д゚;)!いけたわ、
警告をいつもエラー扱いにしているからてっきりエラーかとオモテタ、(言い訳
0486デフォルトの名無しさん
垢版 |
2020/11/07(土) 18:30:43.14ID:2NiwF/8v
みなさまthx
classのときはメンバ変数に何らかのprefixなりsuffixなり付けてるから名前が被ることはなかったのだけど、構造体は何も付けないことが多くて、あれ、これってOKなんだっけ、って今更ながら気になってしまいました。
メンバ定義順に初期化ってのも知らんかった…
0488デフォルトの名無しさん
垢版 |
2020/11/07(土) 22:09:33.18ID:gsFmAuV5
warning C4355: 'this' : ベース メンバー初期化子リストで使用されました。
やもーん
0489デフォルトの名無しさん
垢版 |
2020/11/07(土) 22:24:32.33ID:CdQvP3Xl
みんなC++でなにしてるの
0490デフォルトの名無しさん
垢版 |
2020/11/07(土) 22:24:57.26ID:9rEAH6th
polymorphic_allocator対応ですね。
0494デフォルトの名無しさん
垢版 |
2020/11/07(土) 23:42:39.92ID:9rEAH6th
おせーな。
5分で探して来い。
0496◆QZaw55cn4c
垢版 |
2020/11/14(土) 18:57:11.05ID:ovQs8svh
>>495
うちの会社では 2008年くらいからは C++ ではアプリは作っていなくて、もうすっかり C# に移行してしまっているようです…
いや、私は施設管理をやっているので、会社の深いところはさっぱりわからないんですけど
0497◆QZaw55cn4c
垢版 |
2020/11/14(土) 18:58:45.49ID:ovQs8svh
mfc42.dll
の内部バージョン違いに、ほとほと懲りたらしいです……
0499デフォルトの名無しさん
垢版 |
2020/11/14(土) 19:21:56.26ID:IHUe5vhA
>あれはひどかったな
ちょっなんで??
DLLにstd::vector<T>やstd::string<T>とか渡そうとした???
0500デフォルトの名無しさん
垢版 |
2020/11/14(土) 19:23:33.64ID:liKT9ZZB
仕様が違うものを同じファイル名にするなって話
ISO/IEC14882のライブラリは全く無関係
0501デフォルトの名無しさん
垢版 |
2020/11/14(土) 19:25:17.74ID:IHUe5vhA
手製DLLへのデータ渡しににはchar[]とか基本型onlyとして
CRTをスタティックリンクしたらランタイムのインストールすら不要
で完全解決…!

全要素手製でコントロールできればの話ではある
0506デフォルトの名無しさん
垢版 |
2020/11/15(日) 12:45:20.15ID:z250o8Kw
VC++ってことはプラットフォームはWindows固定か
Windows前提ならC++使い続ける理由は特にないね
0507デフォルトの名無しさん
垢版 |
2020/11/15(日) 14:27:41.73ID:1NoBqfO6
MFCなんか使うからだろ
自己責任
0508デフォルトの名無しさん
垢版 |
2020/11/15(日) 15:39:12.99ID:ZF6xjL9s
webサイトぐらいしか作った事無いド素人なのですが
cheatengineのようなツールはどうやって作るのですか?
0509デフォルトの名無しさん
垢版 |
2020/11/15(日) 16:01:31.41ID:fUqPXTtq
ツールはReactかVueですね。
0510デフォルトの名無しさん
垢版 |
2020/11/15(日) 16:32:14.80ID:U+/Dwi3J
マルチ禁止
0511◆QZaw55cn4c
垢版 |
2020/11/15(日) 21:02:27.25ID:XnBy/n8J
>>510
そのマルチポスト禁止っていうのは fj の時代ならまだしも、2ch に当てはまるのですか?
マルチポストとクロスポストの違いはなんですか?
0514デフォルトの名無しさん
垢版 |
2020/11/15(日) 22:32:36.77ID:UQYtdYHl
くだらねえ突っ込みだな
それで誰かはっとする奴がいるとでも思っているなら
どうしようもねえバカ野郎だ
0516デフォルトの名無しさん
垢版 |
2020/11/15(日) 23:22:10.25ID:AQ/HY5jp
>>511
せっかくちょい調べて回答したのに他スレで一時間前に回答が出てたらイラッとするのは当然だろ
0518デフォルトの名無しさん
垢版 |
2020/11/16(月) 00:15:05.39ID:tkpwZn9D
>>508
windowsだけで動けば満足ならメモリ読み書き関連はwinapi
デバッガ、逆アセ関連は pythonによるバイナリ解析技法 とかそれに似たような本読めば少しは載っていると思います。
0519デフォルトの名無しさん
垢版 |
2020/11/16(月) 04:42:45.86ID:tkpwZn9D
スレを全く読まないで反射で答えてしまいました。
今気付きました、すみませんでした。
0523デフォルトの名無しさん
垢版 |
2020/11/16(月) 08:01:26.23ID:QRq3yxwv
時間を無駄に使うって>>516みたいな話?
他で解決済みだったら無駄になるって意味がよくわからん。回答したらちゃんと感謝してほしいとか?
0524デフォルトの名無しさん
垢版 |
2020/11/16(月) 08:05:45.08ID:OL16ghBV
ここは技術板なのに
クロスポストできるシステムを作ろうともしない
フリーライダーが吠えてるだけだ
0530デフォルトの名無しさん
垢版 |
2020/11/16(月) 11:36:22.45ID:OL16ghBV
勝負あったな
これからもマルチであろうが何であろうが
どこにどんな投稿をしようが口出しは無用だ
収穫ゼロでご苦労だったな
0531デフォルトの名無しさん
垢版 |
2020/11/16(月) 12:57:31.91ID:sF1WJXNT
仮に百歩万歩譲ってクロスポストの機能が無いからマルチを許すとしても
マルチ投稿にはオリジナルのスレとレス番へのリンクの同時投稿を義務付けるべき
0532デフォルトの名無しさん
垢版 |
2020/11/16(月) 13:00:20.03ID:OL16ghBV
義務違反したらどうなるんだ?
実効性のない俺ルールを勝手に吠えてろセンズリこき野郎
0533デフォルトの名無しさん
垢版 |
2020/11/16(月) 13:07:05.30ID:BvdXplQc
義務ではないよ
答えの付かない質問だけが残ってるのって寂しくない?
質問に答えが付かないって認識が定着しちゃうとコミュニティの衰弱にも繋がる
悲しいね
0534デフォルトの名無しさん
垢版 |
2020/11/16(月) 15:15:24.81ID:OL16ghBV
どう書けば回答が付きやすいかなんて
みんなそれぞれ考えてることだ

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

俺様が自分の頭で考えてるのはまだマシなほうで、
fj時代で頭の更新が止まったままの化石か
古代遺跡から発掘した碑文に洗脳されたバ…若者か知らんが
おおかたそういう手合いのマニュアル人間だろどーせ
0535デフォルトの名無しさん
垢版 |
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しないといけないです
もっとスマートないい方法はないでしょか
0536デフォルトの名無しさん
垢版 |
2020/11/16(月) 17:09:54.39ID:OL16ghBV
a4,b3,c2,d1,e5
↓わざわざこんなことしなくていいと思う
a3,b2,d1,e4

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

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

ところでB-treeってなんですか(・∀・)?
0553デフォルトの名無しさん
垢版 |
2020/11/17(火) 12:40:30.03ID:PuHDpULa
二分木、binary tree

b-tree, b+tree とか色々な種類がある。
データベースは、b+treeが多い
0554はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/11/17(火) 12:52:49.72ID:lifPo1s+
B木 (B-tree) は二分とは限らないよ。
ところでこのBはバランスのBかと思ってたんだけど
考案者とか関連会社の頭文字という説もあるみたいだね。
0555デフォルトの名無しさん
垢版 |
2020/11/17(火) 13:16:51.60ID:XfP96roT
BinaryかBalanceかどっち?
0557デフォルトの名無しさん
垢版 |
2020/11/17(火) 13:40:16.49ID:KFJ2cj0W
発祥はわからんけど今となってはBalanced/Balancing Treeだろうな
日本語訳も平衡木だしね
0558デフォルトの名無しさん
垢版 |
2020/11/17(火) 17:31:51.25ID:gGBQNTu8
定期的に最小完全ハッシュ関数を求めて置き換える。
0559デフォルトの名無しさん
垢版 |
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.
0560デフォルトの名無しさん
垢版 |
2020/11/17(火) 21:21:24.35ID:LFLSoNm5
完全ハッシュって、衝突が起こりえないってこと?
ハッシュの使い方の基本がわかってねえやつが考えることの典型だが
0562デフォルトの名無しさん
垢版 |
2020/11/18(水) 10:04:24.66ID:fvU2iODC
完全ハッシュ関数は簡単に作れる。

auto hash(auto a) { return a; }

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

これぞ神言語。
0566デフォルトの名無しさん
垢版 |
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 になる
0567デフォルトの名無しさん
垢版 |
2020/11/18(水) 16:06:44.89ID:fvU2iODC
C++も結構風呂敷広げる系言語だけど、Haskellには負けてしまうなあ。
0570デフォルトの名無しさん
垢版 |
2020/11/18(水) 21:47:58.74ID:fvU2iODC
上げ。
0571デフォルトの名無しさん
垢版 |
2020/11/18(水) 21:51:25.76ID:fvU2iODC
完全最小ハッシュ関数は、Nginxで使われてたんじゃなかったかな。
前に調査した時見たと思うわ。
0572デフォルトの名無しさん
垢版 |
2020/11/20(金) 16:43:55.07ID:WhXHGWda
Windows環境のVC++2010でマクロプログラムを作ってます。
CapsLock状態をプログラム上から直接変更する手段はありますか?
最悪仮想キーコードでシフト押下、Caps押下、離す、離すの4手で実現はできるのかなとは思いますが
0574デフォルトの名無しさん
垢版 |
2020/11/20(金) 17:05:17.17ID:KM6YfWXc
>>572
できなかったと思う
できたとしてもやるべきではない
CapsLock状態かどうかを調べることはできる
プログラムでAを入力するときCapsLock状態ならaを送る
CapsLock状態でないならShift+aを送る
なんてことをやったことある
0575デフォルトの名無しさん
垢版 |
2020/11/20(金) 17:48:13.50ID:2Xtms9kk
質問するときくらい、あげていきましょうや。
0576はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/11/20(金) 18:07:40.81ID:QATBBV0x
専用ブラウザでお気に入りスレを巡回するし、
スレ一覧を見るときもタイトルで検索かけるから
上がってるか下がってるかなんて見てないな。
見てる人ってそんなにいる?
0577デフォルトの名無しさん
垢版 |
2020/11/20(金) 18:39:27.79ID:2Xtms9kk
専ブラってなんすか?
0578デフォルトの名無しさん
垢版 |
2020/11/20(金) 20:09:54.73ID:8HnFa960
むかし2chが検索からガンガン流入してた時代は意味あったけど
もはや検索からははみごにされ廃れきってネット老人サロンと化した
今の5chではほとんど意味ない文化だなage/sage
0579デフォルトの名無しさん
垢版 |
2020/11/20(金) 23:20:16.49ID:2Xtms9kk
だったら、上げていきましょうや。
0581デフォルトの名無しさん
垢版 |
2020/11/21(土) 08:35:59.33ID:beyH0yOT
LINEで既読スルーがどうたらと一喜一憂してるバ…若者をうらやましいと思ったことは只の一度もない
やたら何たら離れしまくり四六時中ゲームしかしなくなる廃人化傾向は嘆かわしい限りだ
老害で結構だ、言わせておくさ てめーらより人生楽しいぜ
0582デフォルトの名無しさん
垢版 |
2020/11/21(土) 09:06:30.33ID:gA6oFLIj
べつに老害とかいうてませんがな
たんじゅんに皆年寄なりましたな、いうてるだけで
0583デフォルトの名無しさん
垢版 |
2020/11/21(土) 09:09:50.16ID:beyH0yOT
ワード1つに噛みつく以外に言うことが何もねえってことか
少しくらいあれよ、これ以上絶望させてくれるな
0584デフォルトの名無しさん
垢版 |
2020/11/21(土) 09:12:51.55ID:kTU0dCRJ
おじいちゃん、こんなクソスレで何をそんなに息巻いてるのよ
お体に障りますよ
0587デフォルトの名無しさん
垢版 |
2020/11/21(土) 13:02:47.48ID:t4UXk0gp
したがって、上げていきましょうや。
0588デフォルトの名無しさん
垢版 |
2020/11/22(日) 01:10:01.54ID:mIY2Yy/p
>>573-574
ありがとうございます。
ゲーム側の仕様で歩く/走るの切り替えがCapsLock状態なので、そこを制御したかったんですよね。
Shift押しっぱなしでも切り替わるは切り替わるんでそれをメインに考えてみます
0590デフォルトの名無しさん
垢版 |
2020/11/22(日) 14:26:33.97ID:KUPbiAdd
>>589
仮想関数と同じように、クラスごとにコンパイラがデータ生成して個々のオブジェクトから辿れるように埋め込む。
0591デフォルトの名無しさん
垢版 |
2020/11/22(日) 14:33:39.46ID:gdEBKvV8
どんな高度なことをやってるように見えてても結局はC言語で実装してんの?
0592デフォルトの名無しさん
垢版 |
2020/11/22(日) 15:03:04.61ID:h+lYxto0
>>591
CPUが直接理解できるのはマシン語のみ。
そのマシン語に一対一に近い対応関係があるのはC言語。
だからどんな高度なことをやっているように見えてもほとんど全ての場合が
C言語で書ける。
0593デフォルトの名無しさん
垢版 |
2020/11/22(日) 15:51:20.82ID:o/Js7Lov
>>590
RTTI有効にしたらパフォーマンス落ちるっていうのをみたことあるけど
ただデータ(プログラム領域?)が増えるだけなら落ちなくない?
0594デフォルトの名無しさん
垢版 |
2020/11/22(日) 17:19:17.03ID:LCd15qeF
仮想関数テーブルのアドレスがクラスのIDの役割を果たす
からRTTIするには仮想関数が1個以上あれば良く、
それさえクリアしたら追加の空間コストはない
0595デフォルトの名無しさん
垢版 |
2020/11/22(日) 17:29:03.52ID:2nm5SjZ0
多態するならデストラクタが仮想のはずだから事実上は追加コストないんだよね
0597デフォルトの名無しさん
垢版 |
2020/11/22(日) 20:07:55.27ID:BvpndlWI
>>593
ほとんど落ちないはずだが、RTTIとは別意に一般論として仮想関数を1つでも
定義することによって、非常に僅かながら落ちる。
オブジェクトを new した時、オブジェクトの隠れたメンバに、仮想テーブル
のアドレスを書き込む必要があるので、new一回当たり 1 クロックだけ遅くなる。
また、オブジェクトにアドレスを1個格納するのに必要な領域が増やす必要がある。
これは、32BITモードの場合、4バイト、64BITモードの場合、8バイト。
0598デフォルトの名無しさん
垢版 |
2020/11/22(日) 23:24:02.57ID:LCd15qeF
RTTIするからといって多態性設計とは限らないんじゃ…
古き良きenum定数によるswitchの代替という使い方も有り得る
0600デフォルトの名無しさん
垢版 |
2020/11/23(月) 06:52:19.04ID:SrPyOTC6
単純にexceptionで捕獲した例外をsystem_errorとかで場合分けとかね
catchをオーバーロードするよりこっちのほうが融通が利く
0601デフォルトの名無しさん
垢版 |
2020/11/23(月) 21:12:23.11ID:gAkTmGSN
そんなコストを気にするほどランタイム速度要求の厳しいソフトなんかお前ら書かんだろ
0603デフォルトの名無しさん
垢版 |
2020/11/24(火) 01:19:31.94ID:IV+MkG/a
>>602
確かに変わる。
大量のテキストファイルをパースする際の字句解析など、
今でもコードの1クロックの差で体感速度が現実に変わってくる。
0604(u_・y) ◆e6.oHu1j.o
垢版 |
2020/11/24(火) 16:34:51.81ID:qTKKRlIf
(u_・y)最近C++で作られた出来の良いアプリって存在するの?
(u_・y)もう世の中のほとんどがブラウザーとそのブラウザー上で動作するスクリプトで完結してる気するんだけど
0611デフォルトの名無しさん
垢版 |
2020/11/25(水) 18:03:06.30ID:GXxyf9BA
噂によると、メモリモデルに辟易していた、りーぬす先生が、NEW見た瞬間メモリモデルこれでよくねー?病にかかったと聞いた。
0614デフォルトの名無しさん
垢版 |
2020/11/26(木) 20:31:56.32ID:rfhyh3I2
今からC++勉強しようと思ってるんだけど江添本って評判いいの?
0615はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/11/26(木) 21:31:52.07ID:aL88M1qg
>>614
「江添亮のC++入門」のことだよね。
評判は悪くはないと思うよ。
太っ腹なことに全文が github に置いてあるからタダで読めるし、
とりあえず序盤だけでも読んでみればいいんじゃないかな。

序盤でヘッダファイルの説明をすっとばして雑にやってるし、
継承の仕組みについて全く触れてなかったりするのは
入門向けにかなり思い切って省いてる感じはする。
一通り理解した後では他の本も読んだほうが良いと思う。
0621デフォルトの名無しさん
垢版 |
2020/11/28(土) 08:49:49.77ID:/IOgDWl9
可変引数テンプレートのコンストラクタだとコピーコンストラクタやムーブコンストラクタより優先順位高い事ある?
0625デフォルトの名無しさん
垢版 |
2020/11/28(土) 14:33:28.98ID:/HPnbUmI
そのAhoはムーブじゃなくてbokeを作る時のデフォルトコンストラクトで出てる
0626はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/11/28(土) 14:35:42.94ID:gUqAhKBc
>>624
Test<double> boke;
のときにデフォルトコンストラクタ (引数がないコンストラクタ) を呼出す。
引数なしで呼び出せるのはそれしかないからそれを呼ぶってだけで、
優先もクソもないのじゃ。
0630デフォルトの名無しさん
垢版 |
2020/11/28(土) 21:09:45.69ID:2t4HVeMH
またアホみたいな流れかおもたら
意外とちゃんとした質問応答の流れでビビった
0631デフォルトの名無しさん
垢版 |
2020/12/01(火) 15:54:55.38ID:V2eyqU/t
gdbのプロンプトでシェルの文法使う方法ある?
具体的にはfor文で配列を走査しながら内容をprintしたりしたい
0634デフォルトの名無しさん
垢版 |
2020/12/02(水) 05:03:16.50ID:OLoYTJfY
OSはOS X10.15.7でApple clang12.0.0のC++17指定です
vector<tuple<int, int, int>> T;
vector<pair<int, int>> P;
のような配列(stdは省略)を作成したのですが以下のような挙動になりました
P.emplace_back(i, j); //通る
P.push_back(i, j); //エラー
P.emplace_back({i, j); //エラー
P.push_back({i, j}); //通る
P.emplace_back(make_pair(i, j)); //通る
P.push_back(make_pair(i, j)); //通る
省略はしてますがtupleも大体同じです(i, jはint)
push_backが一時コンストラクトをムーブしてることやmake_pairやmake_tupleに
型の推論があることは調べたのですが上記のようになる理由が分かりませんでした
後clangとg++でどちらに合わせた方が標準的というのはあるのでしょうか
図々しくも質問が2つになってしまいましたがよろしくお願いします
0635デフォルトの名無しさん
垢版 |
2020/12/02(水) 11:08:47.58ID:3dB9NeQy
>>634
「上記のよう」と言われても、どの挙動に疑問を感じてるのかわからない。
「clangとg++」の質問も、ここで誰かに「ある」とか「ない」とか言われて何の意味があると思ってるのかわからない。
0636デフォルトの名無しさん
垢版 |
2020/12/02(水) 11:20:44.01ID:CcFfxv7q
>>634
まず君がemplace_backとpush_backの違いをどう理解しているのか、自分の言葉で説明してみよう
話はそれからだ
0637はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/02(水) 11:59:18.46ID:wCsCmSK2
>>634
そういう言語仕様だからそうなるとしか言えない。
たぶん必要な情報は
 ・ emplace_back ( https://cpprefjp.github.io/reference/vector/vector/emplace_back.html )
 ・ push_back ( https://cpprefjp.github.io/reference/vector/vector/push_back.html )
 ・ 一様初期化 ( https://cpprefjp.github.io/lang/cpp11/uniform_initialization.html )
かな。

言語仕様に沿っていれば普通は gcc でも clang でも問題は起きない。
たまには処理系のバグってことも無くはないが、
どちらかで問題が起きるなら書いたプログラムのどこかが間違ってる疑いのほうが濃い。

個別の事情によってはコンパイラをどちらかに固定することもあるかもしれないが、
理想としてはどちらでも良いようになっているほうが好ましくはある。
0639デフォルトの名無しさん
垢版 |
2020/12/02(水) 21:51:44.10ID:3RyObk2q
プログラミング初心者でC++で競馬予想ソフトを作ってみたいんだけどC++はそういうのに向かないんですかね?
スクレイピングってやつはC++でできないのか?
0640デフォルトの名無しさん
垢版 |
2020/12/02(水) 22:26:25.03ID:FHuLcrq8
できるけどC++はWebやテキスト処理が得意とはいい難いから別の言語の方がいいかも
0644デフォルトの名無しさん
垢版 |
2020/12/02(水) 23:31:37.18ID:3RyObk2q
ありがとうございました!
0647デフォルトの名無しさん
垢版 |
2020/12/02(水) 23:56:36.23ID:9+QNoiNo
pythonは仮想マシーンが必要
変数がすべてvariantなので初心者にはうってつけよ
0649デフォルトの名無しさん
垢版 |
2020/12/03(木) 06:42:09.17ID:w/MpdpQO
勉強するぞ!勉強するぞ!勉強するぞ!


C++には似合わないような気が。
0650デフォルトの名無しさん
垢版 |
2020/12/03(木) 11:49:30.18ID:4DIFtwYV
>>649
どういう意味だ?
1. C++erならそれくらい勉強せずに使いこなせ
2. あるがままを受け入れろ。状況を変えようとするな
3. Pythonを便利と言うな

どれ?
0651デフォルトの名無しさん
垢版 |
2020/12/03(木) 22:01:01.64ID:anyYWQoy
「ブラック企業社員」のお助けアプリが誕生 開発したのは22歳金髪大学生、開発のきっかけとは?
https://news.yahoo.co.jp/articles/b9d5e3b84e4aa78fab64d3eb8e0c02f72911287e
レシート買い取りアプリONEの17歳起業家、サービス一時停止から「怒涛の3カ月」で気づいたこと
https://www.businessinsider.jp/post-175983
ビジネス版マッチングアプリ「yenta(イェンタ)」全国展開 開始!
https://prtimes.jp/main/html/rd/p/000000023.000021544.html
ギフティング「TANP」運営がGCPほかから5億円調達
1日1200件の「リアルギフト」送付も可能に、U25起業家の新たな挑戦
https://thebridge.jp/2019/08/gift-ec-tanp-raised-500m-yen-from-gcp
人はこうすれば“ハマる”、源流はゲーマー視点の「幸せ」
https://project.nikkeibp.co.jp/behealth/atcl/feature/00005/012100006/
アプリ開発での起業は難しくない!成功するために覚えておくべきこと
https://www.biz.ne.jp/subject/blog/2004433/
【稼ぎ方が知りたい!】アプリの開発の収入って実際どれくらい?
https://itpropartners.com/blog/1657/
ネット関連事業で起業した成功例8選!ネットで成功するには○○が重要!?
https://www.official.or.jp/internet-entrepreneurship-success/
0652デフォルトの名無しさん
垢版 |
2020/12/04(金) 14:40:55.75ID:rp0tCaVB
>>637
返信遅れて申し訳ありません、読んで色々試したら何となくですが理由見えてきました
一番為になった回答です…本当にありがとうございました
0654デフォルトの名無しさん
垢版 |
2020/12/05(土) 08:56:44.63ID:F3hjf/ak
最近ずぶの素人にいきなりSTL教えたりする変な風潮、変なサイトが増えたせいで
こういうとこで初心者が苦労するんだよなぁ
ライブラリの使い方なんか、初心者がいきなりぶつかる"壁"であってはならんと思うんだが・・
先に言語自体の基本を学んでれば、>>634はここに聞きに来なくて済んでるはず
0657デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:17:08.79ID:i8LYHGeY
そんなの意識する必要ない。"STL"なんて定義曖昧な言葉を使わなければよい。
0658デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:41:24.32ID:f0cq7ZxN
C++を使わなくてもSTLを学ぶほうが良い。
それどころか、およそ学問というものに携わる者はSTLを学ぶべきだ。
なぜなら20世紀における抽象化最大の功績だからだ。
0659デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:42:36.00ID:f0cq7ZxN
STLは宇宙人が教えた説があるほどクレバー、クレバー、そしてクレバーだ。
0660デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:47:59.12ID:f0cq7ZxN
目からうろこですよ。
まじ鱗。
0661デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:53:54.60ID:f0cq7ZxN
ムーブセマンティクスも感動したなあ。
あいつら本物の天才だな。
まじ鱗ですよ。
0662デフォルトの名無しさん
垢版 |
2020/12/05(土) 12:09:38.13ID:WVFX1CVk
unique_ptrとかthreadとかnumeric_limitsとかも"standard template library"だけどSTLとは呼ばれない
よく理解してないC++アンチが何となく叩きの槍玉に上げる時に使われる用語っていう印象
0663デフォルトの名無しさん
垢版 |
2020/12/05(土) 12:15:33.65ID:f0cq7ZxN
なんじゃそりゃ。
0665デフォルトの名無しさん
垢版 |
2020/12/05(土) 18:59:09.68ID:ynooL14Y
>>634
pairが初期化子リストによるコンストラクタを持たないから

c++ - emplace_back not working with std::vector<std::map<int, int>> - Stack Overflow
https://stackoverflow.com/questions/33207232/emplace-back-not-working-with-stdvectorstdmapint-int?answertab=votes#tab-top

似たような質問があって、mapだと初期化子リストのコンストラクタがあるから、initializer_listを使って初期化出来てる

この箇所あたりがそれ
https://cpprefjp.github.io/reference/map/map/op_constructor.html

map(initializer_list<value_type> init,
const Allocator& alloc); // (11) C++14 から

https://cpprefjp.github.io/reference/utility/pair/op_constructor.html
pairのコンストラクタにはinitializer_listは出てこない
0668デフォルトの名無しさん
垢版 |
2020/12/06(日) 08:19:51.08ID:tzyWxjgm
じゃあ、多数決で決めましょうや。
0669デフォルトの名無しさん
垢版 |
2020/12/06(日) 11:09:55.43ID:sjTPCZjA
>>667
違うんだったら何が正解だ?
0670デフォルトの名無しさん
垢版 |
2020/12/06(日) 13:55:38.68ID:hI81p89D
>>669
単純にemplace_backはコンストラクタに渡す引数を、push_backは生成済みの実体を受け取るという違いを
>>634が分かってないだけだろ

ついでに言えば、pairにinitializer_listを受け取るコンストラクタがあっても
emplaceは可変長テンプレート引数だから、推定に失敗してどっちにしてもエラーになる
多分。
0671デフォルトの名無しさん
垢版 |
2020/12/08(火) 20:44:18.72ID:efO/t6By
visual studio 2019でstd::filesystemを使いたいのですが、namespace"std"にfilesystemがありませんと言われます
ググた通りにC++言語標準をC++17にしても変わりません
どうすればいいですか?
0672デフォルトの名無しさん
垢版 |
2020/12/08(火) 21:02:15.62ID:O6ovwbXJ
上の方に
#include<filesystem>
と書く
0673デフォルトの名無しさん
垢版 |
2020/12/09(水) 01:24:22.81ID:WuZTb4kZ
なんだそりゃあ?!
0674デフォルトの名無しさん
垢版 |
2020/12/09(水) 06:50:42.80ID:OrjjObtT
>>671
// cl 671.cpp /EHsc /std:c++17
#include <filesystem>
#include <iostream>

using namespace std;
using namespace std::filesystem;

int main()
{
directory_iterator d(current_path());
for(auto&& e : d) cout << e.path() << endl;
}
全く問題なく動くぞ
cl.exeのバージョンは19.28.29334 for x64
0675デフォルトの名無しさん
垢版 |
2020/12/09(水) 08:05:49.03ID:TKgHvdMy
>>671
脱線の話だがappleのclangでfilesystem使おうと思ったら、
OSを10.15以降にしないと動かない上にビルドしたバイナリもそれ以降。
macだとintel版はhomebrewでgcc落としてビルドすれば旧いのでも動く。

日本語などのファイル名の扱いは、自分の試した範囲で、mac,linux,winで微妙に違ってた。
「wstring」、「stringでutf-8」のどっちかしか出来ん処理系があって、
複数機種用のコードは結局ifdefで分けるしかなかった。
そのうちライブラリが整備されるとは思うけど。
しかし「ハ゜」→「パ」のmacの仕様には参った。
0676デフォルトの名無しさん
垢版 |
2020/12/09(水) 09:04:33.91ID:bCzZQrOf
脱線路運動。
0680はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/13(日) 13:34:03.99ID:hv54fxHN
ブログホスティングサイトの系統だと RSS を提供してないところとかあんまりないと思うが。
0682デフォルトの名無しさん
垢版 |
2020/12/14(月) 19:00:34.80ID:mjvV58cu
std::vectorのメンバ関数にfind()とかrfind()がないのはなんでですかね?
string::find()みたいにあってもよさそうな気がするんですが・・・
0684デフォルトの名無しさん
垢版 |
2020/12/15(火) 09:25:27.40ID:rqj48Chi
>>682
#include <algorithm>のfind()を使えってことだ
何でもかんでもメンバに突っ込むのは悪い設計だからだ
この意味でstring::findは蛇足ともいえる
現実にはstring::findはiteratorではなくsize_typeを返すので
複数の文字列の同じ位置、のようなことがやりやすい
0685デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:10:21.94ID:qBOs25Ot
UTF8とかだと単純に同じバイト値探せばいいわけじゃないからstringは特殊化してるんだよ
0686デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:19:55.29ID:PHBBuZ6n
>何でもかんでもメンバに突っ込むのは悪い設計だからだ
こういう考え方いかにもCから入りましたって感じだな
0687デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:21:51.75ID:gbeRTgGG
UTF-16(wchar_t)と違ってUTF-8(char)なら同じバイト列を探せばいいんじゃないの?
ASCIIと同じコーディングで済むのがUTF-8が普及した要因だと思ってた
0688デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:36:54.46ID:8mWx/Grk
>>687
短い系列は特に、部分列が一致したからといっても、
デコードした時にその文字かどうかは保証出来ないんじゃ?
0689デフォルトの名無しさん
垢版 |
2020/12/15(火) 14:01:10.21ID:gbeRTgGG
std::stringってバイト単位で扱うものでしょ
本当に文字単位で扱いたいならstd::wstring
0696デフォルトの名無しさん
垢版 |
2020/12/15(火) 22:25:44.23ID:jc1ZwvrK
そもそもstring::findがあるのは文字列から文字列を探す需要が高いからじゃないですかね
vector含む各コンテナから探すのはほとんどの場合要素単位だから汎用的なstd::findを使えということと解釈
0697デフォルトの名無しさん
垢版 |
2020/12/16(水) 06:17:15.68ID:vxgFSXGy
>>696
だよね
std::stringのfindは要素を探すんじゃなくて、
要素(char)の連なり=部分文字列を探すもので
vectorとかのコンテナのそれとは異質だし蛇足とは思えない
0699デフォルトの名無しさん
垢版 |
2020/12/16(水) 09:05:13.62ID:9tcp04F0
まぁ汎用的というか、stlのアルゴリズムはほとんどが全コンテナに対して共通のコードに出来るからそうしてる(グローバルな関数にしてる)んじゃないかね
実際問題、共通のインターフェースを継承によって表現するのでない限り、同じコードをあちこちメンバ関数にするのは不自然
逆に共通のインターフェースにすべきクラスの機能を無理に普通の関数にするのも馬鹿げてる
0701デフォルトの名無しさん
垢版 |
2020/12/16(水) 11:28:07.30ID:Hv+rjawS
データ構造とアルゴリズムを合わせたものがクラスでありオブジェクト指向言語の特徴の1つと教わった
いまは汎用アルゴリズムが再び外部に分離されるようになってきてるのかな
テンプレート・ジェネリクス・インターフェースのおかげかな?
型Tに対する操作を外部化しておいたほうが汎用的で型Tを実装するすべてのクラスが操作を個別に持つのは無駄ってことか
0702デフォルトの名無しさん
垢版 |
2020/12/16(水) 11:50:27.11ID:uK3tjXUx
beginとendをペアで指定しないといけないポインタ的iteratorのせいで外部化せざるを得なかったという方が正しいんじゃないですかね
0704はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/16(水) 13:09:55.17ID:zkq7HUY5
>>701
オブジェクト指向にも種類がある。
ただひとつのオブジェクト指向がオブジェクト指向たる基準があるわけではなくて、
わりとふんわりした概念だよ……。
C++ の場合はカプセル化に軸があると思う。
隠されていないデータを処理する分にはメンバ関数にする必然性がない。
0706デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:34:22.28ID:KCK/bj61
抜け道があるかって意味なら、java等もカプセル化できないってことになるけど
0707デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:45:31.91ID:O+yPS5En
>>701
そういうことじゃねえよ
データ構造とアルゴリズムごちゃ混ぜにしたのをクラスと言い張る意味はない
1つの目的のためのお膳立てを揃えたものがオブジェクトでオブジェクトの種類がクラスだ

C++標準のライブラリではデータ構造はコンテナ、アルゴリズムは関数テンプレートとして分離されている
コンテナは配列やリストといったデータ構造を提供するまでにとどめ
それらを使って何かする応用までメンバにはせず関数テンプレートにしてある
0708デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:50:56.36ID:j60AFdVm
>>706
Javaのリフレクションで何でも呼べる抜け道みたいな話ではなく
C++ってヘッダーファイルにprivateメンバー書かないといけないじゃん
そのせいで内部実装が変わったらライブラリ利用者にヘッダーファイルを差し替えてもらわないといけなかったりする
これってカプセル化できてないってことじゃない?
pimplとかテクニックがあるけどさ
0710デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:55:52.62ID:KCK/bj61
なる。
そういうことならpmplかインターフェースクラスを定義するかしか思い浮かばないな
0711デフォルトの名無しさん
垢版 |
2020/12/16(水) 14:40:21.32ID:O+yPS5En
> 内部実装が変わったらライブラリ利用者にヘッダーファイルを差し替えてもらわないと

これ、そんなに深刻な問題か?
ライブラリの更新なんてリポジトリ決めてバージョン管理して
あとは勝手に落とせで運用できてるやん
0712はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/16(水) 15:35:04.62ID:zkq7HUY5
現実的な部分では運用でなんとかしてる部分はあるのも確かだが、
現実に対する妥協なのでパラダイム的な話とは区別が必要じゃない?
まあ不可分なところもあるんで微妙な話ではあるけども。
0714デフォルトの名無しさん
垢版 |
2020/12/16(水) 18:14:53.45ID:O+yPS5En
>>712
運用できていても、いささかでも無理があれば
まだ余裕があるうちでも将来を見据えて
議論する価値が出てくるね

問題は無理を全く感じていないことを
空想論的に問題視することだ
個人的に問題視するのは勝手だが
他人が付き合ってくれないときにしつこくすることだ
0716デフォルトの名無しさん
垢版 |
2020/12/16(水) 22:51:18.04ID:IUrbfkPB
C++はゼロコストで極力あらゆる制御をプログラマーに与えることを
使命ていうか至上命題にして至高のレーゾンデートルとみなしているように見えるので
プログラミングパラダイムを論じるにはいまいちに思はるる、

やっぱヘッダファイルとか批判者にとってかっこうの餌食でありその光景がまさに展開された、
0717デフォルトの名無しさん
垢版 |
2020/12/16(水) 22:58:46.39ID:IUrbfkPB
きちんとオブジェクト指向するんなら継承は全部virtualであるべきや
といってもC++だけにあてはまる批判ではないが

Base::Foo()とDerived::Foo()が異なる振る舞いで定義されているときに、
func(Base&)にDerivedを渡したらfunc()の中ではBase::Foo()が呼ばれるとか
危険極まりない
この基準で言ったらたいていの似非オブジェクト指向言語はNG
0719デフォルトの名無しさん
垢版 |
2020/12/16(水) 23:25:11.55ID:2c+prgNQ
クラスベースオブジェクト指向はすべて似非オブジェクト指向
アランケイ「C++のオブジェクト指向?知らない子ですね…」
0720デフォルトの名無しさん
垢版 |
2020/12/17(木) 01:05:17.90ID:X4tT/GwL
>>716
>C++はゼロコストで極力あらゆる制御をプログラマーに与えることを
>使命ていうか至上命題にして至高のレーゾンデートルとみなしているように見えるので
半分は正しいがそれならcでええやんてなる。
c++のc++たる所以(もしくは厨受けするところ)ってのは、ゼロコストなのにさらにどんなに高級な機能も入れられるんやで〜ってところだろ。
0722デフォルトの名無しさん
垢版 |
2020/12/17(木) 07:05:17.82ID:iG8ucCJK
非仮想だとそうなっちゃうっていう批判なんだろ
ハイディングなんかする方が悪いと思うけど
0724デフォルトの名無しさん
垢版 |
2020/12/17(木) 08:15:27.96ID:61mx8GyZ
>>720
「使った機能にあったコスト」だよ。
ゼロコストはあくまで機能を使わなかった場合の話。
cの機能しか使わなかったらcのコストしかかからないのが基本方針だろ。
0726デフォルトの名無しさん
垢版 |
2020/12/17(木) 14:49:46.67ID:4VSV+Zch
#include <charconv>
using namespace std;

int main()
{
char str[] = "123";
double dbl;
from_chars(str, str + 3, dbl);
}

Visual Studioでは通るんだけど、GCCではダメ
どうも戻りのfrom_chars_resultがテンプレートになってて推論に失敗してるようなんだけど
規格ドラフト見てもfrom_chars_resultがテンプレートだなんてどこにも書いてない

これGCCがおかしいんだよな?
バグレポ上がってたりする?
0729デフォルトの名無しさん
垢版 |
2020/12/17(木) 17:33:27.07ID:4VSV+Zch
>>728
23.20.1 Header <charconv> synopsisにはfloat, double, long doubleが挙がってるんだけど・・・
ああ、GCCがってことねthx
0730デフォルトの名無しさん
垢版 |
2020/12/17(木) 22:56:50.01ID:mqVedE2Y
gccの傾向として、熱烈な信者がいて、出来ないことを出来ると宣伝したり、劣っているものを優れていると宣伝したりする場合がある。
ところが、そのような場合、GNUのマニュアルは「出来ない」「劣る」と明言している場合が多い。
したがって、gccについてはみだりに検索せず、GNUのサイトを見ることをお勧めします。
0732デフォルトの名無しさん
垢版 |
2020/12/18(金) 01:16:51.95ID:UPU6Cu+L
ダメコンは、ダメージコントロールの略ですよ。
0733デフォルトの名無しさん
垢版 |
2020/12/18(金) 05:02:08.68ID:t+i2XnfT
継承使うと密結合になり変更に弱くなるし(実行時のオーバーヘッドにもなりそう)
規約で縛るというSTLの実装には好感が持てる
0734デフォルトの名無しさん
垢版 |
2020/12/18(金) 06:51:33.39ID:TZi3wQJw
>>731
W:\>g++ g1.cpp
g1.cpp: In function 'int main()':
g1.cpp:8:33: error: no matching function for call to 'from_chars(char [4], char*, double&)'
8 | from_chars(str, str + 3, dbl);
| ^
In file included from g1.cpp:1:
C:/msys64/mingw32/include/c++/10.2.0/charconv:595:5: note: candidate: 'template<class _Tp> std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int)'
595 | from_chars(const char* __first, const char* __last, _Tp& __value,
| ^~~~~~~~~~
C:/msys64/mingw32/include/c++/10.2.0/charconv:595:5: note: template argument deduction/substitution failed:
In file included from C:/msys64/mingw32/include/c++/10.2.0/charconv:40,
from g1.cpp:1:
C:/msys64/mingw32/include/c++/10.2.0/type_traits: In substitution of 'template<bool _Cond, class _Tp> using enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = std::from_chars_result]':

まだまだ延々続くけど、こんくらいでいい?
0739デフォルトの名無しさん
垢版 |
2020/12/18(金) 13:23:30.53ID:2eIYLdZu
n要素のvectorをm要素に変えたいときって中身はどうでも良いって思ってれば
vec = vector<int>(m);

vec.assign(m);

vec.resize(m);
もコスト変わらない?
0741デフォルトの名無しさん
垢版 |
2020/12/18(金) 13:40:56.80ID:TZi3wQJw
>>737
何がしたいの?
元ソース貼ってるからそっちでコピペして
手元のGCCでコンパイルしてみれば再現するはずだよ
0744デフォルトの名無しさん
垢版 |
2020/12/18(金) 14:33:16.19ID:kYvjoJp5
>>729
gccではMLで夏くらいにfloat版の実装のコミットの話が出てたから次のリリースでは多分実装されてるんじゃないかな。
0745デフォルトの名無しさん
垢版 |
2020/12/18(金) 15:35:36.73ID:A9pQAhpY
>>729
23.20.1がHeader <charconv>のドラフトってどれだ?
0748デフォルトの名無しさん
垢版 |
2020/12/18(金) 17:24:37.67ID:TZi3wQJw
>>747
そうか、思考停止するのか
よかったね

何だか色々と前提置いてるけど
俺は知らんよ、おまえさんの前提なんぞ
イヤミ口調のくせに脇が甘いな
0749デフォルトの名無しさん
垢版 |
2020/12/18(金) 17:28:32.84ID:Mxkr6hqK
priority_queue<int>に比較関数を指定したいとき、
priority_queue<int, vector<int>, greater<int>>
のようにすると思いますが、内部コンテナ vector<int> は別にデフォルトのままで良いし書くのが面倒なので省略したいです
可能ですか?
0751デフォルトの名無しさん
垢版 |
2020/12/18(金) 18:41:07.57ID:UPU6Cu+L
gccの場合、未実装でもスタブだけ存在する場合があるんですよね。
つまり、コンパイル時やリンク時にはエラーにならない。
悪いことに実行時にもエラーにはならず、静かにスルーされる場合さえあるんです。

ここまでの流れでもお気づきでしょうが、gccの熱烈なファンは、gccが後れを取ることが許せないんですよ。

ですから、gccの熱烈なファンサイトより、GNUのマニュアルを見ることをお勧めします。
マニュアルを見れば、たいていは、きちんと書いてあります。
0753デフォルトの名無しさん
垢版 |
2020/12/18(金) 19:59:32.56ID:A9pQAhpY
>>748
ここ以外に各コンパイラでの実装具合が上手い事まとまってるサイトとかあんの?
0754デフォルトの名無しさん
垢版 |
2020/12/18(金) 20:30:00.87ID:A9pQAhpY
コンパイラのサポート状況 (C++17) - cppreference.com
https://ja.cppreference.com/w/cpp/compiler_support/17

こっちでの表現は「初等文字列変換」になってんのか
分かるワケねーな
0755デフォルトの名無しさん
垢版 |
2020/12/18(金) 20:48:34.81ID:A9pQAhpY
>>746
N4713のpdfとかどこをどう漁れば出てくんだ?
全然見つからないんだけど
0757デフォルトの名無しさん
垢版 |
2020/12/18(金) 20:53:49.00ID:UPU6Cu+L
https://github.com/cplusplus

ここで検索すればドラフトならみられますよ。
向こうも見てるだろうけど。
0758◆QZaw55cn4c
垢版 |
2020/12/18(金) 21:01:49.42ID:ivKQNPRV
>>751
関係ないけれども、gcc って今は C++ で記述されているんですよね
長い間私はそれをとても残念に思っています
オプティマイズは苦手であってもいいから C で記述されている C++ 処理系って存在するのでしょうか?
0760デフォルトの名無しさん
垢版 |
2020/12/18(金) 21:20:36.71ID:UPU6Cu+L
おーけーぐーぐるえぬよんなないちさん、と言いました。
0761デフォルトの名無しさん
垢版 |
2020/12/18(金) 21:37:45.97ID:A9pQAhpY
行き着いた、ってのは>>746の彼がだよ
どういう経緯で彼が「これこそが勉強すべきドラフトである」と結論したんだ?
0762デフォルトの名無しさん
垢版 |
2020/12/18(金) 22:07:42.21ID:TZi3wQJw
俺がN4713を見ていたことが、えらい気に入らない人がいるようだね
知らんがな
仮にwebページ見られなかったとして、どうやってN4713を落とせたのかとか
いちいち開陳せにゃならんの?
0763デフォルトの名無しさん
垢版 |
2020/12/18(金) 22:09:31.45ID:XdXLiWO3
>>722 >>725
差分プログラミングとかいう腐りきったプログラミングパラダイムでは
ハイディング上等なんだ、
そう思っていた時期が(ry
0764デフォルトの名無しさん
垢版 |
2020/12/18(金) 22:11:14.08ID:UPU6Cu+L
こちらから見えるということは、向こうからも見えてるということです。
気を付けなされよ。
0765デフォルトの名無しさん
垢版 |
2020/12/18(金) 23:08:30.12ID:A9pQAhpY
>>762
「ドラフトはこれを見ましょう」と大々的に紹介されてるわけでもなし、
落としたDLしたじゃなくて、どうしてそれを『選んだ』のかが不思議なんだよ
普通の経路じゃまず選べない
0766デフォルトの名無しさん
垢版 |
2020/12/18(金) 23:26:57.29ID:yxlBLqeq
c++ってやたうんちくばっか言う人多いよね
そんな人に限って仕事ができない
やたら得意げに説明してるけど、細かいことばっか気にしてて結局納期遅れwww
それなら、ある程度チャランポランでも納期通り出荷して、最悪現地デバッグの方がまだ救いようがある
0768デフォルトの名無しさん
垢版 |
2020/12/18(金) 23:48:52.19ID:A9pQAhpY
これの話の続きなのか
なら不思議は解消だ
謎は全部解けた


C++相談室 part151
https://mevius.5ch.net/test/read.cgi/tech/1589424805/20

20 名前:デフォルトの名無しさん[sage] 投稿日:2020/05/14(木) 18:32:35.87 ID:jF4/VTtK
>>17
ggrks
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

あとcppreferenceはある意味ファンサイトみたいなものなので、何らかの標準化組織の公式サイトというわけじゃないよ
0769デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:02:31.33ID:yZxXMpJa
そんな昔のスレは関係ないのでは?
0770デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:20:03.02ID:0cb9HLXb
>>766
こういうとこでの情報提供や議論はともかく、うんちくでマウント取りたがるのは自信の無さの裏返しだからねぇ
0771デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:23:06.73ID:sq702jvD
うんちくがうっとおしくて、仕事なら自分が勝ってる!って思い込みたいだけなんじゃないの
0772デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:26:01.61ID:yZxXMpJa
図星つかれたからうんちくと言ってるのでは?
0775デフォルトの名無しさん
垢版 |
2020/12/19(土) 03:34:46.64ID:yZxXMpJa
この野郎。
ウンチクンめ。
0776デフォルトの名無しさん
垢版 |
2020/12/19(土) 06:01:48.82ID:u3YcA1fK
>>765
だから何?
俺がどのドラフトをDLするかを
いちいちあんたの承認とらにゃいかんの?
こっちゃ不思議がられても関係ないんで
いちいち申告してもらわなくていい
0782デフォルトの名無しさん
垢版 |
2020/12/19(土) 13:26:14.15ID:biviwPkb
正式版は有料だがドラフトはタダで手に入るからヒジョーに得がたいが、
やっぱドラフトの内容は随時変わるから、
居丈高に相手を論破してなじり倒すにはやっぱ最新のドラフトでないとイマイチ、
0783デフォルトの名無しさん
垢版 |
2020/12/19(土) 13:50:09.89ID:B7wez7Ce
よくわかりませんが、Chromeで実装されてるお試し機能がSafariで実装されてないからSafariはクソというのと似た話ですか?
0784デフォルトの名無しさん
垢版 |
2020/12/19(土) 14:02:30.06ID:biviwPkb
Chromeで実装されてるお試し機能がSafariで実装されてないからSafariはクソとなじったら
ドラフトの版が変わったらChromeの方がクソだった、みたいな
0786デフォルトの名無しさん
垢版 |
2020/12/19(土) 18:35:13.01ID:dM4VNuuI
C++のプロジェクトに始めて関わって既存コード眺めてたんだけど、関数やメソッドを呼び出す時って、呼び出す側が結果を格納する箱となる変数とかポインタを渡して、
メソッドや関数は成功失敗のint値をreturnする書き方しているんだけど、
これってC++の書き方なの?
0790デフォルトの名無しさん
垢版 |
2020/12/19(土) 18:47:02.46ID:5blMWj9s
>>788
スマートポインタが実用になったから、それでメモリ管理する方が文字通りスマートになった
だから、必要なら関数内部でメモリ確保する方法でもメモリ管理ミスが起こりにくい
0791デフォルトの名無しさん
垢版 |
2020/12/19(土) 19:25:11.20ID:p4OhEmVF
>>786
c++というかcの伝統だわな。
オブジェクトをヒープに置かなくていいという性能的なメリットもある。
0792デフォルトの名無しさん
垢版 |
2020/12/19(土) 19:59:05.03ID:HGWooSzm
Cだと不定長の配列やら文字列やら返す関数ひとつ作るだけで大事件だからなぁ
「いいですかー!この関数が返す配列はヒープ確保したものですよー!使い終わったらXXX__free()で解放してくださいよー!
解放忘れたらリークしますよー!!!絶対に最後に解放してくださいよー!忘れないでねー!絶っっっっっっ対に忘れないでねー!!!」
ってコメントやドキュメントやサンプルコードにしつこくしつこくしつこく書いて書いて書いて徹底的に注意喚起しないといけない
そして当然のように忘れられて「分かりにくい関数作りやがって」って叩かれる所までがお約束

vectorやstringをゴロッと返せば済む今はいい時代になったと思う
0794デフォルトの名無しさん
垢版 |
2020/12/19(土) 20:19:43.48ID:yZxXMpJa
右辺値参照のおかげですよ。
0795デフォルトの名無しさん
垢版 |
2020/12/19(土) 21:06:02.20ID:ISt3uDJM
質問@:
例えば…std::vectorで配列を確保したとします…push_backで追加した時に…アロケーター??が…
アドレスの再割当てをしたとします…この時…vectorは要素のアドレスは連続である事は保証されますが…
この時のアドレスの再割当てって…同期?非同期?どうなるの?
つまり…push_back時に同期で行うのか…非同期でロジック流れて行っちゃうか…って所…。
非同期だと怖いんだけど…。

質問A:
std::vector<char>とやった場合…data()でchar*を取れますが…std::vector<char>に'\0'の概念って
あります?どうなんでしょうねぇ…。'\0'のために+1多めに確保するなんて事はしないと思いますが…
どうなん?内部でどうなってるのかは…解りません…。
0797デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:28:27.67ID:yZxXMpJa
>>795
アロケータの内部実装がどうなっていようとも、push_back()から戻った時にはデータは追加されているので、問題ないのでは?

std::vectorは末尾に0を追加したりしません。
0799デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:59:41.56ID:vl/1bKki
確かにCだと必要メモリの問い合わせの為に二度呼び出したり面倒でしたわ…
0801デフォルトの名無しさん
垢版 |
2020/12/19(土) 23:20:05.98ID:biviwPkb
>std::vectorは末尾に0を追加したりしません。
左様いまだにstd::string::c_str()が内部で何をやっているのかわからん…
0804デフォルトの名無しさん
垢版 |
2020/12/20(日) 09:47:23.01ID:C7ljP8CG
>>799
でも「直接メモリいじってる」て感覚があって好みだったなぁ
まあ自己満足でしかないのだけれど
0805デフォルトの名無しさん
垢版 |
2020/12/20(日) 10:51:49.27ID:KSHt8d36
今どきのC++(C++11以降)だと基本的にスコープ抜けたら開放される方式で実装するものなの?
なるべくnewせずにスタック変数にする or ヒープ確保するにしてもスマートポインタ使う
とかで
0808デフォルトの名無しさん
垢版 |
2020/12/20(日) 11:27:39.08ID:KSHt8d36
そうかな?
ライブラリとかでわざわざInitialize/Finalizeとか明示的に呼ばなきゃいけないの
結構ある気がするけど
0809デフォルトの名無しさん
垢版 |
2020/12/20(日) 11:52:43.58ID:mkiVvOjR
Finalizeが失敗する可能性があってエラーハンドリングしないといけない場合はあえてそうしているかもね
0810デフォルトの名無しさん
垢版 |
2020/12/20(日) 13:25:24.04ID:8M1CEzDz
あえてね!
0811デフォルトの名無しさん
垢版 |
2020/12/20(日) 13:31:53.40ID:1w6q/2mK
というかスコープ内で完結しない、グローバルな状態を持つものならそうするやろ
0813デフォルトの名無しさん
垢版 |
2020/12/20(日) 13:52:50.85ID:BqPIIXKk
お前が挙げてたそういうライブラリがInitialize/Finalizeの中で何やってるか考えれば自ずと答えはでるだろ
0814デフォルトの名無しさん
垢版 |
2020/12/20(日) 14:05:47.98ID:S1Ae4PMu
グローバルな初期化と後始末ならInitialize/Finalizeとか明示的に呼ぶ設計のが一番闇が少ない
ファクトリメソッドでオブジェクトを作ることにして、ファクトリ元オブジェクトの
コンストラクタとデストラクタでそれぞれInitializeとFinalizeでも良いが(呼び忘れ対策は完璧になるが
InitializeやFinalize自体のエラーハンドリングを考えるとやっぱビミョー
0815デフォルトの名無しさん
垢版 |
2020/12/20(日) 21:00:32.48ID:POdM0+je
変数名で対象変数のポインタを取得してくる実装(リフレクション?)をしたいんですけど
対象変数をポインタテーブルとかに書き下すことなくコンパイル時に変数名リテラルと対応するポインタを自動生成することってできますか?
0821デフォルトの名無しさん
垢版 |
2020/12/21(月) 02:47:40.73ID:HVkDagg+
数値計算に興味がある方に聞きたいのですが、ベクトル演算はどのように実行していますか?
valarrayかeigenなのか、vectorでforを回すのか…C++の常識ではどうやるのか伺いたいです
0822デフォルトの名無しさん
垢版 |
2020/12/21(月) 03:43:19.44ID:tQs5NvLs
>>821
blasやlapackにルーチンがあるならそれを使う(ラッパーを作る)
要素の持ち方はvectorでもvalarrayでもその他クラスでも、一次元的にメモリに格納されるなら何でも良い
二次元以上の配列が行優先か列優先かさえ固定しておけば何でも良い
0826デフォルトの名無しさん
垢版 |
2020/12/21(月) 19:14:50.06ID:5SN4/ItM
みなさんありがとうございます
主に多次元の常微分方程式を解く目的でFortranからc++へ移行しようと考えていたのですが、ベクトル和やスカラーベクトル積等の計算がFortranほど簡単ではなさそうに感じて質問しました
eigen等を活用しつつ頑張ってみます
0827デフォルトの名無しさん
垢版 |
2020/12/21(月) 20:22:43.20ID:94n2fENi
そりゃそうだろな
汎用機の時点で科学計算と銀行計算の両方ができる
だから科学専用に作られているFortranと汎用のC言語は根本的に用途が違う

そもそもFortranの後に作られたのがC言語だし、時期も近いし、
だからFortranで出来ることをわざわざC言語でやったりはしない、
用途での住み分けがそのころからある

後発の方が簡単に出来るというのは幻想
0828デフォルトの名無しさん
垢版 |
2020/12/21(月) 21:07:13.89ID:HyYYfsZ0
簡単なことは簡単に言え

既成のソフトを使い慣れているならそれを使え
不満があるときに自分の理想との違いを埋めるのに
打って出る手段の1つにプログラミングがある
それはC++に限らない
たまたまC++を選んだのなら自らの名誉に恥じぬ努力をせいや
これまたC++に限ったことではないがな

あれ使えばいいやー、これ使えばいいやー
自分なんか物事を考えるだけ無駄なんだー

こういうスタンスのやつ、俺は反吐が出るほど大大大大大嫌い
0829デフォルトの名無しさん
垢版 |
2020/12/21(月) 23:35:19.34ID:5SN4/ItM
ヘッダファイルに
double hoge = 1.0/3.0;
みたいに書いてた場合、除算はどのタイミングで行われるんですか?初回呼び出し時のみですよね?
0830デフォルトの名無しさん
垢版 |
2020/12/21(月) 23:51:47.03ID:3sOyVj6l
大昔(40年ぐらい前?)とかもんのすごい特殊な環境用のコンパイラはしらんが
今の普通のコンパイラではそれはコンパイル時に計算される
0833デフォルトの名無しさん
垢版 |
2020/12/22(火) 02:07:17.74ID:bzbnZ90n
>>826
Fortranでも基本的にblasとかlapackに投げるだけじゃないの?
しかもC/C++からFortranルーチン呼べるし

「FortranではやりやすかったがC/C++ではやりにくかったこと」って非常に興味あるから具体的にどういうものか教えてほしい
0834デフォルトの名無しさん
垢版 |
2020/12/22(火) 06:36:52.20ID:GAvzsgv/
blasとかlapackがfortanで記述されてるからね
中身いじるような人がどれほどいるかはわからんけど
0839デフォルトの名無しさん
垢版 |
2020/12/22(火) 10:18:51.71ID:hq0fof4K
Cコンパイラ作ったよね。
0841デフォルトの名無しさん
垢版 |
2020/12/22(火) 16:28:31.76ID:cQdMNR1v
>>834
中身いじるような人がいないからこそ、fortranで(blasやlapack)でできる線形代数計算はC/C++でもできるだろうと思うのだが
0842デフォルトの名無しさん
垢版 |
2020/12/22(火) 23:28:55.02ID:cWduRySe
constexprともなるとどこまでコンパイル時計算してくれるかは
処理系依存と聞く…!
関数が絡んだ場合だけかもしれんが
0843デフォルトの名無しさん
垢版 |
2020/12/22(火) 23:41:36.57ID:Yt10VcGs
>>842
constexpr にまつわるルールはコンパイル時計算してくれる最低ラインを定めるもの。
どこまでコンパイル時計算してくれるかが処理系依存なのは初期のC言語から変わりないよ。
0846はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/23(水) 02:19:42.25ID:wEQUKH0P
>>844
constexpr 指定が付いた関数は定数式が要求される文脈において
与えられる引数も定数 (定数式) である場合に限りその関数呼出しは
定数式という扱いになる。

定数式が要求される文脈で入力が定数でないならエラーになるし、
定数式が要求されていない文脈であれば実行時計算だよ。

実行時計算にはならない (実行時計算が必要な文脈だとエラーにする) 指定として consteval が導入されたのは、
constexpr の文脈依存な挙動が面倒だと思ったやつがいたからだと思うよ。
0850はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/23(水) 09:20:18.63ID:wEQUKH0P
自動で呼び分けて欲しいと思うこともあれば
コンパイル時に限って欲しいことだってあるだろう。
0851デフォルトの名無しさん
垢版 |
2020/12/23(水) 19:37:56.48ID:lj5PdyQr
1秒間に1万回くらい数値判定の計算をしてるのですが
Xが3桁の時のみTrueを返すようなコードで一番速いのってどんなコードですかね?
愚直にif(1000>X>=100)でやるのと
if(10>X/100>=1)ではどっちが速いんでしょうか
0853デフォルトの名無しさん
垢版 |
2020/12/23(水) 19:43:53.01ID:PgZc4XsV
多くのコンパイラは以下に変形しそうな気がする
if (X-100u<900u)

後者をコンパイラが最適化するかどうかはコンパイラ次第
0854デフォルトの名無しさん
垢版 |
2020/12/23(水) 19:47:49.74ID:PgZc4XsV
PCなら1秒に1万回程度なら気にしなくて良い
8bitマイコンだとこの判定だけでも10個以上の命令になったり
0855デフォルトの名無しさん
垢版 |
2020/12/23(水) 20:03:20.62ID:rWjdGSAm
長さ数十億のbool型配列用意すれば早いんじゃね
isDigit3[x] だけで出るじゃん
0857デフォルトの名無しさん
垢版 |
2020/12/23(水) 21:04:06.12ID:oO0RWe4j
根本的には、速度って環境依存の性質だから、本当に重要な話なら実測で確かめるしかない。

一般論としては、現代のコンパイラはそこらの人間より賢いから、やりたいことを素直に書いて最適化を任せるのがいい。
わかってない人が余計なことをやると、かえって遅くなる可能性が高い。

計算量のオーダーを変えるような、アルゴリズムレベルの最適化なら意味があるんだけど。
小手先のテクニックは通用しないと思っていい。
0858デフォルトの名無しさん
垢版 |
2020/12/23(水) 22:00:42.78ID:p3n5tJou
>>850
いうてほんとに定数式になってくれないと困る場面で定数評価してくれない事態に出くわしてないんだよなぁ・・
constexprなクラスとか作ってればあるのかもしれんが
0859デフォルトの名無しさん
垢版 |
2020/12/23(水) 22:21:55.80ID:JqE6cd4a
最適化にも限界はあるから、どういうコードの書き方ならコンパイラが最適化しやすいか、
ってのを知るのは必要なんやろうね
データアクセスの局所化とか偽の依存関係の除去とか
0860デフォルトの名無しさん
垢版 |
2020/12/23(水) 23:11:04.90ID:pgaSoeQc
typedefで二重定義になった場合さぁ…同じ型だとコンパイルエラーにはならないんだよ…
なんか気持ち悪いので…typedefだけのヘッダーを呼ぶようにしたけど…同じ型だとOKなん?
0861デフォルトの名無しさん
垢版 |
2020/12/23(水) 23:12:13.58ID:pgaSoeQc
ヘッダーに渡しても同じことか…相互参照してるんだった…
0862デフォルトの名無しさん
垢版 |
2020/12/23(水) 23:13:21.42ID:pgaSoeQc
一応…間違えないように…ヘッダーに集約しておく…
0863デフォルトの名無しさん
垢版 |
2020/12/23(水) 23:13:34.29ID:KqYWGLnc
Ruby VM では、1秒間に、100万回ループすると、
Ruby中間言語を、JIT で機械語にコンパイルして、

1秒間に、1,000万回ループ出来るようになる
0865デフォルトの名無しさん
垢版 |
2020/12/24(木) 06:19:28.22ID:TzdYJrci
サムソンを守るためのHuawei潰しという側面もある。
0867デフォルトの名無しさん
垢版 |
2020/12/24(木) 06:58:51.74ID:TzdYJrci
文大統領がトランプ大統領に、Huaweiを潰すよう勧めたそうです。
0869デフォルトの名無しさん
垢版 |
2020/12/24(木) 08:12:44.86ID:TzdYJrci
このプログラムは応答していないためシステムによって閉じられますって出るんじゃないの。
0871デフォルトの名無しさん
垢版 |
2020/12/24(木) 11:16:41.02ID:h4Gph9I0
>>854
手元の32bitマイコン(除算器なし)だと
uint16_t v; に値入ってたとして、
if(v >= 100 && v < 1000) よりは ((v >= 100) & (v < 100p
0872デフォルトの名無しさん
垢版 |
2020/12/24(木) 11:27:11.76ID:h4Gph9I0
>>871
途中で送ってもうたorz

((v >= 100) && (v < 1000))のが気休め速い感じだったな。
あとLUTもほぼ変わらん。LUTはもう少し複雑な計算で、
かつキャッシュにテーブルが入ってくると鬼速だろうけど。

単純な比較のみだからあまり速い方法ないのかもね〜
ダメ元で掛け算とビットシフトで/100する処理も試したけど
ちょっと遅くなったorz

つか、32bitマイコンだと100us周期程度の割り込みハンドラで
この水準まで自分は気にしないだす。
あとC++ならinline化とかその辺をまずチェックでしょうさ。
0873デフォルトの名無しさん
垢版 |
2020/12/24(木) 17:12:04.54ID:tg7gMCA8
>>872
if ((unsigned)v - 100u < 900u)
のが早くない?

テーブルは論外だ
アドレス計算コストの方が高そうだし
ROMサイズやキャッシュ汚染などの悪影響がある
0874デフォルトの名無しさん
垢版 |
2020/12/24(木) 19:53:19.25ID:9+0irhfK
if ((unsigned)v - 100u < 900u)
こういうのは減算とコンペア(実質減算)の2回の演算が常に走るから必ずしも速くないんじゃないかな。
&&で繋ぐ方がショートサーキットが働いて1回で済む場合がある。
演算で0との比較に落とせるなら別だけど。
0876デフォルトの名無しさん
垢版 |
2020/12/24(木) 21:38:01.43ID:B83YCBUh
比較がボトルネックってのは本当だろうかとは思わなくもない
まあ、データ転送とか切り詰めまくって残すは比較のみ、ってのもありうるけど
0877デフォルトの名無しさん
垢版 |
2020/12/24(木) 21:38:20.67ID:X8ie3AzF
整数の減算は非常に高速
条件分岐は遅いし分岐予測を汚染する

コンパイラの最適化を見てると良い
範囲判定は大抵>>873のようなコードになる
0878デフォルトの名無しさん
垢版 |
2020/12/24(木) 21:41:03.65ID:X8ie3AzF
コード的には普通に
if (100 <= x && x < 1000)
と書いておけば良い

コンパイラが最適化するから

x/100を比較するのは
意味的にも意味不明だし
速くなることもない
0879デフォルトの名無しさん
垢版 |
2020/12/24(木) 21:51:18.77ID:X8ie3AzF
ISRの最適化なら

レジスタを節約して待避する数を減らすとか
レジスタバンクを使ってレジスタを切り替えるとか
RAM上で実行するとか
割り込みを許可せずに高速化とか(MIPSの場合)
まあ色々とチューニング出来る余地がある

小規模DSPなんかだと
いまだにISRをアセンブラで書いたりする
0880デフォルトの名無しさん
垢版 |
2020/12/25(金) 14:04:51.84ID:L6KY61Ck
バンク切り替えテクニックですか。
むかしのインターフェース誌っぽいですね。
0882デフォルトの名無しさん
垢版 |
2020/12/25(金) 20:23:57.32ID:KGl9PDWX
template<size_t A, size_t B>
class tmp{};

template<size_t N>
void test(tmp<N, N>&){
std::cout << “A”;
}

template<size_t A, size_t B>
void test(tmp<A, B>&){
std::cout << “B”;
}

上のような関数があったときにtest(tmp<1,1>{});がどちらを呼ぶか規格で決まってる?
0884デフォルトの名無しさん
垢版 |
2020/12/26(土) 00:14:55.00ID:biNpl0R5
using FunctorType = std::function<void()>;
struct RecursiveMapperType;
using InternalMapperType = std::map<std::string, RecursiveMapperType>;
struct RecursiveMapperType : public InternalMapperType
{
RecursiveMapperType(){}
};

こういうコードをネットで見かけたんだけど
RecursiveMapperTypeを前方宣言してInternalMapperTypeを宣言
RecursiveMapperTypeをInternalMapperTypeを継承して作成していることのメリットがよくわからない。

struct RecursiveMapperType : public InternalMapperType
{
RecursiveMapperType(){}
};
using RecursiveMap = std::map<std::string, RecursiveMapperType>

だとだめなのだろうか?
誰か教えて下しあ
0885デフォルトの名無しさん
垢版 |
2020/12/26(土) 00:40:10.65ID:3VlCU3bq
>>884
上のコードと下のコードの RecursiveMapperType の定義はまったく同じに見えるんだけど、何が違うの?
0886デフォルトの名無しさん
垢版 |
2020/12/26(土) 00:50:04.37ID:biNpl0R5
>>885 さん
すみません。
下の方のRecursiveMapperTypeですが継承元消し忘れてました。
下のようなkたちです
struct RecursiveMapperType
{
RecursiveMapperType(){}
};
using RecursiveMap = std::map<std::string, RecursiveMapperType>
0888デフォルトの名無しさん
垢版 |
2020/12/26(土) 15:10:58.71ID:3VlCU3bq
>>886
それじゃ全然機能が違うっていうかその RecursiveMap 何の役にも立たないでしょ。
元の RecursiveMapperType の機能が理解できてないだけか。
0889デフォルトの名無しさん
垢版 |
2020/12/26(土) 16:40:20.18ID:vGzfsLf/
再帰的な構造を定義したくて自分自身の型を含めたものを継承してるわけで
それを実現するには前方宣言するしかない
というね
0890デフォルトの名無しさん
垢版 |
2020/12/26(土) 17:13:57.40ID:UNoc468U
再帰的なコンテナは、フィールドが出来た時点で破綻するのでは?
0892デフォルトの名無しさん
垢版 |
2020/12/27(日) 06:31:05.42ID:QkMmRpj8
C++23に持ち越された契約は何が変わるんだろね。
0893デフォルトの名無しさん
垢版 |
2020/12/27(日) 17:59:23.18ID:wQ5c+q6H
ありがとうございます。なんとなくイメージできました。

コードの設計ってまだよくわからないのですが、
再帰処理のためにこうするのって比較的普通なことなんですか?
0894デフォルトの名無しさん
垢版 |
2020/12/27(日) 18:23:25.49ID:tp3tetyk
>>893
知らんよ。
普通かどうかなんて気にしてどうするの?ここで名無しの誰かに yes/no 答えてもらって何か意味ある?
0895デフォルトの名無しさん
垢版 |
2020/12/27(日) 18:33:52.26ID:7Rx7y5wp
>>893
STLのクラスを継承して階層構造を実現するテクは応用編って感じがする
もっと基本的なやり方をするならデザパタのcompositeパターンを使う
とかかね
0897デフォルトの名無しさん
垢版 |
2020/12/27(日) 18:49:43.74ID:QkMmRpj8
ヘネパタ、パタヘネ、デザパタ。
0898デフォルトの名無しさん
垢版 |
2020/12/27(日) 22:11:00.35ID:QkMmRpj8
newのコストは気にされますが、deleteのコストは見逃されがちです。
0899デフォルトの名無しさん
垢版 |
2020/12/28(月) 02:23:23.12ID:ibU6N4ur
あるクラスのコンストラクタのデフォルト引数を変更するときってどうしたらいいの?
オーバーロードすれば良い?
0901デフォルトの名無しさん
垢版 |
2020/12/28(月) 07:33:40.98ID:pesKZps1
stlコンテナを継承するのはアウトだろ。
うまくやらないとデストラクタが呼ばれなくなっちゃうぞ
0902デフォルトの名無しさん
垢版 |
2020/12/28(月) 09:00:44.26ID:i4NtF28F
じゃあうまくやりましょうや。
0903デフォルトの名無しさん
垢版 |
2020/12/28(月) 09:44:51.94ID:bVWPeYFg
そもそもC++ではデストラクタを仮想にしてないってことは「継承すんなよ」って宣言だからなぁ
0904デフォルトの名無しさん
垢版 |
2020/12/28(月) 09:55:45.06ID:W/k+iOkV
なんで継承しないようにしたか意見表明文みたいなモンはどっかにあるのか?
0905デフォルトの名無しさん
垢版 |
2020/12/28(月) 10:20:49.88ID:ErVwTltE
仮想関数化するとしない場合に比べて余分なコストがかかるから、必要な理由がない限り基本的にそれは避けるということじゃないかな
0906デフォルトの名無しさん
垢版 |
2020/12/28(月) 10:32:20.80ID:4OiRlqvR
C++は1クロックでも速く動作させるために非仮想関数をデフォルトにしたのは理解できる
Javaは動作速度よりもオブジェクト指向の継承動作の一貫性を重視してすべて仮想関数にした、これも時代を考えれば理解できる
C#もJavaと同じくデフォルトを仮想関数にしておいて欲しかったのだが、C#はC++を尊重してデフォルト非仮想関数なんだよね
これはちょっと残念
0908デフォルトの名無しさん
垢版 |
2020/12/28(月) 12:34:23.27ID:QmdcnH/3
finalキーワードがこの時代にあれば間違いなく付けただろうな
文句言ってる奴はガイジ
0909デフォルトの名無しさん
垢版 |
2020/12/28(月) 12:42:44.62ID:UEnoPUHl
>>903
継承すんな、は言いすぎ。
private継承なら問題ないと思うけど。実際たまに使われているし。
0910はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/28(月) 13:19:25.85ID:N6A7dpOQ
デストラクタが仮想ではないものを継承したときの具体的な問題は
スライシングが起こりうるということと、
起こってもコンパイラが (少なくともコンパイル時には) 捕捉できないことが多いということにあって、
スライシングが起こらないように使う分には問題はない。

設計的に綺麗かどうかはまた別の話だけど。

shared_ptr が (デストラクタが仮想でなくても) 元の型のデストラクタを呼んでくれたりするんで、
場合によってはそういう設計もアリということなんだと思う。
0911デフォルトの名無しさん
垢版 |
2020/12/28(月) 14:12:57.70ID:02+J4aSB
>>910
デストラクタが仮想なものを継承してもスライシングは起こりうるよね?そこは関係なくね?
https://en.wikipedia.org/wiki/Object_slicing
> In C++ programming, object slicing occurs when an object of a subclass type
> is copied to an object of superclass type: the superclass copy will not have
> any of the member variables defined in the subclass. ...
0914デフォルトの名無しさん
垢版 |
2020/12/28(月) 17:50:37.04ID:i4NtF28F
自由に羽ばたける翼。
0916デフォルトの名無しさん
垢版 |
2020/12/28(月) 18:37:15.29ID:v+s+VlFU
だってCの設計思想が「人間を信用する」だもん
セキュリティが重視される現代的な言語のベースとしては致命的に合ってないんだよね
0917デフォルトの名無しさん
垢版 |
2020/12/28(月) 18:40:02.12ID:02+J4aSB
>>913
やっぱり関係がわからない。
デストラクタが仮想ではないものを継承したときに限ってスライシングが予想外のことや
メモリ管理の矛盾につがなる例をひとつでいいから見えてもらえない?
0919デフォルトの名無しさん
垢版 |
2020/12/28(月) 19:07:39.46ID:bVWPeYFg
A <|- B, C みたいなときにB, CをnewしてA*として管理しようとすると破棄の時にAのデストラクタしか呼ばれない
0920デフォルトの名無しさん
垢版 |
2020/12/28(月) 19:09:58.26ID:UEnoPUHl
>>911
仮想でないデストラクタが話題のスコープなのに、スライシングにスコープを移したら議論にならないでしょ。

911) デストラクタが仮想なものを継承する→スライシングになるものが存在する
という命題は
910) デストラクタが仮想ではないものを継承する→スライシングになるものが存在する
という命題と矛盾するわけではない(両立する)ので、その議論はあんまり意味がない。
0921デフォルトの名無しさん
垢版 |
2020/12/28(月) 19:14:08.97ID:i4NtF28F
スライシング・オプティマイザーとかどうよ?
0922デフォルトの名無しさん
垢版 |
2020/12/28(月) 19:36:49.42ID:02+J4aSB
>>910
> スライシングが起こらないように使う分には問題はない。
ここもおかしいんだよね。

デストラクタが仮想ではないものを継承して派生クラスのオブジェクトを new で作って
基底クラスのポインタを通して delete したら未定義動作になるわけだけど、
これはスライシングを起こしていなくても問題になる。

「派生クラスのオブジェクトを new で作って基底クラスのポインタを通して delete」のことを
「スライシング」と呼んでる気配もあるんだけど、それは明らかに誤りだろうし。
0923デフォルトの名無しさん
垢版 |
2020/12/28(月) 19:43:43.44ID:592FfNkQ
>>900
変更ってどうやるの?
毎回好きな引数を与えよってこと?
面倒なので、自分の好きな引数を自分のコードの中ではデフォルトにできれば良いのにと思ったのだが、こういう考えは間違っていますか
0925デフォルトの名無しさん
垢版 |
2020/12/28(月) 19:59:11.40ID:v+s+VlFU
デストラクタはpublic仮想かprotected非仮想かpublic非仮想finalのどれかにしろ
っていう一般的結論でよくね
0926デフォルトの名無しさん
垢版 |
2020/12/28(月) 21:21:17.65ID:sYj4+JXZ
>>925
自分で書くときはそう
標準のコンテナのように既存のクラスがそうでなかったら?が発端だからなぁ

個人的には仮想デストラクタがなければ継承はしない
(一部のイディオムを除けば)private継承にするくらいなら委譲する。
0927デフォルトの名無しさん
垢版 |
2020/12/28(月) 21:54:56.73ID:wzipnhb8
デストラクタがprotected:であっても非仮想なら継承したらアウトなんじゃ…
派生クラスの破棄時に基底クラスのデストラクタが呼ばれない
的な意味で
0928デフォルトの名無しさん
垢版 |
2020/12/28(月) 21:57:44.66ID:dWPs/bUX
>>924
オブジェクトを作るための関数を作ってはどうかという意味ですか?
確かにそれで良いのでそうします
0929デフォルトの名無しさん
垢版 |
2020/12/29(火) 07:11:18.52ID:2gsaGKLd
相称型プログラミング。
0930デフォルトの名無しさん
垢版 |
2020/12/29(火) 07:28:15.94ID:2gsaGKLd
いま私大事なこと言いましたよ。
0932デフォルトの名無しさん
垢版 |
2020/12/29(火) 07:38:50.44ID:2gsaGKLd
【CSS規格、読書感想文】
CSSがアイデアであった段階からスクリプト言語で実装され、初の大規模採用であったネットスケープにおいてもJavascriptによって実装されていたため、規格そのものがC/C++で効率的になるよう設計されていない。※
現行の規格に対して効率的な実装を施したとしても、将来の規格バージョンで維持できると限らないため、結局、スクリプト言語と同様の非効率を許容することになる。
これはつまり、ほとんどのシンボルを動的に確保することを意味する。

※HTML5規格は、C/C++で効率的に実装できるように仕組まれている。
0933デフォルトの名無しさん
垢版 |
2020/12/29(火) 07:48:03.75ID:UwKcs/oz
なるほどねー
そもそもCSSのCって要る?
もはやスタイルシートってサイト作成者が決めるものになっているよね
ユーザースタイルシートをカスケード適用できる機能もなくせばさらに効率よくできそう
0936デフォルトの名無しさん
垢版 |
2020/12/29(火) 09:18:16.16ID:qLyTNuLW
定期的に話題になるけど、基底のデストラクタにvirtualが必要なのは
基底型のポインタでdeleteするときだけな
末端のデストラクタさえ呼べれば、次に呼ぶ基底の型は分かりきってるからね

別の言い方をすれば、常に末端の型のポインタをdeleteする分には、virtualなデストラクタなんか要らんということ
0938デフォルトの名無しさん
垢版 |
2020/12/29(火) 12:13:46.12ID:2gsaGKLd
ポリリズムから出汁をとったみたいないい方しますね。
0940デフォルトの名無しさん
垢版 |
2020/12/29(火) 14:33:08.60ID:kdP0thHS
>>936
その点については誰もが一度は通る勘違いだよなw
最初はわけも分からず機械的にvirtualつけて回ってたわ
0942デフォルトの名無しさん
垢版 |
2020/12/31(木) 05:29:21.52ID:/Sdg/sCQ
struct A { virtual void Delete() { delete this; } };
struct B : A { void Delete() { delete this; } };
こうなってりゃ別にいらんな
0943デフォルトの名無しさん
垢版 |
2020/12/31(木) 11:50:06.55ID:zS3i4lwe
>>795 の同期とか奇妙な質問に思うけど、Javaからくるとそうなるんだな。
0946デフォルトの名無しさん
垢版 |
2020/12/31(木) 13:43:11.73ID:zS3i4lwe
deleteのコストは、ほんと気にされないな。
0949蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/12/31(木) 15:40:19.22ID:+0BPso5e
>>950

> 「a=1 かつ b=1 以外なら実行」って条件式はどう書くの?

「「a=1 かつ b=1」以外なら実行」なら、
if (!(a == 1 && b == 1)) { 実行(); }

「a=1 かつ「b=1以外」なら実行」なら、
if (a == 1 && b != 1) { 実行(); }
0952デフォルトの名無しさん
垢版 |
2021/01/01(金) 05:08:27.95ID:FlWhKtLF
CSSは規格の著者がサンプル実装してるというので見に行ったら、Javascriptだった。
あからさまに動的言語向けに規格が書かれているのは、そういうことでしたか。
これは辛い。
0953◆QZaw55cn4c
垢版 |
2021/01/01(金) 18:05:25.39ID:a5HWfmXn
>>792
それはちょっと古臭いお馬鹿な手法でしょう

正しいやりかたは、
・呼び出し側が呼び出され側に格納エリアを提供する‥‥@
・呼び出し側が確保するべきサイズは@の前に別途問い合わせする
0955デフォルトの名無しさん
垢版 |
2021/01/02(土) 00:08:04.41ID:f21yM1/d
CにはCで
#define APPBUFSZ (十分でかい整数値)
void foo() {
  char buf[APPBUFSZ];     // buf[]はスタック上にとられる配列(重要
  if (!func(buf, sizeof(buf))) {  // 第2引数は要素数の意味とするならsizeof(buf) / sizeof([0])
    バッファサイズ不足等のエラー
  }
}
という黄金パターンあるんじゃー
これは原始的な見かけほど不合理というわけではない
0956デフォルトの名無しさん
垢版 |
2021/01/02(土) 00:11:12.76ID:f21yM1/d
CSSはDOMの一部でありかつ意味と表記の分離の必要からCSSになった
DOMはWebページのあらゆる要素へのコントロールの実現を目的としている
という印象
0959デフォルトの名無しさん
垢版 |
2021/01/02(土) 09:15:42.80ID:hdbwvBU0
>>955
何が黄金なのかさっぱりわからんが…
どこでそれが黄金パターンとされているかの出典だけでも頼む
0960デフォルトの名無しさん
垢版 |
2021/01/02(土) 09:25:20.55ID:TBL/2gAq
定番は>>953だろう。
事前にサイズを求めるコストがバカにならないという場合だけ別案を検討するくらいで。
0962デフォルトの名無しさん
垢版 |
2021/01/02(土) 11:29:31.77ID:f21yM1/d
>>958
左様よほど意図しない事象でも起きない限りエラー処理に行かないぐらい大き目にとる
スタック上に領域をとる場合、時間コストも空間コストもゼロとみなせるからそれで構わない
再帰呼び出しのようなきわめて深い関数呼び出し階層になるときぐらいしか問題は生じない
というわけで、プログラミングしたいこと/すべきことに対するちょっとした洞察と
アーキテクチャーに関する理解さえあれば、言うほど非効率でも不合理でもないことがわかるはず…
0963デフォルトの名無しさん
垢版 |
2021/01/02(土) 11:39:10.82ID:YOqoG5bU
>953
確保すべきサイズを問い合わせたときと確保して呼び出した時に必要サイズが変わっていないか気になって夜しか眠れない
(リトライしてもリトライ回数が適切かどうか気になって布団以外で眠れない)
0967デフォルトの名無しさん
垢版 |
2021/01/03(日) 08:55:49.95ID:tz0lNZPE
chromiumのソースみると全面的にstd::unique_ptrを使ってるので、少なくともC++11 以降。
0968デフォルトの名無しさん
垢版 |
2021/01/03(日) 09:00:31.13ID:tz0lNZPE
レンダリングコアチーム29名中3名が日本人。
0969デフォルトの名無しさん
垢版 |
2021/01/03(日) 14:01:40.32ID:A/6DePqP
newしたクラスをdeleteすればクラス内で保持した変数のメモリも自動的に解放されるのでしょうか? 
0970デフォルトの名無しさん
垢版 |
2021/01/03(日) 14:08:46.33ID:I3Vvl19p
>>969
「クラス内で保持」の仕方による。
deleteに伴って各メンバ変数のデストラクタが呼び出されるので、自動的に解放されるようにすることはできる。
0972デフォルトの名無しさん
垢版 |
2021/01/03(日) 15:46:52.70ID:ytOMOpf7
所有してるメモリなら解放されて欲しいけど借用してるメモリは解放されちゃ困るででょ
0973デフォルトの名無しさん
垢版 |
2021/01/04(月) 03:53:19.91ID:wIiDK2+4
借りてる金を誰かが返してくれるなら良いお話では?
0975デフォルトの名無しさん
垢版 |
2021/01/04(月) 19:46:23.01ID:0C4iSsrn
めちゃくちゃ初歩的な質問で申し訳ないのですが文字で「"」を出力したい場合はどうするのですか?
cout<<"これ→"←"<<endl;
とすると出力したい文字が「これ→」までだと認識されエラーが発生しますよね…
0984デフォルトの名無しさん
垢版 |
2021/01/06(水) 09:32:04.26ID:UTmmPnLW
HTML5は規格通りに実装できるけど、CSSは規格通りに実装できないな。
Chromiumは、Blink以前はBison使ってたけど、Blink以降は手書きパーサになってる。
もはや、クラス名や属性名を見て処理をわけないと衝突を解決できない。
0985デフォルトの名無しさん
垢版 |
2021/01/07(木) 01:07:21.92ID:DfoUdJtt
次スレ下さい。
0986デフォルトの名無しさん
垢版 |
2021/01/07(木) 14:22:12.51ID:Oosx0PB6
c++で出力出来ない文字とかあるんですか?
>>981
この書き方ならなんでも出力出来るんですかね?
cout<<"これ→"←"endl;)と出力したい時
cout << R"(cout<<"これ→"←"<<endl;))";
でもいけるんですか?
)が気になりますが…
0988デフォルトの名無しさん
垢版 |
2021/01/07(木) 19:34:55.01ID:5FPBrit1
>>987
すいません出来ました
fuckという単語なので嘘かと思ってスルーしていました
>>982
ありがとうございます
0989デフォルトの名無しさん
垢版 |
2021/01/08(金) 03:01:05.78ID:cNGMO0JS
>>947
cppは論理演算子が少ないからに優しくないから先のレスのようにチマチマ等価な冗長な論理を書くしかないのが面倒だよね…
not-andなんだからnand演算子(=joint denial(↑)、論理用語)で書けりゃいいのに(もちろん裸cppで
0990デフォルトの名無しさん
垢版 |
2021/01/08(金) 05:11:49.99ID:wkJPfkff
C++界隈のオッサンは普通に4文字とか猥語とかバンバン使ってちゃんとした説明するから気をつけろ
0991デフォルトの名無しさん
垢版 |
2021/01/08(金) 05:14:48.68ID:gKD5AY0L
template <typename A, typename B>
inline constexpr
bool nand(A&& a, B&& b)
{
return !(A == 1 && B == 1);
}
0992デフォルトの名無しさん
垢版 |
2021/01/08(金) 08:15:42.48ID:lmjqKHzd
プリプロセッサで演算子増やせないかな?
無理かな?
0993デフォルトの名無しさん
垢版 |
2021/01/08(金) 08:24:11.24ID:gKD5AY0L
マクロの識別子は英数字下線だけだかんな
あ、でも英数字下線の演算子もどきならできるね

template <typename R, typename A>
R Static_cast(A&& a) { return a; }
1000デフォルトの名無しさん
垢版 |
2021/01/08(金) 17:46:32.46ID:CQCRa+nu
1000
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 89日 18時間 28分 12秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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