1 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:20:06.25 ID:o3PNwIlC0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part134 mevius.5ch.net/test/read.cgi/tech/1516406742/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:59:04.29 ID:Nj0xu+770.net] この64ビットが主流になりつつある時代にSTL使うとファイルサイズガァとかよく耳にしますが、時代についてこれていない老いぼれの戯言なのでとっとと見限って先に進みましょう ----- テンプレ ここまで -----
3 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 00:05:25.36 ID:DhlCxYuo0.net] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイ
4 名前:を使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。 ---- テンプレ ここまで ---- [] [ここ壊れてます]
5 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 00:06:31.91 ID:DhlCxYuo0.net] >>1 乙だが さすがに>>2 がテンプレとかないわ;;
6 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 00:37:05.49 ID:O5KM55R90.net] 両方テンプレじゃないから死ね
7 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:00:30.68 ID:EwuQ9U5u0.net] えー、どっちもワシ(>>1 )が貼り付けたわけじゃないのにー
8 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:13:57.19 ID:lZy6W71f0.net] このRTL使うとファイルサイズが減るとかおもいっきり頭悪い回答した奴とSTLをごっちゃにするテンプレいい加減やめれ STL使っている奴=無能に見えるではないか
9 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 02:21:27.54 ID:lZy6W71f0.net] コレ老いぼれが仕掛けているマッチポンプにも見えなくはないしな 毎回毎回クソみたいなテンプレ貼りまくって見苦しいぞまったく
10 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 00:14:36.74 ID:xAju6wwe0.net] C++を原発制御に使うか?という質問に帰着する
11 名前:デフォルトの名無しさん [2018/04/03(火) 00:33:19.68 .net] >>9 特に問題ないやろ
12 名前:片山博文MZ mailto:sage [2018/04/03(火) 00:38:42.54 ID:GFbsNNGId.net] 原発にヒープメモリーは使いたくないだろ。
13 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 00:59:39.78 .net] 原発も飛行機も、自動車も?固定メモリ空間で、確保解放なんて一瞬の手間すら惜しんで全部上書きでしょ(知らんけど)
14 名前:片山博文MZ mailto:sage [2018/04/03(火) 01:34:24.25 ID:GFbsNNGId.net] インターネットにつながってる原発とか、USB接続ができる原発なんてあり得ないから。フロッピーもダメ。ROMカセットならギリギリOK。
15 名前:片山博文MZ mailto:sage [2018/04/03(火) 01:37:02.89 ID:GFbsNNGId.net] EMP対策とか防火対策とか銃器対策もしないといけない。
16 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 01:39:39.79 ID:sF82ozBk0.net] 確実な「保証」が必要だからなぁ。 リアルタイム性の要求もそうだが、 ありそうにないほどの最悪条件でもメモリ確保に失敗してはいけないので、 確実に見積もれるようにするにはヒープメモリの使用を避けるのは妥当なことも有りうる。 メモリ確保に失敗したら安全な終了シーケンスの実行も難しいだろうし。 起こりうるすべてのパターンで new が失敗しないことを検証するなんて 面倒くさい (というより事実上不可能な) ことは出来んだろ。 本当にシビアな制御が必要な原発レベルなら定理証明系とかも使ってるんじゃないかな。
17 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 01:44:54.43 ID:0fcGXeNT0.net] https://i.imgur.com/oNGIigg.gif 全部アナログに任せてるから操作間違ってこんなんになっているんやろ
18 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 01:50:56.68 ID:i3mVMD7F0.net] コントロールルームの写真見るとありえんくらい計器とボタンついてるから ソフトウェア自体ほとんど使われてないだろうな
19 名前:片山博文MZ mailto:sage [2018/04/03(火) 01:57:10.44 ID:GFbsNNGId.net] マウスで原子炉の制御棒を操作するのか? 冗談すぎる。
20 名前:片山博文MZ mailto:sage [2018/04/03(火) 02:01:20.38 ID:GFbsNNGId.net] 作業員に1人テロリストが混ざっていたとしても、原子炉を暴走させることが出来ないようなシステムにしないといけない。
21 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:13:51.81 ID:i3mVMD7F0.net] 不便にすることが最も外部からの攻撃に対して強い
22 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:15:27.83 ID:mF5KVDd50.net] 二人が同時にキースイッチをカチッとオンにすると発射!
23 名前:片山博文MZ mailto:sage [2018/04/03(火) 02:23:04.91 ID:GFbsNNGId.net] 原発関係の諜報活動はかなりシビアで、どこかの国では、国家犯罪的なコンピューターウイルスにやられて原発が稼働できなくなったらしい。
24 名前:片山博文MZ mailto:sage [2018/04/03(火) 02:32:26.64 ID:GFbsNNGId.net] 16bit時代は、友人にウイルスを集める奴が、居たよな。今では所持だけで犯罪になっちゃったけど。
25 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:35:57.94 ID:mF5KVDd50.net] 原発は既に発電原価が他の発電方法よりも割高なんで、やめても良い 核廃棄物の処分方法すら未だに手が付けられないんだし 他の国は土地があって置き場所に困らないが、日本はそうでは無いよ
26 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:41:11.28 ID:i3mVMD7F0.net] >>23 その頃はしょせん個人がいたずら目的で作ってた程度だからな 今の違法なビジネスで作られてるものとは性質が違う
27 名前:片山博文MZ mailto:sage [2018/04/03(火) 02:46:57.19 ID:GFbsNNGId.net] あの頃は、ウイルス対策の概念が浸透してなくて、雑誌の付録にもウイルスが付いていたらしい。MS-DOSとWin9x時代のデジタル発掘には危険が伴う。
28 名前:片山博文MZ mailto:sage [2018/04/03(火) 02:51:53.34 ID:GFbsNNGId.net] ウイルス蔓延に対する答えが、プログラムファイルの保護、ウイルス対策、UAC、SmartScreen、デジタル署名なんだよな。
29 名前:片山博文MZ mailto:sage [2018/04/03(火) 02:53:31.90 ID:GFbsNNGId.net] C++20では、生ポインタが非推奨になるんだよな?
30 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:57:29.37 ID:i3mVMD7F0.net] >>28 生ポインタを取り出すstd::to_addressが追加されるんだが
31 名前:片山博文MZ mailto:sage [2018/04/03(火) 03:08:11.37 ID:GFbsNNGId.net] じゃ、勘違い。 株価を見るに、インテルも安泰じゃないようだ。
32 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 03:11:08.11 ID:i3mVMD7F0.net] リスクオフで世界的に株安なだけでインテルの業績が悪化しているわけではない
33 名前:デフォルトの名無しさん [2018/04/03(火) 07:51:19.92 .net] >>31 しったか乙 アップルがIntel捨てるからだよ
34 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 08:03:30.55 ID:wc7Iq10c0.net] ん?ノートがARMにでもなるの?ちょっとむりない?
35 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 08:15:32.96 ID:4cz+HfdtF.net] 独自CPUだよ 林檎だしアーキから独自じゃないの?
36 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 09:37:51.60 ID:wc7Iq10c0.net] >>34 あいほんはARMベースじゃなかったっけ。自社カスタムしてるけど。
37 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 10:39:38.27 ID:3tygYxHf0.net] 仮にインテルから自社製造に切り替えが本当だったとしても、 ARMかAMDみたいな互換の
38 名前:ヌちらかじゃないかな 仮にARMだったらRISCに戻ることになるのか そんな変更を強行出来るのはアップルくらいなもんだな [] [ここ壊れてます]
39 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 11:22:41.72 ID:8N8wvrwRM.net] これまでのニュース記事 ・独自CPUを開発中 ・iphoneアプリをmacbookで動かせるようにする ・1000ドル未満のmacbookを追加する つまりはこんなとこでしょ。 ・macbookはARMアーキのカスタムCPU ・proはIntel CPUとカスタムCPUのデュアル構成 スレチなのでもうやめる
40 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 12:06:02.87 ID:i3mVMD7F0.net] >>32 最近の下げ調子からちょっと戻したところをイースター休暇を狙って仕掛けがあったんだが 個別のちょっとしたニュースの影響なんて掻き消える事態なんだよ ITだけでもほぼ全部下げてる https://stocks.finance.yahoo.co.jp/us/ranking/?kd=4&tm=d アップル 前日比-1.10(-0.66%) マイクロソフト 前日比-2.75(-3.01%) アマゾン・ドット・コム 前日比-75.35(-5.21%) IBM -3.36(-2.19%) グーグル -25.32(-2.45%) インテル 前日比-3.16(-6.07%) エヌビディア -10.54(-4.55%) AMD 前日比-0.52(-5.17%) クアルコム -1.60(-2.89%) オラクル -0.74(-1.62%) フェイスブック -4.40(-2.75%) ツイッター 前日比-0.97(-3.34%) ヒューレット・パッカード -0.78(-3.56%) シスコ・システムズ -1.88(-4.38%)
41 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 21:56:39.00 ID:eMYrGYMY0.net] >>15 >メモリ確保に失敗したら安全な終了シーケンスの実行も難しいだろうし。 これに関しては起動時にまとまったメモリを終了処理用にmalloc()しておくという古典的なテクニックがある (1 MBのメモリを起動時にmalloc()しておき、ヒープメモリが無くなったらそいつを解放すれば 終了処理に1 MB使える メイヤーズの本にも載ってる
42 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 06:41:13.40 ID:5k6f4LQE0.net] >>39 それJAVAがやっててすごい評判悪い。
43 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 08:49:31.33 ID:Ls5GP4D6M.net] Javaの評判で良いのなんて心当たり無いかも
44 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 20:06:00.30 ID:kRSnmS570.net] Java最高!プログラムの未来はJavaにある!面倒なメモリ管理もなくなるし移植でコード書き直す必要もなくなるぞ! それに引き換えC++(笑)ときたら、数年後には特殊用途以外では消えてるね。まあその特殊用途もCとアセンブラで充分だけどな(プ とか言われてた時代もあったんです 本当だよ
45 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:24:30.34 ID:g8Q3GJCm0.net] Java実行するチップもあったが夢の跡
46 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 22:54:27.67 ID:aEQNvaBv0.net] C++とかいまや高位合成でそのままハードウェアに
47 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 22:56:36.02 ID:do3bz0SM0.net] Javaとか百害あって一利あるかないかのレベル
48 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 05:14:09.23 ID:KAa2PFgc0.net] class Manager { public: template <class T> static void add(std::string key) { auto inst = std::make_shared<SuperClass>(new T()); Manager::m_data[key] = inst; } } 使用例 Manager::add<SubClass>("key1"); こんなことがしたいんだけどnew T()のところでエラーが出る C2248 'SubClass::SubClass': private メンバー (クラス 'SubClass' で宣言されている) にアクセスできません。 解決策を教えてください SubClassはSuperClassから派生させてコンストラクタSubClass(){}を追加しただけです
49 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 05:18:59.30 ID:KAa2PFgc0.net] すみません派生クラスのコンストラクタにpublic:つけてませんでした・・・
50 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 05:45:20.00 ID:KAa2PFgc0.net] いろいろ修正したら解決しました
51 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 08:26:54.03 ID:L9k+v76Td.net] make_shared使ってるのにnewするなんて
52 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 08:38:48.75 ID:KAa2PFgc0.net] newもけしました
53 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 20:15:16.61 ID:SmaaQ+MA0.net] こうしなさい auto inst = std::make_shared<T>(); Manager::m_data[key] = std::move(inst);
54 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 20:38:45.12 ID:B7cMgYJ4M.net] まずはManagerとかControllerとかいった名前をたやすく使うのをやめるべき。 もちろんそういった名前が適切な場合も多々あるが、初心者が使う場合、たいていオブジェクト指向設計に失敗している。
55 名前:デフォルトの名無しさん [2018/04/05(木) 20:44:22.17 ID:Qwh0cfWA0.net] その主張前にも聞いたけど実にくだらない
56 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 20:54:24.03 ID:BAXwN9iv0.net] >>51 なんで?シェアードポインタに限っては内部カウント増えてコピーされるだけだよ。 うにーくはmoveしたいけど、mapには入らないみたい。
57 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:08:32.94 ID:SmaaQ+MA0.net] 違うよ ちゃんと実際の型でmake_sharedしてからshared_ptr<SuperClass>に入れろって言ってるの
58 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:42:13.44 ID:kzoSJIbv0.net] せっかく make_shared 使うのに明示的に生ポインタを new する人って… というようなことだろ
59 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:56:01.48 ID:BAXwN9iv0.net] あー、なるほど。すまんね。
60 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 01:37:22.74 ID:Mgh91ASd0.net] auto変数はスコープ外れたらどうせ破棄されるしmove要らない
61 名前:名無し@キムチ [2018/04/06(金) 20:16:12.73 ID:VpnYoE0I0.net] いままでC♯使ってたけど、最近つーかおととしくらいからC++使い始めたんだよ。 そしていろいろ見ているうちにファイルの作成→3Dシーンというのがあったので、作成したら、 何もオブジェクトの入ってないシーンだけの画面が出てきたわけよ。 このシーンにオブジェクトを入れるにはどうすればいいの? またウインドウズのGUIの実行ファイルからこのシーンを出すにはどうすればいいの? つーかそもそもGUIの実行ファイルからこのシーンを出せるの? このようにまだ右も左もわかってない状態なんで、よろしくご教授お願いしますよw
62 名前:名無し@キムチ [2018/04/06(金) 20:17:16.93 ID:VpnYoE0I0.net] >最近つーかおととしくらいからC++使い始めたんだよ。 ごめん、おとといくらいからの間違いだったよw よろしくご教授たのむよ!!
63 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 20:26:20.68 ID:TFjbUU5Da.net] おととい来やがれ と言ってみる
64 名前:片山博文MZ mailto:sage [2018/04/06(金) 20:34:38.59 ID:eB6IhESGd.net] >>59 自分の環境くらい理解しよう。UnityなのかUnrealなのか。
65 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 20:36:14.26 ID:gYiRH0WM0.net] 何を言っているのかわからないし 特定のプラットフォームの話ならそっちで聞くべき
66 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 21:01:12.49 ID:RWHjeoGDa.net] YAMLをC++で読む簡単な方法はなんですか? LibYAMLなんですかね
67 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:11:46.44 ID:eB6IhESGd.net] >>64 https://github.com/jbeder/yaml-cpp これが一番良さそう。星がたくさん付いてるし。
68 名前:名無し@キムチ [2018/04/06(金) 21:18:03.84 ID:VpnYoE0I0.net] >>62 いや、いま使ってたのはUnityでC♯だったが、 それとは別にVisualC++とFBXSDKでってのをやってみようと思っておとといから始めたわけだよ。 でFBXファイルを読み込んでノードの取得あたりまでは進んだけど、 よく見るとVisualC++のファイル新規作成に3Dシーン(FBX)ってのがあるわけ。 もしやこれ使うとFBXSDKはいらないのかな?とも思ったりしたんだけど、 何しろまだ右も左もわからないし、その3Dシーンにオブジェクトを置くやりからもわからないし、 そのシーンを一応とってつけてつくってみたウインドウズ実行ファイルから呼び出すためのコードの書き方もわからないしで、 こうやってみなさまにご教授を求めた次第ですよ!!
69 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:21:11.15 ID:eB6IhESGd.net] 私の認識が正しければ、SDKはSoftware Development Kitだから、実際の実行時に使うライブラリーのことだろうよ。
70 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:23:42.24 ID:eB6IhESGd.net] 実行時に動かすなら、SDKにリファレンス(またはドキュメント)があるはずだ。
71 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:27:19.39 ID:eB6IhESGd.net] ドキュメントがないなら、そんなマイナーなフレームワークを使うな、で終わり。
72 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:29:52.65 ID:eB6IhESGd.net] ゲーム製作板か、CG板の方がいいかもしれない。
73 名前:名無し@キムチ [2018/04/06(金) 21:32:34.54 ID:VpnYoE0I0.net] >>68 まだ正式なリファレンスはいろいろ暇がなくて読んでない。 日本語で簡単に解説してあるウェブサイトは見たけど、 取得したFBXファイルのいろんな情報を文字列で表示するプログラムが載ってるだけで、 実際にその3Dオブジェクトを画面に表示する方法が載ってない。日本語のサイトで解説してあるのは、どうもここまでみたいなので、 やはり英語の正式なリファレンスを見ないとダメかな?www
74 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:35:02.97 ID:eB6IhESGd.net] ゲーム製作板に、くわしく知ってる人が居るかも知れない。
75 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:39:40.26 ID:eB6IhESGd.net] 業界へ出るなら、英語アレルギーは克服すべし。自動翻訳が使えれば、詠めるかもしれない。蘭学から学べることは多い。
76 名前:名無し@キムチ [2018/04/06(金) 21:40:42.10 ID:VpnYoE0I0.net] >>70 >ゲーム製作板か、CG板の方がいいかもしれない。 いやゲームはもう作りたくないし、CGも特に興味ない。 実はMakeHumanみたいな3Dキャラ作成ツールがつくりたくてね。 まだ始めたばかりで、そこまでの距離は100億光年ばかりあるけど・・・ これってやっぱりちゃんとしたプログラム技術板向きの話題だよね?
77 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:42:51.27 ID:eB6IhESGd.net] 器の小さい人には教えないよ。時間のムダだからね。
78 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:48:02.69 ID:eB6IhESGd.net] ゼロから3D作りたいなら、DirectX, OpenGL, Valkanあたりを勉強することになる。 しかし、ゲームエンジンがなければ、動く3Dは手間がかかる。
79 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 21:49:10.94 ID:RWHjeoGDa.net] >>65 ありがとうございます!
80 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 21:50:43.17 ID:RWHjeoGDa.net] >>76 DirectX便利ですよね 魚眼を再現しようとして挫折しましたが...
81 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:51:55.72 ID:eB6IhESGd.net] iPhoneXでリアルタイムでVtuber作れる時代に素人が3Dモデラー作るのは、技術のムダだろう。
82 名前:片山博文MZ mailto:sage [2018/04/06(金) 21:56:32.87 ID:eB6IhESGd.net] 数学のベクトル、射影、非ユークリッド幾何学が理解できるくらいの数学力がないと魚眼レンズはムリだろう。ムリムリ。
83 名前:片山博文MZ mailto:sage [2018/04/06(金) 22:00:38.96 ID:eB6IhESGd.net] 物理学的に考えると、魚眼は屈折率の差から発生する現象だから、モデラーの物体に屈折率を設定するだけでいい。
84 名前:片山博文MZ mailto:sage [2018/04/06(金) 22:05:13.65 ID:eB6IhESGd.net] カメラの特性で、レンズの広角が設定できればそれに越したことはないが。
85 名前:片山博文MZ mailto:sage [2018/04/06(金) 22:10:52.66 ID:eB6IhESGd.net] 「広角 DirectX」で検索。 https://msdn.microsoft.com/ja-jp/magazine/dn745869.aspx
86 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 22:14:45.90 ID:Qe7eZ8vzM.net] >>80 エピポール幾何はいるでしょうねぇ AR/MR/VRするなら
87 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 22:23:28.39 ID:RWHjeoGDa.net] >>83 度重なるありがとうございます。 勉強します。とりあえず処理重そうです(・・;)
88 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 22:30:22.55 ID:gYiRH0WM0.net] ゲーム作ろうと思っても大体はゲームエンジン作り始めて途中で飽きてやめる
89 名前:片山博文MZ mailto:sage [2018/04/06(金) 22:30:40.49 ID:eB6IhESGd.net] CGもオブジェクト指向になっているから、撮影スタジオで実際に物体やカメラの位置を決めるのと同じように、シーンを構築すれば、それが映像になる。
90 名前:片山博文MZ mailto:sage [2018/04/06(金) 22:57:17.05 ID:eB6IhESGd.net] ニュースセンターで使われるような、再現CGを自由に作れるようになったら、引っ張りダコだよ。
91 名前:片山博文MZ mailto:sage [2018/04/06(金) 23:06:06.99 ID:eB6IhESGd.net] そうなったら、映像クリエイターになって仕事を請け負って独立できるぞ。プログラマーよりも働き甲斐があるかもしれん。
92 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 23:07:50.12 ID:gYiRH0WM0.net] どっちも薄給
93 名前:デフォルトの名無しさん mailto:sage [2018/04/07(土) 00:36:31.30 ID:Y5tUUVb30.net] やたら伸びてると思ったら1人あたりのレス数多すぎだろ(しかも知らんことに口出し過ぎ fbxsdkは昔ちょっとしか触ってないが、多分そのVSの3Dシーン作成ってのは3Dのモデルやシーンを.fbxに書き出すプロジェクトじゃね? そういうのは多分Maya使った方が早いしfbxsdkはどっちにしても要る あとDirect3D使うならそっちのスレ行ってくれ
94 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 02:00:13.10 ID:xND6FkKma.net] C++で用意されているキャストと cのi=(int)j みたいなキャストの違いがよくわからない
95 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 02:09:06.48 ID:+gqqNGFK0.net] static_cast … 無理のない互換性のある変換。 reinterpret_cast … int から void* 等への強制変換 c の ()キャストと同じ。 const_cast … const 付きから const を無くしたりまたはその逆の変換。 dynamic_cast … 実行時型情報を使って実行時に型情報で互換性を見比べながらの変換。実行時型情報とのリンクが必須。
96 名前:はちみつ餃子 mailto:sage [2018/04/08(日) 03:14:37.94 ID:RvzgDq0H0.net] >>92 C スタイルのキャストは dynamic_cast 以外の C++ スタイルキャストを兼ね備えている。 安全なキャストも危険なキャストも見た目にわかんないから、 うっかり危険なキャストをしないようにカテゴリ分けしたやつを使った方がいいなって話。 reinterpret_cast や const_cast がどうしても必要な状況になったら、 それはそのプログラムが悪いデザインだというサインだ。 (デバイスドライバとか OS とかの低水準プログラムだと仕方なく使う機会は多いかもしれないけど)
97 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 06:15:21.60 ID:fQMOYFpe0.net] 『プログラミング言語C++』第4版のどこだったかに、 「危険なキャストを行っているソース箇所が目立つように reinterpret_cast<型> のような長い綴りで見た目もスマートでない キーワードを選んで導入した」みたいなことが書いてあったな。
98 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 11:13:04.50 ID:NQAA1W7E0.net] すいませんchar str[1000]に格納されてるこの文字列を、str2[0][]=64 str2[1][]=9 という感じで上手くデータだけ取り出す方法は無いでしょうか i.imgur.com/MMYajmf.jpg
99 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 11:13:28.36 ID:CEYO7YYHa.net] ありがとうございます 基本的には見た目の話なんですね
100 名前:デフォルトの名無しさん [2018/04/08(日) 11:44:19.45 ID:rArjzNgz0.net] C形式のキャストは絶対に使うなって事だよ
101 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 11:44:37.07 ID:ySnMa92f0.net] >>96 cならsscanfかね c++ならregexを使うか そもそもc/c++でやりたい範囲ではないが
102 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 11:44:50.16 ID:wX43tNlZ0.net] >>96 テキストなのなら、一行ずつ読んで、=で半分にしましょう。 んで、""の中の空白以外を全部取り去って、std::mapにでも突っ込みましょう。
103 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 12:07:31.24 ID:NQAA1W7E0.net] >>99 >>100 めっちゃ難しそうな回答きた・・ ちょっと調べて頑張ってみますありがとうございます
104 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 12:17:01.56 .net] danger_cast は言い過ぎとして、unsafe_cast くらいにして欲しかった
105 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 12:19:03.34 .net] hansode_tampan_cast
106 名前:デフォルトの名無しさん [2018/04/08(日) 12:34:24.71 .net] >>96 ・str2はポインタの配列、idxはstr2の添字とする ・1文字ずつループして以下を処理 「=」が現れるまでまで読み飛ばす 「 」「"」以外の文字が現れたらstr2[idx++]にその文字へのポインタ格納 ・「;」までスキップして¥0に置き換え
107 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 12:36:55.36 ID:NQAA1W7E0.net] >>104 なんかできそう!やってみますありがとうございます!
108 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 13:00:09.46 ID:CRecF1KTd.net] reinterpret_cast をポインタ以外に使うのはない
109 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 13:13:04.30 ID:IdsKnaEwM.net] c向けのライブラリをc++で開発するときは躊躇なく使うかな>reinterpret_cast あとはargとかparamとかいう名前の引数に好きなデータを突っ込みたいときとか。
110 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 13:57:50.07 .net] reinterpret_castはゼロオーバーヘッド?
111 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 13:59:32.17 ID:wX43tNlZ0.net] コンパイラさんが解釈かえるだけだから。新しくなにも確保しない。
112 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 14:55:18.41 ID:XIh7sWbQ0.net] バイト単位の処理をするときに必ず出てくるだろ
113 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 15:41:01.45 ID:drN9+cfC0.net] >>107 の「あとは」以下の用例多いよね。 スレッドのエントリポイントの引数だの libcurl のコールバックの引数だのそんなので
114 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 17:17:06.93 ID:9PMBUXuM0.net] バリアント型が無いために野蛮なキャストが生きながらえるんじゃ さっさとリフレクションとプロパティーとバリアント型を規格に盛り込みなさい
115 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 17:26:02.77 ID:XIh7sWbQ0.net] >バリアント型が無いために野蛮なキャストが生きながらえるんじゃ 誰も殺そうとしていない
116 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 17:48:08.38 ID:yoJPjKyN0.net] Windowsとかのメッセージのパラメータなんて、 キャストしないとなにもできないけどな
117 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 20:53:29.38 ID:B7amW+qmM.net] >>112 > さっさとリフレクションとプロパティーとバリアント型を規格に盛り込みなさい C+++でも作って勝手にやっててくれ
118 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 21:04:08.52 ID:aevyI+Fp0.net] C++++でしょ ill-formedだけど それでこそアホどもに相応しい
119 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 11:03:03.24 ID:Ecf+pvidM.net] static_castは長いから、ただのcastにしてほしい その方がreinterpret_castのunsafe感が高まる
120 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 11:19:04.00 ID:ClY8G0uJa.net] デフォルトをstatic_castで解釈しないのはなぜ?
121 名前:はちみつ餃子 mailto:sage [2018/04/09(月) 11:23:19.28 ID:fbTUuQs/0.net] >>117 #define cast static_cast
122 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 15:59:42.60 ID:AbJVhraD0.net] >>118 互換性
123 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 22:38:54.59 ID:J7f8Y+mC0.net] >>118 互換性には2種類ある クラスポインタ変換の場合を例に挙げると 一つは拡張クラスからベースクラスへのアップキャスト こちらはキャストの明示は必要ない暗黙の型変換が行える もう一つはベースクラスから拡張クラスへのダウンキャスト こちらはベースから拡張クラスへの変換に確証が得られている わけではないのでstatic_castを用いて変換してやらないといけない このときdynamic_castを使うと実行時に型をチェックしてくれる のでよりstrictな変換を行わせることができる できるといってもエラーを発生させるかさせないかの違いだけだけど
124 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 00:58:36.89 ID:KTsfJjko0.net] >>118 そら互換性のためでしょ
125 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 05:22:39.46 ID:AY1cx8Cu0.net] >>121 それは互換性じゃなくC++独自の話だね 互換性というからには何と互換なのかという相手がいる ちなみに、かつて暗黙dynamic_castが提案されて否決となった
126 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 09:48:42.17 ID:PdcJoG7U0.net] コンソールプログラムのwhile()ループで1文字入力したらループを抜けるときに使うやつって何でしたっけ・・ while(!getchar())だと文字を受けるまで処理がとまってしまいますが、止まらないやつがあったと思うのですが
127 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 10:20:00.71 ID:AY1cx8Cu0.net] 標準に「止まらないキースキャン」はない conio.hのgetch()や ioctl.hのioctl()あるいは windows.hのGetKeyState()のような 処理系依存の関数が必要
128 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 10:30:44.25 ID:h0HOed+p0.net] linuxならファイルディスクリプタにselectが使えるけど windowsの場合はファイルディスクリプタとソケットがまた別物だし
129 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 11:04:35.34 ID:PdcJoG7U0.net] >>125 getch()絡みで調べてたらkbhit()って出てきましたこれです ありがとうございました ちゃんと任意のキー押したら抜けれました
130 名前:はちみつ餃子 mailto:sage [2018/04/10(火) 11:10:44.06 ID:141aKXKv0.net] それって結局はビジーループの一種じゃね? やりたいことにもよるけど、基本的にはあんまりよくない方法だと思う。
131 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 08:10:31.14 ID:T4s6uHOl0.net] >>128 まずいですかね? 一日ランニング試験してみたんですが良い感じに動いてるのですが・・
132 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 09:27:42.36 ID:WgIjYyd40.net] ビジーループにSleep挿入して100msづつ位休む感じでアイドルに見せ掛けるハッタリを噛ます
133 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 12:28:20.43 ID:nyTWTQlG0.net] はったりじゃないでしょ それは合格
134 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 12:01:39.22 ID:bHi1VZVu0.net] 低優先度タスクからのプリエンプションが無いOSでSleep(100 ms)したら 優先度関係無く他タスクに100 msを超えて待たされてしまうかもしれない Sleep()は実行権放棄の呪文としては強力すぐる…
135 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 13:25:03.37 ID:RVvtBgPf0.net] DOS並にコンソールがクソな環境も珍しいよな unixベースのシェルに比べるとこんな貧相なものがよく生き残ってこれたとおもふ
136 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 14:27:12.94 ID:AqyGMwU/0.net] >>132 ウィンドウズの話だけど、threadヘッダのスリープは起こし忘れが少ない気がする。
137 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 22:00:06.17 ID:7AzbU2hj0.net] 未だにGUIがまともにならないLinuxも珍しいよな
138 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 22:16:23.39 ID:B3QB9Fpb0.net] >>135 君に期待しても良いのかな?
139 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 22:26:38.67 ID:jn5/AQ8F0.net] 誰かがデザイナ雇わないとな
140 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 22:31:21.78 ID:Tt8LTURP0.net] まともを定義せよ
141 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 22:47:45.04 ID:jn5/AQ8F0.net] 美しいGUIか使用上十分なGUIか
142 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 23:04:06.39 ID:WAEnZz2X0.net] C
143 名前:lass A { void A(B* &b) { } }; [] [ここ壊れてます]
144 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 23:06:11.46 ID:B3QB9Fpb0.net] 毎日使う上では美しさはいらない。シンプルで頼む
145 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 23:08:51.81 ID:WAEnZz2X0.net] 済みません、途中送信してしまいました・・・ Class A { B* _b; void A(B* &b) { _b = b; _b = new B(); } }; B* b; A* a = new A(b); b←newされてない・・・ クラスAのコンストラクタでクラスBのインスタンスを受け取り newで新たなインスタンスを作成したうえで返そうと思います。 しかし上記のようなプログラムを作成してもインスタンスbは newされてませんでした。 どうしたらbをnewしたうえで返すことができるようになるでしょうか?
146 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 23:15:39.02 ID:EkNosKh20.net] void A(B** b) { *b = new B(); } でいいんでないの
147 名前:デフォルトの名無しさん mailto:sage [2018/04/14(土) 23:23:21.44 ID:9kNArSDya.net] 馬鹿だから分からないんだが教えて インスタンス渡してからnewするのはなぜ? ポインタを参照にする意味とは?
148 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 00:33:02.73 ID:/OvgYAab0.net] >>142 > void A(B* &b) > { > _b = b; > _b = new B(); > } 下の方は b = new B(); としたかったんじゃないのか
149 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 00:44:36.47 ID:b/ktaKN+0.net] A(B*&b) { b=new B(); _b=b; } 頭悪いだろオマエラw
150 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 00:52:36.30 ID:b/ktaKN+0.net] A(B*&b){_b=b=new B();} もしくは一発で書けば何の問題もおこらんよ
151 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 00:57:54.63 ID:/OvgYAab0.net] 受け取ったインスタンスを全く使ってないがそれが意図した動作なのか
152 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:00:18.78 ID:b/ktaKN+0.net] 参照オブジェクトの概念がよくわかってない 学び直せと言いたい
153 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:04:57.02 ID:VAOccv/70.net] >>148 インスタンスなんて受け取ってないぞ
154 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:09:03.26 ID:/OvgYAab0.net] >>150 >>142 で「インスタンスを受け取り」と書いてあるから ポインタ(の参照)でだけどインスタンスを渡しているのだろう 何故受け取っているのかとかの説明は無理だが
155 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:19:33.61 ID:b/ktaKN+0.net] それにしてもbをnewするとかイミフ 何もしてないじゃんw
156 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:22:46.36 ID:b/ktaKN+0.net] 古いインスタンスを_bに格納して新しいインスタンスをbに返したいのか 新しいインスタンスを作成してbと_b両方に返したいのか どっちなんだよ
157 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:22:49.52 ID:/OvgYAab0.net] >>152 b を new するってのは >b = new B(); のことか?参照で返してるんだよ 何故返す必要があるのかはこれも答えられないが >>142 に new して返そうと思っていますとあるからな
158 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:30:17.78 ID:b/ktaKN+0.net] _b=new B() は見当たるが b=new B() ←こんな記述は見当たらないぞ 嘘もたいがいにしとけや
159 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 01:39:29.12 ID:b/ktaKN+0.net] >>142 コイツのソース見る限りbに対しては何もしてないでしょ
160 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 03:35:09.27 ID:mYZtkoVNd.net] すまんすまん >>142 >B* b; >A* a = new A(b); を見落としていた インスタンスを渡すといっておいてインスタンスを渡していないとは思いもしなかったw >>147 であってるんだろうね
161 名前:デフォルトの名無しさん [2018/04/15(日) 06:03:36.65 .net] >>142 > void A(B* &b) > { > _b = b; > _b = new B(); > } void A(B* &b) { B* new_b = new B(); b = new_b; _b = new_b; } こういうのは愚直に書けばええんや
162 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 08:25:34.99 ID:IUBKEb9a0.net] AのコンストラクタにBへのポインタのポインタだか参照だかを渡さなくても Bへのポインタと関係ないAのコンストラクタ、と A内部のBメンバへのポインタを返すゲッタ、との 組み合わせにする方が素直でねぇか? class A { B* _b; public: A() {_b = new B();} B* ptr_b() const {return _b;} }; int main(void) { A* a = new A(); B* b = a->ptr_b(); return 0; } 別に確保した「Bを格納すべき領域へのポインタ」を受け取って、 Aの初期化時にBの配置newを行わせたい、という意図かもしれないけど、 元の質問から想像を広げすぎてるよね。
163 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 10:01:16.50 ID:6WpjLuna0.net] Aが_bをdeleteするために管理するだけのクラスだとしたらスマポ使えという話になる
164 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 10:57:43.04 ID:Yi/sDJN50.net] 前に書き込んだことあるけど https://qiita.com/notenopg/items/40571e69986a58b888a0 どうじゃ
165 名前:142 mailto:sage [2018/04/15(日) 11:01:19.87 ID:GeT3puOg0.net] 舌足らずでもうしわけありませんでした・・・ クラスBのインスタンスをクラスAで処理していくためにコンストラクタでクラスBの インスタンスを参照受け取りする仕様にしました。 大半のケースではそのまま処理して終わり、なのですが まれに受け取ったクラスBのインスタンスをnewし直す必要がありまして その際受け取ったクラスAのメンバ変数 _b をnewしても受け取り元のインスタンスを newできないことに悩んでいました ただオブジェクト指向の観点から見るとあまり美しいプログラミングスタイルでは無いのかもしれませんね。 クラスBのインスタンスはクラスA内部で完全隔離処理するようにした方がいいのかもしれません
166 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 11:19:51.96 ID:6WpjLuna0.net] BをAしか使わないならAの中に隔離する 他でも使う必要があって、Aの外部でBの寿命を管理してるなら、AにrefreshB()みたいなBをnewし直した時に渡し直す関数を用意する でいいんじゃないの 本当にBをnewし直す(メモリ上再配置する)必要があるならだけど 実はB自体にreset()用意するだけで済む話のように見える
167 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 12:55:30.01 ID:eVQUY7wra.net] c++じゃポインタのこともインスタンスっていうのか
168 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 14:39:37.81 ID:rsq+XQj0M.net] >>164 2レス前も読めないのか
169 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 18:30:19.93 ID:51qZxk5sa.net] 理解不足を言い換えてミスしてない風にするのが流行ってるのかな
170 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 22:24:39.46 ID:vR7s+ZvT0.net] ミスって理解不足からくるじゃん
171 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 23:39:26.36 ID:Mp1WrgTGa.net] 質問あるのですが、 同一PC内の画面機能と処理機能のプロセス間通信はどうやるのが便利ですか? 画面更新速度は100ms周期くらいです。 共有メモリがいいと思ったんですが、ソケット推してる人がいてもやもや アクセス速度とかNICの通信量とか考えると共有メモリ一択な気がするんですが、どうなんでしょうか? パイプとマップドメモリはメリット無いので考えていません。
172 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 23:42:01.12 ID:sXJBpbWg0.net] 何を重視するか次第
173 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 23:43:30.47 ID:qZPDSYA20.net] 共有メモリ=マップドファイルのファイル無しやで
174 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 23:43:31.62 ID:51qZxk5sa.net] そもそも別にする理由は何? どんなものを想定してるの? プロセスは常に1対1なの
175 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 23:44:26.87 ID:sXJBpbWg0.net] OSは?
176 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 23:47:06.30 ID:51qZxk5sa.net] 同一PC内なのにソケットとNICの通信量って何か関係あるの?
177 名前:はちみつ餃子 mailto:sage [2018/04/15(日) 23:53:07.49 ID:aQ0USPFo0.net] >>168 ソケットって、その場合はUNIXドメインソケットのことだろ。 NIC は関係ない。 プロセス間通信としてはほどほどに速度もあって、ほどほどに疎結合なので十分に選択肢の範囲内だと思う。
178 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 00:28:23.74 ID:TXxoP4/a0.net] unix domain ソケットがお手軽で便利だけど 時代に合わせてパイプか tcp かなあ Windows でしか使わないならならcom使うのも簡便
179 名前:デフォルトの名無しさん [2018/04/16(月) 01:39:01.50 .net] 共有メモリだとリングバッファとか排他とか自分で作り込まなきゃいけんやろ ソケットならそのへん考えなくてええやん
180 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 02:21:40.05 ID:kGNRvKds0.net] windowsはファイルマッピングオブジェクトでしょ パイプでさえSYNCHRONIZE特権指定できないゴミなんだから
181 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 03:12:35.45 ID:HsbFINqV0.net] 標準入出力最強説
182 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 06:43:39.39 ID:kK8liqj6M.net] unix domain socket なんて使ったことないな 名前空間としてファイルの指定がいるし将来違うマシン間で動作させる時に変更量が多いしtcp/udpに比べてデメリット多くね?
183 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 07:06:03.32 ID:irvwqMpDa.net] >>173 ,174 共有メモリは例えば/dev/shmのRAM領域にあるメモリマップですよね 同一PC内のソケットのボーレートってほぼクロック数なんですか? 同一PC内の通信であったとしてもネットワークドライバの実装するプロトコルスタックを経由してしまうので、 その分のオーバーヘッドの分だけ速度が落ちる、という解釈ですが
184 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 07:17:01.48 ID:irvwqMpDa.net] iperfとかで同一PC内で速度測ったらどれくらいいきます? (1Gbpsな気が)
185 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 08:09:11.43 ID:TXxoP4/a0.net] >>179 ドロップしないから楽なんだよ デメリットは仰る通り
186 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 08:09:52.14 ID:TXxoP4/a0.net] >>180 あなた知識が色々おかしいので何も考えずに教えられたとおりにした方が良いですよ
187 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 12:07:30.90 ID:1SlhlQTu0.net] 昨日の安全確保支援士の試験にC++が出ていたが、メンバ変数にm_が付いていた。 さすがにポインタのpなどは付いていないが、ちょっと意外だった。
188 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 18:56:27.96 ID:aeexu7jXa.net] >>183 同一PCのTCP通信はどういう経路通るの?
189 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 20:00:43.80 ID:Iff3OzVTM.net] クライアント→OS→サーバかその逆
190 名前:デフォルトの名無しさん mailto:sage [2018/04/17(火) 17:50:44.77 ID:YRsoLN600.net] 未だにシステムハンガリアンなやつみたいに変なのとも うまく付き合うのがC++使いのスキルの1つだかんね
191 名前:デフォルトの名無しさん mailto:sage [2018/04/18(水) 00:38:34.88 ID:1Mo3YyI90.net] ↑ボゾビット
192 名前:デフォルトの名無しさん mailto:sage [2018/04/18(水) 02:18:47.96 ID:whM0Cl8U0.net] Windowsのネットワーク関係APIはkernel内に実装されていない 後は判るな?
193 名前:デフォルトの名無しさん mailto:sage [2018/04/18(水) 07:02:39.34 ID:bX/oR0u10.net] ネットワーク関係に限らずAPIはすべてサブシステムだね
194 名前:デフォルトの名無しさん mailto:sage [2018/04/20(金) 23:48:17.59 ID:MBksKo4b0.net] class Sample{ private: const double val{0.0} public: void set(double v){ static_cast<double>(this->val) = v; } }; VS2015での話なのですが、こんな感じのコードを先日見かけまして static_castでメンバ変数のconst外しができているように見えるのですけど、この動作は合法なものなのでしょうか? 試しにwandboxのclang 7.0で試して見た所当然のようにコンパイルエラーになったのですが・・・
195 名前:はちみつ餃子 mailto:sage [2018/04/21(土) 00:23:55.79 ID:7j/Wt31X0.net] >>191 const を外すのは const_cast じゃなきゃ出来ないことになっている。 だいぶん昔からそう。 でなきゃわざわざ分けている甲斐がない。
196 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 00:37:31.88 ID:WobodGQW0.net] const char *a = "hoge"; const char *b = "hoge"; この2つのポインタがa == bになることは保障されていますか?
197 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 00:42:18.95 ID:F9SE4HSu0.net] ない
198 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 00:47:40.36 ID:5uFute1E0.net] >>192 やっぱりそうですよね、何か特別な動作かとも思ったのですがVC++のバグか仕様なんですね・・・
199 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 06:06:21.46 ID:pETeS31u0.net] >>191 VS2017では警告されるぞ(おそらくVS2015でも) cl 191.cpp /c /W4 Microsoft(R) C/C++ Optimizing Compiler Version 19.13.26129 for x86 Copyright (C) Microsoft Corporation. All rights reserved. 191.cpp 191.cpp(7): warning C4213: 非標準の拡張機能が使用されています: 左辺値でキャストしました。 後はわかるな?
200 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 06:22:18.02 ID:wsxrLs1Z0.net] ポインタや参照のconst外しは合法だが なぜ合法なのか(合法にせざるを得なかったのか)というとmemory aliasing状況下での最適化の限界に関する ラクダ本ばりに長い議論を要する 悪寒、 プログラミング言語C++か何かでは古いライブラリのconst付け忘れにコード修正無しで対応できるYO!みたいな簡単な説明しかないが しかし左辺値のキャストというのはどうなの?
201 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 08:02:29.99 ID:POwjcYl50.net] static_cast<double>(this->val)自体は合法でしょ this->valと同じ値のdouble一時オブジェクトができるだけ おかしいのはそれに代入してること
202 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 11:34:19.85 ID:pETeS31u0.net] int x; (float&)x = 1;
203 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 11:34:55.76 ID:pETeS31u0.net] 途中で書き込まれてしまった int x; (float&)x = 1; //well-formed (float )x = 1; //ill-formed
204 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 17:24:24.80 ID:RLzEBpTGa.net] std:stringを引数や戻り値で使う場合、値渡しでも大丈夫ですか?
205 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 17:29:11.38 ID:xCJicIF50.net] 大丈夫
206 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 18:29:08.58 ID:i5tL4+9s0.net] stringは内部に参照カウンタを保持した共有リファレンサを持っているから&&使用せずに直で渡しても特に副作用もなく何の問題もないよ
207 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 18:53:47.99 ID:cFbiqY2T0.net] 今どきのstringはヒープじゃなくスタックを使ったりもするね 鬼のように最適化されている
208 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 19:26:19.72 ID:xCJicIF50.net] >>203 おじいちゃんそれ大昔の話ですよ
209 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 19:52:27.54 ID:i5tL4+9s0.net] >>205 貴様は過去を否定するのか? 温故知新という言葉を知らないのか? 青二才
210 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:00:35.45 ID:pGMCB93ha.net] ありがとうございます 勝手にデストラクタでdeleteされるとか色々考えていましたがそこは先人たちが考慮して作られているのですね
211 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:19:16.41 ID:5qvptAAaM.net] いやいや老害に騙されちゃだめですよ。 参照カウントなstringは大昔に禁止されているので、ちゃんと参照や右辺値渡等を使いましょう
212 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:23:51.32 ID:M8qmSLCN0.net] >>208 何言ってんだおまえ 頭悪すぎるにもほどがあるだろ
213 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:58:25.32 ID:ltJDDxzZ0.net] COWなstringは効率が悪くてマルチスレッドとの相性が最悪なのでとっくの昔に打ち捨てられました 規格のCOW実装許容するための記述はC++11でバッサリ捨てられました 今はCOWは規格違反です
214 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 21:39:50.50 ID:M8qmSLCN0.net] なん…だと!?
215 名前:デフォルトの名無しさん [2018/04/22(日) 21:51:37.63 .net] おじいちゃんw
216 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 21:54:34.58 ID:w7SgV4Bf0.net] 値渡しや戻り値で戻せることと、 std::string内部での(ヒープ)メモリ管理の詳細は関係なくね?? 引数や戻り値としてスタックに構造体を積めるようになった時点で値渡しや戻り値で戻せることとはほぼ自明 (よほど変なコピコンを定義してコピーをわざと不首尾に終わらせない限りそれはできる
217 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 23:24:42.33 ID:xCJicIF50.net] >>213 まあそうだけれど無駄なコピーはなるべく避けましょうということで
218 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 23:50:24.01 ID:usC+gOtq0.net] 今時のコンパイラは、そこらの人間よりよっぽど高度な最適化をするから、素直で単純なコードを書くと速くなる。 効率化するつもりで余計なことをすると、コンパイラの最適化を妨げて、かえって効率が落ちたりする。 本当に重要な部分は実測しながら試行錯誤、それ以外はできるだけ素直なコードを書く、ってあたりが基本。
219 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:28:01.46 ID:C1tu+nEe0.net] stringを値渡しせずにconst参照等々で渡すことはc++の基本なので、素直で単純なコードの部類に入ると思うが。
220 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:32:17.81 ID:Lxhtz3Yj0.net] って、あたりが基本(`・ω・´)キリッ 道化かw
221 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:37:49.36 ID:voecBiJS0.net] 先生!OpenMPへの展開も自動でやってくれるんですか?
222 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:46:26.60 ID:Lxhtz3Yj0.net] 値渡しを素直なコードとか言う人って他人の書いたコード読まないんだろうな 宿題以外で何か書いたことあるのか
223 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 02:04:07.25 ID:SgzxVTg+0.net] const type &
224 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 04:33:47.47 ID:WjBjSqCj0.net] const参照渡しが基本だったのって C++11 以前の世界の話だよね… 幸い、近頃はそんなコードをあまり読まずに済んでるけど。 余計なことをしない、ってのが大事なんだよ。 参照でなきゃいけない理由がなければ、参照を使うべきじゃないんだ。
225 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 06:33:47.30 ID:awXEdMZR0.net] どこの世界に生きてる人?
226 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 07:20:47.54 ID:voecBiJS0.net] どんな作品を作っているのかなぁ?
227 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 08:32:33.12 ID:EDVnvY5w0.net] 初心者です。 今書いてるプログラムをコンパイルして実行すると、エラーが出たり出なかったり謎の挙動を起こします 最初はエラーが出て、その後数回、コードを一切変えずコンパイルしなおして実行すると急にエラーが出ず上手く行ったりします。 これって何が原因なのでしょうか… こういう事ってよくあるのですか?
228 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 08:34:14.27 ID:Lxhtz3Yj0.net] キチガイ発言はツイッターかブログでどうぞ
229 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 08:35:11.51 ID:Lxhtz3Yj0.net] >>224 よくあることです デバッグしましょう
230 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 10:17:10.24 ID:Hh6TN2Aq0.net] >>224 そのエラーとやら、もしかして警告か? エラーは直すまで何度コンパイルしても絶対に通らない 警告はコンパイルが完了しオブジェクトファイルができる そのコンパイルとやら、もしかしてビルドか? それともmakeか? ビルドやmakeはオブジェクトファイルとソースファイルの日付を比較して ソースファイルのほうが古いとコンパイルを省く だから警告が出てからもう一度ビルドしても同じ警告は出ない おそらく、こういうことだと見受ける
231 名前:デフォルトの名無しさん [2018/04/23(月) 10:24:23.61 ID:48PNhEnX0.net] 変数を初期化してないんだろ
232 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 12:27:19.92 ID:8odlZZv8M.net] >>227 日本語読めないのかよ... > 実行すると、エラーが出たり出なかったり謎の挙動を起こします
233 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 13:44:26.09 ID:Hh6TN2Aq0.net] >>229 日本語でしゃべってくれ
234 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 13:58:46.97 ID:1JtTwXqR0.net] 実行してるということはコンパイルは通ってるということだと思う つまりコンパイルの問題ではなく、コンパイルエラーではないだろうという推測
235 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 13:58:59.41 ID:Lxhtz3Yj0.net] >>230 「実行すると」 ビルド時のコンパイラなどからのエラーではなく、 プログラムを実行したときの挙動についての質問のようですよ
236 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 14:45:37.00 ID:Hh6TN2Aq0.net] 初心者つってるから どこまでがコンパイルで どこからが実行なのかの 区別からあやしいと見ている 実行時エラーにしても stopダイアログなのか 結果がおかしいのか あの質問では言ってない
237 名前:デフォルトの名無しさん [2018/04/23(月) 14:53:14.79 ID:48PNhEnX0.net] すげーみっともない奴だな
238 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 14:56:19.11 ID:Hh6TN2Aq0.net] 嘘は言っていない
239 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 15:52:04.86 ID:mDBTWEJod.net] 言論の自由を行使し過ぎw
240 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 16:27:46.06 ID:So2OBlKcd.net] コンパイルして(リンクを)実行すると だったりして
241 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:14:12.91 ID:VArh9qU+0.net] 初心者がいちいちobjからリンクしてるのか
242 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:15:44.11 ID:Hh6TN2Aq0.net] しつけえな ここはプログラム技術板 技術的な内容が皆無のレスでひっ絡んでくるなカス
243 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:30:01.10 ID:orIXCmni0.net] >>224 何を実行するのか目的語をはっきりさせろ プロ意識が欠けている
244 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:32:39.31 ID:orIXCmni0.net] あ、初心者だったのか…
245 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:34:51.03 ID:vGDXyrLu0.net] >>224 ソースを公開することは可能ですか? https://ideone.com
246 名前:デフォルトの名無しさん [2018/04/23(月) 21:12:48.39 ID:7US5BnQm0.net] pthread を使ってループ処理をマルチスレッド化したのですが、シングルスレッドと同じスピードしか出ませんでした。 pthread でこういう事やっても無駄なんでしょうか?
247 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:04:36.67 ID:C1tu+nEe0.net] 流石に情報が少なすぎて このままだと下手糞としか言いようがない。 ソースコード貼り付けれ
248 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:09:13.69 ID:oFP/MhUD0.net] シングルコアのPCかも
249 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:17:20.63 ID:1ikED9ud0.net] pthread使うとひとつの処理が倍速にでもなると思ったのだろうか
250 名前:片山博文MZ mailto:sage [2018/04/23(月) 22:21:51.35 ID:ATy8dQXfd.net] 不完全な質問はスルーすっと
251 名前:デフォルトの名無しさん [2018/04/23(月) 22:42:58.69 ID:7US5BnQm0.net] 舌足らずですみません。コードはこんな感じです。 threadFunctionは単なる加算値、joinFunctionは集計処理です。 コアは物理2論理4です。 template< class ArgType > void Reduce( std::vector< ArgType >& threadArgs, void* (*threadFunction)(void*), void (*joinFunction)(std::vector< ArgType >&) ) { const size_t threadCount = threadArgs.size(); threads.resize( threadCount ); std::vector< void* > voidPtrArgs = CastArgsToVoidPtrs( threadArgs ); for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex ) { sched_param schedParam; schedParam.sched_priority = sched_get_priority_max( SCHED_FIFO ); pthread_attr_t threadAttribute; pthread_attr_init( & threadAttribute ); pthread_attr_setschedpolicy( & threadAttribute, schedPolicy ); pthread_attr_setinheritsched( & threadAttribute, PTHREAD_EXPLICIT_SCHED ); pthread_t& thread = threads[ threadIndex ]; pthread_setschedparam( thread, schedPolicy, & schedParam ); pthread_create( & thread, & threadAttribute, threadFunction, voidPtrArgs[ threadIndex ] ); } for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex ) { pthread_t thread = threads[ threadIndex ]; pthread_join( thread, NULL ); } joinFunction( threadArgs ); }
252 名前:デフォルトの名無しさん [2018/04/23(月) 22:45:44.01 ID:reOPAGg30.net] >>243 この世界では、何かやって思い描いてたようにならなかった場合 まず自分の能力不足を疑うのが鉄則
253 名前:デフォルトの名無しさん [2018/04/23(月) 22:51:38.20 ID:reOPAGg30.net] >>248 アハハハハ!ジョークのつもりかなんか? そうじゃないならjoinの動きを勉強しろ
254 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:53:42.39 ID:voecBiJS0.net] 釣り針デカいな
255 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:14:39.42 ID:gZ/aKTVF0.net] いまだに関数ポインタ使ってるのか。野蛮人。 std::functionってスレッドセーフじゃないの?
256 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:18:02.49 ID:YIxEn5Qs0.net] いまだ関数ポインタが使いこなせないんだけどやばいかな?
257 名前:デフォルトの名無しさん [2018/04/23(月) 23:20:18.71 ID:reOPAGg30.net] 考えたらjoinの問題じゃないか もし「単なる加算処理」が1スレッドでメモリ帯域使い潰していたらマルチスレッドにしてもどうしようもないのは明らかだよ
258 名前:デフォルトの名無しさん [2018/04/23(月) 23:21:31.95 ID:reOPAGg30.net] >>253 未だに関数ポインタなんて使ってるほうがやばい
259 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:30:05.62 ID:1JtTwXqR0.net] 画像処理で合成処理をパラメータでもらう場合があるんだが その場合内部処理と対応させるために関数ポインタは使うが そういうのもダメ?
260 名前:デフォルトの名無しさん [2018/04/23(月) 23:35:26.41 ID:reOPAGg30.net] ダメってわけじゃないけどさあw C++ならもっと柔軟性のあるやりかたが幾らでもあるってこと
261 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:36:21.76 ID:lnjW6wzS0.net] virtual関数もラムダ式も関数ポインタ
262 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:40:33.42 ID:awXEdMZR0.net] std::byteが邪魔すぎるんですけどg++で無効にするオプションってありますかね?
263 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:50:59.76 ID:9sQDUnnSM.net] >>257 あんた昨日のおじいちゃんだろ。 functionの時代もとっくに終わってるぞ。 autoとlambdaで関数ポインタを使うべき。
264 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:51:42.53 ID:gZ/aKTVF0.net] >>258 ライブラリ制作者でもなければ関数ポインタなんぞ触らんよ。 よほどCとの兼ね合いが無いと。
265 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:06:39.75 ID:qFc5rpEV0.net] >>248 threadcountいくつになってるの?
266 名前:はちみつ餃子 mailto:sage [2018/04/24(火) 00:06:56.48 ID:VhsA5JFS0.net] 忘れがちなことだが std::function は実行時の型を扱う。 画像処理などのようにヘビーな繰返しがあるような場面では関数ポインタを使った場合との間に深刻な速度差が生じることもなくはない。
267 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:16:24.07 ID:qFc5rpEV0.net] >>248 関数名からして、一度のreduce処理量は大したことなくて、何度も繰り返し呼んでない? thread処理に必要な処理量が相対的に無視できなくなってるんじゃね? スレッドは4本に制限して、各スレッドが処理する量を増やすかスレッドプール式にしては?
268 名前:デフォルトの名無しさん [2018/04/24(火) 00:17:16.38 .net] C++だから関数ポインタ使わないとか頭おかしい 関数ポインタのほうが高速かつシンプルに書けるならそちらを選択すべき
269 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:20:31.80 ID:N5/L/OXI0.net] 皆富豪ばかりではない
270 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:26:04.88 ID:RoXKv00p0.net] 富豪かどうかはおま環だろ だから自己申告しないヤツが悪い なんでこっちがエスパーみたいなことしなきゃいけないんだ わたくしは教えないがあなたがわたしの環境を忖度しろってか? ヴァカじゃねえの? アフォに対してちゃあんと「テメーのスペックはいかほどですか」と尋ねろクズ 富豪かどうかはわからない、それを言わない人間がまず間違い、 それを逆手にとって相手をマウンティングするアフォがいるから話が進まない
271 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:38:30.68 ID:Sy+ZRJzm0.net] 関数ポインタの構文の方がかっこいいだろ!
272 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:47:04.42 ID:hfyVIq8IM.net] どんなスペックだろうと他のソフトがどれだけメモリや処理時間を喰い潰していようと自分の処理はサクッと終わらせたいといつも思う
273 名前:デフォルトの名無しさん [2018/04/24(火) 01:40:17.33 ID:2n4xWLsG0.net] >>260 へんてこりんなマウンティングするやつだなあ ちなみに昨日なんて俺書き込んでないからw
274 名前:デフォルトの名無しさん [2018/04/24(火) 03:16:15.83 ID:CsMI0xmD0.net] >>248 調べてみたけどさっぱり判りません。 pthread_joinで各スレッドの終了を待って、その後、集計処理をするというのはごく渡り前の処理に見えるのですが、 何が行けないのでしょうか? 別の方法でスレッドの終了を待たねばならないのでしょうか? 自分勝手デスミア線が、具体的に問題点、改善点を指摘して下さいm(_ _)m。
275 名前:デフォルトの名無しさん [2018/04/24(火) 03:31:10.06 ID:2n4xWLsG0.net] いいから「単なる加算処理」全部見せろよこの包茎野郎
276 名前:デフォルトの名無しさん [2018/04/24(火) 03:56:33.85 ID:CsMI0xmD0.net] threadFunctionが、 void* CalcBasicStatics( void* threadArg ) { BasicStaticsThreadArg* arg = reinterpret_cast< BasicStaticsThreadArg* >( threadArg ); double interva
277 名前:lOfX = arg->intervalOfX; double x = arg->dividedRangeOfX.start; double sumOfY = 0.0; double sampleCount = 0; const sc::Sampler& f = arg->f; while ( x <= arg->dividedRangeOfX.end ){ double y = f( x ); sumOfY += y; sampleCount++; x += intervalOfX; } arg->sumOfY = sumOfY; arg->sampleCount = sampleCount; return nullptr; } joinFunctionが、 void CalcBasicStaticsJoin( std::vector< BasicStaticsThreadArg >& args ) { double sampleCount = 0.0; double sumOfY = 0.0; for ( int i = 0; i < args.size(); ++I ) { sumOfY += args[ i ].sumOfY; sampleCount += args[ i ].sampleCount; } for ( int i = 0; i < args.size(); ++i ) { // 結果を書き込み BasicStaticsThreadArg& arg = args[ i ]; arg.average = sumOfY / sampleCount; } } です。細々すみません。 [] [ここ壊れてます]
278 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 05:46:22.80 ID:vHj8ybNt0.net] そのコード見ても 並列度もスレッドあたりのサンプル数も 1サンプルあたりのコスト(f)もわからないので まるで意味がない 2または4並列で、1スレッドあたり1〜10Mサンプルくらい処理するようにすれば 速くなるか少なくともスレッドを使わない場合より遅くならないと思う 同じ速度ということはメモリ帯域が律速なのかもね
279 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 05:46:49.67 ID:vHj8ybNt0.net] 同じ速度 ↓ スレッドを使わない場合と同じ速度
280 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 05:55:18.81 ID:vHj8ybNt0.net] fでメモリのどっかから数値を読んでいるんだと思うけど、 これがなるべく連続したアクセス(局所化を謀る)になるようにループを構成できれば速くなるかもしれない。 この辺りはググれば色々参考になるページがあると思うが いまググッたらそれらしいページがあったので書いておく myoga.web.fc2.com/prog/cpp/opti02.htm 仕様として外からfが与えられるなら無理な話かもしれない。 もちろん interval が 1 で f(x) が { return v[x]; } のような最適なケースよりは速くならないので その辺りは無駄な努力をしないよう測っておきましょう。
281 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 06:54:08.05 ID:RDzdLFpT0.net] fの中身が公開出来るなら公開して 複数あるならそのうちの1個でいいから あと、 1回のthreadFunctionで何個くらいfを計算する?
282 名前:デフォルトの名無しさん [2018/04/24(火) 09:24:50.43 ID:jHZYDUEYd.net] >>250 joinについて勉強しろとか偉そうに言ってたのは何だったの
283 名前:デフォルトの名無しさん [2018/04/24(火) 18:12:35.67 ID:2n4xWLsG0.net] >>278 こりゃ「多分」joinの問題じゃないなと判断して>>254 を書いたんだが これくらいのコンテキスト読めないとマルチスレッドは無理だよ
284 名前:デフォルトの名無しさん [2018/04/24(火) 18:15:41.14 ID:2n4xWLsG0.net] fやら具体的なargsの内容やら処理時間測定のやりかたも記述されてないし んなもの誰も答えられるかよ
285 名前:デフォルトの名無しさん [2018/04/24(火) 18:32:28.83 ID:6+u8wIQpd.net] >>279 違う違う なんで明らかに間違えてる事を偉そうに述べられるのかと聞いてんだけど 読解力もスキルもないのか
286 名前:デフォルトの名無しさん [2018/04/24(火) 18:41:27.90 ID:2n4xWLsG0.net] >>281 本当に「明らかに」だと思ってるの?バカですか?
287 名前:デフォルトの名無しさん [2018/04/24(火) 18:45:24.94 ID:cOEBcXkN0.net] サンプルレベルのJoinの使い方をみて 「アハハハハ!ジョークのつもりかなんか?そうじゃないならjoinの動きを勉強しろ」 は流石に笑ってしまう
288 名前:デフォルトの名無しさん [2018/04/24(火) 18:47:53.38 ID:2n4xWLsG0.net] 勝手に笑ってればw
289 名前:デフォルトの名無しさん [2018/04/24(火) 18:49:15.43 ID:Z9G2Fq/Ha.net] cin で、個数の決まっていない整数たちを読み込みたいのですが、どうすればいいでしょうか? 整数たちの個数 n が分かっていれば、以下のように読み込めばいいですが。。。 vector<int> v; int i; for (int i = 0; i < n; ++i) { cin >> i v.push_back(i) }
290 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 18:59:54.20 ID:lGEjd9Z7M.net] >>282 明らかにだろどう見ても。 何をどう勘違いしたのか
291 名前:説明してくれよ。 [] [ここ壊れてます]
292 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 19:02:18.64 ID:of0BgjlM0.net] >>285 他に入力がないなら cin.eof() で入力の終了を検出できるよ。 cin のブール演算を使ってもいいけど、どうにも慣れなくてね(個人の見解)。
293 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 19:15:13.81 ID:Z9G2Fq/Ha.net] >>287 ありがとうございました。 別の質問なのですが、一般的に、vectorの使用頻度というのはどれくらいでしょうか? 配列でやれることもすべて vector を使ってやるという人は多いでしょうか? それとも、効率などを考えて配列で極力済ませるという人が多いでしょうか? もちろん、ケースバイケースでしょうけれども、そのあたりの常識がないので、大体 どんな感じなのかが知りたいです。
294 名前:デフォルトの名無しさん [2018/04/24(火) 19:17:35.43 ID:Z9G2Fq/Ha.net] 自分としては、効率など細かいことは考えずに、vectorを使って問題ない 場面ではvectorを使うという風にしたいのですが。。。 vectorを使っても速度などの点で問題ない場合、一般的なプログラマーなら どうするのかが知りたいです。
295 名前:デフォルトの名無しさん [2018/04/24(火) 19:20:20.45 ID:Z9G2Fq/Ha.net] vector<int> v; int n; cin >> n; int t; for (int i = 0; i < n; ++i) { cin >> t; v.push_back(t); } int *p; int n; cin >> n; p = new int[n]; for (int i = 0; i < n; ++i) { cin >> p[i]; } どちらにするのが普通なのかの常識がありません。
296 名前:片山博文MZ mailto:sage [2018/04/24(火) 19:30:42.86 ID:Eukzbh8yd.net] >>290 生のnew/deleteは、なるべく使わないのがいい。delete忘れ、例外などでバグの元や維持コストになる。
297 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 19:33:20.39 ID:Z9G2Fq/Ha.net] >>291 ありがとうございました。 ということはできるだけvectorを利用したほうがいいということでしょうか?
298 名前:片山博文MZ mailto:sage [2018/04/24(火) 19:36:23.45 ID:Eukzbh8yd.net] >>292 動的にサイズが変わらないなら配列かstd::array。 動的にサイズが変わるならstd::vector。
299 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 19:38:54.99 ID:t8t5TswZ0.net] >>290 上だったらv.reserve(n)しておこう
300 名前: mailto:sage [2018/04/24(火) 19:42:04.62 ID:B3J+xNmy0.net] >>289 私は書き始めは std::vector を専ら使っており、後で他のコンテナに換えています
301 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 19:46:25.46 ID:UxTdQ3KXd.net] >>293 コード読めないの?
302 名前:片山博文MZ mailto:sage [2018/04/24(火) 19:51:37.43 ID:Eukzbh8yd.net] >>296 普通の人間なら、文脈を読み取れるけど、俺はコンピューターに近いんだ。
303 名前:はちみつ餃子 mailto:sage [2018/04/24(火) 20:04:19.79 ID:VhsA5JFS0.net] >>289 実用上の問題が無いことがわかっている範囲内であれば、 深く考えずに vector だけで乗り切るのも悪い選択じゃないと思うよ。 ただ、使い分けることで意図を表現しやすい。 たとえば list を使っていれば要素の挿入や削除が頻繁なデータなんだなって思うし、 array が使われていれば要素の個数が固定なんだなって思う。 速度的に影響がない程度の規模であっても、 それが適しているような操作をこれからするのだという意思表明は人間がプログラムを読むときのヒントになる。 そして、そういうヒントは書いている途中にこそ必要なものなので、 >>295 のように後から整理していくスタイルは個人的には好きじゃないな。
304 名前: mailto:sage [2018/04/24(火) 20:22:55.46 ID:B3J+xNmy0.net] >>298 >それが適しているような操作をこれからするのだ うーむ、いろいろと考えさせられます std::vector でなら使えても、std::list では使えない、というのはあるから、最初からそれを考慮しておくのは…よくありますねえ
305 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 20:43:20.11 ID:Ukt80uX+0.net] vector は list に比べた場合、 データがメモリ上隣接して並んでいるので →そういう引数を要する
306 名前:e種 API にそのまま渡せる →メモリアクセスが局所的にできてキャッシュが効く 予約領域を拡張する場合にのみアロケータが呼ばれるので追加時のアロケータによるオーバーヘッドが低い とかの良い特性もあるので要素のコピーが軽くて個数が小さいものはvectorにして損することは少ない [] [ここ壊れてます]
307 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 21:34:54.87 ID:JVcrtulg0.net] BidirectionalIteratorとRandomAccessIteratorだろ 規格用語で言えば短く済む
308 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 22:35:44.34 ID:iCiOyu8i0.net] std::listはメモリ局所性がないので今どきのマシンだとクソ遅い 積極的に使う理由は基本的にない
309 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 23:33:49.11 ID:RDzdLFpT0.net] 積極的にって... 使いどころで使うための物だよ
310 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 23:51:07.95 ID:z/eaD8m90.net] メリットとデメリットを見極められないとコンテナを使いこなすのは難しい 昔から配列を弄り倒している古参にとってはこんなに便利な物はないと思うがね 90年初頭辺りにタイムスリップして実際に構造を真似てフルスクラッチでテンプレートなんぞなかった世界で組んでみればコンテナの挙動は自ずと理解できると思うが時代がわるかったな 今は何も苦労しなくても容易になんでも手に入る世界だからな 修業が足らんよ青二才
311 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 23:55:55.63 ID:iCiOyu8i0.net] >>303 その使い所がよほど特殊な状況以外にないんだよ
312 名前:デフォルトの名無しさん [2018/04/24(火) 23:58:59.30 ID:4OXNJpQB0.net] 大規模C++ソフトウェアデザインという本を読んでいます。 冗長インクルードガードが紹介されているのですが、効果あるんですかね。 古めの本なのですが、最近のコンパイラだと意味ないですかね
313 名前:>>306 mailto:sage [2018/04/25(水) 00:13:26.67 ID:2lHeUIKm0.net] ir9.jp/prog/ayu/datlog/tech_cpp/1149427282/1149427282_04.html ここの967以降に同じ質問がありました。質問撤回します。
314 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 00:14:20.28 ID:MdUECE2K0.net] #pragma once って規格化されたんだっけ?
315 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 01:03:31.17 ID:YD2+CY860.net] されてない しようしようと20年言われ続けて技術的な問題でできずにいる
316 名前:デフォルトの名無しさん [2018/04/25(水) 02:07:21.83 ID:/kuz3CrQ0.net] 243です。 アドバイスを頂き検討したのですが、メモリが散らかっているのが原因と判断しました。 都合により細々とした実装の話は割愛しますが、付き合ってくれた皆さんありがとうございました。
317 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 02:33:10.54 ID:wwssDiVV0.net] どおりで未だに警告でるわけだ
318 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 06:26:59.61 ID:8qaCWrbS0.net] >>305 その特殊な状況の為にlistが存在する 私の場合は特殊なプログラムを書くことが多いので 使いどころは多いのかもしれない また、普通の組み込みC言語でも簡易な片方向リストとかを使ったりする (C++じゃないのでlistは無い)
319 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 07:15:49.01 ID:ntbHaYzVM.net] >>309 技術的な問題ってなに? 既に実装してる環境の方が多くね?
320 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 07:30:39.44 ID:kzCoHflQa.net] 今はモジュールの方を標準化しようとしてるんじゃ
321 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 08:47:25.49 ID:wwssDiVV0.net] 偉い人が考えてることはわからん
322 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 11:24:32.26 ID:iscLTfMY0.net] >>313 プリプロセッサは C++ じゃないからね C++ 以外の言語と共有しているツールなので それらと歩調を合わせる必要があるし プリプロセッサだけ独立の規格にするなら C++ を含め、諸
323 名前:言語の規格も プリプロセッサのバージョンとどう付き合うのか 策定せにゃならん [] [ここ壊れてます]
324 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 12:23:57.05 ID:ntbHaYzVM.net] >>316 意味わからん C/C++の規格にプリプロセッサの仕様もあることを知らんのか? そもそも他の言語と共有してる環境なんて見たことないし
325 名前:はちみつ餃子 mailto:sage [2018/04/25(水) 15:37:25.53 ID:7Yqb38x00.net] 現行では、 #include ディレクティブは「対象ファイルの内容がそこに書かれているかのようにふるまう」という規則なので、 ヘッダファイル内のプラグマ (#pragma once) の解釈が始まるのはインクルードされた後になる。 もちろん対象範囲がコンパイル単位全体に及んでしまっては #pragma once の意味がないが、 現状の仕様に辻褄を合わせるとそうなる。 実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、 #pragma once を仕様に入れるのに #pragma once の項目を追加すれば済むわけではないってことは理解してくれ。 それと、プリプロセッサの仕様は C/C++ の一部なのは確かだが、 挙動を規定しきれていないのじゃないかということは指摘されている。 https://qiita.com/ruiu/items/4d471216b71ab48d8b74#3%E6%9C%8817%E6%97%A5 うやむやでやってきてるところを整理する必要は有ると思う。 >>317 Haskell (GHC) は C プリプロセッサを使うよ。 汎用的に使いたいなら M4 とかの方がいいとは思うけど、 Cプリプロセッサに慣れている人は多いから……。
326 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 16:38:46.53 ID:iscLTfMY0.net] また別な話 #includeしようとしているファイルが 過去に#includeしたファイルと同一かどうか という判定も意外に厄介だね ハードリンクできるファイルシステムと そうでないファイルシステムがあったりするし ハッシュが一致しても衝突かどうかの問題もある
327 名前:はちみつ餃子 mailto:sage [2018/04/25(水) 18:09:25.23 ID:7Yqb38x00.net] ハードリンク、シンボリックリンクが無いファイルシステムだったとしても、サーチパスの問題も思いつくな。 たとえばカレントディレクトリと、カレントディレクトリ直下の foo ディレクトリからヘッダファイルを探すようになっているとき、 #include "bar.h" と #include "foo/bar.h" は同じファイルを指しているが、表現が異なる。 同一のファイルとして除去すべきだろうか?
328 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 19:34:37.54 ID:ch3bizaad.net] #if **** #pragma once #endif とかどうなるの? 複数回のインクルードで条件がちがっていたら?
329 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 20:33:35.69 ID:ntbHaYzVM.net] >>318 > 実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、 規定すればいいだけだろ? どこに技術的な問題があるんだ? 政治的な問題だと言うならまだしも >>319-320 みたいな話は処理系定義ですむ話 >>321 は少し悩ましいがそもそも途中まで読んでから#pragma onceとか言われても面倒だから書くならファイルの最初に書けとかの制限をつければいい > 挙動を規定しきれていないのじゃないかということは指摘されている。 いやいや、その子ちゃんと規格読めてないだけでしょ w > Haskell (GHC) は C プリプロセッサを使うよ。 仕様を流用してるだけでしょ? 何かのコンパイラと共有してるわけじゃないと思うが
330 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 20:43:06.43 ID:YD2+CY860.net] 君よりよっぽど賢い人達が20年間悩み続けて未だに出来てないことを舐めない方がいい
331 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 21:22:23.29 ID:ntbHaYzVM.net] >>323 別に悩み続けてなんていないでしょ w #pragma onceで事足りてるからわざわざ政治的なことに足突っ込みたくないだけ
332 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 21:47:31.85 ID:YD2+CY860.net] 新規格の季節になると毎回のように標準化委員会の議題に上がってるんだが?
333 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 22:20:34.77 ID:fPsUNFh1a.net] モジュール方式になったらヘッダファイルが要らなくなる?
334 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 22:28:42.99 ID:iscLTfMY0.net] >>322 > 処理系定義ですむ話 それはおかしいでしょ ハードリンクできる処理系からできない処理系に移植したtarボールの #includeの挙動が未規定なら結局インクルードガードを自前で書くことになる
335 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 22:48:43.95 ID:7S1PATFb0.net] >>325 でも誰も進めようとしないんだろ w よくある話 >>327 C/C++ ってそういう言語だしそもそも環境変える予定があるならそんなものに依存したファイル構成にしないでしょ
336 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 22:55:12.61 ID:eMzyfy/H0.net] #pragma once なんて once upon a time だぜ 今はもうだれも気に留めてやしねぇ
337 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 23:31:56.94 ID:iscLTfMY0.net] アホの相手は疲れたわ もう寝る
338 名前:はちみつ餃子 mailto:sage [2018/04/25(水) 23:46:14.09 ID:7Yqb38x00.net] >>322 トピックとして大きすぎるので面倒くせえってだけの話。
339 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 23:50:29.61 ID:ayqRGoGD0.net] #pragma once ぐらいPerlでインクルードガードに自動変換できる、 ていうか無くてもできるから自前で書くとかありえん…
340 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 23:51:29.73 ID:ayqRGoGD0.net] むしろプリコンパイルヘッダーが規格化されないの方のが悩ましい…
341 名前:デフォルトの名無しさん mailto:sage [2018/04/25(水) 23:58:40.94 ID:7S1PATFb0.net] >>330 逃げるなら黙って逃げろよ w
342 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 00:10:34.39 ID:0UXBsrps0.net] ていうか#pragma onceとか#ifdef〜#endifによるインクル〜ドガ〜ドのシノニム以外の何者でもないと思うが 一方#ifdef〜#endifによるインクル〜ドガ〜ドは 「対象ファイルの内容がそこに書かれているかのようにふるまう」 という規則の下で立派に機能していると思うし、 >>321 のように等価な#ifdef〜#endifによるインクル〜ドガ〜ドが存在し得ない場合はエラーにしたら良いと思うし、 ハードリンクできる処理系かどうかに関係なく#ifdef〜#endifによるインクル〜ドガ〜ドは機能していると思うし (だいたい1バイナリのビルド中にハードリンクの中身が変わるみたいな想定をする方がおかしい=ハードリンクはそうでないファイルと区別がつかないとみなせるハズ だったら#pragma onceも問題なく規格化が可能なのでは… 少なくとも技術的な問題とかとうていナッシング?
343 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 00:21:25.86 ID:44bF0Q7g0.net] ちょっとはググれよ。 お前みたいなやつを「殆し」って言うんだぜ
344 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 00:41:00.06 ID:0UXBsrps0.net] ↑ググってもボンクラが書いたような駄文が見つかるだけなので却下。 1. #pragma onceは#ifdef〜#endifによるインクル〜ドガ〜ドのシノニムである 2. #ifdef〜#endifによるインクル〜ドガ〜ドは世の中で立派に機能を果たしている にもかかわらず、 3. #pragma onceの規格化の有効な解が存在しない という驚くべき結論がなぜ導かれるのやろうか…
345 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 06:29:49.76 ID:IAeApo/t0.net] インクルードガードを自前で書くたびに 毎度毎度ワンパターンでタイプ数だけは結構多い不毛な作業は 機械化できないかと考えるのは至極当然 むしろ何の疑問も持たないやつは適性に疑問符がつく インクルードガード用のフラグマクロの命名則にも不安がつきまとい 無名namespaceのように衝突しない保証があったらなあと思ったりもする
346 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 07:22:21.59 ID:4xU9Va0kM.net] 要するに同じファイルであるかをどうやって判定するかの問題 インクルードガードは利用者(プログラマー)に識別子を決めさせる(押し付けたとも言う)ことで実現してる なので押し付けられたプログラマーには > インクルードガード用のフラグマクロの命名則にも不安がつきまとい みたいなことが発生する #pragma onceはこの判定を処理系側でやるんだが例えばファイルの絶対パスで判断するとかファイルをインクルードする前にmd5とかのハッシュを求めて判断するとかすればいいだけ ハードリンクとかで違う名前つけて#pragma onceがうまく動かないとか言うアホとかは無視すればいいし、ハッシュの衝突が心配と言うなら衝突した時に比較するようにすればいい どういう仕様がいいのかで揉めるのはあるけど技術的な問題とか言ってる奴はちょっと知能が足りなさすぎ
347 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 07:42:18.98 ID:n/ljx3l20.net] >>338 #ifndef 形式のインクルードガードを自前で書くとタイプ数が多いし 識別名を打ち間違える危険もあるから .h のファイルを新規作成したときに 自動的に入力されるようにエディタのマクロにしたよ。 まぁ、識別名をファイル名から作ってるから、ファイル名の変更でアレだけど。 昔(フロッピーでやってた時代?)は #ifndef 形式でガードすると どのみちヘッダファイルをまるごと読み込まなきゃならないから、 #pragma once の方がコンパイル時間において優れてる、などと言ったけど、 ハッシュを計算して同一か検証するとか手間が増えるなら 時間の面での優位性はなくなったのかな。
348 名前:はちみつ餃子 mailto:sage [2018/04/26(木) 09:45:48.32 ID:P0bCzIha0.net] 「技術的な」というときの技術は「プログラミング技術」の意味じゃないこともあるんだよ。 前置きが無い限り広すぎてあんまり意味ない。 実装がいくつもあるのに、仕様策定にあたっての言葉で出てくる「技術的な」なんだから文脈でわかれよ。 仕様に落とし込む難しさが元々の論点。 ハードリンクの話題は「同一のファイルとは何か」を定義する難しさの一例で、実装のことなんか言ってない。 このスレで既に上がっている選択肢だけでも ・ 内容が同じ ・ 絶対パスが同じ ・ #include ディレクティブ中の表現が同じ ・ inode が同じ (ハードリンクは同一とみなす) があり、内容の一致を選択する場合以外は言語の外の世界の環境に関する記述が必要になる。 世の中にある色んな環境のことを考慮して文面にする難しさってのはわかるだろ? そんなわけで、個人的には内容の一致だけで判定するのが (仕様として定義するにあたって) 一番簡単だと思う。 ODR に関するルールの中にも同じトークン列を要求するものがあるし。 それに加えて >>318 で取り上げた展開手順の規則をなんとかする必要はあるが、 >>321 に解を与えるような上手い簡単な規則は思いつかないな。 既に多く書かれてしまっているコードの現状との互換性を考えると >>322 のいうような、 #pragma once を書ける場所を制限するような規則は選択できないと思う。 結局は複雑なものにならざるを得ない。 そんなのほっといてモジュールの導入に邁進しようぜっていうのは妥当な方針だろ。
349 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 11:12:45.83 ID:IAeApo/t0.net] >>339 みたいに独善的なやつは標準化委員に向かないタイプだね 提起された問題を個人的に考えるのがイヤだから却下とかやってたら みんなやる気なくすし
350 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 11:13:52.62 ID:IAeApo/t0.net] 会社にもいるよね今の野党みたいなアイディアキラー
351 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 11:26:33.21 ID:+C2ovlRwM.net] この板の別スレにも跳梁跋扈してるな
352 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 12:36:39.87 ID:4xU9Va0kM.net] >>341 > 「技術的な」というときの技術は「プログラミング技術」の意味じゃないこともあるんだよ。 そういう人がいるからわざわざ「政治的」って言う言葉を入れてあるんだが理解できなかったのか? で、あんたの言う技術的な問題ってなに? 具体的に書いてくれ >>342 > >>339 みたいに独善的なやつは標準化委員に向かないタイプだね > 提起された問題を個人的に考えるのがイヤだから却下とかやってたら 意味わからん 俺が提示した内容がダメだと言うならもっといい案を提示すればいいだけ こんなスレで独善的とか頭大丈夫?
353 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 13:01:09.90 ID:IAeApo/t0.net] 提示してねえだろ、おまえは無視つったんだよ 嘘つくんじゃねえ
354 名前:はちみつ餃子 mailto:sage [2018/04/26(木) 13:58:41.43 ID:P0bCzIha0.net] >>345 私はこの件について、技術的な問題があるとは述べてない。 その箇所の後に技術的という言葉は広範すぎて (言い換えれば、具体性がないので) 意味ないという意味のことを書いてるつもりなんだが。 それとは別に、私の考える問題を端的に言うと仕様の文面に落とし込むのは難しいねっていう、そんだけのこと。
355 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 14:09:35.01 ID:9t94Lsi9d.net] 相談スレであって要望スレじゃない
356 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 14:10:26.12 ID:9t94Lsi9d.net] 中身のないガキの言い合いは他で
357 名前: mailto:sage [2018/04/26(木) 17:50:46.60 ID:y22H8Uhx0.net] >>348 現時点での問題点をはっきりさせることに意味はあると思いますよ…
358 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 17:56:28.00 ID:4xU9Va0kM.net] >>346 理解できないなら絡んでくるなよ w 「アホな利用者は相手にしない(=無視する)」って言う仕様を「提示」してるって話だ、ボケ
359 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 18:15:04.17 ID:EM3O7qLA0.net] >>350 スレチ 意味があると思うなら他にスレ立ててやれ
360 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 18:20:39.64 ID:IAeApo/t0.net] >>351 科学技術的な議論にアホなんて用語を使うあたりお里が知れるな 形容詞には比較基準や単位をつけろボケ
361 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 19:18:47.48 ID:bSbrcQnXd.net] ガキの喧嘩は他でやれ
362 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 19:29:11.00 ID:HtO+dzj70.net] 俺は>>339 が正しいと思うぜ。 というか>>341 は明確に間違ってるだろ。色々と。 「ハードリンクガー」なんてのは論外。規格で定めるべき事項ではない。 規格で定めるべきなのは、 ・全く同一の中身だが実体が異なる場合でも #pragma once は有効か? (cp A.h B.h の場合にも B を読み込むか?) だ。そしてこれは当然現行のインクルードガードと同じ方向に揃えるべきであり、 ・読み込んではいけない という仕様になるのも自明だ。 絶対パスやinodeやハードリンクというのは、 ・通常のファイルシステムであれば、絶対パスが同一なら同じファイルを参照する (=同じ中身であることが保証される) ・inodeでファイルシステムが実装されているのなら、 同じinodeを指すファイル(=ハードリンク)の場合には、同じ実体を参照する (=同じ中身であることが保証される) であって、これらは「全く同一の中身」であることを確認する手段でしかない。 これらが有効な環境では間引くのに用いればいいだけ。勿論ハッシュを使ってもいい。 これらが別物に見えるのなら、それは抽象思考が出来ない馬鹿だからだよ。 ファイルシステム毎にC++の規格をいちいち決め直す必要があるなんて、おかしいだろ。 今後新しいファイルシステムが考案される毎に、毎回C++の規格を刷新するつもりか? 例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来るが、 それでどうなるかをC++の規格に定めるべきだと?マジで馬鹿だろ。
363 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 19:29:59.32 ID:HtO+dzj70.net] 最終的に規格に定めるのはつまり、 ・全く同一の中身の場合には #pragma once は有効 (=現行のincludeガードと同様) であって、揉めるとしたら、 ・意味的には同一だがバイナリ比較では異なる場合 (例:最終行に空白や改行が追加された場合や、コメントのみの変更の場合) (=現行のincludeガードでは読み込まれないが、単純な方法では同一性の確認が難しい場合) だが、これも方向としては現行のインクルードガードと合わせる方向、つまり、 ・読み込んではいけない とされるべきであり、これもまた自明だ。 (とはいえここは実装的に揉めるかもしれんが) そもそも「同一性の確認」をファイルシステムに依存する考え方自体がおかしい。 もうじき #include 対象を url 指定するような時代にもなるだろうし。 (善し悪しはさておき、PHPではこれが出来る) そうしたら、「同一かどうかは中身で判断する」という選択肢以外はなくなる。 こんな当たり前の話が分からないのは完全に老害化してる。
364 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 19:30:31.24 ID:HtO+dzj70.net] そしてやる気がないのは今更意味がないからだろ。ほぼ全ての環境で実装済みだ。 > Cray C and C++ 以外では全て実装済み > https://en.wikipedia.org/wiki/Pragma_once 勿論糞長いパスとかにしたらはまることもあるが、これもよくある話でしかないし、ユーザ責
365 名前:Cでいい。 規格に「パスは○○文字まで」と決めるわけにも行かんし。 > 途中でバッサリとパスが切られて、まったく同じシンボル名になって、 > 初めてincludeしたファイルなのにスキップされるという、 > なかなか原因解明が困難な不具合に襲われる……といったケースがあるかもしれません。 > ……はい、体験談です。 > http://cpp.aquariuscode.com/include_guard [] [ここ壊れてます]
366 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 19:39:23.16 ID:CbHb+b7U0.net] 二重にインクルードすることを想定しているヘッダーファイルって、存在するものなの? pragmaとか書かなくても、勝手にやってくれたら問題あるの?
367 名前:片山博文MZ mailto:sage [2018/04/26(木) 19:43:43.54 ID:napFR+dZd.net] >>358 <pshpack?.h> <poppack.h>
368 名前: mailto:sage [2018/04/26(木) 19:56:21.41 ID:y22H8Uhx0.net] >>355 要旨が混乱していますね >例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来る つまり、今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない**と主張しているのですよね そう主張するのなら、 >・読み込んではいけない >という仕様になるのも自明だ。 「読み込んでいいかどうか」を決める方法がないのに「読み込んではいけない」と決めていいのですか? 条件を満たすかどうかチェックする手段がないのに、その条件を仕様とするのは無意味ではないですか?
369 名前:はちみつ餃子 mailto:sage [2018/04/26(木) 19:59:02.73 ID:P0bCzIha0.net] >>358 たくさん存在する。 インクルードする前後のマクロ定義によって挙動を切り替えて使うようなものもある。 基本としては宣言というか、別のコンパイル単位にある関数などのインターフェイスを取り込むために使うものなんだけど、 アクロバティックな使い方をしてるものはそれなりに多いよ。
370 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:06:45.74 ID:OZbR3XDf0.net] プリプロでループを実現するには再帰includeは欠かせないからな
371 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:08:29.05 ID:CbHb+b7U0.net] >>361 むしろそっちのほうに、 二重インクルード可能みたいな宣言を用意してほしいわ
372 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:24:45.91 ID:HtO+dzj70.net] >>360 マジで言ってるんなら死ね。 俺の意見は、 ・#pragma once は現行のインクルードガードと同じ方向に仕様化すべき であって、実際これで文句が出ることはないし、妥当だろ。 つかお前、>>340 を理解してるか?
373 名前:デフォルトの名無しさん [2018/04/26(木) 20:34:58.75 ID:JC9sZU4oa.net] int lengthOfLcs_r(const char x[], const char y[], int ix, int iy, int xsize, int ysize) { static int **lengthTable = new int*[xsize]; for (int i = 0; i < xsize; ++i) { lengthTable[i] = new int[ysize]; } if (ix == xsize || iy == ysize) { return 0; } if (x[ix] == y[iy]) { return lengthOfLcs_r(x, y, ix + 1, iy + 1, xsize, ysize) + 1; } return max(lengthOfLcs_r(x, y, ix, iy + 1, xsize, ysize), lengthOfLcs_r(x, y, ix + 1, iy, xsize, ysize)); }
374 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:36:08.64 ID:OZbR3XDf0.net] #include "/dev/tty" も知らない雑魚はもう黙ってろよ
375 名前:デフォルトの名無しさん [2018/04/26(木) 20:37:18.41 ID:JC9sZU4oa.net] >>365 の関数は、再帰的な関数です。 その再帰的な関数内で static な配列を利用したいのですが、動的に確保した 領域を解放するにはどうすればいいのでしょうか? 再帰的な関数なので単純に関数の最後で解放するというわけにはいかないので 困っています。
376 名前:デフォルトの名無しさん [2018/04/26(木) 20:39:18.48 ID:JC9sZU4oa.net] >>365 動的計画法で配列に計算結果を記録しておき利用したいんです。 なので static にしています。
377 名前: mailto:sage [2018/04/26(木) 20:39:31.36 ID:y22H8Uhx0.net] >>364 わけて考えてみますね インクルードガードはプリプロセッサ名前空間内の一つのプリプロ識別子を犠牲にして、機能させようとしているわけですよね #progma once が犠牲にする**べき**ものは何でしょうか?
378 名前:デフォルトの名無しさん [2018/04/26(木) 20:40:15.50 ID:JC9sZU4oa.net] >>365 の関数はまだ書きかけなので、計算結果を記録した配列の値はまだ利用し
379 名前:トいません。 [] [ここ壊れてます]
380 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:43:55.37 ID:OZbR3XDf0.net] >>>365 lengthTableのポインタ値をなんとかしてグローバル変数に持ち出してatexitに登録するか 最初からそのグローバル変数でnewするか どうせプログラム終了時にヒープ丸ごと消えるんだから放置するか 一から書き直すかの4択
381 名前:デフォルトの名無しさん [2018/04/26(木) 20:45:16.69 ID:JC9sZU4oa.net] >>365 あ、すみません。 なんかおかしなことを書いてしまいました。
382 名前:デフォルトの名無しさん [2018/04/26(木) 20:53:11.22 ID:JC9sZU4oa.net] >>371 ありがとうございました。 すみません。質問がちょっとおかしかったので、質問を代えさせていただきます。 ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか? 考えているのは、関数 func でそのグローバル変数のような変数 a を宣言する。 func 内で呼び出している再帰関数 rec_func 内でのみそのグローバル変数のような 変数 a を利用したい。グローバル変数のような変数なので、 rec_func の引数として a を渡す必要はない。
383 名前:デフォルトの名無しさん [2018/04/26(木) 20:57:03.80 ID:JC9sZU4oa.net] 何度も呼び出される再帰関数に引数として同じ変数を渡し続けるのはなんか 無駄なことをしているように思われたので質問しました。 本を読むとグローバル変数は使うなと書いてあるので質問しました。
384 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:01:32.17 ID:JC9sZU4oa.net] >>373 でいう変数 a の代わりに、クラスを作って、メンバ変数を利用すればいいですかね? rec_func はメンバ関数にすればいいですかね?
385 名前:デフォルトの名無しさん [2018/04/26(木) 21:03:04.18 ID:JC9sZU4oa.net] でも、そのためだけにクラスを作るというのもなんだかな―という感じがします。
386 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:06:11.37 ID:HtO+dzj70.net] >>360 一応添削しておくと、 > 今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない** × 同じ実体かどうか、を決める方法は ○ 同じ実体かどうか、をパス等で決める方法は ただし俺はそもそも「中身」を見て確認すべきで、同じ実体だったら云々、という話はしてない。 cp A.h B.h の場合にインクルードガードでBを弾くとして、 当然Bは「ファイルとしては」「読み込まれ」、「コンパイル対象としては」「読み込まれない」だろ。 #pragma once はインクルードガードの自動版なんだから、インクルードガードと同じ仕様でいいんだよ。 そして逆に、実体が異なっていてもこの場合はインクルードガードは利くのだから、#pragma once も利くべきなんだよ。 ファイルパスでの識別ではこれは実現不可能だろ。 >>369 意味不明。何も犠牲にするべき物は無いと思うが。 というかな、規格化するなら方向は自明で、 ・#pragma once はインクルードガードの代わりに使われているのだから、 現行のインクルードガードを機械的に #pragma once に置き換えして問題ないように仕様化すべき でしかないだろ。これで誰も文句ないと思うが。
387 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:07:21.99 ID:OZbR3XDf0.net] >>374 の心配があるんだったらクラスにしたって裏でthis渡すようになるだけだから一緒よ ポインタ渡すコストが気になるならグローバル変数にするしかない >>365 のコードのままなら末尾再帰の最適化かかるだろうから問題にならんと思うけどな
388 名前:デフォルトの名無しさん [2018/04/26(木) 21:07:30.49 ID:JC9sZU4oa.net] クラスを作ってそのプライベートなメンバ変数を、 ある関数内でのみ利用できるグローバル変数の ような変数として使うというのは邪道でしょうか?
389 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:08:37.69 ID:JC9sZU4oa.net] >>378 ありがとうございました。
390 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:51:10.65 ID:HtO+dzj70.net] >>373 > ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか? 見た目だけの話ならラムダでキャプチャすればいい。(クロージャ) ただ、今気づいたが、C++のラムダって名前付けられないから再帰できないね。 変数の直接呼び出しも試してみたが、以下は通らない。 auto f = [](int x) {return x? x+f(x-1) : x;}; なんでこんな糞仕様にしたんだ? JavaScriptも当初はそうだったが、不便だったので名前が付けられるように変更した。 この変更を知ってて無視してるのなら頭おかしいし、 知らないのなら不勉強だし。(言語仕様に携わる奴は他言語の動向も見ておくべき) 名前を付けられて悪いことはないし、技術的に不可能って事も無いと思うが。
391 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:07:02.86 ID:IAeApo/t0.net] ID:4xU9Va0kM=ID:HtO+dzj70 #include "X:\sandbox\aho.h" #include "Y:\sandbox\aho.h" これでどうなるかをC++の規格に定めるべきだと言っているのはおまえだけ //X:\sandbox\some_app.cpp #include "aho.h" #include "some_lib.h" //Y:\sandbox\some_lib.h #include "aho.h" おまえq文字列の解釈をまさか知らんのか?
392 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:34:27.88 ID:4xU9Va0kM.net] >>353 反論されてぐうの音もでないのかよ 5チャンは初めてか? w
393 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:35:24.34 ID:IAeApo/t0.net] >>383 全文そのまま返すわ
394 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:41:09.16 ID:EM3O7qLA0.net] 同じファイル 同じ中身 大きく分けて2種類あり、 それぞれ、同じの定義の詳細は色々と考えられる
395 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:45:45.22 ID:4xU9Va0kM.net] >>382 > ID:4xU9Va0kM=ID:HtO+dzj70 勝手にアホな認定するんじゃねーよ そもそも俺はハードリンクとかのファイルシステム依存の話は処理系依存にした方がいいって思う
396 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:46:56.42 ID:4xU9Va0kM.net] >>384 人を嘘つき呼ばわりして謝ることもできない奴がなに言ってるんだよ w
397 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:09:17.34 ID:IAeApo/t0.net] 効いてる効いてるw 嘘つき呼ばわりじゃなく嘘つきという真実を指摘されてファビョーンかよ おまえは考察自体を放棄した この事実はどうにもならない
398 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:12:02.64 ID:HtO+dzj70.net] >>381 自己レス。 すいません出来ました。以下通ります。autoは無理のようです。 std::function<int (int)> f = [&f](int x) {return x? x+f(x-1) : x;}; >>373 見た目だけなら、上記のようにラムダで再帰すれば書ける。
399 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:58:27.23 ID:DklDUzVR0.net] またいつもの奴が暴れてるのか 相変わらず不毛な話してるな
400 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:59:44.22 ID:DklDUzVR0.net] それで結局#pragma onceが採用されてこなかった理由はなんなん?
401 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 00:09:03.41 ID:vLs/1v3E0.net] 所詮 pragma だから この部分は処理系依存が強く出るので
402 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 00:18:29.43 ID:nldsEJyI0.net] >>388 >>351 にまともな反論してから出直してこい w
403 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 00:25:32.85 ID:ledFfOHm0.net] https://stackoverflow.com/questions/23696115/is-pragma-once-part-of-the-c11-standard https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/YG76sfDJ4f8 open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0538r0.html #pragma onceについて語りたい奴は必ず先に目を通すように じゃないと上で騒いでる馬鹿みたいになっちゃうからな
404 名前:デフォルトの名無しさん [2018/04/27(金) 06:18:50.95 .net] MSアレルギー
405 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 06:26:34.10 ID:mlVlMuXl0.net] >>393 反論とは論に対して反駁することをいう おまえは論を示していない 結果に至る思考過程をすっ飛ばしている おまえこそ日本語を憶えてから出直して来い もう一度言う、反論とは論に反駁することだ
406 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 06:41:55.40 ID:O6TOHWbPM.net] まともに反論できないことはよくわかったよ w 事実を書いてあるだけで思考過程なんて関係ない
407 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 06:51:10.76 ID:fIiVOejaM.net] 天啓が下ったぞ!
408 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 07:38:07.75 ID:ledFfOHm0.net] 事実ってなんだよ 「アホは切り捨てろ!」とかいう標準規格として最低最悪の解決策を取れっていうのはお前のクソみたいな「意見」だろうが お前の意見は必ず自動的に実現して事実になるの?神なの?
409 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 08:05:14.16 ID:O6TOHWbPM.net] そういう意見を書いてあると言う「事実」な マジで理解力無さすぎ w
410 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 10:03:10.93 ID:mlVlMuXl0.net] >>397 それは違う 何からどう演繹した結果なのかを示さねば戯れ言に等しい 戯れ言でよければ過程は伏せたままでいいぜ どーせそんなもんバカにはねえだろうがな
411 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 10:58:06.07 ID:COWnkDW0d.net] >>400 じゃあ俺も、お前はここに二度と来ないでに全財産を福島と熊本に寄付した上で家族もろとも自殺するべきであると意見するわ こういう意見を書いてあるという事実に反論できなければお前の負けな
412 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 12:28:04.63 ID:O6TOHWbPM.net] >>401 お前が何を言っても>>339 に書いた「無視」と言う文言を理解できなかった>>346 がいたと言う事実は変わらない しかも誤魔化すために話そらそうと必死な>>353 がいた事実も変わらない >>402 別に意見を言うのはいいんじゃね? それに何の意味があるのか知らんけど w
413 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 12:30:27.46 ID:Mg+ERRyAd.net] いつまでやるの?
414 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 12:42:19.37 ID:COWnkDW0d.net] C/C++の規格はgets()とかいうアホな使い方しか出来ないアホ関数を30年も削除出来なかったくらいアホに気長に付き合う規格なんだよ 広く使われ続ける規格の宿命としてその方針は変えられない だからお前の言うようなアホを無視して切り捨てるという選択肢が採用されることはないという事でこの話終わりな
415 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 14:52:44.93 ID:mlVlMuXl0.net] >>403 もう一度言う 提示してねえだろ、おまえは無視つったんだよ 人をアホよばわりしようと焦るあまり 論議そのものを粗末に扱ったのが おまえの運の尽きだ そこでどんなに暴れようが おまえは何も論じていない よって論に反駁してもらえることもない ましてや事実に反駁というシュールなことをする者もいない
416 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 16:36:21.86 ID:j5Ya8YmN0.net] アホではないから残しているのでは
417 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 18:27:57.39 ID:O6TOHWbPM.net] >>405 マジで言ってるの? gets() なんてアホには使えない関数の典型だろ バッファーオーバーフローはプログラマーの責任 って言う言語だぞ w
418 名前:850 mailto:sage [2018/04/27(金) 18:31:51.94 ID:Q1GjkYeyr.net] >>376 言葉尻を捕まえて悪いが、クラスや関数を作ることをそう大仰に捕らえることはない。 単純な機能のクラスや関数など幾らでもある。
419 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 18:33:12.92 ID:O6TOHWbPM.net] >>406 >>351 を読み直せ 無視するのは誰で誰を無視するのかを答えてみ まあ恥ずかしすぎて答えられないだろうからまた明後日の話に逸らそうとするんだろうけど w
420 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 19:01:47.01 ID:mlVlMuXl0.net] >>410 読み直して欲しいのかよ お願いしろよ 読み直してやるかも知んねーからw
421 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 20:31:10.54 ID:nldsEJyI0.net] はい、基地害乙
422 名前:片山博文MZ mailto:sage [2018/04/27(金) 20:33:29.96 ID:HF3+Vuoyd.net] りかいできないならからんでくるなよダブリュー 「アホなりようしゃはあいてにしない(イコールむしする)」っていうしようを「ていじ」してるってはなしだ、ボケ
423 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 20:46:16.80 ID:mctUhDKod.net] よくわからんが、糞コテの自演てこと?
424 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 23:50:18.78 ID:mp1hh4hd0.net] C/C++は池沼お断りの言語なんだから、このスレも同じノリでいいと思うぞ。 指摘しても理解できないのは、日本語が出来ない=池沼だから。 慣れる慣れない以前の問題だ。
425 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 06:20:59.27 ID:BHnoJcFn0.net] ていうか#pragma once規格化不能論者が言い立てる不可能ケースは (1) #ifdef〜#endifインクル〜ドガ〜ドでも曖昧さが残り処理系依存になるケース (2) #pragma onceで自動的にガード条件を設定する際の困難(#ifdef 〜の記号をうまい具合に考え出すことに相当 (3) #ifdef〜#endifインクル〜ドガ〜ドにおける既存のアクロバティックな使い方への対応(>>361 (4) #pragma onceで想定されるアクロバティックな使い方の解釈(>>321 のn種類しかない (1)は#pragma once固有の問題ではないから、#pragma once規格化の障害とは言えない ハードリンクとかの件でここまで費やされた長い紙数はムダすぐる… (2)と(3)は、#pragma onceが力量不足ならそのケースだけいつでも#ifdef〜#endifインクル〜ドガ〜ドに戻ることができる プリプロセッサの基本特性まで変えようというのではないのだから… (4)はエラーにすればよい #pragma onceの解釈を単純な#ifdef〜#endifインクル〜ドガ〜ドの置き換えと限定するなら可能なはずや いままで20数年にわたって規格化委員会で話題に上りながら規格化されないのは、 この件の抜本的な技術である「モジュール」の規格化が控えていると全員が錯誤していること、これにつきるだろうJK [] [ここ壊れてます]
427 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 06:57:19.27 ID:ibkTuaSK0.net] >>416 とりあえず、 #pragma onceの仕様を文章にしてみて そんなに簡単じゃないから
428 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:52:46.94 ID:BHnoJcFn0.net] ■ #pragma onceの俺様仕様 (ヘッダファイルの集合の規定) 1. インクルードされるヘッダファイルを#pragma once付きとそれ以外とする。 ただし、次のいずれかに該当する場合はエラーとする(ヘッダファイルに含めない) (1) #pragma onceがコメントを除くファイル先頭に現れた場合 (2) #pragma onceがコメントを除くファイル先頭に現れ、かつ ファイル内の#if〜#endifの入れ子がファイル内で完結しない (ヘッダファイルの識別) 2. #pragma once付きのヘッダファイル同士は、ファイル名で識別する。(ディレクトリパスは無視) (ヘッダファイルの展開) 3. #pragma once付きのヘッダファイルのうち、上記2の規則により同一と判定されるファイルは 単一のコンパイルの中で、2回目以降の展開を無視する。 4. #pragma once付きでないヘッダファイルの展開は現行どおりとする。 いじょ
429 名前:デフォルトの名無しさん [2018/04/28(土) 07:55:01.29 .net] >>418 #pragma onceってファイル先頭に置くものだと思ってた ファイル末尾とかにおけばいいの?
430 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:56:19.92 ID:zm4OWgENM.net] ソフトウェアが巨大化してくると、サブモジュールが各々同一のSDKを抱えてるなんてことがある。 複数のサブモジュールを読み込んでるソースコードは間接的に同一ヘッダを読み込む可能性があるが、 cvs等が異なるidを埋め込んでいたり、それぞれ微妙にバージョンが異なっていたり、エンコーディングや改行コードが異なっていたりする場合、 Includeガードならビルドできるが、pragma onceだと同一ヘッダを異なるファイルと認識してしまい、エラーになってしまったので、サブモジュールを全て自前で修正する羽目になった。 なんてことがあるかもしれない。 結局ヒューリスティックな実装しかないんでないの?
431 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:57:50.65 ID:BHnoJcFn0.net] 訂正; 誤: (1) #pragma onceがコメントを除くファイル先頭に現れた場合 正: (1) #pragma onceがコメントを除くファイル先頭以外に現れた場合
432 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:58:55.91 ID:BHnoJcFn0.net] >>420 >>418 の仕様によるヘッダファイルの展開のどこにヒューリスティック要素があるのかkwsk、
433 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:04:07.12 ID:zm4OWgENM.net] >>418 >ファイル名で識別 過去遺産をすっぱり切り捨てる斬新な発想に目から鱗
434 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:05:18.62 ID:BHnoJcFn0.net] >>423 藻前は>>418 の仕様の項番4を理解していない 出直せ
435 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:15:15.14 ID:zm4OWgENM.net] 今後ヘッダファイル名にはドメイン名を頭につけなきゃいけないね。 メアドでもいいかな?
436 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:20:58.21 ID:amQJLuCm0.net] >>417 適当な処理系の言語リファレンス見ればいいだけ そんなに難しくはないぞ
437 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:24:01.11 ID:WRqkde3l0.net] >>422 420が提起した問題に答えろ kwskはそれからだ
438 名前:デフォルトの名無しさん [2018/04/28(土) 08:33:55.15 .net] >>427 是非は置いといて、ファイル名で識別するって書いてあるじゃん 文盲なの?
439 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:13:26.88 ID:clK1o5V+0.net] つまりfooSDK/interface.hとbarSDK/interface.hは同一として判定するんだな たいへんだー
440 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:22
] [ここ壊れてます]
441 名前::50.78 ID:WRqkde3l0.net mailto: 結論を急ぐあまり考察が浅くなりすぎだな [] [ここ壊れてます]
442 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:23:37.16 ID:ibkTuaSK0.net] #pragma onceの前に改行があったらエラーですかwww
443 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:27:57.75 ID:amQJLuCm0.net] >>420 それ単に管理がなってないだけだろ どのバージョンのヘッダーを読み込むかを管理できてないとか怖すぎる
444 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:34:33.18 ID:WRqkde3l0.net] >>432 どう管理しろと? 混用しているライブラリに偶然同じファイル名があって どちらもインクルードガードされているということを 「管理」で回避できるのか?
445 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:42:57.08 ID:zm4OWgENM.net] >>432 えー、cvs keywordはどうするのー? サブモジュールを格納してたリポジトリ毎に値が異なるよ? 自動的に改行コードを修正してくれるリポジトリの場合はー?
446 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:45:12.10 ID:ibkTuaSK0.net] まずは世の中のプリプロセッサのpragma onceの仕様がどうなっているかを調べるべきかと
447 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:54:13.99 ID:EXYGb8MJ0.net] 具体的な話になったら一気にレベル下がったなw
448 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:21:03.59 ID:amQJLuCm0.net] >>433 話の流れを理解せずに無駄に絡んでくるなよ... インクルードガードならとりあえずビルドできるって言う話だぞ >>434 同一のSDKなんだから同一のものを指すようにすればいいだけだろ
449 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:24:05.76 ID:ibkTuaSK0.net] 目的は インクルードのループを防ぎたいのと 同じ定義を複数回行うことでエラーになるのを防ぎたい ってことだよな これをインテリジェントに行ってくれるのが理想 インテリジェントな物を仕様にするのは難しいし、 時代が進めばインテリジェント具合も変わる >>418 みたいなあまりにショボい仕様だと 後々不満が出ることになる
450 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:28:01.67 ID:WRqkde3l0.net] >>437 答えになってないぞ 今 #pragma once について話しているよな インクルードガードを #pragma once でやっていたらどうなんだ
451 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:28:57.76 ID:BHnoJcFn0.net] >>429 >>434 現行のヘッダファイルでうまく行っているのならそのままでええ(>>418 項番4はそのためにある そうではなくて、もしも(例えば)マイクロソフトのVisual C++の#pragma onceを使って書かれた過去の遺産の尊重が大事なら そのときは>>418 の方の#pragma onceを#pragma once2とかに代えれば良いが そりゃー(例えば)マイクロソフトのVisual C++の#pragma onceが先行して規格になった後の話なので今は無視 >>435 >417からの流れと考え合わせるに、 「僕ちゃんの考えた理想の#pragma onceじゃないと嫌なの!!!>418のクソ単純な仕様は正しくとも認められん!!!」ってことですかそうですか… なお>>431 の指摘は評価する >>436 抽象的な言い回しで無意味に高尚な議論に見せかけている連中の方が多数派 空っぽなのに…
452 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:29:34.95 ID:ibkTuaSK0.net] 当然互換性の問題もある 今まで動いていたものが正しく動かなくなるのであれば支持されない だから>>435 も非常に重要
453 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:33:35.22 ID:BHnoJcFn0.net] >>441 時間差だったかもしれんが>>440 の最初のパラグラフ参照 存在しない規格との互換性の問題を喚かないでいただきたい、というのはあるが 回避策も示しているのだからオール無問題
454 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:33:47.48 ID:ibkTuaSK0.net] >>429 の例で 2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな 中身が全く同じであれば防ぎたいし 全く別の定義であればそれそれぞれをインクルードしたい
455 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:35:03.59 ID:ibkTuaSK0.net] >>442 #pragma onceの仕様はVisual C++しか実装してないと思ってる?
456 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:38:47.00 ID:BHnoJcFn0.net] >>443 >>444 >2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな ああ>>443 の脳内にはそういう要求もあるんですねわかります その場合は>>418 項番4でドゾー 藻前ら>>418 の単純さをバカにするが藻前らの論理展開のアレっぷりも相当なもんやぞ…
457 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:42:05.24 ID:ibkTuaSK0.net] いずれにしろ>>418 みたいなチープな仕様じゃ誰にも支持されない
458 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:45:00.58 ID:WRqkde3l0.net] ツッコミ殺到でボコボコなのに勝利宣言してやがるな つっこんだ人たち(ここのほぼ全員)にバレバレなのに滑稽な
459 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:10:27.31 ID:ueAKslGb0.net] >>418 ,421はミニマムの仕様を提示しただけで、つまり、 この仕様で問題ない場合は #pragma once で手抜きが出来て、 無理な場合は従来通りインクルードガード使えってことだろ。 俺はありだと思うぜ。仕様ってのはこういう割り切り方をしないと決まらない。 C++のラムダなんて後付で仕様を拡張して行っているし。(このやり方がいいとは思わないが) ただ、この仕様だと現行の #pragma once よりも割り切っているのがイマイチで、 「今」この仕様では却下されるだろう。 「#pragma once が全くない世界」なら、とりあえずここから出発するのもありだっただろう。 現行の #pragma once は常識的に考えて、 ・ファイル実体が同じ場合(ハードリンク/シンボリックリンク)は対応可能 ・コピーの場合(ローカルに xxx.h を tmp_xxx.h にしてデバッグ出力を改変したり)には対応不能 だろう。だから使用条件としては、 ・全ファイルがローカルファイルシステム上にあり、ヘッダファイルの改変は行わない であり、普通に個人レベルで開発する場合はこれで全く問題ないし、妥当だ。 会社で10-20人レベルで開発する場合、どのみちルールを子細に決めることになるし、 そういう場合は従来のインクルードガードでやれ、という割り切りも妥当だよ。
460 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:11:35.35 ID:ueAKslGb0.net] なお俺が推す仕様は、 ・#pragma once のファイル内では複数定義のエラーを無視する というものだ。従って、 ・現行の#pragma once とは違い、対象ファイルは必ず「ファイルとしては」「読み込まれる」 (これは現行のインクルードガードとも同じ) ・定義されている物のシグネチャが既に存在するものと全く同一だった場合、無視する。 ・シグネチャが異なっている場合、普通に読み込む(コンパイル対象とする) (勝手にデバッグ関数を追加されていた場合、その関数だけはコンパイルされる) ・#pragma once のファイルを全部パースし終わった際、「全部重複」「全部新規」ではなかった場合、警告を出す。 (正しく使えば「全部重複」「全部新規」のどちらかになる。 改変《追加》した場合は「一部新規」となり、警告にする。「一部欠落」は検知しない。) というものだ。 この場合、要するに「読み込んで同じだったら無視」なので、 #ifdef 内等、かなりアクロバティックに使われても、問題なく、使用者の直感通りに動作する。 改行の追加、コメント変更等は全く問題ない。 ただし常に全部のファイルを読み込み、初段階のパースは行うことになるので、 現行の #pragma once やインクルードガードよりは速度は劣る。 とはいえ、今更ここが問題になる時代ではないし、問題になるようならインクルードガードを使えと割り切る。 つまり、面倒なら #include を使わずに、全部 #pragma once にも出来る、というもので、 実際これで問題無いと思うんだがな。
461 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:15:31.75 ID:aIENMcPWd.net] もう書かなくて良いよ アホだってこはみんなわかったから
462 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:18:31.52 ID:aIENMcPWd.net] ヒント インクルードループ
463 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:22:35.75 ID:aIENMcPWd.net] インクルードのネストがn段 それぞれの段、m個のインクルードファイルからm個インクルードしてるとします 何パス必要でしょう
464 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:14:39.04 ID:wZlaoeXA0.net] >(ディレクトリパスは無視) 現行の#pragma onceでこんな実装になってる処理系あるかなぁ
465 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:22:28.92 ID:amQJLuCm0.net] >>439 日本語で桶
466 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:24:23.32 ID:amQJLuCm0.net] >>438 , >>446 > >>418 みたいなあまりにショボい仕様だと > 後々不満が出ることになる でも具体的には指摘できない ってか w
467 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:26:40.87 ID:aIENMcPWd.net] 具体的にたくさんあがってるのが見えないのかな
468 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:51:19.85 ID:NasUyYi90.net] プリプロセッサが諸悪の根源
469 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:51:48.61 ID:NasUyYi90.net] #define多いと読む気しない
470 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 13:09:32.49 ID:amQJLuCm0.net] >>456 レス番も引用もできないクズ乙 w
471 名前:デフォルトの名無しさん [2018/04/28(土) 14:18:44.28 ID:0IOpQOT30.net] static変数(クラスのインスタンス)がプログラム実行時にそのメンバ関数呼び出し時にその中で、 newをすると既存のヒープ領域を破壊することはありますか? どうもこのように解釈できる現象が起きているようなのですが、調べても分からずアドバイスを頂ければ幸いです。 環境はMacのHighSierra、コンパイラはbrewから持ってきたLLVMです。
472 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 16:33:32.77 ID:ueAKslGb0.net] >>460 99%以上の確率であなたのバグです。 1行目の意味はよく分かりませんが。
473 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 16:51:34.89 ID:ueAKslGb0.net] ああすまん、何となく1行目の意味は分かった。 ・クラスインスタンスをstatic変数に入れ、そのメソッドを呼んだ 事をそう表現したのかな? だったらはっきり言ってstatic云々関係ない。 GCなんて無いから「statc変数に入れたら忘れてGCされてしまう」みたいなことはそもそも無い。 ヒープを壊しているのはユーザーです。つーか、ランタイムもないし。 ガチでコンパイラのバグだと思っているのなら、 どのみち再現コード(その場合は20行程度か)を作るしかない。 その過程で君のバグだと気づけるだろうさ。 ただこのように「下から」デバッグをするのは時間がかかるから、俺は嫌いだけど、 君がそう思うのならやるしかない。 C/C++は広く長く使われて来ている言語だから、 現在もバリバリに使われているコンパイラなら、この辺の基本的な部分にバグは無いと思うよ。 static変数に確保するのはマイナーかもしれないが、滅多にやらないってほどではないし、 そもそも上記の通り、コンパイラにとって危険のある(バグに命中する可能性のある)使い方でもない。
474 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 16:59:13.74 ID:9z8isRDe0.net] >>460 破壊って何?
475 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 17:20:06.35 ID:aIENMcPWd.net] ふつうに、 クラスのインスタンスがstatic宣言と読んだけだ static MyClass a; スコープローカルかファイルローカルかはわからん
476 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 17:29:35.84 ID:ueAKslGb0.net] >>450 >>464 日本語でおk お前は半島に帰れ >>452 それでお前は何パスだと思うのさ? 予言してやる。お前は言えない。 なぜならお前は馬鹿であり、それがばれるのが怖いから。
477 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 17:46:24.07 ID:aIENMcPWd.net] おれは数学の専門家だぞ わからないわけがない
478 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 17:46:53.04 ID:aIENMcPWd.net] なぜ問題を出したのか考えてみ
479 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 18:39:11.84 ID:ueAKslGb0.net] ひとまず俺の一つ目の予言は的中だな。 次に行こう。 >>467 ID:aIENMcPWd お前の日本語の間違いをすべて訂正してみろ。 2つ目の予言をする。お前は言えない。 なぜならお前はゴキブリ韓国人であり、間違いを認識できていないから。
480 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 02:23:46.17 ID:UY96NiMha.net] C++でプラットフォームに依存しない音楽再生ライブラリってある?特にlinuxで使いたいんだけど。 mpg123とかいうのもみてみたんだけどプログラムに組み込むやり方が分からない
481 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 02:25:23.22 ID:kTR2ZRC/0.net] MIDAS
482 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 07:28:51.71 ID:riHNUW7H0.net] Gstreamer
483 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 10:01:20.67 ID:4Txko8z40.net] 質問ですが Q1. 浮動小数点型について表現しえる最小の値(負の値のうちの絶対値が最大のやつ)を取得する 環境非依存なやり方はどうすれば良いの? -std::numeric_limits<double>::max()とか -DBL_MAX でおk? Q2. テンプレートを型引数が整数型と浮動小数点型で分けたいんですが 同じ名前のテンプレート名のまま、テンプレートの特殊化的な簡単に済ませる方法は無い?
484 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 10:55:07.91 ID:6B047Ccs0.net] >Q2 template <typename T, bool = std::is_floating_point<T>::value> struct hoge {}; template <typename T> struct hoge<T, true> {};
485 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 11:05:23.85 ID:iHQcqnOH0.net] >>472 >Q2. こういう事? https://ideone.com/oWzlMP
486 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 13:22:08.35 ID:WuAwAiPA0.net] >>472 std::numeric_limits<double>::lowest()
487 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 13:56:48.76 ID:4Txko8z40.net] まりがとうございます >>473 >>475 すばらっし >>474 言葉足らずでスマンカッタorz 具体的型名で特殊化する普通の特殊化ではfloatとdoubleのそれぞれについて特殊化した定義を与えねばならないので >>473 みたいなやつを求めていたのです!ヽ(>∀<)ノ!!!111!1!
488 名前:デフォルトの名無しさん mailto:sage [2018/04/29(日) 15:24:36.24 ID:AQKaesvCd.net] たまにはlong doubleも思い出してあげてください
489 名前:デフォルトの名無しさん mailto:sage [2018/04/30(月) 23:11:41.90 ID:xhvNrk1GM.net] Boost.Optionalを使う際に、 対象クラスが自分自身の有効無効を変更できるようにしようとしてみたところ、 宣言時に宣言対象を引数にとって初期化できることに気づきました。 変数の引数に変数自身を使うのは仕様的にありなのでしょうか? ttps://wandbox.org/permlink/YLKYol7KdEOhpyGU
490 名前:デフォルトの名無しさん mailto:sage [2018/04/30(月) 23:32:18.45 ID:9aMn2TSu0.net] ポインタか参照なら問題ない 中身は使えない
491 名前:デフォルトの名無しさん mailto:sage [2018/05/01(火) 23:40:40.03 ID:dOOCYV+Z0.net] CObject obj; for(i=0; i<N; i++) { obj = new CObject(); ・・・(処理)・・・ } ↑みたいにdeleteせずにnew演算子でクラスオブジェクトを割り振り続けるプログラムってお行儀悪い? CObject obj; for(i=0; i<N; i++) { obj = new CObject(); ・・・(処理)・・・ delete(obj); } ↑こういうふうにすべき? 👀 Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
492 名前:デフォルトの名無しさん mailto:sage [2018/05/01(火) 23:49:10.85 ID:+P0DkpYu0.net] unique_ptr使うべき
493 名前:デフォルトの名無しさん mailto:sage [2018/05/01(火) 23:54:52.50 ID:2ADD+YWD0.net] 今時newなんかを自分で書いてることに疑問を持ったほうがいい
494 名前:デフォルトの名無しさん mailto:sage [2018/05/01(火) 23:55:37.66 ID:b3AAvo5J0.net] >>480 お行儀の次元の話じゃない
495 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 00:01:31.48 ID:LLl+2Gg10.net] 手っ取り早く動かしたいその場限りのコードならそういうことをやることもある くらいかな
496 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 00:09:49.83 ID:HN9ze8O60.net] ビンラディン並みのテロリストだな
497 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 00:09:55.64 ID:MK7npuGj0.net] そんなにお行儀悪いんでつか(´;ω;`)・・・
498 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 00:43:03.85 ID:Ve
] [ここ壊れてます]
499 名前:qNn1690.net mailto: そういうのやりたいならJavaやC#やれ [] [ここ壊れてます]
500 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 01:21:31.16 ID:9riosu0F0.net] ポインタじゃないものにnewしたもの格納できるとでも思っているのかジャバグラマ上がりのトーシロー
501 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 01:32:41.73 ID:G9KSYPOz0.net] なんでdeleteしなくていいと思ったんや
502 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 01:39:46.98 ID:HN9ze8O60.net] 釣りだと思う
503 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 03:44:38.96 ID:MK7npuGj0.net] deleteしてからnewすることにします・・・ >>488 こうでしたorz CObject* obj;
504 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 06:00:07.99 ID:3K4Hzh4Z0.net] >>480 C++的には for(i=0; i<N; i++) { CObject obj; ・・・(処理)・・・ } でいいんじゃね
505 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 10:02:54.88 ID:EfCiDMro0.net] 大規模なコードで大量にオブジェクト生成するならアリだと思うけど その場合もnewしたものをdeleteするための仕組みは必須だしね 追跡できなくなる、もしくは自分で自分を破棄する仕組みも無いようではダメ
506 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 11:01:41.50 ID:lsKTgXIy0.net] ライブラリに分ける利点ってなんですかね
507 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 14:44:29.23 ID:MK7npuGj0.net] >>482 クラスのメンバ変数に他のクラスインスタンスを召喚するときとか コンストラクタでnewしてやらないといけないと思うの
508 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 14:47:38.93 ID:G9KSYPOz0.net] >>494 複数のプロジェクトで使いまわせる >>495 スマポ(かコンテナ)で大体のnewは回避できる そのケースも回避できる
509 名前:デフォルトの名無しさん [2018/05/02(水) 15:02:47.22 .net] >>495 別にnewしなくてもよくね? なんかサンプル出してみ? new無くしてやっから
510 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 16:18:42.29 ID:MK7npuGj0.net] >>497 class CTest { CFoo cfoo; void CTest() { cfoo = new CFoo(); } }; こんなんとかどうでしょう
511 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 16:23:28.41 ID:BwUG32HZa.net] >>498 class CTest { CFoo cfoo; void CTest(): cfoo() { } }; メンバ初期化子知らんのか
512 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 16:28:43.53 ID:hqQx66t6a.net] 山口メンバーも初期化できたらいいのに
513 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 16:29:15.41 ID:9riosu0F0.net] ヤバいなジャバ上がりw
514 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 16:36:00.09 ID:BwUG32HZa.net] ちなみに非PODならメンバ初期化子に書かなくてもデフォルトコンストラクタで初期化子される
515 名前:デフォルトの名無しさん [2018/05/02(水) 16:36:35.49 .net] そもそも>>498 の例なら初期化子自体いらんしw
516 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 17:10:02.19 ID:MK7npuGj0.net] >>499 そ、そうやって初期化したcfooはdeleteしなくてもいいんでつか?
517 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 17:15:22.77 ID:2RgXx2xAF.net] >>504 変数の寿命を理解してないのか? C/C++で変数の寿命を理解せずコード書くとメモリリークだらけになるから止めるか横着せず勉強するかしてくれ
518 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 17:19:29.16 ID:9riosu0F0.net] >>504 何言ってんだお前は そもそもdelete出来んだろ
519 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 17:35:57.58 ID:EH+UkdGd0.net] 教えてください やりたい事は ↓ https://stackoverflow.com/questions/14706954/how-to-override-the-text-displayed-for-a-property-in-the-propertygrid ここに出てるようなPropertyGridで、数値配列の値を16進で表示したい [0] 0x0001 [1] 0x0002 [2] 0x0003 .... 例えば↑とか、単にこれだけ そうとう調べまくったんだが、配列の例はみつけられなかった 配列でなければ、実装例は結構見つかるんだが・・・ 一見簡単そうなんだけど、俺のレベルでは不可能
520 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 18:09:52.99 ID:2RgXx2xAF.net] >>507 それC++の質問なの? .NETのライブラリ(=>C++/CLI)じゃなくて?
521 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 18:25:45.38 ID:EH+UkdGd0.net] いや、c# です
522 名前:片山博文MZ mailto:sage [2018/05/02(水) 18:26:58.58 ID:fs6y
] [ここ壊れてます]
523 名前:NkAId.net mailto: >>509 スレ違い [] [ここ壊れてます]
524 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 18:29:31.79 ID:EH+UkdGd0.net] ごめん間違えた、ここ C++のスレだった 隣で聞きます。
525 名前: mailto:sage [2018/05/02(水) 18:52:21.12 ID:R3g8E+PO0.net] >>504 delete しなくてもいいのです
526 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 19:04:04.70 ID:MK7npuGj0.net] >>505 >>506 >>512 み、みんな、親切にありがとう・・・
527 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 19:06:49.69 ID:U7aQES8cr.net] >>494 一度に作る分量が減るので間違えにくい 別々の人間が手分けして作れる
528 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 20:14:18.27 ID:sTDjib3HM.net] >>503 そもそも>>498 はコンパイルエラー(もしくは警告)になるだろ... class CTest { CFoo* cfoo; CTest(int x){ cfoo = new CFoo(x); } ~CTest(){ delete cfoo; } void ReNew(int x){ delete cfoo; cfoo = new CFoo(x); } }; みたいな奴を想定してたのかも知らんけどこれでもunique_ptr使えば良いだけだしね
529 名前:デフォルトの名無しさん [2018/05/02(水) 23:29:42.51 .net] どうせ>>498 の CFoo cfoo; はこれまた CFoo *cfoo; のつもりだったんだろう とりあえず>>499 の形にすればnewはなくせる ポインタを保持したい場合も生ポインタはやめたほうがいいね
530 名前:はちみつ餃子 mailto:sage [2018/05/02(水) 23:41:46.06 ID:g0SlpjdS0.net] 可能な限りスマートポインタを使え、そしてスマートポインタで駄目な場合はほとんどないってのはその通りなんだけど、 初心者が生ポインタをちゃんと理解したことのないままスマートポインタを使いこなせるとも思えぬ。 そこらへんはちゃんと分けて、今回の場合はまずは生ポインタを理解するという方向性で説明する場面じゃろ。
531 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 23:47:44.17 ID:MK7npuGj0.net] >>516 >>499 を仰ぎますm(_ _)m
532 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 00:10:52.91 ID:XlBZHwDZ0.net] もうスマポはスマポとして理解させたほうがいいような気がするけどな 下手な生ポの知識は初心者に有害だ
533 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 01:53:27.71 ID:OyWVOyw+0.net] ていうかコンストラクタだから返却値型いらんやん
534 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 02:06:40.03 ID:jt77zXjA0.net] ポインターをdeleteせずに扱う猛者がいると聞いて駆け付けてきた
535 名前:はちみつ餃子 mailto:sage [2018/05/03(木) 02:41:54.13 ID:HFudy7bE0.net] delete をしない戦略ってのは無くはないよ。 アプリケーションの起動時直後にガッと大量のメモリを必要として、 終了直前に全部解放するってパターンなら、 どうせプロセスの終了と一緒にリソースは回収されるのでわざわざメモリ解放の処理を入れる必要はない。 (C++ だとデストラクタは必ずしもメモリを解放するだけではないので注意が必要だが) だけどそういう戦略をとれるのはちゃんと理解した上で問題にならないことを確信できるだけの知識があってこそだわな。 というか、それ以上に、確保したのを解放しないのは「気持ち悪い」と感じる心が C/C++er にはある。
536 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 05:19:48.86 ID:qNLpdLzsd.net] 組み込みだとそもそも終了なんてものがなかったりする
537 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 20:37:30.17 ID:giVWGYEy0.net] 解放しないメモリをnewとか頭湧いてんのか
538 名前:はちみつ餃子 mailto:sage [2018/05/03(木) 20:40:51.26 ID:HFudy7bE0.net] あたまがあったまってるんだ。
539 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 21:00:46.14 ID:Nqnp2049M.net] 確保済みメモリに対してのnewってあるよ
540 名前: mailto:sage [2018/05/03(木) 21:15:35.38 ID:hvfEvXXP0.net] >>526 placement new の意味が今でもよくわかりません…どんなときに使うのかなあ…
541 名前:片山博文MZ mailto:sage [2018/05/03(木) 21:18:01.47 ID:RMsmDfZSd.net] char buf[MAX_BUF]; new(buf) MY_STRUCT(1, 2
542 名前:, 3); [] [ここ壊れてます]
543 名前:片山博文MZ mailto:sage [2018/05/03(木) 21:18:51.15 ID:RMsmDfZSd.net] char buf[sizeof(MY_STRUCT)]; new(buf) MY_STRUCT(1, 2, 3);
544 名前:はちみつ餃子 mailto:sage [2018/05/03(木) 21:19:45.60 ID:HFudy7bE0.net] >>527 VRAM みたいな特殊なメモリを C++ のオブジェクトに見せかけたい場合とか
545 名前:片山博文MZ mailto:sage [2018/05/03(木) 21:20:25.98 ID:RMsmDfZSd.net] すでに確保したメモリーブロック上でコンストラクターを発動させる。
546 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 21:23:27.91 ID:IMqmw2mT0.net] 組み込みとかゲーム機のような、最初に一気に確保する環境で使うんじゃないかね といっても確保済みのメモリに対して断片化しないように管理する仕組み作ったら、必然的にnew演算子もオーバーロードするだろうから結局placement new使わんかもしれんけど
547 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 04:49:56.51 ID:JszYn0L4M.net] クラスを丸ごとDLL化するときにはnew系をオーバーロード しておかないと解放時にエラーになるべ。 ヒープはDLL単位にあるので集めておきたい場合はplacement使う
548 名前:デフォルトの名無しさん [2018/05/04(金) 11:44:28.56 ID:8Ch7v1Nca.net] unique_ptrの配列版でメモリの再確保を行いたい場合どのように行うのがベターですか?
549 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 11:50:52.58 ID:Z8Fitafid.net] 何に対してベター?
550 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 12:02:46.79 ID:uwR6wCpjM.net] >>534 unique_ptr::reset( ) じゃねーの?
551 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 15:25:56.64 ID:xM/0IOG70.net] スマポ使うときは最初にnewするもんなんじゃ…
552 名前:デフォルトの名無しさん [2018/05/04(金) 15:29:55.09 ID:YqO5U4DS0.net] make_unique使ってね
553 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 15:47:45.28 ID:kp+zcI/10.net] 配列伸ばしたいなら素直にvector使え
554 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 22:00:12.15 ID:VI6126jwa.net] いろんな意味にとれるから質問の答えは未定義
555 名前:デフォルトの名無しさん mailto:sage [2018/05/05(土) 18:32:19.19 ID:sJdk0i7H0.net] [][][] [[[ ] X_[[[ [] ][ [] ][][[[]
556 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 13:23:46.73 ID:z9ZCOpRGM.net] 以下のように、派生クラスのメンバ関数で基底クラスのメンバ関数を呼ぶように 基底クラスが派生クラスに強制する方法はないでしょうか? ttps://wandbox.org/permlink/K4IHMYwOsutPQz3i
557 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 14:01:54.85 ID:f5coeozT0.net] FAQやな インターフェースとカスタマイズポイントを分けろ struct base { void f() { //非仮想 cout << "base" << endl; this->f_custom(); } private: virtual void f_custom(){} }; struct child : base { void f_custom() override { cout << "child" << endl; } };
558 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 14:08:44.77 ID:1ubTl4pj0.net] >>542 NVIじゃね? https://wandbox.org/permlink/zjVuc2KjEPYsahYS
559 名前:542 mailto:sage [2018/05/06(日) 14:59:52.15 ID:z9ZCOpRGM.net] レスありがとうございます。 NVIというのがあるのですね。 (大昔に勉強したような…しかし思い出せず)
560 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 15:57:13.38 ID:Amh1VkyH0.net] 大昔とかの問題じゃなくて基本だぞ
561 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 19:15:44.52 ID:5lNukHv1M.net] >>544 pure virtualなのに関数定義することなんてできたのか… f()とbase::f()は同じ関数なんだよね?
562 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 19:32:29.01 ID:9CUhRDV/0.net] }]] [[《_["[[]]" 〈[]》》 [][][]0,1》》〈〉 [] } } "B,V,0%%%,*1BVLO,SASA1`}}//%\\0,1\"VL"\
563 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 19:37:26.47 ID:hMxfhnzD0.net] >>547 俺も知らんかった... 規格上も正しいみたい https://cpplover.blogspot.jp/2013/11/blog-post_24.html
564 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 05:32:12.66 ID:WYJ+W2Mc0.net] >>547 12行目のbase::f()はvirtualを抑止してpure virtualを呼び出す 13行目のf();は動的結合でchi
565 名前:d::f()を呼び出す baseは抽象クラスでnew base{}できないので 13行目の動的結合がbase::f()を呼び出すということは起こりえない だからif(typeid(*this) != typeid(base))のようなチェックをしていない [] [ここ壊れてます]
566 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 22:52:31.63 ID:JZ0Er0Nn0.net] ちょっと根本的な質問を。 C#が既に普及しているなかあえてC++に固執する理由ってある?
567 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 23:34:15.98 ID:Xl7KiTHE0.net] MSのOSしか使わないなんちゃてPGならC#で十分じゃないの
568 名前:デフォルトの名無しさん mailto:sage [2018/05/08(火) 09:42:55.49 ID:JvzvEXdEd.net] mono/Xamarinはしんどいと言う事を知らない世界の内はいいんじゃない? 大体Win限定だとしても高速化するのにC++で書いたのをdllimportするだろう
569 名前:デフォルトの名無しさん mailto:sage [2018/05/08(火) 10:29:13.38 ID:EjLESs2X0.net] ざまりんが苦しい人は信仰が足りないのです 僕は信仰の自由を主張しますけどね
570 名前: mailto:sage [2018/05/08(火) 17:04:15.75 ID:6aMWII0O0.net] >>551 余計な依存関係をかかえないのが嬉しいです
571 名前:デフォルトの名無しさん [2018/05/09(水) 03:49:30.68 .net] Boostとか使ってると余計な依存関係をかかえてしまうけどな C言語が一番
572 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 10:07:16.66 ID:Ajqxpjd7d.net] 一番多くの環境で使えるのはC言語 RAMが数十バイトしかないような非常にチープな8bitマイコンでも使える
573 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 10:29:31.98 ID:ZxmL37bf0.net] 数十バイトだとスタック領域ももパンクしそう、厳しいのではないか?
574 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 10:34:17.87 ID:3kbM/2hPM.net] 流石に盛り過ぎ
575 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 10:54:36.47 ID:7azCP7HQa.net] 知らないで盛ってると言うのはどうかと 昔6ピンpicでc使ってたけどRAMは16バイトだった気がする
576 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 11:01:43.78 ID:7azCP7HQa.net] 調べたら勘違いで自分の持ってたのはSRAM64バイトのpicだった
577 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 11:58:05.29 ID:3kbM/2hPM.net] PIC12F609とかでもプログラム領域は1Kwあるけど 数十バイトしかない奴の型番教えてくれくれ
578 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:00:11.72 ID:jousW3+sd.net] PIC10F200はRAMが16バイトですね 制約は当然ありますがC言語で開発出来ます
579 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:00:58.98 ID:1NFscAG5a.net] C++どころかCすらやってはいけないレベルだな 恥ずかしいやつ
580 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:02:35.51 ID:1NFscAG5a.net] >>562 ROMとRAMの区別がつかない人がなんでこのスレにいるのか?
581 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:04:25.14 ID:3kbM/2hPM.net] ハーバードアーキテクチャのデータメモリサイズだけ書くの 卑怯だと思うの。プログラムメモリは256ワードあるじゃん
582 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:07:19.83 ID:1NFscAG5a.net] >>557 を受けての話だから そのチープなマイコンで開発にCが使えてる
583 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:09:43.50 ID:3kbM/2hPM.net] だから盛り過ぎでしょ
584 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:10:13.60 ID:1NFscAG5a.net] >>568 じゃあできないというのか?
585 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 12:45:08.73 ID:e8iSV/lBM.net] >>551 競技プログラミングとかunity覚えるの面倒とか?
586 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 13:09:28.13 ID:J0gm0Ysvd.net] >>566 RAMってしっかり書いてるじゃん チープなマイコンだとROM/RAMに別れてるのが普通だよアーキテクチャー関係無しに
587 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 18:42:26.74 ID:X9SFPyiC0.net] スタックの話だよね スタックはRAMであることが絶対条件なので ROMがどんだけあろうが関係ない
588 名前:デフォルトの名無しさん [2018/05/09(水) 18:49:54.96 ID:bhGLBTeZa.net] C# と C++ は世の中でどちらのほうが使われているのでしょうか? いま、 C++ の本(ロベール)を読んでいますが、無駄ですか? 柴田望洋訳の分厚い本も買
589 名前:ってしまいました。 [] [ここ壊れてます]
590 名前:デフォルトの名無しさん [2018/05/09(水) 18:54:28.74 .net] C++は無駄とは言い切れないがロベールは無駄
591 名前:デフォルトの名無しさん [2018/05/09(水) 18:59:28.28 ID:bhGLBTeZa.net] >>574 ありがとうございます。 結局、どのプログラミング言語を習得するのがおすすめでしょうか? Python のような言語は除いて。
592 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 19:01:30.85 ID:ZxmL37bf0.net] 何をやりたいと考えているか次第
593 名前:デフォルトの名無しさん [2018/05/09(水) 19:05:22.21 ID:bhGLBTeZa.net] >>576 趣味でアルゴリズムとデータ構造を勉強しています。 プログラミングコンテストの問題(Aizu Online Judge)を解いたりもしています。 もし、プログラマーになるとした場合、もっとも必要とされる言語を使って、 アルゴリズムとデータ構造の勉強をすれば効率的かなと考えています。 セジウィックとウエインの本や講義動画を読んだり見たりするときには、 Javaの入門書を見たりしています。
594 名前:デフォルトの名無しさん [2018/05/09(水) 19:07:11.19 ID:bhGLBTeZa.net] >>576 コンピューターサイエンスを広く学ぶ上で一番適した言語がいいかなとも考えています。
595 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 19:16:40.18 ID:ZxmL37bf0.net] C++のスレで言うのもどうかとは思うが、 初心者が覚えるのに相応しい言語はJavaじゃないかなと思う アルゴリズムだけを学びたいなら、C言語が良いかもしれない 他の人の意見も聞いてね
596 名前: mailto:sage [2018/05/09(水) 19:47:49.06 ID:dHqNIKDN0.net] >>577 そういうのがやりたくて、しかも今 C で片言がしゃべれるのなら、そのまま進めるのが一番いい
597 名前:デフォルトの名無しさん [2018/05/09(水) 20:02:47.70 ID:bhGLBTeZa.net] >>579 >>580 参考になりました。 ありがとうございました。
598 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 21:19:28.33 ID:X9SFPyiC0.net] >>578 アセンブラかVerilog/VHDLあたりじゃね? 今の伝統的言語はユニプロセッサに源流があって 直列一辺倒の弱点が浮き彫りになっている昨今 【広く】学ぶうえでは却って足かせになるぞ
599 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 12:15:01.11 ID:yXMj8vMdM.net] >>578 Occam2 とか XCが最凶かもな
600 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 12:20:40.60 ID:YLAKf1v1a.net] Cはアルゴリズム勉強にはあまり向いてないと思う 以前各言語向けのアルゴリズム辞典みたいのを見比べてみたけど Cのだけ異質な感じ forのカウントいじってあったりして勉強しにくい 少なくともオブジェクト指向入れた言語じゃないと後で生かしにくい
601 名前:はちみつ餃子 mailto:sage [2018/05/10(木) 15:18:57.11 ID:RiSXhiCD0.net] オブジェクト指向が導入されているべきかどうかというよりも、単純に C は抽象化の能力が低いんだよ。 下層レイヤを上手く隠せないから段階的に積み上げていくというのがやり難い。 学習段階では上から下まで見えているって方が分かりやすいということはあるかもしれないので、 どちらが良いかというのは考え方とか好みにもよるので一概には言えないと思う。
602 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 15:24:31.29 ID:bWcYs//f0.net] アルゴリズムの仕組みが言語の内部に隠されると理解を妨げるだろう オブジェクト指向については、別の機会に学べば良い
603 名前:はちみつ餃子 mailto:sage [2018/05/10(木) 15:59:00.64 ID:RiSXhiCD0.net] そうとも言えない。 複雑なものを理解するには「分解する」は基本的なアプローチのひとつで、レイヤを切り分けるのは有用だよ。 それが >>585 に書いた「段階的に積み上げていく」の意図ね。 かといってそれで全体像
604 名前:が見通しにくくなってもそれはそれでアレだし、何がベストかなんて言えないよ。 やりやすいと思った方でやるしかしょうがないんじゃね。 [] [ここ壊れてます]
605 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 16:46:33.01 ID:bWcYs//f0.net] C言語で書かれたアルゴリズムが読み解けるようでないと 後で困るだろう
606 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 17:51:59.26 ID:Ulb5C2sT0.net] C以外だとリストのシャッフルはshuffleだけで済ませられる Cだとshuffleの中身を書かないといけない C以外だと「Combination()を使おう」 Cだと「Combination()を実装しよう」 くらいの差がある アルゴリズムがどこまで指すのか分らないが、楽しいことから先にやればいいんじゃねえの、ということで、C以外から
607 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 18:15:07.55 ID:bWcYs//f0.net] アルゴリズムを学習するって、その実装の中身を理解することだろう
608 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 18:39:39.67 ID:k0RUZ23fa.net] 個人的には、各種ソートや基本的なデータ構造の操作を自前で書くようなシンプルなところから入った方が分かりやすいかと思うけど、まあ人それぞれかなと。
609 名前:デフォルトの名無しさん [2018/05/10(木) 18:45:52.70 ID:yjf1B9Q5a.net] みなさん、ありがとうございます。 セジウィックとウエインのアルゴリズムの本に載っているのは、おそらく ジェネリクスを使っているので一般性もあって、かつ効率もいいプログラム だと思います。 ライブラリのようなクオリティーでプログラムを作るというのが理想です。
610 名前:デフォルトの名無しさん [2018/05/10(木) 18:51:57.46 ID:yjf1B9Q5a.net] アルゴリズムの本というと C 言語でプログラムが書かれた本が多いですが、 やっと C++ で書かれた日本語の本が最近出版されましたね。 セジウィックとウエインの本よりももっと初歩的な本のようですが。 データ構造とアルゴリズム (電子情報通信レクチャーシリーズ B-8) 単行本 ? 2018/2/1 岩沼 宏治 (著), 美濃 英俊 (著), 鍋島 英知 (著),
611 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 19:17:25.91 ID:4Q48RAuxd.net] アルゴリズムの抽象的な部分(オーダーとか適用するデータ構造の再帰性や対応関係)を学ぶならCよりML系の方が向いてるは向いてると思う ただ環境構築なんかの障壁もあるだろうし最終的にCは触るだろうけどアルゴリズム以外の所で詰まりにくいという意味でC#を推してみる
612 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 19:18:39.74 ID:4Q48RAuxd.net] >>594 勿論F#でもいいし理想はそうだが好みというかネットの情報量の多さ的にC#を挙げた
613 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 19:24:56.01 ID:faWxDCCY0.net] C#はLinqが便利すぎてお勉強用としてはどうなんだろうなぁ 何やるかによるけど
614 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 20:05:12.45 ID:4Q48RAuxd.net] ああ勘違いしていた アルゴリズムを勉強したいのではなく >>もし、プログラマーになるとした場合、もっとも必要とされる言語を使って、 >>アルゴリズムとデータ構造の勉強をすれば効率的かなと考えています。 なのね であれば >>573 氏が現役バリバリな時の主流の言語なんて今からじゃ予想つかないだろうし、実務なら最も適した言語が使われるだけだからC++をそのままやり続ければいいと思う コンピュータサイエンス自体死ぬほど広範囲な学問で、実務のプログラミングとの間にもやっぱり開きがあって万能な言語なんて無いよ 敢えて言うなら物理と数学、これだけは裏切らない
615 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 21:40:19.82 ID:n6BTi4dIM.net] >>597 あと英語な
616 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 21:41:29.95 ID:tcNeLXMy0.net] >>585 そこがいいんだよ 隠蔽されたことを忘れたフリをし 本当は忘れていないということの練習に向いている 忘れたフリが綺麗なコードの練習 本当は忘れていないことが性能評価につながる 両立した技能の練習に向いているということだ
617 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 12:08:47.61 ID:CPfY1M+aM.net] >>571 >>572 そもそもROMの反語はRAMじゃねぇし(SAMってのもある) SH
618 名前:ARCだとDMのサイズは0でも、PMさえあれば動く で、PMの事隠してマウンティングすればお前らは受け入れるのか? [] [ここ壊れてます]
619 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 12:33:06.03 ID:Asz7DXCua.net] 今はどうか知らないけどcは標準でvectorやlistやmapがないから そこから始めないといけないのでめんどくさい アルゴリズム辞典見たら配列をdefineされたNやMで確保してた ライブラリとして使う気ゼロ
620 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 13:01:20.12 ID:Mluu9Rs0d.net] >>600 世の中のほとんどのチープなワンチップマイコンはROM/RAM構成なんだよ 世の中を知ってたら>>557 に対して>>566 なんて考えは出ないはずだ
621 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 13:03:39.86 ID:Mluu9Rs0d.net] >>601 Cはチープな環境やOS関連で使われるくらいだからなあ コストのデカイlistやmapなんて無くて当然 必要になったら必要最低限の機能で自力で作る世界
622 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 13:59:40.72 ID:lM6VzEPtM.net] >>602 あーハイハイそうですね〜
623 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 15:05:19.79 ID:KxM4SNOx0.net] >>603 コスト云々よりジェネリクスが無いから汎用コンテナを作るのが難しい
624 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 15:52:32.74 ID:MTbwW/C5M.net] 作るのが難しい人は拾ってくればいいだけ
625 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 18:24:24.95 ID:biwWi4aJ0.net] 数十バイトしかないなら、普通アセンブラで書くだろう
626 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 18:50:06.30 ID:Mluu9Rs0d.net] そうでもない 普通にCが使えるので
627 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 18:55:57.64 ID:Mluu9Rs0d.net] >>605 別に難しくない 標準化されてないから広まってないだけで 作ってる人はいっぱいいる
628 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 19:49:06.46 ID:l0MSXuwV0.net] >>600 だから何? いいよ、じゃあSAMもありにしようや で、スタックの量がCに適するのか適さないのか おまえさんなりの考えを言ってみな
629 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 19:59:50.91 ID:KxM4SNOx0.net] >>609 静的型の恩恵が受けられなくなるだろ?
630 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 20:34:03.62 ID:Mluu9Rs0d.net] で?
631 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 20:40:41.03 ID:x5BQ9FS4M.net] >>611 普通にvoidポインタに置き換えるだけだが。 何が難しいの?
632 名前:はちみつ餃子 mailto:sage [2018/05/11(金) 20:56:19.66 ID:e+Ei11A70.net] 初期の JAVA もコンテナを使うときにキャストが必須ってアレな仕様だったよな。
633 名前:デフォルトの名無しさん [2018/05/11(金) 21:04:30.87 ID:2EGPeEG9a.net] 昔は仕様がダメで段々改良されていくということがありますが、 それはなぜなのでしょうか? その当時はハードウェアの性能上そういう仕様にせざるを得なかったというような 理由があるのでしょうか? それとも単に思慮が足りなかったというだけでしょうか?
634 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 21:16:49.77 ID:Mluu9Rs0d.net] 理由はいろいろ
635 名前:はちみつ餃子 mailto:sage [2018/05/11(金) 21:20:43.57 ID:e+Ei11A70.net] >>615 知見が足りなかったというのが最大の理由だと思うけど、 せざるを得なかった場面よりもその程度で充分だったという方が多いと思う。
636 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 21:23:11.17 ID:biwWi4aJ0.net] 仕様が固まらないうちに作る時は、それなりの暫定仕様か何らかの制限事項を設けて開発したな
637 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 21:36:00.99 ID:Mluu9Rs0d.net] 知見が足りなかったなんてのは少数派と思う シンプルな仕様からだんだんと機能追加で肥大化の方向 ってのがほとんど
638 名前: mailto:sage [2018/05/11(金) 21:43:16.90 ID:/s88DeTW0.net] >>619 C89 からの「関数の引数として構造体が(実体渡しとして)OK」というのは、私には堕落以外のなにものでもないと
639 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 21:53:49.41 ID:HARszYd10.net] 昔のC++にあった(今もある)糞の山は、今のモダンな他言語たちへの反面教師として大いに役立った
640 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 21:55:02.56 ID:Mluu9Rs0d.net] 例えばどの仕様が糞?
641 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 22:06:17.59 ID:KxM4SNOx0.net] >>613 メモリぶっ壊しやすくなるのは十分問題だと思うが ライブラリ利用者側の責任で何とかしろってのはリソースの条件が厳しけりゃしょうがないがさもなくば正当化しかねる
642 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 23:57:53.51 ID:MowAKA7Xa.net] 独習C++は一通り読んだんだが次に読む本ある?問題集みたいなのとか
643 名前: mailto:sage [2018/05/12(土) 00:13:37.95 ID:HeMwMf3D0.net] >>624 私がお勧めしているのは https://www.amazon.co.jp/dp/4894714221/ https://www.amazon.co.jp/dp/4881357786/ 前者は実は難があって、変てこな実装をしている部分もありますが、それを自分で調べて解決すれば、強くなれると思います 後者は STL の解説本です いずれも C++11 以前で今となっては古いのですが、代わりになるような本がない… 両方とも私は読んでいますので、普通の質問には答えることができます
644 名前:デフォルトの名無しさん [2018/05/12(土) 00:24:10.29 ID:TkoJoFTb0.net] 最初に読む本は禿4版一択ですよ。
645 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 01:17:09.76 ID:hwxaPbIq0.net] どの言語でも、入門書の次は、Effective 何々
646 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 05:59:18.81 ID:D96wT16B0.net] >>625 「なぜ」そうするのか 「なぜ」そうなっているのか 他にどんな選択があったのか という思考回路の俺には合わない本だ
647 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 06:50:27.10 ID:QiJLTR+Nd.net] >>623 それは低級言語に求める物じゃない C/C++は低級言語として数十年間圧倒的なシェアであり続けている これってすごいことだと思う
648 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 07:33:39.79 ID:eFTG6CfX0.net] >>623 データ構造の要素が静的に型が決まろうがそうでなかろうが、必要な要素数のメモリを確保する作業に違いはない。 せいぜい型のサイズを余計に掛け算するくらいだ。 確保するサイズが間違っていれば静的に型が決まろうがメモリ破壊は起きる。 もう少し具体的に示してくれないか?
649 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 07:37:30.31 ID:D96wT16B0.net] 静的な型の恩恵がどうたらって mallocがvoid*を返すのと同じだろ 問題ちゃ問題だがそんなもん怖がるやつぁC使いに向かない
650 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 08:45:19.55 ID:vhGL8v7ea.net] >>629 静的なら実行時パフォーマンスには影響しない >>630 「既に壊しうるのだからちょっとくらい壊せる場所増やしてもいいでしょ」には無条件では同意しかねる >>631 向いていようがいまいがCの案件はあるわけで, 可能な限り安全にコーディングしたいと思うのは可笑しいか? で話を戻すと, 汎用コンテナのCでの実装には, 大きく分けてもdefine使った型安全な実装とvoid *を使ったオーバーヘッドあり型安全なし実装が考えられるわけで, まずそれだけでこうして対立し得る 実装上でもいずれもpros/consがあるわけで, そりゃ規格がまとまる道理がないよね, って主張 別に必要最小限の機能で自分で実装することを否定するわけじゃないし, 型安全が絶対だという気もない
651 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 08:57:39.01 ID:QiJLTR+Nd.net] 高速コンパクトと安全性利便性は相反するものだ 諦めろ
652 名前: mailto:sage [2018/05/12(土) 09:08:53.09 ID:HeMwMf3D0.net] >>627 独習の次に Effective C++/Effective Modern C++ は飛躍しすぎではないかな? ついてこれるのか
653 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 09:12:02.44 ID:vhGL8v7ea.net] >>634 必読書ですしおすし
654 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 09:13:51.54 ID:PbE4ojLD0.net] >>632 > void *を使ったオーバーヘッドあり とは何?サイズ管理+アドレスの計算のこと? だったらC++の汎用コンテナでも同じ事を内部でやっているし、オーバーヘッドはないが。 見た目でしか分からない人はCに向いていないぞ。 というか、型安全が欲しければC++を、 そんなん要らんから小さくて早いコードを、というのならCを、ってだけだろ。 その分自分で管理する項目が増えるだけの話で。 選択肢はユーザー側に与えられているのだから、それ以上は要らんだろ。
655 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 09:15:07.55 ID:D96wT16B0.net] >>632 できねえこと言ったってしゃーないだろ Cにはテンプレートがない 諦めるしかない
656 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 09:18:40.30 ID:kx3qluwG0.net] とりあえずスクリプト言語やC#で書く→速くしたい所をC++で書く→もっと速くしたい所をCやasmで書く これが正解 どれかにこだわって対立させて排他するのはアホ
657 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 09:26:19.92 ID:PbE4ojLD0.net] >>638 同意。 若い奴が統一言語「○○だけ勉強すれば全ておk」を求めるのは自然だが、 そうなっていないのは理由があって、つまりは手抜きと実行効率(速度)の兼ね合いだ。 一時期Cが統一言語だったが、それは他言語がゴミだったから(対抗馬がLisp)であって、 C++で再統一されることはないよ。特に今のC++では。
658 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 09:31:37.48 ID:vhGL8v7ea.net] オーバーヘッドについては撤回 >>636-639 だから基本的にそういう役割分担について否定しているわけじゃない Cで汎用コンテナが標準化されることはないだろうっていうのが元々の主張
659 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 09:56:03.80 ID:QiJLTR+Nd.net] >>638 Cで書けることは基本C++で書ける C++で最適化出来ない所はCでも無理 アセンブラしかない
660 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 10:05:55.31 ID:QiJLTR+Nd.net] >>636 CやC++に関わらず専用なコードは汎用に比べて高速コンパクトに出来る事がある つまり、 void*で作って全てのコンテナサイズ(型)同一コードよりも型ごとにコードを作る方が速いことがある C++のコンテナは全て専用コードなので コードの肥大化と引き換えに微妙に速いかもしれない コードの肥大化によってキャッシュミスして遅い可能性もあるけど
661 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 11:33:41.32 ID:VFvkGYoW0.net] >>638 > 速くしたい所をC++で書く→もっと速くしたい所をCやasmで書く asmはいいとしてC++→Cでもっと速くなるケースなんてあるのか?
662 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 11:35:17.48 ID:tcCubJZ8M.net] >>632 >すでに壊してるのだから 一体どこからそんな主張を読み取ったんだ? 勝手に人の主張を捏造せずに、ちゃんと質問に答えてくれないか? あと、void*使わなくても、生成時に型サイズを受け取る方法もある。 汎用コンテナ作るのにdefineで型定義なんてするわけないだろう。
663 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 11:39:23.77 ID:D96wT16B0.net] >>642 qsortやbsearchとかそうだよな C++のsortやbinary_searchには絶対に敵わない
664 名前:デフォルトの名無しさん [2018/05/12(土) 11:44:45.24 .net] >>644 FF外から失礼します 「すでに壊してるのだから」とはどこにも書いてないと思うのですが なぜあなたこそ勝手に人の主張を捏造しているのでしょうか? FF外から失礼しました
665 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 11:48:55.40 ID:tcCubJZ8M.net] >>646 面倒なやつだな。 「既に壊しうるのだから」 これでいいか?
666 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 11:52:21.18 ID:My8LWy2ka.net] ふぁいなるふぁんたじぃ?
667 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 11:59:59.40 ID:FtdYwxfb0.net] 前輪駆動車じゃない?
668 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:14:05.61 ID:D96wT16B0.net] 255
669 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:31:23.28 ID:My8LWy2ka.net] -1
670 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:40:45.91 ID:QiJLTR+Nd.net] 汎用バイナリ < 汎用コード専用バイナリ < 専用コード 速度的にはこう 速度が非常に重要であれば CだろうがC++だろうが専用コードを書くのが一番
671 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:42:10.49 ID:PbE4ojLD0.net] >>643 間接参照を抜ける場合とかだろ。 逆にCよりもC++の方が速くなるコードの方があり得ないと思うが。 実際にC++はCより遅いってのは事実だし。 >>645 お前が値配列と参照配列の区別が付いてないだけだろ。
672 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:44:50.30 ID:D96wT16B0.net] >>653 アンカーミスったか? qsortとstd::sortはどちらも値であろうが参照(ポインタ)であろうが使えるぞ
673 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:49:50.14 ID:QiJLTR+Nd.net] >>653 >>641
674 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:50:14.86 ID:VFvkGYoW0.net] >>653 > 間接参照を抜ける場合とかだろ。 それC++のまま書き換えればいいだけ > 逆にCよりもC++の方が速くなるコードの方があり得ないと思うが。 そんな主張はしてない > 実際にC++はCより遅いってのは事実だし。 だからどんなケースなんだよ STLとか使いまくって遅いとかなら使わないように書き換えればいいだけだろ
675 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:58:57.32 ID:QiJLTR+Nd.net] 厳密に言うと C11の可変長配列はC++には無い C++では例外処理を実現するために関数コールに微妙なオーバーヘッドがある場合がある って感じでCの方が有利な事がある どちらもガシガシに最適化した場合の話
676 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:05:00.64 ID:QiJLTR+Nd.net] x86-32 例外処理を有効にすると 関数コールに微妙なオーバーヘッドが加わる x86-64 例外処理の為のオーバーヘッドは無い その代わり例外発生時の処理は非常に遅い Cの可変長配列のような、スタックに可変長サイズを確保する手段はC++には無い 当然ダイナミックなメモリアロケートよりはスタックに確保した方が速い ただし実際にはあまり使われていないと思われる
677 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:09:56.56 ID:PbE4ojLD0.net] >>654 ミスってないぞ。 >>656 Cの場合は抽象化してくれないんだから、関数を直接呼ぶしかないんだよ。 だから動的解決をしている場合はC++の方が遅く、静的解決の場合は同速になる。 CのほうがC++より遅いケース出してみろ。ないから。 C++は機能的にはCをラップしてるんだよ。 例外とか、クラスの動的解決とか、スマポ(キリッとか。その分管理が楽だが、速度は遅くなる。 Cの場合はC++のラッパ抜きで直接呼ぶことになるから、その分速い。それだけ。
678 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:11:52.26 ID:PbE4ojLD0.net] >>658 > x86-64 > 例外処理の為のオーバーヘッドは無い > その代わり例外発生時の処理は非常に遅い これマジ? 煽りじゃなくて仕組みを知りたいから、キーワードかURLくれ。 こちらでググって確認する。
679 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:28:22.55 ID:QiJLTR+Nd.net] 自分でディスアセンブルしたり バイナリ比較したり実測してわかったことで 仕組みがまとめて書いてあるような所は知らない
680 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:31:21.41 ID:PbE4ojLD0.net] >>656 > だからどんなケースなんだよ 探してやったぞ。 > 実験によれば 6-13% の実行時間が単なる関数のディスパッチに用いられ、オーバーヘッドは場合によって 50% に達する[1]。 > https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A2%E6%95%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB C++は動的な型の変更はなしなので、コンパイル時に対象関数は確定するだろ。それが仮想関数であってもね。 だからvtblを用いた実装自体がコンパイラの単純さを採って、実行速度を捨ててる。 JavaScriptみたいに、実行時に型を変更してしまえる言語ではないのだから、 型毎にテーブルを持つこと自体が冗長で、 テンプレートみたいに、仮想関数が上書きされた毎時点で平面的に展開し、直接それを呼ぶ実装も出来るんだよ。 勿論オブジェクトコードは膨らむが。 Cの場合は、どちらでやるにしても「自前で」実装するしかない。だから当然、選べる。 C++の場合は、選べないでしょ。一般的にvtblの実装になる。(コンパイラの都合だが)
681 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:35:45.30 ID:QiJLTR+Nd.net] C/C++で基本同じ結果となるコードが書ける 同じ結果となるコードを書けば結果は同じ ってだけで 当然違う結果となるコードを比べれば違う結果になる 当たり前
682 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:36:37.92 ID:PbE4ojLD0.net] >>66
683 名前:1 ちなみに計測したときのOSは何? なおその兆候が正しいなら、x64の場合はハードウェアで対応していることになる。 [] [ここ壊れてます]
684 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:38:15.87 ID:QiJLTR+Nd.net] クラス関数はthisを第一パラメータとして渡してるだけで、これは構造体でも同じことが出来る virtual関数は関数ポインタテーブルへのポインタを持ってるだけ 同じことは当然Cの構造体でも出来る テンプレートは型ごとにコードを書くのと同じ
685 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:39:04.83 ID:PbE4ojLD0.net] >>663 だから、いわゆるC++の機能を使ったら、管理が楽になる分だけ遅くなる、というだけ。 C++の機能を全く使わないコードはCと言うんだよ。 だから、C++はCより常に遅い。それだけ。
686 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:41:20.71 ID:QiJLTR+Nd.net] >>664 そういえば、 例外発生時のスタックにあるリターンアドレスを検索するとかどこかでみたような どこかに仕組みが書いてあった気がしてきた
687 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:42:51.66 ID:QiJLTR+Nd.net] >>666 君独自の定義とか持ち出さないでくれ
688 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:44:31.67 ID:PbE4ojLD0.net] >>665 > virtual関数は関数ポインタテーブルへのポインタを持ってるだけ > 同じことは当然Cの構造体でも出来る Cでやる場合は、関数ポインタを引数で渡すことも出来るんだよ。 (勿論C++でも出来るが、クラスを使う意味が無くなるから普通はやらない) この場合、間接参照が抜ける分だけ速くなる。 (実際はメモリアクセス1個よりはキャッシュを壊すことの影響の方が大きいとは思うが)
689 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:45:03.28 ID:QiJLTR+Nd.net] C++独自の機能を使うとCより常に遅い? それは嘘だな
690 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:47:32.05 ID:QiJLTR+Nd.net] >>669 C++にだけ独自の縛りを設けてCのが速い? 強引に主張を通したいのはわかるが そろそろ痛いぞおまえ
691 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:49:15.64 ID:PbE4ojLD0.net] >>667 それはスタックウォークという、従来の例外実装方法だ。 君の場合なら、x86がそれになってる。 >>670 ならC++の機能を使って、Cよりも速くなるケースを挙げてみろ。 ないから。
692 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:51:18.48 ID:QiJLTR+Nd.net] もとは>>638 だ C++で最適化に行き詰まった時に わざわざコンパイラをCに変えて最適化する事なんてないから Cっぽい記述とかアセンブラっぽい記述とかなら そりゃいくらでも
693 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 13:53:21.45 ID:QiJLTR+Nd.net] >>672 前半 自分で調べろ >>672 後半 ええと、... 「C++独自の機能を使うとCより常に遅い」 の否定はわかるかな?
694 名前:デフォルトの名無しさん [2018/05/12(土) 13:53:48.97 .net] >>658 って単に32bitプログラムを64bit CPUで走らせてオーバーヘッドがーって言ってるんじゃね?
695 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:01:29.48 ID:PbE4ojLD0.net] >>674 君は理解できてないようだから、定義を確認しておこう。 ただしこれは一般的な解釈であり、おそらくこのスレの住民は共有してる。 ・テンプレート、クラス構文、スマポ等、 C++コンパイラではないと通らない機能を使ったコードを、C++のコードという。 ・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。 > 一般に、カーネルモジュールをC++で設計するやつは、以下のいずれかだ。 > > (a) 好んで厄介事に巻き込まれたい者 > (b) 自分が書いているのは実はCだと気がついていないC++バカ > (c) 授業でそういう課題を与えられた者 > > (d)を付け加えるなら好きにしてくれ。 > > Linus > https://cpplover.blogspot.jp/2013/05/linus-torvalsc.html 君は多分(b)だね。 今の話題はC++のコードとCのコードの速度比較ということでよろしく。 >>673 > C++で最適化に行き詰まった時に > わざわざコンパイラをCに変えて最適化する事なんてないから そんな話は誰もしてない。 勿論その場合はCのコードに変更し、C++コンパイラを使うに決まっている。 じゃないと他の部分が通らないだろ。 君の定義は、C++コンパイラを使っていればどういう書き方であってC++ということだったのか。 なら話は噛み合わないさ。
696 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:05:34.23 ID:D96wT16B0.net] #
697 名前:define SIZE 100000000 long long array[SIZE]; int comp(void const* lhs, void const* rhs) { if(*(long long*)lhs < *(long long*)rhs) return -1; if(*(long long*)lhs > *(long long*)rhs) return +1; return 0; } int main(void) { clock_t t0 = clock(); qsort(array, SIZE, sizeof(long long), comp); clock_t t1 = clock(); printf("%g[sec]\n", (double)(t1 - t0) / CLOCKS_PER_SEC); //2.288[sec] } [] [ここ壊れてます]
698 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:06:21.60 ID:D96wT16B0.net] #define SIZE 100000000 long long array[SIZE]; int main(void) { clock_t t0 = clock(); std::sort(array, array + SIZE, std::less<long long>()); clock_t t1 = clock(); printf("%g[sec]\n", (double)(t1 - t0) / CLOCKS_PER_SEC); //8.245[sec] ・・・あれ? 何だこりゃ }
699 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:07:22.82 ID:VFvkGYoW0.net] >>657-658 そういやスタックにとる可変長配列はC++にないんだな まあメジャーな環境でalloca( )使えないものはないと思うが 例外は使わないようにすればいいだけかと
700 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:14:29.71 ID:PbE4ojLD0.net] >>678 一応、基本的確認をするが…データは同じなんだよな? 俺の予測では同速。多分そちらの期待も同じだと思うが。
701 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:14:45.58 ID:VFvkGYoW0.net] >>676 > ・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。 可変長配列とか使ってないならC++のコードでもある つまりC++の範疇で書き直してるだけ って言うのが大方の人の解釈だと思うが
702 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:18:31.88 ID:D96wT16B0.net] >>680 うん だってグローバルだからオール0
703 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:20:49.93 ID:QiJLTR+Nd.net] >>676 それは単なる君の定義 100歩譲っても5chで一般的なだけ 普通C言語, C++と言えば、 その規格や規格に準拠したコードを表す
704 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:22:26.74 ID:PbE4ojLD0.net] >>681 それは君の勘違いだね。 その定義ならC/C++を区別する理由がないし、多分LinuxもC++になってしまうだろ。
705 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:26:21.88 ID:D96wT16B0.net] >>676 たとえばヘッダファイルなんか、同一のファイルを Cコンパイラに入力したり C++コンパイラに入力したり ってこともあるよな 内容には無関係で単に Cコンパイラに入力したらCのコードで C++コンパイラに入力したらC++のコードだろ 最適化の内容だってrestrictのように CとC++で違ってくる可能性はあるしな
706 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:27:02.49 ID:PbE4ojLD0.net] >>682 最適化の掛け忘れでは? Cの方はほぼ最適コードだが、(メモリアクセス減らして一時変数に取れとかその程度) C++の方は最適化無しだとトンデモコードが出てくるが、 最適化でそれを消すからおkというノリだったと思ったぞ。 最適化無し同士の比較は意味がない。最大最適化同士の比較やってみそ。
707 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:27:22.97 ID:QiJLTR+Nd.net] 使うモジュールの差を言語で言うから話が紛れる で、 君の定義であるごく一般的な記述を行った場合の話であれば C++の方が速いこともあるしCの方が速いこともある C++はテンプレートによって専用のコードをたくさん作る 当然汎用バイナリよりも専用バイナリの方が最適化がかかりやすいし、 変数よりも即値の方が速いことも多い C++例外処理も有効で、 これによって処理が速くなる場合がある
708 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:27:42.28 ID:D96wT16B0.net] >>686 gcc unko.c -O3でやってる
709 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:29:31.07 ID:PbE4ojLD0.net] >>685 > 内容には無関係で単に Linus全否定かよ。
710 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:30:30.03 ID:QiJLTR+Nd.net] >>682 オールゼロでクイックソート? それは...
711 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:35:18.35 ID:PbE4ojLD0.net] >>687 > 君の定義であるごく一般的な記述を行った場合の話であれば > C++の方が速いこともあるしCの方が速いこともある ねーよ。 実例挙げてみ? それって単なるコンパイラの適性であって、コード自体の速度ではないだろ。 C++とCの本質的な速度差ってのは絶対にひっくり返らないものであって、 例えば、スマポを使っている限り参照ポインタを管理する分だけ遅くなる、というもの。 コンパイラがどう進化しても、「0」「ADDまたはDEC命令」の差はひっくり返らないんだよ。 > C++例外処理も有効で、 > これによって処理が速くなる場合がある ねーよ。C
712 名前:は最初から全部noexceptだ。 [] [ここ壊れてます]
713 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:35:49.71 ID:QiJLTR+Nd.net] ソートって メモリサイズ 比較コスト コピーコスト キャッシュサイズ ... こんなんで結果(時間)が大きく異なるんだよね クイックソートだと データの並び順でもたまたま選んだピボット値でも変わる 1個の場合を比較してもあまり意味が無いぞ
714 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:36:05.87 ID:D96wT16B0.net] clでやってみたら期待どおりの結果になった >>677 1.789[sec] >>678 0.623[sec] 最適化は/Ox
715 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:36:46.83 ID:D96wT16B0.net] >>690 ああ、それは確かに テストデータをまじめに作るか。。。
716 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:37:45.07 ID:PbE4ojLD0.net] >>688 となるとアセンブラを確認するしかないね。 (いいサイトはあったはずだが、普段使わんから忘れた)
717 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:37:57.15 ID:D96wT16B0.net] >>689 ん? なんで?
718 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:44:25.97 ID:PbE4ojLD0.net] >>693 それさ、以下の3条件でやってみ。 1) Cのコード(677)を、Cコンパイラ 2) Cのコード(677)を、C++コンパイラ ←追加 3) C++のコー(678)を、C++コンパイラ Cコンパイラってポインタ周りは最適化をかけないから、多分、 速度差はコンパイラ起因であって、コード起因では無いと思う。
719 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:45:53.71 ID:PbE4ojLD0.net] >>696 > (b) 自分が書いているのは実はCだと気がついていないC++バカ > https://cpplover.blogspot.jp/2013/05/linus-torvalsc.html 君の定義が正しければ、上記(b)の定義が出来なくなるだろ。
720 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:46:34.72 ID:QiJLTR+Nd.net] >>691 C++が遅くなる例だけあげてC++が遅いって言ってもねえ C++が速い例 double p = 1.; int n; for (n = 1 ; ; n++){ p *= n; } C++だと例外処理をつかって、いつオーバーフローするかわかるんだけど 例外を使わないとどういうコードになるかねえ? --- Cで普通に汎用vectorを作るとすると 普通は汎用バイナリで作ることになるんで 関数ポインタを経由する事になっちゃうけど C++のテンプレートだとだとそれぞれ専用なんで 関数コールが速いよね アドレス計算も即値の乗算だから色々なテクニックが使える
721 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:47:13.55 ID:D96wT16B0.net] わりい、ちょっと離席する
722 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:49:16.03 ID:PbE4ojLD0.net] >>699 > C++が速い例 Java出身か?死ね
723 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:51:30.31 ID:QiJLTR+Nd.net] C++だとコンテナを使ってまともなソートを簡単に書けるけど Cだと面倒だからバカソート ってのも普通にある 要素数が少なければ意図的にやったりもする 一般的なコードではCの方が速い事の方が多い ってくらいの主張にしとけば良いものを 強い主張をしちゃうから
724 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:53:13.25 ID:QiJLTR+Nd.net] >>701 ん? 良くわからんが負け宣言てことでいいのかな?
725 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:55:06.52 ID:VFvkGYoW0.net] >>684 何を言ってるのか意味不明すぎる よほど感覚が独自なんだろうな w
726 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:56:22.02 ID:PbE4ojLD0.net] >>699 おっとすまん、ポインタアクセスでのメモリオーバーフローと勘違いしてた。 doubleの無限大の例外って事? 俺はそっちには詳しくないが、浮動小数点例外をソフトウェアで検出するのなら同じだし、 ハードウェアでの検出なら割り込みがかかるだけで、速度的にはこれまた同じだが。 vectorについては完全に君の勘違いだぞ。 Cではそれぞれ専用の物を作るのが基本であり、それを一つにかけるようにしたのがテンプレートだ。 多分、理解の仕方が逆だ。
727 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 14:57:30.76 ID:VFvkGYoW0.net] >>699 > Cで普通に汎用vectorを作るとすると > 普通は汎用バイナリで作ることになるんで 速度云々議論してるところでそんなことする奴はバカって言われてもしょうがないと思う
728 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:04:23.09 ID:VFvkGYoW0.net] >>705 > ハードウェアでの検出なら割り込みがかかるだけで、速度的にはこれまた同じだが。 Cだと言語の範疇ではその割り込みを処理できない なのでif文とかでオーバーフローするのを検出するとかが必要 って話だろ
729 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:07:59.44 ID:PbE4ojLD0.net] >>707 > if文とかでオーバーフローするのを検出するとかが必要 ほう。ならその
730 名前:コードを書いてみ。 そしたらそのコードの中でオーバーフローするから無限ループだね。 そんな言語が実用だったとでも? [] [ここ壊れてます]
731 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:15:00.22 ID:sI+Q43v80.net] >>705 例外については「お前は頭が悪すぎて会話にならん」とだけ コンテナは 「C++の方が遅い例だけ扱って、速い例は自分の想定と違う」 という主張を続けるならお前と会話しても無意味だ
732 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:16:02.69 ID:sI+Q43v80.net] IDが変わってしまった まあそんな事はどうでもいいか
733 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:18:43.30 ID:PbE4ojLD0.net] ちなみに速度比較についてはいろんな人が様々やってるけど、 俺的にまあ公平だと思えるのはこれだね。俺の体感ともだいたい一致する。 おれはC++は1.1-1.3位かと思っているけど。 > C 1.00 > C++ 1.56 > Java 1.89 > C# 3.14 > https://jaxenter.com/wp-content/uploads/2017/09/energy-efficient-languages-768x689.png > https://jaxenter.com/energy-efficient-programming-languages-137264.html C++の機能をバリバリに使ったら、そりゃJavaと大して変わらんだろ、ということになるし。 スマポってのは良くできたGCとコストはほぼ同じだし。(GCは全自動なだけ) Javaは以前は3程度だったが、ゴリゴリチューニングしてきているらしい。
734 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:19:13.36 ID:sI+Q43v80.net] >>706 速度優先のコード前提ってことなら 保護されまくった高機能汎用コンテナを使うこと自体アホってことになるねえ さらに条件を加えちゃってもう
735 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:19:20.53 ID:PbE4ojLD0.net] >>709 僕は知りません、まで読んだ。
736 名前:デフォルトの名無しさん [2018/05/12(土) 15:20:34.21 .net] >>708 なんで喧嘩腰なのかがよくわからないけど、 C言語では「n <= DBL_MAX」というif文が必要ってことだろ? double p = 1.; int n; for (n = 1 ; n < DBL_MAX; n++){ p *= n; }
737 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:23:37.01 ID:PbE4ojLD0.net] >>714 いやオーバーフローするのは p だろ。 と思ったが、もしかして n の方なのか?
738 名前:デフォルトの名無しさん [2018/05/12(土) 15:33:27.39 .net] >>715 なんでもない、忘れて><
739 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 15:48:51.69 ID:PbE4ojLD0.net] >>716 通じたようで何より。 だからオーバーフローの検出はソフトウェアでは辛くて、通常はハードウェアのはずだ。 そしてその場合は割り込みとなり、Cの場合は割り込みハンドラにコードを書くことになる。 C++の場合は『そこから例外処理ルーチンまで引っ張ってきてくれるコード』をコンパイラが用意し、 ユーザーのcatchコードを実行する。つまり、上記『』内コードでラップされてる分だけ遅い。 (実際にはラップだけではなくスタックウォークも行うから相当遅いはずだが) なんだが、実際俺はゼロ割例外しか見てないからオーバーフローについてはよくは知らん。 ハードウェア的には上記の動作になる。 一般的にはオーバーフロー例外は出ない環境(無限大に貼り付けるだけ)で使うのではないかと。 Cではアホみたいにゼロ割チェックやってるよ。 これはC++でも同じだと思うが、C++erはやらないのが作法なのか? とはいえ、ゼロ割はCMP+Brachであり、通常は分岐しないから、x86ではほぼゼロコストだ。 割り込みは関数呼び出し自体が遅くなるから、結局これもCの方が速いはずだが。
740 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 16:03:54.80 ID:68o7JYmcM.net] >>712 お前話の流れが読めてないだろ w >>638 から読み直せ、バカ
741 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 16:11:14.40 ID:eFTG6CfX0.net] overflowてexception吐くんだっけか
742 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 16:35:26.68 ID:68o7JYmcM.net] >>708 バカはこれだから w isfinite( ) マクロとかも知らんのかよ
743 名前: mailto:sage [2018/05/12(土) 16:40:25.40 ID:HeMwMf3D0.net] >>717 オー
744 名前:oーフローで例外や割り込みが起動することはないのでは? 普通、無符号ならキャリー、符号有りならオーバーフローのどっちかのフラグで判定するかと [] [ここ壊れてます]
745 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 17:14:24.19 ID:D96wT16B0.net] unsigned long long array[100000000]; ↑ ここに同じファイルから乱数を読み込んで比較してみた clのオプションは /Ox /arch:AVX gccのオプションは -O3 -mtune=sandybridge qsort cl 27.171[sec] gcc 26.139[sec] std::sort
746 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 17:16:00.99 ID:D96wT16B0.net] 途中で書き込まれてしまった unsigned long long array[100000000]; ↑ ここに同じファイルから乱数を読み込んで比較してみた clのオプションは /Ox /arch:AVX gccのオプションは -O3 -mtune=sandybridge qsort cl 27.171[sec] gcc 26.139[sec] std::sort cl 13.456[sec] gcc 9.103[sec] おまけ std::sortにstd::execution::parを指定してみた cl 3.288[sec] gcc 未実装
747 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 17:16:40.49 ID:D96wT16B0.net] >>690 が正解だったね
748 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 17:49:15.49 ID:D96wT16B0.net] >>698 そこの2通目に箇条書きしてある部分は 1992年当時に俺が思っていたことに近い ・例外がクソ うん、マジクソだ C++11以後マシになったが下痢が治ったという程度 ・newいらねー 演算子newを初めて聞いた瞬間、 mallocの設計理念が大声でわめき立てた C++11以後ブーイングが更にエスカレートした ・キーワードclassいらねー 禿自身が認めやがった ・・・しかし、それがなぜ>>685 への反駁に引用されるのかがわからん
749 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 18:15:21.20 ID:VFvkGYoW0.net] >>721 大抵のプロセッサの浮動小数点ユニットにはオーバーフローしたら例外を発生させる機能がある それを有効にしてるかどうかは環境による あとC言語の話で割込ハンドラーとか言ってる>>717 は単なる知ったかなのでスルーした方がいい
750 名前: mailto:sage [2018/05/12(土) 18:29:10.59 ID:HeMwMf3D0.net] >>726 >大抵のプロセッサの浮動小数点ユニットには 「浮動小数点ユニット」なんですね、ここで確認しておきます。 >オーバーフローしたら例外を発生させる 演算結果が ±inf になることを「オーバーフロー」と言うのですか?ちょっと耳慣れないですね >>726 >C言語の話で割込ハンドラー lsi-c ver3, MS-C ver6 あたりでは、そういうのもあったと記憶してます、 matherr() ですね だから >>717 はあながち間違いとはいいきれない面もあります
751 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 18:40:33.53 ID:PbE4ojLD0.net] >>725 世間では「どちらのコンパイラを使うか」ではなく、 「どちらのスタイルで書いているか」でCとC++を区別してるんだよ。
752 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 18:42:16.14 ID:VFvkGYoW0.net] >>727 > 演算結果が ±inf になることを「オーバーフロー」と言うのですか?ちょっと耳慣れないですね それ反対、オーバーフローしたら結果をinfにしてるだけ
753 名前: mailto:sage [2018/05/12(土) 18:49:16.74 ID:HeMwMf3D0.net] >>729 inf も NaN も浮動小数点表現の中にあるので「オーバーフロー」と呼びにくい、と思っています、まあ人それぞれ
754 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 19:04:56.38 ID:VFvkGYoW0.net] >>730 だから誰もinfがオーバーフローとは言ってないだろ オーバーフローしたらそれっぽい値としてinfを入れてるだけ
755 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 19:24:22.69 ID:yANyZ1HYd.net] >>728 それなら Cスタイル、C++スタイル と言えば良い CかC++かは当然コンパイラで決まる C++は元々上位互換を目標に作られた物だ
756 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 19:29:38.17 ID:VFvkGYoW0.net] >>728 お前の変な世間はどうでもいい
757 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 19:48:04.17 ID:PbE4ojLD0.net] >>732 > C++は元々上位互換を目標に作られた物だ そうだ。そしてだからこそ、スタイルで区別されるんだよ。 元々C++はCの完全上位互換だった。 だから君らの定義なら、C++が登場したときから全てのCは消滅し、C++になっているはずだろ。 実際はそうじゃない。 「○○のコードはCで書かれています」 「○○のコードはC++で書かれています」というのは、 世間では俺の言った定義(>>676 )で使われてる。 その後、CとC++が仕様的に分離してしまったから、 今現
758 名前:在はCコンパイラで通るコードがC++コンパイラで通らないケースが存在する。 だから今は明確に「どちらのコンパイラを使うか」を想定しておく必要があるが、 それもコーナーケースで、 大半の「Cのコード」はC++コンパイラでもそのまま通る。 お前らがC++信者でC++の範囲を広く取りたいのは分かるが、世間はそうじゃない。 C++がCの仕様を全て取り込んだら、 お前らにとってはCは消滅、全てはC++になり、お前らは幸せになれるだろうさ。 ただ、その後も世間はCとC++を引き続き区別するだろうよ。 [] [ここ壊れてます]
759 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 20:09:12.78 ID:sI+Q43v80.net] お前用語の定義の説明とかどうでもいい スタイルの意味ならスタイルと書け
760 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 20:09:24.63 ID:D4Rf+0xLd.net] >>734 それは嘘だなぁ extern "C"が無いとCライクに見えるオブジェクトを吐かない事が常となっているC++(コンパイラ)について、いくらpure Cライクなコードを書いてもpure Cでないextern "C"を書かないとCライクに見えるオブジェクトは吐けないってそれはもうC++でしょう 他の内容にも誤りがあって君の世間ではCライクなコードであればCで書いたと宣言していいらしいけど、少しでも世間のOSSのコードを見て回れば良いよ Cで書かれているのはCだから
761 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 20:30:38.36 ID:PbE4ojLD0.net] お前らが誤解したままでいるのはお前らの自由だが、 お前らの定義だと、CとObjective-Cを区別できないだろ。 あれはCの完全上位互換で、Cコードそのまま食えるらしいからね。 お前らも少し考えれば自分で矛盾に気づけるはずだが。
762 名前:デフォルトの名無しさん [2018/05/12(土) 20:58:42.38 ID:cTj25fOrM.net] >>734 それは言い過ぎでしょ。 流石にそれは、世間を知らなすぎ、と言われても仕方ない意見にみえてきたなあ。。。
763 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 21:57:33.16 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 22:16:57.78 ID:DXsEIRbfM.net] std::filesystemで片方のスレッドでファイルを出力し もう片方のスレッドでファイルが存在していたら読み込むというプログラムを書いた場合 出力中に存在すると判定されて読み込んでしまいそうですが、 そんなことないでしょうか? もし読み込んでしまう場合、自力でフラグ管理かMutexを使うなどして 判定する以外の方法はあるでしょうか?
765 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 23:29:24.63 ID:sI+Q43v80.net] >>739 お前が考えた定義とかどうでも良いって言ってるの
766 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 23:53:40.44 ID:PbE4ojLD0.net] というか何でお前らそんなに必死なんだ? 俺の言ってる定義が世間一般の定義だよ。 そうじゃなきゃ『コード』の善し悪しの議論が出来ないだろ。自明だと思うが。 繰り返すが、C++がCよりも遅いのは事実で、それもググレばいくらでも出てくるだろ。 ただこれはC++そのものよりもオブジェクト指向の弊害だが。 chrismdp.com/2015/04/how-i-doubled-the-speed-of-my-game-by-giving-up-on-c-plus-plus/ https://www.quora.com/Why-is-object-oriented-programming-OOP-slower-than-procedural 逆に言えば、C++の機能をふんだんに使ったとして、Javaに対する速度優位がどれだけあると思ってるの? C++で世界が再統一されることは、今のC++の仕様/方向
767 名前:性ではあり得ない。C++ではCを殺しきれない。 だからRustが生まれた。 >>711 の表を信じるなら、RustはCの代替としてはC++以上に上手く行ってる。 [] [ここ壊れてます]
768 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 23:56:27.27 ID:sI+Q43v80.net] お前の定義じゃないと議論が出来ないのは おまえがアホだから
769 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 00:02:56.89 ID:VV8A9gRv0.net] 定義の布教なんかより技術的な会話をしろよ
770 名前:デフォルトの名無しさん [2018/05/13(日) 00:03:10.09 ID:C4Q8t1mmM.net] 必死なのはどちらなんだろう…
771 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 00:20:47.86 ID:OjngaL1la.net] C++スレらしい流れだと思うよ
772 名前: mailto:sage [2018/05/13(日) 00:59:58.71 ID:eWw2CnRZ0.net] 面白くていいじゃないですかぁ… ここで linus メールをコピペ(省略)
773 名前: mailto:sage [2018/05/13(日) 01:17:46.49 ID:eWw2CnRZ0.net] >>742 面白い表ですね つい C# とか lisp の立ち位置を確認してしまった…
774 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 08:12:09.87 ID:pAG2qz7m0.net] >>739 だからお前のオレオレ定義なんてどうでもいい そもそも>>638 みたいな話でC++→Cで全面書き換えなんてする奴はいないだろ まともなプログラマーならボトルネックを見つけてその部分を書き換える 例えば1つのファイルに関数f1()とf2()があってf2()がボトルネックだからC++からCの範囲で動くようなコードに書き換えたとする お前はそのファイルの記述言語は何て言うんだよ? 関数毎に記述言語が違うとか言い出すのかよ w
775 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 08:18:26.86 ID:pAG2qz7m0.net] >>740 > 出力中に存在すると判定されて読み込んでしまいそうですが、 > そんなことないでしょうか? そりゃ普通にそんなことあるだろ > もし読み込んでしまう場合、自力でフラグ管理かMutexを使うなどして > 判定する以外の方法はあるでしょうか? そもそも何をしたいのよ? 出力完了してから読みたいだけなら出力完了してから読み込む側のスレッド起動するとかする方法もあるだろうし
776 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 09:30:39.74 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 09:51:06.22 ID:pAG2qz7m0.net] >>751 > ただこの定義はもういい。 > 君は間違いを認めないようだし、仮に俺が間違っていたとしても、 > お互いの認識のズレは確認できたのだからそれでいいだろ。 いきなり弱気になってて笑うわ w
778 名前:740 mailto:sage [2018/05/13(日) 10:01:51.37 ID:ntCzq/+YF.net] 自己解決しました。 仮の名前でファイルを書き出してからリネームすれば書き込み中か書き込み済みか 判定する処理をなくせるみたいでした。
779 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 11:07:48.71 ID:Q3HZm9Uhd.net] >>751 コンパイラが変わらない単なる最適化で C++からCにする なんて言わないから普通 少なくともエンジニアの会話では無い 簡単にいう場合は「最適化」「チューニング」だし 詳しくいう場合は中身を具体的に言う 頭の悪い文系を騙すのには使えるのかもしれないけど
780 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 11:09:34.85 ID:Q3HZm9Uhd.net] C言語風なコード と C言語のコード 全く意味が違う
781 名前:638 mailto:sage [2018/05/13(日) 11:24:15.00 ID:YEhpfoS10.net] 「C++で書く」→カジュアルにSTLとか使って読みやすく書く 「Cやasmで書く」→キャッシュやSIMDとか低級に考慮してガリガリ最適化する くらいの軽い気持ちで書いただけなのに紛糾しすぎててワイ将困惑
782 名前:デフォルトの名無しさん [2018/05/13(日) 12:17:41.91 ID:oMdj20B0d.net] 話が長い上にどうでもよすぎる
783 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 12:26:54.36 ID:yds9udeH0.net] またいつものキチガイか
784 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 12:43:30.13 ID:AL0mRZz+0.net] >>756 おまえさんの頭がC++03のまま更新が止まってしまっていることはわかった
785 名前: mailto:sage [2018/05/13(日) 12:46:19.41 ID:eWw2CnRZ0.net] >>759 そう判断した理由は?
786 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 12:51:49.36 ID:AL0mRZz+0.net] C++11以後の「低級」を知らんだろ
787 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 13:01:15.34 ID:DrlMjc+O0.net] C++xx この末尾のへんなナンバリングが施されるようになったのっていつ頃から?
788 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 14:22:28.62 ID:pAG2qz7m0.net] >>762 元々はC++09を狙ってたらしいから2008年頃じゃね?
789 名前: mailto:sage [2018/05/13(日) 14:53:37.16 ID:eWw2CnRZ0.net] >>761 具体的に
790 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 15:27:50.96 ID:AL0mRZz+0.net] >>764 人に聞くのは知らないからだな
791 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 15:47:31.87 ID:CI2jyTw+0.net] >>759 STLが03から入ったと思ってんのか あと >Cコンパイラってポインタ周りは最適化をかけないから、多分、 >速度差はコンパイラ起因であって こんなこと言ってる時点でID:PbE4ojLD0の話は聞くに値しない
792 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 16:22:20.14 ID:AL0mRZz+0.net] >>766 あの流れからどうやってSTLが03からという話になったんだ?
793 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 17:44:42.77 ID:tSRcUD9w0.net] >>756 馬鹿につき合ってすまんかった。 少なくとも俺とLinusは君と同じ定義で使ってるよ。俺の認識では世間もそう。 俺はこれでこれまで話が通じなかったことはないから。 おそらくはCをやらずにC++だけやってる世代と、 必ずCをやったうえでC++に進んだ世代の違いだ。 ゆとりだけで閉じてる世界では、彼らの主張する定義なのかもしれん。 ただまあ、話を聞いてる限り、こいつらは色々と無知だし、無知なことに無自覚だね。 まあもういいが。 自分が知らないだけのことをすべて間違いだと断定しているようでは上達しない。 C++erもここまでゆとり化が進んだのは残念だ。
794 名前:デフォルトの名無しさん [2018/05/13(日) 19:37:46.91 ID:5h/P5YlNM.net] 本当に通じていたのかな? いわゆるフツーの人達は、めんどくさいから適当に話し合わせてテキトーに打ち切るものだが…
795 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:05:09.29 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:17:51.87 ID:CI2jyTw+0.net] 別にC++とCの宗教論争に加わるつもりはないが、 お前qsortがstd::sortより遅くなりがちな理由わかってないだろ アセンブラ使わんでも自分で書きゃCでも同等の速度は出る (というかVCの最適化にハンドアセンブルで本当に勝てるんか?こいつ) >CよりもC++の方が速くなるコードの方があり得ないと思うが。 >CのほうがC++より遅いケース出してみろ。ないから。 調べもせずにこんな決めつけを書く低レベルさ以前に これをC++のスレで書くお前はどう見てもただの荒らしだから。
798 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:53:01.09 ID:tSRcUD9w0.net] >>771 お前は根本的に勘違いしている。 出発点は自前のコードでもいいが、逆アセンブル結果でもいいんだから、 改善できなくとも、遅くなることはあり得ない。 アセンブラを読めない君らでは、これは無理だ。 そして、遅くなる可能性の方が高いからやらないってのは、 馬鹿な君らなりの対処法としては正しい。 まあ、C++スレではC++マンセーしないと荒らしだ、ってのは理解した。 C++erがそこまで落ちぶれたのは残念だが、俺は去るよ。
799 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:57:13.19 ID:HhTyaKjTd.net] それぞれの言語の良くある使い方であれば Cの方が速いコードもC++の方が速いコードも どちらも存在する 同じ処理を同じように書けば普通は同じ速度 (ただし、一部細かい例外あり)
800 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:59:07.22 ID:HhTyaKjTd.net] 一般的な使い方では C++の方が開発効率が高く Cの方がバイナリの性能が高い事が多い (もちろん逆になる要素もある)
801 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:06:47.71 ID:CI2jyTw+0.net] >>772 以前ここに書いたこともあるけど、最近ET+simd(SSE、NEONのイントリンシック)で ゲーム用の自前の線形代数ライブラリとか作ったんで >アセンブラを読めない君ら 残念ながらこれは当てはまらないよw どれだけ逆アセ読んで比較したか・・・・ >C++マンセーしないと お前が”正しい批判をしてれば”荒れてないんだよ ついでに言えば、 >「C++で書く」→カジュアルにSTLとか STLをカジュアルとか呼ぶ辺り、最近のC++界隈は 「流行に流されて自分で考えることを放棄する」という、かつてJavaの流行に荒らされた時代と 同じ愚を犯してるな、とは思うけどねぇ C++er憎し、では色々と話がおかしくなるよ
802 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:07:47.84 ID:HhTyaKjTd.net] 同じ処理を同じ動作で記述出来ない例 Cの可変長配列 C++の例外処理
803 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:09:03.49 ID:pAG2qz7m0.net] もうアホらしくなって途中離脱したけど 例えば関数内のループで使ってるstd::unique_ptr が遅いからその部分だけ生ポインタに書き換えたら ID:tSRcUD9w0 は何言語で書いたって言うんだろ? って言うのはちょっと気にはなる まあまた明後日の長文書くだけだと思うけど w
804 名前:デフォルトの名無しさん [2018/05/13(日) 21:32:59.83 ID:Q+Wg2L410.net] 禿は神。 禿4はバイブル。
805 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:41:37.55 ID:AL0mRZz+0.net] 禿5マダー?(tntn
806 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 22:13:01.62 ID:tSRcUD9w0.net] >>775 > どれだけ逆アセ読んで比較したか・・・・ ならコンパイラ出力コードが手書きアセンブラと比べてどれだけ糞かも知ってるはずだ。 それでその言い方には矛盾を感じるけどね。 > STLをカジュアルとか呼ぶ辺り、最近のC++界隈は その発言は俺ではないが、 基本的には抽象度を上げるのは簡単にプログラミングする為であって、 「カジュアル」という表現は妥当だ。 Cみたいに全部手でゴリゴリ書く意味なんて無い。 速度が問題ない部分は出来るだけ手抜きすべきだ。STLがそれに適しているのなら使えばいい。 ただ、「STL使わなくてもどうとでもなる奴が手抜きでSTLを使う」のと、 「STLを使わないと何も出来ない連中がSTLを使う」のは全然意味が違う。 とはいえ、俺は後者が前者になるべきだとは思ってない。 ただ、後者ならC++ではなくJavaやC#を使った方が妥当だとは思うが。 君が見落としているのは、STLをカジュアルと呼ぶ連中は、 基本的に、STLを使わずに最速な実装が出来るものの、面倒なので、 「手抜き」を「カジュアル」と言い換えてごまかしているだけだということだ。 連中は君みたいにSTLが無いと何も出来ない馬鹿ではないんだよ。 > C++er憎し、では色々と話がおかしくなるよ これは違うぞ。俺は無知なくせにデタラメを言い張るゆとりは死ねと思っているだけだ。 ただし、お前が無知のままで死ぬ権利は尊重するので、 有用な情報は書かないようにするが。
807 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 22:14:29.75 ID:VV8A9gRv0.net] キチガイにさわるな
808 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 22:15:45.94 ID:AL0mRZz+0.net] 密度が低い
809 名前:デフォルトの名無しさん [2018/05/13(日) 22:19:54.88 .net] >>772 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。
810 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 22:28:00.02 ID:AL0mRZz+0.net] 吐いた唾は呑ませんぞ
811 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:48:52.64 ID:d5CbxlL9M.net] >>780 > ならコンパイラ出力コードが手書きアセンブラと比べてどれだけ糞かも知ってるはずだ。 爺いは早めに滅びればいいのに
812 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 00:21:52.22 ID:BWBgd2BN0.net] constexpr+UCS=ニューパラダイムのはずだったんだがなぁ。 コンパイルタイムは夢がある。
813 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 02:44:09.99 ID:xNObD1oN0.net] 昔はライブラリもそんなに充実してなかったしアルゴリズム事典とか読み漁りながら色々自作してやってたけどね しかしまぁ便利な時代になったもんだ C言語だと型が変わるだけで使い物にならなくなっていたものが大半だったけど 型に囚われないSTLライブラリは本当に有能だよ 型に囚われない部分は全部インラインになっちゃうけどね
814 名前:デフォルトの名無しさん [2018/05/14(月) 13:39:06.22 ID:0aBfdvZZ0.net] オンラインになるんか!
815 名前:デフォルトの名無しさん [2018/05/14(月) 13:40:44.68 ID:0aBfdvZZ0.net] 実行可能形式はC++、スクリプトはPython。 これができる大人の選択。
816 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 13:48:17.86 ID:mA8jyKTp0.net] バッチは?
817 名前:デフォルトの名無しさん [2018/05/14(月) 13:56:29.91 ID:0aBfdvZZ0.net] バッチは他人からパクるので贅沢は言いませぬ。
818 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 20:21:01.90 ID:L6tD5feN0.net] スタイルについての質問なんですけど、Cの文法で書けるならできるだけCで書いたほうがいいのでしょうか 上司のC++のコードがもうほんとゴリゴリのCって感じで、C++でcharの配列も無かろうよと思ったりするんですよ 確かにその方が分かる人は多くなるかもしれないですけど
819 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 20:32:27.71 ID:tHLzTn7F0.net] >>792 C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが 簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを 追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。 C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、 それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる: - うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が 安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、 もはや笑えるレベルを超えている) - 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに 効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の コードがその素晴らしいオブジェクトモデルに依存していて、直すためには アプリ全体を書き直さなきゃなんない。 言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに 限定するってことは、他の人がそれをめちゃくちゃにしないってことで、 ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい 「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
820 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 20:34:21.22 ID:joZeDATc0.net] いや別に C++で問題ない 上司の意図は知らんが パフォーマンスを考えたコードとか 互換性を考えたコードとか そういう可能性も 5chの一般的な価値観とは違って C++っぽいのが良いコードって訳じゃない
821 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 20:36:35.58 ID:joZeDATc0.net] 逆に若者はコストも考えずに安易に汎用コンテナを使ったりと思うことがある
822 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 21:03:22.33 ID:5psId9wb0.net] ものによるのじゃん? メモリイメージを意識するならCスタイルの方がきれいにおさまる。
823 名前:デフォルトの名無しさん [2018/05/15(火) 21:09:12.04 .net] バグを生む可能性が一切ないならCスタイルのほうがいいに決まってる
824 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 21:41:08.24 ID:h7VmA7z3a.net] c言語って移植性あるの?まともなの?
825 名前:片山博文MZ mailto:sage [2018/05/15(火) 21:41:08.58 ID:NlOsi0K3d.net] 最近のC++は、std::vectorが配列に最適化されるのか? 遅いだろ
826 名前:片山博文MZ mailto:sage [2018/05/15(火) 22:23:39.58 ID:NlOsi0K3d.net] C++11以降ならstd::array使うけど、覚えることがともかく多い
827 名前:片山博文MZ mailto:sage [2018/05/15(火) 22:26:59.43 ID:NlOsi0K3d.net] 区間チェックしてくれる配列を簡単に指定できると嬉しいの†
828 名前:片山博文MZ mailto:sage [2018/05/15(火) 22:31:58.98 ID:NlOsi0K3d.net] 例えば、[ ]を二重に書くと添字チェックしてくれるとか。どうかな。 int a[[10]];
829 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 22:42:37.30 ID:PNM8l+laM.net] atじゃだめなんか?
830 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 22:43:36.39 ID:sqV4cudU0.net] 例外投げるインデクサと投げないインデクサ両方ありますから。
831 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 22:46:39.90 ID:IhUmYIjB0.net] プロパティONにするとチェック有効で
832 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 22:46:50.65 ID:IPNyvhtL0.net] >>802 オブジェトCを彷彿させるので嫌です
833 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 03:32:46.81 ID:gRCAgj/W0.net] >>802 attributes構文と紛らわしい。
834 名前:デフォルトの名無しさん [2018/05/16(水) 23:25:18.23 ID:cmH84vOv0.net] arrayはなんで[]でチェックしてくれないの
835 名前:はちみつ餃子 mailto:sage [2018/05/16(水) 23:28:49.70 ID:axtQyUCZ0.net] ゼロコストの原則
836 名前:デフォルトの名無しさん [2018/05/17(木) 02:43:52.94 ID:vEqyw0xg0.net] C++のコストの大部分は例外に起因するらしい。 Cでコンパイルできるコードであっても、C++としてコンパイルするとバイナリが肥大化する。 その原因は例外。
837 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 07:10:31.59 ID:AhjFsLsi0.net] x86-64だとゼロコストだよ
838 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 08:34:28.77 ID:FVFi5bM10.net] どこにコストが消えたんだろ サボってるの?
839 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 09:12:53.49 ID:UhXGat7x0.net] >>810 要出典。
840 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 14:51:21.43 ID:T9EnGAyld.net] x86-32だと割り込み発生時に対応出来るように 関数コールの度にスタックに情報を埋め込む x86-64はこれが不要 割り込み処理がなければコストはかからない
841 名前:デフォルトの名無しさん [2018/05/17(木) 18:56:39.80 ID:vEqyw0xg0.net] >>813 組み込み開発の株式会社○○みたいなサイトで読んだんだけどな。 なかなかためになる内容だったしブックマークしとくんだった。 見つけたらリンクくれ。
842 名前:デフォルトの名無しさん [2018/05/17(木) 18:58:28.25 ID:vEqyw0xg0.net] 俺の見解では、例外にコストが割かれるなら、それは必要なコストだと思うんだよな。
843 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 19:43:22.14 ID:WDNJ9RfY0.net] 元記事消えてるっぽいからアーカイブだけど bytepointer.com/resources/pietrek_amd_x64_primer.htm Windowsの例外機構がx64ではスタックベースからテーブルベースの通過するだけならゼロコストなものに変わった ただしバイナリサイズは増える
844 名前:はちみつ餃子 mailto:sage [2018/05/17(木) 19:46:45.63 ID:oI1zc+Au0.net] >>816 例外を使うならコストがかかるのは当然なんだが、 例外が通過しないかもしれないのにそこかしこで情報を積まないといけないのは良くないってことなんよ。 そんでまあ例外を投げたときだけにコストが生じる方式がいいよねっていう話。
845 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 20:29:27.85 ID:AhjFsLsi0.net] 例外が発生しない時のコストなんてゴミみたいなもんだけどな
846 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 20:30:03.35 ID:AhjFsLsi0.net] イヤなら64bitで組みなさい
847 名前:デフォルトの名無しさん [2018/05/17(木) 20:38:19.60 ID:vEqyw0xg0.net] 64ビット化するとサイズが1.5倍になるらしいけどな。
848 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 20:40:58.24 ID:AhjFsLsi0.net] 今時コードのサイズなんて問題にならんだろ その代わりに得るものは大きい
849 名前:デフォルトの名無しさん [2018/05/17(木) 21:11:41.72 ID:vEqyw0xg0.net] 1.5倍って40sの可愛い少女が60sのオバはんになるってことではないだろか。 さあどっちか選ぶんだ。
850 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 21:42:32.65 ID:53fi3uKJ0.net] どうしても対応し続けないといけない32bitのレガシーデバイスがあるなら頑張って そうじゃなけりゃもう32bitなんて捨てろ
851 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 21:43:14.24 ID:egaCGTtIM.net] >>823 それ得るもの無さすぎないか?
852 名前:デフォルトの名無しさん [2018/05/17(木) 21:57:59.98 ID:vEqyw0xg0.net] 60kgのオッサンになるよりはいいだろ。
853 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:02:48.61 ID:/ukQRMvg0.net] 32bitがレガシーだあ? どこで吹き込まれたか知らんが 騙されやすいやつだな
854 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:20:15.79 ID:yYAGBjqQ0.net] クラスのconst配列メンバをコンストラクタで初期化するにはどうしたらいいでしょうか? class A { const double array[]; void A( double &temp[] ) : array(temp) { } }; これはコンパイルでエラーが出てダメでした
855 名前:デフォルトの名無しさん [2018/05/17(木) 22:32:37.31 .net] >>828 できないからあきらメロン 素直にconst外してアクセサで制御するか、vector使うかしとけ テンプレートとかを駆使して無理に実現しようと試みるのはいかにも頭が悪いし時間の無駄
856 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:33:23.35 ID:MPVDtJCy0.net] constの問題というよりサイズが決まってないからダメなんじゃないの?
857 名前:デフォルトの名無しさん [2018/05/17(木) 22:34:24.00 .net] ここ3年ほど32bitの組み込み機器に触ったことない
858 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:37:16.99 ID:53fi3uKJ0.net] 今はほとんど64bitの上で無理矢理32bit動かしてるんだよ ネイティブ32bitCPUなんて化石
859 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:51:21.67 ID:yYAGBjqQ0.net] >>829 了解です、constは諦めマスカット >>830 どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんで サイズは未定にしておきました
860 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 17:13:18.87 ID:8ieomEvbM.net] vc++のマルチコアのオプ
861 名前:ティマイズなんて甘々だから余裕で 勝てるけどなぁ。 あんなのに負ける人もいるって、世の中広いなぁ(棒) [] [ここ壊れてます]
862 名前:771 mailto:sage [2018/05/18(金) 18:23:15.07 ID:G5mHfuQa0.net] アホだろお前
863 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 18:33:25.05 ID:pNV6CZfO0.net] そりゃあ頑張れば勝てるだろう コーディングコストと可読性の犠牲に見合うほど速くなるかどうかは別問題だがね
864 名前:771 mailto:sage [2018/05/18(金) 18:57:13.66 ID:jCVxhDbN0.net] VCもそうだけど大体のコンパイラは並列化や自動ベクタライズは強くないと思う 古くからある機能とそうでないものでは最適化に差が出るのは当然 だからこそSIMD使うときはみんなイントリンシック命令使ってるのであって
865 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 20:11:41.99 ID:Xj+Uy2RAd.net] >>834 て誰に対してのレス?
866 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 21:20:25.60 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 22:05:36.49 ID:TsUe9Yho0.net] あーいや、 >>828 は配列を渡して初期化したいのか… ↑じゃだめだ だいぶ別物になっちゃった。 ttps://wandbox.org/permlink/gUlWoKLb3QfigsQk
868 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 22:33:37.26 ID:G5mHfuQa0.net] 参考にしてみた https://wandbox.org/permlink/3asRA3QSPQXmmn8l C++17ならヘルパー不要にはなる・・・(コンストラクタに与えた引数から推定 けどどっちにしても配列数可変にはできない ていうか配列の参照とか初めて使ったw
869 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:03:26.14 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:10:45.61 ID:WRHfxyyT0.net] 糞面倒だな
871 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:15:37.45 ID:VIvIbG0Fa.net] アンチパターンを生み出すための新機能が次々出てくるのがc++だ!
872 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:33:17.81 ID:WRHfxyyT0.net] こういうのからiostreamみたいになってゆくんだろうな
873 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 03:41:10.01 ID:BMt6S/TK0.net] つか引数にconst double(&temp)[]って何だと渡せるのこれ ()ないとエラー出るし
874 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 06:54:38.61 ID:KlOWaW480.net] 何も渡せないよ 配列数のない配列型はどんな文脈でも不完全型だからその型のオブジェクトは存在し得ない
875 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 07:39:54.12 ID:03NPLOb40.net] >>842 VS2017 15.7.1のVCのReleaseモードだとtemplateの部分が赤の下波線になるな Debugモードにするとなぜか消える そしてReleaseモードはエラーが出ているのにコンパイルして実行可能 バグじゃね
876 名前:はちみつ餃子 mailto:sage [2018/05/19(土) 12:37:22.83 ID:WMhjioR90.net] >>847 仮引数として表れる場合はポインタに調整されるんじゃなかったっけ?
877 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 13:11:36.50 ID:KlOWaW480.net] 配列型はね 配列の参照型はされない
878 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 09:24:48.82 ID:SHQ/MEmo0.net] 引数で渡す場合は配列自体が参照型だもんな
879 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 21:45:00.90 ID:SySmX4Pj0.net] 配列への参照ってのはあるんだけどね template <typename T, int N> N size(T (&)[N]) { return N; }
880 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 21:45:22.62 ID:SySmX4Pj0.net] あ、ミスった わかる人笑ってw
881 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 10:34:44.57 ID:QHYj3MXfM.net] >>848 > バグじゃね 未定義ならコンパイルできて実行できると言うのも規格に準拠してる正しい動作
882 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:07:12.03 ID:CbgK21am0.net] >>854 見当違いのレスだな DebugとReleaseでエディタの動作が首尾一貫してないって言ってるんだがな 15.7.2が来たから入れてみる
883 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:37:39.23 ID:LzyusK+ZM.net] >>855 普通の知能を持ってたら > コンパイルして実行可能 に突っ込まれてることぐらいわかるだろうに...
884 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 09:57:56.51 ID:NT2O+rqe0.net] >>856 15.7.2にしたらReleaseでも赤い波線出なくなったぞ エディタのバグが直ったようだ
885 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 10:14:09.85 ID:2zsXYckB0.net] >>848 の3行目は無かったことにすると
886 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 10:39:06.93 ID:NT2O+rqe0.net] だから「エディタの」バグと書き忘れただけなのにお前らしつこいな DebugモードでもReleaseモードでもコンパイルして実行できてたんだから
887 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 12:24:31.22 ID:fJYH1ZEbM.net] 書き忘れとか知らんがな w そもそもエディタのバグと言うなら三行目は元々不要 余計なことを書いて突っ込まれるとか低能にありがちな行動ってだけ
888 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 12:33:07.54 ID:8Hna4W5Ya.net] >>859 気にするな。俺には>>854 の方がよほど的はずれなことを言ってると思うよ。
889 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 12:40:43.11 ID:fJYH1ZEbM.net] >>861 >>856 同じようなレスを書いてループさせるのも低能にありがちな行動
890 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 13:02:27.39 ID:nSCJSr52M.net] エラーの話なのになぜか未定義とか言い出す奴が
891 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 15:37:22.12 ID:fJYH1ZEbM.net] 未定義の意味を理解してないなら絡んでこない方がいいぞ
892 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 17:20:05.74 ID:CpOh1zRO0.net] エラー 警告 未定義 不適格 ↑ 混同するやつが後を絶たないな
893 名前:デフォルトの名無しさん [2018/05/23(水) 19:15:29.66 ID:Au5e7VGg0.net] 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 V9EWM
894 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 21:13:20.83 ID:CpOh1zRO0.net] しょーもね
895 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 21:13:21.12 ID:fJYH1ZEbM.net] この文脈でエラーとか警告とか言い出す時点でアホ丸出しなんだが...w
896 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 22:07:04.14 ID:lbYCZF160.net] VisualStudioはインテリセンスとコンパイルに使うコンパイラが違う ちょっと設定変えると、とてつもなくエラーが出るのにコンパイルは通るという事態は稀に良くある
897 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 12:25:45.78 ID:hqF4m+XgM.net] >>838 >>771
898 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 23:58:30.63 ID:XccjINB00.net] あるコンテナaとコンテナbを連結?するようなクラス(イテレータ)を作りたいんだが イメージとしてはa.begin()からa.end()-1までいったら次はb.begin()になるようなやつを思い浮かべてるんだけど どんな風につくればよいかアドバイスください
899 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 00:18:38.25 ID:HgmGhgcw0.net] >>871 concat_iteratorでググるとそれっぽい実装がチラホラ
900 名前:デフォルトの名無しさん [2018/05/25(金) 10:18:09.43 ID:SC+wi2VoM.net] C++で2Dのwindowsで動くゲーム作ろうと思っているのだけど、ライブラリって何使えばいいんだ?
901 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 10:18:58.21 ID:AT66E0O7M.net] GDI
902 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 11:33:06.12 ID:JXMMrzE70.net] direct2d
903 名前:デフォルトの名無しさん [2018/05/25(金) 12:11:02.95 .net] Unity
904 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 12:19:23.12 ID:lIIOH/4a0.net] Opengl
905 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 12:52:26.94 ID:s00mTA6Oa.net] DirectX Tool Kit
906 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 14:11:55.60 ID:7mkguDclM.net] cairo
907 名前:デフォルトの名無しさん [2018/05/25(金) 18:33:18.15 ID:vSqqKkie0.net] いっぱいあるなー、一通り試してみようかな
908 名前:放置された蟻人間 mailto:sage [2018/05/25(金) 18:37:43.90 ID:mtapFpQed.net] 全部は時間的に無理。
909 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 19:06:13.22 ID:O4zlrz7ka.net] DirectX Tool Kit一択だとおもうが
910 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 19:16:41.38 ID:BiCg0uer0.net] OpenGLなんてのは?
911 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 19:17:34.72 ID:el+ngQt20.net] windowsに限定するならopneGLにする意味は薄い
912 名前:デフォルトの名無しさん [2018/05/25(金) 23:32:47.23 ID:vSqqKkie0.net] DirectX tool kit なるものは一般的なDirectXの上位互換みたいな捉え方でおk?
913 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 23:41:23.37 ID:9e9u/b+G0.net] >>882 よこからだけど、これ面白そう。
914 名前:はちみつ餃子 mailto:sage [2018/05/26(土) 01:45:05.97 ID:r5N0xqhb0.net] Siv3D とかも楽に使えると思う。 (3D という名前がついてるけど 2D もいける)
915 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 09:49:22.16 ID:Gw/MbzDj0.net] 今の時代なら cocos 2d とかモバイルでも使えるライブラリ使った方がいいんじゃないのか
916 名前:デフォルトの名無しさん [2018/05/26(土) 10:01:48.35 ID:KfOwUuVld.net] c++ならアンリアルエンジンで行こうぜ
917 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 15:38:59.11 ID:dTnlF+1t0.net] あれESCキーが消えるから…
918 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:17:20.26 ID:kgP2LOmLa.net] string::size_type についてですが、 size_type の前についている 「string::」 というのは何ですか?
919 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:20:28.98 ID:kgP2LOmLa.net] 名前空間ではないようですし。
920 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:28:38.63 ID:HMjaHK3IM.net] 静的メンバ関数 でぐぐれ
921 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 09:38:09.06 ID:kgP2LOmLa.net] >>893 ありがとうございます。 string::size_type は companion type というものらしいのですが、 この companion type とは何でしょうか?
922 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 12:33:02.70 ID:WLsT9puy0.net] メンバ関数の引数や戻り値、メンバ変数などで使用するためにクラススコープで定義された型のこと クラス(この場合はstd::string)を利用する側は、 実際にはその型がなんであるかを知る必要なく 文字列のサイズの型としてstring::size_type を用いることができる 参考 https://stackoverflow.com/questions/41471741/string-companion-types
923 名前:デフォルトの名無しさん [2018/05/29(火) 13:47:00.51 ID:kgP2LOmLa.net] >>895 ありがとうございました。
924 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 23:46:46.84 ID:vO9YU0hS0.net] std::threadでサブスレッドで処理をしているのですが、処理をキャンセルするためthreadをdetachすると メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。 サブスレッドではnewでのリソース確保もしていないので理由がわからないです。 detachする際にはjoinableである以外に条件があるのでしょうか。
925 名前:デフォルトの名無しさん [2018/05/29(火) 23:59:57.19 ID:6Y/6D3P7M.net] >>897 スレッドローカル記憶域とか破棄されたあとにアクセスしてんじゃないの?
926 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 00:33:26.79 ID:4+P0NcT60.net] std::threadのdetachってスレッドを手放すだけでキャンセルはしないのでは ラムダ式で処理を渡してるなら、ローカル変数の参照キャプチャとかしてるない?
927 名前:デフォルトの名無しさん [2018/05/30(水) 00:33:44.46 ID:D8xt/f/p0.net] detachしてもスレッドは動き続けますが。
928 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 00:56:37.13 ID:OvmXW6ID0.net] 一般にスレッドのキャンセルは難しいので適当に処理を終わらせてjoinするのが良いも思う
929 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 01:10:14.80 ID:K2528e3P0.net] https://ideone.com/3LDXGx 質問です。定期的に同じ関数をスレッドで起動するクラスを作りました。 んでコード中のここ無駄って書いてある行を削除する方法はありませんか。 開発はVCでやってますが、GCCでも通ればいいなーと思っています。
930 名前:897 mailto:sage [2018/05/30(水) 02:51:38.91 ID:gP4Z92jH0.net] すみません。言葉足らずでした。 メインスレッド:GUI、サブスレッド:既存のライブラリでデータ補間の重い処理 を担当していて、途中でデータ補間パラメータを変更したくなった場合 キャンセルボタンを押してやり直す、という処理を考えています。 CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは 構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。重い処理のループの中にキャンセル用フラグでも用意できればキャンセル通知後 ループを抜けて速やかにjoinするところまで到達させる等の方法があるのですが、 既存ライブラリなのでそうはいかず諦めてdetachしようと考えています。 そのまま走り続けるだけだから結果を回収せずほっておけば良いのかと思ってましたが 甘かったみたいです。 >>898 thread_localは使っていないです。 >>899 アドバイスありがとうございます。関数オブジェクト作ってキャプチャは使っていないです。 >>901 スレッドを平和理に終了させる方法はなさそうなのでdetachできなければ諦めてjoinするしかなさそうですね… とりあえず最小の再現例を作ってみることにします。
931 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 09:53:15.07 ID:eD7a+sCF0.net] 重い処理の方を別プログラムのプロセスにしちゃって止めるときはブチ殺すのがシンプルで良さそうに見える
932 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 17:43:48.31 ID:K2528e3P0.net] >>903 async つかえ。 wait_forっていう関数がプロミスにある。
933 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 17:44:50.87 ID:K2528e3P0.net] >>902 たのんますー。
934 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 17:50:39.57 ID:K2528e3P0.net] 基本的にstd::threadでキャンセルは不可能。 自分でそういう機構を汲んでやらないといけない。 whileの実行をキャンセルするbool変数つっこむとか。 それでもクリティカルパスの実行は避けられない。
935 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 18:55:49.81 ID:DJsvI6z80.net] 強引にスレッドを殺すと、 そのスレッドが確保してたリソースが解放されないかもしれないぞ メモリであったりセマフォだったりハンドルだったり ちゃんと終了処理を追加しないとダメだよ
936 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 19:05:49.61 ID:EimB82cz0.net] そのスレッドが使用するメモリ等のリソースを全て スレッド終了まで保持していても >>897 >メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。 となるなら、そもそもそのライブラリがスレッドセーフじゃないのかもしれない。 >>904 式に別プロセス化するのが一番なのかもね
937 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 22:01:02.21 ID:K2528e3P0.net] ぷぅうううううううううりいいいいいいいぃいいいいいいいいいずへーーーーーーーるぷみーーーーーーーーーー。
938 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 16:11:24.94 ID:W0WQ5cWo0.net] 関数の中にif(cancel)return;みたいなのを大量に仕込んで外からフラグを立てて止めろ
939 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 19:02:31.60 ID:OT8Sfmwc0.net] 基本的にはフラグで止めるか別プロセスで実行するのが定石だが 質問者は >CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは >構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。 と言ってるからなぁ
940 名前: mailto:sage [2018/05/31(木) 20:27:20.65 ID:4k9lsrlf0.net] join なんて、カラクリが良く分からないものを、よく使う気になるなぁ 私なら、チャイルドプロセスが自爆するように、陽に記述するなぁ
941 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 20:40:15.15 ID:nmebeT/e0.net] joinが嫌ならdetachすればいいのよ パンがなければお菓子をたべればいいのよ
942 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 20:53:09.91 ID:VgZC2OSf0.net] 世の中には信じられないメンタリティの人がいるもんだなあ
943 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 21:03:58.91 ID:3a+XHa0i0.net] join のカラクリは何も難しいことないと思うが
944 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 21:13:34.61 ID:nmebeT/e0.net] 標準ライブラリが嫌ならpthread使えばいいのよ
945 名前:897 mailto:sage [2018/05/31(木) 21:49:57.28 ID:VY6h/Th40.net] いろいろアドバイスありがとうございます。 どうもdetachした後に局所変数が確保されるとスタックを破壊してしまうようで、 局所変数を確保する前に>>911 氏のいうようにif(cancel)return;入れるとLinuxでは落ちなくなりました。 ですが、windowsでは改善せず諦めました。atomicにするのものも面倒ですし。 結局キャンセルするときは結果を回収せず、さらに別スレッド立ち上げてjoinすることで メインスレッドのGUIに制御が戻るようにしました。長期的には別プロセス化するしかなさそうですね。 ありがとうございました。
946 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 21:53:20.51 ID:TwfgGFWOM.net] > 既存ライブラリなのでそうはいかず って書いてあるのに>>905 ,>>907-908 ,>>911 とかバカなら黙っとけよ...
947 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 22:35:57.56 ID:EV/maKH/0.net] 913はスレッドを自爆させた後joinしないのであろう…
948 名前:デフォルトの名無しさん [2018/05/31(木) 22:51:40.57 .net] 子スレッドが一つならjoinで待っててもいいけど、複数個になったら無限ループで待つよね
949 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 22:52:12.55 ID:EV/maKH/0.net] ていうか「重い処理かつ終了に時間が要するスレッド」複数個を所有するサーバみたいなスレッドを一発噛ませて、 パラメータを変えたくなったら「現行スレッド停止」と「新しいパラメータでのスレッド起動」をサーバに対して指令するつくりにすれば 良い この場合は「重い処理かつ終了に時間が要するスレッド」が終了するまで誰も待つ必要はなく(※サーバ終了時は除く 、サーバみたいなスレッドは、クライアントから「新しいパラメータでのスレッド起動」コマンドを受けたときおもむろに 「死んでる(再利用できる)スレッドはどれかいな〜、」とタイムアウト0秒のjoinでポーリング式にサーチすれば良い 現行スレッドが死ぬまでの間現行スレッドと新たに起動するスレッドが並列に動くことになるが >CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは 構わない ということですしおすし、
950 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 22:56:14.51 ID:EV/maKH/0.net] >>921 ウィンドーズならWaitForMultipreObjects()とかその亜種で複数の終了待ちができうる そうでなくともイベントフラグの同時待ちはだいたいどんなマルチタスクOSでもできるから それを使って類似のしくみを作れうる、。
951 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 23:21:33.93 ID:i2WXWbd70.net] >>923 できうる、作れうるって日本語的におかしいだろう
952 名前:デフォルトの名無しさん [2018/06/01(金) 04:04:16.74 ID:p3jBadVq0.net] ウインドーズとか何か別物感あるし、multipleのスペルもおかしいし大丈夫か
953 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 04:08:40.92 ID:ampOWGNn0.net] 色々なところで糞が露呈している それがWindows
954 名前:はちみつ餃子 mailto:sage [2018/06/01(金) 04:11:32.11 ID:uW2rQW//0.net] デザインとしては Windows の方が現代的なんだけど、 色んなものが POSIX を基本にしたデザインになってるから噛み合わないんよなぁ。
955 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 04:16:04.83 ID:ampOWGNn0.net] POSIXに準拠できないWindowsがどうかしている
956 名前:はちみつ餃子 mailto:sage [2018/06/01(金) 04:22:16.25 ID:uW2rQW//0.net] >>928 昔は POSIX 準拠にしてたよ。 アメリカの政府が採用するのに POSIX を要求してたみたいで、仕方なくやったって話。 だけど、基本的なモデルが違うものに API だけ接ぎ木してもなぁ。
957 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 04:43:45.31 ID:SICoZSIN0.net] windowsでpthread使うたびにトラブル起こってつら
958 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 08:14:44.74 ID:WJ5uQBEIM.net] >>921 他に条件があるならともかく、普通にjoinで待てばよくね?
959 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 08:27:54.49 ID:WJ5uQBEIM.net] >>922 joinしたら再利用できないだろ
960 名前:デフォルトの名無しさん [2018/06/01(金) 08:30:22.24 .net] >>931 別に、joinで済むならjoinでいいんじゃね
961 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 09:15:20.19 ID:oHKnNuZr0.net] キャンセルしたくなるほど長い処理ならスレッドキューイングする利点はない もちろんしたいならしてもいい
962 名前:デフォルトの名無しさん [2018/06/01(金) 09:35:53.16 ID:uCsHgk1n0.net] C++を使うなら、Windowsでいいんじゃないの。 Clang、gcc、clと主要なコンパイラが動く貴重な環境だし。 文書を残さないといけないからアプリも必要。 図を描くのにvimでSVG書くって人もいるけど、流石にそれは労力の使い方を間違えてる。
963 名前:デフォルトの名無しさん [2018/06/01(金) 10:01:00.93 ID:oDn7ey18M.net] サブスレッドでjoinして結果を使わない、というのとデタッチするのとどう違うんやろな。デタッチってなんのメリットあるんやろか。
964 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 10:15:36.25 ID:oHKnNuZr0.net] 自分で書いてる通り結果を使わなくて終了も待ちたくないなら join せずデタッチ。 メリットはリソース(スレッドハンドルなど待ち合わせ用リソース)の自動的な解放くらいか。
965 名前:デフォルトの名無しさん [2018/06/01(金) 11:41:29.12 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 11:47:52.19 ID:1LiDvq+rd.net] protect
967 名前:デフォルトの名無しさん [2018/06/01(金) 11:55:31.26 .net] friend
968 名前:デフォルトの名無しさん [2018/06/01(金) 11:55:48.39 ID:uCsHgk1n0.net] ・stack : protected listとして、必要なメンバをstackで明示的に公開する。 ・listとstackのポインタに互換性がなくなる。
969 名前:デフォルトの名無しさん [2018/06/01(金) 11:58:45.22 ID:uCsHgk1n0.net] ・assert、throw等で警告するだけのaddFirst、removeFirstをstack側に作りオーバーライドし、規約で使うなと言っておく。 ・非常にダサい。
970 名前:デフォルトの名無しさん [2018/06/01(金) 12:00:33.78 ID:uCsHgk1n0.net] ・基底クラスbasic_listを設け、そこからlistとstackを別に派生する。
971 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:12:54.27 ID:SICoZSIN0.net] >>935 釣りか? MSYSがあるからなんとか我慢して作業できるが 仕事以外でそんな苦痛を受けながらプログラミングなんかしたくはない
972 名前:デフォルトの名無しさん [2018/06/01(金) 12:31:43.05 ID:uCsHgk1n0.net] >>944 wslでおk。
973 名前:デフォルトの名無しさん [2018/06/01(金) 12:33:20.56 ID:uCsHgk1n0.net] wslを有効にしてコルタナにウブンツと言えばすぐ使えます。
974 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:41:08.30 ID:SICoZSIN0.net] wslでWindowsネイティブなバイナリ作れんの?
975 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:43:01.01 ID:Iz+jFShBM.net] >>944 > 仕事以外でそんな苦痛 でもどんな苦痛なのかは書けない w
976 名前:デフォルトの名無しさん [2018/06/01(金) 12:44:36.05 ID:uCsHgk1n0.net] さあどうだろ? Linux側からWindowsのファイルは読めるけど。 環境設定が大変そうだな。 逆にWindows側からLinuxのファイルを直接変更したらだめらしい。
977 名前:デフォルトの名無しさん [2018/06/01(金) 12:47:41.68 ID:uCsHgk1n0.net] 俺のおすすめの使い方は、Windowsバイナリはcl、Linuxバイナリはwsl上のgccで作る。 開発環境はVisual Studio2017、CMakeプロジェクトを使う。 これだけでWindowsとLinux両方対応できる。
978 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:51:07.74 ID:SICoZSIN0.net] >>950 それ良さそうだな 今度試してみる
979 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:01:33.50 ID:sIQxQP9sa.net] >>939-943 ありがとうございました。 Macを使っている人はいませんか? コンピュータサイエンティストって大抵Macのノートパソコンを使っているイメージがあります。
980 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:11:39.88 ID:pUOZzX0iM.net] >>952 mac使ったところでmacしか使えないだけ 本物になりたいならシェアが高いウインドゥスを使え もしくはLinux
981 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:29:21.95 ID:A9MSzynoM.net] >>944 別に補陀落渡海しても良いのよ
982 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:30:34.27 ID:STCtC+aF0.net] >>952 Macの内部はUnixだから
983 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 16:26:14.37 ID:WJ5uQBEIM.net] >>952 念の為、標準ライブラリにlistもstackもあるからね。 あと標準ライブラリのlistは継承して使えるように設計されてないからね
984 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 18:47:58.65 ID:U3fjUVmpd.net] リスト構造のスタックなんて簡単なんだからゼロから作っちゃえば?
985 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 18:52:33.22 ID:U3fjUVmpd.net] push pop size copy move swap constructor destructor くらいでしょ使うの 片方向でもいいだろうし
986 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 19:38:34.27 ID:nSTFCyDP0.net] stackはlistではないし継承は間違ってるわな
987 名前:デフォルトの名無しさん [2018/06/01(金) 19:48:21.87 ID:uCsHgk1n0.net] 俺、リストツリーっていうの考えたんだけど、聞きたい?
988 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 19:58:07.59 ID:U3fjUVmpd.net] >>959 頭が硬いやつはソフトに向いてない
989 名前:デフォルトの名無しさん [2018/06/01(金) 20:19:59.69 ID:sIQxQP9sa.net] >>953 >>955 ありがとうございました。 >>956-959 実は、 最近出版された岩沼宏冶他著『データ構造とアルゴリズム』(コロナ社) という本にスタックとキューのそのような実装が書いてあるんです。 まず連結リストをテンプレートを使って実装しています。 その関係で質問しました。 まえがきに「本書の前半ではC++言語での実装コードを示すが、これは 初学者によいコードを読ませることが目的であり、Art of Programmingに つながるような解説を付記するように努力する。」と書いてあります。
990 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 21:27:36.17 ID:naL+ZRGN0.net] 下手が伝染るから、クヌースを取り寄せしたほうが良いぞ
991 名前: mailto:sage [2018/06/01(金) 21:36:56.16 ID:/qAuBE/I0.net] >>938 私なら委譲を使います
992 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 21:52:15.80 ID:eT4/jjIPM.net] >>933 どんな用途を想定してるの?
993 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 01:50:36.43 ID:z1beHaLa0.net] >>965 横レスだけど複数スレッドがあったとき ・どれかの終了を待つならjoinでは無理 ・全ての終了を待つなら適当な順でjoin というだけのことでは
994 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 07:25:22.85 ID:uqsytqRM0.net] >>938 そういうことをやるなっていうのが「リスコフの置換原則」
995 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 07:40:27.42 ID:SH+PTz7E0.net] 「外から見えるインターフェースが変わらなければ 内部の具体的な実装がまったくの別物に変わっても使うのに支障ない」 て
996 名前:いうオブジェクト指向のカプセル化だっけ、あのあたりの教材じゃなかろうか。 それと継承のアクセス制御の使い方。 [] [ここ壊れてます]
997 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 11:23:31.53 ID:SH+PTz7E0.net] 派生クラスのアクセス制御、と書くべきだったかな。 意味は通じると思うけど、用語の使い方に厳しい人もいる故。
998 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 13:02:49.13 ID:x6PfuSbY0.net] >>932 言葉足らずだったスマン スレッドハンドルの配列があったとして、[i]についてjoinしたら[i]を再利用できる(再びスレッドをcreateしなおせば良い 、の意味 joinせずとも済むやり方もあるが、 (「重い処理かつ終了に時間が要するスレッド」の関数本体をそのままスレッドにするのではなしに、 普段イベントを待ち、イベントが来たら「重い処理かつ終了に時間が要するスレッド」の関数本体を普通にcallし、そいつがreturnしてきたら 再びイベントを待つ、というループするスレッドとしてwrapすれば良い、等 結局「重い処理かつ終了に時間が要するスレッド」が使っていた資源が開放されたことを論理的に知る必要からは逃れられず、 一番簡単なのがjoinですよという意味で>>922 ではjoinと言ったので察してホスイ、
999 名前:デフォルトの名無しさん [2018/06/02(土) 17:26:29.14 ID:RQ4rJlvL0.net] ほむほむ、ところでgtestとBoost.Testはどっちが良いですかな?
1000 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:24:16.97 ID:gfv0Z2yCa.net] 初心者脱出したいから課題くれ
1001 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 20:26:24.96 ID:g8+eu/OT0.net] >>972 自分でこれまで勉強した範囲で疑問なり興味なり沸いてきて、あれこれコード書いて試して見ようとしたことは無かったの? もし全くないのならもう諦めた方がいい。
1002 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 23:46:44.76 ID:D70hzHzDd.net] >>972 純粋な言語部分 プリプロセッサ 標準ライブラリ 特定のOS, 特定のライブラリ 組み込み どの辺の課題?
1003 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 23:58:49.35 ID:/T91IteZ0.net] 「計算機プログラムの構造と解釈」(SICP)を読んで演習課題を解いたら良い
1004 名前: mailto:sage [2018/06/04(月) 19:13:33.43 ID:gbEnuF2j0.net] >>975 まだ scheme 手習いが終わっていないのです(泣)
1005 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 22:04:43.09 ID:2Ea3o2oY0.net] リトルインディアン、ビッグインディアンも教えない職場があるんだな。 おっさん、びっくりしたわ。
1006 名前:デフォルトの名無しさん [2018/06/06(水) 22:13:02.59 ID:JW9lzKor0.net] >>977 周知のこととして扱われているのかもしれませんね。 私は学校で教わりました。
1007 名前:デフォルトの名無しさん [2018/06/06(水) 22:41:41.43 .net] >>977 インディアンかー 俺も教わった覚えないな
1008 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:17:12.31 ID:jNE6zLei0.net] One little, two little, three little Indians
1009 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:33:53.26 ID:m+Bnnm4Z0.net] エンディアンなのかインディアンだったかいつも忘れる 口語は混ざる
1010 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:36:43.24 ID:zexNX0En0.net] >>979 インディアンは習ったろ
1011 名前:デフォルトの名無しさん [2018/06/06(水) 23:48:14.36 .net] >>982 ネイティブアメリカンなら習ったけど🙄
1012 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:48:33.17 ID:Ne6bz6Er0.net] ガリバー旅行記はいつどこで習うんだろう
1013 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 06:56:59.11 ID:u4DD79290.net] 「リトル・エンディアン」「ビッグ・エンディアン」て用語は 『ガリバー旅行記』が由来、という情報が載ってるサイトで、 主人公が漂着した小人の国、巨人の国のエピソードから…、とか 書いてあるのを見たことがある。ネタだったのかも知れないけど。
1014 名前: mailto:sage [2018/06/07(木) 08:03:30.91 ID:twFjtnTk0.net] >>985 それはほんと、小人国での卵の割り方にちなみます
1015 名前:デフォルトの名無しさん [2018/06/07(木) 08:17:13.03 .net] >>986 ニホンゴムズカシイネ^^
1016 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 11:07:30.43 ID:texCzkEwa.net] >>977 今どきバイトオーダー意識するようなプログラム書くような職場じゃなきゃ教えないよ アライメントなんかも同様
1017 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 11:22:48.86 ID:W9Xn18jEd.net] インディアンを教える職場って どんな職場だよ
1018 名前:デフォルトの名無しさん [2018/06/07(木) 11:49:27.36 ID:ZMsL/8Fsd.net] だってオラはSEだから
1019 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 12:38:00.08 ID:pGQiQE2u0.net] SEなら尚更知っておかないと 日本はなんちゃってSEばっかだもんなw
1020 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 13:14:35.77 ID:W9Xn18jEd.net] SEとインディアンの関係は?
1021 名前:985 mailto:sage [2018/06/07(木) 13:15:06.93 ID:u4DD79290.net] >>986 調べたら小人同士の戦争の原因なのね。巨人国は関係ないな。 実は空の国の「学者の無意味な論争」の一例だと思い込んでいたんだわ。 >>989 「ウチはCのコーディングスタイルとしてAT&T式を基本とします」 ってところはあるかも知れん。
1022 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 20:44:47.09 ID:BA7hChNz0.net] >>988 貴様が知る必要はない!
1023 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 20:48:11.43 ID:DJdTp6lo0.net] 何でもネットに繋がらなきゃならないこの時代にhtolやltohを避けて通れるもんなのか? PHPしか触らないWeb屋ならともかくここC++スレだぞ
1024 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 21:46:11.03 ID:XXEPBZnxM.net] 今時C++と言えどhtol()とかltoh()なんて低レイヤーの関数使うことなんて滅多にないだろ
1025 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 21:50:55.26 ID:gS6wfz1ca.net] >>995 ソフトウェアがなんでもかんでもネットワークに繋ぐ必要があると思ってるの?ここC++スレだぞ
1026 名前:デフォルトの名無しさん [2018/06/07(木) 22:31:28.79 .net] C++使うくらいだからXMLとかJSON使うんだろ
1027 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 23:10:47.05 ID:C4iY9p8E0.net] >>998 utf16はどうしたらいいの?
1028 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 23:16:41.18 ID:B+7Xk0Ks0.net] 続きはwebで
1029 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 68日 2時間 56分 35秒
1030 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています