C++相談室 part135at TECH
C++相談室 part135 - 暇つぶし2ch761:デフォルトの名無しさん
18/05/12 20:30:38.36 PbE4ojLD0.net
お前らが誤解したままでいるのはお前らの自由だが、
お前らの定義だと、CとObjective-Cを区別できないだろ。
あれはCの完全上位互換で、Cコードそのまま食えるらしいからね。
お前らも少し考えれば自分で矛盾に気づけるはずだが。

762:デフォルトの名無しさん
18/05/12 20:58:42.38 cTj25fOrM.net
>>734
それは言い過ぎでしょ。
流石にそれは、世間を知らなすぎ、と言われても仕方ない意見にみえてきたなあ。。。

763:デフォルトの名無しさん
18/05/12 21:57:33.16 PbE4ojLD0.net
ならもうちょっと分かりやすい説明をしてやる。
>>677-678について、お前らの定義では『コード』について議論できないだろ。
俺の定義では、677は「Cのコード」で、678は「C++のコード」だ。コンパイラに依らない。
お前らの定義では、678は明確に「C++のコード」だが、677については、
「Cコンパイラを通した場合、677はCのコード」
「C++コンパイラを通した場合、677はC++のコード」
になってしまうだろ。
それだと、CとC++の『コード』の速度比較自体が定義できないだろ。
677をCコンパイラを通した場合とC++コンパイラを通した場合の速度差は、
「コードの差」ではなく、「コンパイラの差」なんだよ。
当たり前だろ。
というか、C++erもここまでレベルが落ちたのか。世も末だな。

764:デフォルトの名無しさん
18/05/12 22:16:57.78 DXsEIRbfM.net
std::filesystemで片方のスレッドでファイルを出力し
もう片方のスレッドでファイルが存在していたら読み込むというプログラムを書いた場合
出力中に存在すると判定されて読み込んでしまいそうですが、
そんなことないでしょうか?
もし読み込んでしまう場合、自力でフラグ管理かMutexを使うなどして
判定する以外の方法はあるでしょうか?

765:デフォルトの名無しさん
18/05/12 23:29:24.63 sI+Q43v80.net
>>739
お前が考えた定義とかどうでも良いって言ってるの

766:デフォルトの名無しさん
18/05/12 23:53:40.44 PbE4ojLD0.net
というか何でお前らそんなに必死なんだ?
俺の言ってる定義が世間一般の定義だよ。
そうじゃなきゃ『コード』の善し悪しの議論が出来ないだろ。自明だと思うが。
繰り返すが、C++がCよりも遅いのは事実で、それもググレばいくらでも出てくるだろ。
ただこれはC++そのものよりもオブジェクト指向の弊害だが。
URLリンク(chrismdp.com)
URLリンク(www.quora.com)
逆に言えば、C++の機能をふんだんに使ったとして、Javaに対する速度優位がどれだけあると思ってるの?
C++で世界が再統一されることは、今のC++の仕様/方向


767:性ではあり得ない。C++ではCを殺しきれない。 だからRustが生まれた。 >>711の表を信じるなら、RustはCの代替としてはC++以上に上手く行ってる。



768:デフォルトの名無しさん
18/05/12 23:56:27.27 sI+Q43v80.net
お前の定義じゃないと議論が出来ないのは
おまえがアホだから

769:デフォルトの名無しさん
18/05/13 00:02:56.89 VV8A9gRv0.net
定義の布教なんかより技術的な会話をしろよ

770:デフォルトの名無しさん
18/05/13 00:03:10.09 C4Q8t1mmM.net
必死なのはどちらなんだろう…

771:デフォルトの名無しさん
18/05/13 00:20:47.86 OjngaL1la.net
C++スレらしい流れだと思うよ

772:
18/05/13 00:59:58.71 eWw2CnRZ0.net
面白くていいじゃないですかぁ…
ここで linus メールをコピペ(省略)

773:
18/05/13 01:17:46.49 eWw2CnRZ0.net
>>742
面白い表ですね
つい C# とか lisp の立ち位置を確認してしまった…

774:デフォルトの名無しさん
18/05/13 08:12:09.87 pAG2qz7m0.net
>>739
だからお前のオレオレ定義なんてどうでもいい
そもそも>>638みたいな話でC++→Cで全面書き換えなんてする奴はいないだろ
まともなプログラマーならボトルネックを見つけてその部分を書き換える
例えば1つのファイルに関数f1()とf2()があってf2()がボトルネックだからC++からCの範囲で動くようなコードに書き換えたとする
お前はそのファイルの記述言語は何て言うんだよ?
関数毎に記述言語が違うとか言い出すのかよ w

775:デフォルトの名無しさん
18/05/13 08:18:26.86 pAG2qz7m0.net
>>740
> 出力中に存在すると判定されて読み込んでしまいそうですが、
> そんなことないでしょうか?
そりゃ普通にそんなことあるだろ
> もし読み込んでしまう場合、自力でフラグ管理かMutexを使うなどして
> 判定する以外の方法はあるでしょうか?
そもそも何をしたいのよ?
出力完了してから読みたいだけなら出力完了してから読み込む側のスレッド起動するとかする方法もあるだろうし

776:デフォルトの名無しさん
18/05/13 09:30:39.74 tSRcUD9w0.net
>>749
お前がIDコロコロしてまでも定義にこだわる理由が分からん。
お前の定義なら、仮に全面インラインアセンブラで記述してあっても、
Cコンパイラを通したらそれは「Cのコード」であり、
C++コンパイラを通したらそれは「C++のコード」になり、
Objective-Cコンパイラを通したらそれは「Objective-Cのコード」と言うんだろ。
そんな定義の奴はいない。それは「アセンブラ」と言うんだよ。
ただこの定義はもういい。
君は間違いを認めないようだし、仮に俺が間違っていたとしても、
お互いの認識のズレは確認できたのだからそれでいいだろ。
そして>>638は最初からそう言っているだけだ。
お前は「コンパイル単位」でしか言語を規定できないからおかしな事になっている。
世間は「コード単位」でも言語を規定する。だから、お前が
> f2()がボトルネックだからC++からCの範囲で動くようなコードに書き換え
と言うのを、世間では「f2()をCコードに書き換え」と言うんだよ。
仮にお前の定義が正しくても、これを日常的にやるようなら、じきに略されて
俺(世間)の言い方に落ち着くのも分かるだろ。
だから>>638は最初から、お前の言葉で言う、
> f2()がボトルネックだからC++からCの範囲で動くようなコードに書き換える
「f2()がボトルネックだからC++からアセンブラの範囲で動くようなコードに書き換える」事を
> もっと速くしたい所をCやasmで書く
と表現している。元々「コンパイル」単位ではなく、「コード」単位なんだよ。
その「コード」について議論するのに、「コンパイル」単位を持ち出すのはおかしいだろ。
「速くしたい『所』」ってのは一部限定って事を明示してるだろ。
お前はどうしても認めないようだが。
お前は根本的に考え方がおかしい。それではまともな議論が成立しないだろ。
議論している粒度に合わせた言葉を使え。

777:デフォルトの名無しさん
18/05/13 09:51:06.22 pAG2qz7m0.net
>>751
> ただこの定義はもういい。
> 君は間違いを認めないようだし、仮に俺が間違っていたとしても、
> お互いの認識のズレは確認できたのだからそれでいいだろ。
いきなり弱気になってて笑うわ w

778:740
18/05/13 10:01:51.37 ntCzq/+YF.net
自己解決しました。
仮の名前でファイルを書き出してからリネームすれば書き込み中か書き込み済みか
判定する処理をなくせるみたいでした。

779:デフォルトの名無しさん
18/05/13 11:07:48.71 Q3HZm9Uhd.net
>>751
コンパイラが変わらない単なる最適化で
C++からCにする
なんて言わないから普通
少なくともエンジニアの会話では無い
簡単にいう場合は「最適化」「チューニング」だし
詳しくいう場合は中身を具体的に言う
頭の悪い文系を騙すのには使えるのかもしれないけど

780:デフォルトの名無しさん
18/05/13 11:09:34.85 Q3HZm9Uhd.net
C言語風なコード

C言語のコード
全く意味が違う

781:638
18/05/13 11:24:15.00 YEhpfoS10.net
「C++で書く」→カジュアルにSTLとか使って読みやすく書く
「Cやasmで書く」→キャッシュやSIMDとか低級に考慮してガリガリ最適化する
くらいの軽い気持ちで書いただけなのに紛糾しすぎててワイ将困惑

782:デフォルトの名無しさん
18/05/13 12:17:41.91 oMdj20B0d.net
話が長い上にどうでもよすぎる

783:デフォルトの名無しさん
18/05/13 12:26:54.36 yds9udeH0.net
またいつものキチガイか

784:デフォルトの名無しさん
18/05/13 12:43:30.13 AL0mRZz+0.net
>>756
おまえさんの頭がC++03のまま更新が止まってしまっていることはわかった

785:
18/05/13 12:46:19.41 eWw2CnRZ0.net
>>759
そう判断した理由は?

786:デフォルトの名無しさん
18/05/13 12:51:49.36 AL0mRZz+0.net
C++11以後の「低級」を知らんだろ

787:デフォルトの名無しさん
18/05/13 13:01:15.34 DrlMjc+O0.net
C++xx
この末尾のへんなナンバリングが施されるようになったのっていつ頃から?

788:デフォルトの名無しさん
18/05/13 14:22:28.62 pAG2qz7m0.net
>>762
元々はC++09を狙ってたらしいから2008年頃じゃね?

789:
18/05/13 14:53:37.16 eWw2CnRZ0.net
>>761
具体的に

790:デフォルトの名無しさん
18/05/13 15:27:50.96 AL0mRZz+0.net
>>764
人に聞くのは知らないからだな

791:デフォルトの名無しさん
18/05/13 15:47:31.87 CI2jyTw+0.net
>>759
STLが03から入ったと思ってんのか
あと
>Cコンパイラってポインタ周りは最適化をかけないから、多分、
>速度差はコンパイラ起因であって
こんなこと言ってる時点でID:PbE4ojLD0の話は聞くに値しない

792:デフォルトの名無しさん
18/05/13 16:22:20.14 AL0mRZz+0.net
>>766
あの流れからどうやってSTLが03からという話になったんだ?

793:デフォルトの名無しさん
18/05/13 17:44:42.77 tSRcUD9w0.net
>>756
馬鹿につき合ってすまんかった。
少なくとも俺とLinusは君と同じ定義で使ってるよ。俺の認識では世間もそう。
俺はこれでこれまで話が通じなかったことはないから。
おそらくはCをやらずにC++だけやってる世代と、
必ずCをやったうえでC++に進んだ世代の違いだ。
ゆとりだけで閉じてる世界では、彼らの主張する定義なのかもしれん。
ただまあ、話を聞いてる限り、こいつらは色々と無知だし、無知なことに無自覚だね。
まあもういいが。
自分が知らないだけのことをすべて間違いだと断定しているようでは上達しない。
C++erもここまでゆとり化が進んだのは残念だ。

794:デフォルトの名無しさん
18/05/13 19:37:46.91 5h/P5YlNM.net
本当に通じていたのかな?
いわゆるフツーの人達は、めんどくさいから適当に話し合わせてテキトーに打ち切るものだが…

795:デフォルトの名無しさん
18/05/13 20:05:09.29 tSRcUD9w0.net
ついでだからもう少し書いておいてやるよ。
ゆとりC++erが「C++は速い」ということにしたがるのは、C++「言語」以下の解像度がないからだ。
「C++コンパイラさえ使えばおk」になってくれてないと困るからこそ、そこに異常にこだわる。
(他言語でも同様に、低位実装を直感的に推測できない馬鹿はこの傾向がある)
お前らは>>722-723の結果、同じデータ構造で同じアルゴリズムを適用した物に対し、
速度差が出た場合にそれを「言語の差」と言い張るようだが、
それは明確な間違いだ。ただの不勉強でしかない。
実際、それだとそれ以上の最適化は


796:出来ないだろ。 C出身者なら、必要ならasm書いてチューニングすることも出来る。 現在C++は失敗しつつある。 それはRustを見ても明らかだ。以下ページを見てみろ。 https://imoz.jp/note/rust-functions.html スマポ(キリッな連中にとってはC++よりもRustの方が明らかにいい言語だろ。(後発なので当たり前だが) C++だけにすがるのは止めとけ。 もうそういう時代じゃないし、C++はそれを満たせる言語ではない。



797:デフォルトの名無しさん
18/05/13 20:17:51.87 CI2jyTw+0.net
別にC++とCの宗教論争に加わるつもりはないが、
お前qsortがstd::sortより遅くなりがちな理由わかってないだろ
アセンブラ使わんでも自分で書きゃCでも同等の速度は出る
(というかVCの最適化にハンドアセンブルで本当に勝てるんか?こいつ)
>CよりもC++の方が速くなるコードの方があり得ないと思うが。
>CのほうがC++より遅いケース出してみろ。ないから。
調べもせずにこんな決めつけを書く低レベルさ以前に
これをC++のスレで書くお前はどう見てもただの荒らしだから。

798:デフォルトの名無しさん
18/05/13 20:53:01.09 tSRcUD9w0.net
>>771
お前は根本的に勘違いしている。
出発点は自前のコードでもいいが、逆アセンブル結果でもいいんだから、
改善できなくとも、遅くなることはあり得ない。
アセンブラを読めない君らでは、これは無理だ。
そして、遅くなる可能性の方が高いからやらないってのは、
馬鹿な君らなりの対処法としては正しい。
まあ、C++スレではC++マンセーしないと荒らしだ、ってのは理解した。
C++erがそこまで落ちぶれたのは残念だが、俺は去るよ。

799:デフォルトの名無しさん
18/05/13 20:57:13.19 HhTyaKjTd.net
それぞれの言語の良くある使い方であれば
Cの方が速いコードもC++の方が速いコードも
どちらも存在する
同じ処理を同じように書けば普通は同じ速度
(ただし、一部細かい例外あり)

800:デフォルトの名無しさん
18/05/13 20:59:07.22 HhTyaKjTd.net
一般的な使い方では
C++の方が開発効率が高く
Cの方がバイナリの性能が高い事が多い
(もちろん逆になる要素もある)

801:デフォルトの名無しさん
18/05/13 21:06:47.71 CI2jyTw+0.net
>>772
以前ここに書いたこともあるけど、最近ET+simd(SSE、NEONのイントリンシック)で
ゲーム用の自前の線形代数ライブラリとか作ったんで
>アセンブラを読めない君ら
残念ながらこれは当てはまらないよw
どれだけ逆アセ読んで比較したか・・・・
>C++マンセーしないと
お前が”正しい批判をしてれば”荒れてないんだよ
ついでに言えば、
>「C++で書く」→カジュアルにSTLとか
STLをカジュアルとか呼ぶ辺り、最近のC++界隈は
「流行に流されて自分で考えることを放棄する」という、かつてJavaの流行に荒らされた時代と
同じ愚を犯してるな、とは思うけどねぇ
C++er憎し、では色々と話がおかしくなるよ

802:デフォルトの名無しさん
18/05/13 21:07:47.84 HhTyaKjTd.net
同じ処理を同じ動作で記述出来ない例
Cの可変長配列
C++の例外処理

803:デフォルトの名無しさん
18/05/13 21:09:03.49 pAG2qz7m0.net
もうアホらしくなって途中離脱したけど
例えば関数内のループで使ってるstd::unique_ptr が遅いからその部分だけ生ポインタに書き換えたら ID:tSRcUD9w0 は何言語で書いたって言うんだろ?
って言うのはちょっと気にはなる
まあまた明後日の長文書くだけだと思うけど w

804:デフォルトの名無しさん
18/05/13 21:32:59.83 Q+Wg2L410.net
禿は神。
禿4はバイブル。

805:デフォルトの名無しさん
18/05/13 21:41:37.55 AL0mRZz+0.net
禿5マダー?(tntn

806:デフォルトの名無しさん
18/05/13 22:13:01.62 tSRcUD9w0.net
>>775
> どれだけ逆アセ読んで比較したか・・・・
ならコンパイラ出力コードが手書きアセンブラと比べてどれだけ糞かも知ってるはずだ。
それでその言い方には矛盾を感じるけどね。
> STLをカジュアルとか呼ぶ辺り、最近のC++界隈は
その発言は俺ではないが、
基本的には抽象度を上げるのは簡単にプログラミングする為であって、
「カジュアル」という表現は妥当だ。
Cみたいに全部手でゴリゴリ書く意味なんて無い。
速度が問題ない部分は出来るだけ手抜きすべきだ。STLがそれに適しているのなら使えばいい。
ただ、「STL使わなくてもどうとでもなる奴が手抜きでSTLを使う」のと、
「STLを使わないと何も出来ない連中がSTLを使う」のは全然意味が違う。
とはいえ、俺は後者が前者になるべきだとは思ってない。
ただ、後者ならC++ではなくJavaやC#を使った方が妥当だとは思うが。
君が見落としているのは、STLをカジュアルと呼ぶ連中は、
基本的に、STLを使わずに最速な実装が出来るものの、面倒なので、
「手抜き」を「カジュアル」と言い換えてごまかしているだけだということだ。
連中は君みたいにSTLが無いと何も出来ない馬鹿ではないんだよ。
> C++er憎し、では色々と話がおかしくなるよ
これは違うぞ。俺は無知なくせにデタラメを言い張るゆとりは死ねと思っているだけだ。
ただし、お前が無知のままで死ぬ権利は尊重するので、
有用な情報は書かないようにするが。

807:デフォルトの名無しさん
18/05/13 22:14:29.75 VV8A9gRv0.net
キチガイにさわるな

808:デフォルトの名無しさん
18/05/13 22:15:45.94 AL0mRZz+0.net
密度が低い

809:デフォルトの名無しさん
18/05/13 22:19:54.88 .net
>>772
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。

810:デフォルトの名無しさん
18/05/13 22:28:00.02 AL0mRZz+0.net
吐いた唾は呑ませんぞ

811:デフォルトの名無しさん
18/05/13 23:48:52.64 d5CbxlL9M.net
>>780
> ならコンパイラ出力コードが手書きアセンブラと比べてどれだけ糞かも知ってるはずだ。
爺いは早めに滅びればいいのに

812:デフォルトの名無しさん
18/05/14 00:21:52.22 BWBgd2BN0.net
constexpr+UCS=ニューパラダイムのはずだったんだがなぁ。
コンパイルタイムは夢がある。

813:デフォルトの名無しさん
18/05/14 02:44:09.99 xNObD1oN0.net
昔はライブラリもそんなに充実してなかったしアルゴリズム事典とか読み漁りながら色々自作してやってたけどね
しかしまぁ便利な時代になったもんだ
C言語だと型が変わるだけで使い物にならなくなっていたものが大半だったけど
型に囚われないSTLライブラリは本当に有能だよ
型に囚われない部分は全部インラインになっちゃうけどね

814:デフォルトの名無しさん
18/05/14 13:39:06.22 0aBfdvZZ0.net
オンラインになるんか!

815:デフォルトの名無しさん
18/05/14 13:40:44.68 0aBfdvZZ0.net
実行可能形式はC++、スクリプトはPython。
これができる大人の選択。

816:デフォルトの名無しさん
18/05/14 13:48:17.86 mA8jyKTp0.net
バッチは?

817:デフォルトの名無しさん
18/05/14 13:56:29.91 0aBfdvZZ0.net
バッチは他人からパクるので贅沢は言いませぬ。

818:デフォルトの名無しさん
18/05/15 20:21:01.90 L6tD5feN0.net
スタイルについての質問なんですけど、Cの文法で書けるならできるだけCで書いたほうがいいのでしょうか
上司のC++のコードがもうほんとゴリゴリのCって感じで、C++でcharの配列も無かろうよと思ったりするんですよ
確かにその方が分かる人は多くなるかもしれないですけど

819:デフォルトの名無しさん
18/05/15 20:32:27.71 tHLzTn7F0.net
>>792
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:
- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。

820:デフォルトの名無しさん
18/05/15 20:34:21.22 joZeDATc0.net
いや別に
C++で問題ない
上司の意図は知らんが
パフォーマンスを考えたコードとか
互換性を考えたコードとか
そういう可能性も
5chの一般的な価値観とは違って
C++っぽいのが良いコードって訳じゃない

821:デフォルトの名無しさん
18/05/15 20:36:35.58 joZeDATc0.net
逆に若者はコストも考えずに安易に汎用コンテナを使ったりと思うことがある

822:デフォルトの名無しさん
18/05/15 21:03:22.33 5psId9wb0.net
ものによるのじゃん?
メモリイメージを意識するならCスタイルの方がきれいにおさまる。

823:デフォルトの名無しさん
18/05/15 21:09:12.04 .net
バグを生む可能性が一切ないならCスタイルのほうがいいに決まってる

824:デフォルトの名無しさん
18/05/15 21:41:08.24 h7VmA7z3a.net
c言語って移植性あるの?まともなの?

825:片山博文MZ
18/05/15 21:41:08.58 NlOsi0K3d.net
最近のC++は、std::vectorが配列に最適化されるのか? 遅いだろ

826:片山博文MZ
18/05/15 22:23:39.58 NlOsi0K3d.net
C++11以降ならstd::array使うけど、覚えることがともかく多い

827:片山博文MZ
18/05/15 22:26:59.43 NlOsi0K3d.net
区間チェックしてくれる配列を簡単に指定できると嬉しいの†

828:片山博文MZ
18/05/15 22:31:58.98 NlOsi0K3d.net
例えば、[ ]を二重に書くと添字チェックしてくれるとか。どうかな。
int a[[10]];

829:デフォルトの名無しさん
18/05/15 22:42:37.30 PNM8l+laM.net
atじゃだめなんか?

830:デフォルトの名無しさん
18/05/15 22:43:36.39 sqV4cudU0.net
例外投げるインデクサと投げないインデクサ両方ありますから。

831:デフォルトの名無しさん
18/05/15 22:46:39.90 IhUmYIjB0.net
プロパティONにするとチェック有効で

832:デフォルトの名無しさん
18/05/15 22:46:50.65 IPNyvhtL0.net
>>802
オブジェトCを彷彿させるので嫌です

833:デフォルトの名無しさん
18/05/16 03:32:46.81 gRCAgj/W0.net
>>802
attributes構文と紛らわしい。

834:デフォルトの名無しさん
18/05/16 23:25:18.23 cmH84vOv0.net
arrayはなんで[]でチェックしてくれないの

835:はちみつ餃子
18/05/16 23:28:49.70 axtQyUCZ0.net
ゼロコストの原則

836:デフォルトの名無しさん
18/05/17 02:43:52.94 vEqyw0xg0.net
C++のコストの大部分は例外に起因するらしい。
Cでコンパイルできるコードであっても、C++としてコンパイルするとバイナリが肥大化する。
その原因は例外。

837:デフォルトの名無しさん
18/05/17 07:10:31.59 AhjFsLsi0.net
x86-64だとゼロコストだよ

838:デフォルトの名無しさん
18/05/17 08:34:28.77 FVFi5bM10.net
どこにコストが消えたんだろ
サボってるの?

839:デフォルトの名無しさん
18/05/17 09:12:53.49 UhXGat7x0.net
>>810 要出典。

840:デフォルトの名無しさん
18/05/17 14:51:21.43 T9EnGAyld.net
x86-32だと割り込み発生時に対応出来るように
関数コールの度にスタックに情報を埋め込む
x86-64はこれが不要
割り込み処理がなければコストはかからない

841:デフォルトの名無しさん
18/05/17 18:56:39.80 vEqyw0xg0.net
>>813
組み込み開発の株式会社○○みたいなサイトで読んだんだけどな。
なかなかためになる内容だったしブックマークしとくんだった。
見つけたらリンクくれ。

842:デフォルトの名無しさん
18/05/17 18:58:28.25 vEqyw0xg0.net
俺の見解では、例外にコストが割かれるなら、それは必要なコストだと思うんだよな。

843:デフォルトの名無しさん
18/05/17 19:43:22.14 WDNJ9RfY0.net
元記事消えてるっぽいからアーカイブだけど
URLリンク(bytepointer.com)
Windowsの例外機構がx64ではスタックベースからテーブルベースの通過するだけならゼロコストなものに変わった
ただしバイナリサイズは増える

844:はちみつ餃子
18/05/17 19:46:45.63 oI1zc+Au0.net
>>816
例外を使うならコストがかかるのは当然なんだが、
例外が通過しないかもしれないのにそこかしこで情報を積まないといけないのは良くないってことなんよ。
そんでまあ例外を投げたときだけにコストが生じる方式がいいよねっていう話。

845:デフォルトの名無しさん
18/05/17 20:29:27.85 AhjFsLsi0.net
例外が発生しない時のコストなんてゴミみたいなもんだけどな

846:デフォルトの名無しさん
18/05/17 20:30:03.35 AhjFsLsi0.net
イヤなら64bitで組みなさい

847:デフォルトの名無しさん
18/05/17 20:38:19.60 vEqyw0xg0.net
64ビット化するとサイズが1.5倍になるらしいけどな。

848:デフォルトの名無しさん
18/05/17 20:40:58.24 AhjFsLsi0.net
今時コードのサイズなんて問題にならんだろ
その代わりに得るものは大きい

849:デフォルトの名無しさん
18/05/17 21:11:41.72 vEqyw0xg0.net
1.5倍って40㎏の可愛い少女が60㎏のオバはんになるってことではないだろか。
さあどっちか選ぶんだ。

850:デフォルトの名無しさん
18/05/17 21:42:32.65 53fi3uKJ0.net
どうしても対応し続けないといけない32bitのレガシーデバイスがあるなら頑張って
そうじゃなけりゃもう32bitなんて捨てろ

851:デフォルトの名無しさん
18/05/17 21:43:14.24 egaCGTtIM.net
>>823
それ得るもの無さすぎないか?

852:デフォルトの名無しさん
18/05/17 21:57:59.98 vEqyw0xg0.net
60kgのオッサンになるよりはいいだろ。

853:デフォルトの名無しさん
18/05/17 22:02:48.61 /ukQRMvg0.net
32bitがレガシーだあ?
どこで吹き込まれたか知らんが
騙されやすいやつだな

854:デフォルトの名無しさん
18/05/17 22:20:15.79 yYAGBjqQ0.net
クラスのconst配列メンバをコンストラクタで初期化するにはどうしたらいいでしょうか?
class A
{
 const double array[];
 void A( double &temp[] ) : array(temp)
 {
 }
};

これはコンパイルでエラーが出てダメでした

855:デフォルトの名無しさん
18/05/17 22:32:37.31 .net
>>828
できないからあきらメロン
素直にconst外してアクセサで制御するか、vector使うかしとけ
テンプレートとかを駆使して無理に実現しようと試みるのはいかにも頭が悪いし時間の無駄

856:デフォルトの名無しさん
18/05/17 22:33:23.35 MPVDtJCy0.net
constの問題というよりサイズが決まってないからダメなんじゃないの?

857:デフォルトの名無しさん
18/05/17 22:34:24.00 .net
ここ3年ほど32bitの組み込み機器に触ったことない

858:デフォルトの名無しさん
18/05/17 22:37:16.99 53fi3uKJ0.net
今はほとんど64bitの上で無理矢理32bit動かしてるんだよ
ネイティブ32bitCPUなんて化石

859:デフォルトの名無しさん
18/05/17 22:51:21.67 yYAGBjqQ0.net
>>829
了解です、constは諦めマスカット
>>830
どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんで
サイズは未定にしておきました

860:デフォルトの名無しさん
18/05/18 17:13:18.87 8ieomEvbM.net
vc++のマルチコアのオプ


861:ティマイズなんて甘々だから余裕で 勝てるけどなぁ。 あんなのに負ける人もいるって、世の中広いなぁ(棒)



862:771
18/05/18 18:23:15.07 G5mHfuQa0.net
アホだろお前

863:デフォルトの名無しさん
18/05/18 18:33:25.05 pNV6CZfO0.net
そりゃあ頑張れば勝てるだろう
コーディングコストと可読性の犠牲に見合うほど速くなるかどうかは別問題だがね

864:771
18/05/18 18:57:13.66 jCVxhDbN0.net
VCもそうだけど大体のコンパイラは並列化や自動ベクタライズは強くないと思う
古くからある機能とそうでないものでは最適化に差が出るのは当然
だからこそSIMD使うときはみんなイントリンシック命令使ってるのであって

865:デフォルトの名無しさん
18/05/18 20:11:41.99 Xj+Uy2RAd.net
>>834て誰に対してのレス?

866:デフォルトの名無しさん
18/05/18 21:20:25.60 TsUe9Yho0.net
>>828
template<std::size_t N>
class A {
public:
const double array[N];
template<typename ...ARGS>
A( ARGS&&... args ): array{std::forward<ARGS>(args)...} {}
};
template<typename ...ARGS>
inline auto make_A( ARGS&&... args ) -> A<sizeof...(args)>
{
return A<sizeof...(args)>(std::forward<ARGS>(args)...);
}
auto a{ make_A( 1.0, 2.0 ) };
こんな感じだろうか。
要C++11以降。
>>どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんでサイズは未定にしておきました
要素数が決まってないとコンパイル時に困るので、テンプレートクラスにしちゃったけれど…

867:デフォルトの名無しさん
18/05/18 22:05:36.49 TsUe9Yho0.net
あーいや、 >>828 は配列を渡して初期化したいのか…
↑じゃだめだ
だいぶ別物になっちゃった。
URLリンク(wandbox.org)

868:デフォルトの名無しさん
18/05/18 22:33:37.26 G5mHfuQa0.net
参考にしてみた
URLリンク(wandbox.org)
C++17ならヘルパー不要にはなる・・・(コンストラクタに与えた引数から推定
けどどっちにしても配列数可変にはできない
ていうか配列の参照とか初めて使ったw

869:デフォルトの名無しさん
18/05/19 00:03:26.14 9PVep4LN0.net
>>828
C++14のinteger_sequence使ってみた
#include <iostream>
#include <utility>
template <size_t N>
class A
{
const double array[N];
public:
template <size_t... I>
A(const double (&temp)[N], std::index_sequence<I...>) : array{temp[I]...}
{
for (auto x : array) std::cout << x << std::endl;
}
A(const double (&temp)[N]) : A(temp, std::make_index_sequence<N>()){}
};
int main()
{
double t[] = {1.1, 2.2, 3.3};
A<sizeof(t)/sizeof(t[0])> a(t);
//A a(t); // C++17
}

870:デフォルトの名無しさん
18/05/19 00:10:45.61 WRHfxyyT0.net
糞面倒だな

871:デフォルトの名無しさん
18/05/19 00:15:37.45 VIvIbG0Fa.net
アンチパターンを生み出すための新機能が次々出てくるのがc++だ!

872:デフォルトの名無しさん
18/05/19 00:33:17.81 WRHfxyyT0.net
こういうのからiostreamみたいになってゆくんだろうな

873:デフォルトの名無しさん
18/05/19 03:41:10.01 BMt6S/TK0.net
つか引数にconst double(&temp)[]って何だと渡せるのこれ
()ないとエラー出るし

874:デフォルトの名無しさん
18/05/19 06:54:38.61 KlOWaW480.net
何も渡せないよ
配列数のない配列型はどんな文脈でも不完全型だからその型のオブジェクトは存在し得ない

875:デフォルトの名無しさん
18/05/19 07:39:54.12 03NPLOb40.net
>>842
VS2017 15.7.1のVCのReleaseモードだとtemplateの部分が赤の下波線になるな
Debugモードにするとなぜか消える
そしてReleaseモードはエラーが出ているのにコンパイルして実行可能
バグじゃね

876:はちみつ餃子
18/05/19 12:37:22.83 WMhjioR90.net
>>847
仮引数として表れる場合はポインタに調整されるんじゃなかったっけ?

877:デフォルトの名無しさん
18/05/19 13:11:36.50 KlOWaW480.net
配列型はね
配列の参照型はされない

878:デフォルトの名無しさん
18/05/21 09:24:48.82 SHQ/MEmo0.net
引数で渡す場合は配列自体が参照型だもんな

879:デフォルトの名無しさん
18/05/21 21:45:00.90 SySmX4Pj0.net
配列への参照ってのはあるんだけどね
template <typename T, int N>
N size(T (&)[N]) { return N; }

880:デフォルトの名無しさん
18/05/21 21:45:22.62 SySmX4Pj0.net
あ、ミスった
わかる人笑ってw

881:デフォルトの名無しさん
18/05/22 10:34:44.57 QHYj3MXfM.net
>>848
> バグじゃね
未定義ならコンパイルできて実行できると言うのも規格に準拠してる正しい動作

882:デフォルトの名無しさん
18/05/22 17:07:12.03 CbgK21am0.net
>>854
見当違いのレスだな
DebugとReleaseでエディタの動作が首尾一貫してないって言ってるんだがな
15.7.2が来たから入れてみる

883:デフォルトの名無しさん
18/05/22 17:37:39.23 LzyusK+ZM.net
>>855
普通の知能を持ってたら
> コンパイルして実行可能
に突っ込まれてることぐらいわかるだろうに...

884:デフォルトの名無しさん
18/05/23 09:57:56.51 NT2O+rqe0.net
>>856
15.7.2にしたらReleaseでも赤い波線出なくなったぞ
エディタのバグが直ったようだ

885:デフォルトの名無しさん
18/05/23 10:14:09.85 2zsXYckB0.net
>>848の3行目は無かったことにすると

886:デフォルトの名無しさん
18/05/23 10:39:06.93 NT2O+rqe0.net
だから「エディタの」バグと書き忘れただけなのにお前らしつこいな
DebugモードでもReleaseモードでもコンパイルして実行できてたんだから

887:デフォルトの名無しさん
18/05/23 12:24:31.22 fJYH1ZEbM.net
書き忘れとか知らんがな w
そもそもエディタのバグと言うなら三行目は元々不要
余計なことを書いて突っ込まれるとか低能にありがちな行動ってだけ

888:デフォルトの名無しさん
18/05/23 12:33:07.54 8Hna4W5Ya.net
>>859
気にするな。俺には>>854の方がよほど的はずれなことを言ってると思うよ。

889:デフォルトの名無しさん
18/05/23 12:40:43.11 fJYH1ZEbM.net
>>861
>>856
同じようなレスを書いてループさせるのも低能にありがちな行動

890:デフォルトの名無しさん
18/05/23 13:02:27.39 nSCJSr52M.net
エラーの話なのになぜか未定義とか言い出す奴が

891:デフォルトの名無しさん
18/05/23 15:37:22.12 fJYH1ZEbM.net
未定義の意味を理解してないなら絡んでこない方がいいぞ

892:デフォルトの名無しさん
18/05/23 17:20:05.74 CpOh1zRO0.net
エラー
警告
未定義
不適格

混同するやつが後を絶たないな

893:デフォルトの名無しさん
18/05/23 19:15:29.66 Au5e7VGg0.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
V9EWM

894:デフォルトの名無しさん
18/05/23 21:13:20.83 CpOh1zRO0.net
しょーもね

895:デフォルトの名無しさん
18/05/23 21:13:21.12 fJYH1ZEbM.net
この文脈でエラーとか警告とか言い出す時点でアホ丸出しなんだが...w

896:デフォルトの名無しさん
18/05/23 22:07:04.14 lbYCZF160.net
VisualStudioはインテリセンスとコンパイルに使うコンパイラが違う
ちょっと設定変えると、とてつもなくエラーが出るのにコンパイルは通るという事態は稀に良くある

897:デフォルトの名無しさん
18/05/24 12:25:45.78 hqF4m+XgM.net
>>838
>>771

898:デフォルトの名無しさん
18/05/24 23:58:30.63 XccjINB00.net
あるコンテナaとコンテナbを連結?するようなクラス(イテレータ)を作りたいんだが
イメージとしてはa.begin()からa.end()-1までいったら次はb.begin()になるようなやつを思い浮かべてるんだけど
どんな風につくればよいかアドバイスください

899:デフォルトの名無しさん
18/05/25 00:18:38.25 HgmGhgcw0.net
>>871
concat_iteratorでググるとそれっぽい実装がチラホラ

900:デフォルトの名無しさん
18/05/25 10:18:09.43 SC+wi2VoM.net
C++で2Dのwindowsで動くゲーム作ろうと思っているのだけど、ライブラリって何使えばいいんだ?

901:デフォルトの名無しさん
18/05/25 10:18:58.21 AT66E0O7M.net
GDI

902:デフォルトの名無しさん
18/05/25 11:33:06.12 JXMMrzE70.net
direct2d

903:デフォルトの名無しさん
18/05/25 12:11:02.95 .net
Unity

904:デフォルトの名無しさん
18/05/25 12:19:23.12 lIIOH/4a0.net
Opengl

905:デフォルトの名無しさん
18/05/25 12:52:26.94 s00mTA6Oa.net
DirectX Tool Kit

906:デフォルトの名無しさん
18/05/25 14:11:55.60 7mkguDclM.net
cairo

907:デフォルトの名無しさん
18/05/25 18:33:18.15 vSqqKkie0.net
いっぱいあるなー、一通り試してみようかな

908:放置された蟻人間
18/05/25 18:37:43.90 mtapFpQed.net
全部は時間的に無理。

909:デフォルトの名無しさん
18/05/25 19:06:13.22 O4zlrz7ka.net
DirectX Tool Kit一択だとおもうが

910:デフォルトの名無しさん
18/05/25 19:16:41.38 BiCg0uer0.net
OpenGLなんてのは?

911:デフォルトの名無しさん
18/05/25 19:17:34.72 el+ngQt20.net
windowsに限定するならopneGLにする意味は薄い

912:デフォルトの名無しさん
18/05/25 23:32:47.23 vSqqKkie0.net
DirectX tool kit なるものは一般的なDirectXの上位互換みたいな捉え方でおk?

913:デフォルトの名無しさん
18/05/25 23:41:23.37 9e9u/b+G0.net
>>882
よこからだけど、これ面白そう。

914:はちみつ餃子
18/05/26 01:45:05.97 r5N0xqhb0.net
Siv3D とかも楽に使えると思う。 (3D という名前がついてるけど 2D もいける)

915:デフォルトの名無しさん
18/05/26 09:49:22.16 Gw/MbzDj0.net
今の時代なら cocos 2d とかモバイルでも使えるライブラリ使った方がいいんじゃないのか

916:デフォルトの名無しさん
18/05/26 10:01:48.35 KfOwUuVld.net
c++ならアンリアルエンジンで行こうぜ

917:デフォルトの名無しさん
18/05/26 15:38:59.11 dTnlF+1t0.net
あれESCキーが消えるから…

918:デフォルトの名無しさん
18/05/29 08:17:20.26 kgP2LOmLa.net
string::size_type についてですが、
size_type の前についている
「string::」
というのは何ですか?

919:デフォルトの名無しさん
18/05/29 08:20:28.98 kgP2LOmLa.net
名前空間ではないようですし。

920:デフォルトの名無しさん
18/05/29 08:28:38.63 HMjaHK3IM.net
静的メンバ関数
でぐぐれ

921:デフォルトの名無しさん
18/05/29 09:38:09.06 kgP2LOmLa.net
>>893
ありがとうございます。
string::size_type は companion type というものらしいのですが、
この companion type とは何でしょうか?

922:デフォルトの名無しさん
18/05/29 12:33:02.70 WLsT9puy0.net
メンバ関数の引数や戻り値、メンバ変数などで使用するためにクラススコープで定義された型のこと
クラス(この場合はstd::string)を利用する側は、
実際にはその型がなんであるかを知る必要なく
文字列のサイズの型としてstring::size_type を用いることができる
参考
URLリンク(stackoverflow.com)

923:デフォルトの名無しさん
18/05/29 13:47:00.51 kgP2LOmLa.net
>>895
ありがとうございました。

924:デフォルトの名無しさん
18/05/29 23:46:46.84 vO9YU0hS0.net
std::threadでサブスレッドで処理をしているのですが、処理をキャンセルするためthreadをdetachすると
メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。
サブスレッドではnewでのリソース確保もしていないので理由がわからないです。
detachする際にはjoinableである以外に条件があるのでしょうか。

925:デフォルトの名無しさん
18/05/29 23:59:57.19 6Y/6D3P7M.net
>>897
スレッドローカル記憶域とか破棄されたあとにアクセスしてんじゃないの?

926:デフォルトの名無しさん
18/05/30 00:33:26.79 4+P0NcT60.net
std::threadのdetachってスレッドを手放すだけでキャンセルはしないのでは
ラムダ式で処理を渡してるなら、ローカル変数の参照キャプチャとかしてるない?

927:デフォルトの名無しさん
18/05/30 00:33:44.46 D8xt/f/p0.net
detachしてもスレッドは動き続けますが。

928:デフォルトの名無しさん
18/05/30 00:56:37.13 OvmXW6ID0.net
一般にスレッドのキャンセルは難しいので適当に処理を終わらせてjoinするのが良いも思う

929:デフォルトの名無しさん
18/05/30 01:10:14.80 K2528e3P0.net
URLリンク(ideone.com)
質問です。定期的に同じ関数をスレッドで起動するクラスを作りました。
んでコード中のここ無駄って書いてある行を削除する方法はありませんか。
開発はVCでやってますが、GCCでも通ればいいなーと思っています。

930:897
18/05/30 02:51:38.91 gP4Z92jH0.net
すみません。言葉足らずでした。
メインスレッド:GUI、サブスレッド:既存のライブラリでデータ補間の重い処理
を担当していて、途中でデータ補間パラメータを変更したくなった場合
キャンセルボタンを押してやり直す、という処理を考えています。
CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは
構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。重い処理のループの中にキャンセル用フラグでも用意できればキャンセル通知後
ループを抜けて速やかにjoinするところまで到達させる等の方法があるのですが、
既存ライブラリなのでそうはいかず諦めてdetachしようと考えています。
そのまま走り続けるだけだから結果を回収せずほっておけば良いのかと思ってましたが
甘かったみたいです。
>>898
thread_localは使っていないです。
>>899
アドバイスありがとうございます。関数オブジェクト作ってキャプチャは使っていないです。
>>901
スレッドを平和理に終了させる方法はなさそうなのでdetachできなければ諦めてjoinするしかなさそうですね…
とりあえず最小の再現例を作ってみることにします。

931:デフォルトの名無しさん
18/05/30 09:53:15.07 eD7a+sCF0.net
重い処理の方を別プログラムのプロセスにしちゃって止めるときはブチ殺すのがシンプルで良さそうに見える

932:デフォルトの名無しさん
18/05/30 17:43:48.31 K2528e3P0.net
>>903
async つかえ。
wait_forっていう関数がプロミスにある。

933:デフォルトの名無しさん
18/05/30 17:44:50.87 K2528e3P0.net
>>902
たのんますー。

934:デフォルトの名無しさん
18/05/30 17:50:39.57 K2528e3P0.net
基本的にstd::threadでキャンセルは不可能。
自分でそういう機構を汲んでやらないといけない。
whileの実行をキャンセルするbool変数つっこむとか。
それでもクリティカルパスの実行は避けられない。

935:デフォルトの名無しさん
18/05/30 18:55:49.81 DJsvI6z80.net
強引にスレッドを殺すと、
そのスレッドが確保してたリソースが解放されないかもしれないぞ
メモリであったりセマフォだったりハンドルだったり
ちゃんと終了処理を追加しないとダメだよ

936:デフォルトの名無しさん
18/05/30 19:05:49.61 EimB82cz0.net
そのスレッドが使用するメモリ等のリソースを全て
スレッド終了まで保持していても
>>897
>メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。
となるなら、そもそもそのライブラリがスレッドセーフじゃないのかもしれない。
>>904式に別プロセス化するのが一番なのかもね

937:デフォルトの名無しさん
18/05/30 22:01:02.21 K2528e3P0.net
ぷぅうううううううううりいいいいいいいぃいいいいいいいいいずへーーーーーーーるぷみーーーーーーーーーー。

938:デフォルトの名無しさん
18/05/31 16:11:24.94 W0WQ5cWo0.net
関数の中にif(cancel)return;みたいなのを大量に仕込んで外からフラグを立てて止めろ

939:デフォルトの名無しさん
18/05/31 19:02:31.60 OT8Sfmwc0.net
基本的にはフラグで止めるか別プロセスで実行するのが定石だが
質問者は
>CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは
>構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。
と言ってるからなぁ

940:
18/05/31 20:27:20.65 4k9lsrlf0.net
join なんて、カラクリが良く分からないものを、よく使う気になるなぁ
私なら、チャイルドプロセスが自爆するように、陽に記述するなぁ

941:デフォルトの名無しさん
18/05/31 20:40:15.15 nmebeT/e0.net
joinが嫌ならdetachすればいいのよ
パンがなければお菓子をたべればいいのよ

942:デフォルトの名無しさん
18/05/31 20:53:09.91 VgZC2OSf0.net
世の中には信じられないメンタリティの人がいるもんだなあ

943:デフォルトの名無しさん
18/05/31 21:03:58.91 3a+XHa0i0.net
join のカラクリは何も難しいことないと思うが

944:デフォルトの名無しさん
18/05/31 21:13:34.61 nmebeT/e0.net
標準ライブラリが嫌ならpthread使えばいいのよ

945:897
18/05/31 21:49:57.28 VY6h/Th40.net
いろいろアドバイスありがとうございます。
どうもdetachした後に局所変数が確保されるとスタックを破壊してしまうようで、
局所変数を確保する前に>>911氏のいうようにif(cancel)return;入れるとLinuxでは落ちなくなりました。
ですが、windowsでは改善せず諦めました。atomicにするのものも面倒ですし。
結局キャンセルするときは結果を回収せず、さらに別スレッド立ち上げてjoinすることで
メインスレッドのGUIに制御が戻るようにしました。長期的には別プロセス化するしかなさそうですね。
ありがとうございました。

946:デフォルトの名無しさん
18/05/31 21:53:20.51 TwfgGFWOM.net
> 既存ライブラリなのでそうはいかず
って書いてあるのに>>905,>>907-908,>>911とかバカなら黙っとけよ...

947:デフォルトの名無しさん
18/05/31 22:35:57.56 EV/maKH/0.net
913はスレッドを自爆させた後joinしないのであろう…

948:デフォルトの名無しさん
18/05/31 22:51:40.57 .net
子スレッドが一つならjoinで待っててもいいけど、複数個になったら無限ループで待つよね

949:デフォルトの名無しさん
18/05/31 22:52:12.55 EV/maKH/0.net
ていうか「重い処理かつ終了に時間が要するスレッド」複数個を所有するサーバみたいなスレッドを一発噛ませて、
パラメータを変えたくなったら「現行スレッド停止」と「新しいパラメータでのスレッド起動」をサーバに対して指令するつくりにすれば
良い
この場合は「重い処理かつ終了に時間が要するスレッド」が終了するまで誰も待つ必要はなく(※サーバ終了時は除く
、サーバみたいなスレッドは、クライアントから「新しいパラメータでのスレッド起動」コマンドを受けたときおもむろに
「死んでる(再利用できる)スレッドはどれかいな~、」とタイムアウト0秒のjoinでポーリング式にサーチすれば良い
現行スレッドが死ぬまでの間現行スレッドと新たに起動するスレッドが並列に動くことになるが
>CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは 構わない
ということですしおすし、

950:デフォルトの名無しさん
18/05/31 22:56:14.51 EV/maKH/0.net
>>921
ウィンドーズならWaitForMultipreObjects()とかその亜種で複数の終了待ちができうる
そうでなくともイベントフラグの同時待ちはだいたいどんなマルチタスクOSでもできるから
それを使って類似のしくみを作れうる、。

951:デフォルトの名無しさん
18/05/31 23:21:33.93 i2WXWbd70.net
>>923
できうる、作れうるって日本語的におかしいだろう

952:デフォルトの名無しさん
18/06/01 04:04:16.74 p3jBadVq0.net
ウインドーズとか何か別物感あるし、multipleのスペルもおかしいし大丈夫か

953:デフォルトの名無しさん
18/06/01 04:08:40.92 ampOWGNn0.net
色々なところで糞が露呈している
それがWindows

954:はちみつ餃子
18/06/01 04:11:32.11 uW2rQW//0.net
デザインとしては Windows の方が現代的なんだけど、
色んなものが POSIX を基本にしたデザインになってるから噛み合わないんよなぁ。

955:デフォルトの名無しさん
18/06/01 04:16:04.83 ampOWGNn0.net
POSIXに準拠できないWindowsがどうかしている

956:はちみつ餃子
18/06/01 04:22:16.25 uW2rQW//0.net
>>928
昔は POSIX 準拠にしてたよ。
アメリカの政府が採用するのに POSIX を要求してたみたいで、仕方なくやったって話。
だけど、基本的なモデルが違うものに API だけ接ぎ木してもなぁ。

957:デフォルトの名無しさん
18/06/01 04:43:45.31 SICoZSIN0.net
windowsでpthread使うたびにトラブル起こってつら

958:デフォルトの名無しさん
18/06/01 08:14:44.74 WJ5uQBEIM.net
>>921
他に条件があるならともかく、普通にjoinで待てばよくね?

959:デフォルトの名無しさん
18/06/01 08:27:54.49 WJ5uQBEIM.net
>>922
joinしたら再利用できないだろ

960:デフォルトの名無しさん
18/06/01 08:30:22.24 .net
>>931
別に、joinで済むならjoinでいいんじゃね

961:デフォルトの名無しさん
18/06/01 09:15:20.19 oHKnNuZr0.net
キャンセルしたくなるほど長い処理ならスレッドキューイングする利点はない
もちろんしたいならしてもいい

962:デフォルトの名無しさん
18/06/01 09:35:53.16 uCsHgk1n0.net
C++を使うなら、Windowsでいいんじゃないの。
Clang、gcc、clと主要なコンパイラが動く貴重な環境だし。
文書を残さないといけないからアプリも必要。
図を描くのにvimでSVG書くって人もいるけど、流石にそれは労力の使い方を間違えてる。

963:デフォルトの名無しさん
18/06/01 10:01:00.93 oDn7ey18M.net
サブスレッドでjoinして結果を使わない、というのとデタッチするのとどう違うんやろな。デタッチってなんのメリットあるんやろか。

964:デフォルトの名無しさん
18/06/01 10:15:36.25 oHKnNuZr0.net
自分で書いてる通り結果を使わなくて終了も待ちたくないなら join せずデタッチ。
メリットはリソース(スレッドハンドルなど待ち合わせ用リソース)の自動的な解放くらいか。

965:デフォルトの名無しさん
18/06/01 11:41:29.12 sIQxQP9sa.net
連結リストのクラス list があります。
addFirst
removeFirst
などのメンバ関数があります。
この list を継承して、 stack クラスを作ります。
stack クラスにはメンバ関数 push と pop があります。
push の中で addFirst を呼んでいます。
pop の中で removeFirst を呼んでいます。
stack クラスのインスタンスからは、 list クラスの addFirst, removeFirst などを
利用不可としたいのですが、どうすればいいのでしょうか?
: public list と継承するともちろんダメです。
: private list と継承すると push の中で呼んでいる addFirst が使えなくなってしまいます。
どうすればいいのでしょうか?

966:デフォルトの名無しさん
18/06/01 11:47:52.19 1LiDvq+rd.net
protect

967:デフォルトの名無しさん
18/06/01 11:55:31.26 .net
friend

968:デフォルトの名無しさん
18/06/01 11:55:48.39 uCsHgk1n0.net
・stack : protected listとして、必要なメンバをstackで明示的に公開する。
  ・listとstackのポインタに互換性がなくなる。

969:デフォルトの名無しさん
18/06/01 11:58:45.22 uCsHgk1n0.net
・assert、throw等で警告するだけのaddFirst、removeFirstをstack側に作りオーバーライドし、規約で使うなと言っておく。
  ・非常にダサい。

970:デフォルトの名無しさん
18/06/01 12:00:33.78 uCsHgk1n0.net
・基底クラスbasic_listを設け、そこからlistとstackを別に派生する。

971:デフォルトの名無しさん
18/06/01 12:12:54.27 SICoZSIN0.net
>>935
釣りか?
MSYSがあるからなんとか我慢して作業できるが
仕事以外でそんな苦痛を受けながらプログラミングなんかしたくはない

972:デフォルトの名無しさん
18/06/01 12:31:43.05 uCsHgk1n0.net
>>944
wslでおk。

973:デフォルトの名無しさん
18/06/01 12:33:20.56 uCsHgk1n0.net
wslを有効にしてコルタナにウブンツと言えばすぐ使えます。

974:デフォルトの名無しさん
18/06/01 12:41:08.30 SICoZSIN0.net
wslでWindowsネイティブなバイナリ作れんの?

975:デフォルトの名無しさん
18/06/01 12:43:01.01 Iz+jFShBM.net
>>944
> 仕事以外でそんな苦痛
でもどんな苦痛なのかは書けない w

976:デフォルトの名無しさん
18/06/01 12:44:36.05 uCsHgk1n0.net
さあどうだろ?
Linux側からWindowsのファイルは読めるけど。
環境設定が大変そうだな。
逆にWindows側からLinuxのファイルを直接変更したらだめらしい。

977:デフォルトの名無しさん
18/06/01 12:47:41.68 uCsHgk1n0.net
俺のおすすめの使い方は、Windowsバイナリはcl、Linuxバイナリはwsl上のgccで作る。
開発環境はVisual Studio2017、CMakeプロジェクトを使う。
これだけでWindowsとLinux両方対応できる。

978:デフォルトの名無しさん
18/06/01 12:51:07.74 SICoZSIN0.net
>>950
それ良さそうだな
今度試してみる

979:デフォルトの名無しさん
18/06/01 13:01:33.50 sIQxQP9sa.net
>>939-943
ありがとうございました。
Macを使っている人はいませんか?
コンピュータサイエンティストって大抵Macのノートパソコンを使っているイメージがあります。

980:デフォルトの名無しさん
18/06/01 13:11:39.88 pUOZzX0iM.net
>>952
mac使ったところでmacしか使えないだけ
本物になりたいならシェアが高いウインドゥスを使え
もしくはLinux

981:デフォルトの名無しさん
18/06/01 13:29:21.95 A9MSzynoM.net
>>944
別に補陀落渡海しても良いのよ

982:デフォルトの名無しさん
18/06/01 13:30:34.27 STCtC+aF0.net
>>952
Macの内部はUnixだから

983:デフォルトの名無しさん
18/06/01 16:26:14.37 WJ5uQBEIM.net
>>952
念の為、標準ライブラリにlistもstackもあるからね。
あと標準ライブラリのlistは継承して使えるように設計されてないからね

984:デフォルトの名無しさん
18/06/01 18:47:58.65 U3fjUVmpd.net
リスト構造のスタックなんて簡単なんだからゼロから作っちゃえば?

985:デフォルトの名無しさん
18/06/01 18:52:33.22 U3fjUVmpd.net
push pop size
copy move swap constructor destructor
くらいでしょ使うの
片方向でもいいだろうし

986:デフォルトの名無しさん
18/06/01 19:38:34.27 nSTFCyDP0.net
stackはlistではないし継承は間違ってるわな

987:デフォルトの名無しさん
18/06/01 19:48:21.87 uCsHgk1n0.net
俺、リストツリーっていうの考えたんだけど、聞きたい?

988:デフォルトの名無しさん
18/06/01 19:58:07.59 U3fjUVmpd.net
>>959
頭が硬いやつはソフトに向いてない

989:デフォルトの名無しさん
18/06/01 20:19:59.69 sIQxQP9sa.net
>>953
>>955
ありがとうございました。
>>956-959
実は、
最近出版された岩沼宏冶他著『データ構造とアルゴリズム』(コロナ社)
という本にスタックとキューのそのような実装が書いてあるんです。
まず連結リストをテンプレートを使って実装しています。
その関係で質問しました。
まえがきに「本書の前半ではC++言語での実装コードを示すが、これは
初学者によいコードを読ませることが目的であり、Art of Programmingに
つながるような解説を付記するように努力する。」と書いてあります。

990:デフォルトの名無しさん
18/06/01 21:27:36.17 naL+ZRGN0.net
下手が伝染るから、クヌースを取り寄せしたほうが良いぞ

991:
18/06/01 21:36:56.16 /qAuBE/I0.net
>>938
私なら委譲を使います

992:デフォルトの名無しさん
18/06/01 21:52:15.80 eT4/jjIPM.net
>>933
どんな用途を想定してるの?

993:デフォルトの名無しさん
18/06/02 01:50:36.43 z1beHaLa0.net
>>965
横レスだけど複数スレッドがあったとき
・どれかの終了を待つならjoinでは無理
・全ての終了を待つなら適当な順でjoin
というだけのことでは

994:デフォルトの名無しさん
18/06/02 07:25:22.85 uqsytqRM0.net
>>938
そういうことをやるなっていうのが「リスコフの置換原則」

995:デフォルトの名無しさん
18/06/02 07:40:27.42 SH+PTz7E0.net
「外から見えるインターフェースが変わらなければ
内部の具体的な実装がまったくの別物に変わっても使うのに支障ない」



996:いうオブジェクト指向のカプセル化だっけ、あのあたりの教材じゃなかろうか。 それと継承のアクセス制御の使い方。



997:デフォルトの名無しさん
18/06/02 11:23:31.53 SH+PTz7E0.net
派生クラスのアクセス制御、と書くべきだったかな。
意味は通じると思うけど、用語の使い方に厳しい人もいる故。

998:デフォルトの名無しさん
18/06/02 13:02:49.13 x6PfuSbY0.net
>>932
言葉足らずだったスマン
スレッドハンドルの配列があったとして、[i]についてjoinしたら[i]を再利用できる(再びスレッドをcreateしなおせば良い
、の意味
joinせずとも済むやり方もあるが、
(「重い処理かつ終了に時間が要するスレッド」の関数本体をそのままスレッドにするのではなしに、
普段イベントを待ち、イベントが来たら「重い処理かつ終了に時間が要するスレッド」の関数本体を普通にcallし、そいつがreturnしてきたら
 再びイベントを待つ、というループするスレッドとしてwrapすれば良い、等
結局「重い処理かつ終了に時間が要するスレッド」が使っていた資源が開放されたことを論理的に知る必要からは逃れられず、
一番簡単なのがjoinですよという意味で>>922ではjoinと言ったので察してホスイ、

999:デフォルトの名無しさん
18/06/02 17:26:29.14 RQ4rJlvL0.net
ほむほむ、ところでgtestとBoost.Testはどっちが良いですかな?

1000:デフォルトの名無しさん
18/06/03 18:24:16.97 gfv0Z2yCa.net
初心者脱出したいから課題くれ

1001:デフォルトの名無しさん
18/06/03 20:26:24.96 g8+eu/OT0.net
>>972
自分でこれまで勉強した範囲で疑問なり興味なり沸いてきて、あれこれコード書いて試して見ようとしたことは無かったの?
もし全くないのならもう諦めた方がいい。

1002:デフォルトの名無しさん
18/06/03 23:46:44.76 D70hzHzDd.net
>>972
純粋な言語部分
プリプロセッサ
標準ライブラリ
特定のOS, 特定のライブラリ
組み込み
どの辺の課題?

1003:デフォルトの名無しさん
18/06/03 23:58:49.35 /T91IteZ0.net
「計算機プログラムの構造と解釈」(SICP)を読んで演習課題を解いたら良い

1004:
18/06/04 19:13:33.43 gbEnuF2j0.net
>>975
まだ scheme 手習いが終わっていないのです(泣)

1005:デフォルトの名無しさん
18/06/06 22:04:43.09 2Ea3o2oY0.net
リトルインディアン、ビッグインディアンも教えない職場があるんだな。
おっさん、びっくりしたわ。

1006:デフォルトの名無しさん
18/06/06 22:13:02.59 JW9lzKor0.net
>>977
周知のこととして扱われているのかもしれませんね。
私は学校で教わりました。

1007:デフォルトの名無しさん
18/06/06 22:41:41.43 .net
>>977
インディアンかー
俺も教わった覚えないな

1008:デフォルトの名無しさん
18/06/06 23:17:12.31 jNE6zLei0.net
One little, two little, three little Indians

1009:デフォルトの名無しさん
18/06/06 23:33:53.26 m+Bnnm4Z0.net
エンディアンなのかインディアンだったかいつも忘れる
口語は混ざる

1010:デフォルトの名無しさん
18/06/06 23:36:43.24 zexNX0En0.net
>>979
インディアンは習ったろ

1011:デフォルトの名無しさん
18/06/06 23:48:14.36 .net
>>982
ネイティブアメリカンなら習ったけど🙄

1012:デフォルトの名無しさん
18/06/06 23:48:33.17 Ne6bz6Er0.net
ガリバー旅行記はいつどこで習うんだろう

1013:デフォルトの名無しさん
18/06/07 06:56:59.11 u4DD79290.net
「リトル・エンディアン」「ビッグ・エンディアン」て用語は
『ガリバー旅行記』が由来、という情報が載ってるサイトで、
主人公が漂着した小人の国、巨人の国のエピソードから…、とか
書いてあるのを見たことがある。ネタだったのかも知れないけど。

1014:
18/06/07 08:03:30.91 twFjtnTk0.net
>>985
それはほんと、小人国での卵の割り方にちなみます

1015:デフォルトの名無しさん
18/06/07 08:17:13.03 .net
>>986
ニホンゴムズカシイネ^^

1016:デフォルトの名無しさん
18/06/07 11:07:30.43 texCzkEwa.net
>>977
今どきバイトオーダー意識するようなプログラム書くような職場じゃなきゃ教えないよ
アライメントなんかも同様

1017:デフォルトの名無しさん
18/06/07 11:22:48.86 W9Xn18jEd.net
インディアンを教える職場って
どんな職場だよ

1018:デフォルトの名無しさん
18/06/07 11:49:27.36 ZMsL/8Fsd.net
だってオラはSEだから

1019:デフォルトの名無しさん
18/06/07 12:38:00.08 pGQiQE2u0.net
SEなら尚更知っておかないと
日本はなんちゃってSEばっかだもんなw

1020:デフォルトの名無しさん
18/06/07 13:14:35.77 W9Xn18jEd.net
SEとインディアンの関係は?

1021:985
18/06/07 13:15:06.93 u4DD79290.net
>>986 調べたら小人同士の戦争の原因なのね。巨人国は関係ないな。
実は空の国の「学者の無意味な論争」の一例だと思い込んでいたんだわ。
>>989 「ウチはCのコーディングスタイルとしてAT&T式を基本とします」
ってところはあるかも知れん。

1022:デフォルトの名無しさん
18/06/07 20:44:47.09 BA7hChNz0.net
>>988
貴様が知る必要はない!

1023:デフォルトの名無しさん
18/06/07 20:48:11.43 DJdTp6lo0.net
何でもネットに繋がらなきゃならないこの時代にhtolやltohを避けて通れるもんなのか?
PHPしか触らないWeb屋ならともかくここC++スレだぞ

1024:デフォルトの名無しさん
18/06/07 21:46:11.03 XXEPBZnxM.net
今時C++と言えどhtol()とかltoh()なんて低レイヤーの関数使うことなんて滅多にないだろ

1025:デフォルトの名無しさん
18/06/07 21:50:55.26 gS6wfz1ca.net
>>995
ソフトウェアがなんでもかんでもネットワークに繋ぐ必要があると思ってるの?ここC++スレだぞ

1026:デフォルトの名無しさん
18/06/07 22:31:28.79 .net
C++使うくらいだからXMLとかJSON使うんだろ

1027:デフォルトの名無しさん
18/06/07 23:10:47.05 C4iY9p8E0.net
>>998
utf16はどうしたらいいの?

1028:デフォルトの名無しさん
18/06/07 23:16:41.18 B+7Xk0Ks0.net
続きはwebで

1029:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 68日 2時間 56分 35秒

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


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