1 名前:デフォルトの名無しさん mailto:sage [2019/11/07(木) 11:35:36.76 ID:4wggfTwe.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part145 mevius.5ch.net/test/read.cgi/tech/1568362404/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語)
246 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:19:25.20 ID:78UVTJ0X.net] 除算が出来るんだから剰余も当然求められる
247 名前: mailto:sage [2019/11/26(火) 21:22:34.40 ID:eitz3RWA.net] >>241 で、その剰余はどうやって求めるのですか? まさか、求めた商に除数をかけて被除数から引くのですか?それって遅くないですか?
248 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:23:39.77 ID:78UVTJ0X.net] 遅くないです
249 名前: mailto:sage [2019/11/26(火) 21:25:15.97 ID:eitz3RWA.net] >>243 本当ですか?わざわざ、あらためて掛け算をするんですよ?私には馬鹿みたいな方法にみえますが?
250 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:26:45.06 ID:78UVTJ0X.net] 馬鹿みたいな方法にみえるのはあなたが馬鹿だからです
251 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:29:07.44 ID:sE/nea3J.net] >>242 ニュートン法なので、 z = b / a の z を求めたい場合、直線 y = a * x - b と x 軸(y=0) との交点の x を求めることによって行う。その際、x0, x1, ・・・, xn のように x を 漸化的に交点に近づけて
252 名前:いく。数学的直感だと、その途中で剰余も求められ るように出来そうな気がする。 [] [ここ壊れてます]
253 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:43:45.68 ID:sE/nea3J.net] >>246 色々なやり方はあると思うけど、2^m <= a < 2^(m+1) の場合、 x_{k+1} = x_k - (y_k << m); y_{k+1} = a * x_{k+1} - b; の漸化式でいけるかも知れない。 間違っていたらゴメンなさい。
254 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:44:43.61 ID:78UVTJ0X.net] >>246 その方法で乗算の3倍の時間で除算が出来ますか? 無理ですよね?
255 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:49:53.94 ID:sE/nea3J.net] >>248 漸化式が三回くらい行ったら正しい答えに到達するのであれば、 乗算の三倍程度の時間で済むと思う。 何回で到達するかは、まだ考えて無いのでわからない。
256 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:53:39.27 ID:sE/nea3J.net] >>247 ここで、0<= y_k < x_k が満たされれば、x_k が商、y_k が余りだと思う。 初期条件は、 x_0 = 1; y_0 = a * x_0 - b; とすればよいはず。 途中、y_k が負の値になることが有るが、問題ない。
257 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:55:42.20 ID:78UVTJ0X.net] 前提は分母も分子も巨大な桁数で良いんだよね?
258 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:56:38.32 ID:78UVTJ0X.net] 分母の桁数があまり大きくないならテーラー展開も有効だよ
259 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:57:23.51 ID:sE/nea3J.net] >>251 一般的な場合を取り扱うのであれば、その条件が、もっともらしいと思います。
260 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:57:37.73 ID:78UVTJ0X.net] いずれにしろ、 除算命令を多用することは無い
261 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:58:41.68 ID:sE/nea3J.net] ニュートン法を使うのは初めて聞きました。 とても勉強になります。
262 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:59:47.69 ID:78UVTJ0X.net] >>253 それで漸化式3回なんてことはあり得ないかと
263 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:01:24.02 ID:sE/nea3J.net] ○<< m とせずに ○<< (m+1) としておけば、y_k は負の数にならないかも 知れない。ただ、数学的直感的に、収束速度は、前者の方が速い気がする。
264 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:03:05.27 ID:78UVTJ0X.net] >>240 数年前にも「にゅーとんらぷそん」とか書いてた糞コテがいたんですが もしかして本人? 文のレベルも頭の悪さもそれっぽい
265 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:07:18.12 ID:78UVTJ0X.net] 八木アンテナを八木宇田アンテナと書かないのと同程度に ニュートンラプソン法とは書かないと思っているので 印象に残ってます
266 名前: mailto:sage [2019/11/26(火) 22:08:38.03 ID:eitz3RWA.net] >>258 raphson の ph を摩擦音で読むか、有気破裂音で読むかは、選択可能かと思っていましたが
267 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:10:11.81 ID:sE/nea3J.net] >>247 まず、シフトの向きが右で、正しくは、○>>○ でした。
268 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:16:30.64 ID:78UVTJ0X.net] >>260 何を指摘されてるのかわかってないwww
269 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:19:47.56 ID:sE/nea3J.net] >>256 では、BIT SHIFT ではなく、浮動小数点演算にして、以下の様にすれば速くなるかもしれません。 (i) 初期条件 η = 1/a; // 多倍長の浮動小数点 x_0 = 1; y_0 = a * x_0 - b; (ii) 漸化式 x_{k+1} = x_k - (int_N)(y_k * η); y_{k+1} = a * x_{k+1} - b; 但し、int_N は、多倍長の浮動小数点を多倍長整数に直す cast。
270 名前:デフォルトの名無しさん [2019/11/26(火) 22:34:50.59 ID:FauhtWma.net] #include <iostream> using namespace std; int main() { string str = "abc"; cout << &str << endl; cout << str << endl; cout << str.c_str() << endl; return 0; } VisualStudio2019のdebugとreleaseとで&strのメモリダンプ内容が異なるのはなぜでしょうか? debug : 78 f7 b6 00 61 62 63 00 release : 61 62 63 00
271 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:34:54.21 ID:78UVTJ0X.net] 1/a が求まれば あとは乗算2回(と軽い演算)で剰余が求まるでしょ 漸化式にするまでもなく
272 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:36:37.97 ID:78UVTJ0X.net] >>264 デバッグ情報とか破壊検出用データとかじゃ?
273 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:37:41.67 ID:sE/nea3J.net] >>265 細部までは分かりませんが、直感でなんとなく分かります。 aが32BITの場合なら、一度にほぼ、32BIT分計算が終わる気がします。
274 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:42:23.06 ID:FauhtWma.net] >>266 ありがとうございます。 ということはdebug版の呼び出し元(exe)とrelease版の呼び出し先(dll) 間ではstring型を関数の引数にするとバグりますね。
275 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:44:29.12 ID:78UVTJ0X.net] >>267 >>251 の前提はどこに?
276 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:45:06.01 ID:sE/nea3J.net] >>268 そうなりますね。 malloc() や new なども、Debug 版と Release 版ではライブラリに互換性が 有りません。Debug 版では、まさに、破壊検出用の埋め草のような物が入っていたり、 new を行った行番号情報が入っていたりします。
277 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:46:50.29 ID:FauhtWma.net] >>270 多謝!!! しりませんでした。
278 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:49:29.81 ID:sE/nea3J.net] >>269 私は特に仮定はしていませんが、四倍浮動小数点型などに興味があり、 それを整数演算に置き換えて実装してみようかと思っていたりするので、 割る数も割られる数も同じくらいのBIT数の整数の場合に興味があります。 前に調べたところ、倍精度浮動小数点演算を用いて、四倍精度浮動小数点 の乗算、除算まで実装する方法があるようですね。ただし、その場合、 Intelの内部拡張倍精度(80BIT)方式をONにしていると駄目なんだそうですが。
279 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:57:18.80 ID:78UVTJ0X.net] >>272 4倍弱精度なら Haswell以降で使えるFMA命令がとても約に立ちます
280 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:58:49.33 ID:YRq1zw3m.net] >>264 こっちで試した限りだと、debugとreleaseでコンソール表示の長さは変わらんかったぞ x86とx64なら差が出たが
281 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:59:27.13 ID:sE/nea3J.net] >>265 aがN BIT の場合、例えば、1/a を、64BIT 程度で求めた場合は、 (N / 64) (回) 程度の乗算が必要になりそうです。 1/a を高速に N BIT まで求めるアルゴリズムがありますでしょうか?
282 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:59:32.53 ID:78UVTJ0X.net] それ以前の普通の乗算でも出来るけど AVXでSIMD化出来るのでたくさん計算するならぜひ
283 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:01:27.32 ID:sE/nea3J.net] >>273 興味深いです。教えていただければ幸いです。
284 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:02:58.56 ID:YRq1zw3m.net] >>274 メモリダンプという言葉をみおとしていた スレ汚しすまぬ
285 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:05:02.93 ID:78UVTJ0X.net] >>275 私が何度か除算は乗算の3倍の時間と書いたのは 例えば100万桁同士の除算は100万桁同士の乗算の3倍な時間という意味 乗算命令の回数ではなくて aが100万桁で1/aを100万桁精度で求めるのは 100万桁同士の乗算の2倍くらいの時間で出来る
286 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:10:41.35 ID:sE/nea3J.net] 例えば、割り算部分をテーラー展開ですか。
287 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:17:37.02 ID:78UVTJ0X.net] >>277 {a_hi, a_lo} と {b_hi, b_lo} の乗算で a_hi * b_hi を求めてから、 本当の a_hi * b_hi との誤差を求めるところ c_hi = a_hi * b_hi とやってから a_hi * b_hi - c_hi をFMAでやれば誤差が簡単に求まる
288 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:19:37.46 ID:78UVTJ0X.net] fusedな3個の足し算命令とかもあると 加減算も簡単になるんだけど そんな命令は(他のCPU含めて)見たことがない
289 名前:デフォルトの名無しさん mailto:sasge [2019/11/26(火) 23:24:07.48 ID:sE/nea3J.net] a=1+q の時: y/a=y/(1+q) =y*{1 - q + q^2 - q^3 + ... } =y*(1-q*(1-q*(1-q...))}
290 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:30:51.74 ID:sE/nea3J.net] >>283 この式は、|q|<1の場合にだけ正しいので、 aをa=u*2^n (u = 1.0 + q)の形式に直してから 1/a = 1/(u*2^n)=1/(1+q)*2^(-n) = (1-q*(1-q*(1-q...)))*2^(-n) とするのですかね。 なるほど、qの精度を考えれば、乗算の回数は2個くらいまで で済みそうですね。
291 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:36:41.80 ID:sE/nea3J.net] >>284 すみません、これだと二回では精度が足りなさそうですね。
292 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:37:21.85 ID:78UVTJ0X.net] 多倍長の1/aの話なら テーラー展開は遅すぎて使いませんよ 4倍弱精度の話であれば 除算命令やテーラー展開は使いますが どれの話をしてるのかわかるようにかいてくれませんか? >>238 の通りなので
293 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:49:53.60 ID:sE/nea3J.net] >>286 多倍長の 1/a はどうやって求めたら効率が良いのでしょうか?
294 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:53:50.60 ID:78UVTJ0X.net] >>228
295 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:00:48.09 ID:T7KqQ5kC.net] >>288 もしかすると、 y = 1/(a*x) - 1 と y = 0 の交点をニュートン法で求めるのでしょうか。
296 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:02:25.36 ID:T7KqQ5kC.net] >>289 すみません、違いますね。
297 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:27:57.72 ID:tKRTExPe.net] 初歩的な質問ですみません 2つのdouble型実数xとyを引数とし、x/yとy/xの大きい方を返却する関数を作成せよ。xあるいはyのときは0を返却するとする。という問題でコード書いてみたんですがうまくいきません どこが間違っているのでしょうか #include<stdio.h> double func(double,double); /*プロトタイプ宣言*/ int main(void) { double a,b; printf("実数をスペースで区切って入力してください\n"); scanf("%d %d",&a,&b); printf("%d",func(a,b)); /*呼び出し*/ return 0; } double func(double x,double y) { if(x/y > y/x) return x/y; if(y/x > x/y) return y/x; if(x==0) return 0; if(y==0) return 0; }
298 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:33:48.17 ID:ynQDuheL.net] %dのところがおかしい それは整数用
299 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:42:47.79 ID:tKRTExPe.net] ありがとうございます 1時間くらい悩んでたのが馬鹿みたいだ
300 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:53:21 ID:ynQDuheL.net] 入力に0を含めてテストするように
301 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 01:11:14 ID:tKRTExPe.net] ifの順番変えたら完成しました
302 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 02:13:53.15 ID:XGkmLsxS.net] QZは馬鹿
303 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 02:41:24 ID:Q9FMbuzn.net] xとyが等しいケースは書いたんじゃろうか
304 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:43:48.59 ID:g3LmaZYt.net] 世にある仕事の数でいうと java:C#:C++が5:3:1くらいだな。
305 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 12:16:41.56 ID:zdI/1sLa.net] このスレ過疎かと思ったら話題でた途端に加速するな
306 名前:デフォルトの名無しさん [2019/11/27(水) 13:47:03 ID:KtqS+hCI.net] const は要らない子
307 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 14:58:41.90 ID:vSkP4LPU.net] 本当はね・・・constの逆が欲しいのさ デフォが書き込み禁止で許可を明示だったらと キャプチャのmutableみたいな
308 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:05:41.36 ID:Yu9S3/3Y.net] めんどくさいだけ
309 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:08:54.83 ID:lAIqGT0K.net] Pointという点を表すクラスがあって、2点間の距離を取得する関数を追加したいのですが、 double Point::GetDistance(const Point &p) const にすべきか、ただのCの関数で double GetDistance(const Point &p1, const Point &p2) にしたほうがいいのか迷っています。 設計的にいいのはどっちなんでしょうか?
310 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:13:19.55 ID:zdI/1sLa.net] >>303 下 Pointに必要以上の機能を作らない
311 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:32:27 ID:FMRbYBnJ.net] 下に1票。同じ理由
312 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:33:34 ID:vYtjQlD0.net] 下だな なんでもかんでもインスタンスに生やすのは厨臭くてダサいし、対称な操作は対象に見えるべき
313 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:34:48 ID:lAIqGT0K.net] >>304 ありがとうございます。 ですよね。前者の考えでいくと、いくらでもメンバ関数が増えそうな気がしていました。
314 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:43:43.07 ID:PahKH909.net] 下の方が、スカラー値等の既存型や配列向けの特殊化をし易いメリットもあるかもねー
315 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:55:14.01 ID:xImtWZAs.net] ベクトルの引き算を定義してやるのはありでは
316 名前:デフォルトの名無しさん [2019/11/27(水) 16:11:06 ID:KtqS+hCI.net] 下を造っておいて operator - で下のを利用 >>309 と同じ どちらも inline
317 名前:デフォルトの名無しさん [2019/11/27(水) 16:12:16 ID:KtqS+hCI.net] ああ同じではないわ ベクトルの引き算はスカラーじゃなくてベクトル ベクトルの絶対値を定義する
318 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 16:29:07.34 ID:MN5dlGGA.net] abs(a-b)
319 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 18:11:30.16 ID:p98u22dC.net] ベクトルの加減算や符号は紛れが無いのでオペレータで実装 乗算は内積、外積と要素ごとの積の3種類あるので 関数にする 3次元ベクトルも作る可能性があるなら 2次元ベクトルだとわかる名前にしておく 可能性が無いならそのままで 絶対値やノルム、象限などをグローバルにするかメンバ関数にするかは一長一短 設計ポリシー次第
320 名前: mailto:sage [2019/11/27(水) 19:16:22.98 ID:N9ggbkQ1.net] >>303 私も下 >double GetDistance(const Point &p1, const Point &p2) を friend 関数にします、大事にするのは対照であること、です
321 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:21:07.28 ID:fyVQDs9d.net] >>187 メモリフラグメントを起こさないようにわざわざメモリプール切ってるのに new/delete繰り返すオマエみたいなアホがいるからまともな製品ができねぇんだろww
322 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:29:28.78 ID:vSkP4LPU.net] >>315 ほーう? メモリプールでフラグメントが防げるのかww
323 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:31:20.95 ID:nSz8Pwyp.net] >>314 オペレータだとメンバ関数な実装多いよね なんでだろう
324 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:40:34.02 ID:nSz8Pwyp.net] RTOSを使うような小規模環境だと ヒープをしなかったりアロケートのみにしたりする そんな環境でもC++は便利なので使えるなら使いたい
325 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:40:48.50 ID:nSz8Pwyp.net] ヒープを搭載しなかったり
326 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:48:12.34 ID:nSz8Pwyp.net] OSレスでもC++が使えるなら使う 実際それで製品出した
327 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:52:22.88 ID:q8B3tEUN.net] 対称が大事なのって、交換法則が成り立つ計算だから?
328 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:54:03.88 ID:nSz8Pwyp.net] 引き算の立場は?
329 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:57:18.53 ID:nSz8Pwyp.net] 主役がはっきりしてる場合はメンバ 同等な重要度の時は非メンバ 私の場合はだいたいこんな感じ
330 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:58:30.31 ID:nSz8Pwyp.net] 対称かどうかはあまり関係ない
331 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:25:32.56 ID:vYtjQlD0.net] 対称性が特に問題になるのはオペランドの型が異なるケースだな 対称な演算a.op(b)をaのクラスに実装したらbのクラスにも同じものをコピペするのか? C#の演算子オーバーロードがstaticなのはそのへんが理由だとか Pythonなどのスクリプト言語では基本的にインスタンスメソッドとして演算子を実装するけど、 それは動的型故に事前に実装を解決できないからだね
332 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:29:53.87 ID:EGeQZX97.net] >>317 かつて非メンバ関数のオペレータを名前空間の外から呼び出そうとするととても残念な気持ちになるからじゃね
333 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:44:42.44 ID:0U9h+SK3.net] オペレータオーバーロードを使うとカッコイイ気分にひたれるからだろ それ以外の理由なんてあるのか?
334 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:45:44.57 ID:E2H9effp.net] private変数の書き換えを伴うものだけメンバだな Pointが座標値しか持ってないようなのならコンストラクタ以外は持たせない
335 名前:デフォルトの名無しさん mailto:sage [2019/11/28(Thu) 01:38:08 ID:PoPpbfsh.net] 代入は普通メンバだろ = += -= *= /= [ ]も
336 名前:デフォルトの名無しさん mailto:sage [2019/11/28(Thu) 01:44:12 ID:PoPpbfsh.net] 当然符号も
337 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2019/11/28(Thu) 02:14:28 ID:+45JwpRI.net] >>303 これは後者が良い場合が多い。 型変換の対称性が絡むんだよ。 たとえば std::tuple<double, double> から Point への変換コンストラクタが用意されているようなとき、 メンバ関数として実装されていると左辺ではこの型変換が考慮されず、右辺では考慮されるということになる。
338 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 02:50:39.48 ID:4GnG2KNj.net] >>329 代入系と添字はそもそもメンバとしてしか書けない
339 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 06:43:27.57 ID:PoPpbfsh.net] >>332 >>328 に言って >>331 対称性は関係ないって Point * double だって型変換された方が都合が良いなら非メンバだろうに
340 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:02:30.92 ID:A3g54Di2.net] >>316 ほーう? そんなことすら知らないのかww
341 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:09:05.07 ID:YpOyjZW5.net] >>334 ハッタリしかできることねえようだな まあ、そうだろう
342 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:20:32.24 ID:PoPpbfsh.net] フラグメントが問題になるならアロケート専用で解放出来ないようにするとかそもそもアロケート出来ないようにするとか 固定サイズを頻繁になら独立させておけばフラグメントしない
343 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:21:42.93 ID:PoPpbfsh.net] ヒープはヒープで1個の研究分野になるくらい いろんな技術、方法がある
344 名前:はちみつ餃子 mailto:sage [2019/11/28(木) 17:46:42.56 ID:+45JwpRI.net] >>333 ??? 理解できないのでもうちょっとくやしく
345 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 18:11:40.54 ID:PoPpbfsh.net] >>338 今回たまたま対称であったというだけで 対称性が理由じゃないってこと ベクトル※ベクトル ベクトル※スカラー ベクトル※行列 ベクトル※矩形 なんであれ型変換された方が良いなら非メンバ
346 名前:はちみつ餃子 mailto:sage [2019/11/28(木) 18:23:49.08 ID:+45JwpRI.net] >>339 なるほど、一般化した場合の話になってるわけね。
347 名前:デフォルトの名無しさん [2019/11/28(木) 19:15:35.47 ID:nxFPf5Ar.net] begin()とend()があればRangeなんですか?
348 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 23:41:46.98 ID:iCLeSa8c.net] だいたいそうよ
349 名前:デフォルトの名無しさん [2019/11/29(金) 04:19:50 ID:KHTBF+uC.net] そうですか。 どうもありがとうございます。
350 名前:デフォルトの名無しさん [2019/11/29(金) 08:06:17 ID:R3LtoROu.net] 新明解C++買ったけどなにもしてない
351 名前:デフォルトの名無しさん [2019/11/29(金) 08:29:36 ID:KHTBF+uC.net] std::uint8_tってstd名前空間にあるけど、名前空間で修飾しなくても使えるのは何故ですか?
352 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2019/11/29(金) 08:53:08 ID:7m3ynrwG.net] >>345 usingを使っているから。
353 名前:デフォルトの名無しさん [2019/11/29(金) 09:06:38 ID:KHTBF+uC.net] >>346 自分でusingしてなくても大丈夫ですか?
354 名前:デフォルトの名無しさん [2019/11/29(金) 09:34:32 ID:N/f9f1S7.net] a[i] = b; みたいなのき a に対して a.setitem(i, b); するのと a.getitem(i) が参照を返す様にしておいて a.getitem(i) = b; するのと どっちが正解?
355 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 09:41:11.46 ID:B0LTR+GE.net] JavaのArrayListは a.get(i) = b; になってるので長いもんには巻かれろと思考停止で真似るだけ
356 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 11:40:28.80 ID:oVgX/GuB.net] >>345 #include <cstdint>は #include <stdint.h> つまりCのライブラリだからだ typedef unsigned char uint8_t; #ifdef __cplusplus namespace std { using ::uint8_t; } #endif こうなっているだけだ
357 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 11:53:00.94 ID:Ml/gOmNO.net] さすがに整数型にまでstdつけるのはうざい なのでcのヘッダーを使ってる
358 名前:デフォルトの名無しさん [2019/11/29(金) 12:40:38.17 ID:pYMGuCeV.net] stdを省略する方がウザい
359 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 12:45:20.21 ID:gmGtMFq3.net] 何の情報も増えないし紛れも何もない 意味の無い情報に5文字も余分に使いたくない 画面も入力の手間も
360 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 12:47:51.78 ID:gmGtMFq3.net] int8_t がcharで、std::int8_t がsigned char とか? それは御愁傷様
361 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 12:52:13.51 ID:lef7gBlN.net] STL使ってスタティックビルドしてるコンソールプログラムあるけど、 ファイルサイズ 400KBぐらいだな。圧縮した状態で200KB これが20KBぐらいに減るのかー、でも誰も喜ばないだろうな。
362 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 13:01:25.99 ID:0dBBAnUQ.net] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
363 名前:はちみつ餃子 mailto:sage [2019/11/29(金) 14:15:39.12 ID:J8eB3+F9.net] >>350 >>350 cstdint 内の名前はマクロを除いて std に入るはず。 グローバル名前空間でも定義されるかどうかは処理系定義じゃなかったっけ? 逆に stdint.h 内の定義はグローバル名前空間でアクセスできるけど、 std 内でも定義されるかどうかは未規定だったように記憶してる。 仕様を読み返すのが面倒なので誰か調査よろ。
364 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:21:40.41 ID:Tp6caFY5.net] 変数名をメモリやオーバーヘッド無しでエイリアスつける方法ありますか? メンバ変数に shared_ptr<Data> m_data; みたいなのがあるとして using text = this->m_data->member.text; みたいに使いたい変数だけ別名で取り出したい
365 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:30:09.62 ID:oVgX/GuB.net] 現実問題としてCのライブラリをstdに入れるということ自体が馬鹿げた話だ 今の流れはuint8_tの話だが、extern "C"の関数は装飾名に名前空間が含まれない
366 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:35:12.66 ID:yQ0DwMtc.net] >>358 一番簡単なのは、 auto &text = this->m_data->member.text; とすることです。
367 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:37:49.63 ID:Tp6caFY5.net] >>360 現状それでやってますが、コンパイル時に確定できるのなら他に方法があるのかと思いました
368 名前:はちみつ餃子 mailto:sage [2019/11/29(金) 14:45:49.13 ID:J8eB3+F9.net] >>361 そういう簡単なケースだと最適化でちゃんと消えてくれるんじゃね?
369 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:56:28.90 ID:KzrCIvE1.net] 参照解決のコストすら嫌なら #define text this->m_data->member.text
370 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:56:51.37 ID:GB3X2IZU.net] コンパイル時に確定してるじゃん
371 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 15:07:19.89 ID:M3WjIH4t.net] むしろもとの書き方だと2度参照解決して3度足し算しているような…
372 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 15:21:18.81 ID:YkvT9y9m.net] textに実行時にアクセスするなら いずれにしろアドレス計算は必須になる >>360 のようにすれば 最適化がうんこで複数回計算されるのを防ぐ可能性すらある アクセスしないならおそらく最適化によってアドレス計算コードは生成されない
373 名前:デフォルトの名無しさん [2019/11/29(金) 15:50:36.19 ID:N/f9f1S7.net] inline付けるとかえって損か
374 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 17:45:51.93 ID:/RbGsSZk.net] m_data の型が shared_ptr<Data> なことを気にしてるのかな。 shared_ptr の指す先のメンバを参照変数でバインドするのは無作法か、とか。 と言うか、上の話は俺の疑問でもあるんだけど。
375 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 18:15:50.93 ID:4DEcYZGM.net] -> に副作用があるならそりゃ話は別だ
376 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 18:44:49.74 ID:xP2G2+ZO.net] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 え?リリースするときスタティックリンクして配布するのかって? ダイナミックリンクするけど?
377 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 18:46:27.54 ID:xP2G2+ZO.net] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 え?リリースするときスタティックリンクして配布するのかって? ダイナミックリンクするけど? え?なんで俺が笑われてるの?
378 名前:デフォルトの名無しさん [2019/11/29(金) 20:21:36.93 ID:KHTBF+uC.net] どうもありがとうございます。
379 名前:デフォルトの名無しさん mailto:sage [2019/11/30(土) 16:27:23.28 ID:4Yq6PogE.net] constexpr定数とconst定数って結局何が違うの?
380 名前:デフォルトの名無しさん mailto:sage [2019/11/30(土) 16:40:26.74 ID:WebQyLi7.net] コンパイラに対する単なるヒント 優れたコンパイラでも糞コンパイラでも動きほ同じ 中途半端なコンパイラだと最適化のレベルがもしかしたら違うかも コンパイル単位にもよる
381 名前:デフォルトの名無しさん mailto:sage [2019/11/30(土) 17:34:29.84 ID:sGzVq6Pz.net] constexpr定数はコンパイル時に値が確定することが保証されている
382 名前:デフォルトの名無しさん mailto:sage [2019/11/30(土) 17:35:37.90 ID:iKPiHg5H.net] >>373 constexpr定数はconstexprな文脈を作る。つまり、 constexpr int a = func() とするとfunc()はコンパイル時に実行される。当然constexpr関数でなければならない 一方、const定数はconstexprな文脈は作らない const int a = func() とした時、func()は実行時に処理される。constexpr関数である必要はない
383 名前:デフォルトの名無しさん mailto:sage [2019/11/30(土) 17:40:18.
] [ここ壊れてます]
384 名前:51 ID:4Yq6PogE.net mailto: ああ、初期化に関数を使うと違いが出るんですね それにconstexprの場合は初期化が保証されていると ありがとうございました [] [ここ壊れてます]
385 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 01:46:51.73 ID:j3uX5vWG.net] constexprの強みは、配列のサイズみたいな定数を要求される文脈で使えるってこと。 const変数だとこれができないから、昔はマクロで定数定義するしかなかった。
386 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 01:49:20.00 ID:Hj4I5N6m.net] >>378 C++ではconst変数も一部定数式扱いになってたでしょ。だから>>373 みたいな疑問が出る。
387 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 01:54:44.83 ID:Nfz3Rlxp.net] sizeofと何が違うんだ
388 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 08:35:44.43 ID:7fh/nHBZ.net] constは設計ミスが多いな
389 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 08:36:58.95 ID:7fh/nHBZ.net] とても神リッチーが作ったように見えない
390 名前:デフォルトの名無しさん [2019/12/01(日) 10:24:23.58 ID:gHT6E7kc.net] STLにはなぜ木が無いのですか。
391 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 10:27:51.87 ID:sKSeAmO2.net] 大昔のC言語時代に考えた物だから 関数を使った初期化が出来ない時代の
392 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 10:31:53.72 ID:sKSeAmO2.net] >>383 std::set とか、内部は木じゃね? 汎用的な木? ポインタのvectorで良くない?
393 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 10:56:13.36 ID:SqfEoEmM.net] Javaでも.NETでも標準ライブラリに木は無いだろ 木はメモリへのシリアライズの仕方を工夫せずに素直にノード毎にnewしてたら殆どあらゆるケースにおいてクッソ非効率なデータ構造なので、 標準ライブラリとして提供する意義が薄い 誤った選択肢を提供することで余計にパフォーマンスを低下させることになるだけだ
394 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 11:03:00.54 ID:sKSeAmO2.net] listもsetもノードごとにnewしてるけど
395 名前:デフォルトの名無しさん [2019/12/01(日) 11:15:38.03 ID:gHT6E7kc.net] ダブルアレイを変形させて木を表現できないでしょうか。 子は親のIDを知っていれば良く、親は子の個数を知っていれば良いので、出来そうな気がするのですが。
396 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 11:16:42.54 ID:SqfEoEmM.net] >>387 うん。だから遅いよ。
397 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 11:29:39.61 ID:7fh/nHBZ.net] だから形容詞には比較や数値をつけろってば それじゃ健康産業で不安を煽る悪徳業者そっくりだろうが
398 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 11:50:38.89 ID:p3Z7Nr0h.net] 遅いlistやsetがstlに入っていて使われ続けてるんだから stlに入れない理由にはならないってことだよあほ
399 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 11:53:33.72 ID:rKmqg7A0.net] いやそんなもん使うやつらがそもそもc++使う必要がねーって話だわ
400 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 11:55:51.88 ID:YWi4MX0G.net] それはお前の個人的な意見? それとも何かデータでもあるの?
401 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:11:13.07 ID:p3Z7Nr0h.net] listやsetが適した用途があるから存在してるんだけどね 使いどころ間違ってるんじゃない?
402 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:14:27.64 ID:p3Z7Nr0h.net] 同じ用途なら newやdeleteを使わなかったとしても 結局ノード作成時に空きエリアを探すことになるわけで
403 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:17:14.00 ID:p3Z7Nr0h.net] ノード追加専用のスペシャルlistやsetなら速くなるけど それはもはやlistやsetじゃない
404 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:21:44.69 ID:vEIKl7N1.net] プログラムのすべての部分で最速の選択をする必要なんて全く無いのに>>392 みたいなことを言うやつはCかFortranで書けばいいんじゃないかな
405 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:29:30.42 ID:SqfEoEmM.net] >>394 残念ながら、setはともかくlistが適しているシーンは実際にはほとんどない 途中への少数の要素の挿入削除が頻繁にあって事前にその位置が分かっている状況などどれほどあるというのか
406 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:32:06.35 ID:p3Z7Nr0h.net] >>398 使いどころがわからないなら無理して使わなくて良いんだよ
407 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:33:53.83 ID:SqfEoEmM.net] >>399 具体例を示そうね
408 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:34:14.31 ID:p3Z7Nr0h.net] >>397 10%の高速化なら無視すればいいけど 1000倍とかなら考えるだろ? vectorとlistとsetの選択を間違えると そのくらいの差が出る データ数が多ければ
409 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:41:44.01 ID:IheeS71f.net] ソートが早い
410 名前:デフォルトの名無しさん [2019/12/01(日) 12:47:37.78 ID:gHT6E7kc.net] イテレータの安定性が。
411 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:53:47.75 ID:ZEhocPVE.net] >>397 最速のものを使う必要はないがそもそもアルゴリズムオーダーが間違ってるようなものを 使うってのは頭悪すぎるし、なぜc++使ってんの?バカなの?ファッション? って気にしかならん。
412 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:57:04.85 ID:7fh/nHBZ.net] 「そんなもん使う」なんて全面否定しといて 今さらアルゴリズムオーダーとか言い出すのは見苦しい
413 名前:デフォルトの名無しさん [2019/12/01(日) 12:58:17.95 ID:gHT6E7kc.net] 木とグラフが足りないと思います。
414 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:58:25.43 ID:n5DjgtsH.net] イニシャルコストとランニングコストがあるだろ 数か月〜数年間止まらないようなソフトウェアだと初回起動時のデータ読み込み10億件・数分程度は誤差で済む
415 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:00:02.95 ID:IheeS71f.net] 現存するあらゆるコンテナを実装してくれ
416 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:00:34.69 ID:YWi4MX0G.net] >>401 > 1000倍とかなら考えるだろ? いや? 0.0001ミリ秒が0.1ミリ秒になったところで 大した問題じゃないからね
417 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:02:56.20 ID:7fh/nHBZ.net] 実害が出るかどうかはケースによるのに 全てお見通しの仏様か何かになったつもりのやつが変なことぬかすんだよな
418 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:08:14.41 ID:p3Z7Nr0h.net] >>409 1分と1000分なら大違い トータル0.1ミリ秒なら何でも良いよ気にするな データが多い時の話 オーダーが効いてくる newの時間なんてオーダーの差に比べれば誤差 毎回newだから遅いとかトンチンカン
419 名前:デフォルトの名無しさん [2019/12/01(日) 13:09:03.33 ID:gHT6E7kc.net] Boostにイテレータが安定なvectorがありますが、速度はlistに劣る場合があると但し書きがありますよ。
420 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:16:11.26 ID:p3Z7Nr0h.net] データ構造は list, set, リニア(vectorやdeque) で揃ってる これでオーダー的には大抵は問題ない 微妙な高速化が必要なら専用を自作すれば良いが 組み込みでもなければ必要となることはあまりない 複雑なデータ構造は、 標準のデータ構造を組み合わせて作る 複雑なリンク構造はSLAMの世界だとよく使う
421 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:20:19.28 ID:ZEhocPVE.net] いや明らかにsetのオーダーに問題あるだろ。
422 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:23:43.76 ID:p3Z7Nr0h.net] えっ?
423 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:25:41.03 ID:ZEhocPVE.net] 思考停止してないでこれくらいは読んでくれよ。。 https://cpprefjp.github.io/reference/set/set.html
424 名前:デフォルトの名無しさん [2019/12/01(日) 13:31:07.65 ID:gHT6E7kc.net] 読みました。
425 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:31:36.80 ID:B2zYeZ5e.net] メモリの再配置が起こると都合が(あるいは効率が)悪いオブジェクトを比較的頻繁にnew/deleteしつつ、 一覧を保持しておく用途にはlistが適していると思う。 あ、でも、本体をdequeに、ポインタをvectorに入れて管理する方が速いかな? バグりそうで恐いけどw
426 名前: mailto:sage [2019/12/01(日) 13:51:31.01 ID:mRJ420VP.net] >>386 木をそこまで悪くいう人を初めて見かけました、大概のデータ構造は木だと思うのですけど…
427 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:56:38.18 ID:p3Z7Nr0h.net] 下手くそが巨体な木を作るとひどいって話だろ 下手に作らなきゃ良いだけ
428 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 14:14:45.54 ID:YC7h427T.net] >>414 問題にならない用途、条件のもとで使う分には問題ない。
429 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 14:32:23.94 ID:9nkP+L/s.net] きみはあれか 「ライトバンはセダンにくらべると速度も遅いし馬力もないしとてもあんなもの使えない!」 とかいっちゃうタイプ?
430 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 14:47:10.92 ID:HFxN8/oH.net] >>419 お前は頭が悪いけどな
431 名前:デフォルトの名無しさん [2019/12/01(日) 15:33:24.99 ID:zRxwjdrk.net] 一般的には、適切な二分木等で実装されたSetは、メモリ効率が悪いことはあっても速度のオーダーがひどいってことは無いだろ
432 名前:蟻人間 mailto:sage [2019/12/01(日) 15:40:09.97 ID:CG2Vs9XU.net] C++11のstd::unordered_setに負けてる。
433 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 15:45:18.33 ID:7fh/nHBZ.net] それはまた別な話だ
434 名前:デフォルトの名無しさん [2019/12/01(日) 16:25:31.35 ID:BhgcTKiH.net] 二分木がSTLにない理由は簡単。冗長だから。
435 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 16:26:58.04 ID:p3Z7Nr0h.net] setは内部2分木だって言ってるのに
436 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 17:09:51.64 ID:7fh/nHBZ.net] >>422 うまい喩えだなw
437 名前:デフォルトの名無しさん [2019/12/01(日) 17:18:14.34 ID:BhgcTKiH.net] >>428 もしかして二分探索と二分木を混同してる?
438 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 17:33:23.47 ID:YHuSOkLJ.net] 木の枝を回廊にしたらグラフになります。 グラフはスパコンのベンチマークにされるくらいにメジャーな構造です。
439 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 17:36:46.35 ID:YWi4MX0G.net] >>411 自分で言ってるやん? データが少ないときなら気にする必要はないので、 データが少ないとき用のアルゴリズムとして 「遅いけど便利」はあったほうが良いだろ
440 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:14:48.13 ID:XkMP/E25.net] 普通ハッシュ使うよね?とかそういう発想が皆無なのが、 ここは馬鹿しかいないってことを示してるよな。。
441 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:19:34.55 ID:Enyr5Fgf.net] >>430 多分混同してるのはお前だけかと
442 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:22:27.22 ID:Enyr5Fgf.net] >>433 バカはお前 set は一般的に、二分木として実装される。 https://cpprefjp.github.io/reference/set/set.html
443 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:36:45.84 ID:n5DjgtsH.net] ハッシュを使うんじゃねえな ハッシュをどう作るか?になる perl5/hv.h at blead ・ Perl/perl5 ・ GitHub https://github.com/Perl/perl5/blob/blead/hv.h cpython/dict-common.h at master ・ python/cpython ・ GitHub https://github.com/python/cpython/blob/master/Objects/dict-common.h
444 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:53:22.71 ID:ManO1ilk.net] 木やグラフがほしいって言ってる人が、ハッシュマップや内部実装だけが木構造のコレクションなんていらんだろ。。
445 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:11:19.73 ID:IheeS71f.net] うんち
446 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:20:12.56 ID:fP4CRSrQ.net] 「木が欲しい」という要件に対して確認もなく二分木渡すような奴はダメ ディレクトリ構造表したい奴に二分木渡してどうすんだ
447 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:25:06.56 ID:WB/GHlzr.net] 二分木って規格で決めてるの?
448 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:36:32.68 ID:IheeS71f.net] うんち
449 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 20:13:00.99 ID:p3Z7Nr0h.net] 「木が欲しい」なんていう人には とりあえず何でもいいから木を渡しておけばいいんだよ
450 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 20:31:05.42 ID:p3Z7Nr0h.net] 木は用途や使い方次第で適する作り方が異なるので 標準コンテナを組み合わせたカスタムで良いと思うよ
451 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 20:51:16.81 ID:YHuSOkLJ.net] https://ideone.com/u8DxeY ほら〜。あそこに見えるのがN分木のさんぷるだよ〜。 デバッグしてないから酒の肴にぴったりだよ〜。
452 名前:デフォルトの名無しさん [2019/12/01(日) 21:01:15.36 ID:BhgcTKiH.net] C++11以降なら子ノードをweak_ptrの配列で持つとか?
453 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 21:09:55.37 ID:YHuSOkLJ.net] >>444 言い忘れていたが、このスレから取得したN分木のコード(>>444 )はMITライセンスです。 改造して変な構造を作ろう!
454 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 21:31:39.82 ID:vEIKl7N1.net] 著作権表示なしにMITライセンスにできたっけ
455 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:14:07.56 ID:9WgCOaQB.net] サンプルとかライセンスとか頭沸いてんのかこいつ 下痢便を神棚に飾って人に配るような所業
456 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:32:33.44 ID:YHuSOkLJ.net] 著作権表示は、 2019 Yakitori が必要なら使って。
457 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:32:48.31 ID:YHuSOkLJ.net] >>449 日本語不自由だな
458 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:38:20.61 ID:vEIKl7N1.net] ?
459 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:41:32.80 ID:IheeS71f.net] うんち漏れそう
460 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 00:33:17 ID:RIgVO6ZZ.net] >>448 だな
461 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 02:45:23.23 ID:btxUm/V/.net] オランダのTIOBEの調査でも、C#よりJavaやC/C++が人気で、 他の会社による日本での求人数もJavaやC/C++の方がC#より上だそうだ。 JavaScript、PythonやRubyは、求人数では大したことが無いらしい。 Webページを製作している人がネットでは多いので、JS、Python、Ruby などが人気であるかのように見えるだけかもしれない。
462 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:22:15 ID:Lvay36w9.net] >>454 すまん。日本での求人数は、 Java, PHP, Ruby, C#, JS, Python, Objective-C/Swift, C/C++, HTML, Android, Unity, VB.NET, Scala だそうだ。ただし、C#から、C/C++ までは横並びでどれが上とも いえない僅差。そして、Java, Python, Ruby は伸びているが、 PHP, C#, JS, HTML は減っている。 ところが、プログラマ側からの「希望言語」としては、JSがTOP らしい。アメリカでの今後学びたい言語としては、Java, Pyhtho, C++ は上位に来るが、C#, Ruby はかなり下の方。
463 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:29:10.52 ID:Lvay36w9.net] >>455 個人的見解としては、VS code が 5ch で評価が高かったのは、言語が TypeScript や JavaScript と HTML で記述されているので、JSで プログラムすることを希望するプログラマが、JSの求人を増やすために JS製の成果物を高く評価していたからかもしれない。 また、Javaの伸び率はかなり高い。Rubyの求人は日本では多いようだが、 アメリカでは少ない。C#の人気は、ある時期までは延びたが、今は停滞期 に入ったようだ。しかも今後学びたい言語としては、C よりも低い。
464 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:36:47.51 ID:Lvay36w9.net] TIOBEの調査では、Java と Cの人気が同列で高く、Python がそれに続く。 また、CとC++を合計すると、Javaよりもだいぶ高い人気となる。 Java 16.2% (-0.50) C 16.0% (+1.64) Python 9.84% (+2.16) C++ 5.60% (-2.68) C# 4.31% (+0.36) VB.NET 4.22% (-2.26) JS 1.93% (-0.73) PHP 1.72% (-0.66) SQL 1.69% (-.15) Swift 1.65% (+0.20) Ruby 1.26% (+0.17) Objective-C 1.20% (-0.28) ・・・ D 0.927% (-0.64) Go 0.853% (-0.64)
465 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:57:59.67 ID:qRRc8YVo.net] CとC++とC#の区別ができる営業いないんだよな
466 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 04:06:59 ID:3lD7gpLY.net] 営業って年取った技術者がやるもんだろ
467 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 06:49:53 ID:MoZo3p1s.net] 今はもう戦力外技術者なんて即解雇だよ そもそも大手だと営業と技術者は別会社
468 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 07:41:42.15 ID:tW9RdYoY.net] なんで大手条件が勝手に加わるのか
469 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 08:23:03 ID:mQVkXZA1.net] 零細中小なんて誰も興味ない
470 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 08:42:45.44 ID:GldGaTIn.net] 比較するもんじゃないだろ C++は好きだが、在庫管理システムをC++で書けと言われたら全力で拒否してC#を推すぞ俺は
471 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 11:06:47 ID:5u9Q6RC4.net] ほんとそれだな きみらはいつになったらライトバンとセダンの使い分けができるようになるのか・・
472 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 11:42:23.75 ID:L9XsPrRa.net] >>464 君「ら」? お前のことだろ
473 名前:デフォルトの名無しさん [2019/12/02(月) 13:15:55 ID:/N45p/D+.net] でもJavaはベンチとると速いんだけど、実際は遅い。 これ、リソースを食いすぎるのが原因なので、本当はサーバーよりクライアントに向いているんじゃないのかな。
474 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:16:09 ID:xJykAg3Z.net] ライトバンとセダン? スリッパと自転車と乗用車と飛行機とロケット くらい使い分けないとダメ
475 名前:デフォルトの名無しさん [2019/12/02(月) 13:19:02 ID:/N45p/D+.net] C++はメモリーの分断化があるので、長時間起動し続けるサーバーには向いていないと言われてるんだけど、実際にやってみたら全く問題なかった。 考えてみると、JavaプログラムをホストするシステムがC/C++で書かれてるんだから、本当に問題になるなら、Javaも無理なはず。
476 名前:デフォルトの名無しさん [2019/12/02(月) 13:20:28 ID:/N45p/D+.net] Androidは特に不満もなく動くので、Javaはクライアントでこそ力を発揮するような気がします。
477 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:21:19 ID:xJykAg3Z.net] メモリは潤沢にあるし アドレス変換もあるので よほど下手に作らなければ PCでフラグメントは問題にはならない そんな事を心配する時代じゃない 組み込みだと話は別
478 名前:デフォルトの名無しさん [2019/12/02(月) 13:21:57 ID:/N45p/D+.net] 機種ごとの差を言語が吸収
479 名前:してくれるなら、こんな楽なことないし。 一方、サーバーは、サービス提供側が機種を自由に選べるのでJavaである必要が無いと思う。 [] [ここ壊れてます]
480 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:23:17 ID:xJykAg3Z.net] >>469 比較的最近追加された リアルタイム系オーディオAPIは C/C++での提供ですね 用途によってはいまだにC/C++が必要
481 名前:デフォルトの名無しさん [2019/12/02(月) 13:23:19 ID:/N45p/D+.net] >>470 でも、フラグメントが・・・と言われると、なるほどと思うじゃないですか。 僕もいずれ別の言語で書き換えるつもりだった。 でも問題なかった。
482 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:30:11 ID:wB1a1keO.net] >>468 それは完全に理解不足 Javaや.NETのVMはC++で静的に確保した大きなメモリ領域をヒープと呼んでいる でアプリ内でnewするとオブジェクトとしてその中の領域が割り当てられ、ハンドル(生ポではない!)をアプリがオブジェクト参照として受け取る C++のオブジェクトとの大きな違いはオブジェクトを再配置できることであり、 GCが必要に応じてヒープ上のオブジェクトを移動して詰めるため断片化が生じにくい C++でも生ポを使わなければ再配置できるんだけどね
483 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:31:49 ID:az4xQt0G.net] メモリ激増のお陰じゃねえの
484 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:41:55 ID:qRRc8YVo.net] その辺はOSの仕事であるべきやと思うわ
485 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:49:06 ID:az4xQt0G.net] やってることがさほど変わらず100MB確保から1GB確保にするだけで 断片化率が1/10になる プログラミングの技量が全く変化しないのにも関わらず安全性が10倍になる つまりマシンの搭載メモリが1GBから10GBになるだけで安全係数が10倍になる これぞ大富豪プログラミング
486 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:06:09.31 ID:rcvN6dfE.net] >>474 windows3.1のGlobalAllocみたいのを今さらドヤられても…
487 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:20:31.50 ID:Vo2mhncO.net] >>468 実はかなり古くから、C/C++ の malloc(), new のヒープメモリから確保したメモリの 断片化は、実際に問題になるようなことはとても少ないといわれています。 というのは、断片化というのは、確保したメモリを開放したときに出来た 「隙間にある空きメモリ」が再利用されにくい場合に起きるものなんですが、 実際には、再利用されることが多いためです。なぜなら、おなじサイズの オブジェクトを new することが多いためです。この場合、完全に再利用されるので 断片化の問題と言うものは全く起きないと言っても過言では有りません。 それから、通常、1つのオブジェクトのサイズは小さく、それが多数集まって データをなしていることが多いのです。このことから、異なるサイズのオブジェクト であっても、1つ1つのオブジェクトのサイズが小さいため、断片化したとしても、 再利用される確率が高いのです。まず、同じサイズのオブジェクトであれば再利用されます。 異なるサイズであっても、昔開放されたオブジェクトよりも、小さいサイズのオブジェクトを 新しく確保する場合であれば再利用されます。 このようなことから現実の例では、断片化しても、使われないメモリの量はある程度の比率 に収まると言われており、それは GarbageCollection を行うためのオーバーヘッドの メモリのサイズと比べても余り大きいものではないのです。 ゲームはメモリー効率も求められますが、それでも C/C++ が使われているのは、 メモリー断片化の量が一定比率より多くなら無い事が経験的に知られているためです。
488 名前:デフォルトの名無しさん [2019/12/02(月) 15:28:19.20 ID:/N45p/D+.net] フェイスブックがPHPのコードを翻訳機でC++コードに変換して配備してるそうですが。 そんなことするなら最初からC++で書けばいいのに。
489 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:33:38.42 ID:Vo2mhncO.net] >>474 C/C++ では、配列ではなくリンクリストを積極的に使うようにすることに よって、メモリーが断片化しても再利用される確率を高く
490 名前:することができます。 というのは、データの基本となっている要素のオブジェクトのサイズが 小さいため、さまざまなサイズのデータを new しても、結果的に、 断片化された空きメモリも高い確率で再利用されるためです。 new、delete するオブジェクトのサイズがランダムな場合で、 断片化空きメモリが残っている場合、確率論的には、おおよそ 2回に1回は 断片化空きメモリが再利用されることになるでしょう。もちろん、 delete された回数が少な過ぎる場合、そもそも断片化空きメモリの個数が少なすぎる ので、再利用できる確率は低くなります。それは、初期化時やファイルからデータ 読み込み時などにどんどんメモリを new していくよう場合ですので、そもそも 断片化が起きる余地も有りません。 なお、ポインタとリンクリストを組み合わせると、よくある場合には、他の 集合アルゴリズムよりも、効率が高くなりやすいことが知られています。 ただし、文字を集合させて文字列を作るような場合は例外です。 [] [ここ壊れてます]
491 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:39:04.52 ID:Vo2mhncO.net] >>481 配列の場合、delete するとメモリー上に大きな空き領域が出来ますが、 それより大きなサイズの配列を new しようとすると、そこが再利用できません。 なぜなら、配列の場合、連続したメモリ領域が固まって必要になるため、 要素の個数が N だとすると、N 個全てが一度にまとまって入りきる領域を探す 必要になるためです。 ところが、リンクリストの場合、要素数 N が大きくなっても、バラバラな 領域に分散して格納することが出来ます。すると、とても高い確率で、 分断化された空きメモリが再利用されることになります。
492 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:50:07.84 ID:Vo2mhncO.net] >>481 「2回に1回」と書きましたが、実際にはもっと確率は高いです。 リンクリストを使っている場合、要素を全部 delete したような場合は、開放された 空きブロックは、余り断片化せずに、比較的高い確率で結合され、大きな空きブロックに なるためです。空きメモリは、元の要素のサイズの複数個分以上になっている確率が 高くなります(複雑ですが、管理領域のサイズもこれに加わります。)。 この性質があるため、現実には、小さいサイズのオブジェクトを要素とする集合 が多種類有った場合、それを好きに new, delete した場合、50% よりずっと高い確率で 断片化空きメモリーは再利用されます。
493 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:10:33.93 ID:Vo2mhncO.net] >>483 誤解無きように細くしておくと、「50% より大きい」というのは、 「断片化された空き領域が再利用される確率」 のことで、「断片化率」ではありません、。断片化率はもっと 小さな値になり、条件によりますが、例えば、数%〜10%程度 が目安になります。最悪のケースだともっと大きいのですが、 ケースバイケースで適切なデータ構造(集合アルゴリズム)を 使っているとこの程度に収まります。また、適切なデータ構造を 選択することはそんなに難しいわけではありません、。
494 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:15:53.26 ID:Vo2mhncO.net] >>475 既に、Windows95くらいの時期のメモリ容量で、C/C++のメモリ断片化は 問題が無い程度になっていました。実際には、MS-DOSの時代でも既に 問題なかったのですが。 とにかく、今の若い人の目線で言えば、古代ともいえるくらい古い時代に 既に C/C++ のメモリー断片化問題は問題が無い程度にハードウェアが 発達済みなのです。PC-8801 の 8BIT 時代には問題があったので、 N88-BASIC を筆頭に、GarbageCollection 方式をとっていましたが、 それは、若い人には「超古代文明」時代でしょう。
495 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:34:28.08 ID:Vo2mhncO.net] >>485 また誤解が入りそうなので細くしておきます。 N88-BASIC などが GarbageCollection を使っていたのは、本当に マシンのメモリが少ないのでデータをぎゅーぎゅー詰めに隙間無く 入れることが重要だったためです。 一方、JavaやC#がGarbageCollection を使っているのは、どちらかと いうと、「メモリー開放の自動化」のためです。参照カウンタだけで は、循環参照問題が生じるため、時々、広い範囲のメモリブロックを 巡回して、循環参照していても本当に使って無い場合を厳密に見つけ出して、 徹底的に開放することを行います。 そのため、メモリーの断片化問題とはまた違う意味で、メモリー開放の 自動化には、GarbageCollection が必要となっています。 N88-BASIC 時代と、現在の Java, C# とでは、同じ GarbageCollection でも主な役割が違うと考えられます。もちろん、断片化を防ぐ役割も同時に 果たしてくれますが。
496 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:40:43.00 ID:Vo2mhncO.net] >>486 誤字訂正: 細く ---> 補足 ・BASIC言語にはポインタが無かったので、循環参照問題は有りませんでした。 ・BASIC言語における GarbageCollection は、主に文字列領域の開放のためです。 A$="HELLO WORLD" と入れた後、A$="" とした時、元の文字列に使っていた 領域は、しばらく経った後に GarbageCollection で開放される仕組みでした。 ですので、文字列を余り使わなければ GarbageCollection も余りおきませんでした。 なお、DIM A(100) のように確保した配列は、余り開放することは有りませんでしたが、 開放した場合も、しばらく後に GarbageCollection の対象になっていたと思われます。
497 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 17:06:01.34 ID:wB1a1keO.net] リンクリストってシーケンシャルアクセスで毎回キャッシュミスするから、 配列の代わりに全面的に使ったりしたら断片化とか最早どうでもいいレベルでパフォーマンス低下するぞ
498 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 17:15:40.51 ID:Vo2mhncO.net] >>488 リンクリストでシーケンシャルアクセスする場合、キャッシュ以前に ポインタをたどるようにアクセスしないといけないのですが、 最近、配列と同じような通し番号方式でアクセスしようとする人が 多くなっています。ライブラリなどは、以前にアクセスした番号が k の場合、そのポインタを覚えておいて、プログラマが k + 1 の番号 をアクセスしようとした場合、後続のノードへのポインタをたどる ことで高速化している場合があるので、特に問題が無い場合がありますが、 それを深く理解せずに、本当に先頭のノードからたどってしまった場合、 本来なら O(N)で済むところが、O(N^2) になってしまいます。
499 名前:デフォルトの名無しさん [2019/12/02(月) 17:16:14.80 ID:/N45p/D+.net] >>487 ヌルポ。
500 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 17:18:32.46 ID:Vo2mhncO.net] >>489 C/C++ でのリンクリストは、場所を覚えるのは通し番号ではなく、ポインタ で行うことが基本です。ところが、最近、通し番号で覚えてしまうプログラムを 書く人が増えているように感じます。それは、キャッシュのために遅くなっているの ではなく、計算オーダーが完全に違ってくるために遅くなるため、ただごとではない 遅さを招きます。
501 名前:デフォルトの名無しさん [2019/12/02(月) 20:46:52.56 ID:rSqEF7g8.net] ネトウヨ東大特任准教授、謝罪するも言い訳「AIの過学習によるもの」 https://medaka.5ch.net/test/read.cgi/jsaloon/1575275488/
502 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 20:59:09.09 ID:RyZvLJkF.net] >>487 循環参照問題の有無はポインタ(アドレス)とは関係ないでしょ。
503 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 21:16:13.89 ID:6AEGHd3a.net] TIOBEってなんて読めばいいの? ちおべ?
504 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 22:59:36.28 ID:OlcC/UBE.net] ハッシュテーブルで要素Xが既存要素Yと衝突した場合でもXを格納したい場合は リハッシュかリストになる キモス リハッシュで容量をちゃんと使い切るには相当にハッシュ関数を考えねばならない上に 衝突データを取り出すのに何回リハッシュしたかを見ながら要素をたどっていく必要があり、 ハッシュの検索性を帳消しにしてしまいかねない よってリストのが圧倒的に簡単で速い
505 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:15:49.08 ID:OlcC/UBE.net] >>493 ある ガベージコレクト対象データでもって他のガベージコレクト対象データを指し示すような 再帰構造が表現不可能なら循環参照は当然起きない N88-BASICの文字列はキャラクターの集まりであって他の文字列を指し示したりできないから、 相当の無能か悪意を伴って設計しない限り、文字列メモリのガベージコレクションで 循環参照は起こしようが無い(やるべきことは素のmalloc/freeに他ならない
506 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:29:11.52 ID:VdJ0qliF.net] >>496 >>487 で自分で書いているように配列がガーベジコレクションの対象になっているなら、循環参照は起こり得るんでないの?
507 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:30:20.73 ID:VdJ0qliF.net] すまん>>497 はまちがい
508 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 04:41:05.52 ID:LCf1R81a.net] まだやってたのか うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
509 名前:デフォルトの名無しさん [2019/12/03(火) 06:45:35 ID:Ocr+v9UU.net] C++20あたりになるともうついていけそうにないな。
510 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 07:20:16 ID:k7viogN8.net] conceptの仕上がり次第だろうな Cのrestrictもそうであるように うるさすぎると嫌気がさすやつが続出する
511 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 14:10:18.28 ID:LOAssVxZ.net] 実際にコードを書いてないやつほど仕様を知っててアホみたいなこだわりを見せる ってことが常態化してる。 そろそろロクでもない結末を迎える。
512 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 14:24:39.60 ID:jKB+EPlO.net] 並列処理じゃないですかねこれからは マルチなコアをもりもり使えないと
513 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 14:38:06.74 ID:g2sdmHcp.net] >>502 仕様を知ってるのは良いけど コードを書いてない人は気にするところがズレてる
514 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 15:33:28 ID:+wDBcAl/.net] コンパイラやパーサーを作っているか、本を書こうとしている人だとすれば 隅々まで仕様を知る必要があるから、単なる自己満足の言語ヲタクとは 限らない。
515 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 15:40:53 ID:LOAssVxZ.net] コンパイラやパーサを作ってる人よりも 本やブログを書くだけの馬鹿のが変な仕様にこだわってるのが問題。 後者は単なる自己満足の言語ヲタクと変わらん。 端的にカスでいなくなった方がいい存在と思う。
516 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 15:46:11 ID:+wDBcAl/.net] >>506 自慢するために言語ヲタクになっている人は困るけど、本やブログを書く人は 貴重なので、情報収集のため5chでもなんでも使ってもいいと思うんだよ。
517 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 16:08:25 ID:fg+LqIKK.net] 現場でガリガリ書いてる奴らが本を書かないのが悪いんだろ えっ、ブラック労働環境で疲弊してて書く余裕がないって?w
518 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 16:50:33.73 ID:lE3mHjqg.net] ブログはともかく5chの情報を元に本を書くとか 勘弁してくれ
519 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 16:52:53.84 ID:lE3mHjqg.net] >>508 解説本みたいなのは読まんな 規格書、データシート、仕様書、リファレンスマニュアル こんなのは5chを参考にするはずがない
520 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 16:59:39.64 ID:+wDBcAl/.net] >>509 全く知識が足りて無い場合、知ってる人に聞くと大幅な時間短縮になる事がある。
521 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 17:42:58.95 ID:PvjGA/Sr.net] >>508 現場でガリガリって、コンパイラ開発してるとこのか? そうでなければ普通言語の仕様なんか気にしてねーんだよ むしろ仕様というか規格に詳しくないと使えない言語とか実用性無いわ
522 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 17:45:16.73 ID:PvjGA/Sr.net] >>508 あとお前が知らんだけで、各分野の経験豊富な人がいくらでもその分野のコードを書くための本出してる 言語オタクには気付かんだろうけど
523 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 17:50:23.07 ID:Ht46Ytqh.net] >>911 全く知識が無い人が本を書く???? 何の本? アンカーミス?
524 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 18:43:45.39 ID:0IYpewor.net] 未来へのアンカー
525 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 19:20:43.49 ID:+wDBcAl/.net] >>514 考えてみれば、本を書く人はここでは聞かないかも。
526 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 19:21:46.86 ID:+wDBcAl/.net] Stroustrap
527 名前:の本とか高いし、cpprefemceは分かりにくいし、誰かに 聞いてみたくなる気持ちは分かるがな。 [] [ここ壊れてます]
528 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 19:22:03.63 ID:90Sp73uq.net] >>513 C++のコンパイラ分野でいいので2~3冊あげてみ
529 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 19:22:10.56 ID:k7viogN8.net] けっ 言語についていけねえうえに ろくな業績も出せてねえ真性ゴミクズが 書いたコードの量が多いんだと 精一杯のブラフで自我を保とうと必死こく 究極にくだらねえ茶番だろうが
530 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 19:25:02.10 ID:A/ggV3OU.net] コードを書けないのがコンプレックス?
531 名前:デフォルトの名無しさん [2019/12/03(火) 19:26:01.05 ID:cEtr/lck.net] 禿4はわかりやすかったけど、もう少し突っ込んだ話が読みたかったな。
532 名前:デフォルトの名無しさん [2019/12/03(火) 19:26:43.98 ID:cEtr/lck.net] 禿4はキンドルのセールに出ることあるよ。
533 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 19:43:50.04 ID:LOAssVxZ.net] 禿4は量が少ないわけではないがc++を今からやるとしたら最低限ああなるだろ。 あれ以下に減らすのは実際無理。
534 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 19:55:41.70 ID:PvjGA/Sr.net] >>518 そういう意味で言ったんじゃないんだが >>519 >けっ 言語についていけねえうえに >ろくな業績も出せてねえ こういう前提はどっから来てんのかね >>502 ,506 ,512みたいなことを言われるとそういう過剰反応するやつよく見かけるけど >精一杯のブラフで自我を保とうと必死こく >究極にくだらねえ茶番だろうが 鏡見た方がいいよ
535 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 21:01:44.02 ID:z2MNOJTT.net] >>524 違うんなら証拠出してみろよ 言ってることが薄っぺらくてゴミクズにしか見えねえが そういう俺にお見それしましたと言わしめる内容がおまえにあるか? 身バレするようなことでなくて結構だ 話している内容に深みを感じるかどうかだ もう一度言う、おまえの言葉にはそれがまるでない
536 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 21:24:21.32 ID:qY14OTyg.net] >>524 > そういう意味で言ったんじゃないんだが 意味わからん 本を出してるって言うなら具体的に挙げられるよね?
537 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 21:26:06.12 ID:A/ggV3OU.net] おまいらスレタイ
538 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 21:30:25.58 ID:3WzRY7Z3.net] 実にC++erらしいこのスレにぴったりの会話だな
539 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 21:58:21.97 ID:c+vMaKjo.net] >>525 お前も感情的に攻撃的に相手を罵ってるだけで、中身空っぽに見えるぞ。 お前の自己評価はもっと高いのかもしれないけど端から見たらただのバカだよ。
540 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 22:13:59.08 ID:z2MNOJTT.net] >>529 おまえ誰?
541 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 22:43:52.58 ID:Tjb84Rtt.net] 「現場でガリガリ」って可愛い表現だなw アマチュア精神がにじみ出てる
542 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 23:17:48.08 ID:jKB+EPlO.net] 禿禿言うなよ 気にしてるらしいぞ
543 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 23:39:54.64 ID:l6CFXVtO.net] お前らがC++高等テクニックww持ってるのは分かったから まずまともな設計上げてこいやww
544 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 23:42:10.99 ID:3WzRY7Z3.net] 経験マウント vs 知識マウント 実に人格障害のC++erらしいスレだ
545 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:05:50 ID:FhHmXOPx.net] 知識も経験も豊富な奴おらんのか?
546 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:18:20 ID:MnUOTj8y.net] >>535 多分、C++の仕様が異常なほど膨れ上がってること、JavaScriptやWebGL、 AjaxやC#なども勉強しなくてはならない事が多くなったことなどもあって、 プログラムを沢山しながら仕様にも詳しい人は壊滅状態であることは想像に難くない。
547 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:23:07.75 ID:MnUOTj8y.net] >>536 というか、普通にプログラムしていても、HTML、CSS、HT
548 名前:TP などの仕様はもちろん のこと、Androidやるなら、Java、Kotlin、NDK、iOSやるならSwift、 それに加えて、C#なら、WinFoms、WPFなどもあり、さらに、WSL、 PowerShellにbashやApacheの設定方法、ライセンス各種の勉強などなど、 やることが多くなってきている。本当は、React、Blazor、Vue.js、node.js Electron、flutter、wxWidget、Qt、GTK。別に全部やる必要はないが、 予備知識として知ってないと技術資料も理解しにくいことが多くなってきた。 [] [ここ壊れてます]
549 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:25:21.34 ID:FhHmXOPx.net] 自分の得意分野以外は浅く予習しておいて使うときになって覚えて使わなくなったら忘れてる
550 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:26:04.91 ID:MnUOTj8y.net] >>537 Python、Rust、Lua、curl、ant、gradle、git、github、wget なども知ってない と話が理解できないことも多くなっている。
551 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:31:31.51 ID:gHx24DkE.net] 今時コードだけでプログラミングするもんでもあるまい C++使いならフロントはばっさり切り捨ててAWSとGCPにスキルを振ったほうが一貫性があり無駄の少ないスキルセットになる
552 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:36:36 ID:4dvDh/Ut.net] std::cout での出力フォーマット指定に関して教えてください。 cout.flag( ios::uppercase | ios::hex ) やら cout << setfill('0') とか cout << scientific << setprecision(10) とかとか 大半の指定が 1回 数値 を出力した後も その状態が保持されたままなのに cout << setw(24) による出力幅指定は その都度指定しないと忘れてしまう挙動になっています。 その都度指定する必要は他にもあるのか。それと、 www.cplusplus.com/reference/iomanip/setw/ みたいな仕様を見て、どう読み取ればそれが正しい挙動であると分かるのか教えてほしいです。 ある個人ブログには setfill も毎回出力する度に指定する必要があるのだと書かれていましたが、 自分の環境では setfill は状態が保持されました。
553 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:41:33 ID:9acC9vOn.net] フロントエンドは本当に時間の無駄 ましてC++プログラマならほとんど領域が被らないから単なる二足のわらじ状態で非効率なだけ
554 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 04:32:29 ID:mZNCV5xz.net] >>529 読解力が無いのか>>508と同じく言語オタクだから気づかないのかわからんが >>508と >>512-513読み直してくれる? C++の言語仕様を詳しく解説する本を、コンパイラ”以外の開発に携わってる”人間が書いてくれると 思ってる方がおかしいんだよ >>508の目には純粋にC++関連の本しか映ってないんだろう C++を前提としてるがC++そのものでなくその分野の専門的な知識を教えてる技術書がどれだけあると思ってんだ
555 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 04:32:49 ID:mZNCV5xz.net] >>525 >えっ、ブラック労働環境で疲弊してて書く余裕がないって?w こんな腐りきった発言する思い上がったゴミアマチュアに教えてやることなど何もない お前が使ってるその箱で動いてるソフトは誰が書いてくれてると思ってんだ
556 名前:543 mailto:sage [2019/12/04(水) 06:39:12 ID:mZNCV5xz.net] 安価ミス X >>529 ○ >>526
557 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:09:58 ID:Z3kanSY4.net] >>536 うん、想像なら只だもんな
558 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:33:04.63 ID:8KgKER1O.net] そもそも現場の奴らは、現場のやり方しか身につける必要ないだろw
559 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:54:48 ID:Jd4YzzOQ.net] >>545 各分野にコンパイラ開発は入らんのか? まあお前の好きな分野でいいから具体的な本の名前挙げてくれ
560 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:05:44 ID:mZNCV5xz.net] >>548 挙げたらどうなんの?お前には興味ない内容だと思うけど 「ド素人が言ってんだろ」と思ってるんだろうけど、お前の誤解を晴らすためになんで自分の分野晒さなきゃいけないの? 本の名前挙げたら謝るの?
561 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:06:15 ID:mZNCV5xz.net] >>546 実際そうだと思うよ >>512にも書いたけど、仕事でやってる人もフリーソフト開発者も 規格読んだことある人なんか皆無だと思うよ 他に勉強しなきゃいけないこと山ほどあるし、仕様(新しいのも含め)は必要なときにググって確認するだけ(>>538も言ってるけど)、むしろそうであるべき それを「言語についていけない」なんて貶せるやつの神経がわからん >>519とか、ソフト開発もメタプログラミングも出来ないレベルのド素人だろ? 何調子乗ってんの?自分はついていけてんの?w 開発力も無いし言語を活かせてもないのに、実際にC++を実用してる人を貶すとか 頭おかしい真似してるから言語オタクって言われるんだよ (C++専門のライターも最近そういう傾向あるけど) >>547 それはそれでどうかと思うけど
562 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:07:22 ID:uB21TJa6.net] >>541 直接的な回答でない上に長々しい文章で気が引けるけど…。 『プログラミング言語C++』第4版の38章「入出力ストリーム」で 「width(n)の呼出しは、その直後に行われる<<による出力だけに影響を与える」 と書いてあるね(p. 1094)。 setw() は「次の出力のフィールド幅をn文字とする」(p. 1096 の下の表) 表の説明で“次の出力の”と限定されてるのはsetw()だけ。 で、一般的に書式指定やマニピュレータのうち、 どれが「一度指定したら別の指定をするまで有効」で、 どれが「指定された次の出力だけ有効、その後デフォルト状態に戻る」なのか、 N3337 の 27.5.3.2 周辺を見ても分からなかった。 基本的には ttp://www.cplusplus.com/reference/iomanip/setw/ よりも 少ない記述内容だし、「この指定は直後の一回の出力に限り有効」みたいな 補足の説明も見当たらない。 ISOやJISの規格に詳しい人が「素人め、ここに載ってるんだよ」と ズバリ指摘してくれるのを期待して、調べた限りを投稿してみた。
563 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:21:05.72 ID:Jd4YzzOQ.net] >>549 他の分野の人にどういう説明してるのかを知りたかっただけなんだけどね まあ>>525 が言うように薄っぺらな知ったかが吠えてるだけってわかったからもういいやw
564 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:24:57.77 ID:uB21TJa6.net] >>541 setfill() じゃなくて setw() の話だけど、古い本に 「setw()の幅指定は、永続的に有効な実装と、直後の出力1回だけ有効な実装との 両方が存在するので、移植性を考えれば毎回指定する方が安全」とか載ってた。 もしかすると過去には「setfill() は1回だけ有効」な実装が存在したのかも知れん。 その後、規格で挙動が厳密に定められたのか、 今でも実装によって動作が違っても構わない(規格に明記されていない)のか、 肝心なその点は分からん。
565 名前:549 mailto:sage [2019/12/04(水) 08:41:52.15 ID:0MJ4ry5i.net] >>552 言ってる意味がわからんが 煽れば何か教えてもらえると思ってるアホだろ 今までお前に何度も言ったと思うが、邪魔だから出てってくれ
566 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:46:18.46 ID:Z3kanSY4.net] >>550 他に勉強しなきゃいけないことって具体的に何だ? インターフェースだの通信規約だの法務だのを 規格を避けて勉強なんかできるのか? そういうおまえ自身は本当に勉強してるのか?
567 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:48:00.43 ID:6WV7ZyL7.net] >>555 一連の流れ読んでから言えよ C++の規格や仕様の話だボケ
568 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:05:20.91 ID:Z3kanSY4.net] >>556 おまえこそどーに目ぇつけとんのやあんだら C++以外の規格なら読むんだって話じゃねえだろうがよ
569 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:08:12 ID:d8r3fnrq.net] >>557 >C++以外の規格なら読む 誰がそんなこと言った? 他に勉強しなきゃいけないこと、に含まれてるだろうが 自分の勘違い棚に上げるなよ
570 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:15:53 ID:Z3kanSY4.net] >>557 550は規格を読んだことがあるやつは皆無と言ったんだよ それがC++だけにせよ規格全てにせよ おかしい主張であることに変わりはない 自分の発言を読み返してみな 俺がわざわざ頓珍漢とか言ってやることもない
571 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:16:34 ID:Z3kanSY4.net] 安価ミスった 558な
572 名前:554=556=558 mailto:sage [2019/12/04(水) 09:32:28 ID:mZNCV5xz.net] お前はC++の標準ライブラリ等の仕様の確認に毎回規格書読んでんの?
573 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:53:35 ID:4dvDh/Ut.net] >>551, >>553 ありがとうございます。 今「C++ポケットリファレンス」を見たら ほかのマニピュレータと異なり、std:setw()は例外的に効果が持続しません。 一度std::setw を指定した出力が行われると効果は解除されます (std::setw(0)を呼び出した状態になります)。 とありました (p.250)。 それと... $ man std::setw 〜 The width property of the stream will be reset to zero (meaning "unspecified") if 〜 ちゃんと書いてますね。何より先に man を見るべきでした。 とはいえ setw は "例外的" なのだとちゃんと教えてくれる本は助かるなあと思いました。
574 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 10:10:41 ID:4dvDh/Ut.net] それから man の最後には cppreference.com へのリンクがありました。 あまり www.cplusplus.com との違いを意識した事はなかったのですが、 公式仕様として参照するべきなのはそっちのようですね。 同じ内容の日本語版は https://ja.cppreference.com/w/cpp/io/manip/setw で見れました。
575 名前:デフォルトの名無しさん [2019/12/04(水) 10:52:51.16 ID:vhuKISsK.net] 規格確認部とかあるんじゃないの。 知らんけど。
576 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 10:57:38.20 ID:Z3kanSY4.net] >>561 え? ・・・そうだけど? 規格票というか、正確にはドラフトな 何かおかしいか?
577 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 11:17:13 ID:mZNCV5xz.net] それ無駄に時間かかってるんじゃないの よくクビにならないな
578 名前:デフォルトの名無しさん [2019/12/04(水) 11:19:22 ID:sb3P/SSe.net] 1.禿でも判るC++入門 2.判ると禿げるC++入門 3.禿専用C++
579 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:23:43.29 ID:Jd4YzzOQ.net] >>554 煽る以前に>>513 からはペラッペラの内容しかでてこないことはわかったからお前が出てけよw
580 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:29:09.42 ID:Jd4YzzOQ.net] >>561 必要なら読むだろ 流石に毎回じゃないけど そもそもお前は規格も読まないでテキトーにコード書いてるのか?
581 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:36:02.75 ID:mZNCV5xz.net] >>569 >流石に毎回じゃないけど なら黙ってろ 規格の原文読まない=テキトーにコード書く、なのかお前の中では 思い上がりすぎだろ
582 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:48:55.97 ID:Z3kanSY4.net] いや、きちんと仕事したくて 伝聞に頼らず一次ソースを確認するんだよ
583 名前:デフォルトの名無しさん [2019/12/04(水) 12:53:29.05 ID:sb3P/SSe.net] 実用コード書くより机上の空仕様書描くのが好きな人なんやろな
584 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:03:10.48 ID:Jd4YzzOQ.net] >>570 > 規格読んだことある人なんか皆無だと思うよ とか言うバカに言われてもなぁ 知識がペラッペラすぎるw
585 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:09:39.95 ID:6uL3p
] [ここ壊れてます]
586 名前:MIB.net mailto: おまいらスレタイ [] [ここ壊れてます]
587 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:17:06.83 ID:mquXx5f5.net] みんな私のために争って!
588 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:19:26.79 ID:mZNCV5xz.net] 「きちんと仕事したくて伝聞に頼らず一次ソースを確認」 なんか胡散臭くなってきたな・・・・ 「仕事でやってる人もフリーソフト開発者も」のどちらにも当てはまらないのに噛み付いてきたんだろうな エアプログラマの相手してスレ無駄遣いした、すまんかった
589 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:20:38.21 ID:6uL3pMIB.net] ソフトエンジニアでC++の規格書を読む人なんてほとんどいないよ そんなのを読んでも良い設計にはつながらない
590 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:23:39.63 ID:6uL3pMIB.net] 規格書で確認しないと書けない/読めないようなコードは 基本的には悪いコード
591 名前:デフォルトの名無しさん [2019/12/04(水) 13:26:15.79 ID:sb3P/SSe.net] ゴールポスト移動中ですね判ります
592 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:27:52.48 ID:Z3kanSY4.net] 規格書ではなく規格票な つまらん齟齬を避けたいのも 規格票を読む目的の1つだ
593 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:42:20.48 ID:MnUOTj8y.net] >>578 でも最近、特に海外の方で自分が知っている素朴な C++ とは全く違う 書き方をしている C++ コードを良く見かけるようになったので、 新しい仕様を学ばないと理解できなくなってきた。 STLを深く使うと C++ とは思えないようなコードになるので。
594 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:46:18.71 ID:P3QxjggL.net] フロント周りは全くついていけない コロコロと次から次へ節操なく移り変わって馬鹿じゃねえの、とつい老害的思考に
595 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:48:46.17 ID:rFzpkzsp.net] C++20でコンセプトやモジュールやコルーチン記法が入ってきたら、そういう古兵にはもはやC++には見えんだろうなぁw
596 名前:デフォルトの名無しさん [2019/12/04(水) 13:49:01.49 ID:sb3P/SSe.net] CUIのフロントはTurboC++だったな
597 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 14:25:33.26 ID:33/nOLSe.net] C++で音鳴らせるようになるの?
598 名前:デフォルトの名無しさん [2019/12/04(水) 15:02:13 ID:vhuKISsK.net] バスブーストですか?
599 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 15:46:25.30 ID:MnUOTj8y.net] 「フロント周り」って何のことですか??
600 名前:デフォルトの名無しさん [2019/12/04(水) 16:29:27.61 ID:vhuKISsK.net] フロント企業が一般消費者と直接取引する会社で、バックが暴力団じゃなかったっけ。
601 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 19:40:12.56 ID:FhHmXOPx.net] つまんな
602 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 19:50:18.04 ID:FhHmXOPx.net] 企画書を読まないとわからないコードなんかあると思ってるのか? 読むべきはcppreferenceのようなアホにも分かるように優しく解説してくれてる文書 分からないことがあれば必要なキーワードを検索欄にぶち込んだらすぐに分かるようにできている
603 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:09:28.90 ID:6yabeJe9.net] アホのサバイバルか 唾棄
604 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:33:31.84 ID:ZHZFM6qI.net] プロでもアマチュアでもいいんだよ 初心者でも学生でもいいんだよ ただし 身の程知らずのド素人が知ったふうな口を利いてるとさすがに叩かれるよ
605 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:49:47.75 ID:+udf6Yna.net] >>577 > ソフトエンジニアでC++の規格書を読む人なんてほとんどいないよ お前の周りはそうなんだろうな > そんなのを読んでも良い設計にはつながらない 読んだことない奴はそう言うよなw >>578 お前規格票に何を書いてるのか知らんだろ まあそのまま沈んどけ
606 名前:デフォルトの名無しさん [2019/12/04(水) 21:20:21.85 ID:xsMIF6qI.net] ていうかC++のスレでこんな流れが加速するなんて 思ったよりC++erて数いたんだなぁ、というのが素朴な感想
607 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 21:22:48.52 ID:DNIeF7b9.net] アホでも炎上商法はできるってことだ
608 名前:デフォルトの名無しさん [2019/12/04(水) 21:54:34.88 ID:vhuKISsK.net] じゃあ点呼取ります。 江添クン!
609 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:15:09.71 ID:ZHZFM6qI.net] > 思ったよりC++erて数いたんだなぁ、というのが素朴な感想 C++erというよりここは単に無職と学生サンのすくつでしょw
610 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:19:24.66 ID:7vpFGLgR.net] とりあえず>>593 は無職だと思う
611 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:27:51.85 ID:UrCkYA+I.net] c++11以降みたいなああいうコード書きたいなら変な見栄はらずにpythonでもrubyでもやってたらいいんだよ。
612 名前:デフォルトの名無しさん [2019/12/04(水) 22:31:45.53 ID:QZ1McR0s.net] C++コンパイラやSTL準拠ライブラリを作る仕事に関わってたら規格書を読まないとどうにもならないと思うけど、 そうじゃない人は市販のC++入門で十分じゃないかな。
613 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:33:17.56 ID:J7QAHgda.net] >>596 金型の会社に出向いて定期的に講座やってるらしいね 金型の演算ってそんなC++が効くものなんだ CGALみたいに幾何分野でバリバリ使われるのは知ってるけど、設計の分野も同じなんかな
614 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:33:57.92 ID:UrCkYA+I.net] てか規格通りにまともに動くなんてのは例外ってことは 普通にc++を仕事で使ってりゃ分かるもんだがな。 その時点で江添みたいに実際の仕事で使ってないのが丸分かりになる。
615 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:58:37.27 ID:CXPVLMHx.net] 今時MSVCでも大部分は規格通り動くぞ
616 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 23:08:27.56 ID:7MoywY5f.net] >>598 どこからそんなアホな決めつけしてるんだよ… もしかして会社からセミナーとかにも行かせてもらえないような底辺なのか?w
617 名前:デフォルトの名無しさん [2019/12/04(水) 23:22:31.61 ID:vhuKISsK.net] 式を教えてもいいけど、理解できるかどうか。
618 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2019/12/05(Thu) 00:23:37 ID:XYdg44Nt.net] 必要なら読むし必要じゃないならないなら読まないってだけのことだろ。 そんなん場合によるっつーつまらん結論しかないと思うが。
619 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 00:28:04 ID:wvPvimki.net] はいいつものクソ正論いただきました
620 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 00:35:44 ID:dM4mxJ4y.net] 実の無い(楽しそうでもない)話をつづけられるよりはクソ正論で鎮火してくれたほうがマシに思う。 件の人たちはそれで鎮火するような人でもないんだろうけど。
621 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 00:43:36 ID:2jEFb1Vk.net] 互いに見下しあい罵倒しあってこそC++er ここは不毛なマウント取り合戦の場C++スレ 鎮火する必要なし
622 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 01:15:42 ID:+j7BXLrg.net] また髪の話をしてる
623 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 02:59:31.66 ID:9zn59iXI.net] すまんが、レベルの低い人から見ると、レベルの高い人が気軽に話した 内容が「マウントをとられた」と思ってしまうんだと思う。 そういうつもりで言ってなくても。 これは、公立の小学校でよく起きる現象で、問題になっている。
624 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 03:04:36.20 ID:9zn59iXI.net] >>611 蛇足だが、これは欧米諸国でよく知られた現象。 アメリカで記名製掲示板が流行るのは、匿名性掲示板ではどうしても それが起きてしまうので、それをよく分かった上でやっているのかも 知れない。それだけの理由ではないだろうけど。
625 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 06:18:49.18 ID:eAZGTWY0.net] >>609-610 この流れを評するのに「不毛」って言葉を選ぶのはC++らしいね。 「マウント」も落語「頭山」を想起させる。
626 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 08:26:15 ID:V4GZwDuE.net] しかしあれだな、C++ほどハゲがよく似合う言語を知らない
627 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 11:35:47 ID:tjjaS4Ug.net] 江添亮のC++入門 (webドラフト版? https://ezoeryou.github.io/cpp-intro/#再帰関数 ) を読んでます。 >例えば以下は階乗を計算する再帰で書かれたループだ。 > int factorial( int n ) { ... > return n * factorial(n-1) ; > ... >このコードは末尾再帰になっている。 >末尾再帰は非再帰のループに機械的に変
628 名前:キできる特徴を持っている これ factorial(n-1) が返ってきたらスタックに積んである n を掛けないといけませんよね。 厳密には末尾再帰とは言えない気がします。 そういうの無しに「直帰でコール元に値を渡せる場合」に末尾再帰と言えるのだと思ってたんですが、 私の理解が間違っているのでしょうか? まあ今のコンパイラーは賢いので細かい事気にする必要ないのかもしれませんが。 [] [ここ壊れてます]
629 名前:デフォルトの名無しさん [2019/12/05(Thu) 11:37:52 ID:IbmhSLeW.net] >>611 馬鹿ほどそれを気にするよな 判らなかったら調べれば良いのに 調べずに反論し始めるω
630 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 12:32:19 ID:RTwQsK8m.net] >>615 末尾再帰じゃないよ
631 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 13:51:16 ID:tjjaS4Ug.net] >>617 ですよね。 ちょっと気になってたのでスッキリしました。
632 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 18:12:34.01 ID:5PaJAEA2.net] 簡単にループに出来るものはループで記述した方が良いよ 末尾再帰の場合もそうじゃない場合も 実行速度、使用リソース、 デバッグしやすさ、 スタック計算ツールなどツール類の使用、 などなどいろんな要素で
633 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 18:50:53.78 ID:9zn59iXI.net] >>619 本当は、再帰呼び出しだとスタックサイズの制限により呼び出しの深さ(階数) に制限が付いてしまう。ローカル変数を沢山使っている関数で、 1000万個のオブジェクトを再帰的に処理すると、スタックオーバーフロー が出てもおかしくない。しかも、最近のマルチスレッド環境だと、 スタックのサイズはどうしても制限が強くなり勝ち。
634 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 18:58:39.27 ID:5PaJAEA2.net] 一言で言うと「使用リソース」だね
635 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:02:32.74 ID:5PaJAEA2.net] 「最近のマルチスレッド環境」はあまり関係ない 固定スタックサイズの組み込みCPUの方がヤバい PICみたいなハードウェアスタックだともっとヤバい
636 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:28:34.51 ID:ZSRmDUxb.net] 検討事項が増えるから仕事で再帰は使わんね。 理解できない人も多いし。
637 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:42:30.55 ID:9zn59iXI.net] >>622 シングルスレッドだと、スタックは自動伸張することが可能だった。 ところが、32BIT のマルチスレッド環境だと仮想メモリ空間のアドレス 空間自体が不足してしまうので、それは難しい。 ただし、64BIT 環境だと仮想メモリ空間が大きいので余り問題にならない かも知れない。
638 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:54:34.15 ID:5zWy9aB9.net] 再帰の例でよくでてくるフィボナッチ数列の計算なら 再帰より for で二変数保持しながら計算した方が性能でも可読性でも上だろうな。
639 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:04:07.94 ID:5PaJAEA2.net] >>624 Windowsだとスタックサイズは32bitでも64bitでもデフォルト1MBだぞ 適当な事を言わないように
640 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:10:23.46 ID:5PaJAEA2.net] >>625 組み込み型サイズ程度だと普通にexpを使って計算する方が速い 多倍長の巨体な値でも 素直に1個ずつ計算すると非常に遅い もっとずっと高速な方法がある
641 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:16:10.38 ID:5PaJAEA2.net] 再帰をループに置き換えるので面倒なのは いろんな箇所でたくさん分岐するヤツ まあでも面倒ってだけで、 必ず再帰を使わずに記述出来る
642 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:21:10.87 ID:5zWy9aB9.net] treeを辿るコードなんかは再帰のが書きやすいわな。
643 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:23:50.71 ID:5PaJAEA2.net] treeをたどるコードは再帰コールするのが1箇所だからまだ楽な方
644 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:24:01.37 ID:9zn59iXI.net] >>629 Tree は再帰でやるべきものの一つ。 スタックの制限も、Treeの「段数(階数)」自体が余り深くなりにくいので 問題が生じにくく、再帰でやっても問題ないものの一つでもある。 ただし、親子関係の深さ方向だけを再帰にし、兄弟方向は、単純な ループを使うべき。
645 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:28:30.76 ID:5PaJAEA2.net] 再帰にすべきかどうかはものによる 例えばstd::setの検索は普通ループを使う
646 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:38:37.36 ID:tjjaS4Ug.net] フィボナッチとかで再帰 末尾再帰を捨てる(性能とスタック無駄遣いに目を瞑る)と可読性はかなりいいと思うんです。 int fibo(int n) { if (n<=2) return 1; else return fibo(n-1) + fino(n-2); } その場で使い捨てるようなプログラムにはアリだと思います。 でも末尾再帰を目指すと.. . . int fibo(int n, int a=1, int b=1){ if (n<=2) return b; else return fibo(n-1, b, a+b); } どうなんですかね. . .。Lisp脳だと forループより好まれるかもしれません。 ちゃんと末尾再帰最適化が効けば性能は良いのでしょう。
647 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:48:58.05 ID:5PaJAEA2.net] >>633 前半 見やすさはそれが一番だね 記述が定義通りなので 後半 それなら普通のループの方が分かりやすくないか?
648 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:03:01.64 ID:tjjaS4Ug.net] あちら(Lisp)の世界ではそうでもないみたいですよ。
649 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:09:55.69 ID:5PaJAEA2.net] へ〜
650 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:23:00.63 ID:oayOS3nx.net] C++てparallel_forとか未だにないんだな、まぁTBB使えばあるけど標準規格には用意されてない 仕方がないんでPartitionerは自前で作ったが、そんな付け焼き刃用意したところで、 いちいち明示的に各スレッドの終了の待ちあわせせにゃならん。 挙げ句の果てに mtx.lock() ---- mtx.unlock() て orz クリティカルセクションはブロックで囲って lock(mtx){ } とでも書かせろや オートunlockとかしょーもないもんは用意してバカじゃねーのか しかも、未だにasync/await はなくて、C++20で実装て。 何が必要かわかってないのかC++規格作ってるアホ共 死ね
651 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:36:40.64 ID:JlYSK1cQ.net] つstd::lock_guard
652 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:51:24.38 ID:u0CioZb2.net] adync awaitなんてネイティブで実装しようとしたら面倒なのわかるだろうに それでもぶっこんでくるのだからc++11以降は完全にポリシー変更しているよね
653 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:57:53.51 ID:dM4mxJ4y.net] >>637 std::for_each(std::execution::par, ...) じゃダメだったの?
654 名前:デフォルトの名無しさん [2019/12/05(木) 22:07:45.52 ID:q0kDwfyl.net] ツリーの巡回はイテレータにするとスタックとキューを入れ替えるだけで深さ優先と幅優先を切り替えられますよ。 STLのスタックとキューはインターフェースが違うのでひと工夫必要ですが。 algorithmも使えてウマウマです。
655 名前: mailto:sage [2019/12/05(木) 22:28:33.56 ID:IPfJ90pV.net] >>615 末尾再帰ならこう書くかと https://ideone.com/GG1x2O
656 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 22:53:24.80 ID:wvPvimki.net] おいおい そこはcpsで書いてマウント取るところだろ
657 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 23:00:13.77 ID:uXzevjeq.net] >>637 お前のそのクソコードlockとunlockの間で例外投げたらあっという間にデッドロックだぞ すぐにlock_guardに書き換えるか死ぬかどっちか選べ
658 名前:デフォルトの名無しさん [2019/12/05(Thu) 23:44:19 ID:JallKI28.net] 状況説明: Visual Studio 2019 Version 16.4.0 で std::exception::what() の戻り値を無視すると以下のようなC4834の警告が出るようになった。 > warning C4834: 'nodiscard' 属性を持つ関数の戻り値を破棄しています なお、catchスコープでeについて何か書かないと以下の警告が出てしまう。 > warning C4101: 'e': ローカル変数は 1 度も使われていません。 今は以下のように記述して警告C4101が出ないようにしている。 try { // do something. } catch(std::exception& e) { e.what(); } 質問: C4101とC4834の両方とも出ないようにするにはどうしたらいい?
659 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 23:57:51 ID:2jEFb1Vk.net] >>645 (void)e.what();
660 名前:645 [2019/12/05(Thu) 23:58:13 ID:JallKI28.net] 自己解決しました。 try { // do something. } catch(std::exception& e) { (void)e; }
661 名前:645 mailto:sage [2019/12/05(Thu) 23:59:17 ID:JallKI28.net] >>646 回答ありがとうございます。
662 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 23:59:36 ID:uXzevjeq.net] catch(std::exception&) でええやん
663 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 00:01:11 ID:Cd9yyMrn.net] >>645 ほんとうに例外を何も処理せず握りつぶしたいの?どんな状況?
664 名前:645 mailto:sage [2019/12/06(金) 00:12:07 ID:Rpl4CMwP.net] >>650 スレッドの安全な終了。
665 名前:645 mailto:sage [2019/12/06(金) 00:19:17 ID:Rpl4CMwP.net] >>649 マクロ切り替えでeを使うコードも使えるようにしておきたいので無名変数だと都合が悪い、という感じです。
666 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 00:24:27 ID:hYHuFzfT.net] VCは2019から返り値を捨てるコードに警告出すようになって鬱陶しい
667 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 00:27:04 ID:R5wwI9SD.net] [[nodiscard]]を確認せずに捨てる奴が悪い
668 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 00:30:55 ID:Cd9yyMrn.net] >>651 std::exception& で受けると bad_alloc とか関係ない例外もまとめて無視しちゃいそうで、 それは「安全」なのか疑問。
669 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 00:51:39 ID:jImJStBO.net] 終了させるにしてもちゃんとやれ
670 名前:645 mailto:sage [2019/12/06(金) 00:54:05 ID:Rpl4CMwP.net] >>655 どうせなにもできない事には変わりないので無視でいいかなと。 スレッド終了時にプログラム固有のリソース解放処理を確実にやりたい目的でのthrow&catchなのでC++標準ライブラリ自身の出す例外は無視、的な。
671 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 01:06:58 ID:jImJStBO.net] ログ出力という大事な仕事があるだろ
672 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 02:04:04 ID:Cd9yyMrn.net] >>657 それだとほんとに何か問題があって例外が飛んでるときに気づけなくて危なさ沿う、という話。 struct thread_exit {} とか専用の例外をthrow&catchしとけば、目的を達成しながら問題検出もできそうな。
673 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 06:39:31.51 ID:pHI2Uem1.net] >>654 正論
674 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 07:31:29.17 ID:zfbHpqVT.net] >>637 for_each(parあんじゃん いちいち待ち合わせなんて まだやってんの?
675 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 09:21:05 ID:WVLKHQiQ.net] 寒い 34vv.net/8d8/
676 名前:デフォルトの名無しさん [2019/12/06(金) 12:56:29 ID:vJ3416lC.net] >>644 てめえの糞おつむでは未だにlock_guardなんか使ってんのかよww んな互換性のためだけに残ってるコード人様に勧めてどーするつもりだ。
677 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2019/12/06(金) 14:04:15 ID:6r3WfMRZ.net] >>635 LISP では再帰で書くなどという俗説を信じるな。
678 名前:デフォルトの名無しさん [2019/12/06(金) 14:28:22.22 ID:hyokDgJv.net] もしかしてメンバ関数の定義で引数や戻り値に不完全型を使っても許されるようになりましたか? autoが許されるのだから、許されて良いような気がするのですが。
679 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 14:55:34.36 ID:qwyC8IXX.net] 厳密にはわからんけど、クラステンプレートやメンバ関数テンプレートだと それらが実体化されるより前であれば不完全型は使えるはず(コンパイラによっても変わることあるけど autoも似たような理屈だと思う、宣言だけして関数定義より前で使うとエラーになるはず
680 名前:デフォルトの名無しさん [2019/12/06(金) 15:04:26 ID:hyokDgJv.net] https://ja.cppreference.com/w/cpp/language/function > 関数の引数の型および戻り値の型は、削除された関数を除き (C++11以上)不完全クラス型にできません。 完全性のチェックは関数の本体の文脈で行われます。 これはそういうことを言ってるんですかね。
681 名前:デフォルトの名無しさん [2019/12/06(金) 15:08:45 ID:hyokDgJv.net] 関数本体内のコンテキストで完全型になっていれば良いのであれば、いろいろできるような気がする。 あんなことやこんなことが。
682 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 15:14:03 ID:qwyC8IXX.net] あーそういうことだね 関数定義前なら不完全でもいいってことだと思う すまんテンプレートには限らないぽいな
683 名前:デフォルトの名無しさん [2019/12/06(金) 15:29:10 ID:hyokDgJv.net] どうもありがとう。
684 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 15:45:43.96 ID:LIPaYWZD.net] >>661 step =1000000; for( double r2 = R2 - dev2; r2 < R2 + dev2; r2 += dev2 / step ){ } こいつを並列化したいんだが、ループカウンタをintに変更するとしても、 2M ノードのvector確保するわけ? ループカウンタ設定するために並列化要るがなw 単にループ回したいだけなのに巨大なメモリ要るてww 調べてみてもC#やtbbのparallel_for相当がないんだが これら見ながら企画作ったC++規格策定メンバーってお前と同じパープリンじゃないのか?
685 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 16:13:34 ID:zfbHpqVT.net] >>671 おい、真面目に情報提供している者に対してパープリンとは何だ 俺だけじゃなく640もパープリン呼ばわりか 後出しという自分の落ち度を棚に上げて そういう発言は5chのフランクさでは済まんぞ
686 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 16:14:35 ID:hYHuFzfT.net] 初手人格否定はC++erのセオリー
687 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 16:14:40 ID:jImJStBO.net] >>671 お前が生きてる価値の無いゴミなだけ
688 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 16:39:35.59 ID:qwyC8IXX.net] >>661 もたいがい無意味に煽ってる書き込みだと思うがw
689 名前:デフォルトの名無しさん [2019/12/06(金) 17:15:36 ID:hyokDgJv.net] https://news.livedoor.com/article/detail/17486025/
690 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 18:34:35 ID:PPEOwhLk.net] >>671 OpenMP & SIMD intrinsics
691 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 19:25:13.77 ID:3oohkeAj.net] lock_guard使わずになに使うの?
692 名前:デフォルトの名無しさん [2019/12/06(金) 19:35:24.69 ID:3J8eqh7h.net] ひのきのぼう と かわのふく
693 名前:デフォルトの名無しさん [2019/12/06(金) 22:24:12.87 ID:hyokDgJv.net] ヒノキの棒でぶっ叩けば人は死ぬし、皮の服は火焔や刃物を弾く。 どちらかというと上級者向けの装備だと思います。
694 名前:デフォルトの名無しさん [2019/12/06(金) 23:38:17.10 ID:pm/DYA/c.net] operator[]で読み書きって毎回調べないとできず set()、val()とか関数で読み書きしてすますことが多いのだが 新文法などで簡単にやる方法わかりますか
695 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 01:06:30 ID:5MyaotCE.net] なにいうとるのかわからん operator[]をどう実装してどこで使えばいいのか理解できてないという話なのか
696 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 01:08:17 .net] >>615 余再帰だな 江添やっちまったなあ!
697 名前:デフォルトの名無しさん [2019/12/07(土) 01:59:52 ID:4p8EX4B8.net] >>682 ふつうの実装では、A[n]は参照しかできず A[n] = の代入ができないという事
698 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 05:36:21.30 ID:UnIspDfI.net] >>684 「参照」を返せばいいだけだが、そういうことではない? まさか「参照」を知らないと言うわけではないよね。
699 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 06:10:47.12 .net] ちょくちょく初心者質問スレに行った方が良い人までここに堂々と書き込むのが スレを妙な雰囲気にしてる
700 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 06:56:32.11 ID:C/SdN+6e.net] >>615 >>683 「余再帰」 corecursion って呼ぶのか。勉強になるわ。 江添さんのページを見てみたんだけど、 「このコードは末尾再帰になっている。」の行の前に 最初の return n * factorial(n-1) を返す関数を 末尾再帰に書き換えたコードの引用があるべきなのを 挿入し忘れたように思えるね。 ・末尾再帰でないコード例を示す ・末尾再帰にするとこうなる ... コード欠落 ・末尾再帰はループに書き換えられるよ ・ループにしたコード例 っていう流れで自然に読めるでしょ。
701 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 09:42:39 ID:fV2E4bDP.net] でもこのシグネチャのfactorialのままだと末尾再帰できなくね?>>642みたいになるかと。
702 名前:デフォルトの名無しさん [2019/12/07(土) 11:49:45.97 ID:4p8EX4B8.net] >>685 たとえばbitsetを実装しようして、内部では32や64bitの整数へ保存するとして 参照だけではB[i]=1はできないかと
703 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 11:56:48.08 ID:vGCb4aWc.net] 最初からそうかけよ
704 名前:デフォルトの名無しさん [2019/12/07(土) 11:57:37.74 ID:4p8EX4B8.net] これのこと、毎回調べ直さないと作れない プロキシ 実は、C++ でも、かなり無理やりですが、(見た目だけは)プロパティのようなことができたりします。 とりあえず、百聞は一見にしかずということで、以下の例を見てください。 利用側、すなわち、main の中では、 まるで普通の変数に対する代入・参照であるかのようなコードになっています。 このからくりは、 age の読み書きに、AgeProxy という名前の別のクラスを介することで実現します。 Age は AgeProxy 型の変数です。 AgeProxy の代入演算子(operator =)と int 型へのキャスト(operator int)を通して、 Person クラスの age 変数の読み書きをします。 ちなみに、こういう例のように、いったん別のクラスを通して値を読み書きしたりする方法を、 プロキシ(proxy: 代理)と呼びます。 まあ、このパターンは、利用側の見た目は綺麗になりますが、 実装は面倒ですし、実行効率もあまりよいとはいえません。 さらに言うと、プロパティを virtual 化しようとすると、 この例よりもさらに複雑な実装が必要になります。 こういう感じの話を振り返った上で、 改めて C# の「プロパティ」機能を見ると、 便利な機能だなぁとつくづく思います。 https://ufcpp.net/study/miscprog/accessor.html
705 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 12:00:39.08 ID:vGCb4aWc.net] 相談じゃないなら他へ
706 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 12:02:24.40 ID:U9XnFfRh.net] プロパティはコード上でフィールドのように扱えることよりもメンバとしてIDEが認識できるところに意味がある 最近はC#でもデザイナに頼らずに何でもコード上で済ませるスタイルが主流になりつつあり、プロパティの必要性は薄れている 初期化時にパラメータを纏めて渡したりするだけなら生フィールドで十分なわけだしな
707 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 12:11:07.35 ID:JfALL9r7.net] proxyで別に実行効率は下がらんよね てかstd::vector<bool>は大昔から存在するし
708 名前:デフォルトの名無しさん [2019/12/07(土) 12:25:43.42 ID:cPeMBqq7.net] C++Builder使えばよいのでは。
709 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 12:42:26.89 ID:JVuyt12v.net] >>684 , >>684 他言語での getter/setter メソッド的な事をやりたいのだろうなあと考えてみました。 例えば a[i] と書かれたら、 内部データ(typename T) への参照(T&) を返すのではなく 新たに内部クラス(fields: owner, index)を用意して、そのオブジェクトを作って返すようにします。 これに代入演算子(operator =) と キャスト演算子(operator T()) を実装すれば... ・a[7] = 99; //setter ・cout << a[7]; //getter こうやって普通にアクセスできます。メソッドを分離したお陰で、 添え字アクセスによるデータベースのupdate / select みたいな事が可能になります。 代入演算子は最低二種類必要で Inner& operator =(const T& value); // a[i] = value Inner& operator =(const Inner& rhs); // a[i] = a[j] 二つ目を実装しないと暗黙のコピー代入演算子が作られてしまい a[i] = a[j]; のような代入操作は実質空文化します。(owner/indexがコピーされるだけ ) 素人の思いつきですがサクっと試したら機能しました。 もっとスマートなやりかたもあるでしょう。
710 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 12:55:02.34 ID:vGCb4aWc.net] 意味の無い所で無駄にコードサイズを増やさなくても 普通にset/get関数で良いよ
711 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 13:20:15 ID:euj2mOhA.net] setterの戻り値はvoid?this参照?
712 名前:デフォルトの名無しさん [2019/12/07(土) 13:22:21 ID:cPeMBqq7.net] bitsetは参照返すからset(1).set(2).set(10)などと連鎖できる。
713 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 13:35:21 ID:QAzyzpfC.net] >>672 なんだてめえパープリンの活け造りが ぶち殺すぞ低脳野郎 ぶち殺し行ってやるから住所さらせや糞野郎
714 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 13:36:49 ID:hSwO/YRY.net] これがC++er流の挨拶です
715 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 13:37:29 ID:QAzyzpfC.net] >>672 真面目に糞情報しか提供できない出来損ないならすっこんでろウスノロ とにかくぶち殺しに行ってやるから住所晒せや
716 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 13:38:45 ID:QAzyzpfC.net] >>678 今ごろlock_guardて ID:zfbHpqVT 並の情弱かオマエww
717 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 13:44:27 ID:QAzyzpfC.net] パープリンどころかアホの活造り ID:zfbHpqVT パープリンどころかアホの活造り ID:zfbHpqVT パープリンどころかアホの活造り ID:zfbHpqVT パープリンどころかアホの活造り ID:zfbHpqVT パープリンどころかアホの活造り ID:zfbHpqVT 出てこい知障
718 名前:デフォルトの名無しさん [2019/12/07(土) 13:49:37 ID:cPeMBqq7.net] そもそも10を代入して値が10にならないなら、意味的に組み込み型の整数とは違うのかもしれない。 整数ではないものを整数で代用したときに起きる問題なのかも。
719 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 14:40:05 ID:gqZSFnI2.net] 効いてる効いてるw 弱い犬ほどよく吠えるねえ
720 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 15:57:37 ID:kC4yD5gf.net] >>683 江添なんて前からそんなもんだぞ。 人の間違いには厳しいが自分の間違いには逆ギレするような男だ。
721 名前:デフォルトの名無しさん [2019/12/07(土) 15:59:46 ID:cPeMBqq7.net] clang-cl結構いいね。
722 名前:デフォルトの名無しさん [2019/12/07(土) 16:00:40 ID:cPeMBqq7.net] >>707 全方面に厳しいって事? 自分にも他人にも。
723 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 16:33:39.12 ID:C/SdN+6e.net] 「自分の間違い(に対する指摘)には逆ギレ」ってことでしょな。 書籍として印刷・発売する前にネット公開して広く意見を求める、 「お前らタダで読ませてやるから品質向上に協力しろや」方式と考えれば 誰にも損のないやり方だと思うけどね。 少なくとも俺にとってはありがたい。
724 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 17:24:58.21 ID:ZsYnLuoj.net] 意見を反映させる能力があればな。
725 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 17:31:56.94 ID:xzwyWWlr.net] https://github.com/EzoeRyou/cpp-intro/issues
726 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 20:57:58.81 ID:KRZcErEE.net] なんかうちのVisual Studioだと iscntrl('\t') が非0(真)になるんだけど これって正しい?
727 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 21:22:47.02 ID:F8+HNqgO.net] 表示できる文字と空白以外は全部制御文字だね
728 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 22:13:42.05 ID:KRZcErEE.net] isspace('\t')は非0(真)なので'\t'は空白のはずェ、 つかGoogle Testにかけたらこうじゃわ↓↓↓ TEST(stdlibTest, ctype) { ASSERT_FALSE(isspace('\0')); ASSERT_TRUE(isspace('\n')); ASSERT_TRUE(isspace('\r')); ASSERT_TRUE(isspace('\t')); ASSERT_TRUE(isspace(' ')); ASSERT_TRUE(iscntrl('\0')); ASSERT_TRUE(iscntrl('\n')); ASSERT_TRUE(iscntrl('\r')); ASSERT_TRUE(iscntrl('\t')); ASSERT_FALSE(iscntrl(' ')); }
729 名前:デフォルトの名無しさん [2019/12/07(土) 23:02:18.90 ID:cPeMBqq7.net] 盲目の為のロケールがあったら、ベル以外全部制御文字になるんだろか。
730 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 23:12:25.74 ID:fV2E4bDP.net] 0x00から0x1fまでは全部制御文字で違和感ないけど。
731 名前:デフォルトの名無しさん mailto:sage [2019/12/07(土) 23:19:02.06 ID:EVNez7Da.net] printableってのは音声出力も含むのではなかろうか
732 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 02:49:31 ID:C6vow3qq.net] 盲人のブログラマーって普通にいるんだな なんかかっけーな
733 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 08:37:40.25 ID:9eRqVWoa.net] Visual Studio 16.4オンラインアプデしたら それまで使ってたParallel Studio2019 U5使えなくなった。 Visual C++でコンパイルできるがIntel Compilerはコンパイル失敗してしまう それと、 プロジェクトのプロパティからIntel Compilerは選択できるんだが、 プルダウンメニューからIntel Compilerを選択できないようになった。 Parallel Studio最インスコしてもコンパイルは失敗する。2019 U5 が16.4に対応してないとかないよね?
734 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 08:39:40.14 ID:drue7Jpy.net] >>713 例によってロケール依存らしいが "C" だと iscntrl() が真を返す値は 0x00-0x1f, 0x7f みたいね。 これまた例によって unsigned char 範囲と EOF 以外の値については未定義。 つうか、このくらいは5ちゃんねる以外から情報を探す方が 早くて確実じゃないかしら。
735 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 13:11:02.08 ID:hM3Qn2JU.net] C++で作ったブラウザテニスゲーム(PWA仮対応): https://yutakaaoki.github.io/demo_tennis/ Wasm+PWA+WebGL+"C++"
736 名前:デフォルトの名無しさん [2019/12/08(日) 14:09:36.54 ID:3pi+cAN/.net] >>722 青木さんは何をしようとしてるんですか?
737 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 14:17:37.03 ID:vN1dzuVf.net] >>722 で、質問は?
738 名前:デフォルトの名無しさん [2019/12/08(日) 14:36:36.30 ID:3pi+cAN/.net] もっと早くは最速って意味ですか? それとも速くしたいって意味ですか?
739 名前:デフォルトの名無しさん [2019/12/08(日) 14:56:59.55 ID:3pi+cAN/.net] インテリコード、ほんとに提案してくるね。 お前は次にこう書く・・・って。
740 名前:デフォルトの名無しさん [2019/12/08(日) 15:02:14.03 ID:J+6Nu+8f.net] 歯垢の妨げにしかならんわ
741 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 17:09:58.86 ID:hM3Qn2JU.net] >>723 C++ Nex という言語とそのIDEを作ってますが、マルチプラットフォームの ツールキットも同時に作ってます。MacやiOSなどまで native 対応するのは 貧乏なので機材の関係で難しいので、wasm に対応することでひとまずは 凌ごうかと思いました。 ツールキットのソースをBSD/MIT系ライセンスで公開して、C++ Nex も 無料で使えることにして、みなさんのお力をお借りして native対応の ツールキットに出来ればいいのですが。ひとまず、Windows/Wasm/Android くらいまでなら対応できる目処は立ってます。iOSについては、swift 言語が出したオブジェクトファイルとリンクすることはWindows上でも 実験できそうなので、その基礎的な部分だけならMakefileなどの開発環境を 用意することはできそうです。 Mac miniがあれば、iOS native 対応も出来そうなんですが。
742 名前:デフォルトの名無しさん [2019/12/08(日) 17:29:31.80 ID:3pi+cAN/.net] 基本的にネイティブ志向なんですね。
743 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 17:29:36.52 ID:oOCB7Yl8.net] >>728 ソースコード見せて
744 名前:デフォルトの名無しさん [2019/12/08(日) 17:30:50.90 ID:3pi+cAN/.net] ウェブアセンブラは興味あるんだけど、イマイチ情報が。
745 名前:デフォルトの名無しさん [2019/12/08(日) 17:32:13.08 ID:3pi+cAN/.net] 高橋茉奈著やさしいウェブアセンブラが待たれる今日この頃。
746 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 17:37:23.93 ID:hM3Qn2JU.net] >>730 ライセンスは、BSD, MIT, LGPL(静的リンクしてもGPL感染しない例外あり) の どれかにするか迷っています。
747 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 17:43:51.77 ID:8Jdq2NjK.net] WTFPLライセンスにしようぜ
748 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:33:02 ID:Cj3eSjEv.net] >>721 >"C" だと >iscntrl() が真を返す値は 0x00-0x1f, 0x7f ほう、そんなことが規格のどこにかいてあるのですか
749 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:58:38 .net] >>722 Android 4.4.2 Chromeで動作した
750 名前:デフォルトの名無しさん [2019/12/09(月) 01:41:27 ID:ExBOPGUm.net] ID無いのは5chの人って事?
751 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 01:45:35 ID:aHmkn8DW.net] 有料ユーザーってこと
752 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 01:45:54 ID:dDDj5i4x.net] これ5chじゃなかったの?
753 名前:デフォルトの名無しさん [2019/12/09(月) 02:33:36.15 ID:ExBOPGUm.net] そうなんだ。
754 名前:デフォルトの名無しさん [2019/12/09(月) 02:41:32 ID:ExBOPGUm.net] >>739 なかの人はID付かないのかなって。
755 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 08:06:32.09 ID:V5HcCSm8.net] >>735 C++ の規格が引用してる C の規格じゃないかな。 質問のつもりで書いてるなら、あまりに態度が悪い気がするし、 「その投稿の内容は間違ってる」と主張したいなら、 もっと直接的・具体的に間違ってるという根拠を示すべきだと思うよ。
756 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 09:58:16 ID:CUCDgsHX.net] >>736 ありがとう。
757 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 17:54:07.48 ID:c5eP1gUS.net] >>742 デタラメぬかしておいて根拠を求められたら示せないばかりか オマエこそデタラメである根拠を出せとか、さすがですね
758 名前:720 mailto:sage [2019/12/09(月) 18:35:46.39 ID:ZGVF76Fo.net] 自己レスです Visual Studio 16.4では Intel Parallel Studio 2019 u5は動かないようです。 16.3に戻せないし どーしよー https://software.intel.com/en-us/forums/intel-c-compiler/topic/840467
759 名前:デフォルトの名無しさん [2019/12/09(月) 19:45:24.14 ID:ExBOPGUm.net] POSIXには明確にCロケールの定義が書かれていた。
760 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 20:19:32.09 ID:B3OID8x5.net] >>745 今のVSの最新版は人柱仕様であり、検証無しでプロダクション用をアップデートしてはいけません 勉強になったねー
761 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 21:02:54.27 ID:HdhKIpY6.net] 昔からVSはそんなもんだ。 てかc++コンパイラなんて全部そんなもんだ。
762 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 21:45:50.54 ID:P+A0aO3e.net] >>745 リンク先に回避策があるって書いてあるやん
763 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 21:53:17.84 ID:G+eF5KMH.net] >>746 それはCの規格と必ずしもイコールではないがな。
764 名前:デフォルトの名無しさん [2019/12/09(月) 22:32:03.14 ID:ExBOPGUm.net] どういうことですか。
765 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 23:24:28.11 ID:qFr59Y2H.net] POSIX には ISO C には無い追加の定めがあり、したがって
766 名前:> POSIX にある定めは必ずしも ISO C 一般に言えることではないということです。 [] [ここ壊れてます]
767 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 23:30:20.36 ID:c5Uv/Cv5.net] わかったはもうこれからはstd::isspace()とstd::iscntrl()を使うは
768 名前:デフォルトの名無しさん [2019/12/09(月) 23:43:16.79 ID:ExBOPGUm.net] メンバ変数にstd::listを使うと移動コンストラクタがnoexceptに出来ないのですが。 こんな時はどうするのでしょう。
769 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 23:58:06.53 ID:aHmkn8DW.net] メンバのstd::listをポインタにする
770 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 23:59:06.89 ID:qFr59Y2H.net] >>754 まず何を見て「出来ない」と言っているのかを明らかにします。
771 名前:デフォルトの名無しさん [2019/12/10(火) 00:04:16.84 ID:KeuWZv5z.net] https://ja.cppreference.com/w/cpp/container/list/list 僕はいつもここを見ます。
772 名前:デフォルトの名無しさん [2019/12/10(火) 00:06:34.29 ID:KeuWZv5z.net] std::swapの特殊化がnoexceptです。 これを使いますか。
773 名前:デフォルトの名無しさん [2019/12/10(火) 00:08:47.32 ID:KeuWZv5z.net] 引数無しのコンストラクタがnoexceptじゃないから無理でした。
774 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 00:37:17 ID:OASxW0Hh.net] そもそも noexcept にする必要性が不明だし、呼び出してる関数が 全部 noexcept じゃなくても std::list 実装を限定してよかったり、特定実装での bad_alloc =即死の不都合が必要性と釣り合うなら noexcept にすることはできるし、 最大限の移植性も bad_alloc の通知も noexcept もすべて本当に必要なら >755 でポインタって答えも出てるのに。
775 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 00:41:00 ID:2YzAsKi1.net] 自動でnoexceptに成らないなら、自分で望みのnoexceptの定義すりゃ良いだろうに 部品が例外投げるなら内部でcatchして適切に処理すればいい
776 名前:デフォルトの名無しさん [2019/12/10(火) 00:43:28.28 ID:KeuWZv5z.net] https://github.com/isocpp/CppCoreGuidelines これです。
777 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 07:32:12 ID:Xhvd8FYl.net] >>761 正論
778 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 19:05:35.05 ID:yM6al2d7.net] 途中でcコード通るとか何らかの理由があるんだろう。
779 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 13:14:22.35 ID:KfdgnhFC.net] ある一つの変数に対してstd::threadで作成したプロセスは値を更新し続けて、メイン関数の方では値を読み続ける場合は排他処理する必要はありませんか? メイン関数の方は必要なときだけ値が読めればいいので読みこぼしは無視していいです
780 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 13:19:53.65 ID:iOg65oSz.net] >>765 変数が std::atomic<T> でなければ排他制御の必要があります。
781 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 13:21:20.19 ID:m9WEF2SZ.net] >>765 atomicでないとだめ。プリミティブな型でもあやしい。 りーどらいとろっくするがよい。
782 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 13:23:21.98 ID:/1t9T7AP.net] 基本型かつ確実にレジスタでなくメモリに書き出されているならそうだね std::atomcを使うのが無難 その条件ならmemory_order_relaxedを指定すればバリアのオーバーヘッドは避けられる 面倒だけどね
783 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 13:35:45.33 ID:IATqHbi6.net] 質問者じゃないけど 読みこぼしとかタイミングによるズレが問題ないとしても排他制御なしに読み書きする時点で未定義動作だからNG って認識でおk?
784 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 13:46:34.56 ID:iOg65oSz.net] はい。 https://timsong-cpp.github.io/cppwp/n4659/intro.multithread#intro.races-20 > The execution of a program contains a data race if it contains two > potentially concurrent conflicting actions, at least one of which is > not atomic, and neither happens before the other, except for the > special case for signal handlers described below. Any such data race > results in undefined behavior.
785 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 14:00:16.36 ID:/1t9T7AP.net] 言語仕様はそうだろうけど x86なら実際は多くの場合バリア不要だったりするから 最終的にどういうinstructionになっているのか知っておくと理解が深まる
786 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 15:24:29 ID:nkoUZIKM.net] x86系CPUで普通のメモリへの読み書きで順番が入れ替わる可能性があるのは write => read だけ これ以外だったり同期が必要なければ 排他制御は不要 もちろん、 一連のデータリード
787 名前:ナデータの一貫性が必要であれば一貫性確認の仕組みなり排他制御なりは当然必要だし、 コンパイラが読み書きを省略する可能性のあるコードであれば volatileを付けるなど、省略を防ぐ必要はある ymmレジスタを使えばアトミックな読み書きが出来るので 256bit以内なら一貫性も保てる マルチコアARMの場合は DMB命令を入れておけば確実 パフォーマンスに問題が無い箇所であれば、 移植性の為にも、素直にC++の排他制御を入れておこう! [] [ここ壊れてます]
788 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 15:42:23 ID:ax9A/ZTc.net] お前らRustに移行とか考えたりするの?
789 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 17:37:57.91 ID:bM/oaPHs.net] >>773 個人的には絶対に移行したくないと思っている。
790 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 17:42:08.10 ID:/1t9T7AP.net] どっちもやったらええがな
791 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 18:13:18.74 ID:bM/oaPHs.net] >>771 質問されたような簡単な場合であっても、少なくとも、80386系CPUでも、 物理CPUを2つ積んでいるようなマシンだと、色々な配慮が必要。 一つの理由は、CPUキャッシュが外部メモリに反映されていない場合が あるため。 もう一つは、値の変化のタイミングがコードに書いた通りで無い事があり、 僅かにタイミングがずれることで、「すれ違い」現象の様なことが おきることがある。これが起きると、変数の値をフラグ的に利用して 厳密に何かをやりたい場合に非常に致命的な問題を生じてしまうことがある。 これを避けるには、80386の設計者は、XOR交換命令を使うことを想定 していたらしい。 2つのスレッドでデータをやり取りする場合には色々と注意が必要で、 普通はデータが準備できたかどうかをCreateEvent(),SetEvent(), WaitForSingleEvent()などで待機して処理するのが基本。
792 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 18:17:08.59 ID:bM/oaPHs.net] >>776 スマン。XOR交換命令ではなく、xchg命令だった。
793 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 18:20:46.73 ID:NtLrnXCf.net] goよりかはrustの方が全然マシやと思うぞ 最近go案件振られること多いけどC言語触ってるみたいで好きになれんわ〜
794 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 18:30:30.06 ID:/1t9T7AP.net] >>776 xchgはsequential consistencyが必要な場合だよ 今回のように単にatomicにread/writeできればいいだけなら不要 お前さんも含めてよくわからん人は使わないのは正解
795 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 18:36:33.88 ID:bM/oaPHs.net] >>779 正直言って、俺は、lock, xchg, mfence, prefetch, キャッシュ制御付き(?)mov各種(大量) に付いてはちゃんと理解出来てないことは認める。
796 名前:デフォルトの名無しさん [2019/12/11(水) 18:38:56.23 ID:bM/oaPHs.net] MFENCE PREFETCH MOVNTDQA LFENCE(?) XCHG LOCK prefix WC Memory ↑沢山あるけど、よく分からない。 xchgもちゃんと理解できてない。
797 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 18:39:59.12 ID:bM/oaPHs.net] MFENCE, LFENCE, SFENCE。 服のサイズみたいだ。分からん。
798 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 18:46:12.74 ID:bM/oaPHs.net] >>779 xchgは、2つ以上のCPUが1つの事柄に関する lock を同時に獲得しようとした時に 1 CPU だけが lock を獲得できて、他はすべて獲得できないようにするための ためのようですね。今回とは余り関係ないようです。
799 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 21:50:49.53 ID:10jfhd7e.net] >>777 XORを使った交換テクニックがあったのを思い出した
800 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 00:31:42.87 ID:n5d2iAqE.net] >>765 その場合でも排他制御は基本的には必要。 たとえば読み込んで範囲チェックをした後に値が変わってしまったらまずいでしょ。 別メモリにコピーを取っていてから処理しているつもりでも、最適化が気を利かして削除しちゃうこともあるだろうしね。
801 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 00:36:46.28 ID:n5d2iAqE.net] >>765 あとはアレだな、変数の構造にもよるけど、変数を読み込んでる最中に、上位ワードを読み込んだ後に値が変わって下位ワードだけ新しくなるなんてことも 可能性としては0とは言えない。
802 名前:デフォルトの名無しさん mailto:sage [2019/12/12(Thu) 00:54:16 ID:UvCIGzud.net] AVXを使えば256bitを1命令で AVX512を使えば512bitを1命令で 読み書き可能
803 名前:デフォルトの名無しさん mailto:sage [2019/12/12(Thu) 01:00:12 ID:UvCIGzud.net] x86系だとCMPXCHG命令 ARMだとLL, AC命令 がデータの一貫性確認に使える
804 名前:デフォルトの名無しさん [2019/12/12(Thu) 03:03:25 ID:hmkgwwLY.net] とんちプログラミングはもう流行らなさそう。
805 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 03:28:17.88 ID:J/GuvI9A.net] とんちプログラミングwww
806 名前:デフォルトの名無しさん mailto:sage [2019/12/12(Thu) 03:55:57 ID:g+q4RhTJ.net] > これを避けるには、80386の設計者は、XOR交換命令を使うことを想定 > していたらしい。 当たり前じゃね?アトミックな命令を使うのは基本だと思うが
807 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 07:30:46.73 ID:UvCIGzud.net] XOR
808 名前:デフォルトの名無しさん mailto:sage [2019/12/12(Thu) 07:43:20 ID:Vt8W+oPZ.net] xor rax,rbx xor rbx,rax xor rax,rbx これでswap rax,rbx相当ってことね
809 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 07:53:00.21 ID:UvCIGzud.net] >>777
810 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 10:43:59.85 ID:r0VN1UlG.net] condition_variableで待機しているスレッドがない状態でnotify_allしたときの動作ってどうなりますか?
811 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 10:56:19.34 ID:WJA8YZFG.net] 時空が逆流し、針の先から悪魔が生まれる
812 名前:デフォルトの名無しさん [2019/12/12(木) 11:06:56.29 ID:a67Hqgb2.net] jsに対するTypeScriptみたいな感じで C++に対するRustっていう認識は間違ってるが それならC++に対するそれは何が適当なんかある?
813 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 11:10:12.33 ID:Vt8W+oPZ.net] allに該当する要素の数が0なのを特別視する必要はなさそう
814 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 11:21:14.68 ID:NrsugUJv.net] 非同期な操作やしその瞬間何も起きんなら単にスルーするだけ
815 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 12:01:38.93 ID:Z8SHCwDj.net] >>797 無い。
816 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 12:26:43.11 ID:gL/Y8Ccu.net] >>797 Managed C++とかC++/CLIとか
817 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 13:04:34.98 ID:Z8SHCwDj.net] >>801 それだと余計に変になっているので、JS ---> TypeScript の関係とは違う。
818 名前:デフォルトの名無しさん [2019/12/12(木) 13:08:42.86 ID:b3wcvAqB.net] C++は型安全だからC++はC++
819 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 14:17:55.83 ID:CNmkwPhj.net] 型安全認定された!
820 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 14:59:18.45 ID:ZWrMIDdu.net] ていうかTypeScriptはJSが型があまりにもザルすぎて危険だよね、Javaやら C/C++ほど堅くないにしてもある程度の型はいるよね?っていう発想ででてきた ものだから C++ から寄せていくならむしろ型をユルくしてくパターンだな そんなクソ言語には興味がないので具体的に何?ときかれても知らんがな
821 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 16:27:22.69 ID:AVYkL4QT.net] JSが危険ってどういう事? C/C++は型がない=危険だけど JSなんかは型安全な言語だからちゃんと例外になって、 メモリ保護エラーとか起こすこと無いけど?
822 名前:デフォルトの名無しさん [2019/12/12(木) 16:39:21.91 ID:hmkgwwLY.net] Treeの節(Node)は部分木を表すRangeだと考えて差し支えないですかね?
823 名前:デフォルトの名無しさん [2019/12/12(木) 16:47:21.68 ID:hmkgwwLY.net] C++20のレンジってもしかしてDBのカーソルとかに応用できませんかね?
824 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 18:38:14.77 ID:Ijd1d2r8.net] 毎回フルスキャンしたいならどうぞ
825 名前:デフォルトの名無しさん [2019/12/12(木) 18:59:14.59 ID:hmkgwwLY.net] ビューで制限できるし遅延評価を目的としたストリームを代弁できるんじゃないかなって思ったのですが。
826 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 19:07:50.30 ID:Z8SHCwDj.net] >>806 型も宣言も無い事が危険になることが多い。 例えば、関数を定義しても仮引数に型がないので、全く間違った実引数列 を指定してしまっても処理系がエラーを出してくれない。関数を修正して 仮引数列の真ん中あたりに新しい仮引数を一つ増やしたとする。 この場合、この関数を呼び出す側もちゃんと全て修正する必要がある。 Cだと型をチェックしてくれるので修正の仕方を間違うとエラーになって くれることが多い。ところがJSだと間違っても全くエラーを出してくれない。 また、JSの場合、ローカル変数とグローバル変数を間違って使ってしまい、 グローバル変数にいれたつもりがローカル変数になってしまっていることがある。 また、変数を1文字間違えた場合も全くエラーにならず、新しいグローバル変数 が使用されたと解釈されてしまう。 どれも、C言語だとエラーになってくれるので安全だが、JSだと危険。
827 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 19:25:03.70 ID:AVYkL4QT.net] >>811 お前が型安全の意味を間違ってるってことはよく分かった。 メモリ保護エラーなど言語で解決されないエラー (OSがトラップするエラー)になってしまうことを 型安全じゃないっていうんだよ 言語で例外になるならそれは型安全
828 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 19:44:50.53 ID:Vt8W+oPZ.net] ぬるぽ
829 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 20:29:23.98 ID:f2lx0DlC.net] ツンッ
830 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 20:46:51.94 ID:6QhfdrtV.net] >>808 おそらくできると思う
831 名前:デフォルトの名無しさん [2019/12/12(木) 22:31:55.78 ID:hmkgwwLY.net] boost.property_treeはノードはコンテナだって書いてる。 アルゴリズムイントロダクションにはポインタ三つ組みのツリー表現が紹介されてるけど、これがノードがコンテナ的な感じだろか。
832 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 22:36:00.00 ID:2qfVB5NM.net] >>812 ??? >>811 は型安全なんて一言も言ってないけど?
833 名前:デフォルトの名無しさん [2019/12/12(木) 22:37:04.02 ID:hmkgwwLY.net] 仮に、ノードにSTLのリストやベクターを持たせて子ノードを格納すると、別の部分木のイテレータが互換性を持たなくなる。 これはちょっとまずい。 ある部分木の途中からある部分木の途中までを注目することはよくあるから。
834 名前:デフォルトの名無しさん [2019/12/12(木) 22:45:48.06 ID:hmkgwwLY.net] ノードの物理量が必ず同じであることを利用すれば、データ構造ヒープを木として使うのが良いんだろか。 これなら、メモリーの確保はSTLのベクターが使え、木全体でイテレータが互換性を持てる。
835 名前:デフォルトの名無しさん [2019/12/12(木) 22:52:26.39 ID:hmkgwwLY.net] 考えれば考えるほど、ノードに子ノード格納用のSTLコンテナを持たせるのは現実味がなく思える。
836 名前:デフォルトの名無しさん [2019/12/12(木) 22:59:41.49 ID:hmkgwwLY.net] つまり、型安全はプログラムの健全性を担保するものではなく、C++は型安全とは言えないって事で良いのでは。
837 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 23:02:50.75 ID:+RpJiFi7.net] jsてのは女子小学生の意味か?
838 名前:デフォルトの名無しさん [2019/12/12(木) 23:04:10.87 ID:hmkgwwLY.net] 型が無いと僕たちには辛すぎるよね。 ミスを発見してくれないから。
839 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 23:36:51.22 ID:Rc7qy7fw.net] 型はまあ重要だけど型ガーばっか言ってる奴は揃ってバカだよな。
840 名前:デフォルトの名無しさん [2019/12/13(金) 00:21:19.32 ID:0IHjBlJG.net] 型が無いとinsertがinsert_from_intとかinsert_from_stringとか別々にしないといけなくなって、色々大変そう。 呼び出し側が責任を持つということになるのかも。
841 名前:デフォルトの名無しさん [2019/12/13(金) 00:22:24.50 ID:0IHjBlJG.net] 型演算をコンパイラに任せることが出来なくなって、すべてプログラミングしないといけなくなるのかな。
842 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 06:47:47.05 ID:6WB0hlYg.net] >>824 むしろ(静的)型なんて俺には不要だぜ、ベイビーって奴の方がアホっぽいけどなw >>825-826 静的型付け 動的型付け あたりでググってこい
843 名前:デフォルトの名無しさん [2019/12/13(金) 07:17:35.68 ID:0IHjBlJG.net] 機械語は変数に型がない。 命令で型を使い分ける。 その大変さを考えると型欲しいってなるのかも。
844 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 07:24:37.08 ID:Ry/2QtNy.net] まさにBがCに進化するときの考え方だね
845 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 09:49:21.00 ID:wVkcEFxk.net] >>825 ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数 用意して使うと言う発想はスクリプト言語的な発想。 そのようにした場合、コンパイラが厳密にどの関数を使うかが人間には 分からない事が多いので安全性を損なう場合が多い。 スクリプト言語は RAD言語なのため、できるだけ短い関数名で対処しようと するが、それが思わぬ間違いを含みがち。 C言語が好かれているのは、どういう処理がされるかが人間が完全予測できる ことで、「大体の動作」は好まれない。
846 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 09:53:03.46 ID:wVkcEFxk.net] >>826 型の違いでコードを自動変化させるという思想は、C++の中でも非常に最近に なって STL (template) で流行りだしたもの。 もともとC言語に型が導入されたのは、プログラマのミスをコンパイラが発見して エラーを出してくれるようにするためだった。C言語には関数の多態性(overload) がない。なお、override と overload は別の概念なので、知らない人は検索して 欲しい。
847 名前:デフォルトの名無しさん [2019/12/13(金) 09:53:50.44 ID:0IHjBlJG.net] イネーブラ使えば良いのでは。
848 名前:デフォルトの名無しさん [2019/12/13(金) 10:00:20.89 ID:0IHjBlJG.net] コンセプトコイコイって感じなのかな。
849 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 11:27:07.79 ID:WVlIRY9+.net] #pragma omp parallel forで 自動分割され、各スレッドに割り当てられた ループの開始点と終了点を取得することできませんか?
850 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 18:09:24.89 ID:e6j7CnOm.net] >C言語には関数の多態性(overload)がない さらりと嘘をつくやつがおるな
851 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 18:27:30.70 ID:fi1/rC5j.net] 今UE4と組み込み以外でc++の仕事あります?
852 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 18:33:53.16 ID:xTSwswyu.net] オーバーロードあるか? ディスパッチの方法はいろいろあると思うが
853 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 18:55:58.62 ID:ftjAwgQI.net] >>836 USのマイクロソフトに行け
854 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 19:01:03.38 ID:ysGzQi5M.net] >>830 > ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数 > 用意して使うと言う発想はスクリプト言語的な発想。 え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ? 「同じ関数名の関数を複数用意」できるのは静的型付け言語の特徴だよ
855 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 19:52:22.32 ID:6WB0hlYg.net] >>839 > え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ? 関数は無理だがメソッドでいいならPowerShell
856 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 20:00:57.46 ID:ysGzQi5M.net] PowrShell は型付言語ですからね。 それぐらいでしょ?
857 名前:はちみつ餃子 mailto:sage [2019/12/13(金) 20:54:52.57 ID:1q9LzdDI.net] 用語としてメソッドと言ってるものでよければ Common Lisp もそうじゃね?
858 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:07:31.92 ID:KHLl2/ku.net] >>841 うん、1つあれば > え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ? の反例になるからね
859 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:09:15.79 ID:wKYhuojH.net] >>843 そしたら、一つぐらいしか無いって俺は意見を訂正するだけなんだが、 お前も同じ関数名の関数を複数用意できるのはスクリプト言語では PowerShellだけだって訂正するって話でいいの?
860 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:13:12.55 ID:gmdEaqRD.net] それでいいんじゃないの
861 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:23:18.13 ID:T1rtAOWF.net] 質問です template <typename T> constexpr inline T value; template <typename T> constexpr inline T value = (T)0; こうやって変数テンプレートの宣言と初期化を分
862 名前:離すると VC、clang(Xcode付属)ではエラーになるんですがwandboxで試すとエラーになりません 本来どっちの動作が正しいんでしょうか? [] [ここ壊れてます]
863 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:37:57.11 ID:KHLl2/ku.net] >>844 別にそれでいいよ > え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ? が無知からの発言と認めてもらえればいいだけだしw
864 名前:デフォルトの名無しさん [2019/12/13(金) 22:26:34.23 ID:0IHjBlJG.net] >>846 これも通ってしまった。 #include <iostream> template <typename T> constexpr T value = 1; template <typename T> constexpr T value = 2; template <typename T> constexpr T value = 3; template <typename T> constexpr T value = 4; template <typename T> constexpr T value = 5; template <typename T> constexpr T value = 6; int main() { std::cout << value<int> << std::endl; }
865 名前:デフォルトの名無しさん [2019/12/13(金) 22:27:26.74 ID:0IHjBlJG.net] 実行結果。 Start 6 0 Finish 最後の定義が有効になってるように見える。
866 名前:デフォルトの名無しさん [2019/12/13(金) 22:28:16.14 ID:0IHjBlJG.net] Wandbox C++ gcc HEAD 10.0.0 2019
867 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 22:54:36.18 ID:T1rtAOWF.net] ありがとうございます、その結果を見るとgccがおかしいぽいですね・・・ 宣言時に初期化は必須と考えて書いていこうと思います、ありがとうございました
868 名前:デフォルトの名無しさん [2019/12/13(金) 22:57:06.09 ID:0IHjBlJG.net] 僕もちょっとわからないんだけど。
869 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 00:21:27.14 ID:stptR0oK.net] >>836 デスクトップアプリ
870 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 07:31:10.87 ID:SZLGcxYz.net] >>846 診断メッセージをよく見ろよ > error C2737: 'value': 'constexpr' オブジェクトは初期化する必要があります。 そもそも分離できないんだよ いいか、constexprは翻訳時定数だぞ それを翻訳段階9まで未解決のままにできると思うか?
871 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 08:56:55.09 ID:fBoJLlft.net] >>854 なんでできるようにしないの? そっちの方がおかしくね?
872 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 09:02:00.44 ID:SZLGcxYz.net] なんでという理由も述べたはずだが
873 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 09:53:01.66 ID:fBoJLlft.net] >>856 だからそれを可能にするようにしてくれ
874 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 10:02:03.90 ID:SZLGcxYz.net] ん? 俺は江添じゃねえぞ 奴なら標準会員だから言ってみるのもいいが
875 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 10:02:27.48 ID:SZLGcxYz.net] - 標準会員 + 標準化委員
876 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 10:08:29.00 ID:yV/FURvf.net] 江添本ダメ絶対
877 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 10:30:50.58 ID:stptR0oK.net] 江添でもできない
878 名前:846 mailto:sage [2019/12/14(土) 10:35:10.86 ID:QUVSvjZy.net] >>854 >診断メッセージをよく見ろよ 見た上で言ってます(つまりgccまたはVC, clangのバグではないかということ >いいか、constexprは翻訳時定数だぞ それ以前にテンプレートなんですが
879 名前:デフォルトの名無しさん [2019/12/14(土) 12:26:05.30 ID:m0rD8Ode.net] ローマ法王は根競べで決めるらしいですよ奥さん。
880 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 12:26:49.81 ID:gw9aL+td.net] 誰でも閲覧できる規格ドラフト見ればすぐにわかることをこんな掃きだめで聞いても
881 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 12:35:13.30 ID:SZLGcxYz.net] >>862 なんかとんがってんな コンパイラのバグとまで言う根拠は何だ? 相場では規格票の条文だが テンプレートなのは見ればわかるさ だから何なのか説明をやめないでくれ
882 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 12:50:37.99 ID:gw9aL+td.net] >相場では規格票の条文 通産省の癖の抜けない老人はご退場いただきたい
883 名前:デフォルトの名無しさん [2019/12/14(土) 12:58:43.25 ID:m0rD8Ode.net] これODRの緩和と関係あるんですかね?
884 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:34:08.27 ID:T/HCOnVQ.net] >>772 >x86系CPUで普通のメモリへの読み書きで順番が入れ替わる可能性があるのは write => read だけ 別に。 コアAの読み書きをコアA自身が見る分にはそうかもわからんが コアAの読み書きを異なるコアBから見たらwrite同士やread同士でも順番が入れ替わり得る (アウトオブオーダー実行の影響で 安全に動かすには適切にメモリバリアで順序化する必要がある
885 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:37:18.74 ID:JwYnIOEa.net] >>868 read ==> read read ==> write は入れ替わらない
886 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:37:51.96 ID:T/HCOnVQ.net] といってもロックレス何ちゃらぐらいの制御であればInterlockedCompareExchange()で済むから スレッド間の通信なら普通メモリバリアとか直接触る必要は無いが
887 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:38:24.93 ID:T/HCOnVQ.net] >>869 迷信
888 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:39:11.91 ID:JwYnIOEa.net] ソースは?
889 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:39:40.59 ID:T/HCOnVQ.net] リードキューやコマンドキューにコマンドが入るのはアウトオブオーダープロセスの事後であるため そのような保証は無い
890 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:41:05.07 ID:JwYnIOEa.net] それのソース
891 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 13:44:15.66 ID:JwYnIOEa.net] https://github.com/herumi/misc/blob/master/cpp/fence.md
892 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 14:15:12.84 ID:JwYnIOEa.net] x86系は シングルコアのマルチスレッドアプリ の多くがそのまま動くように出来てる シングルコア時代が長かったから
893 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 14:55:10.15 ID:QUVSvjZy.net] >>865 >テンプレートなのは見ればわかるさ >だから何なのか 普通に考えて、実体化がまだなのに定義(初期化)を強制される妥当な理由はない、ということ
894 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 14:57:30.67 ID:T/HCOnVQ.net] 確かにリンク先のインテルのマニュアルの >8.2.3.2 Neither Loads Nor Stores Are Reordered with Like Operations >Example 8-2. Stores Are Not Reordered with Older Loads に >Initially x = y = 0r1 = 1 and r2 = 1 is not allowed と書いてあって>>875 と同じことが書いてあるが疑わしい マニュアルが間違っているのではないか、 ちな >8byteのデータはアドレスが8の倍数のときにアライメントされている。 から安全に読み書きできるというのはi486みたいな古いプロセッサーだとかえって危険らしい >8.1.1 Guaranteed Atomic Operations を見たらワカル、
895 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:04:35.33 ID:T/HCOnVQ.net] つか上のインテルのマニュアルには「投機的実行時中のメモリアクセスではメモリアクセス例外は発生しない」 旨が2箇所ぐらいに書かれているが、 ということはつまりアセンブリコード上A→BまたはA→Cというメモリアクセスが条件によってどちら片方だけ実行されることを意図したコードであっても A→B→Cというメモリアクセス順に成り得ることを意味し、他コアからもそう見えてしまうはずだが、 これをメモリアクセス順がreorderされていないうちに入れてしまうのはどうなのか、、、 マニュアル執筆者の国語の再教育が必要なのではないか
896 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:10:49.52 ID:SZLGcxYz.net] >>877 おまえさん、もしかして テンプレートの宣言と定義と オブジェクトの宣言と定義を ごっちゃにしてないか? int test; int test = 5; これは宣言と定義じゃなく定義の重複だぞ
897 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:13:40.23 ID:PwUHvw+y.net] お前なぁ x86のこと大して詳しくないのにしゃしゃり出てくるからそういう情けないこと言うはめになるんだよ x86でstd::atomicのmemory_orderを変えてバリア付きがどういうインストラクションになるか見てみな storeのseq_cst以外は素のmovだから(コンパイラ依存だから絶対ではない)
898 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:20:09.00 ID:T/HCOnVQ.net] そりゃー間違ったマニュアルにしたがって実装したら間違った実装になり得る(キリ ていうかアウトオブオーダー実行の影響がマルチコアCPUにおいても透過的だと認めやっても良いが、 >>879 の投機的実行の件はどうなんじゃ? あるコアが投機的実行中に他のコアをストップさせるのでは何のための投機的実行かわからん…
899 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:21:14.95 ID:k5kIl1RN.net] >>877 × 普通に考えて 〇 俺の頭の中で × 妥当な理由はない 〇 妥当な理由は思い当たらない テンプレートなら初期化は不要という主張なら、 constexpr 変数の宣言と定義を
900 名前:分離できないことは納得してるのかな? そうだとして、それをテンプレートの時だけ可能とすることに意義があると思うの? 特別ルールを設ければコンパイラ実装やプログラムの読み取りにコストがかかるから、 明確が意義がなければ特別ルールは無いのが妥当だと思うよ。 [] [ここ壊れてます]
901 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:24:42.79 ID:QUVSvjZy.net] >>880 , >>883 マウント取るのが最優先でまともな回答できない(するつもりも無い)んなら黙っててくれ >これは宣言と定義じゃなく定義の重複だぞ externつけたら? >それをテンプレートの時だけ可能とすることに意義があると思うの? テンプレート実引数に使われる型が不完全型であっても、実体化まで評価を遅らせられる さて、 >× 普通に考えて >〇 俺の頭の中で >× 妥当な理由はない >〇 妥当な理由は思い当たらない こんなゴミみたいな煽り入れてきたからには逃げるなよ
902 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:32:39.86 ID:SZLGcxYz.net] >>884 おまえさんの元の質問はこうだったな template <typename T> constexpr inline T value; template <typename T> constexpr inline T value = (T)0; どこにexternなんて書いてある? マウントがどうたら気にするあまり後出しなんかしてるのはそっちだぞ こっちはそんなこと微塵も考えちゃいねえよ失敬な 最初の口調に戻れよ
903 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:36:57.55 ID:QUVSvjZy.net] 間違えた Xテンプレート実引数に使われる型が不完全型であっても、実体化まで評価を遅らせられる ○初期化に使われる定数式の評価を遅らせられる 言い換えれば、宣言と定義を分離できないならconstな変数テンプレートの宣言時には それに使う定数式内のすべての型が完全型であることを強制されてしまう =std::is_integral_v = std::is_integral<T>::valueでいえば is_integral構造体の方が取り回しがいい、ということ なんのために変数テンプレートが導入されたのか・・・・
904 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:37:56.58 ID:QUVSvjZy.net] >>885 自分が失敬だからこうなってるとは考えられないんだな 何様だよ、そもそも質問に答えてないだろうが
905 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:43:43.09 ID:SZLGcxYz.net] >>887 template <typename T> constexpr inline T value; template <typename T> constexpr inline T value = (T)0; を例示しての質問に対して int test; int test = 5; という答えをしているぞ valueがtestになったのは悪かったが 余計な飾りをとって問題の核心を指摘したんだよ
906 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:48:43.77 ID:SZLGcxYz.net] 家事があるんでしばらく離席する
907 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 15:58:10.05 ID:QUVSvjZy.net] 規格でそうなってる(テンプレートゆえの特例は無い)のが”わかってるなら” 最初からそう言ってくれれば済むんじゃないの? >>854 を読み直せよ、テンプレートのことが完全にすっぽぬけた上に失礼な回答だろ >コンパイラのバグとまで言う根拠は何だ? とまで、って・・・・普通にありえるだろ、動作が違うんだから(未定義とかいう屁理屈は無しで) で、>>883 は逃げたの?
908 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 16:55:24.17 ID:k5kIl1RN.net] >>886 やっぱり constexpr 変数の宣言と定義を分離して何がしたいのか、 何ができるようになるのか、が見えてこない。ごめんね。 宣言だけ見える constexpr 変数への参照やポインタだけはとれるようになるけど、 それだともう constexpr である必要なくて const 変数でよさそうで、それならふつうに 宣言と定義は分けられるし。 ちなみにテンプレート実体化までテンプレート引数依存箇所の評価はされないから、 宣言と定義を分ける話を「評価を遅らせられる」と言い表しているのも何か間違ってそう。 「記述を遅らせられる」の間違い?
909 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 17:16:54.80 ID:SZLGcxYz.net] だめだこいつ 絶望的に人に者を尋ねる態度がわかってない 「言ってくれれば済む」とか図々しすぎ 技術的な議論がしたいがこいつ相手では 不必要にイラついちまって無理だわ 俺そんなに人間できてない
910 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 17:24:00.92 ID:QUVSvjZy.net] >>891 すまん、 >テンプレート実体化までテンプレート引数依存箇所の評価はされない これ検証してみたらたしかにそうだった 手元のコードで完全型を要求されたから、初期化時に不完全型を使えないと思い込んでた (おそらくconstexprな変数テンプレートの実体化が、必要な型の実体化より先に来てたっぽい 多分構造体か何かでワンクッション置けば解決できると思う) これなら確かに分けられなくて問題無いね >>892 >いいか、constexprは翻訳時定数だぞ >それを翻訳段階9まで未解決のままにできると思うか? >なんかとんがってんな >後出しなんかしてるのはそっちだ >余計な飾りをとって問題の核心を指摘したんだよ さらには >最初の口調に戻れよ の上で >技術的な議論がしたいがこいつ相手では >不必要にイラついちまって無理だわ よくそんなセリフが言えたもんだ 自己評価高すぎじゃない?wwww
911 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 17:52:18.36 ID:SZLGcxYz.net] 意見が合うとか合わないとか以前の問題 根底的なメンタリティに欠陥がある相手とは話にならない
912 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 17:58:45.99 ID:k5kIl1RN.net] FYI >>846 Bug 68012: g++ incorrectly accepts forward declaration of constexpr variable template https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68012 >>848 One definition rule https://timsong-cpp.github.io/cppwp/n4659/basic.def.odr#1 > No translation unit shall contain more than one definition of any variable, function, class type, enumeration type, or template.
913 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 18:08:23.02 ID:QUVSvjZy.net] >>895 わざわざありがとう、やっぱgccのバグだったのね
914 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 19:50:50.54 ID:UskLmxJI.net] GCCに踊らされてスレを浪費した
915 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 20:04:04.94 ID:4qfYuBec.net] >>837 オーバーロード=多態性じゃないんで… オーバーライドのことなら当然cで実現できる
916 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 21:11:37.22 ID:zf7JKoX1.net] >>898 どうやって? いや、ディスパッチの方法はいろいろあると思うが
917 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 21:15:53.72 ID:SZLGcxYz.net] 禿もそんなことを言いながら virtualの導入には当初反対から出発したんだよな
918 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 21:26:53.87 ID:00Pm6Tju.net] >>899 その話題QZ相手にやったばかりなんで自分で調べて
919 名前:デフォルトの名無しさん [2019/12/15(日) 09:10:03.56 ID:LATD77rz.net] 君が忘れた腕時計見つめながら。
920 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 10:29:35 ID:ir8W/KPm.net] >>898 overload は、同じ関数名で仮引数の型が違う関数を作れるという多態性のことですよ。
921 名前:デフォルトの名無しさん [2019/12/15(日) 10:52:20.53 ID:LATD77rz.net] ツリーのイテレータがあるとして、イテレータが返すのはノードじゃなくて、ノードの持つ値ですよね? すると、イテレータは立体機動出来ないといけなくなるけど、begin().begin()とか変ですよね? begin().parent()とか。
922 名前:デフォルトの名無しさん [2019/12/15(日) 10:59:28.89 ID:LATD77rz.net] イテレータが返すじゃなくて、イテレータの逆参照が返すかな。
923 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:08:51.65 ID:fGq+HT2S.net] コレクションとしては子孫ノード全部を列挙できればよくて、ツリー構造に沿った操作が行いたいなら それに加えて直接の子ノードのみを列挙するイテレータが用意できればいいだろう。
924 名前:デフォルトの名無しさん [2019/12/15(日) 11:17:54.16 ID:LATD77rz.net] 何が子ノードのみを列挙するイテレータを返すかがよくわからない。 ノードの値がイテレータを返すことはできないので、ノードが子ノードを指すイテレータを返すとすると、イテレータの逆参照はノードを返すことになる。 これは意味論的にちょっと違うかなって。 コレクションにおいて位置はイテレータで示されるので、立体的な位置を持つツリーでは、イテレータ自身が立体機動出来て、巡回能力を持つイテレータは、reverse_iteratorのように外部に用意されれば良いのかなと思ったんだけど。 たとえば、レベルオーダーや深さ優先の巡回イテレータがあるとすると、普通に考えるとスタックやキューが内部に必要にある。 というわけでコピーのコストがあるので、これを標準には出来ないんじゃないかなって。
925 名前:デフォルトの名無しさん [2019/12/15(日) 11:22:50.93 ID:LATD77rz.net] 子ノードを指すイテレータの逆参照が子ノードを返すとすると、*node.begin()は子ノードを返す。 **node.begin()は最初の子ノードの
926 名前:値を返すことになるんだけども。 イテレータの逆参照がノードを返す場合、初期化子リストが素直に実装出来てイイんだけども、イテレータの逆参照が値を返さないのが腑に落ちない感じ。 [] [ここ壊れてます]
927 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:23:28.40 ID:Q+saMC6e.net] >>903 こらこらoverloadは多態じゃない多重定義だ 多態はpolymorphism間違えるな
928 名前:デフォルトの名無しさん [2019/12/15(日) 11:27:25.99 ID:LATD77rz.net] イテレータは演算子の実装を求められてるわけではなく、その演算子を呼び出した時の効果を求められてるだけなので、++(int)はスタックをコピーしない方法を考えた。
929 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:30:57.88 ID:fGq+HT2S.net] そこは値じゃなくてノードを返すイテレータでいいんじゃね? 必要ならイテレータ自体を拡張してもいいだろうけど、この場合はあまり応用できそうもないし。
930 名前:デフォルトの名無しさん [2019/12/15(日) 11:31:53.05 ID:LATD77rz.net] そうなのかな?
931 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:37:55 ID:PfQY9kAx.net] まずイテレータで何を抽象化したいかを明確にしなよ ノードを意識させたいのか?
932 名前:デフォルトの名無しさん [2019/12/15(日) 11:38:38 ID:LATD77rz.net] STL風ツリーって検索しても絶対出てこないし、CIAが絡んでるような気がしてきた。
933 名前:デフォルトの名無しさん [2019/12/15(日) 11:39:36 ID:LATD77rz.net] そこがわかんないんだよねえ。 禿4とか読んでると、イテレータは位置を意味してるように思うんだけど。
934 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:45:00 ID:mSzJWPy5.net] ツリー構造 範囲が広すぎて 汎用化すると使い勝手が悪くなるからしない ってだけかと
935 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:56:45.76 ID:Q+saMC6e.net] recursive_directory_iteratorとかね
936 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 12:06:14.82 ID:mSzJWPy5.net] なんでdirectory? treeでいいじゃん
937 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 12:22:05.91 ID:Q+saMC6e.net] いや立体がどうたら言ってるから じゃあrecursive_directory_iteratorを使うユーザーのコードは いちいち多重ループだの再帰だのといった処理になるのかって 思ってさ
938 名前:デフォルトの名無しさん [2019/12/15(日) 12:24:23.41 ID:LATD77rz.net] ツリーは、あるノードの親が知りたいときもあるはず。
939 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:07:24.45 ID:TeOOTcIs.net] ごちゃごちゃ考える前にイテレータの本分を決めなよ begin()からend()まで++で走らせた時にどうなってほしいの? 話はそれからだ
940 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:09:44.18 ID:MBW+LfoG.net] 一般にtreeの探索順序はアルゴリズムと深く結びついてるし、 そこ凝りだすと沼だぞ。
941 名前:デフォルトの名無しさん [2019/12/15(日) 13:09:51.26 ID:5G1zfwod.net] 関数ポインタをシリアライズしてファイルとして保存し、 ファイルからその関数ポインタを利用できる形に復元する方法ってあるのでしょうか?
942 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:13:54.57 ID:nhcuVJi8.net] 関数だろうが変数だろうがポインタはただの整数値でしょ
943 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:18:39 ID:p2D9PeH2.net] >>923 環境や「利用」の仕方を具体的に限定すればやりようはあるかもね。
944 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:20:48 ID:hicN34V0.net] 次に(別のプロセスで)ファイルを読み込んだときに、 元の関数を同じ番地で参照できると限らんしな。 関数ポインタの配列のインデクスなら大丈夫だろうだけど。
945 名前:デフォルトの名無しさん [2019/12/15(日) 13:23:00.95 ID:LATD77rz.net] https://ja.cppreference.com/w/cpp/iterator/reverse_iterator/operator%3D これconstexprになってるけど、どういうときに定数になるんだろ? end()の時かな?
946 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:39:23 ID:2FA7t6Jx.net] C++20以降のvector/stringとか 使われる時にconstexprであることを妨げないようにするために付いてるんだと思う
947 名前:デフォルトの名無しさん [2019/12/15(日) 13:47:38.10 ID:LATD77rz.net] どうもありがとう。
948 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:52:49.06 ID:ph9lwYgM.net] constexpr関数の中で使うため。
949 名前:デフォルトの名無しさん [2019/12/15(日) 14:30:37.97 ID:o9m7qUoD.net] デストラクタがデフォルトでvirtualじゃないのは設計不良ではあるまいか
950 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 14:34:47.01 ID:EeC59mXx.net] あえてベースの方のメソッドを呼びたいなんてことあるのかね?
951 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 14:38:17 ID:p2D9PeH2.net] >>931 https://isocpp.org/wiki/faq/virtual-functions#virtual-dtor-rationale
952 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 15:15:03.49 ID:K1ul1r/C.net] >>931 C++では基本的にゼロコストでできるところはそうできるようにするポリシーだからvirtualが必要なときだけvirtualを明示的に指定させる、というのをどこかで読んだ気がする
953 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 15:29:48.68 ID:7Mmj/dyw.net] virtualでなかったら継承禁止にしても良かったんじゃないかとは思う
954 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 16:19:56.16 ID:AolOnHel.net] そうするとメタプログラミングに色々と支障が出たはずだし STLも結構継承使ってるから実現出来なかったかコスト増えてるよ
955 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 16:52:10.11 ID:TkLVy9px.net] デストラクタをvirtualにする必要があるのは、baseのポインタ経由でdeleteする場合だけ baseのポインタを使うことすらないようなもの(CRTPなど)までvirtualになるのは どうなんだろうか
956 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 17:01:04.52 ID:ph9lwYgM.net] unique_ptr使えばvirtualにする必要無いのでは?
957 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 17:16:05.58 ID:p2D9PeH2.net] >>938 んなこたーない。 shared_ptr<Base>{new Derived} なら virtual デストラクタ不要になるから、間違えて覚えてるだけでは?
958 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 18:59:53.87 ID:tmrMX5L5.net] >>937 >デストラクタをvirtualにする必要があるのは、baseのポインタ経由でdeleteする場合だけ mjk、
959 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 19:10:50.35 ID:AolOnHel.net] セオリーとして覚えてる人多いけど、何故なのかまで考えてない人が多い例の一つだね 要するにdeleteする基底のポインタからデストラクタを呼ぶ際に末端のデストラクタを呼ぶ方法(vtable)が必要というだけ 末端のデストラクタを呼べれば、そこから基底のデストラクタを呼んでいくのは何が基底かわかりきってるから自動で出来る
960 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 19:29:34.24 ID:tmrMX5L5.net] >>941 >基底のポインタからデストラクタを呼ぶ際に末端のデストラクタを呼ぶ方法(vtable)が必要というだけ mjk、
961 名前: mailto:sage [2019/12/15(日) 19:42:55.10 ID:gCPcwtH+.net] 永遠の初心者です、お願いします 1. 式で if 文を表現したいときは条件演算子(三項演算子 ?: )が使えますが、同じく式でループ構造を表す方法は C++11 以後にありますでしょうか? 2. 1 の質問の理由としては、C++ は Java とちがって uper() がなく、派生クラスのコンストラクタの基底クラス初期化部分に式しか書けません、ここにループを書くとすれば「コンストラクタ用メンバ関数(メソッド)」を置いていますがいかにも無様だと思っています… 3. ある既存のクラスに皮をかぶせて機能アップを図るとき、もとのクラスの派生クラスとして機能アップ部分を既述することは、よくある定石でしょうか、それともあまりしないことでしょうか? --- 以上3点の質問は以下のプログラムを書いていて感じました お題は「エラトステネスのふるい」、ただし、当初、まっとうにふるいを書いた後、機能アップ項目として 篩部分に格納する数は 2n + 1 奇数に限定する、あるいは 6n + 1, 6n + 5 の形のみに限定する 等を元の篩に対して派生クラスとして記述しました https://ideone.com/YPlfsC
962 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:01:24.23 ID:01f7hQnX.net] >>943 ラムダ式の出番かな? void test(bool flag) { flag ? []{ for(int i = 0; i < 10; ++i) cout << i; } : throw 1; }
963 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:05:17.27 ID:5sPbacoo.net] エラストテネス 6n+1, 6n+5だけ保持とかってみんな考えるよね ちなみに 巨大なテーブル作成時のパフォーマンスを上げるなら キャッシュ
964 名前:ェ効くよう分割処理するのが非常に効果的 スレッド分割の為にいずれにしろ分割処理は作る事になる [] [ここ壊れてます]
965 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:07:01.24 ID:5sPbacoo.net] エラトステネス
966 名前:デフォルトの名無しさん [2019/12/15(日) 20:14:20.76 ID:mkXjftMX.net] 高分子エラストマー
967 名前:はちみつ餃子 mailto:sage [2019/12/15(日) 20:20:59.00 ID:jthcUe0A.net] >>943 初期化部分に複雑な処理をベタ書きする方が無様だと思うよ。 初期化リストの中にそんなごちゃごちゃしたこと書きたい? ワイが思うだけなので世間でどう思われてるかは知らんけどとりあえずひとつの意見として。
968 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:54:13.00 ID:TKBas8kS.net] >>939 親クラス(Base)のデストラクタに virtual 付けなくても... { shared_ptr<Base> obj( new Derived() ); } // ~Derived() called, then ~Base() called. ~Derived() はコールされるんですね... 確認してみて驚きました。 これができる仕組みを誰か教えてください。 スマートポインタのオブジェクトは子クラスの事何も知らないのに どうして ~Derived() のコールが可能なのでしょうか?
969 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:07:41.82 ID:2FA7t6Jx.net] >>949 いわゆるtype erasure https://blog.cryolite.net/entries/2006/01/08#p1
970 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:19:04.13 ID:TKBas8kS.net] >>950 まだ仕組みのとこまでですが理解できました。ありがとうございます。
971 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:24:07.01 ID:tmrMX5L5.net] 質問ですが構造体Fooの内側に構造体Barが定義されているという入れ子になった構造体において、 Fooの外のコードでFoo::Barのサイズをsizeof()で知りたいとき、以下は正しい? 1. C++だとsizeof(Foo::Bar)と書いたらおk 2. CまたはC++でもC互換構文の範疇で済ます場合、次のどちらかの方法でしか書けない (1) Foo::Barのインスタンスyが存在するスコープ内で、sizeof(y)と書く (2) Fooのインスタンスxが存在するスコープ内において、Foo::Bar型のメンバyをFooが持つ (Foo::yが定義されている)という条件の下で、sizeof(x.y)と書く
972 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:39:08.56 ID:tmrMX5L5.net] ふとオモタがインスタンスの必要性は無くせるかもしれん Foo::Bar型のメンバFoo::yが定義さえされておれば、Fooのインスタンスが無くても sizeof(((Foo*)0)->y) と書けばC言語で逝けるかもしれん… スゲー気持ち悪いコードだが、、、、
973 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:46:34.52 ID:PfQY9kAx.net] >>951 あくまでコンパイル時の型で決まるだけだから要注意 例えば class A; class B : public A; A* p = new B(); std::shared_ptr<A> a(p); これだとBのデストラクタは呼ばれない
974 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:48:17.68 ID:5sPbacoo.net] なんでそんな中途半端な機能を わざわざコストをかけて入れたんだろう
975 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:49:32.31 ID:5sPbacoo.net] やむを得ず なんだろうけど
976 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:51:55.29 ID:PfQY9kAx.net] >>953 Linuxカーネルとかそういう感じのマクロ満載だよ C言語はそういうもん
977 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 22:05:12.60 ID:TeOOTcIs.net] type erasureと相性悪いんだっけ
978 名前:はちみつ餃子 mailto:sage [2019/12/15(日) 22:15:04.90 ID:jthcUe0A.net] >>943 思い出した。 gcc や clang の拡張で良ければ複文が式になる。 だいぶん昔からある機能。 #include <vector> #include <iostream> int main() { std::vector<int> foo(({int i; for(i=0; i<3; i++); i;})); std::cout << foo.size() << std::endl; return 0
979 名前:; } [] [ここ壊れてます]
980 名前: mailto:sage [2019/12/16(月) 19:39:21.34 ID:NZyGx79l.net] >>944 ,945,948,959 コメントありがとうございます! >>944 ,959 まずgcc拡張 >SieveDerived(int n) : Sieve<T>(({int r; while((r = index(n)) == 0) n--; r;})) { } /* HERE!! */ で問題なく動作しました すでにgcc拡張で存在するところからみて、私の希望はあながち無謀かつ無稽なものではないことを知りほっとしました 次にラムダ式で定義して即評価する方法がみつかりました >SieveDerived(int n) : Sieve<T>([](int n)->int{int r; while ((r = index(n)) == 0) n--; return r;}(n)) { } /* HERE!! */ これがやりたかった!とても満足しています、ありがとうございました! 今までは関数オブジェクトの糖衣構文としてしかみていなかったラムダ式を、自分の希望にあわせて(あるいはねじまげてでも)採用し、表現できるようになったのは一歩理解が深まったかと考えています >>948 >初期化リストの中にそんなごちゃごちゃしたこと書きたい? クラスのメソッド=メンバ関数には、クラスの提供する機能として独立性の高いもの、少なくとも二箇所で同じような処理がダブっているもの、あるいは主観的には「lemma」として成り立つものを書きたいと考えていました 一箇所でしか使わないものでも lemma 性があるのならば private メソッドとして書くのもありかと思っていますが、今回の場合は、他におなじような処理をおこなっている場所はなく、かといってメソッドとして立てるほどのことでもないので、 複数個所からコールできるメソッドにはしたくなかった、という主観がありました、そういう性質の記述ならば初期化リストにごちゃごちゃ書くのもありかと、読み手には他からコールされ得ないことが自明である点からしても https://ideone.com/y3ROXS
981 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 20:14:24.13 ID:89loOkbp.net] まあこういう自己満は通過儀礼だよな
982 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 21:46:21.90 ID:kSgVv2yp.net] lambdaの即時評価はjsだと多用されているイメージ ブロックスコープないからね
983 名前:はちみつ餃子 mailto:sage [2019/12/17(火) 00:52:53.01 ID:0JRJucIS.net] >>960 > すでにgcc拡張で存在するところからみて、私の希望はあながち無謀かつ無稽なものではないことを知りほっとしました 30 年以上の実績があってもなお仕様に入らない程度に駄目なんだよ。
984 名前:デフォルトの名無しさん [2019/12/17(火) 03:23:09 ID:JQ5aWxOy.net] プライベートメンバの単体テストってみんなどうしてるのかな。
985 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 03:30:02 ID:nsTCJN+n.net] #define private public
986 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 03:58:13.47 ID:KUtZUPl9.net] #if 0 friend test; #endif
987 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 07:08:07.08 ID:KzMqUd+t.net] #ifndef NDEBUG friend struct test; #endif
988 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 07:46:15.26 ID:wpWnXFFo.net] 闇言語
989 名前:デフォルトの名無しさん [2019/12/17(火) 11:20:07.09 ID:dc1/89bE.net] namespace Method{ namespace Detail { template<typename ReturnType, typename ... ArgTypes> struct MethodRegister{}; } } // 文字列で呼び出すための関数を登録するためのマクロ #define METHOD_REGISTER_WITH_NAME( NAME, FUNC, RETURNTYPE, ... ) \ namespace Method { namespace Detail { \ template<> struct MethodRegister<RETURNTYPE, __VA_ARGS__> { \ using Functional = std::function<RETURNTYPE(__VA_ARGS__)>; \ MethodRegister() { \ MethodContainer::GetInstance().Register<RETURNTYPE, __VA_ARGS__>( #FUNC, Functional( static_cast<RETURNTYPE(*)( __VA_ARGS__ )>( FUNC ) ) ); \ } \ ~MethodRegister() { \ MethodContainer::GetInstance().Unregister( #FUNC ); \ } \ }; \ static MethodRegister<RETURNTYPE, __VA_ARGS__> sMethodRegister##FUNC; \ } } void HOGE(){ std::cout << "Hello World!" << std::endl; } void HOGE( std::string text ){ std::cout << text << std::endl; } METHOD_REGISTER_METHOD( HOGE, void ); METHOD_REGISTER_METHOD( HOGE, void, std::string ); こういった形で関数を登録する用のクラスを生成し、変数として生成して管理の自動化を行いたいのですが、 関数のオーバーロードを対応しようとした所、クラスの再定義や変数の再定義、管理クラスへの重複登録等 多数の問題が出て詰まってしまいました。 こういった問題を対処するにはどうすればよいのでしょうか?
990 名前:デフォルトの名無しさん [2019/12/17(火) 11:28:10.65 ID:rApV4krM.net] BOOST
991 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 12:23:52.67 ID:lfJGbKnI.net] >>966 >>967 リリース時に消す必要あんの?
992 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 18:42:08.59 ID:iYSb7MEE.net] このへんがいいんでないの。 https://srz-zumix.blogspot.com/2015/06/c-private.html
993 名前: mailto:sage [2019/12/17(火) 19:10:07.01 ID:780pCLgH.net] >>963 まあ、 ({int r; while((r = index(n)) == 0) n--; r;}) の最後の r; というのが限りなく非文法的ですし
994 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:19:56.70 ID:r3fDxRx7.net] プライベートメンバをテストしたくなったらそのロジックのみを非メンバ関数に切り出してテストしてるな。 まぁ、特に支障がなければ単純にpublicにするだけの時もあるけど。
995 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:45:39.29 ID:HvtzVY9o.net] templateでアクセスすると合法的にプライベートメンバにアクセスできる
996 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:49:21.80 ID:iYSb7MEE.net] そんな糞な方法でテストなんかしたくねー。
997 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 01:14:03 ID:zSYbFuJ0.net] テストなんかお綺麗にする必要が無い
998 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 06:18:11.97 ID:BbfJ/y//.net] テストのテストが必要になるような意味のわからないテストコードはアウト テストコードは実行せずに人が読んで理解できなければいけない
999 名前:デフォルトの名無しさん [2019/12/18(水) 07:25:56.60 ID:ksLRDXXy.net] >>978 どんな感じか見せていただけないでしょうか。
1000 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 07:42:51.80 ID:PEFQbiIG.net] >>971 絶対必要でもないが 少なくともデバッグ用であることくらい アピールしたい //よりNDEBUGという特定ワードを使う点にも拘りがある
1001 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 07:48:17.80 ID:uFDqtnkl.net] >>979 例えばテストコードの中にループや条件分岐があるようなものはアウト
1002 名前:デフォルトの名無しさん [2019/12/18(水) 11:33:15.65 ID:ksLRDXXy.net] ループは許してもらえませんか? データの並びとか検査したいんで。 条件分岐はたぶんないと思います。
1003 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 12:41:59.93 ID:pXzQg2xI.net] 原理主義にすぐ染まるやつw ご苦労様
1004 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:15:29.66 ID:iEIErwam.net] テスト用にいろんな複雑なテストも入れてるけど まずいのか?
1005 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:22:47.07 ID:AjekT9H/.net] Debugビルドしたら遅すぎて検証できなくて詰んだ
1006 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:34:17.71 ID:YQOjezK4.net] 典型的な糞テストは、テスト対象の出力がハッシュや現在時刻などのような予測しづらいものに依存している場合に、 テストコードにテスト対象自体のロジックと似たものを書いてしまっているケースだな 原則的には、期待する出力は全てハードコードするのが正しい 難しいなら一度試しにテスト対象を実行して目視テストし、その結果をハードコードしたほうがマシ
1007 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:39:53.25 ID:iEIErwam.net] メカが絡むリアルタイム処理でそんな事出来るかよ
1008 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:13:38.33 ID:uFDqtnkl.net] >>982 Parameterized Testsがあれば十分じゃね?
1009 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:16:04.78 ID:uFDqtnkl.net] >>986 期待する出力をハードコードするから テストで「○○以上であること」って書くこと無いよね? こういうテストケースある?言い換えるとそういうマッチャーって必要?
1010 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:38:06.38 ID:AmwvkO78.net] 次スレは
1011 名前:デフォルトの名無しさん [2019/12/18(水) 16:59:26.54 ID:ksLRDXXy.net] よ。
1012 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 17:57:22.30 ID:uFDqtnkl.net] ほらよ C++相談室 part147 https://mevius.5ch.net/test/read.cgi/tech/1576659413/
1013 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 20:28:47.90 ID:CdPazUY7.net] >>987 それはまた別の話 ここで言ってるのは単体テストレベルの話だぞ
1014 名前:デフォルトの名無しさん [2019/12/18(水) 21:11:16.67 ID:LM1drZI+.net] クラスとかの勉強入る前にC言語でしっかり文字列処理出来るようになったほうがいい?
1015 名前:蟻人間 mailto:sage [2019/12/18(水) 21:14:21.02 ID:Zo1XP656.net] >>995 strcpyなんて古い関数は21世紀では使えないぜ。std::stringでOK.
1016 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 21:14:35.04 ID:uFDqtnkl.net] C言語でしっかり文字列処理出来るようになったほうがいい? → いい C++でC言語の文字列処理する? → しない
1017 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 21:16:04.08 ID:aoz4SWmd.net] >>987 逆にそういう不確定な部分とロジック部分を切り分けるのが単体テストの目的でもある。
1018 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 23:15:57.41 ID:cF9WM4jz.net] >>992 乙 お前らコピー使うなムーブしろ
1019 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 00:00:58.14 ID:zX6m0cqE.net] 単体テストはどんだけ単純でわかりやすいコードでテストパターンを網羅するかが肝 Google TestとかTest::MoreとかJUnit使ったらワカル
1020 名前:蟻人間 mailto:sage [2019/12/19(木) 00:08:57.93 ID:r6T/W91o.net] あれっ?
1021 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 41日 12時間 33分 22秒
1022 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています