C++相談室 part135
: デフォルトの名無しさん (ワッチョイ 5fcb-q1Nq) [sage] 2018/03/31(土) 20:20:06.25:o3PNwIlC0 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part134 ttp://mevius.5ch.net/test/read.cgi/tech/1516406742/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 ttp://mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ ttp://codepad.org/ ttps://ideone.com/ [C++ FAQ] ttps://isocpp.org/wiki/faq/ ttp://www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 22:59:04.29:Nj0xu+770 この64ビットが主流になりつつある時代にSTL使うとファイルサイズガァとかよく耳にしますが、時代についてこれていない老いぼれの戯言なのでとっとと見限って先に進みましょう ----- テンプレ ここまで ----- : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/04/01(日) 00:05:25.36:DhlCxYuo0 STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。 ---- テンプレ ここまで ---- : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/04/01(日) 00:06:31.91:DhlCxYuo0 乙だが さすがにがテンプレとかないわ;; : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/04/01(日) 00:37:05.49:O5KM55R90 両方テンプレじゃないから死ね : デフォルトの名無しさん (ワッチョイ d3cb-q1Nq) [sage] 2018/04/01(日) 01:00:30.68:EwuQ9U5u0 えー、どっちもワシ()が貼り付けたわけじゃないのにー : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/04/01(日) 01:13:57.19:lZy6W71f0 このRTL使うとファイルサイズが減るとかおもいっきり頭悪い回答した奴とSTLをごっちゃにするテンプレいい加減やめれ STL使っている奴=無能に見えるではないか : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/04/01(日) 02:21:27.54:lZy6W71f0 コレ老いぼれが仕掛けているマッチポンプにも見えなくはないしな 毎回毎回クソみたいなテンプレ貼りまくって見苦しいぞまったく : デフォルトの名無しさん (ワッチョイ 9312-3n/u) [sage] 2018/04/03(火) 00:14:36.74:xAju6wwe0 C++を原発制御に使うか?という質問に帰着する : デフォルトの名無しさん [] 2018/04/03(火) 00:33:19.68 特に問題ないやろ : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 00:38:42.54:GFbsNNGId 原発にヒープメモリーは使いたくないだろ。 : デフォルトの名無しさん [sage] 2018/04/03(火) 00:59:39.78 原発も飛行機も、自動車も?固定メモリ空間で、確保解放なんて一瞬の手間すら惜しんで全部上書きでしょ(知らんけど) : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 01:34:24.25:GFbsNNGId インターネットにつながってる原発とか、USB接続ができる原発なんてあり得ないから。フロッピーもダメ。ROMカセットならギリギリOK。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 01:37:02.89:GFbsNNGId EMP対策とか防火対策とか銃器対策もしないといけない。 : デフォルトの名無しさん (ワッチョイ 5b6f-kUw7) [sage] 2018/04/03(火) 01:39:39.79:sF82ozBk0 確実な「保証」が必要だからなぁ。 リアルタイム性の要求もそうだが、 ありそうにないほどの最悪条件でもメモリ確保に失敗してはいけないので、 確実に見積もれるようにするにはヒープメモリの使用を避けるのは妥当なことも有りうる。 メモリ確保に失敗したら安全な終了シーケンスの実行も難しいだろうし。 起こりうるすべてのパターンで new が失敗しないことを検証するなんて 面倒くさい (というより事実上不可能な) ことは出来んだろ。 本当にシビアな制御が必要な原発レベルなら定理証明系とかも使ってるんじゃないかな。 : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/04/03(火) 01:44:54.43:0fcGXeNT0 ttps://i.imgur.com/oNGIigg.gif 全部アナログに任せてるから操作間違ってこんなんになっているんやろ : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/04/03(火) 01:50:56.68:i3mVMD7F0 コントロールルームの写真見るとありえんくらい計器とボタンついてるから ソフトウェア自体ほとんど使われてないだろうな : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 01:57:10.44:GFbsNNGId マウスで原子炉の制御棒を操作するのか? 冗談すぎる。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 02:01:20.38:GFbsNNGId 作業員に1人テロリストが混ざっていたとしても、原子炉を暴走させることが出来ないようなシステムにしないといけない。 : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/04/03(火) 02:13:51.81:i3mVMD7F0 不便にすることが最も外部からの攻撃に対して強い : デフォルトの名無しさん (ワッチョイ 9381-kUw7) [sage] 2018/04/03(火) 02:15:27.83:mF5KVDd50 二人が同時にキースイッチをカチッとオンにすると発射! : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 02:23:04.91:GFbsNNGId 原発関係の諜報活動はかなりシビアで、どこかの国では、国家犯罪的なコンピューターウイルスにやられて原発が稼働できなくなったらしい。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 02:32:26.64:GFbsNNGId 16bit時代は、友人にウイルスを集める奴が、居たよな。今では所持だけで犯罪になっちゃったけど。 : デフォルトの名無しさん (ワッチョイ 9381-kUw7) [sage] 2018/04/03(火) 02:35:57.94:mF5KVDd50 原発は既に発電原価が他の発電方法よりも割高なんで、やめても良い 核廃棄物の処分方法すら未だに手が付けられないんだし 他の国は土地があって置き場所に困らないが、日本はそうでは無いよ : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/04/03(火) 02:41:11.28:i3mVMD7F0 その頃はしょせん個人がいたずら目的で作ってた程度だからな 今の違法なビジネスで作られてるものとは性質が違う : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 02:46:57.19:GFbsNNGId あの頃は、ウイルス対策の概念が浸透してなくて、雑誌の付録にもウイルスが付いていたらしい。MS-DOSとWin9x時代のデジタル発掘には危険が伴う。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 02:51:53.34:GFbsNNGId ウイルス蔓延に対する答えが、プログラムファイルの保護、ウイルス対策、UAC、SmartScreen、デジタル署名なんだよな。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 02:53:31.90:GFbsNNGId C++20では、生ポインタが非推奨になるんだよな? : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/04/03(火) 02:57:29.37:i3mVMD7F0 生ポインタを取り出すstd::to_addressが追加されるんだが : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-MT4c) [sage] 2018/04/03(火) 03:08:11.37:GFbsNNGId じゃ、勘違い。 株価を見るに、インテルも安泰じゃないようだ。 : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/04/03(火) 03:11:08.11:i3mVMD7F0 リスクオフで世界的に株安なだけでインテルの業績が悪化しているわけではない : デフォルトの名無しさん [] 2018/04/03(火) 07:51:19.92 しったか乙 アップルがIntel捨てるからだよ : デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/04/03(火) 08:03:30.55:wc7Iq10c0 ん?ノートがARMにでもなるの?ちょっとむりない? : デフォルトの名無しさん (エムゾネ FFb3-eDjY) [sage] 2018/04/03(火) 08:15:32.96:4cz+HfdtF 独自CPUだよ 林檎だしアーキから独自じゃないの? : デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/04/03(火) 09:37:51.60:wc7Iq10c0 あいほんはARMベースじゃなかったっけ。自社カスタムしてるけど。 : デフォルトの名無しさん (ワッチョイ 198a-/mn0) [sage] 2018/04/03(火) 10:39:38.27:3tygYxHf0 仮にインテルから自社製造に切り替えが本当だったとしても、 ARMかAMDみたいな互換のどちらかじゃないかな 仮にARMだったらRISCに戻ることになるのか そんな変更を強行出来るのはアップルくらいなもんだな : デフォルトの名無しさん (ブーイモ MMab-q1Nq) [sage] 2018/04/03(火) 11:22:41.72:8N8wvrwRM これまでのニュース記事 ・独自CPUを開発中 ・iphoneアプリをmacbookで動かせるようにする ・1000ドル未満のmacbookを追加する つまりはこんなとこでしょ。 ・macbookはARMアーキのカスタムCPU ・proはIntel CPUとカスタムCPUのデュアル構成 スレチなのでもうやめる : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/04/03(火) 12:06:02.87:i3mVMD7F0 最近の下げ調子からちょっと戻したところをイースター休暇を狙って仕掛けがあったんだが 個別のちょっとしたニュースの影響なんて掻き消える事態なんだよ ITだけでもほぼ全部下げてる ttps://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%) : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/04/03(火) 21:56:39.00:eMYrGYMY0 >メモリ確保に失敗したら安全な終了シーケンスの実行も難しいだろうし。 これに関しては起動時にまとまったメモリを終了処理用にmalloc()しておくという古典的なテクニックがある (1 MBのメモリを起動時にmalloc()しておき、ヒープメモリが無くなったらそいつを解放すれば 終了処理に1 MB使える メイヤーズの本にも載ってる : デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/04/04(水) 06:41:13.40:5k6f4LQE0 それJAVAがやっててすごい評判悪い。 : デフォルトの名無しさん (ブーイモ MM85-vInS) [sage] 2018/04/04(水) 08:49:31.33:Ls5GP4D6M Javaの評判で良いのなんて心当たり無いかも : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/04/04(水) 20:06:00.30:kRSnmS570 Java最高!プログラムの未来はJavaにある!面倒なメモリ管理もなくなるし移植でコード書き直す必要もなくなるぞ! それに引き換えC++(笑)ときたら、数年後には特殊用途以外では消えてるね。まあその特殊用途もCとアセンブラで充分だけどな(プ とか言われてた時代もあったんです 本当だよ : デフォルトの名無しさん (ワッチョイ d34c-eTW6) [sage] 2018/04/04(水) 21:24:30.34:g8Q3GJCm0 Java実行するチップもあったが夢の跡 : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/04/04(水) 22:54:27.67:aEQNvaBv0 C++とかいまや高位合成でそのままハードウェアに : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/04/04(水) 22:56:36.02:do3bz0SM0 Javaとか百害あって一利あるかないかのレベル : デフォルトの名無しさん (ワッチョイ 15e7-/wgL) [sage] 2018/04/05(木) 05:14:09.23:KAa2PFgc0 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(){}を追加しただけです : デフォルトの名無しさん (ワッチョイ 15e7-/wgL) [sage] 2018/04/05(木) 05:18:59.30:KAa2PFgc0 すみません派生クラスのコンストラクタにpublic:つけてませんでした・・・ : デフォルトの名無しさん (ワッチョイ 15e7-9DAQ) [sage] 2018/04/05(木) 05:45:20.00:KAa2PFgc0 いろいろ修正したら解決しました : デフォルトの名無しさん (スッップ Sdea-+9ji) [sage] 2018/04/05(木) 08:26:54.03:L9k+v76Td make_shared使ってるのにnewするなんて : デフォルトの名無しさん (ワッチョイ 15e7-9DAQ) [sage] 2018/04/05(木) 08:38:48.75:KAa2PFgc0 newもけしました : デフォルトの名無しさん (ワッチョイ 7ee7-xjHw) [sage] 2018/04/05(木) 20:15:16.61:SmaaQ+MA0 こうしなさい auto inst = std::make_shared<T>(); Manager::m_data[key] = std::move(inst); : デフォルトの名無しさん (ブーイモ MM39-0MDt) [sage] 2018/04/05(木) 20:38:45.12:B7cMgYJ4M まずはManagerとかControllerとかいった名前をたやすく使うのをやめるべき。 もちろんそういった名前が適切な場合も多々あるが、初心者が使う場合、たいていオブジェクト指向設計に失敗している。 : デフォルトの名無しさん (ワッチョイ 2d7f-vJpg) [] 2018/04/05(木) 20:44:22.17:Qwh0cfWA0 その主張前にも聞いたけど実にくだらない : デフォルトの名無しさん (ワッチョイ 2d04-43s8) [sage] 2018/04/05(木) 20:54:24.03:BAXwN9iv0 なんで?シェアードポインタに限っては内部カウント増えてコピーされるだけだよ。 うにーくはmoveしたいけど、mapには入らないみたい。 : デフォルトの名無しさん (ワッチョイ 7ee7-xjHw) [sage] 2018/04/05(木) 21:08:32.94:SmaaQ+MA0 違うよ ちゃんと実際の型でmake_sharedしてからshared_ptr<SuperClass>に入れろって言ってるの : デフォルトの名無しさん (ワッチョイ ca23-Q1NZ) [sage] 2018/04/05(木) 21:42:13.44:kzoSJIbv0 せっかく make_shared 使うのに明示的に生ポインタを new する人って… というようなことだろ : デフォルトの名無しさん (ワッチョイ 2d04-43s8) [sage] 2018/04/05(木) 21:56:01.48:BAXwN9iv0 あー、なるほど。すまんね。 : デフォルトの名無しさん (ワッチョイ ca34-glfZ) [sage] 2018/04/06(金) 01:37:22.74:Mgh91ASd0 auto変数はスコープ外れたらどうせ破棄されるしmove要らない : 名無し@キムチ (ワッチョイ 25b3-1Lkb) [] 2018/04/06(金) 20:16:12.73:VpnYoE0I0 いままでC♯使ってたけど、最近つーかおととしくらいからC++使い始めたんだよ。 そしていろいろ見ているうちにファイルの作成→3Dシーンというのがあったので、作成したら、 何もオブジェクトの入ってないシーンだけの画面が出てきたわけよ。 このシーンにオブジェクトを入れるにはどうすればいいの? またウインドウズのGUIの実行ファイルからこのシーンを出すにはどうすればいいの? つーかそもそもGUIの実行ファイルからこのシーンを出せるの? このようにまだ右も左もわかってない状態なんで、よろしくご教授お願いしますよw : 名無し@キムチ (ワッチョイ 25b3-1Lkb) [] 2018/04/06(金) 20:17:16.93:VpnYoE0I0 >最近つーかおととしくらいからC++使い始めたんだよ。 ごめん、おとといくらいからの間違いだったよw よろしくご教授たのむよ!! : デフォルトの名無しさん (アウアウカー Sa05-KAlc) [sage] 2018/04/06(金) 20:26:20.68:TFjbUU5Da おととい来やがれ と言ってみる : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 20:34:38.59:eB6IhESGd 自分の環境くらい理解しよう。UnityなのかUnrealなのか。 : デフォルトの名無しさん (ワッチョイ 1a7e-PJKe) [sage] 2018/04/06(金) 20:36:14.26:gYiRH0WM0 何を言っているのかわからないし 特定のプラットフォームの話ならそっちで聞くべき : デフォルトの名無しさん (アウアウオー Sa72-RtkZ) [sage] 2018/04/06(金) 21:01:12.49:RWHjeoGDa YAMLをC++で読む簡単な方法はなんですか? LibYAMLなんですかね : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:11:46.44:eB6IhESGd ttps://github.com/jbeder/yaml-cpp これが一番良さそう。星がたくさん付いてるし。 : 名無し@キムチ (ワッチョイ 25b3-1Lkb) [] 2018/04/06(金) 21:18:03.84:VpnYoE0I0 いや、いま使ってたのはUnityでC♯だったが、 それとは別にVisualC++とFBXSDKでってのをやってみようと思っておとといから始めたわけだよ。 でFBXファイルを読み込んでノードの取得あたりまでは進んだけど、 よく見るとVisualC++のファイル新規作成に3Dシーン(FBX)ってのがあるわけ。 もしやこれ使うとFBXSDKはいらないのかな?とも思ったりしたんだけど、 何しろまだ右も左もわからないし、その3Dシーンにオブジェクトを置くやりからもわからないし、 そのシーンを一応とってつけてつくってみたウインドウズ実行ファイルから呼び出すためのコードの書き方もわからないしで、 こうやってみなさまにご教授を求めた次第ですよ!! : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:21:11.15:eB6IhESGd 私の認識が正しければ、SDKはSoftware Development Kitだから、実際の実行時に使うライブラリーのことだろうよ。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:23:42.24:eB6IhESGd 実行時に動かすなら、SDKにリファレンス(またはドキュメント)があるはずだ。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:27:19.39:eB6IhESGd ドキュメントがないなら、そんなマイナーなフレームワークを使うな、で終わり。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:29:52.65:eB6IhESGd ゲーム製作板か、CG板の方がいいかもしれない。 : 名無し@キムチ (ワッチョイ 25b3-1Lkb) [] 2018/04/06(金) 21:32:34.54:VpnYoE0I0 まだ正式なリファレンスはいろいろ暇がなくて読んでない。 日本語で簡単に解説してあるウェブサイトは見たけど、 取得したFBXファイルのいろんな情報を文字列で表示するプログラムが載ってるだけで、 実際にその3Dオブジェクトを画面に表示する方法が載ってない。日本語のサイトで解説してあるのは、どうもここまでみたいなので、 やはり英語の正式なリファレンスを見ないとダメかな?www : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:35:02.97:eB6IhESGd ゲーム製作板に、くわしく知ってる人が居るかも知れない。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:39:40.26:eB6IhESGd 業界へ出るなら、英語アレルギーは克服すべし。自動翻訳が使えれば、詠めるかもしれない。蘭学から学べることは多い。 : 名無し@キムチ (ワッチョイ 25b3-1Lkb) [] 2018/04/06(金) 21:40:42.10:VpnYoE0I0 >ゲーム製作板か、CG板の方がいいかもしれない。 いやゲームはもう作りたくないし、CGも特に興味ない。 実はMakeHumanみたいな3Dキャラ作成ツールがつくりたくてね。 まだ始めたばかりで、そこまでの距離は100億光年ばかりあるけど・・・ これってやっぱりちゃんとしたプログラム技術板向きの話題だよね? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:42:51.27:eB6IhESGd 器の小さい人には教えないよ。時間のムダだからね。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:48:02.69:eB6IhESGd ゼロから3D作りたいなら、DirectX, OpenGL, Valkanあたりを勉強することになる。 しかし、ゲームエンジンがなければ、動く3Dは手間がかかる。 : デフォルトの名無しさん (アウアウオー Sa72-RtkZ) [sage] 2018/04/06(金) 21:49:10.94:RWHjeoGDa ありがとうございます! : デフォルトの名無しさん (アウアウオー Sa72-RtkZ) [sage] 2018/04/06(金) 21:50:43.17:RWHjeoGDa DirectX便利ですよね 魚眼を再現しようとして挫折しましたが... : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:51:55.72:eB6IhESGd iPhoneXでリアルタイムでVtuber作れる時代に素人が3Dモデラー作るのは、技術のムダだろう。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 21:56:32.87:eB6IhESGd 数学のベクトル、射影、非ユークリッド幾何学が理解できるくらいの数学力がないと魚眼レンズはムリだろう。ムリムリ。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 22:00:38.96:eB6IhESGd 物理学的に考えると、魚眼は屈折率の差から発生する現象だから、モデラーの物体に屈折率を設定するだけでいい。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 22:05:13.65:eB6IhESGd カメラの特性で、レンズの広角が設定できればそれに越したことはないが。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 22:10:52.66:eB6IhESGd 「広角 DirectX」で検索。 ttps://msdn.microsoft.com/ja-jp/magazine/dn745869.aspx : デフォルトの名無しさん (ブーイモ MMea-VY9m) [sage] 2018/04/06(金) 22:14:45.90:Qe7eZ8vzM エピポール幾何はいるでしょうねぇ AR/MR/VRするなら : デフォルトの名無しさん (アウアウオー Sa72-RtkZ) [sage] 2018/04/06(金) 22:23:28.39:RWHjeoGDa 度重なるありがとうございます。 勉強します。とりあえず処理重そうです(・・;) : デフォルトの名無しさん (ワッチョイ 1a7e-PJKe) [sage] 2018/04/06(金) 22:30:22.55:gYiRH0WM0 ゲーム作ろうと思っても大体はゲームエンジン作り始めて途中で飽きてやめる : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 22:30:40.49:eB6IhESGd CGもオブジェクト指向になっているから、撮影スタジオで実際に物体やカメラの位置を決めるのと同じように、シーンを構築すれば、それが映像になる。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 22:57:17.05:eB6IhESGd ニュースセンターで使われるような、再現CGを自由に作れるようになったら、引っ張りダコだよ。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi) [sage] 2018/04/06(金) 23:06:06.99:eB6IhESGd そうなったら、映像クリエイターになって仕事を請け負って独立できるぞ。プログラマーよりも働き甲斐があるかもしれん。 : デフォルトの名無しさん (ワッチョイ 1a7e-PJKe) [sage] 2018/04/06(金) 23:07:50.12:gYiRH0WM0 どっちも薄給 : デフォルトの名無しさん (ワッチョイ 6db3-psu8) [sage] 2018/04/07(土) 00:36:31.30:Y5tUUVb30 やたら伸びてると思ったら1人あたりのレス数多すぎだろ(しかも知らんことに口出し過ぎ fbxsdkは昔ちょっとしか触ってないが、多分そのVSの3Dシーン作成ってのは3Dのモデルやシーンを.fbxに書き出すプロジェクトじゃね? そういうのは多分Maya使った方が早いしfbxsdkはどっちにしても要る あとDirect3D使うならそっちのスレ行ってくれ : デフォルトの名無しさん (アウアウカー Sa05-ysxi) [sage] 2018/04/08(日) 02:00:13.10:xND6FkKma C++で用意されているキャストと cのi=(int)j みたいなキャストの違いがよくわからない : デフォルトの名無しさん (ワッチョイ ca34-glfZ) [sage] 2018/04/08(日) 02:09:06.48:+gqqNGFK0 static_cast … 無理のない互換性のある変換。 reinterpret_cast … int から void* 等への強制変換 c の ()キャストと同じ。 const_cast … const 付きから const を無くしたりまたはその逆の変換。 dynamic_cast … 実行時型情報を使って実行時に型情報で互換性を見比べながらの変換。実行時型情報とのリンクが必須。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ fe6f-vJpg) [sage] 2018/04/08(日) 03:14:37.94:RvzgDq0H0 C スタイルのキャストは dynamic_cast 以外の C++ スタイルキャストを兼ね備えている。 安全なキャストも危険なキャストも見た目にわかんないから、 うっかり危険なキャストをしないようにカテゴリ分けしたやつを使った方がいいなって話。 reinterpret_cast や const_cast がどうしても必要な状況になったら、 それはそのプログラムが悪いデザインだというサインだ。 (デバイスドライバとか OS とかの低水準プログラムだと仕方なく使う機会は多いかもしれないけど) : デフォルトの名無しさん (ワッチョイ 2d93-SKFW) [sage] 2018/04/08(日) 06:15:21.60:fQMOYFpe0 『プログラミング言語C++』第4版のどこだったかに、 「危険なキャストを行っているソース箇所が目立つように reinterpret_cast<型> のような長い綴りで見た目もスマートでない キーワードを選んで導入した」みたいなことが書いてあったな。 : デフォルトの名無しさん [sage] 2018/04/08(日) 11:13:04.50:NQAA1W7E0 すいませんchar str[1000]に格納されてるこの文字列を、str2[0][]=64 str2[1][]=9 という感じで上手くデータだけ取り出す方法は無いでしょうか ttp://i.imgur.com/MMYajmf.jpg : デフォルトの名無しさん (アウアウカー Sa05-ysxi) [sage] 2018/04/08(日) 11:13:28.36:CEYO7YYHa ありがとうございます 基本的には見た目の話なんですね : デフォルトの名無しさん (ワッチョイ 2d7f-vJpg) [] 2018/04/08(日) 11:44:19.45:rArjzNgz0 C形式のキャストは絶対に使うなって事だよ : デフォルトの名無しさん (ワッチョイ 959b-Q2Cy) [sage] 2018/04/08(日) 11:44:37.07:ySnMa92f0 cならsscanfかね c++ならregexを使うか そもそもc/c++でやりたい範囲ではないが : デフォルトの名無しさん (ワッチョイ 2d04-43s8) [sage] 2018/04/08(日) 11:44:50.16:wX43tNlZ0 テキストなのなら、一行ずつ読んで、=で半分にしましょう。 んで、""の中の空白以外を全部取り去って、std::mapにでも突っ込みましょう。 : デフォルトの名無しさん [sage] 2018/04/08(日) 12:07:31.24:NQAA1W7E0 >>100 めっちゃ難しそうな回答きた・・ ちょっと調べて頑張ってみますありがとうございます : デフォルトの名無しさん [sage] 2018/04/08(日) 12:17:01.56 danger_cast は言い過ぎとして、unsafe_cast くらいにして欲しかった : デフォルトの名無しさん [sage] 2018/04/08(日) 12:19:03.34 hansode_tampan_cast : デフォルトの名無しさん [] 2018/04/08(日) 12:34:24.71 ・str2はポインタの配列、idxはstr2の添字とする ・1文字ずつループして以下を処理 「=」が現れるまでまで読み飛ばす 「 」「"」以外の文字が現れたらstr2[idx++]にその文字へのポインタ格納 ・「;」までスキップして¥0に置き換え : デフォルトの名無しさん [sage] 2018/04/08(日) 12:36:55.36:NQAA1W7E0 なんかできそう!やってみますありがとうございます! : デフォルトの名無しさん (スッップ Sdea-+9ji) [sage] 2018/04/08(日) 13:00:09.46:CRecF1KTd reinterpret_cast をポインタ以外に使うのはない : デフォルトの名無しさん (ブーイモ MM39-0MDt) [sage] 2018/04/08(日) 13:13:04.30:IdsKnaEwM c向けのライブラリをc++で開発するときは躊躇なく使うかな>reinterpret_cast あとはargとかparamとかいう名前の引数に好きなデータを突っ込みたいときとか。 : デフォルトの名無しさん [sage] 2018/04/08(日) 13:57:50.07 reinterpret_castはゼロオーバーヘッド? : デフォルトの名無しさん (ワッチョイ 2d04-43s8) [sage] 2018/04/08(日) 13:59:32.17:wX43tNlZ0 コンパイラさんが解釈かえるだけだから。新しくなにも確保しない。 : デフォルトの名無しさん (ワッチョイ 1a7e-PJKe) [sage] 2018/04/08(日) 14:55:18.41:XIh7sWbQ0 バイト単位の処理をするときに必ず出てくるだろ : デフォルトの名無しさん (ワッチョイ 7923-Q1NZ) [sage] 2018/04/08(日) 15:41:01.45:drN9+cfC0 の「あとは」以下の用例多いよね。 スレッドのエントリポイントの引数だの libcurl のコールバックの引数だのそんなので : デフォルトの名無しさん (ワッチョイ cabd-X2wr) [sage] 2018/04/08(日) 17:17:06.93:9PMBUXuM0 バリアント型が無いために野蛮なキャストが生きながらえるんじゃ さっさとリフレクションとプロパティーとバリアント型を規格に盛り込みなさい : デフォルトの名無しさん (ワッチョイ 1a7e-PJKe) [sage] 2018/04/08(日) 17:26:02.77:XIh7sWbQ0 >バリアント型が無いために野蛮なキャストが生きながらえるんじゃ 誰も殺そうとしていない : デフォルトの名無しさん (ワッチョイ 3e9f-4k8A) [sage] 2018/04/08(日) 17:48:08.38:yoJPjKyN0 Windowsとかのメッセージのパラメータなんて、 キャストしないとなにもできないけどな : デフォルトの名無しさん (ドコグロ MM72-503E) [sage] 2018/04/08(日) 20:53:29.38:B7amW+qmM > さっさとリフレクションとプロパティーとバリアント型を規格に盛り込みなさい C+++でも作って勝手にやっててくれ : デフォルトの名無しさん (ワッチョイ 4a03-vJpg) [sage] 2018/04/08(日) 21:04:08.52:aevyI+Fp0 C++++でしょ ill-formedだけど それでこそアホどもに相応しい : デフォルトの名無しさん (オイコラミネオ MMa1-RVCH) [sage] 2018/04/09(月) 11:03:03.24:Ecf+pvidM static_castは長いから、ただのcastにしてほしい その方がreinterpret_castのunsafe感が高まる : デフォルトの名無しさん (アウアウカー Sa05-9DAQ) [sage] 2018/04/09(月) 11:19:04.00:ClY8G0uJa デフォルトをstatic_castで解釈しないのはなぜ? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ fe6f-vJpg) [sage] 2018/04/09(月) 11:23:19.28:fbTUuQs/0 #define cast static_cast : デフォルトの名無しさん (ワッチョイ 1a7e-PJKe) [sage] 2018/04/09(月) 15:59:42.60:AbJVhraD0 互換性 : デフォルトの名無しさん (ワッチョイ ca34-glfZ) [sage] 2018/04/09(月) 22:38:54.59:J7f8Y+mC0 互換性には2種類ある クラスポインタ変換の場合を例に挙げると 一つは拡張クラスからベースクラスへのアップキャスト こちらはキャストの明示は必要ない暗黙の型変換が行える もう一つはベースクラスから拡張クラスへのダウンキャスト こちらはベースから拡張クラスへの変換に確証が得られている わけではないのでstatic_castを用いて変換してやらないといけない このときdynamic_castを使うと実行時に型をチェックしてくれる のでよりstrictな変換を行わせることができる できるといってもエラーを発生させるかさせないかの違いだけだけど : デフォルトの名無しさん (ワッチョイ 898a-b3Lf) [sage] 2018/04/10(火) 00:58:36.89:KTsfJjko0 そら互換性のためでしょ : デフォルトの名無しさん (ワッチョイ a102-vJpg) [sage] 2018/04/10(火) 05:22:39.46:AY1cx8Cu0 それは互換性じゃなくC++独自の話だね 互換性というからには何と互換なのかという相手がいる ちなみに、かつて暗黙dynamic_castが提案されて否決となった : デフォルトの名無しさん [sage] 2018/04/10(火) 09:48:42.17:PdcJoG7U0 コンソールプログラムのwhile()ループで1文字入力したらループを抜けるときに使うやつって何でしたっけ・・ while(!getchar())だと文字を受けるまで処理がとまってしまいますが、止まらないやつがあったと思うのですが : デフォルトの名無しさん (ワッチョイ a102-vJpg) [sage] 2018/04/10(火) 10:20:00.71:AY1cx8Cu0 標準に「止まらないキースキャン」はない conio.hのgetch()や ioctl.hのioctl()あるいは windows.hのGetKeyState()のような 処理系依存の関数が必要 : デフォルトの名無しさん (ワッチョイ ca34-glfZ) [sage] 2018/04/10(火) 10:30:44.25:h0HOed+p0 linuxならファイルディスクリプタにselectが使えるけど windowsの場合はファイルディスクリプタとソケットがまた別物だし : デフォルトの名無しさん [sage] 2018/04/10(火) 11:04:35.34:PdcJoG7U0 getch()絡みで調べてたらkbhit()って出てきましたこれです ありがとうございました ちゃんと任意のキー押したら抜けれました : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ fe6f-vJpg) [sage] 2018/04/10(火) 11:10:44.06:141aKXKv0 それって結局はビジーループの一種じゃね? やりたいことにもよるけど、基本的にはあんまりよくない方法だと思う。 : デフォルトの名無しさん [sage] 2018/04/11(水) 08:10:31.14:T4s6uHOl0 まずいですかね? 一日ランニング試験してみたんですが良い感じに動いてるのですが・・ : デフォルトの名無しさん (ワッチョイ ca34-glfZ) [sage] 2018/04/11(水) 09:27:42.36:WgIjYyd40 ビジーループにSleep挿入して100msづつ位休む感じでアイドルに見せ掛けるハッタリを噛ます : デフォルトの名無しさん (ワッチョイ a102-vJpg) [sage] 2018/04/11(水) 12:28:20.43:nyTWTQlG0 はったりじゃないでしょ それは合格 : デフォルトの名無しさん (ワッチョイ ffbd-zmT2) [sage] 2018/04/14(土) 12:01:39.22:bHi1VZVu0 低優先度タスクからのプリエンプションが無いOSでSleep(100 ms)したら 優先度関係無く他タスクに100 msを超えて待たされてしまうかもしれない Sleep()は実行権放棄の呪文としては強力すぐる… : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/14(土) 13:25:03.37:RVvtBgPf0 DOS並にコンソールがクソな環境も珍しいよな unixベースのシェルに比べるとこんな貧相なものがよく生き残ってこれたとおもふ : デフォルトの名無しさん (ワッチョイ a304-x9ai) [sage] 2018/04/14(土) 14:27:12.94:AqyGMwU/0 ウィンドウズの話だけど、threadヘッダのスリープは起こし忘れが少ない気がする。 : デフォルトの名無しさん (ワッチョイ 7f4c-IyeK) [sage] 2018/04/14(土) 22:00:06.17:7AzbU2hj0 未だにGUIがまともにならないLinuxも珍しいよな : デフォルトの名無しさん (ワッチョイ cf81-ycE0) [sage] 2018/04/14(土) 22:16:23.39:B3QB9Fpb0 君に期待しても良いのかな? : デフォルトの名無しさん (ワッチョイ bf7e-ULsc) [sage] 2018/04/14(土) 22:26:38.67:jn5/AQ8F0 誰かがデザイナ雇わないとな : デフォルトの名無しさん (ワッチョイ 1302-ycE0) [sage] 2018/04/14(土) 22:31:21.78:Tt8LTURP0 まともを定義せよ : デフォルトの名無しさん (ワッチョイ bf7e-ULsc) [sage] 2018/04/14(土) 22:47:45.04:jn5/AQ8F0 美しいGUIか使用上十分なGUIか : デフォルトの名無しさん (ワッチョイ ff68-LJHW) [sage] 2018/04/14(土) 23:04:06.39:WAEnZz2X0 Class A { void A(B* &b) { } }; : デフォルトの名無しさん (ワッチョイ cf81-ycE0) [sage] 2018/04/14(土) 23:06:11.46:B3QB9Fpb0 毎日使う上では美しさはいらない。シンプルで頼む : デフォルトの名無しさん (ワッチョイ ff68-LJHW) [sage] 2018/04/14(土) 23:08:51.81:WAEnZz2X0 済みません、途中送信してしまいました・・・ 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したうえで返すことができるようになるでしょうか? : デフォルトの名無しさん (ワッチョイ 839b-qSfG) [sage] 2018/04/14(土) 23:15:39.02:EkNosKh20 void A(B** b) { *b = new B(); } でいいんでないの : デフォルトの名無しさん (アウアウカー Sa47-to91) [sage] 2018/04/14(土) 23:23:21.44:9kNArSDya 馬鹿だから分からないんだが教えて インスタンス渡してからnewするのはなぜ? ポインタを参照にする意味とは? : デフォルトの名無しさん (ワッチョイ 3323-QADq) [sage] 2018/04/15(日) 00:33:02.73:/OvgYAab0 > void A(B* &b) > { > _b = b; > _b = new B(); > } 下の方は b = new B(); としたかったんじゃないのか : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/15(日) 00:44:36.47:b/ktaKN+0 A(B*&b) { b=new B(); _b=b; } 頭悪いだろオマエラw : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/15(日) 00:52:36.30:b/ktaKN+0 A(B*&b){_b=b=new B();} もしくは一発で書けば何の問題もおこらんよ : デフォルトの名無しさん (ワッチョイ 3323-QADq) [sage] 2018/04/15(日) 00:57:54.63:/OvgYAab0 受け取ったインスタンスを全く使ってないがそれが意図した動作なのか : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/15(日) 01:00:18.78:b/ktaKN+0 参照オブジェクトの概念がよくわかってない 学び直せと言いたい : デフォルトの名無しさん (ワッチョイ 7fcb-1i0h) [sage] 2018/04/15(日) 01:04:57.02:VAOccv/70 インスタンスなんて受け取ってないぞ : デフォルトの名無しさん (ワッチョイ 3323-QADq) [sage] 2018/04/15(日) 01:09:03.26:/OvgYAab0 で「インスタンスを受け取り」と書いてあるから ポインタ(の参照)でだけどインスタンスを渡しているのだろう 何故受け取っているのかとかの説明は無理だが : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/15(日) 01:19:33.61:b/ktaKN+0 それにしてもbをnewするとかイミフ 何もしてないじゃんw : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/15(日) 01:22:46.36:b/ktaKN+0 古いインスタンスを_bに格納して新しいインスタンスをbに返したいのか 新しいインスタンスを作成してbと_b両方に返したいのか どっちなんだよ : デフォルトの名無しさん (ワッチョイ 3323-QADq) [sage] 2018/04/15(日) 01:22:49.52:/OvgYAab0 b を new するってのは >b = new B(); のことか?参照で返してるんだよ 何故返す必要があるのかはこれも答えられないが に new して返そうと思っていますとあるからな : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/15(日) 01:30:17.78:b/ktaKN+0 _b=new B() は見当たるが b=new B() ←こんな記述は見当たらないぞ 嘘もたいがいにしとけや : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/15(日) 01:39:29.12:b/ktaKN+0 コイツのソース見る限りbに対しては何もしてないでしょ : デフォルトの名無しさん (スプッッ Sd1f-QADq) [sage] 2018/04/15(日) 03:35:09.27:mYZtkoVNd すまんすまん >B* b; >A* a = new A(b); を見落としていた インスタンスを渡すといっておいてインスタンスを渡していないとは思いもしなかったw であってるんだろうね : デフォルトの名無しさん [] 2018/04/15(日) 06:03:36.65 > void A(B* &b) > { > _b = b; > _b = new B(); > } void A(B* &b) { B* new_b = new B(); b = new_b; _b = new_b; } こういうのは愚直に書けばええんや : デフォルトの名無しさん (ワッチョイ a393-R+MU) [sage] 2018/04/15(日) 08:25:34.99:IUBKEb9a0 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を行わせたい、という意図かもしれないけど、 元の質問から想像を広げすぎてるよね。 : デフォルトの名無しさん (ワッチョイ 6fe7-8Ez4) [sage] 2018/04/15(日) 10:01:16.50:6WpjLuna0 Aが_bをdeleteするために管理するだけのクラスだとしたらスマポ使えという話になる : デフォルトの名無しさん (ワッチョイ 638b-1zQp) [sage] 2018/04/15(日) 10:57:43.04:Yi/sDJN50 前に書き込んだことあるけど ttps://qiita.com/notenopg/items/40571e69986a58b888a0 どうじゃ : 142 (ワッチョイ ff68-LJHW) [sage] 2018/04/15(日) 11:01:19.87:GeT3puOg0 舌足らずでもうしわけありませんでした・・・ クラスBのインスタンスをクラスAで処理していくためにコンストラクタでクラスBの インスタンスを参照受け取りする仕様にしました。 大半のケースではそのまま処理して終わり、なのですが まれに受け取ったクラスBのインスタンスをnewし直す必要がありまして その際受け取ったクラスAのメンバ変数 _b をnewしても受け取り元のインスタンスを newできないことに悩んでいました ただオブジェクト指向の観点から見るとあまり美しいプログラミングスタイルでは無いのかもしれませんね。 クラスBのインスタンスはクラスA内部で完全隔離処理するようにした方がいいのかもしれません : デフォルトの名無しさん (ワッチョイ 6fe7-8Ez4) [sage] 2018/04/15(日) 11:19:51.96:6WpjLuna0 BをAしか使わないならAの中に隔離する 他でも使う必要があって、Aの外部でBの寿命を管理してるなら、AにrefreshB()みたいなBをnewし直した時に渡し直す関数を用意する でいいんじゃないの 本当にBをnewし直す(メモリ上再配置する)必要があるならだけど 実はB自体にreset()用意するだけで済む話のように見える : デフォルトの名無しさん (アウアウウー Sae7-ycE0) [sage] 2018/04/15(日) 12:55:30.01:eVQUY7wra c++じゃポインタのこともインスタンスっていうのか : デフォルトの名無しさん (ブーイモ MMa7-ffqK) [sage] 2018/04/15(日) 14:39:37.81:rsq+XQj0M 2レス前も読めないのか : デフォルトの名無しさん (アウアウウー Sae7-LJHW) [sage] 2018/04/15(日) 18:30:19.93:51qZxk5sa 理解不足を言い換えてミスしてない風にするのが流行ってるのかな : デフォルトの名無しさん (ワッチョイ 832d-to91) [sage] 2018/04/15(日) 22:24:39.46:vR7s+ZvT0 ミスって理解不足からくるじゃん : デフォルトの名無しさん (アウアウオー Sadf-vcwQ) [sage] 2018/04/15(日) 23:39:26.36:Mp1WrgTGa 質問あるのですが、 同一PC内の画面機能と処理機能のプロセス間通信はどうやるのが便利ですか? 画面更新速度は100ms周期くらいです。 共有メモリがいいと思ったんですが、ソケット推してる人がいてもやもや アクセス速度とかNICの通信量とか考えると共有メモリ一択な気がするんですが、どうなんでしょうか? パイプとマップドメモリはメリット無いので考えていません。 : デフォルトの名無しさん (ワッチョイ a350-96DA) [sage] 2018/04/15(日) 23:42:01.12:sXJBpbWg0 何を重視するか次第 : デフォルトの名無しさん (ワッチョイ 738a-Z7Iu) [sage] 2018/04/15(日) 23:43:30.47:qZPDSYA20 共有メモリ=マップドファイルのファイル無しやで : デフォルトの名無しさん (アウアウウー Sae7-LJHW) [sage] 2018/04/15(日) 23:43:31.62:51qZxk5sa そもそも別にする理由は何? どんなものを想定してるの? プロセスは常に1対1なの : デフォルトの名無しさん (ワッチョイ a350-96DA) [sage] 2018/04/15(日) 23:44:26.87:sXJBpbWg0 OSは? : デフォルトの名無しさん (アウアウウー Sae7-LJHW) [sage] 2018/04/15(日) 23:47:06.30:51qZxk5sa 同一PC内なのにソケットとNICの通信量って何か関係あるの? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f6f-ycE0) [sage] 2018/04/15(日) 23:53:07.49:aQ0USPFo0 ソケットって、その場合はUNIXドメインソケットのことだろ。 NIC は関係ない。 プロセス間通信としてはほどほどに速度もあって、ほどほどに疎結合なので十分に選択肢の範囲内だと思う。 : デフォルトの名無しさん (ワッチョイ 3323-QADq) [sage] 2018/04/16(月) 00:28:23.74:TXxoP4/a0 unix domain ソケットがお手軽で便利だけど 時代に合わせてパイプか tcp かなあ Windows でしか使わないならならcom使うのも簡便 : デフォルトの名無しさん [] 2018/04/16(月) 01:39:01.50 共有メモリだとリングバッファとか排他とか自分で作り込まなきゃいけんやろ ソケットならそのへん考えなくてええやん : デフォルトの名無しさん (ワッチョイ ff34-ecZa) [sage] 2018/04/16(月) 02:21:40.05:kGNRvKds0 windowsはファイルマッピングオブジェクトでしょ パイプでさえSYNCHRONIZE特権指定できないゴミなんだから : デフォルトの名無しさん (ワッチョイ bf7e-ULsc) [sage] 2018/04/16(月) 03:12:35.45:HsbFINqV0 標準入出力最強説 : デフォルトの名無しさん (ドコグロ MMdf-fgqO) [sage] 2018/04/16(月) 06:43:39.39:kK8liqj6M unix domain socket なんて使ったことないな 名前空間としてファイルの指定がいるし将来違うマシン間で動作させる時に変更量が多いしtcp/udpに比べてデメリット多くね? : デフォルトの名無しさん (アウアウカー Sa47-vcwQ) [sage] 2018/04/16(月) 07:06:03.32:irvwqMpDa ,174 共有メモリは例えば/dev/shmのRAM領域にあるメモリマップですよね 同一PC内のソケットのボーレートってほぼクロック数なんですか? 同一PC内の通信であったとしてもネットワークドライバの実装するプロトコルスタックを経由してしまうので、 その分のオーバーヘッドの分だけ速度が落ちる、という解釈ですが : デフォルトの名無しさん (アウアウカー Sa47-vcwQ) [sage] 2018/04/16(月) 07:17:01.48:irvwqMpDa iperfとかで同一PC内で速度測ったらどれくらいいきます? (1Gbpsな気が) : デフォルトの名無しさん (ワッチョイ 3323-QADq) [sage] 2018/04/16(月) 08:09:11.43:TXxoP4/a0 ドロップしないから楽なんだよ デメリットは仰る通り : デフォルトの名無しさん (ワッチョイ 3323-QADq) [sage] 2018/04/16(月) 08:09:52.14:TXxoP4/a0 あなた知識が色々おかしいので何も考えずに教えられたとおりにした方が良いですよ : デフォルトの名無しさん (ワッチョイ ff23-ImQH) [sage] 2018/04/16(月) 12:07:30.90:1SlhlQTu0 昨日の安全確保支援士の試験にC++が出ていたが、メンバ変数にm_が付いていた。 さすがにポインタのpなどは付いていないが、ちょっと意外だった。 : デフォルトの名無しさん (アウアウカー Sa47-vcwQ) [sage] 2018/04/16(月) 18:56:27.96:aeexu7jXa 同一PCのTCP通信はどういう経路通るの? : デフォルトの名無しさん (ブーイモ MMff-LJHW) [sage] 2018/04/16(月) 20:00:43.80:Iff3OzVTM クライアント→OS→サーバかその逆 : デフォルトの名無しさん (ワッチョイ f349-ycE0) [sage] 2018/04/17(火) 17:50:44.77:YRsoLN600 未だにシステムハンガリアンなやつみたいに変なのとも うまく付き合うのがC++使いのスキルの1つだかんね : デフォルトの名無しさん (ワッチョイ ffbd-zmT2) [sage] 2018/04/18(水) 00:38:34.88:1Mo3YyI90 ↑ボゾビット : デフォルトの名無しさん (ワッチョイ 738a-Z7Iu) [sage] 2018/04/18(水) 02:18:47.96:whM0Cl8U0 Windowsのネットワーク関係APIはkernel内に実装されていない 後は判るな? : デフォルトの名無しさん (ワッチョイ 135b-ycE0) [sage] 2018/04/18(水) 07:02:39.34:bX/oR0u10 ネットワーク関係に限らずAPIはすべてサブシステムだね : デフォルトの名無しさん (ワッチョイ 9aeb-FlaZ) [sage] 2018/04/20(金) 23:48:17.59:MBksKo4b0 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で試して見た所当然のようにコンパイルエラーになったのですが・・・ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH) [sage] 2018/04/21(土) 00:23:55.79:7j/Wt31X0 const を外すのは const_cast じゃなきゃ出来ないことになっている。 だいぶん昔からそう。 でなきゃわざわざ分けている甲斐がない。 : デフォルトの名無しさん (ワッチョイ e3b3-ey0r) [sage] 2018/04/21(土) 00:37:31.88:WobodGQW0 const char *a = "hoge"; const char *b = "hoge"; この2つのポインタがa == bになることは保障されていますか? : デフォルトの名無しさん (ワッチョイ 578a-/Wij) [sage] 2018/04/21(土) 00:42:18.95:F9SE4HSu0 ない : デフォルトの名無しさん (ワッチョイ 9aeb-FlaZ) [sage] 2018/04/21(土) 00:47:40.36:5uFute1E0 やっぱりそうですよね、何か特別な動作かとも思ったのですがVC++のバグか仕様なんですね・・・ : デフォルトの名無しさん (ワッチョイ b727-9jjH) [sage] 2018/04/21(土) 06:06:21.46:pETeS31u0 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: 非標準の拡張機能が使用されています: 左辺値でキャストしました。 後はわかるな? : デフォルトの名無しさん (ワッチョイ 9abd-Jtac) [sage] 2018/04/21(土) 06:22:18.02:wsxrLs1Z0 ポインタや参照のconst外しは合法だが なぜ合法なのか(合法にせざるを得なかったのか)というとmemory aliasing状況下での最適化の限界に関する ラクダ本ばりに長い議論を要する 悪寒、 プログラミング言語C++か何かでは古いライブラリのconst付け忘れにコード修正無しで対応できるYO!みたいな簡単な説明しかないが しかし左辺値のキャストというのはどうなの? : デフォルトの名無しさん (ワッチョイ 36e7-8q6u) [sage] 2018/04/21(土) 08:02:29.99:POwjcYl50 static_cast<double>(this->val)自体は合法でしょ this->valと同じ値のdouble一時オブジェクトができるだけ おかしいのはそれに代入してること : デフォルトの名無しさん (ワッチョイ b727-9jjH) [sage] 2018/04/21(土) 11:34:19.85:pETeS31u0 int x; (float&)x = 1; : デフォルトの名無しさん (ワッチョイ b727-9jjH) [sage] 2018/04/21(土) 11:34:55.76:pETeS31u0 途中で書き込まれてしまった int x; (float&)x = 1; //well-formed (float )x = 1; //ill-formed : デフォルトの名無しさん (アウアウカー Sa43-gLlN) [sage] 2018/04/22(日) 17:24:24.80:RLzEBpTGa std:stringを引数や戻り値で使う場合、値渡しでも大丈夫ですか? : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/22(日) 17:29:11.38:xCJicIF50 大丈夫 : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/22(日) 18:29:08.58:i5tL4+9s0 stringは内部に参照カウンタを保持した共有リファレンサを持っているから&&使用せずに直で渡しても特に副作用もなく何の問題もないよ : デフォルトの名無しさん (ワッチョイ b704-9jjH) [sage] 2018/04/22(日) 18:53:47.99:cFbiqY2T0 今どきのstringはヒープじゃなくスタックを使ったりもするね 鬼のように最適化されている : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/22(日) 19:26:19.72:xCJicIF50 おじいちゃんそれ大昔の話ですよ : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/22(日) 19:52:27.54:i5tL4+9s0 貴様は過去を否定するのか? 温故知新という言葉を知らないのか? 青二才 : デフォルトの名無しさん (アウアウカー Sa43-gLlN) [sage] 2018/04/22(日) 20:00:35.45:pGMCB93ha ありがとうございます 勝手にデストラクタでdeleteされるとか色々考えていましたがそこは先人たちが考慮して作られているのですね : デフォルトの名無しさん (ブーイモ MMba-BC+p) [sage] 2018/04/22(日) 20:19:16.41:5qvptAAaM いやいや老害に騙されちゃだめですよ。 参照カウントなstringは大昔に禁止されているので、ちゃんと参照や右辺値渡等を使いましょう : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/22(日) 20:23:51.32:M8qmSLCN0 何言ってんだおまえ 頭悪すぎるにもほどがあるだろ : デフォルトの名無しさん (ワッチョイ 36e7-8q6u) [sage] 2018/04/22(日) 20:58:25.32:ltJDDxzZ0 COWなstringは効率が悪くてマルチスレッドとの相性が最悪なのでとっくの昔に打ち捨てられました 規格のCOW実装許容するための記述はC++11でバッサリ捨てられました 今はCOWは規格違反です : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/22(日) 21:39:50.50:M8qmSLCN0 なん…だと!? : デフォルトの名無しさん [] 2018/04/22(日) 21:51:37.63 おじいちゃんw : デフォルトの名無しさん (ワッチョイ 9abd-Jtac) [sage] 2018/04/22(日) 21:54:34.58:w7SgV4Bf0 値渡しや戻り値で戻せることと、 std::string内部での(ヒープ)メモリ管理の詳細は関係なくね?? 引数や戻り値としてスタックに構造体を積めるようになった時点で値渡しや戻り値で戻せることとはほぼ自明 (よほど変なコピコンを定義してコピーをわざと不首尾に終わらせない限りそれはできる : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/22(日) 23:24:42.33:xCJicIF50 まあそうだけれど無駄なコピーはなるべく避けましょうということで : デフォルトの名無しさん (ワッチョイ 9ab3-bxMY) [sage] 2018/04/22(日) 23:50:24.01:usC+gOtq0 今時のコンパイラは、そこらの人間よりよっぽど高度な最適化をするから、素直で単純なコードを書くと速くなる。 効率化するつもりで余計なことをすると、コンパイラの最適化を妨げて、かえって効率が落ちたりする。 本当に重要な部分は実測しながら試行錯誤、それ以外はできるだけ素直なコードを書く、ってあたりが基本。 : デフォルトの名無しさん (ワッチョイ 7acb-462F) [sage] 2018/04/23(月) 01:28:01.46:C1tu+nEe0 stringを値渡しせずにconst参照等々で渡すことはc++の基本なので、素直で単純なコードの部類に入ると思うが。 : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/23(月) 01:32:17.81:Lxhtz3Yj0 って、あたりが基本(`・ω・´)キリッ 道化かw : デフォルトの名無しさん (ワッチョイ 578a-/Wij) [sage] 2018/04/23(月) 01:37:49.36:voecBiJS0 先生!OpenMPへの展開も自動でやってくれるんですか? : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/23(月) 01:46:26.60:Lxhtz3Yj0 値渡しを素直なコードとか言う人って他人の書いたコード読まないんだろうな 宿題以外で何か書いたことあるのか : デフォルトの名無しさん (ワッチョイ db2d-tR7F) [sage] 2018/04/23(月) 02:04:07.25:SgzxVTg+0 const type & : デフォルトの名無しさん (ワッチョイ 9ab3-bxMY) [sage] 2018/04/23(月) 04:33:47.47:WjBjSqCj0 const参照渡しが基本だったのって C++11 以前の世界の話だよね… 幸い、近頃はそんなコードをあまり読まずに済んでるけど。 余計なことをしない、ってのが大事なんだよ。 参照でなきゃいけない理由がなければ、参照を使うべきじゃないんだ。 : デフォルトの名無しさん (ワッチョイ 8a7e-H4fB) [sage] 2018/04/23(月) 06:33:47.30:awXEdMZR0 どこの世界に生きてる人? : デフォルトの名無しさん (ワッチョイ 578a-/Wij) [sage] 2018/04/23(月) 07:20:47.54:voecBiJS0 どんな作品を作っているのかなぁ? : デフォルトの名無しさん (ワッチョイ 4ecc-KT7J) [sage] 2018/04/23(月) 08:32:33.12:EDVnvY5w0 初心者です。 今書いてるプログラムをコンパイルして実行すると、エラーが出たり出なかったり謎の挙動を起こします 最初はエラーが出て、その後数回、コードを一切変えずコンパイルしなおして実行すると急にエラーが出ず上手く行ったりします。 これって何が原因なのでしょうか… こういう事ってよくあるのですか? : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/23(月) 08:34:14.27:Lxhtz3Yj0 キチガイ発言はツイッターかブログでどうぞ : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/23(月) 08:35:11.51:Lxhtz3Yj0 よくあることです デバッグしましょう : デフォルトの名無しさん (ワッチョイ b704-9jjH) [sage] 2018/04/23(月) 10:17:10.24:Hh6TN2Aq0 そのエラーとやら、もしかして警告か? エラーは直すまで何度コンパイルしても絶対に通らない 警告はコンパイルが完了しオブジェクトファイルができる そのコンパイルとやら、もしかしてビルドか? それともmakeか? ビルドやmakeはオブジェクトファイルとソースファイルの日付を比較して ソースファイルのほうが古いとコンパイルを省く だから警告が出てからもう一度ビルドしても同じ警告は出ない おそらく、こういうことだと見受ける : デフォルトの名無しさん (ワッチョイ 237f-9jjH) [] 2018/04/23(月) 10:24:23.61:48PNhEnX0 変数を初期化してないんだろ : デフォルトの名無しさん (ドコグロ MM83-cuLp) [sage] 2018/04/23(月) 12:27:19.92:8odlZZv8M 日本語読めないのかよ... > 実行すると、エラーが出たり出なかったり謎の挙動を起こします : デフォルトの名無しさん (ワッチョイ b704-9jjH) [sage] 2018/04/23(月) 13:44:26.09:Hh6TN2Aq0 日本語でしゃべってくれ : デフォルトの名無しさん (ワッチョイ 5b9b-Th9u) [sage] 2018/04/23(月) 13:58:46.97:1JtTwXqR0 実行してるということはコンパイルは通ってるということだと思う つまりコンパイルの問題ではなく、コンパイルエラーではないだろうという推測 : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/23(月) 13:58:59.41:Lxhtz3Yj0 「実行すると」 ビルド時のコンパイラなどからのエラーではなく、 プログラムを実行したときの挙動についての質問のようですよ : デフォルトの名無しさん (ワッチョイ b704-9jjH) [sage] 2018/04/23(月) 14:45:37.00:Hh6TN2Aq0 初心者つってるから どこまでがコンパイルで どこからが実行なのかの 区別からあやしいと見ている 実行時エラーにしても stopダイアログなのか 結果がおかしいのか あの質問では言ってない : デフォルトの名無しさん (ワッチョイ 237f-9jjH) [] 2018/04/23(月) 14:53:14.79:48PNhEnX0 すげーみっともない奴だな : デフォルトの名無しさん (ワッチョイ b704-9jjH) [sage] 2018/04/23(月) 14:56:19.11:Hh6TN2Aq0 嘘は言っていない : デフォルトの名無しさん (スプッッ Sd5a-wmjz) [sage] 2018/04/23(月) 15:52:04.86:mDBTWEJod 言論の自由を行使し過ぎw : デフォルトの名無しさん (スプッッ Sd5a-Incm) [sage] 2018/04/23(月) 16:27:46.06:So2OBlKcd コンパイルして(リンクを)実行すると だったりして : デフォルトの名無しさん (ワッチョイ db2d-tR7F) [sage] 2018/04/23(月) 17:14:12.91:VArh9qU+0 初心者がいちいちobjからリンクしてるのか : デフォルトの名無しさん (ワッチョイ b704-9jjH) [sage] 2018/04/23(月) 17:15:44.11:Hh6TN2Aq0 しつけえな ここはプログラム技術板 技術的な内容が皆無のレスでひっ絡んでくるなカス : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/23(月) 17:30:01.10:orIXCmni0 何を実行するのか目的語をはっきりさせろ プロ意識が欠けている : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/23(月) 17:32:39.31:orIXCmni0 あ、初心者だったのか… : デフォルトの名無しさん (ワッチョイ ba60-Mp6C) [sage] 2018/04/23(月) 17:34:51.03:vGDXyrLu0 ソースを公開することは可能ですか? ttps://ideone.com : デフォルトの名無しさん (ワッチョイ 9a91-Aj1d) [] 2018/04/23(月) 21:12:48.39:7US5BnQm0 pthread を使ってループ処理をマルチスレッド化したのですが、シングルスレッドと同じスピードしか出ませんでした。 pthread でこういう事やっても無駄なんでしょうか? : デフォルトの名無しさん (ワッチョイ 7acb-BC+p) [sage] 2018/04/23(月) 22:04:36.67:C1tu+nEe0 流石に情報が少なすぎて このままだと下手糞としか言いようがない。 ソースコード貼り付けれ : デフォルトの名無しさん (ワッチョイ fa4c-+Cft) [sage] 2018/04/23(月) 22:09:13.69:oFP/MhUD0 シングルコアのPCかも : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/23(月) 22:17:20.63:1ikED9ud0 pthread使うとひとつの処理が倍速にでもなると思ったのだろうか : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3) [sage] 2018/04/23(月) 22:21:51.35:ATy8dQXfd 不完全な質問はスルーすっと : デフォルトの名無しさん (ワッチョイ 9a91-Aj1d) [] 2018/04/23(月) 22:42:58.69:7US5BnQm0 舌足らずですみません。コードはこんな感じです。 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 ); } : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/23(月) 22:45:44.01:reOPAGg30 この世界では、何かやって思い描いてたようにならなかった場合 まず自分の能力不足を疑うのが鉄則 : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/23(月) 22:51:38.20:reOPAGg30 アハハハハ!ジョークのつもりかなんか? そうじゃないならjoinの動きを勉強しろ : デフォルトの名無しさん (ワッチョイ 578a-/Wij) [sage] 2018/04/23(月) 22:53:42.39:voecBiJS0 釣り針デカいな : デフォルトの名無しさん (ワッチョイ 2304-+3cQ) [sage] 2018/04/23(月) 23:14:39.42:gZ/aKTVF0 いまだに関数ポインタ使ってるのか。野蛮人。 std::functionってスレッドセーフじゃないの? : デフォルトの名無しさん (ワッチョイ 1a68-Mp6C) [sage] 2018/04/23(月) 23:18:02.49:YIxEn5Qs0 いまだ関数ポインタが使いこなせないんだけどやばいかな? : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/23(月) 23:20:18.71:reOPAGg30 考えたらjoinの問題じゃないか もし「単なる加算処理」が1スレッドでメモリ帯域使い潰していたらマルチスレッドにしてもどうしようもないのは明らかだよ : デフォルトの名無しさん (ワッチョイ 0e8a-fvqh) [] 2018/04/23(月) 23:21:31.95:reOPAGg30 未だに関数ポインタなんて使ってるほうがやばい : デフォルトの名無しさん (ワッチョイ 5b9b-Th9u) [sage] 2018/04/23(月) 23:30:05.62:1JtTwXqR0 画像処理で合成処理をパラメータでもらう場合があるんだが その場合内部処理と対応させるために関数ポインタは使うが そういうのもダメ? : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/23(月) 23:35:26.41:reOPAGg30 ダメってわけじゃないけどさあw C++ならもっと柔軟性のあるやりかたが幾らでもあるってこと : デフォルトの名無しさん (ワッチョイ 2350-Incm) [sage] 2018/04/23(月) 23:36:21.76:lnjW6wzS0 virtual関数もラムダ式も関数ポインタ : デフォルトの名無しさん (ワッチョイ 8a7e-H4fB) [sage] 2018/04/23(月) 23:40:33.42:awXEdMZR0 std::byteが邪魔すぎるんですけどg++で無効にするオプションってありますかね? : デフォルトの名無しさん (ブーイモ MM67-BC+p) [sage] 2018/04/23(月) 23:50:59.76:9sQDUnnSM あんた昨日のおじいちゃんだろ。 functionの時代もとっくに終わってるぞ。 autoとlambdaで関数ポインタを使うべき。 : デフォルトの名無しさん (ワッチョイ 2304-+3cQ) [sage] 2018/04/23(月) 23:51:42.53:gZ/aKTVF0 ライブラリ制作者でもなければ関数ポインタなんぞ触らんよ。 よほどCとの兼ね合いが無いと。 : デフォルトの名無しさん (ワッチョイ 7acb-BC+p) [sage] 2018/04/24(火) 00:06:39.75:qFc5rpEV0 threadcountいくつになってるの? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH) [sage] 2018/04/24(火) 00:06:56.48:VhsA5JFS0 忘れがちなことだが std::function は実行時の型を扱う。 画像処理などのようにヘビーな繰返しがあるような場面では関数ポインタを使った場合との間に深刻な速度差が生じることもなくはない。 : デフォルトの名無しさん (ワッチョイ 7acb-BC+p) [sage] 2018/04/24(火) 00:16:24.07:qFc5rpEV0 関数名からして、一度のreduce処理量は大したことなくて、何度も繰り返し呼んでない? thread処理に必要な処理量が相対的に無視できなくなってるんじゃね? スレッドは4本に制限して、各スレッドが処理する量を増やすかスレッドプール式にしては? : デフォルトの名無しさん [] 2018/04/24(火) 00:17:16.38 C++だから関数ポインタ使わないとか頭おかしい 関数ポインタのほうが高速かつシンプルに書けるならそちらを選択すべき : デフォルトの名無しさん (ワッチョイ 8a7e-H4fB) [sage] 2018/04/24(火) 00:20:31.80:N5/L/OXI0 皆富豪ばかりではない : デフォルトの名無しさん (ワッチョイ 1a12-/G6U) [sage] 2018/04/24(火) 00:26:04.88:RoXKv00p0 富豪かどうかはおま環だろ だから自己申告しないヤツが悪い なんでこっちがエスパーみたいなことしなきゃいけないんだ わたくしは教えないがあなたがわたしの環境を忖度しろってか? ヴァカじゃねえの? アフォに対してちゃあんと「テメーのスペックはいかほどですか」と尋ねろクズ 富豪かどうかはわからない、それを言わない人間がまず間違い、 それを逆手にとって相手をマウンティングするアフォがいるから話が進まない : デフォルトの名無しさん (ワッチョイ 9aeb-FlaZ) [sage] 2018/04/24(火) 00:38:30.68:Sy+ZRJzm0 関数ポインタの構文の方がかっこいいだろ! : デフォルトの名無しさん (ラクッペ MMcb-x+X/) [sage] 2018/04/24(火) 00:47:04.42:hfyVIq8IM どんなスペックだろうと他のソフトがどれだけメモリや処理時間を喰い潰していようと自分の処理はサクッと終わらせたいといつも思う : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/24(火) 01:40:17.33:2n4xWLsG0 へんてこりんなマウンティングするやつだなあ ちなみに昨日なんて俺書き込んでないからw : デフォルトの名無しさん (ワッチョイ 9a91-Aj1d) [] 2018/04/24(火) 03:16:15.83:CsMI0xmD0 調べてみたけどさっぱり判りません。 pthread_joinで各スレッドの終了を待って、その後、集計処理をするというのはごく渡り前の処理に見えるのですが、 何が行けないのでしょうか? 別の方法でスレッドの終了を待たねばならないのでしょうか? 自分勝手デスミア線が、具体的に問題点、改善点を指摘して下さいm(_ _)m。 : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/24(火) 03:31:10.06:2n4xWLsG0 いいから「単なる加算処理」全部見せろよこの包茎野郎 : デフォルトの名無しさん (ワッチョイ 9a91-Aj1d) [] 2018/04/24(火) 03:56:33.85:CsMI0xmD0 threadFunctionが、 void* CalcBasicStatics( void* threadArg ) { BasicStaticsThreadArg* arg = reinterpret_cast< BasicStaticsThreadArg* >( threadArg ); double intervalOfX = 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; } } です。細々すみません。 : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/24(火) 05:46:22.80:vHj8ybNt0 そのコード見ても 並列度もスレッドあたりのサンプル数も 1サンプルあたりのコスト(f)もわからないので まるで意味がない 2または4並列で、1スレッドあたり1〜10Mサンプルくらい処理するようにすれば 速くなるか少なくともスレッドを使わない場合より遅くならないと思う 同じ速度ということはメモリ帯域が律速なのかもね : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/24(火) 05:46:49.67:vHj8ybNt0 同じ速度 ↓ スレッドを使わない場合と同じ速度 : デフォルトの名無しさん (ワッチョイ 8723-wmjz) [sage] 2018/04/24(火) 05:55:18.81:vHj8ybNt0 fでメモリのどっかから数値を読んでいるんだと思うけど、 これがなるべく連続したアクセス(局所化を謀る)になるようにループを構成できれば速くなるかもしれない。 この辺りはググれば色々参考になるページがあると思うが いまググッたらそれらしいページがあったので書いておく ttp://myoga.web.fc2.com/prog/cpp/opti02.htm 仕様として外からfが与えられるなら無理な話かもしれない。 もちろん interval が 1 で f(x) が { return v[x]; } のような最適なケースよりは速くならないので その辺りは無駄な努力をしないよう測っておきましょう。 : デフォルトの名無しさん (ワッチョイ 2350-Incm) [sage] 2018/04/24(火) 06:54:08.05:RDzdLFpT0 fの中身が公開出来るなら公開して 複数あるならそのうちの1個でいいから あと、 1回のthreadFunctionで何個くらいfを計算する? : デフォルトの名無しさん (スップ Sd5a-wOeC) [] 2018/04/24(火) 09:24:50.43:jHZYDUEYd joinについて勉強しろとか偉そうに言ってたのは何だったの : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/24(火) 18:12:35.67:2n4xWLsG0 こりゃ「多分」joinの問題じゃないなと判断してを書いたんだが これくらいのコンテキスト読めないとマルチスレッドは無理だよ : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/24(火) 18:15:41.14:2n4xWLsG0 fやら具体的なargsの内容やら処理時間測定のやりかたも記述されてないし んなもの誰も答えられるかよ : デフォルトの名無しさん (スップ Sd5a-wOeC) [] 2018/04/24(火) 18:32:28.83:6+u8wIQpd 違う違う なんで明らかに間違えてる事を偉そうに述べられるのかと聞いてんだけど 読解力もスキルもないのか : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/24(火) 18:41:27.90:2n4xWLsG0 本当に「明らかに」だと思ってるの?バカですか? : デフォルトの名無しさん (ワッチョイ 237f-9jjH) [] 2018/04/24(火) 18:45:24.94:cOEBcXkN0 サンプルレベルのJoinの使い方をみて 「アハハハハ!ジョークのつもりかなんか?そうじゃないならjoinの動きを勉強しろ」 は流石に笑ってしまう : デフォルトの名無しさん (ワッチョイ 0e8a-HDkP) [] 2018/04/24(火) 18:47:53.38:2n4xWLsG0 勝手に笑ってればw : デフォルトの名無しさん (アウアウウー Sa47-9jjH) [] 2018/04/24(火) 18:49:15.43:Z9G2Fq/Ha cin で、個数の決まっていない整数たちを読み込みたいのですが、どうすればいいでしょうか? 整数たちの個数 n が分かっていれば、以下のように読み込めばいいですが。。。 vector<int> v; int i; for (int i = 0; i < n; ++i) { cin >> i v.push_back(i) } : デフォルトの名無しさん (ブーイモ MM26-BC+p) [sage] 2018/04/24(火) 18:59:54.20:lGEjd9Z7M 明らかにだろどう見ても。 何をどう勘違いしたのか説明してくれよ。 : デフォルトの名無しさん (ワッチョイ 2393-MaWf) [sage] 2018/04/24(火) 19:02:18.64:of0BgjlM0 他に入力がないなら cin.eof() で入力の終了を検出できるよ。 cin のブール演算を使ってもいいけど、どうにも慣れなくてね(個人の見解)。 : デフォルトの名無しさん (アウアウウー Sa47-9jjH) [sage] 2018/04/24(火) 19:15:13.81:Z9G2Fq/Ha ありがとうございました。 別の質問なのですが、一般的に、vectorの使用頻度というのはどれくらいでしょうか? 配列でやれることもすべて vector を使ってやるという人は多いでしょうか? それとも、効率などを考えて配列で極力済ませるという人が多いでしょうか? もちろん、ケースバイケースでしょうけれども、そのあたりの常識がないので、大体 どんな感じなのかが知りたいです。 : デフォルトの名無しさん (アウアウウー Sa47-9jjH) [] 2018/04/24(火) 19:17:35.43:Z9G2Fq/Ha 自分としては、効率など細かいことは考えずに、vectorを使って問題ない 場面ではvectorを使うという風にしたいのですが。。。 vectorを使っても速度などの点で問題ない場合、一般的なプログラマーなら どうするのかが知りたいです。 : デフォルトの名無しさん (アウアウウー Sa47-9jjH) [] 2018/04/24(火) 19:20:20.45:Z9G2Fq/Ha 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]; } どちらにするのが普通なのかの常識がありません。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3) [sage] 2018/04/24(火) 19:30:42.86:Eukzbh8yd 生のnew/deleteは、なるべく使わないのがいい。delete忘れ、例外などでバグの元や維持コストになる。 : デフォルトの名無しさん (アウアウウー Sa47-9jjH) [sage] 2018/04/24(火) 19:33:20.39:Z9G2Fq/Ha ありがとうございました。 ということはできるだけvectorを利用したほうがいいということでしょうか? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3) [sage] 2018/04/24(火) 19:36:23.45:Eukzbh8yd 動的にサイズが変わらないなら配列かstd::array。 動的にサイズが変わるならstd::vector。 : デフォルトの名無しさん (ワッチョイ b67f-KMMs) [sage] 2018/04/24(火) 19:38:54.99:t8t5TswZ0 上だったらv.reserve(n)しておこう : ◆QZaw55cn4c (ワッチョイ ba60-Mp6C) [sage] 2018/04/24(火) 19:42:04.62:B3J+xNmy0 私は書き始めは std::vector を専ら使っており、後で他のコンテナに換えています : デフォルトの名無しさん (スップ Sd5a-Incm) [sage] 2018/04/24(火) 19:46:25.46:UxTdQ3KXd コード読めないの? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3) [sage] 2018/04/24(火) 19:51:37.43:Eukzbh8yd 普通の人間なら、文脈を読み取れるけど、俺はコンピューターに近いんだ。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH) [sage] 2018/04/24(火) 20:04:19.79:VhsA5JFS0 実用上の問題が無いことがわかっている範囲内であれば、 深く考えずに vector だけで乗り切るのも悪い選択じゃないと思うよ。 ただ、使い分けることで意図を表現しやすい。 たとえば list を使っていれば要素の挿入や削除が頻繁なデータなんだなって思うし、 array が使われていれば要素の個数が固定なんだなって思う。 速度的に影響がない程度の規模であっても、 それが適しているような操作をこれからするのだという意思表明は人間がプログラムを読むときのヒントになる。 そして、そういうヒントは書いている途中にこそ必要なものなので、 のように後から整理していくスタイルは個人的には好きじゃないな。 : ◆QZaw55cn4c (ワッチョイ ba60-Mp6C) [sage] 2018/04/24(火) 20:22:55.46:B3J+xNmy0 >それが適しているような操作をこれからするのだ うーむ、いろいろと考えさせられます std::vector でなら使えても、std::list では使えない、というのはあるから、最初からそれを考慮しておくのは…よくありますねえ : デフォルトの名無しさん (ワッチョイ 9a23-wmjz) [sage] 2018/04/24(火) 20:43:20.11:Ukt80uX+0 vector は list に比べた場合、 データがメモリ上隣接して並んでいるので →そういう引数を要する各種 API にそのまま渡せる →メモリアクセスが局所的にできてキャッシュが効く 予約領域を拡張する場合にのみアロケータが呼ばれるので追加時のアロケータによるオーバーヘッドが低い とかの良い特性もあるので要素のコピーが軽くて個数が小さいものはvectorにして損することは少ない : デフォルトの名無しさん (ワッチョイ b704-9jjH) [sage] 2018/04/24(火) 21:34:54.87:JVcrtulg0 BidirectionalIteratorとRandomAccessIteratorだろ 規格用語で言えば短く済む : デフォルトの名無しさん (ワッチョイ 36e7-8q6u) [sage] 2018/04/24(火) 22:35:44.34:iCiOyu8i0 std::listはメモリ局所性がないので今どきのマシンだとクソ遅い 積極的に使う理由は基本的にない : デフォルトの名無しさん (ワッチョイ 2350-Incm) [sage] 2018/04/24(火) 23:33:49.11:RDzdLFpT0 積極的にって... 使いどころで使うための物だよ : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/24(火) 23:51:07.95:z/eaD8m90 メリットとデメリットを見極められないとコンテナを使いこなすのは難しい 昔から配列を弄り倒している古参にとってはこんなに便利な物はないと思うがね 90年初頭辺りにタイムスリップして実際に構造を真似てフルスクラッチでテンプレートなんぞなかった世界で組んでみればコンテナの挙動は自ずと理解できると思うが時代がわるかったな 今は何も苦労しなくても容易になんでも手に入る世界だからな 修業が足らんよ青二才 : デフォルトの名無しさん (ワッチョイ 36e7-8q6u) [sage] 2018/04/24(火) 23:55:55.63:iCiOyu8i0 その使い所がよほど特殊な状況以外にないんだよ : デフォルトの名無しさん (ワッチョイ e3b3-9jjH) [] 2018/04/24(火) 23:58:59.30:4OXNJpQB0 大規模C++ソフトウェアデザインという本を読んでいます。 冗長インクルードガードが紹介されているのですが、効果あるんですかね。 古めの本なのですが、最近のコンパイラだと意味ないですかね : >>306 (ワッチョイ e3b3-9jjH) [sage] 2018/04/25(水) 00:13:26.67:2lHeUIKm0 ttp://ir9.jp/prog/ayu/datlog/tech_cpp/1149427282/1149427282_04.html ここの967以降に同じ質問がありました。質問撤回します。 : デフォルトの名無しさん (ワッチョイ 2304-+3cQ) [sage] 2018/04/25(水) 00:14:20.28:MdUECE2K0 #pragma once って規格化されたんだっけ? : デフォルトの名無しさん (ワッチョイ 36e7-8q6u) [sage] 2018/04/25(水) 01:03:31.17:YD2+CY860 されてない しようしようと20年言われ続けて技術的な問題でできずにいる : デフォルトの名無しさん (ワッチョイ 9a91-7Gvz) [] 2018/04/25(水) 02:07:21.83:/kuz3CrQ0 243です。 アドバイスを頂き検討したのですが、メモリが散らかっているのが原因と判断しました。 都合により細々とした実装の話は割愛しますが、付き合ってくれた皆さんありがとうございました。 : デフォルトの名無しさん (ワッチョイ 8a7e-H4fB) [sage] 2018/04/25(水) 02:33:10.54:wwssDiVV0 どおりで未だに警告でるわけだ : デフォルトの名無しさん (ワッチョイ 2350-Incm) [sage] 2018/04/25(水) 06:26:59.61:8qaCWrbS0 その特殊な状況の為にlistが存在する 私の場合は特殊なプログラムを書くことが多いので 使いどころは多いのかもしれない また、普通の組み込みC言語でも簡易な片方向リストとかを使ったりする (C++じゃないのでlistは無い) : デフォルトの名無しさん (ドコグロ MMcb-cuLp) [sage] 2018/04/25(水) 07:15:49.01:ntbHaYzVM 技術的な問題ってなに? 既に実装してる環境の方が多くね? : デフォルトの名無しさん (アウアウカー Sa43-2MBd) [sage] 2018/04/25(水) 07:30:39.44:kzCoHflQa 今はモジュールの方を標準化しようとしてるんじゃ : デフォルトの名無しさん (ワッチョイ 8a7e-H4fB) [sage] 2018/04/25(水) 08:47:25.49:wwssDiVV0 偉い人が考えてることはわからん : デフォルトの名無しさん (ワッチョイ 0e76-9jjH) [sage] 2018/04/25(水) 11:24:32.26:iscLTfMY0 プリプロセッサは C++ じゃないからね C++ 以外の言語と共有しているツールなので それらと歩調を合わせる必要があるし プリプロセッサだけ独立の規格にするなら C++ を含め、諸言語の規格も プリプロセッサのバージョンとどう付き合うのか 策定せにゃならん : デフォルトの名無しさん (ドコグロ MMcb-cuLp) [sage] 2018/04/25(水) 12:23:57.05:ntbHaYzVM 意味わからん C/C++の規格にプリプロセッサの仕様もあることを知らんのか? そもそも他の言語と共有してる環境なんて見たことないし : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH) [sage] 2018/04/25(水) 15:37:25.53:7Yqb38x00 現行では、 #include ディレクティブは「対象ファイルの内容がそこに書かれているかのようにふるまう」という規則なので、 ヘッダファイル内のプラグマ (#pragma once) の解釈が始まるのはインクルードされた後になる。 もちろん対象範囲がコンパイル単位全体に及んでしまっては #pragma once の意味がないが、 現状の仕様に辻褄を合わせるとそうなる。 実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、 #pragma once を仕様に入れるのに #pragma once の項目を追加すれば済むわけではないってことは理解してくれ。 それと、プリプロセッサの仕様は C/C++ の一部なのは確かだが、 挙動を規定しきれていないのじゃないかということは指摘されている。 ttp://https://qiita.com/ruiu/items/4d471216b71ab48d8b74#3%E6%9C%8817%E6%97%A5 "> ttps://qiita.com/ruiu/items/4d471216b71ab48d8b74#3%E6%9C%8817%E6%97%A5 うやむやでやってきてるところを整理する必要は有ると思う。 : デフォルトの名無しさん (ワッチョイ 0e76-9jjH) [sage] 2018/04/25(水) 16:38:46.53:iscLTfMY0 また別な話 #includeしようとしているファイルが 過去に#includeしたファイルと同一かどうか という判定も意外に厄介だね ハードリンクできるファイルシステムと そうでないファイルシステムがあったりするし ハッシュが一致しても衝突かどうかの問題もある : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH) [sage] 2018/04/25(水) 18:09:25.23:7Yqb38x00 ハードリンク、シンボリックリンクが無いファイルシステムだったとしても、サーチパスの問題も思いつくな。 たとえばカレントディレクトリと、カレントディレクトリ直下の foo ディレクトリからヘッダファイルを探すようになっているとき、 #include "bar.h" と #include "foo/bar.h" は同じファイルを指しているが、表現が異なる。 同一のファイルとして除去すべきだろうか? : デフォルトの名無しさん (スップ Sd5a-Incm) [sage] 2018/04/25(水) 19:34:37.54:ch3bizaad #if **** #pragma once #endif とかどうなるの? 複数回のインクルードで条件がちがっていたら? : デフォルトの名無しさん (ドコグロ MMcb-cuLp) [sage] 2018/04/25(水) 20:33:35.69:ntbHaYzVM > 実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、 規定すればいいだけだろ? どこに技術的な問題があるんだ? 政治的な問題だと言うならまだしも みたいな話は処理系定義ですむ話 は少し悩ましいがそもそも途中まで読んでから#pragma onceとか言われても面倒だから書くならファイルの最初に書けとかの制限をつければいい > 挙動を規定しきれていないのじゃないかということは指摘されている。 いやいや、その子ちゃんと規格読めてないだけでしょ w > Haskell (GHC) は C プリプロセッサを使うよ。 仕様を流用してるだけでしょ? 何かのコンパイラと共有してるわけじゃないと思うが : デフォルトの名無しさん (ワッチョイ 36e7-8q6u) [sage] 2018/04/25(水) 20:43:06.43:YD2+CY860 君よりよっぽど賢い人達が20年間悩み続けて未だに出来てないことを舐めない方がいい : デフォルトの名無しさん (ドコグロ MMcb-cuLp) [sage] 2018/04/25(水) 21:22:23.29:ntbHaYzVM 別に悩み続けてなんていないでしょ w #pragma onceで事足りてるからわざわざ政治的なことに足突っ込みたくないだけ : デフォルトの名無しさん (ワッチョイ 36e7-8q6u) [sage] 2018/04/25(水) 21:47:31.85:YD2+CY860 新規格の季節になると毎回のように標準化委員会の議題に上がってるんだが? : デフォルトの名無しさん (アウアウウー Sa47-Mp6C) [sage] 2018/04/25(水) 22:20:34.77:fPsUNFh1a モジュール方式になったらヘッダファイルが要らなくなる? : デフォルトの名無しさん (ワッチョイ 0e76-9jjH) [sage] 2018/04/25(水) 22:28:42.99:iscLTfMY0 > 処理系定義ですむ話 それはおかしいでしょ ハードリンクできる処理系からできない処理系に移植したtarボールの #includeの挙動が未規定なら結局インクルードガードを自前で書くことになる : デフォルトの名無しさん (ワッチョイ 9ab3-cuLp) [sage] 2018/04/25(水) 22:48:43.95:7S1PATFb0 でも誰も進めようとしないんだろ w よくある話 C/C++ ってそういう言語だしそもそも環境変える予定があるならそんなものに依存したファイル構成にしないでしょ : デフォルトの名無しさん (ワッチョイ 9a34-lUQu) [sage] 2018/04/25(水) 22:55:12.61:eMzyfy/H0 #pragma once なんて once upon a time だぜ 今はもうだれも気に留めてやしねぇ : デフォルトの名無しさん (ワッチョイ 0e76-9jjH) [sage] 2018/04/25(水) 23:31:56.94:iscLTfMY0 アホの相手は疲れたわ もう寝る : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH) [sage] 2018/04/25(水) 23:46:14.09:7Yqb38x00 トピックとして大きすぎるので面倒くせえってだけの話。 : デフォルトの名無しさん (ワッチョイ 9abd-Jtac) [sage] 2018/04/25(水) 23:50:29.61:ayqRGoGD0 #pragma once ぐらいPerlでインクルードガードに自動変換できる、 ていうか無くてもできるから自前で書くとかありえん… : デフォルトの名無しさん (ワッチョイ 9abd-Jtac) [sage] 2018/04/25(水) 23:51:29.73:ayqRGoGD0 むしろプリコンパイルヘッダーが規格化されないの方のが悩ましい… : デフォルトの名無しさん (ワッチョイ 9ab3-cuLp) [sage] 2018/04/25(水) 23:58:40.94:7S1PATFb0 逃げるなら黙って逃げろよ w : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/26(木) 00:10:34.39:0UXBsrps0 ていうか#pragma onceとか#ifdef〜#endifによるインクル〜ドガ〜ドのシノニム以外の何者でもないと思うが 一方#ifdef〜#endifによるインクル〜ドガ〜ドは 「対象ファイルの内容がそこに書かれているかのようにふるまう」 という規則の下で立派に機能していると思うし、 のように等価な#ifdef〜#endifによるインクル〜ドガ〜ドが存在し得ない場合はエラーにしたら良いと思うし、 ハードリンクできる処理系かどうかに関係なく#ifdef〜#endifによるインクル〜ドガ〜ドは機能していると思うし (だいたい1バイナリのビルド中にハードリンクの中身が変わるみたいな想定をする方がおかしい=ハードリンクはそうでないファイルと区別がつかないとみなせるハズ だったら#pragma onceも問題なく規格化が可能なのでは… 少なくとも技術的な問題とかとうていナッシング? : デフォルトの名無しさん (ワッチョイ d3cb-EDrg) [sage] 2018/04/26(木) 00:21:25.86:44bF0Q7g0 ちょっとはググれよ。 お前みたいなやつを「殆し」って言うんだぜ : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/26(木) 00:41:00.06:0UXBsrps0 ↑ググってもボンクラが書いたような駄文が見つかるだけなので却下。 1. #pragma onceは#ifdef〜#endifによるインクル〜ドガ〜ドのシノニムである 2. #ifdef〜#endifによるインクル〜ドガ〜ドは世の中で立派に機能を果たしている にもかかわらず、 3. #pragma onceの規格化の有効な解が存在しない という驚くべき結論がなぜ導かれるのやろうか… : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 06:29:49.76:IAeApo/t0 インクルードガードを自前で書くたびに 毎度毎度ワンパターンでタイプ数だけは結構多い不毛な作業は 機械化できないかと考えるのは至極当然 むしろ何の疑問も持たないやつは適性に疑問符がつく インクルードガード用のフラグマクロの命名則にも不安がつきまとい 無名namespaceのように衝突しない保証があったらなあと思ったりもする : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/26(木) 07:22:21.59:4xU9Va0kM 要するに同じファイルであるかをどうやって判定するかの問題 インクルードガードは利用者(プログラマー)に識別子を決めさせる(押し付けたとも言う)ことで実現してる なので押し付けられたプログラマーには > インクルードガード用のフラグマクロの命名則にも不安がつきまとい みたいなことが発生する #pragma onceはこの判定を処理系側でやるんだが例えばファイルの絶対パスで判断するとかファイルをインクルードする前にmd5とかのハッシュを求めて判断するとかすればいいだけ ハードリンクとかで違う名前つけて#pragma onceがうまく動かないとか言うアホとかは無視すればいいし、ハッシュの衝突が心配と言うなら衝突した時に比較するようにすればいい どういう仕様がいいのかで揉めるのはあるけど技術的な問題とか言ってる奴はちょっと知能が足りなさすぎ : デフォルトの名無しさん (ワッチョイ 4193-JpCb) [sage] 2018/04/26(木) 07:42:18.98:n/ljx3l20 #ifndef 形式のインクルードガードを自前で書くとタイプ数が多いし 識別名を打ち間違える危険もあるから .h のファイルを新規作成したときに 自動的に入力されるようにエディタのマクロにしたよ。 まぁ、識別名をファイル名から作ってるから、ファイル名の変更でアレだけど。 昔(フロッピーでやってた時代?)は #ifndef 形式でガードすると どのみちヘッダファイルをまるごと読み込まなきゃならないから、 #pragma once の方がコンパイル時間において優れてる、などと言ったけど、 ハッシュを計算して同一か検証するとか手間が増えるなら 時間の面での優位性はなくなったのかな。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-luqG) [sage] 2018/04/26(木) 09:45:48.32:P0bCzIha0 「技術的な」というときの技術は「プログラミング技術」の意味じゃないこともあるんだよ。 前置きが無い限り広すぎてあんまり意味ない。 実装がいくつもあるのに、仕様策定にあたっての言葉で出てくる「技術的な」なんだから文脈でわかれよ。 仕様に落とし込む難しさが元々の論点。 ハードリンクの話題は「同一のファイルとは何か」を定義する難しさの一例で、実装のことなんか言ってない。 このスレで既に上がっている選択肢だけでも ・ 内容が同じ ・ 絶対パスが同じ ・ #include ディレクティブ中の表現が同じ ・ inode が同じ (ハードリンクは同一とみなす) があり、内容の一致を選択する場合以外は言語の外の世界の環境に関する記述が必要になる。 世の中にある色んな環境のことを考慮して文面にする難しさってのはわかるだろ? そんなわけで、個人的には内容の一致だけで判定するのが (仕様として定義するにあたって) 一番簡単だと思う。 ODR に関するルールの中にも同じトークン列を要求するものがあるし。 それに加えて で取り上げた展開手順の規則をなんとかする必要はあるが、 に解を与えるような上手い簡単な規則は思いつかないな。 既に多く書かれてしまっているコードの現状との互換性を考えると のいうような、 #pragma once を書ける場所を制限するような規則は選択できないと思う。 結局は複雑なものにならざるを得ない。 そんなのほっといてモジュールの導入に邁進しようぜっていうのは妥当な方針だろ。 : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 11:12:45.83:IAeApo/t0 みたいに独善的なやつは標準化委員に向かないタイプだね 提起された問題を個人的に考えるのがイヤだから却下とかやってたら みんなやる気なくすし : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 11:13:52.62:IAeApo/t0 会社にもいるよね今の野党みたいなアイディアキラー : デフォルトの名無しさん (ブーイモ MM85-MzrX) [sage] 2018/04/26(木) 11:26:33.21:+C2ovlRwM この板の別スレにも跳梁跋扈してるな : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/26(木) 12:36:39.87:4xU9Va0kM > 「技術的な」というときの技術は「プログラミング技術」の意味じゃないこともあるんだよ。 そういう人がいるからわざわざ「政治的」って言う言葉を入れてあるんだが理解できなかったのか? で、あんたの言う技術的な問題ってなに? 具体的に書いてくれ > みたいに独善的なやつは標準化委員に向かないタイプだね > 提起された問題を個人的に考えるのがイヤだから却下とかやってたら 意味わからん 俺が提示した内容がダメだと言うならもっといい案を提示すればいいだけ こんなスレで独善的とか頭大丈夫? : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 13:01:09.90:IAeApo/t0 提示してねえだろ、おまえは無視つったんだよ 嘘つくんじゃねえ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-luqG) [sage] 2018/04/26(木) 13:58:41.43:P0bCzIha0 私はこの件について、技術的な問題があるとは述べてない。 その箇所の後に技術的という言葉は広範すぎて (言い換えれば、具体性がないので) 意味ないという意味のことを書いてるつもりなんだが。 それとは別に、私の考える問題を端的に言うと仕様の文面に落とし込むのは難しいねっていう、そんだけのこと。 : デフォルトの名無しさん (スップ Sdf3-LNFl) [sage] 2018/04/26(木) 14:09:35.01:9t94Lsi9d 相談スレであって要望スレじゃない : デフォルトの名無しさん (スップ Sdf3-LNFl) [sage] 2018/04/26(木) 14:10:26.12:9t94Lsi9d 中身のないガキの言い合いは他で : ◆QZaw55cn4c (ワッチョイ 5360-c97c) [sage] 2018/04/26(木) 17:50:46.60:y22H8Uhx0 現時点での問題点をはっきりさせることに意味はあると思いますよ… : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/26(木) 17:56:28.00:4xU9Va0kM 理解できないなら絡んでくるなよ w 「アホな利用者は相手にしない(=無視する)」って言う仕様を「提示」してるって話だ、ボケ : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/26(木) 18:15:04.17:EM3O7qLA0 スレチ 意味があると思うなら他にスレ立ててやれ : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 18:20:39.64:IAeApo/t0 科学技術的な議論にアホなんて用語を使うあたりお里が知れるな 形容詞には比較基準や単位をつけろボケ : デフォルトの名無しさん (スップ Sdf3-LNFl) [sage] 2018/04/26(木) 19:18:47.48:bSbrcQnXd ガキの喧嘩は他でやれ : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/26(木) 19:29:11.00:HtO+dzj70 俺はが正しいと思うぜ。 というかは明確に間違ってるだろ。色々と。 「ハードリンクガー」なんてのは論外。規格で定めるべき事項ではない。 規格で定めるべきなのは、 ・全く同一の中身だが実体が異なる場合でも #pragma once は有効か? (cp A.h B.h の場合にも B を読み込むか?) だ。そしてこれは当然現行のインクルードガードと同じ方向に揃えるべきであり、 ・読み込んではいけない という仕様になるのも自明だ。 絶対パスやinodeやハードリンクというのは、 ・通常のファイルシステムであれば、絶対パスが同一なら同じファイルを参照する (=同じ中身であることが保証される) ・inodeでファイルシステムが実装されているのなら、 同じinodeを指すファイル(=ハードリンク)の場合には、同じ実体を参照する (=同じ中身であることが保証される) であって、これらは「全く同一の中身」であることを確認する手段でしかない。 これらが有効な環境では間引くのに用いればいいだけ。勿論ハッシュを使ってもいい。 これらが別物に見えるのなら、それは抽象思考が出来ない馬鹿だからだよ。 ファイルシステム毎にC++の規格をいちいち決め直す必要があるなんて、おかしいだろ。 今後新しいファイルシステムが考案される毎に、毎回C++の規格を刷新するつもりか? 例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来るが、 それでどうなるかをC++の規格に定めるべきだと?マジで馬鹿だろ。 : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/26(木) 19:29:59.32:HtO+dzj70 最終的に規格に定めるのはつまり、 ・全く同一の中身の場合には #pragma once は有効 (=現行のincludeガードと同様) であって、揉めるとしたら、 ・意味的には同一だがバイナリ比較では異なる場合 (例:最終行に空白や改行が追加された場合や、コメントのみの変更の場合) (=現行のincludeガードでは読み込まれないが、単純な方法では同一性の確認が難しい場合) だが、これも方向としては現行のインクルードガードと合わせる方向、つまり、 ・読み込んではいけない とされるべきであり、これもまた自明だ。 (とはいえここは実装的に揉めるかもしれんが) そもそも「同一性の確認」をファイルシステムに依存する考え方自体がおかしい。 もうじき #include 対象を url 指定するような時代にもなるだろうし。 (善し悪しはさておき、PHPではこれが出来る) そうしたら、「同一かどうかは中身で判断する」という選択肢以外はなくなる。 こんな当たり前の話が分からないのは完全に老害化してる。 : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/26(木) 19:30:31.24:HtO+dzj70 そしてやる気がないのは今更意味がないからだろ。ほぼ全ての環境で実装済みだ。 > Cray C and C++ 以外では全て実装済み > ttps://en.wikipedia.org/wiki/Pragma_once 勿論糞長いパスとかにしたらはまることもあるが、これもよくある話でしかないし、ユーザ責任でいい。 規格に「パスは○○文字まで」と決めるわけにも行かんし。 > 途中でバッサリとパスが切られて、まったく同じシンボル名になって、 > 初めてincludeしたファイルなのにスキップされるという、 > なかなか原因解明が困難な不具合に襲われる……といったケースがあるかもしれません。 > ……はい、体験談です。 > ttp://cpp.aquariuscode.com/include_guard : デフォルトの名無しさん (ワッチョイ db9f-x1HS) [sage] 2018/04/26(木) 19:39:23.16:CbHb+b7U0 二重にインクルードすることを想定しているヘッダーファイルって、存在するものなの? pragmaとか書かなくても、勝手にやってくれたら問題あるの? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-L0fA) [sage] 2018/04/26(木) 19:43:43.54:napFR+dZd <pshpack?.h> <poppack.h> : ◆QZaw55cn4c (ワッチョイ 5360-c97c) [sage] 2018/04/26(木) 19:56:21.41:y22H8Uhx0 要旨が混乱していますね >例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来る つまり、今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない**と主張しているのですよね そう主張するのなら、 >・読み込んではいけない >という仕様になるのも自明だ。 「読み込んでいいかどうか」を決める方法がないのに「読み込んではいけない」と決めていいのですか? 条件を満たすかどうかチェックする手段がないのに、その条件を仕様とするのは無意味ではないですか? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-luqG) [sage] 2018/04/26(木) 19:59:02.73:P0bCzIha0 たくさん存在する。 インクルードする前後のマクロ定義によって挙動を切り替えて使うようなものもある。 基本としては宣言というか、別のコンパイル単位にある関数などのインターフェイスを取り込むために使うものなんだけど、 アクロバティックな使い方をしてるものはそれなりに多いよ。 : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/26(木) 20:06:45.74:OZbR3XDf0 プリプロでループを実現するには再帰includeは欠かせないからな : デフォルトの名無しさん (ワッチョイ db9f-Q5hi) [sage] 2018/04/26(木) 20:08:29.05:CbHb+b7U0 むしろそっちのほうに、 二重インクルード可能みたいな宣言を用意してほしいわ : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/26(木) 20:24:45.91:HtO+dzj70 マジで言ってるんなら死ね。 俺の意見は、 ・#pragma once は現行のインクルードガードと同じ方向に仕様化すべき であって、実際これで文句が出ることはないし、妥当だろ。 つかお前、を理解してるか? : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 20:34:58.75:JC9sZU4oa 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)); } : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/26(木) 20:36:08.64:OZbR3XDf0 #include "/dev/tty" も知らない雑魚はもう黙ってろよ : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 20:37:18.41:JC9sZU4oa の関数は、再帰的な関数です。 その再帰的な関数内で static な配列を利用したいのですが、動的に確保した 領域を解放するにはどうすればいいのでしょうか? 再帰的な関数なので単純に関数の最後で解放するというわけにはいかないので 困っています。 : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 20:39:18.48:JC9sZU4oa 動的計画法で配列に計算結果を記録しておき利用したいんです。 なので static にしています。 : ◆QZaw55cn4c (ワッチョイ 5360-c97c) [sage] 2018/04/26(木) 20:39:31.36:y22H8Uhx0 わけて考えてみますね インクルードガードはプリプロセッサ名前空間内の一つのプリプロ識別子を犠牲にして、機能させようとしているわけですよね #progma once が犠牲にする**べき**ものは何でしょうか? : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 20:40:15.50:JC9sZU4oa の関数はまだ書きかけなので、計算結果を記録した配列の値はまだ利用していません。 : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/26(木) 20:43:55.37:OZbR3XDf0 > lengthTableのポインタ値をなんとかしてグローバル変数に持ち出してatexitに登録するか 最初からそのグローバル変数でnewするか どうせプログラム終了時にヒープ丸ごと消えるんだから放置するか 一から書き直すかの4択 : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 20:45:16.69:JC9sZU4oa あ、すみません。 なんかおかしなことを書いてしまいました。 : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 20:53:11.22:JC9sZU4oa ありがとうございました。 すみません。質問がちょっとおかしかったので、質問を代えさせていただきます。 ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか? 考えているのは、関数 func でそのグローバル変数のような変数 a を宣言する。 func 内で呼び出している再帰関数 rec_func 内でのみそのグローバル変数のような 変数 a を利用したい。グローバル変数のような変数なので、 rec_func の引数として a を渡す必要はない。 : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 20:57:03.80:JC9sZU4oa 何度も呼び出される再帰関数に引数として同じ変数を渡し続けるのはなんか 無駄なことをしているように思われたので質問しました。 本を読むとグローバル変数は使うなと書いてあるので質問しました。 : デフォルトの名無しさん (アウアウウー Sa45-luqG) [sage] 2018/04/26(木) 21:01:32.17:JC9sZU4oa でいう変数 a の代わりに、クラスを作って、メンバ変数を利用すればいいですかね? rec_func はメンバ関数にすればいいですかね? : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 21:03:04.18:JC9sZU4oa でも、そのためだけにクラスを作るというのもなんだかな―という感じがします。 : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/26(木) 21:06:11.37:HtO+dzj70 一応添削しておくと、 > 今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない** × 同じ実体かどうか、を決める方法は ○ 同じ実体かどうか、をパス等で決める方法は ただし俺はそもそも「中身」を見て確認すべきで、同じ実体だったら云々、という話はしてない。 cp A.h B.h の場合にインクルードガードでBを弾くとして、 当然Bは「ファイルとしては」「読み込まれ」、「コンパイル対象としては」「読み込まれない」だろ。 #pragma once はインクルードガードの自動版なんだから、インクルードガードと同じ仕様でいいんだよ。 そして逆に、実体が異なっていてもこの場合はインクルードガードは利くのだから、#pragma once も利くべきなんだよ。 ファイルパスでの識別ではこれは実現不可能だろ。 意味不明。何も犠牲にするべき物は無いと思うが。 というかな、規格化するなら方向は自明で、 ・#pragma once はインクルードガードの代わりに使われているのだから、 現行のインクルードガードを機械的に #pragma once に置き換えして問題ないように仕様化すべき でしかないだろ。これで誰も文句ないと思うが。 : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/26(木) 21:07:21.99:OZbR3XDf0 の心配があるんだったらクラスにしたって裏でthis渡すようになるだけだから一緒よ ポインタ渡すコストが気になるならグローバル変数にするしかない のコードのままなら末尾再帰の最適化かかるだろうから問題にならんと思うけどな : デフォルトの名無しさん (アウアウウー Sa45-luqG) [] 2018/04/26(木) 21:07:30.49:JC9sZU4oa クラスを作ってそのプライベートなメンバ変数を、 ある関数内でのみ利用できるグローバル変数の ような変数として使うというのは邪道でしょうか? : デフォルトの名無しさん (アウアウウー Sa45-luqG) [sage] 2018/04/26(木) 21:08:37.69:JC9sZU4oa ありがとうございました。 : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/26(木) 21:51:10.65:HtO+dzj70 > ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか? 見た目だけの話ならラムダでキャプチャすればいい。(クロージャ) ただ、今気づいたが、C++のラムダって名前付けられないから再帰できないね。 変数の直接呼び出しも試してみたが、以下は通らない。 auto f = [](int x) {return x? x+f(x-1) : x;}; なんでこんな糞仕様にしたんだ? JavaScriptも当初はそうだったが、不便だったので名前が付けられるように変更した。 この変更を知ってて無視してるのなら頭おかしいし、 知らないのなら不勉強だし。(言語仕様に携わる奴は他言語の動向も見ておくべき) 名前を付けられて悪いことはないし、技術的に不可能って事も無いと思うが。 : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 22:07:02.86:IAeApo/t0 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文字列の解釈をまさか知らんのか? : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/26(木) 22:34:27.88:4xU9Va0kM 反論されてぐうの音もでないのかよ 5チャンは初めてか? w : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 22:35:24.34:IAeApo/t0 全文そのまま返すわ : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/26(木) 22:41:09.16:EM3O7qLA0 同じファイル 同じ中身 大きく分けて2種類あり、 それぞれ、同じの定義の詳細は色々と考えられる : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/26(木) 22:45:45.22:4xU9Va0kM > ID:4xU9Va0kM=ID:HtO+dzj70 勝手にアホな認定するんじゃねーよ そもそも俺はハードリンクとかのファイルシステム依存の話は処理系依存にした方がいいって思う : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/26(木) 22:46:56.42:4xU9Va0kM 人を嘘つき呼ばわりして謝ることもできない奴がなに言ってるんだよ w : デフォルトの名無しさん (ワッチョイ 1961-luqG) [sage] 2018/04/26(木) 23:09:17.34:IAeApo/t0 効いてる効いてるw 嘘つき呼ばわりじゃなく嘘つきという真実を指摘されてファビョーンかよ おまえは考察自体を放棄した この事実はどうにもならない : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/26(木) 23:12:02.64:HtO+dzj70 自己レス。 すいません出来ました。以下通ります。autoは無理のようです。 std::function<int (int)> f = [&f](int x) {return x? x+f(x-1) : x;}; 見た目だけなら、上記のようにラムダで再帰すれば書ける。 : デフォルトの名無しさん (ワッチョイ 5b7f-jvcw) [sage] 2018/04/26(木) 23:58:27.23:DklDUzVR0 またいつもの奴が暴れてるのか 相変わらず不毛な話してるな : デフォルトの名無しさん (ワッチョイ 5b7f-jvcw) [sage] 2018/04/26(木) 23:59:44.22:DklDUzVR0 それで結局#pragma onceが採用されてこなかった理由はなんなん? : デフォルトの名無しさん (ワッチョイ 9334-WSc7) [sage] 2018/04/27(金) 00:09:03.41:vLs/1v3E0 所詮 pragma だから この部分は処理系依存が強く出るので : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/27(金) 00:18:29.43:nldsEJyI0 にまともな反論してから出直してこい w : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/27(金) 00:25:32.85:ledFfOHm0 ttps://stackoverflow.com/questions/23696115/is-pragma-once-part-of-the-c11-standard ttps://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/YG76sfDJ4f8 ttp://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0538r0.html #pragma onceについて語りたい奴は必ず先に目を通すように じゃないと上で騒いでる馬鹿みたいになっちゃうからな : デフォルトの名無しさん [] 2018/04/27(金) 06:18:50.95 MSアレルギー : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/27(金) 06:26:34.10:mlVlMuXl0 反論とは論に対して反駁することをいう おまえは論を示していない 結果に至る思考過程をすっ飛ばしている おまえこそ日本語を憶えてから出直して来い もう一度言う、反論とは論に反駁することだ : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/27(金) 06:41:55.40:O6TOHWbPM まともに反論できないことはよくわかったよ w 事実を書いてあるだけで思考過程なんて関係ない : デフォルトの名無しさん (ブーイモ MM85-MzrX) [sage] 2018/04/27(金) 06:51:10.76:fIiVOejaM 天啓が下ったぞ! : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/27(金) 07:38:07.75:ledFfOHm0 事実ってなんだよ 「アホは切り捨てろ!」とかいう標準規格として最低最悪の解決策を取れっていうのはお前のクソみたいな「意見」だろうが お前の意見は必ず自動的に実現して事実になるの?神なの? : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/27(金) 08:05:14.16:O6TOHWbPM そういう意見を書いてあると言う「事実」な マジで理解力無さすぎ w : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/27(金) 10:03:10.93:mlVlMuXl0 それは違う 何からどう演繹した結果なのかを示さねば戯れ言に等しい 戯れ言でよければ過程は伏せたままでいいぜ どーせそんなもんバカにはねえだろうがな : デフォルトの名無しさん (スッップ Sdb3-UHm4) [sage] 2018/04/27(金) 10:58:06.07:COWnkDW0d じゃあ俺も、お前はここに二度と来ないでに全財産を福島と熊本に寄付した上で家族もろとも自殺するべきであると意見するわ こういう意見を書いてあるという事実に反論できなければお前の負けな : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/27(金) 12:28:04.63:O6TOHWbPM お前が何を言ってもに書いた「無視」と言う文言を理解できなかったがいたと言う事実は変わらない しかも誤魔化すために話そらそうと必死ながいた事実も変わらない 別に意見を言うのはいいんじゃね? それに何の意味があるのか知らんけど w : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/27(金) 12:30:27.46:Mg+ERRyAd いつまでやるの? : デフォルトの名無しさん (スッップ Sdb3-UHm4) [sage] 2018/04/27(金) 12:42:19.37:COWnkDW0d C/C++の規格はgets()とかいうアホな使い方しか出来ないアホ関数を30年も削除出来なかったくらいアホに気長に付き合う規格なんだよ 広く使われ続ける規格の宿命としてその方針は変えられない だからお前の言うようなアホを無視して切り捨てるという選択肢が採用されることはないという事でこの話終わりな : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/27(金) 14:52:44.93:mlVlMuXl0 もう一度言う 提示してねえだろ、おまえは無視つったんだよ 人をアホよばわりしようと焦るあまり 論議そのものを粗末に扱ったのが おまえの運の尽きだ そこでどんなに暴れようが おまえは何も論じていない よって論に反駁してもらえることもない ましてや事実に反駁というシュールなことをする者もいない : デフォルトの名無しさん (ワッチョイ b37e-aD0S) [sage] 2018/04/27(金) 16:36:21.86:j5Ya8YmN0 アホではないから残しているのでは : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/27(金) 18:27:57.39:O6TOHWbPM マジで言ってるの? gets() なんてアホには使えない関数の典型だろ バッファーオーバーフローはプログラマーの責任 って言う言語だぞ w : 850 (オッペケ Sr0d-OwZ7) [sage] 2018/04/27(金) 18:31:51.94:Q1GjkYeyr 言葉尻を捕まえて悪いが、クラスや関数を作ることをそう大仰に捕らえることはない。 単純な機能のクラスや関数など幾らでもある。 : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/04/27(金) 18:33:12.92:O6TOHWbPM を読み直せ 無視するのは誰で誰を無視するのかを答えてみ まあ恥ずかしすぎて答えられないだろうからまた明後日の話に逸らそうとするんだろうけど w : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/27(金) 19:01:47.01:mlVlMuXl0 読み直して欲しいのかよ お願いしろよ 読み直してやるかも知んねーからw : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/27(金) 20:31:10.54:nldsEJyI0 はい、基地害乙 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-L0fA) [sage] 2018/04/27(金) 20:33:29.96:HF3+Vuoyd りかいできないならからんでくるなよダブリュー 「アホなりようしゃはあいてにしない(イコールむしする)」っていうしようを「ていじ」してるってはなしだ、ボケ : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/27(金) 20:46:16.80:mctUhDKod よくわからんが、糞コテの自演てこと? : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/27(金) 23:50:18.78:mp1hh4hd0 C/C++は池沼お断りの言語なんだから、このスレも同じノリでいいと思うぞ。 指摘しても理解できないのは、日本語が出来ない=池沼だから。 慣れる慣れない以前の問題だ。 : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 06:20:59.27:BHnoJcFn0 ていうか#pragma once規格化不能論者が言い立てる不可能ケースは (1) #ifdef〜#endifインクル〜ドガ〜ドでも曖昧さが残り処理系依存になるケース (2) #pragma onceで自動的にガード条件を設定する際の困難(#ifdef 〜の記号をうまい具合に考え出すことに相当 (3) #ifdef〜#endifインクル〜ドガ〜ドにおける既存のアクロバティックな使い方への対応( (4) #pragma onceで想定されるアクロバティックな使い方の解釈( のn種類しかない (1)は#pragma once固有の問題ではないから、#pragma once規格化の障害とは言えない ハードリンクとかの件でここまで費やされた長い紙数はムダすぐる… (2)と(3)は、#pragma onceが力量不足ならそのケースだけいつでも#ifdef〜#endifインクル〜ドガ〜ドに戻ることができる プリプロセッサの基本特性まで変えようというのではないのだから… (4)はエラーにすればよい #pragma onceの解釈を単純な#ifdef〜#endifインクル〜ドガ〜ドの置き換えと限定するなら可能なはずや いままで20数年にわたって規格化委員会で話題に上りながら規格化されないのは、 この件の抜本的な技術である「モジュール」の規格化が控えていると全員が錯誤していること、これにつきるだろうJK : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 06:57:19.27:ibkTuaSK0 とりあえず、 #pragma onceの仕様を文章にしてみて そんなに簡単じゃないから : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 07:52:46.94:BHnoJcFn0 ■ #pragma onceの俺様仕様 (ヘッダファイルの集合の規定) 1. インクルードされるヘッダファイルを#pragma once付きとそれ以外とする。 ただし、次のいずれかに該当する場合はエラーとする(ヘッダファイルに含めない) (1) #pragma onceがコメントを除くファイル先頭に現れた場合 (2) #pragma onceがコメントを除くファイル先頭に現れ、かつ ファイル内の#if〜#endifの入れ子がファイル内で完結しない (ヘッダファイルの識別) 2. #pragma once付きのヘッダファイル同士は、ファイル名で識別する。(ディレクトリパスは無視) (ヘッダファイルの展開) 3. #pragma once付きのヘッダファイルのうち、上記2の規則により同一と判定されるファイルは 単一のコンパイルの中で、2回目以降の展開を無視する。 4. #pragma once付きでないヘッダファイルの展開は現行どおりとする。 いじょ : デフォルトの名無しさん [] 2018/04/28(土) 07:55:01.29 #pragma onceってファイル先頭に置くものだと思ってた ファイル末尾とかにおけばいいの? : デフォルトの名無しさん (ブーイモ MMf5-EDrg) [sage] 2018/04/28(土) 07:56:19.92:zm4OWgENM ソフトウェアが巨大化してくると、サブモジュールが各々同一のSDKを抱えてるなんてことがある。 複数のサブモジュールを読み込んでるソースコードは間接的に同一ヘッダを読み込む可能性があるが、 cvs等が異なるidを埋め込んでいたり、それぞれ微妙にバージョンが異なっていたり、エンコーディングや改行コードが異なっていたりする場合、 Includeガードならビルドできるが、pragma onceだと同一ヘッダを異なるファイルと認識してしまい、エラーになってしまったので、サブモジュールを全て自前で修正する羽目になった。 なんてことがあるかもしれない。 結局ヒューリスティックな実装しかないんでないの? : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 07:57:50.65:BHnoJcFn0 訂正; 誤: (1) #pragma onceがコメントを除くファイル先頭に現れた場合 正: (1) #pragma onceがコメントを除くファイル先頭以外に現れた場合 : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 07:58:55.91:BHnoJcFn0 の仕様によるヘッダファイルの展開のどこにヒューリスティック要素があるのかkwsk、 : デフォルトの名無しさん (ブーイモ MMf5-EDrg) [sage] 2018/04/28(土) 08:04:07.12:zm4OWgENM >ファイル名で識別 過去遺産をすっぱり切り捨てる斬新な発想に目から鱗 : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 08:05:18.62:BHnoJcFn0 藻前はの仕様の項番4を理解していない 出直せ : デフォルトの名無しさん (ブーイモ MMf5-EDrg) [sage] 2018/04/28(土) 08:15:15.14:zm4OWgENM 今後ヘッダファイル名にはドメイン名を頭につけなきゃいけないね。 メアドでもいいかな? : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/28(土) 08:20:58.21:amQJLuCm0 適当な処理系の言語リファレンス見ればいいだけ そんなに難しくはないぞ : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/28(土) 08:24:01.11:WRqkde3l0 420が提起した問題に答えろ kwskはそれからだ : デフォルトの名無しさん [] 2018/04/28(土) 08:33:55.15 是非は置いといて、ファイル名で識別するって書いてあるじゃん 文盲なの? : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/28(土) 09:13:26.88:clK1o5V+0 つまりfooSDK/interface.hとbarSDK/interface.hは同一として判定するんだな たいへんだー : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/28(土) 09:22:50.78:WRqkde3l0 結論を急ぐあまり考察が浅くなりすぎだな : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 09:23:37.16:ibkTuaSK0 #pragma onceの前に改行があったらエラーですかwww : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/28(土) 09:27:57.75:amQJLuCm0 それ単に管理がなってないだけだろ どのバージョンのヘッダーを読み込むかを管理できてないとか怖すぎる : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/28(土) 09:34:33.18:WRqkde3l0 どう管理しろと? 混用しているライブラリに偶然同じファイル名があって どちらもインクルードガードされているということを 「管理」で回避できるのか? : デフォルトの名無しさん (ブーイモ MMf5-EDrg) [sage] 2018/04/28(土) 09:42:57.08:zm4OWgENM えー、cvs keywordはどうするのー? サブモジュールを格納してたリポジトリ毎に値が異なるよ? 自動的に改行コードを修正してくれるリポジトリの場合はー? : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 09:45:12.10:ibkTuaSK0 まずは世の中のプリプロセッサのpragma onceの仕様がどうなっているかを調べるべきかと : デフォルトの名無しさん (ワッチョイ 2be8-A9Qv) [sage] 2018/04/28(土) 09:54:13.99:EXYGb8MJ0 具体的な話になったら一気にレベル下がったなw : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/28(土) 10:21:03.59:amQJLuCm0 話の流れを理解せずに無駄に絡んでくるなよ... インクルードガードならとりあえずビルドできるって言う話だぞ 同一のSDKなんだから同一のものを指すようにすればいいだけだろ : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 10:24:05.76:ibkTuaSK0 目的は インクルードのループを防ぎたいのと 同じ定義を複数回行うことでエラーになるのを防ぎたい ってことだよな これをインテリジェントに行ってくれるのが理想 インテリジェントな物を仕様にするのは難しいし、 時代が進めばインテリジェント具合も変わる みたいなあまりにショボい仕様だと 後々不満が出ることになる : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/28(土) 10:28:01.67:WRqkde3l0 答えになってないぞ 今 #pragma once について話しているよな インクルードガードを #pragma once でやっていたらどうなんだ : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 10:28:57.76:BHnoJcFn0 現行のヘッダファイルでうまく行っているのならそのままでええ(項番4はそのためにある そうではなくて、もしも(例えば)マイクロソフトのVisual C++の#pragma onceを使って書かれた過去の遺産の尊重が大事なら そのときはの方の#pragma onceを#pragma once2とかに代えれば良いが そりゃー(例えば)マイクロソフトのVisual C++の#pragma onceが先行して規格になった後の話なので今は無視 >417からの流れと考え合わせるに、 「僕ちゃんの考えた理想の#pragma onceじゃないと嫌なの!!!>418のクソ単純な仕様は正しくとも認められん!!!」ってことですかそうですか… なおの指摘は評価する 抽象的な言い回しで無意味に高尚な議論に見せかけている連中の方が多数派 空っぽなのに… : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 10:29:34.95:ibkTuaSK0 当然互換性の問題もある 今まで動いていたものが正しく動かなくなるのであれば支持されない だからも非常に重要 : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 10:33:35.22:BHnoJcFn0 時間差だったかもしれんがの最初のパラグラフ参照 存在しない規格との互換性の問題を喚かないでいただきたい、というのはあるが 回避策も示しているのだからオール無問題 : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 10:33:47.48:ibkTuaSK0 の例で 2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな 中身が全く同じであれば防ぎたいし 全く別の定義であればそれそれぞれをインクルードしたい : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 10:35:03.59:ibkTuaSK0 #pragma onceの仕様はVisual C++しか実装してないと思ってる? : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/28(土) 10:38:47.00:BHnoJcFn0 >2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな ああの脳内にはそういう要求もあるんですねわかります その場合は項番4でドゾー 藻前らの単純さをバカにするが藻前らの論理展開のアレっぷりも相当なもんやぞ… : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/04/28(土) 10:42:05.24:ibkTuaSK0 いずれにしろみたいなチープな仕様じゃ誰にも支持されない : デフォルトの名無しさん (ワッチョイ d3c3-luqG) [sage] 2018/04/28(土) 10:45:00.58:WRqkde3l0 ツッコミ殺到でボコボコなのに勝利宣言してやがるな つっこんだ人たち(ここのほぼ全員)にバレバレなのに滑稽な : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/28(土) 11:10:27.31:ueAKslGb0 ,421はミニマムの仕様を提示しただけで、つまり、 この仕様で問題ない場合は #pragma once で手抜きが出来て、 無理な場合は従来通りインクルードガード使えってことだろ。 俺はありだと思うぜ。仕様ってのはこういう割り切り方をしないと決まらない。 C++のラムダなんて後付で仕様を拡張して行っているし。(このやり方がいいとは思わないが) ただ、この仕様だと現行の #pragma once よりも割り切っているのがイマイチで、 「今」この仕様では却下されるだろう。 「#pragma once が全くない世界」なら、とりあえずここから出発するのもありだっただろう。 現行の #pragma once は常識的に考えて、 ・ファイル実体が同じ場合(ハードリンク/シンボリックリンク)は対応可能 ・コピーの場合(ローカルに xxx.h を tmp_xxx.h にしてデバッグ出力を改変したり)には対応不能 だろう。だから使用条件としては、 ・全ファイルがローカルファイルシステム上にあり、ヘッダファイルの改変は行わない であり、普通に個人レベルで開発する場合はこれで全く問題ないし、妥当だ。 会社で10-20人レベルで開発する場合、どのみちルールを子細に決めることになるし、 そういう場合は従来のインクルードガードでやれ、という割り切りも妥当だよ。 : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/28(土) 11:11:35.35:ueAKslGb0 なお俺が推す仕様は、 ・#pragma once のファイル内では複数定義のエラーを無視する というものだ。従って、 ・現行の#pragma once とは違い、対象ファイルは必ず「ファイルとしては」「読み込まれる」 (これは現行のインクルードガードとも同じ) ・定義されている物のシグネチャが既に存在するものと全く同一だった場合、無視する。 ・シグネチャが異なっている場合、普通に読み込む(コンパイル対象とする) (勝手にデバッグ関数を追加されていた場合、その関数だけはコンパイルされる) ・#pragma once のファイルを全部パースし終わった際、「全部重複」「全部新規」ではなかった場合、警告を出す。 (正しく使えば「全部重複」「全部新規」のどちらかになる。 改変《追加》した場合は「一部新規」となり、警告にする。「一部欠落」は検知しない。) というものだ。 この場合、要するに「読み込んで同じだったら無視」なので、 #ifdef 内等、かなりアクロバティックに使われても、問題なく、使用者の直感通りに動作する。 改行の追加、コメント変更等は全く問題ない。 ただし常に全部のファイルを読み込み、初段階のパースは行うことになるので、 現行の #pragma once やインクルードガードよりは速度は劣る。 とはいえ、今更ここが問題になる時代ではないし、問題になるようならインクルードガードを使えと割り切る。 つまり、面倒なら #include を使わずに、全部 #pragma once にも出来る、というもので、 実際これで問題無いと思うんだがな。 : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/28(土) 11:15:31.75:aIENMcPWd もう書かなくて良いよ アホだってこはみんなわかったから : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/28(土) 11:18:31.52:aIENMcPWd ヒント インクルードループ : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/28(土) 11:22:35.75:aIENMcPWd インクルードのネストがn段 それぞれの段、m個のインクルードファイルからm個インクルードしてるとします 何パス必要でしょう : デフォルトの名無しさん (ワッチョイ d9f2-luqG) [sage] 2018/04/28(土) 12:14:39.04:wZlaoeXA0 >(ディレクトリパスは無視) 現行の#pragma onceでこんな実装になってる処理系あるかなぁ : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/28(土) 12:22:28.92:amQJLuCm0 日本語で桶 : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/28(土) 12:24:23.32:amQJLuCm0 , > みたいなあまりにショボい仕様だと > 後々不満が出ることになる でも具体的には指摘できない ってか w : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/28(土) 12:26:40.87:aIENMcPWd 具体的にたくさんあがってるのが見えないのかな : デフォルトの名無しさん (ワッチョイ c1b3-luqG) [sage] 2018/04/28(土) 12:51:19.85:NasUyYi90 プリプロセッサが諸悪の根源 : デフォルトの名無しさん (ワッチョイ c1b3-luqG) [sage] 2018/04/28(土) 12:51:48.61:NasUyYi90 #define多いと読む気しない : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/04/28(土) 13:09:32.49:amQJLuCm0 レス番も引用もできないクズ乙 w : デフォルトの名無しさん (ワッチョイ 9391-/P+7) [] 2018/04/28(土) 14:18:44.28:0IOpQOT30 static変数(クラスのインスタンス)がプログラム実行時にそのメンバ関数呼び出し時にその中で、 newをすると既存のヒープ領域を破壊することはありますか? どうもこのように解釈できる現象が起きているようなのですが、調べても分からずアドバイスを頂ければ幸いです。 環境はMacのHighSierra、コンパイラはbrewから持ってきたLLVMです。 : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/28(土) 16:33:32.77:ueAKslGb0 99%以上の確率であなたのバグです。 1行目の意味はよく分かりませんが。 : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/28(土) 16:51:34.89:ueAKslGb0 ああすまん、何となく1行目の意味は分かった。 ・クラスインスタンスをstatic変数に入れ、そのメソッドを呼んだ 事をそう表現したのかな? だったらはっきり言ってstatic云々関係ない。 GCなんて無いから「statc変数に入れたら忘れてGCされてしまう」みたいなことはそもそも無い。 ヒープを壊しているのはユーザーです。つーか、ランタイムもないし。 ガチでコンパイラのバグだと思っているのなら、 どのみち再現コード(その場合は20行程度か)を作るしかない。 その過程で君のバグだと気づけるだろうさ。 ただこのように「下から」デバッグをするのは時間がかかるから、俺は嫌いだけど、 君がそう思うのならやるしかない。 C/C++は広く長く使われて来ている言語だから、 現在もバリバリに使われているコンパイラなら、この辺の基本的な部分にバグは無いと思うよ。 static変数に確保するのはマイナーかもしれないが、滅多にやらないってほどではないし、 そもそも上記の通り、コンパイラにとって危険のある(バグに命中する可能性のある)使い方でもない。 : デフォルトの名無しさん (ワッチョイ 93e7-R5Nf) [sage] 2018/04/28(土) 16:59:13.74:9z8isRDe0 破壊って何? : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/28(土) 17:20:06.35:aIENMcPWd ふつうに、 クラスのインスタンスがstatic宣言と読んだけだ static MyClass a; スコープローカルかファイルローカルかはわからん : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/28(土) 17:29:35.84:ueAKslGb0 日本語でおk お前は半島に帰れ それでお前は何パスだと思うのさ? 予言してやる。お前は言えない。 なぜならお前は馬鹿であり、それがばれるのが怖いから。 : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/28(土) 17:46:24.07:aIENMcPWd おれは数学の専門家だぞ わからないわけがない : デフォルトの名無しさん (スップ Sdb3-LNFl) [sage] 2018/04/28(土) 17:46:53.04:aIENMcPWd なぜ問題を出したのか考えてみ : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/04/28(土) 18:39:11.84:ueAKslGb0 ひとまず俺の一つ目の予言は的中だな。 次に行こう。 ID:aIENMcPWd お前の日本語の間違いをすべて訂正してみろ。 2つ目の予言をする。お前は言えない。 なぜならお前はゴキブリ韓国人であり、間違いを認識できていないから。 : デフォルトの名無しさん (アウアウカー Sadd-YAdU) [sage] 2018/04/29(日) 02:23:46.17:UY96NiMha C++でプラットフォームに依存しない音楽再生ライブラリってある?特にlinuxで使いたいんだけど。 mpg123とかいうのもみてみたんだけどプログラムに組み込むやり方が分からない : デフォルトの名無しさん (ワッチョイ 9334-WSc7) [sage] 2018/04/29(日) 02:25:23.22:kTR2ZRC/0 MIDAS : デフォルトの名無しさん (ワッチョイ 59a7-BHYV) [sage] 2018/04/29(日) 07:28:51.71:riHNUW7H0 Gstreamer : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/29(日) 10:01:20.67:4Txko8z40 質問ですが Q1. 浮動小数点型について表現しえる最小の値(負の値のうちの絶対値が最大のやつ)を取得する 環境非依存なやり方はどうすれば良いの? -std::numeric_limits<double>::max()とか -DBL_MAX でおk? Q2. テンプレートを型引数が整数型と浮動小数点型で分けたいんですが 同じ名前のテンプレート名のまま、テンプレートの特殊化的な簡単に済ませる方法は無い? : デフォルトの名無しさん (ワッチョイ 8133-d4kB) [sage] 2018/04/29(日) 10:55:07.91:6B047Ccs0 >Q2 template <typename T, bool = std::is_floating_point<T>::value> struct hoge {}; template <typename T> struct hoge<T, true> {}; : デフォルトの名無しさん (ワッチョイ 73a5-luqG) [sage] 2018/04/29(日) 11:05:23.85:iHQcqnOH0 >Q2. こういう事? ttps://ideone.com/oWzlMP : デフォルトの名無しさん (ワッチョイ 13a2-luqG) [sage] 2018/04/29(日) 13:22:08.35:WuAwAiPA0 std::numeric_limits<double>::lowest() : デフォルトの名無しさん (ワッチョイ 93bd-Mk12) [sage] 2018/04/29(日) 13:56:48.76:4Txko8z40 まりがとうございます すばらっし 言葉足らずでスマンカッタorz 具体的型名で特殊化する普通の特殊化ではfloatとdoubleのそれぞれについて特殊化した定義を与えねばならないので みたいなやつを求めていたのです!ヽ(>∀<)ノ!!!111!1! : デフォルトの名無しさん (スップ Sdf3-LNFl) [sage] 2018/04/29(日) 15:24:36.24:AQKaesvCd たまにはlong doubleも思い出してあげてください : デフォルトの名無しさん (ワイモマー MMb3-XMtE) [sage] 2018/04/30(月) 23:11:41.90:xhvNrk1GM Boost.Optionalを使う際に、 対象クラスが自分自身の有効無効を変更できるようにしようとしてみたところ、 宣言時に宣言対象を引数にとって初期化できることに気づきました。 変数の引数に変数自身を使うのは仕様的にありなのでしょうか? ttps://wandbox.org/permlink/YLKYol7KdEOhpyGU : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/04/30(月) 23:32:18.45:9aMn2TSu0 ポインタか参照なら問題ない 中身は使えない : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/01(火) 23:40:40.03:dOOCYV+Z0 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) : デフォルトの名無しさん (ワッチョイ 93eb-Kx3O) [sage] 2018/05/01(火) 23:49:10.85:+P0DkpYu0 unique_ptr使うべき : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/05/01(火) 23:54:52.50:2ADD+YWD0 今時newなんかを自分で書いてることに疑問を持ったほうがいい : デフォルトの名無しさん (ワッチョイ 419f-TsVf) [sage] 2018/05/01(火) 23:55:37.66:b3AAvo5J0 お行儀の次元の話じゃない : デフォルトの名無しさん (ワッチョイ 4150-LNFl) [sage] 2018/05/02(水) 00:01:31.48:LLl+2Gg10 手っ取り早く動かしたいその場限りのコードならそういうことをやることもある くらいかな : デフォルトの名無しさん (ワッチョイ 2b81-0GBF) [sage] 2018/05/02(水) 00:09:49.83:HN9ze8O60 ビンラディン並みのテロリストだな : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/02(水) 00:09:55.64:MK7npuGj0 そんなにお行儀悪いんでつか(´;ω;`)・・・ : デフォルトの名無しさん (ワッチョイ 5be7-3HeQ) [sage] 2018/05/02(水) 00:43:03.85:VeqNn1690 そういうのやりたいならJavaやC#やれ : デフォルトの名無しさん (ワッチョイ 9334-WSc7) [sage] 2018/05/02(水) 01:21:31.16:9riosu0F0 ポインタじゃないものにnewしたもの格納できるとでも思っているのかジャバグラマ上がりのトーシロー : デフォルトの名無しさん (ワッチョイ db9b-zfJY) [sage] 2018/05/02(水) 01:32:41.73:G9KSYPOz0 なんでdeleteしなくていいと思ったんや : デフォルトの名無しさん (ワッチョイ 2b81-0GBF) [sage] 2018/05/02(水) 01:39:46.98:HN9ze8O60 釣りだと思う : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/02(水) 03:44:38.96:MK7npuGj0 deleteしてからnewすることにします・・・ こうでしたorz CObject* obj; : デフォルトの名無しさん (ワッチョイ 93b3-tYAq) [sage] 2018/05/02(水) 06:00:07.99:3K4Hzh4Z0 C++的には for(i=0; i<N; i++) { CObject obj; ・・・(処理)・・・ } でいいんじゃね : デフォルトの名無しさん (ワッチョイ 8133-M5g1) [sage] 2018/05/02(水) 10:02:54.88:EfCiDMro0 大規模なコードで大量にオブジェクト生成するならアリだと思うけど その場合もnewしたものをdeleteするための仕組みは必須だしね 追跡できなくなる、もしくは自分で自分を破棄する仕組みも無いようではダメ : デフォルトの名無しさん (ワッチョイ c1b3-luqG) [sage] 2018/05/02(水) 11:01:41.50:lsKTgXIy0 ライブラリに分ける利点ってなんですかね : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/02(水) 14:44:29.23:MK7npuGj0 クラスのメンバ変数に他のクラスインスタンスを召喚するときとか コンストラクタでnewしてやらないといけないと思うの : デフォルトの名無しさん (ワッチョイ db9b-zfJY) [sage] 2018/05/02(水) 14:47:38.93:G9KSYPOz0 複数のプロジェクトで使いまわせる スマポ(かコンテナ)で大体のnewは回避できる そのケースも回避できる : デフォルトの名無しさん [] 2018/05/02(水) 15:02:47.22 別にnewしなくてもよくね? なんかサンプル出してみ? new無くしてやっから : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/02(水) 16:18:42.29:MK7npuGj0 class CTest { CFoo cfoo; void CTest() { cfoo = new CFoo(); } }; こんなんとかどうでしょう : デフォルトの名無しさん (アウアウウー Sa45-M5g1) [sage] 2018/05/02(水) 16:23:28.41:BwUG32HZa class CTest { CFoo cfoo; void CTest(): cfoo() { } }; メンバ初期化子知らんのか : デフォルトの名無しさん (アウアウウー Sa45-luqG) [sage] 2018/05/02(水) 16:28:43.53:hqQx66t6a 山口メンバーも初期化できたらいいのに : デフォルトの名無しさん (ワッチョイ 9334-WSc7) [sage] 2018/05/02(水) 16:29:15.41:9riosu0F0 ヤバいなジャバ上がりw : デフォルトの名無しさん (アウアウウー Sa45-M5g1) [sage] 2018/05/02(水) 16:36:00.09:BwUG32HZa ちなみに非PODならメンバ初期化子に書かなくてもデフォルトコンストラクタで初期化子される : デフォルトの名無しさん [] 2018/05/02(水) 16:36:35.49 そもそもの例なら初期化子自体いらんしw : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/02(水) 17:10:02.19:MK7npuGj0 そ、そうやって初期化したcfooはdeleteしなくてもいいんでつか? : デフォルトの名無しさん (アウウィフ FF45-M5g1) [sage] 2018/05/02(水) 17:15:22.77:2RgXx2xAF 変数の寿命を理解してないのか? C/C++で変数の寿命を理解せずコード書くとメモリリークだらけになるから止めるか横着せず勉強するかしてくれ : デフォルトの名無しさん (ワッチョイ 9334-WSc7) [sage] 2018/05/02(水) 17:19:29.16:9riosu0F0 何言ってんだお前は そもそもdelete出来んだろ : デフォルトの名無しさん (ワッチョイ 318a-23pz) [sage] 2018/05/02(水) 17:35:57.58:EH+UkdGd0 教えてください やりたい事は ↓ ttps://stackoverflow.com/questions/14706954/how-to-override-the-text-displayed-for-a-property-in-the-propertygrid ここに出てるようなPropertyGridで、数値配列の値を16進で表示したい [0] 0x0001 [1] 0x0002 [2] 0x0003 .... 例えば↑とか、単にこれだけ そうとう調べまくったんだが、配列の例はみつけられなかった 配列でなければ、実装例は結構見つかるんだが・・・ 一見簡単そうなんだけど、俺のレベルでは不可能 : デフォルトの名無しさん (アウウィフ FF45-M5g1) [sage] 2018/05/02(水) 18:09:52.99:2RgXx2xAF それC++の質問なの? .NETのライブラリ(=>C++/CLI)じゃなくて? : デフォルトの名無しさん (ワッチョイ 318a-23pz) [sage] 2018/05/02(水) 18:25:45.38:EH+UkdGd0 いや、c# です : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-L0fA) [sage] 2018/05/02(水) 18:26:58.58:fs6yNkAId スレ違い : デフォルトの名無しさん (ワッチョイ 318a-23pz) [sage] 2018/05/02(水) 18:29:31.79:EH+UkdGd0 ごめん間違えた、ここ C++のスレだった 隣で聞きます。 : ◆QZaw55cn4c (ワッチョイ 5360-c97c) [sage] 2018/05/02(水) 18:52:21.12:R3g8E+PO0 delete しなくてもいいのです : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/02(水) 19:04:04.70:MK7npuGj0 み、みんな、親切にありがとう・・・ : デフォルトの名無しさん (オッペケ Sr0d-OwZ7) [sage] 2018/05/02(水) 19:06:49.69:U7aQES8cr 一度に作る分量が減るので間違えにくい 別々の人間が手分けして作れる : デフォルトの名無しさん (ドコグロ MMa3-tYAq) [sage] 2018/05/02(水) 20:14:18.27:sTDjib3HM そもそもはコンパイルエラー(もしくは警告)になるだろ... 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使えば良いだけだしね : デフォルトの名無しさん [] 2018/05/02(水) 23:29:42.51 どうせの CFoo cfoo; はこれまた CFoo *cfoo; のつもりだったんだろう とりあえずの形にすればnewはなくせる ポインタを保持したい場合も生ポインタはやめたほうがいいね : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-luqG) [sage] 2018/05/02(水) 23:41:46.06:g0SlpjdS0 可能な限りスマートポインタを使え、そしてスマートポインタで駄目な場合はほとんどないってのはその通りなんだけど、 初心者が生ポインタをちゃんと理解したことのないままスマートポインタを使いこなせるとも思えぬ。 そこらへんはちゃんと分けて、今回の場合はまずは生ポインタを理解するという方向性で説明する場面じゃろ。 : デフォルトの名無しさん (ワッチョイ 9368-c97c) [sage] 2018/05/02(水) 23:47:44.17:MK7npuGj0 を仰ぎますm(_ _)m : デフォルトの名無しさん (ワッチョイ c6e7-PabT) [sage] 2018/05/03(木) 00:10:52.91:XlBZHwDZ0 もうスマポはスマポとして理解させたほうがいいような気がするけどな 下手な生ポの知識は初心者に有害だ : デフォルトの名無しさん (ワッチョイ bb65-f8tT) [sage] 2018/05/03(木) 01:53:27.71:OyWVOyw+0 ていうかコンストラクタだから返却値型いらんやん : デフォルトの名無しさん (ワッチョイ 1ae9-P8oq) [sage] 2018/05/03(木) 02:06:40.03:jt77zXjA0 ポインターをdeleteせずに扱う猛者がいると聞いて駆け付けてきた : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-XJxX) [sage] 2018/05/03(木) 02:41:54.13:HFudy7bE0 delete をしない戦略ってのは無くはないよ。 アプリケーションの起動時直後にガッと大量のメモリを必要として、 終了直前に全部解放するってパターンなら、 どうせプロセスの終了と一緒にリソースは回収されるのでわざわざメモリ解放の処理を入れる必要はない。 (C++ だとデストラクタは必ずしもメモリを解放するだけではないので注意が必要だが) だけどそういう戦略をとれるのはちゃんと理解した上で問題にならないことを確信できるだけの知識があってこそだわな。 というか、それ以上に、確保したのを解放しないのは「気持ち悪い」と感じる心が C/C++er にはある。 : デフォルトの名無しさん (スップ Sd4a-EqUg) [sage] 2018/05/03(木) 05:19:48.86:qNLpdLzsd 組み込みだとそもそも終了なんてものがなかったりする : デフォルトの名無しさん (ワッチョイ 6a22-XJxX) [sage] 2018/05/03(木) 20:37:30.17:giVWGYEy0 解放しないメモリをnewとか頭湧いてんのか : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-XJxX) [sage] 2018/05/03(木) 20:40:51.26:HFudy7bE0 あたまがあったまってるんだ。 : デフォルトの名無しさん (ブーイモ MMef-+yEv) [sage] 2018/05/03(木) 21:00:46.14:Nqnp2049M 確保済みメモリに対してのnewってあるよ : ◆QZaw55cn4c (ワッチョイ aa60-pRpi) [sage] 2018/05/03(木) 21:15:35.38:hvfEvXXP0 placement new の意味が今でもよくわかりません…どんなときに使うのかなあ… : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-AL4z) [sage] 2018/05/03(木) 21:18:01.47:RMsmDfZSd char buf[MAX_BUF]; new(buf) MY_STRUCT(1, 2, 3); : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-AL4z) [sage] 2018/05/03(木) 21:18:51.15:RMsmDfZSd char buf[sizeof(MY_STRUCT)]; new(buf) MY_STRUCT(1, 2, 3); : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-XJxX) [sage] 2018/05/03(木) 21:19:45.60:HFudy7bE0 VRAM みたいな特殊なメモリを C++ のオブジェクトに見せかけたい場合とか : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-AL4z) [sage] 2018/05/03(木) 21:20:25.98:RMsmDfZSd すでに確保したメモリーブロック上でコンストラクターを発動させる。 : デフォルトの名無しさん (ワッチョイ 0b33-f8tT) [sage] 2018/05/03(木) 21:23:27.91:IMqmw2mT0 組み込みとかゲーム機のような、最初に一気に確保する環境で使うんじゃないかね といっても確保済みのメモリに対して断片化しないように管理する仕組み作ったら、必然的にnew演算子もオーバーロードするだろうから結局placement new使わんかもしれんけど : デフォルトの名無しさん (ブーイモ MMc7-+yEv) [sage] 2018/05/04(金) 04:49:56.51:JszYn0L4M クラスを丸ごとDLL化するときにはnew系をオーバーロード しておかないと解放時にエラーになるべ。 ヒープはDLL単位にあるので集めておきたい場合はplacement使う : デフォルトの名無しさん (アウアウウー Sacf-a7mP) [] 2018/05/04(金) 11:44:28.56:8Ch7v1Nca unique_ptrの配列版でメモリの再確保を行いたい場合どのように行うのがベターですか? : デフォルトの名無しさん (スッップ Sdaa-EqUg) [sage] 2018/05/04(金) 11:50:52.58:Z8Fitafid 何に対してベター? : デフォルトの名無しさん (ドコグロ MM33-XUQH) [sage] 2018/05/04(金) 12:02:46.79:uwR6wCpjM unique_ptr::reset( ) じゃねーの? : デフォルトの名無しさん (ワッチョイ 8abd-3xiy) [sage] 2018/05/04(金) 15:25:56.64:xM/0IOG70 スマポ使うときは最初にnewするもんなんじゃ… : デフォルトの名無しさん (ワッチョイ ab7f-XJxX) [] 2018/05/04(金) 15:29:55.09:YqO5U4DS0 make_unique使ってね : デフォルトの名無しさん (ワッチョイ c6e7-PabT) [sage] 2018/05/04(金) 15:47:45.28:kp+zcI/10 配列伸ばしたいなら素直にvector使え : デフォルトの名無しさん (アウアウウー Sacf-XJxX) [sage] 2018/05/04(金) 22:00:12.15:VI6126jwa いろんな意味にとれるから質問の答えは未定義 : デフォルトの名無しさん (ワッチョイ 53b3-jSUp) [sage] 2018/05/05(土) 18:32:19.19:sJdk0i7H0 [][][] [[[ ] X_[[[ [] ][ [] ][][[[] : デフォルトの名無しさん (ワイモマー MMaa-UBB+) [sage] 2018/05/06(日) 13:23:46.73:z9ZCOpRGM 以下のように、派生クラスのメンバ関数で基底クラスのメンバ関数を呼ぶように 基底クラスが派生クラスに強制する方法はないでしょうか? ttps://wandbox.org/permlink/K4IHMYwOsutPQz3i : デフォルトの名無しさん (ワッチョイ c6e7-PabT) [sage] 2018/05/06(日) 14:01:54.85:f5coeozT0 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; } }; : デフォルトの名無しさん (ワッチョイ de22-XJxX) [sage] 2018/05/06(日) 14:08:44.77:1ubTl4pj0 NVIじゃね? ttps://wandbox.org/permlink/zjVuc2KjEPYsahYS : 542 (ワイモマー MMaa-UBB+) [sage] 2018/05/06(日) 14:59:52.15:z9ZCOpRGM レスありがとうございます。 NVIというのがあるのですね。 (大昔に勉強したような…しかし思い出せず) : デフォルトの名無しさん (ワッチョイ 8a34-FPGR) [sage] 2018/05/06(日) 15:57:13.38:Amh1VkyH0 大昔とかの問題じゃなくて基本だぞ : デフォルトの名無しさん (ブーイモ MMaa-Fq9a) [sage] 2018/05/06(日) 19:15:44.52:5lNukHv1M pure virtualなのに関数定義することなんてできたのか… f()とbase::f()は同じ関数なんだよね? : デフォルトの名無しさん (ワッチョイ 53b3-jSUp) [sage] 2018/05/06(日) 19:32:29.01:9CUhRDV/0 }]] [[《_["[[]]" 〈[]》》 [][][]0,1》》〈〉 [] } } "B,V,0%%%,*1BVLO,SASA1`}}//%\\0,1\"VL"\ : デフォルトの名無しさん (ワッチョイ 8ab3-XUQH) [sage] 2018/05/06(日) 19:37:26.47:hMxfhnzD0 俺も知らんかった... 規格上も正しいみたい ttps://cpplover.blogspot.jp/2013/11/blog-post_24.html : デフォルトの名無しさん (ワッチョイ 27d7-XJxX) [sage] 2018/05/07(月) 05:32:12.66:WYJ+W2Mc0 12行目のbase::f()はvirtualを抑止してpure virtualを呼び出す 13行目のf();は動的結合でchid::f()を呼び出す baseは抽象クラスでnew base{}できないので 13行目の動的結合がbase::f()を呼び出すということは起こりえない だからif(typeid(*this) != typeid(base))のようなチェックをしていない : デフォルトの名無しさん (ワッチョイ 0a68-pRpi) [sage] 2018/05/07(月) 22:52:31.63:JZ0Er0Nn0 ちょっと根本的な質問を。 C#が既に普及しているなかあえてC++に固執する理由ってある? : デフォルトの名無しさん (ワッチョイ 8a34-FPGR) [sage] 2018/05/07(月) 23:34:15.98:Xl7KiTHE0 MSのOSしか使わないなんちゃてPGならC#で十分じゃないの : デフォルトの名無しさん (スップ Sdaa-jqGN) [sage] 2018/05/08(火) 09:42:55.49:JvzvEXdEd mono/Xamarinはしんどいと言う事を知らない世界の内はいいんじゃない? 大体Win限定だとしても高速化するのにC++で書いたのをdllimportするだろう : デフォルトの名無しさん (ワッチョイ bf8a-+yEv) [sage] 2018/05/08(火) 10:29:13.38:EjLESs2X0 ざまりんが苦しい人は信仰が足りないのです 僕は信仰の自由を主張しますけどね : ◆QZaw55cn4c (ワッチョイ aa60-pRpi) [sage] 2018/05/08(火) 17:04:15.75:6aMWII0O0 余計な依存関係をかかえないのが嬉しいです : デフォルトの名無しさん [] 2018/05/09(水) 03:49:30.68 Boostとか使ってると余計な依存関係をかかえてしまうけどな C言語が一番 : デフォルトの名無しさん (スッップ Sdaa-EqUg) [sage] 2018/05/09(水) 10:07:16.66:Ajqxpjd7d 一番多くの環境で使えるのはC言語 RAMが数十バイトしかないような非常にチープな8bitマイコンでも使える : デフォルトの名無しさん (ワッチョイ 1e81-jSUp) [sage] 2018/05/09(水) 10:29:31.98:ZxmL37bf0 数十バイトだとスタック領域ももパンクしそう、厳しいのではないか? : デフォルトの名無しさん (ブーイモ MMaa-+yEv) [sage] 2018/05/09(水) 10:34:17.87:3kbM/2hPM 流石に盛り過ぎ : デフォルトの名無しさん (アウアウウー Sacf-jSUp) [sage] 2018/05/09(水) 10:54:36.47:7azCP7HQa 知らないで盛ってると言うのはどうかと 昔6ピンpicでc使ってたけどRAMは16バイトだった気がする : デフォルトの名無しさん (アウアウウー Sacf-jSUp) [sage] 2018/05/09(水) 11:01:43.78:7azCP7HQa 調べたら勘違いで自分の持ってたのはSRAM64バイトのpicだった : デフォルトの名無しさん (ブーイモ MMaa-+yEv) [sage] 2018/05/09(水) 11:58:05.29:3kbM/2hPM PIC12F609とかでもプログラム領域は1Kwあるけど 数十バイトしかない奴の型番教えてくれくれ : デフォルトの名無しさん (スッップ Sdaa-EqUg) [sage] 2018/05/09(水) 12:00:11.72:jousW3+sd PIC10F200はRAMが16バイトですね 制約は当然ありますがC言語で開発出来ます : デフォルトの名無しさん (アウアウウー Sacf-jSUp) [sage] 2018/05/09(水) 12:00:58.98:1NFscAG5a C++どころかCすらやってはいけないレベルだな 恥ずかしいやつ : デフォルトの名無しさん (アウアウウー Sacf-jSUp) [sage] 2018/05/09(水) 12:02:35.51:1NFscAG5a ROMとRAMの区別がつかない人がなんでこのスレにいるのか? : デフォルトの名無しさん (ブーイモ MMaa-+yEv) [sage] 2018/05/09(水) 12:04:25.14:3kbM/2hPM ハーバードアーキテクチャのデータメモリサイズだけ書くの 卑怯だと思うの。プログラムメモリは256ワードあるじゃん : デフォルトの名無しさん (アウアウウー Sacf-jSUp) [sage] 2018/05/09(水) 12:07:19.83:1NFscAG5a を受けての話だから そのチープなマイコンで開発にCが使えてる : デフォルトの名無しさん (ブーイモ MMaa-+yEv) [sage] 2018/05/09(水) 12:09:43.50:3kbM/2hPM だから盛り過ぎでしょ : デフォルトの名無しさん (アウアウウー Sacf-jSUp) [sage] 2018/05/09(水) 12:10:13.60:1NFscAG5a じゃあできないというのか? : デフォルトの名無しさん (ラクッペ MM33-vGoe) [sage] 2018/05/09(水) 12:45:08.73:e8iSV/lBM 競技プログラミングとかunity覚えるの面倒とか? : デフォルトの名無しさん (スップ Sd4a-EqUg) [sage] 2018/05/09(水) 13:09:28.13:J0gm0Ysvd RAMってしっかり書いてるじゃん チープなマイコンだとROM/RAMに別れてるのが普通だよアーキテクチャー関係無しに : デフォルトの名無しさん (ワッチョイ 6afa-XJxX) [sage] 2018/05/09(水) 18:42:26.74:X9SFPyiC0 スタックの話だよね スタックはRAMであることが絶対条件なので ROMがどんだけあろうが関係ない : デフォルトの名無しさん (アウアウウー Sacf-XJxX) [] 2018/05/09(水) 18:49:54.96:bhGLBTeZa C# と C++ は世の中でどちらのほうが使われているのでしょうか? いま、 C++ の本(ロベール)を読んでいますが、無駄ですか? 柴田望洋訳の分厚い本も買ってしまいました。 : デフォルトの名無しさん [] 2018/05/09(水) 18:54:28.74 C++は無駄とは言い切れないがロベールは無駄 : デフォルトの名無しさん (アウアウウー Sacf-XJxX) [] 2018/05/09(水) 18:59:28.28:bhGLBTeZa ありがとうございます。 結局、どのプログラミング言語を習得するのがおすすめでしょうか? Python のような言語は除いて。 : デフォルトの名無しさん (ワッチョイ 1e81-jSUp) [sage] 2018/05/09(水) 19:01:30.85:ZxmL37bf0 何をやりたいと考えているか次第 : デフォルトの名無しさん (アウアウウー Sacf-XJxX) [] 2018/05/09(水) 19:05:22.21:bhGLBTeZa 趣味でアルゴリズムとデータ構造を勉強しています。 プログラミングコンテストの問題(Aizu Online Judge)を解いたりもしています。 もし、プログラマーになるとした場合、もっとも必要とされる言語を使って、 アルゴリズムとデータ構造の勉強をすれば効率的かなと考えています。 セジウィックとウエインの本や講義動画を読んだり見たりするときには、 Javaの入門書を見たりしています。 : デフォルトの名無しさん (アウアウウー Sacf-XJxX) [] 2018/05/09(水) 19:07:11.19:bhGLBTeZa コンピューターサイエンスを広く学ぶ上で一番適した言語がいいかなとも考えています。 : デフォルトの名無しさん (ワッチョイ 1e81-jSUp) [sage] 2018/05/09(水) 19:16:40.18:ZxmL37bf0 C++のスレで言うのもどうかとは思うが、 初心者が覚えるのに相応しい言語はJavaじゃないかなと思う アルゴリズムだけを学びたいなら、C言語が良いかもしれない 他の人の意見も聞いてね : ◆QZaw55cn4c (ワッチョイ aa60-pRpi) [sage] 2018/05/09(水) 19:47:49.06:dHqNIKDN0 そういうのがやりたくて、しかも今 C で片言がしゃべれるのなら、そのまま進めるのが一番いい : デフォルトの名無しさん (アウアウウー Sacf-XJxX) [] 2018/05/09(水) 20:02:47.70:bhGLBTeZa 参考になりました。 ありがとうございました。 : デフォルトの名無しさん (ワッチョイ 6afa-XJxX) [sage] 2018/05/09(水) 21:19:28.33:X9SFPyiC0 アセンブラかVerilog/VHDLあたりじゃね? 今の伝統的言語はユニプロセッサに源流があって 直列一辺倒の弱点が浮き彫りになっている昨今 【広く】学ぶうえでは却って足かせになるぞ : デフォルトの名無しさん (ワントンキン MMa3-k/8h) [sage] 2018/05/10(木) 12:15:01.11:yXMj8vMdM Occam2 とか XCが最凶かもな : デフォルトの名無しさん (アウアウウー Sa89-Iyo3) [sage] 2018/05/10(木) 12:20:40.60:YLAKf1v1a Cはアルゴリズム勉強にはあまり向いてないと思う 以前各言語向けのアルゴリズム辞典みたいのを見比べてみたけど Cのだけ異質な感じ forのカウントいじってあったりして勉強しにくい 少なくともオブジェクト指向入れた言語じゃないと後で生かしにくい : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-k37M) [sage] 2018/05/10(木) 15:18:57.11:RiSXhiCD0 オブジェクト指向が導入されているべきかどうかというよりも、単純に C は抽象化の能力が低いんだよ。 下層レイヤを上手く隠せないから段階的に積み上げていくというのがやり難い。 学習段階では上から下まで見えているって方が分かりやすいということはあるかもしれないので、 どちらが良いかというのは考え方とか好みにもよるので一概には言えないと思う。 : デフォルトの名無しさん (ワッチョイ cb81-Iyo3) [sage] 2018/05/10(木) 15:24:31.29:bWcYs//f0 アルゴリズムの仕組みが言語の内部に隠されると理解を妨げるだろう オブジェクト指向については、別の機会に学べば良い : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-k37M) [sage] 2018/05/10(木) 15:59:00.64:RiSXhiCD0 そうとも言えない。 複雑なものを理解するには「分解する」は基本的なアプローチのひとつで、レイヤを切り分けるのは有用だよ。 それが に書いた「段階的に積み上げていく」の意図ね。 かといってそれで全体像が見通しにくくなってもそれはそれでアレだし、何がベストかなんて言えないよ。 やりやすいと思った方でやるしかしょうがないんじゃね。 : デフォルトの名無しさん (ワッチョイ cb81-Iyo3) [sage] 2018/05/10(木) 16:46:33.01:bWcYs//f0 C言語で書かれたアルゴリズムが読み解けるようでないと 後で困るだろう : デフォルトの名無しさん (ワッチョイ 2312-YHaA) [sage] 2018/05/10(木) 17:51:59.26:Ulb5C2sT0 C以外だとリストのシャッフルはshuffleだけで済ませられる Cだとshuffleの中身を書かないといけない C以外だと「Combination()を使おう」 Cだと「Combination()を実装しよう」 くらいの差がある アルゴリズムがどこまで指すのか分らないが、楽しいことから先にやればいいんじゃねえの、ということで、C以外から : デフォルトの名無しさん (ワッチョイ cb81-Iyo3) [sage] 2018/05/10(木) 18:15:07.55:bWcYs//f0 アルゴリズムを学習するって、その実装の中身を理解することだろう : デフォルトの名無しさん (アウアウウー Sa89-tJ6Z) [sage] 2018/05/10(木) 18:39:39.67:k0RUZ23fa 個人的には、各種ソートや基本的なデータ構造の操作を自前で書くようなシンプルなところから入った方が分かりやすいかと思うけど、まあ人それぞれかなと。 : デフォルトの名無しさん (アウアウウー Sa89-k37M) [] 2018/05/10(木) 18:45:52.70:yjf1B9Q5a みなさん、ありがとうございます。 セジウィックとウエインのアルゴリズムの本に載っているのは、おそらく ジェネリクスを使っているので一般性もあって、かつ効率もいいプログラム だと思います。 ライブラリのようなクオリティーでプログラムを作るというのが理想です。 : デフォルトの名無しさん (アウアウウー Sa89-k37M) [] 2018/05/10(木) 18:51:57.46:yjf1B9Q5a アルゴリズムの本というと C 言語でプログラムが書かれた本が多いですが、 やっと C++ で書かれた日本語の本が最近出版されましたね。 セジウィックとウエインの本よりももっと初歩的な本のようですが。 データ構造とアルゴリズム (電子情報通信レクチャーシリーズ B-8) 単行本 ? 2018/2/1 岩沼 宏治 (著), 美濃 英俊 (著), 鍋島 英知 (著), : デフォルトの名無しさん (スップ Sd43-lXkA) [sage] 2018/05/10(木) 19:17:25.91:4Q48RAuxd アルゴリズムの抽象的な部分(オーダーとか適用するデータ構造の再帰性や対応関係)を学ぶならCよりML系の方が向いてるは向いてると思う ただ環境構築なんかの障壁もあるだろうし最終的にCは触るだろうけどアルゴリズム以外の所で詰まりにくいという意味でC#を推してみる : デフォルトの名無しさん (スップ Sd43-lXkA) [sage] 2018/05/10(木) 19:18:39.74:4Q48RAuxd 勿論F#でもいいし理想はそうだが好みというかネットの情報量の多さ的にC#を挙げた : デフォルトの名無しさん (ワッチョイ 1be7-1eaZ) [sage] 2018/05/10(木) 19:24:56.01:faWxDCCY0 C#はLinqが便利すぎてお勉強用としてはどうなんだろうなぁ 何やるかによるけど : デフォルトの名無しさん (スップ Sd43-lXkA) [sage] 2018/05/10(木) 20:05:12.45:4Q48RAuxd ああ勘違いしていた アルゴリズムを勉強したいのではなく >>もし、プログラマーになるとした場合、もっとも必要とされる言語を使って、 >>アルゴリズムとデータ構造の勉強をすれば効率的かなと考えています。 なのね であれば 氏が現役バリバリな時の主流の言語なんて今からじゃ予想つかないだろうし、実務なら最も適した言語が使われるだけだからC++をそのままやり続ければいいと思う コンピュータサイエンス自体死ぬほど広範囲な学問で、実務のプログラミングとの間にもやっぱり開きがあって万能な言語なんて無いよ 敢えて言うなら物理と数学、これだけは裏切らない : デフォルトの名無しさん (ドコグロ MM93-pJ79) [sage] 2018/05/10(木) 21:40:19.82:n6BTi4dIM あと英語な : デフォルトの名無しさん (ワッチョイ e3cb-k37M) [sage] 2018/05/10(木) 21:41:29.95:tcNeLXMy0 そこがいいんだよ 隠蔽されたことを忘れたフリをし 本当は忘れていないということの練習に向いている 忘れたフリが綺麗なコードの練習 本当は忘れていないことが性能評価につながる 両立した技能の練習に向いているということだ : デフォルトの名無しさん (ワントンキン MMa3-k/8h) [sage] 2018/05/11(金) 12:08:47.61:CPfY1M+aM そもそもROMの反語はRAMじゃねぇし(SAMってのもある) SHARCだとDMのサイズは0でも、PMさえあれば動く で、PMの事隠してマウンティングすればお前らは受け入れるのか? : デフォルトの名無しさん (アウアウウー Sa89-Iyo3) [sage] 2018/05/11(金) 12:33:06.03:Asz7DXCua 今はどうか知らないけどcは標準でvectorやlistやmapがないから そこから始めないといけないのでめんどくさい アルゴリズム辞典見たら配列をdefineされたNやMで確保してた ライブラリとして使う気ゼロ : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 13:01:20.12:Mluu9Rs0d 世の中のほとんどのチープなワンチップマイコンはROM/RAM構成なんだよ 世の中を知ってたらに対してなんて考えは出ないはずだ : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 13:03:39.86:Mluu9Rs0d Cはチープな環境やOS関連で使われるくらいだからなあ コストのデカイlistやmapなんて無くて当然 必要になったら必要最低限の機能で自力で作る世界 : デフォルトの名無しさん (ブーイモ MMeb-k/8h) [sage] 2018/05/11(金) 13:59:40.72:lM6VzEPtM あーハイハイそうですね〜 : デフォルトの名無しさん (ワッチョイ 2565-5o/y) [sage] 2018/05/11(金) 15:05:19.79:KxM4SNOx0 コスト云々よりジェネリクスが無いから汎用コンテナを作るのが難しい : デフォルトの名無しさん (ラクッペ MM01-XMWP) [sage] 2018/05/11(金) 15:52:32.74:MTbwW/C5M 作るのが難しい人は拾ってくればいいだけ : デフォルトの名無しさん (ワッチョイ cb81-Iyo3) [sage] 2018/05/11(金) 18:24:24.95:biwWi4aJ0 数十バイトしかないなら、普通アセンブラで書くだろう : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 18:50:06.30:Mluu9Rs0d そうでもない 普通にCが使えるので : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 18:55:57.64:Mluu9Rs0d 別に難しくない 標準化されてないから広まってないだけで 作ってる人はいっぱいいる : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/11(金) 19:49:06.46:l0MSXuwV0 だから何? いいよ、じゃあSAMもありにしようや で、スタックの量がCに適するのか適さないのか おまえさんなりの考えを言ってみな : デフォルトの名無しさん (ワッチョイ 2565-5o/y) [sage] 2018/05/11(金) 19:59:50.91:KxM4SNOx0 静的型の恩恵が受けられなくなるだろ? : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 20:34:03.62:Mluu9Rs0d で? : デフォルトの名無しさん (ブーイモ MMeb-/P3g) [sage] 2018/05/11(金) 20:40:41.03:x5BQ9FS4M 普通にvoidポインタに置き換えるだけだが。 何が難しいの? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-Iyo3) [sage] 2018/05/11(金) 20:56:19.66:e+Ei11A70 初期の JAVA もコンテナを使うときにキャストが必須ってアレな仕様だったよな。 : デフォルトの名無しさん (アウアウウー Sa89-k37M) [] 2018/05/11(金) 21:04:30.87:2EGPeEG9a 昔は仕様がダメで段々改良されていくということがありますが、 それはなぜなのでしょうか? その当時はハードウェアの性能上そういう仕様にせざるを得なかったというような 理由があるのでしょうか? それとも単に思慮が足りなかったというだけでしょうか? : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 21:16:49.77:Mluu9Rs0d 理由はいろいろ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-Iyo3) [sage] 2018/05/11(金) 21:20:43.57:e+Ei11A70 知見が足りなかったというのが最大の理由だと思うけど、 せざるを得なかった場面よりもその程度で充分だったという方が多いと思う。 : デフォルトの名無しさん (ワッチョイ cb81-Iyo3) [sage] 2018/05/11(金) 21:23:11.17:biwWi4aJ0 仕様が固まらないうちに作る時は、それなりの暫定仕様か何らかの制限事項を設けて開発したな : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 21:36:00.99:Mluu9Rs0d 知見が足りなかったなんてのは少数派と思う シンプルな仕様からだんだんと機能追加で肥大化の方向 ってのがほとんど : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/11(金) 21:43:16.90:/s88DeTW0 C89 からの「関数の引数として構造体が(実体渡しとして)OK」というのは、私には堕落以外のなにものでもないと : デフォルトの名無しさん (ワッチョイ 1be7-1eaZ) [sage] 2018/05/11(金) 21:53:49.41:HARszYd10 昔のC++にあった(今もある)糞の山は、今のモダンな他言語たちへの反面教師として大いに役立った : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/11(金) 21:55:02.56:Mluu9Rs0d 例えばどの仕様が糞? : デフォルトの名無しさん (ワッチョイ 2565-5o/y) [sage] 2018/05/11(金) 22:06:17.59:KxM4SNOx0 メモリぶっ壊しやすくなるのは十分問題だと思うが ライブラリ利用者側の責任で何とかしろってのはリソースの条件が厳しけりゃしょうがないがさもなくば正当化しかねる : デフォルトの名無しさん (アウアウカー Sa11-jbYT) [sage] 2018/05/11(金) 23:57:53.51:MowAKA7Xa 独習C++は一通り読んだんだが次に読む本ある?問題集みたいなのとか : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/12(土) 00:13:37.95:HeMwMf3D0 私がお勧めしているのは ttps://www.amazon.co.jp/dp/4894714221/ ttps://www.amazon.co.jp/dp/4881357786/ 前者は実は難があって、変てこな実装をしている部分もありますが、それを自分で調べて解決すれば、強くなれると思います 後者は STL の解説本です いずれも C++11 以前で今となっては古いのですが、代わりになるような本がない… 両方とも私は読んでいますので、普通の質問には答えることができます : デフォルトの名無しさん (ワッチョイ 55b3-A5aB) [] 2018/05/12(土) 00:24:10.29:TkoJoFTb0 最初に読む本は禿4版一択ですよ。 : デフォルトの名無しさん (ワッチョイ 3d9e-pJrV) [sage] 2018/05/12(土) 01:17:09.76:hwxaPbIq0 どの言語でも、入門書の次は、Effective 何々 : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 05:59:18.81:D96wT16B0 「なぜ」そうするのか 「なぜ」そうなっているのか 他にどんな選択があったのか という思考回路の俺には合わない本だ : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 06:50:27.10:QiJLTR+Nd それは低級言語に求める物じゃない C/C++は低級言語として数十年間圧倒的なシェアであり続けている これってすごいことだと思う : デフォルトの名無しさん (ワッチョイ e3cb-Ao7v) [sage] 2018/05/12(土) 07:33:39.79:eFTG6CfX0 データ構造の要素が静的に型が決まろうがそうでなかろうが、必要な要素数のメモリを確保する作業に違いはない。 せいぜい型のサイズを余計に掛け算するくらいだ。 確保するサイズが間違っていれば静的に型が決まろうがメモリ破壊は起きる。 もう少し具体的に示してくれないか? : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 07:37:30.31:D96wT16B0 静的な型の恩恵がどうたらって mallocがvoid*を返すのと同じだろ 問題ちゃ問題だがそんなもん怖がるやつぁC使いに向かない : デフォルトの名無しさん (アウアウウー Sa89-5o/y) [sage] 2018/05/12(土) 08:45:19.55:vhGL8v7ea 静的なら実行時パフォーマンスには影響しない 「既に壊しうるのだからちょっとくらい壊せる場所増やしてもいいでしょ」には無条件では同意しかねる 向いていようがいまいがCの案件はあるわけで, 可能な限り安全にコーディングしたいと思うのは可笑しいか? で話を戻すと, 汎用コンテナのCでの実装には, 大きく分けてもdefine使った型安全な実装とvoid *を使ったオーバーヘッドあり型安全なし実装が考えられるわけで, まずそれだけでこうして対立し得る 実装上でもいずれもpros/consがあるわけで, そりゃ規格がまとまる道理がないよね, って主張 別に必要最小限の機能で自分で実装することを否定するわけじゃないし, 型安全が絶対だという気もない : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 08:57:39.01:QiJLTR+Nd 高速コンパクトと安全性利便性は相反するものだ 諦めろ : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/12(土) 09:08:53.09:HeMwMf3D0 独習の次に Effective C++/Effective Modern C++ は飛躍しすぎではないかな? ついてこれるのか : デフォルトの名無しさん (アウアウウー Sa89-5o/y) [sage] 2018/05/12(土) 09:12:02.44:vhGL8v7ea 必読書ですしおすし : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 09:13:51.54:PbE4ojLD0 > void *を使ったオーバーヘッドあり とは何?サイズ管理+アドレスの計算のこと? だったらC++の汎用コンテナでも同じ事を内部でやっているし、オーバーヘッドはないが。 見た目でしか分からない人はCに向いていないぞ。 というか、型安全が欲しければC++を、 そんなん要らんから小さくて早いコードを、というのならCを、ってだけだろ。 その分自分で管理する項目が増えるだけの話で。 選択肢はユーザー側に与えられているのだから、それ以上は要らんだろ。 : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 09:15:07.55:D96wT16B0 できねえこと言ったってしゃーないだろ Cにはテンプレートがない 諦めるしかない : デフォルトの名無しさん (ワッチョイ 1be7-1eaZ) [sage] 2018/05/12(土) 09:18:40.30:kx3qluwG0 とりあえずスクリプト言語やC#で書く→速くしたい所をC++で書く→もっと速くしたい所をCやasmで書く これが正解 どれかにこだわって対立させて排他するのはアホ : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 09:26:19.92:PbE4ojLD0 同意。 若い奴が統一言語「○○だけ勉強すれば全ておk」を求めるのは自然だが、 そうなっていないのは理由があって、つまりは手抜きと実行効率(速度)の兼ね合いだ。 一時期Cが統一言語だったが、それは他言語がゴミだったから(対抗馬がLisp)であって、 C++で再統一されることはないよ。特に今のC++では。 : デフォルトの名無しさん (アウアウウー Sa89-5o/y) [sage] 2018/05/12(土) 09:31:37.48:vhGL8v7ea オーバーヘッドについては撤回 だから基本的にそういう役割分担について否定しているわけじゃない Cで汎用コンテナが標準化されることはないだろうっていうのが元々の主張 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 09:56:03.80:QiJLTR+Nd Cで書けることは基本C++で書ける C++で最適化出来ない所はCでも無理 アセンブラしかない : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 10:05:55.31:QiJLTR+Nd CやC++に関わらず専用なコードは汎用に比べて高速コンパクトに出来る事がある つまり、 void*で作って全てのコンテナサイズ(型)同一コードよりも型ごとにコードを作る方が速いことがある C++のコンテナは全て専用コードなので コードの肥大化と引き換えに微妙に速いかもしれない コードの肥大化によってキャッシュミスして遅い可能性もあるけど : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 11:33:41.32:VFvkGYoW0 > 速くしたい所をC++で書く→もっと速くしたい所をCやasmで書く asmはいいとしてC++→Cでもっと速くなるケースなんてあるのか? : デフォルトの名無しさん (ブーイモ MM43-/P3g) [sage] 2018/05/12(土) 11:35:17.48:tcCubJZ8M >すでに壊してるのだから 一体どこからそんな主張を読み取ったんだ? 勝手に人の主張を捏造せずに、ちゃんと質問に答えてくれないか? あと、void*使わなくても、生成時に型サイズを受け取る方法もある。 汎用コンテナ作るのにdefineで型定義なんてするわけないだろう。 : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 11:39:23.77:D96wT16B0 qsortやbsearchとかそうだよな C++のsortやbinary_searchには絶対に敵わない : デフォルトの名無しさん [] 2018/05/12(土) 11:44:45.24 FF外から失礼します 「すでに壊してるのだから」とはどこにも書いてないと思うのですが なぜあなたこそ勝手に人の主張を捏造しているのでしょうか? FF外から失礼しました : デフォルトの名無しさん (ブーイモ MM43-/P3g) [sage] 2018/05/12(土) 11:48:55.40:tcCubJZ8M 面倒なやつだな。 「既に壊しうるのだから」 これでいいか? : デフォルトの名無しさん (アウアウウー Sa89-bFqk) [sage] 2018/05/12(土) 11:52:21.18:My8LWy2ka ふぁいなるふぁんたじぃ? : デフォルトの名無しさん (ワッチョイ cb81-Iyo3) [sage] 2018/05/12(土) 11:59:59.40:FtdYwxfb0 前輪駆動車じゃない? : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 12:14:05.61:D96wT16B0 255 : デフォルトの名無しさん (アウアウウー Sa89-bFqk) [sage] 2018/05/12(土) 12:31:23.28:My8LWy2ka -1 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 12:40:45.91:QiJLTR+Nd 汎用バイナリ < 汎用コード専用バイナリ < 専用コード 速度的にはこう 速度が非常に重要であれば CだろうがC++だろうが専用コードを書くのが一番 : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 12:42:10.49:PbE4ojLD0 間接参照を抜ける場合とかだろ。 逆にCよりもC++の方が速くなるコードの方があり得ないと思うが。 実際にC++はCより遅いってのは事実だし。 お前が値配列と参照配列の区別が付いてないだけだろ。 : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 12:44:50.30:D96wT16B0 アンカーミスったか? qsortとstd::sortはどちらも値であろうが参照(ポインタ)であろうが使えるぞ : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 12:49:50.14:QiJLTR+Nd : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 12:50:14.86:VFvkGYoW0 > 間接参照を抜ける場合とかだろ。 それC++のまま書き換えればいいだけ > 逆にCよりもC++の方が速くなるコードの方があり得ないと思うが。 そんな主張はしてない > 実際にC++はCより遅いってのは事実だし。 だからどんなケースなんだよ STLとか使いまくって遅いとかなら使わないように書き換えればいいだけだろ : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 12:58:57.32:QiJLTR+Nd 厳密に言うと C11の可変長配列はC++には無い C++では例外処理を実現するために関数コールに微妙なオーバーヘッドがある場合がある って感じでCの方が有利な事がある どちらもガシガシに最適化した場合の話 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:05:00.64:QiJLTR+Nd x86-32 例外処理を有効にすると 関数コールに微妙なオーバーヘッドが加わる x86-64 例外処理の為のオーバーヘッドは無い その代わり例外発生時の処理は非常に遅い Cの可変長配列のような、スタックに可変長サイズを確保する手段はC++には無い 当然ダイナミックなメモリアロケートよりはスタックに確保した方が速い ただし実際にはあまり使われていないと思われる : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 13:09:56.56:PbE4ojLD0 ミスってないぞ。 Cの場合は抽象化してくれないんだから、関数を直接呼ぶしかないんだよ。 だから動的解決をしている場合はC++の方が遅く、静的解決の場合は同速になる。 CのほうがC++より遅いケース出してみろ。ないから。 C++は機能的にはCをラップしてるんだよ。 例外とか、クラスの動的解決とか、スマポ(キリッとか。その分管理が楽だが、速度は遅くなる。 Cの場合はC++のラッパ抜きで直接呼ぶことになるから、その分速い。それだけ。 : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 13:11:52.26:PbE4ojLD0 > x86-64 > 例外処理の為のオーバーヘッドは無い > その代わり例外発生時の処理は非常に遅い これマジ? 煽りじゃなくて仕組みを知りたいから、キーワードかURLくれ。 こちらでググって確認する。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:28:22.55:QiJLTR+Nd 自分でディスアセンブルしたり バイナリ比較したり実測してわかったことで 仕組みがまとめて書いてあるような所は知らない : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 13:31:21.41:PbE4ojLD0 > だからどんなケースなんだよ 探してやったぞ。 > 実験によれば 6-13% の実行時間が単なる関数のディスパッチに用いられ、オーバーヘッドは場合によって 50% に達する[1]。 > ttps://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の実装になる。(コンパイラの都合だが) : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:35:45.30:QiJLTR+Nd C/C++で基本同じ結果となるコードが書ける 同じ結果となるコードを書けば結果は同じ ってだけで 当然違う結果となるコードを比べれば違う結果になる 当たり前 : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 13:36:37.92:PbE4ojLD0 ちなみに計測したときのOSは何? なおその兆候が正しいなら、x64の場合はハードウェアで対応していることになる。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:38:15.87:QiJLTR+Nd クラス関数はthisを第一パラメータとして渡してるだけで、これは構造体でも同じことが出来る virtual関数は関数ポインタテーブルへのポインタを持ってるだけ 同じことは当然Cの構造体でも出来る テンプレートは型ごとにコードを書くのと同じ : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 13:39:04.83:PbE4ojLD0 だから、いわゆるC++の機能を使ったら、管理が楽になる分だけ遅くなる、というだけ。 C++の機能を全く使わないコードはCと言うんだよ。 だから、C++はCより常に遅い。それだけ。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:41:20.71:QiJLTR+Nd そういえば、 例外発生時のスタックにあるリターンアドレスを検索するとかどこかでみたような どこかに仕組みが書いてあった気がしてきた : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:42:51.66:QiJLTR+Nd 君独自の定義とか持ち出さないでくれ : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 13:44:31.67:PbE4ojLD0 > virtual関数は関数ポインタテーブルへのポインタを持ってるだけ > 同じことは当然Cの構造体でも出来る Cでやる場合は、関数ポインタを引数で渡すことも出来るんだよ。 (勿論C++でも出来るが、クラスを使う意味が無くなるから普通はやらない) この場合、間接参照が抜ける分だけ速くなる。 (実際はメモリアクセス1個よりはキャッシュを壊すことの影響の方が大きいとは思うが) : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:45:03.28:QiJLTR+Nd C++独自の機能を使うとCより常に遅い? それは嘘だな : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:47:32.05:QiJLTR+Nd C++にだけ独自の縛りを設けてCのが速い? 強引に主張を通したいのはわかるが そろそろ痛いぞおまえ : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 13:49:15.64:PbE4ojLD0 それはスタックウォークという、従来の例外実装方法だ。 君の場合なら、x86がそれになってる。 ならC++の機能を使って、Cよりも速くなるケースを挙げてみろ。 ないから。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:51:18.48:QiJLTR+Nd もとはだ C++で最適化に行き詰まった時に わざわざコンパイラをCに変えて最適化する事なんてないから Cっぽい記述とかアセンブラっぽい記述とかなら そりゃいくらでも : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 13:53:21.45:QiJLTR+Nd 前半 自分で調べろ 後半 ええと、... 「C++独自の機能を使うとCより常に遅い」 の否定はわかるかな? : デフォルトの名無しさん [] 2018/05/12(土) 13:53:48.97 って単に32bitプログラムを64bit CPUで走らせてオーバーヘッドがーって言ってるんじゃね? : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:01:29.48:PbE4ojLD0 君は理解できてないようだから、定義を確認しておこう。 ただしこれは一般的な解釈であり、おそらくこのスレの住民は共有してる。 ・テンプレート、クラス構文、スマポ等、 C++コンパイラではないと通らない機能を使ったコードを、C++のコードという。 ・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。 > 一般に、カーネルモジュールをC++で設計するやつは、以下のいずれかだ。 > > (a) 好んで厄介事に巻き込まれたい者 > (b) 自分が書いているのは実はCだと気がついていないC++バカ > (c) 授業でそういう課題を与えられた者 > > (d)を付け加えるなら好きにしてくれ。 > > Linus > ttp://https://cpplover.blogspot.jp/2013/05/linus-torvalsc.html "> ttps://cpplover.blogspot.jp/2013/05/linus-torvalsc.html 君は多分(b)だね。 今の話題はC++のコードとCのコードの速度比較ということでよろしく。 : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:05:34.23:D96wT16B0 #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] } : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:06:21.60:D96wT16B0 #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] ・・・あれ? 何だこりゃ } : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 14:07:22.82:VFvkGYoW0 そういやスタックにとる可変長配列はC++にないんだな まあメジャーな環境でalloca( )使えないものはないと思うが 例外は使わないようにすればいいだけかと : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:14:29.71:PbE4ojLD0 一応、基本的確認をするが…データは同じなんだよな? 俺の予測では同速。多分そちらの期待も同じだと思うが。 : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 14:14:45.58:VFvkGYoW0 > ・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。 可変長配列とか使ってないならC++のコードでもある つまりC++の範疇で書き直してるだけ って言うのが大方の人の解釈だと思うが : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:18:31.88:D96wT16B0 うん だってグローバルだからオール0 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 14:20:49.93:QiJLTR+Nd それは単なる君の定義 100歩譲っても5chで一般的なだけ 普通C言語, C++と言えば、 その規格や規格に準拠したコードを表す : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:22:26.74:PbE4ojLD0 それは君の勘違いだね。 その定義ならC/C++を区別する理由がないし、多分LinuxもC++になってしまうだろ。 : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:26:21.88:D96wT16B0 たとえばヘッダファイルなんか、同一のファイルを Cコンパイラに入力したり C++コンパイラに入力したり ってこともあるよな 内容には無関係で単に Cコンパイラに入力したらCのコードで C++コンパイラに入力したらC++のコードだろ 最適化の内容だってrestrictのように CとC++で違ってくる可能性はあるしな : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:27:02.49:PbE4ojLD0 最適化の掛け忘れでは? Cの方はほぼ最適コードだが、(メモリアクセス減らして一時変数に取れとかその程度) C++の方は最適化無しだとトンデモコードが出てくるが、 最適化でそれを消すからおkというノリだったと思ったぞ。 最適化無し同士の比較は意味がない。最大最適化同士の比較やってみそ。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 14:27:22.97:QiJLTR+Nd 使うモジュールの差を言語で言うから話が紛れる で、 君の定義であるごく一般的な記述を行った場合の話であれば C++の方が速いこともあるしCの方が速いこともある C++はテンプレートによって専用のコードをたくさん作る 当然汎用バイナリよりも専用バイナリの方が最適化がかかりやすいし、 変数よりも即値の方が速いことも多い C++例外処理も有効で、 これによって処理が速くなる場合がある : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:27:42.28:D96wT16B0 gcc unko.c -O3でやってる : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:29:31.07:PbE4ojLD0 > 内容には無関係で単に Linus全否定かよ。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 14:30:30.03:QiJLTR+Nd オールゼロでクイックソート? それは... : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:35:18.35:PbE4ojLD0 > 君の定義であるごく一般的な記述を行った場合の話であれば > C++の方が速いこともあるしCの方が速いこともある ねーよ。 実例挙げてみ? それって単なるコンパイラの適性であって、コード自体の速度ではないだろ。 C++とCの本質的な速度差ってのは絶対にひっくり返らないものであって、 例えば、スマポを使っている限り参照ポインタを管理する分だけ遅くなる、というもの。 コンパイラがどう進化しても、「0」「ADDまたはDEC命令」の差はひっくり返らないんだよ。 > C++例外処理も有効で、 > これによって処理が速くなる場合がある ねーよ。Cは最初から全部noexceptだ。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 14:35:49.71:QiJLTR+Nd ソートって メモリサイズ 比較コスト コピーコスト キャッシュサイズ ... こんなんで結果(時間)が大きく異なるんだよね クイックソートだと データの並び順でもたまたま選んだピボット値でも変わる 1個の場合を比較してもあまり意味が無いぞ : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:36:05.87:D96wT16B0 clでやってみたら期待どおりの結果になった 1.789[sec] 0.623[sec] 最適化は/Ox : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:36:46.83:D96wT16B0 ああ、それは確かに テストデータをまじめに作るか。。。 : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:37:45.07:PbE4ojLD0 となるとアセンブラを確認するしかないね。 (いいサイトはあったはずだが、普段使わんから忘れた) : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:37:57.15:D96wT16B0 ん? なんで? : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:44:25.97:PbE4ojLD0 それさ、以下の3条件でやってみ。 1) Cのコード(677)を、Cコンパイラ 2) Cのコード(677)を、C++コンパイラ ←追加 3) C++のコー(678)を、C++コンパイラ Cコンパイラってポインタ周りは最適化をかけないから、多分、 速度差はコンパイラ起因であって、コード起因では無いと思う。 : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:45:53.71:PbE4ojLD0 > (b) 自分が書いているのは実はCだと気がついていないC++バカ > ttps://cpplover.blogspot.jp/2013/05/linus-torvalsc.html 君の定義が正しければ、上記(b)の定義が出来なくなるだろ。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 14:46:34.72:QiJLTR+Nd C++が遅くなる例だけあげてC++が遅いって言ってもねえ C++が速い例 double p = 1.; int n; for (n = 1 ; ; n++){ p *= n; } C++だと例外処理をつかって、いつオーバーフローするかわかるんだけど 例外を使わないとどういうコードになるかねえ? --- Cで普通に汎用vectorを作るとすると 普通は汎用バイナリで作ることになるんで 関数ポインタを経由する事になっちゃうけど C++のテンプレートだとだとそれぞれ専用なんで 関数コールが速いよね アドレス計算も即値の乗算だから色々なテクニックが使える : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 14:47:13.55:D96wT16B0 わりい、ちょっと離席する : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:49:16.03:PbE4ojLD0 > C++が速い例 Java出身か?死ね : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 14:51:30.31:QiJLTR+Nd C++だとコンテナを使ってまともなソートを簡単に書けるけど Cだと面倒だからバカソート ってのも普通にある 要素数が少なければ意図的にやったりもする 一般的なコードではCの方が速い事の方が多い ってくらいの主張にしとけば良いものを 強い主張をしちゃうから : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 14:53:13.25:QiJLTR+Nd ん? 良くわからんが負け宣言てことでいいのかな? : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 14:55:06.52:VFvkGYoW0 何を言ってるのか意味不明すぎる よほど感覚が独自なんだろうな w : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 14:56:22.02:PbE4ojLD0 おっとすまん、ポインタアクセスでのメモリオーバーフローと勘違いしてた。 doubleの無限大の例外って事? 俺はそっちには詳しくないが、浮動小数点例外をソフトウェアで検出するのなら同じだし、 ハードウェアでの検出なら割り込みがかかるだけで、速度的にはこれまた同じだが。 vectorについては完全に君の勘違いだぞ。 Cではそれぞれ専用の物を作るのが基本であり、それを一つにかけるようにしたのがテンプレートだ。 多分、理解の仕方が逆だ。 : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 14:57:30.76:VFvkGYoW0 > Cで普通に汎用vectorを作るとすると > 普通は汎用バイナリで作ることになるんで 速度云々議論してるところでそんなことする奴はバカって言われてもしょうがないと思う : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 15:04:23.09:VFvkGYoW0 > ハードウェアでの検出なら割り込みがかかるだけで、速度的にはこれまた同じだが。 Cだと言語の範疇ではその割り込みを処理できない なのでif文とかでオーバーフローするのを検出するとかが必要 って話だろ : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 15:07:59.44:PbE4ojLD0 > if文とかでオーバーフローするのを検出するとかが必要 ほう。ならそのコードを書いてみ。 そしたらそのコードの中でオーバーフローするから無限ループだね。 そんな言語が実用だったとでも? : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/12(土) 15:15:00.22:sI+Q43v80 例外については「お前は頭が悪すぎて会話にならん」とだけ コンテナは 「C++の方が遅い例だけ扱って、速い例は自分の想定と違う」 という主張を続けるならお前と会話しても無意味だ : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/12(土) 15:16:02.69:sI+Q43v80 IDが変わってしまった まあそんな事はどうでもいいか : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 15:18:43.30:PbE4ojLD0 ちなみに速度比較についてはいろんな人が様々やってるけど、 俺的にまあ公平だと思えるのはこれだね。俺の体感ともだいたい一致する。 おれはC++は1.1-1.3位かと思っているけど。 > C 1.00 > C++ 1.56 > Java 1.89 > C# 3.14 > ttps://jaxenter.com/wp-content/uploads/2017/09/energy-efficient-languages-768x689.png > ttps://jaxenter.com/energy-efficient-programming-languages-137264.html C++の機能をバリバリに使ったら、そりゃJavaと大して変わらんだろ、ということになるし。 スマポってのは良くできたGCとコストはほぼ同じだし。(GCは全自動なだけ) Javaは以前は3程度だったが、ゴリゴリチューニングしてきているらしい。 : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/12(土) 15:19:13.36:sI+Q43v80 速度優先のコード前提ってことなら 保護されまくった高機能汎用コンテナを使うこと自体アホってことになるねえ さらに条件を加えちゃってもう : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 15:19:20.53:PbE4ojLD0 僕は知りません、まで読んだ。 : デフォルトの名無しさん [] 2018/05/12(土) 15:20:34.21 なんで喧嘩腰なのかがよくわからないけど、 C言語では「n <= DBL_MAX」というif文が必要ってことだろ? double p = 1.; int n; for (n = 1 ; n < DBL_MAX; n++){ p *= n; } : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 15:23:37.01:PbE4ojLD0 いやオーバーフローするのは p だろ。 と思ったが、もしかして n の方なのか? : デフォルトの名無しさん [] 2018/05/12(土) 15:33:27.39 なんでもない、忘れて>< : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 15:48:51.69:PbE4ojLD0 通じたようで何より。 だからオーバーフローの検出はソフトウェアでは辛くて、通常はハードウェアのはずだ。 そしてその場合は割り込みとなり、Cの場合は割り込みハンドラにコードを書くことになる。 C++の場合は『そこから例外処理ルーチンまで引っ張ってきてくれるコード』をコンパイラが用意し、 ユーザーのcatchコードを実行する。つまり、上記『』内コードでラップされてる分だけ遅い。 (実際にはラップだけではなくスタックウォークも行うから相当遅いはずだが) なんだが、実際俺はゼロ割例外しか見てないからオーバーフローについてはよくは知らん。 ハードウェア的には上記の動作になる。 一般的にはオーバーフロー例外は出ない環境(無限大に貼り付けるだけ)で使うのではないかと。 Cではアホみたいにゼロ割チェックやってるよ。 これはC++でも同じだと思うが、C++erはやらないのが作法なのか? とはいえ、ゼロ割はCMP+Brachであり、通常は分岐しないから、x86ではほぼゼロコストだ。 割り込みは関数呼び出し自体が遅くなるから、結局これもCの方が速いはずだが。 : デフォルトの名無しさん (ドコグロ MM01-pJ79) [sage] 2018/05/12(土) 16:03:54.80:68o7JYmcM お前話の流れが読めてないだろ w から読み直せ、バカ : デフォルトの名無しさん (ワッチョイ e3cb-/P3g) [sage] 2018/05/12(土) 16:11:14.40:eFTG6CfX0 overflowてexception吐くんだっけか : デフォルトの名無しさん (ドコグロ MM01-pJ79) [sage] 2018/05/12(土) 16:35:26.68:68o7JYmcM バカはこれだから w isfinite( ) マクロとかも知らんのかよ : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/12(土) 16:40:25.40:HeMwMf3D0 オーバーフローで例外や割り込みが起動することはないのでは? 普通、無符号ならキャリー、符号有りならオーバーフローのどっちかのフラグで判定するかと : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 17:14:24.19:D96wT16B0 unsigned long long array[100000000]; ↑ ここに同じファイルから乱数を読み込んで比較してみた clのオプションは /Ox /arch:AVX gccのオプションは -O3 -mtune=sandybridge qsort cl 27.171[sec] gcc 26.139[sec] std::sort : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 17:16:00.99:D96wT16B0 途中で書き込まれてしまった 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 未実装 : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 17:16:40.49:D96wT16B0 が正解だったね : デフォルトの名無しさん (ワッチョイ e358-k37M) [sage] 2018/05/12(土) 17:49:15.49:D96wT16B0 そこの2通目に箇条書きしてある部分は 1992年当時に俺が思っていたことに近い ・例外がクソ うん、マジクソだ C++11以後マシになったが下痢が治ったという程度 ・newいらねー 演算子newを初めて聞いた瞬間、 mallocの設計理念が大声でわめき立てた C++11以後ブーイングが更にエスカレートした ・キーワードclassいらねー 禿自身が認めやがった ・・・しかし、それがなぜへの反駁に引用されるのかがわからん : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 18:15:21.20:VFvkGYoW0 大抵のプロセッサの浮動小数点ユニットにはオーバーフローしたら例外を発生させる機能がある それを有効にしてるかどうかは環境による あとC言語の話で割込ハンドラーとか言ってるは単なる知ったかなのでスルーした方がいい : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/12(土) 18:29:10.59:HeMwMf3D0 >大抵のプロセッサの浮動小数点ユニットには 「浮動小数点ユニット」なんですね、ここで確認しておきます。 >オーバーフローしたら例外を発生させる 演算結果が ±inf になることを「オーバーフロー」と言うのですか?ちょっと耳慣れないですね >C言語の話で割込ハンドラー lsi-c ver3, MS-C ver6 あたりでは、そういうのもあったと記憶してます、 matherr() ですね だから はあながち間違いとはいいきれない面もあります : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 18:40:33.53:PbE4ojLD0 世間では「どちらのコンパイラを使うか」ではなく、 「どちらのスタイルで書いているか」でCとC++を区別してるんだよ。 : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 18:42:16.14:VFvkGYoW0 > 演算結果が ±inf になることを「オーバーフロー」と言うのですか?ちょっと耳慣れないですね それ反対、オーバーフローしたら結果をinfにしてるだけ : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/12(土) 18:49:16.74:HeMwMf3D0 inf も NaN も浮動小数点表現の中にあるので「オーバーフロー」と呼びにくい、と思っています、まあ人それぞれ : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 19:04:56.38:VFvkGYoW0 だから誰もinfがオーバーフローとは言ってないだろ オーバーフローしたらそれっぽい値としてinfを入れてるだけ : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/12(土) 19:24:22.69:yANyZ1HYd それなら Cスタイル、C++スタイル と言えば良い CかC++かは当然コンパイラで決まる C++は元々上位互換を目標に作られた物だ : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/12(土) 19:29:38.17:VFvkGYoW0 お前の変な世間はどうでもいい : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 19:48:04.17:PbE4ojLD0 > C++は元々上位互換を目標に作られた物だ そうだ。そしてだからこそ、スタイルで区別されるんだよ。 元々C++はCの完全上位互換だった。 だから君らの定義なら、C++が登場したときから全てのCは消滅し、C++になっているはずだろ。 実際はそうじゃない。 「○○のコードはCで書かれています」 「○○のコードはC++で書かれています」というのは、 世間では俺の言った定義()で使われてる。 その後、CとC++が仕様的に分離してしまったから、 今現在はCコンパイラで通るコードがC++コンパイラで通らないケースが存在する。 だから今は明確に「どちらのコンパイラを使うか」を想定しておく必要があるが、 それもコーナーケースで、 大半の「Cのコード」はC++コンパイラでもそのまま通る。 お前らがC++信者でC++の範囲を広く取りたいのは分かるが、世間はそうじゃない。 C++がCの仕様を全て取り込んだら、 お前らにとってはCは消滅、全てはC++になり、お前らは幸せになれるだろうさ。 ただ、その後も世間はCとC++を引き続き区別するだろうよ。 : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/12(土) 20:09:12.78:sI+Q43v80 お前用語の定義の説明とかどうでもいい スタイルの意味ならスタイルと書け : デフォルトの名無しさん (スップ Sd03-lXkA) [sage] 2018/05/12(土) 20:09:24.63:D4Rf+0xLd それは嘘だなぁ extern "C"が無いとCライクに見えるオブジェクトを吐かない事が常となっているC++(コンパイラ)について、いくらpure Cライクなコードを書いてもpure Cでないextern "C"を書かないとCライクに見えるオブジェクトは吐けないってそれはもうC++でしょう 他の内容にも誤りがあって君の世間ではCライクなコードであればCで書いたと宣言していいらしいけど、少しでも世間のOSSのコードを見て回れば良いよ Cで書かれているのはCだから : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 20:30:38.36:PbE4ojLD0 お前らが誤解したままでいるのはお前らの自由だが、 お前らの定義だと、CとObjective-Cを区別できないだろ。 あれはCの完全上位互換で、Cコードそのまま食えるらしいからね。 お前らも少し考えれば自分で矛盾に気づけるはずだが。 : デフォルトの名無しさん (ブーイモ MM49-ZhOv) [] 2018/05/12(土) 20:58:42.38:cTj25fOrM それは言い過ぎでしょ。 流石にそれは、世間を知らなすぎ、と言われても仕方ない意見にみえてきたなあ。。。 : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 21:57:33.16:PbE4ojLD0 ならもうちょっと分かりやすい説明をしてやる。 について、お前らの定義では『コード』について議論できないだろ。 俺の定義では、677は「Cのコード」で、678は「C++のコード」だ。コンパイラに依らない。 お前らの定義では、678は明確に「C++のコード」だが、677については、 「Cコンパイラを通した場合、677はCのコード」 「C++コンパイラを通した場合、677はC++のコード」 になってしまうだろ。 それだと、CとC++の『コード』の速度比較自体が定義できないだろ。 677をCコンパイラを通した場合とC++コンパイラを通した場合の速度差は、 「コードの差」ではなく、「コンパイラの差」なんだよ。 当たり前だろ。 というか、C++erもここまでレベルが落ちたのか。世も末だな。 : デフォルトの名無しさん (ワイモマー MM43-uCqk) [sage] 2018/05/12(土) 22:16:57.78:DXsEIRbfM std::filesystemで片方のスレッドでファイルを出力し もう片方のスレッドでファイルが存在していたら読み込むというプログラムを書いた場合 出力中に存在すると判定されて読み込んでしまいそうですが、 そんなことないでしょうか? もし読み込んでしまう場合、自力でフラグ管理かMutexを使うなどして 判定する以外の方法はあるでしょうか? : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/12(土) 23:29:24.63:sI+Q43v80 お前が考えた定義とかどうでも良いって言ってるの : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/12(土) 23:53:40.44:PbE4ojLD0 というか何でお前らそんなに必死なんだ? 俺の言ってる定義が世間一般の定義だよ。 そうじゃなきゃ『コード』の善し悪しの議論が出来ないだろ。自明だと思うが。 繰り返すが、C++がCよりも遅いのは事実で、それもググレばいくらでも出てくるだろ。 ただこれはC++そのものよりもオブジェクト指向の弊害だが。 ttp://http://chrismdp.com/2015/04/how-i-doubled-the-speed-of-my-game-by-giving-up-on-c-plus-plus/ "> ttp://chrismdp.com/2015/04/how-i-doubled-the-speed-of-my-game-by-giving-up-on-c-plus-plus/ ttps://www.quora.com/Why-is-object-oriented-programming-OOP-slower-than-procedural 逆に言えば、C++の機能をふんだんに使ったとして、Javaに対する速度優位がどれだけあると思ってるの? C++で世界が再統一されることは、今のC++の仕様/方向性ではあり得ない。C++ではCを殺しきれない。 だからRustが生まれた。 : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/12(土) 23:56:27.27:sI+Q43v80 お前の定義じゃないと議論が出来ないのは おまえがアホだから : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/13(日) 00:02:56.89:VV8A9gRv0 定義の布教なんかより技術的な会話をしろよ : デフォルトの名無しさん (ブーイモ MM19-ZhOv) [] 2018/05/13(日) 00:03:10.09:C4Q8t1mmM 必死なのはどちらなんだろう… : デフォルトの名無しさん (アウアウウー Sa89-bFqk) [sage] 2018/05/13(日) 00:20:47.86:OjngaL1la C++スレらしい流れだと思うよ : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/13(日) 00:59:58.71:eWw2CnRZ0 面白くていいじゃないですかぁ… ここで linus メールをコピペ(省略) : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/13(日) 01:17:46.49:eWw2CnRZ0 面白い表ですね つい C# とか lisp の立ち位置を確認してしまった… : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/13(日) 08:12:09.87:pAG2qz7m0 だからお前のオレオレ定義なんてどうでもいい そもそもみたいな話でC++→Cで全面書き換えなんてする奴はいないだろ まともなプログラマーならボトルネックを見つけてその部分を書き換える 例えば1つのファイルに関数f1()とf2()があってf2()がボトルネックだからC++からCの範囲で動くようなコードに書き換えたとする お前はそのファイルの記述言語は何て言うんだよ? 関数毎に記述言語が違うとか言い出すのかよ w : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/13(日) 08:18:26.86:pAG2qz7m0 > 出力中に存在すると判定されて読み込んでしまいそうですが、 > そんなことないでしょうか? そりゃ普通にそんなことあるだろ > もし読み込んでしまう場合、自力でフラグ管理かMutexを使うなどして > 判定する以外の方法はあるでしょうか? そもそも何をしたいのよ? 出力完了してから読みたいだけなら出力完了してから読み込む側のスレッド起動するとかする方法もあるだろうし : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/13(日) 09:30:39.74:tSRcUD9w0 お前がIDコロコロしてまでも定義にこだわる理由が分からん。 お前の定義なら、仮に全面インラインアセンブラで記述してあっても、 Cコンパイラを通したらそれは「Cのコード」であり、 C++コンパイラを通したらそれは「C++のコード」になり、 Objective-Cコンパイラを通したらそれは「Objective-Cのコード」と言うんだろ。 そんな定義の奴はいない。それは「アセンブラ」と言うんだよ。 ただこの定義はもういい。 君は間違いを認めないようだし、仮に俺が間違っていたとしても、 お互いの認識のズレは確認できたのだからそれでいいだろ。 そしては最初からそう言っているだけだ。 お前は「コンパイル単位」でしか言語を規定できないからおかしな事になっている。 世間は「コード単位」でも言語を規定する。だから、お前が > f2()がボトルネックだからC++からCの範囲で動くようなコードに書き換え と言うのを、世間では「f2()をCコードに書き換え」と言うんだよ。 仮にお前の定義が正しくても、これを日常的にやるようなら、じきに略されて 俺(世間)の言い方に落ち着くのも分かるだろ。 だからは最初から、お前の言葉で言う、 > f2()がボトルネックだからC++からCの範囲で動くようなコードに書き換える 「f2()がボトルネックだからC++からアセンブラの範囲で動くようなコードに書き換える」事を > もっと速くしたい所をCやasmで書く と表現している。元々「コンパイル」単位ではなく、「コード」単位なんだよ。 その「コード」について議論するのに、「コンパイル」単位を持ち出すのはおかしいだろ。 「速くしたい『所』」ってのは一部限定って事を明示してるだろ。 お前はどうしても認めないようだが。 お前は根本的に考え方がおかしい。それではまともな議論が成立しないだろ。 議論している粒度に合わせた言葉を使え。 : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/13(日) 09:51:06.22:pAG2qz7m0 > ただこの定義はもういい。 > 君は間違いを認めないようだし、仮に俺が間違っていたとしても、 > お互いの認識のズレは確認できたのだからそれでいいだろ。 いきなり弱気になってて笑うわ w : 740 (マクド FF91-uCqk) [sage] 2018/05/13(日) 10:01:51.37:ntCzq/+YF 自己解決しました。 仮の名前でファイルを書き出してからリネームすれば書き込み中か書き込み済みか 判定する処理をなくせるみたいでした。 : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/13(日) 11:07:48.71:Q3HZm9Uhd コンパイラが変わらない単なる最適化で C++からCにする なんて言わないから普通 少なくともエンジニアの会話では無い 簡単にいう場合は「最適化」「チューニング」だし 詳しくいう場合は中身を具体的に言う 頭の悪い文系を騙すのには使えるのかもしれないけど : デフォルトの名無しさん (スップ Sd03-c79c) [sage] 2018/05/13(日) 11:09:34.85:Q3HZm9Uhd C言語風なコード と C言語のコード 全く意味が違う : 638 (ワッチョイ 1be7-1eaZ) [sage] 2018/05/13(日) 11:24:15.00:YEhpfoS10 「C++で書く」→カジュアルにSTLとか使って読みやすく書く 「Cやasmで書く」→キャッシュやSIMDとか低級に考慮してガリガリ最適化する くらいの軽い気持ちで書いただけなのに紛糾しすぎててワイ将困惑 : デフォルトの名無しさん (スプッッ Sd03-Je+M) [] 2018/05/13(日) 12:17:41.91:oMdj20B0d 話が長い上にどうでもよすぎる : デフォルトの名無しさん (ワッチョイ 1b7f-y4OE) [sage] 2018/05/13(日) 12:26:54.36:yds9udeH0 またいつものキチガイか : デフォルトの名無しさん (ワッチョイ 4bf0-k37M) [sage] 2018/05/13(日) 12:43:30.13:AL0mRZz+0 おまえさんの頭がC++03のまま更新が止まってしまっていることはわかった : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/13(日) 12:46:19.41:eWw2CnRZ0 そう判断した理由は? : デフォルトの名無しさん (ワッチョイ 4bf0-k37M) [sage] 2018/05/13(日) 12:51:49.36:AL0mRZz+0 C++11以後の「低級」を知らんだろ : デフォルトの名無しさん (ワッチョイ 2368-bFqk) [sage] 2018/05/13(日) 13:01:15.34:DrlMjc+O0 C++xx この末尾のへんなナンバリングが施されるようになったのっていつ頃から? : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/13(日) 14:22:28.62:pAG2qz7m0 元々はC++09を狙ってたらしいから2008年頃じゃね? : ◆QZaw55cn4c (ワッチョイ 6360-bFqk) [sage] 2018/05/13(日) 14:53:37.16:eWw2CnRZ0 具体的に : デフォルトの名無しさん (ワッチョイ 4bf0-k37M) [sage] 2018/05/13(日) 15:27:50.96:AL0mRZz+0 人に聞くのは知らないからだな : デフォルトの名無しさん (ワッチョイ 85b3-k37M) [sage] 2018/05/13(日) 15:47:31.87:CI2jyTw+0 STLが03から入ったと思ってんのか あと >Cコンパイラってポインタ周りは最適化をかけないから、多分、 >速度差はコンパイラ起因であって こんなこと言ってる時点でID:PbE4ojLD0の話は聞くに値しない : デフォルトの名無しさん (ワッチョイ 4bf0-k37M) [sage] 2018/05/13(日) 16:22:20.14:AL0mRZz+0 あの流れからどうやってSTLが03からという話になったんだ? : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/13(日) 17:44:42.77:tSRcUD9w0 馬鹿につき合ってすまんかった。 少なくとも俺とLinusは君と同じ定義で使ってるよ。俺の認識では世間もそう。 俺はこれでこれまで話が通じなかったことはないから。 おそらくはCをやらずにC++だけやってる世代と、 必ずCをやったうえでC++に進んだ世代の違いだ。 ゆとりだけで閉じてる世界では、彼らの主張する定義なのかもしれん。 ただまあ、話を聞いてる限り、こいつらは色々と無知だし、無知なことに無自覚だね。 まあもういいが。 自分が知らないだけのことをすべて間違いだと断定しているようでは上達しない。 C++erもここまでゆとり化が進んだのは残念だ。 : デフォルトの名無しさん (ブーイモ MM19-ZhOv) [] 2018/05/13(日) 19:37:46.91:5h/P5YlNM 本当に通じていたのかな? いわゆるフツーの人達は、めんどくさいから適当に話し合わせてテキトーに打ち切るものだが… : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/13(日) 20:05:09.29:tSRcUD9w0 ついでだからもう少し書いておいてやるよ。 ゆとりC++erが「C++は速い」ということにしたがるのは、C++「言語」以下の解像度がないからだ。 「C++コンパイラさえ使えばおk」になってくれてないと困るからこそ、そこに異常にこだわる。 (他言語でも同様に、低位実装を直感的に推測できない馬鹿はこの傾向がある) お前らはの結果、同じデータ構造で同じアルゴリズムを適用した物に対し、 速度差が出た場合にそれを「言語の差」と言い張るようだが、 それは明確な間違いだ。ただの不勉強でしかない。 実際、それだとそれ以上の最適化は出来ないだろ。 C出身者なら、必要ならasm書いてチューニングすることも出来る。 現在C++は失敗しつつある。 それはRustを見ても明らかだ。以下ページを見てみろ。 ttps://imoz.jp/note/rust-functions.html スマポ(キリッな連中にとってはC++よりもRustの方が明らかにいい言語だろ。(後発なので当たり前だが) C++だけにすがるのは止めとけ。 もうそういう時代じゃないし、C++はそれを満たせる言語ではない。 : デフォルトの名無しさん (ワッチョイ 85b3-k37M) [sage] 2018/05/13(日) 20:17:51.87:CI2jyTw+0 別にC++とCの宗教論争に加わるつもりはないが、 お前qsortがstd::sortより遅くなりがちな理由わかってないだろ アセンブラ使わんでも自分で書きゃCでも同等の速度は出る (というかVCの最適化にハンドアセンブルで本当に勝てるんか?こいつ) >CよりもC++の方が速くなるコードの方があり得ないと思うが。 >CのほうがC++より遅いケース出してみろ。ないから。 調べもせずにこんな決めつけを書く低レベルさ以前に これをC++のスレで書くお前はどう見てもただの荒らしだから。 : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/13(日) 20:53:01.09:tSRcUD9w0 お前は根本的に勘違いしている。 出発点は自前のコードでもいいが、逆アセンブル結果でもいいんだから、 改善できなくとも、遅くなることはあり得ない。 アセンブラを読めない君らでは、これは無理だ。 そして、遅くなる可能性の方が高いからやらないってのは、 馬鹿な君らなりの対処法としては正しい。 まあ、C++スレではC++マンセーしないと荒らしだ、ってのは理解した。 C++erがそこまで落ちぶれたのは残念だが、俺は去るよ。 : デフォルトの名無しさん (スップ Sd43-c79c) [sage] 2018/05/13(日) 20:57:13.19:HhTyaKjTd それぞれの言語の良くある使い方であれば Cの方が速いコードもC++の方が速いコードも どちらも存在する 同じ処理を同じように書けば普通は同じ速度 (ただし、一部細かい例外あり) : デフォルトの名無しさん (スップ Sd43-c79c) [sage] 2018/05/13(日) 20:59:07.22:HhTyaKjTd 一般的な使い方では C++の方が開発効率が高く Cの方がバイナリの性能が高い事が多い (もちろん逆になる要素もある) : デフォルトの名無しさん (ワッチョイ 85b3-k37M) [sage] 2018/05/13(日) 21:06:47.71:CI2jyTw+0 以前ここに書いたこともあるけど、最近ET+simd(SSE、NEONのイントリンシック)で ゲーム用の自前の線形代数ライブラリとか作ったんで >アセンブラを読めない君ら 残念ながらこれは当てはまらないよw どれだけ逆アセ読んで比較したか・・・・ >C++マンセーしないと お前が”正しい批判をしてれば”荒れてないんだよ ついでに言えば、 >「C++で書く」→カジュアルにSTLとか STLをカジュアルとか呼ぶ辺り、最近のC++界隈は 「流行に流されて自分で考えることを放棄する」という、かつてJavaの流行に荒らされた時代と 同じ愚を犯してるな、とは思うけどねぇ C++er憎し、では色々と話がおかしくなるよ : デフォルトの名無しさん (スップ Sd43-c79c) [sage] 2018/05/13(日) 21:07:47.84:HhTyaKjTd 同じ処理を同じ動作で記述出来ない例 Cの可変長配列 C++の例外処理 : デフォルトの名無しさん (ワッチョイ 23b3-pJ79) [sage] 2018/05/13(日) 21:09:03.49:pAG2qz7m0 もうアホらしくなって途中離脱したけど 例えば関数内のループで使ってるstd::unique_ptr が遅いからその部分だけ生ポインタに書き換えたら ID:tSRcUD9w0 は何言語で書いたって言うんだろ? って言うのはちょっと気にはなる まあまた明後日の長文書くだけだと思うけど w : デフォルトの名無しさん (ワッチョイ 55b3-A5aB) [] 2018/05/13(日) 21:32:59.83:Q+Wg2L410 禿は神。 禿4はバイブル。 : デフォルトの名無しさん (ワッチョイ 4bf0-k37M) [sage] 2018/05/13(日) 21:41:37.55:AL0mRZz+0 禿5マダー?(tntn : デフォルトの名無しさん (ワッチョイ 059f-YHaA) [sage] 2018/05/13(日) 22:13:01.62:tSRcUD9w0 > どれだけ逆アセ読んで比較したか・・・・ ならコンパイラ出力コードが手書きアセンブラと比べてどれだけ糞かも知ってるはずだ。 それでその言い方には矛盾を感じるけどね。 > STLをカジュアルとか呼ぶ辺り、最近のC++界隈は その発言は俺ではないが、 基本的には抽象度を上げるのは簡単にプログラミングする為であって、 「カジュアル」という表現は妥当だ。 Cみたいに全部手でゴリゴリ書く意味なんて無い。 速度が問題ない部分は出来るだけ手抜きすべきだ。STLがそれに適しているのなら使えばいい。 ただ、「STL使わなくてもどうとでもなる奴が手抜きでSTLを使う」のと、 「STLを使わないと何も出来ない連中がSTLを使う」のは全然意味が違う。 とはいえ、俺は後者が前者になるべきだとは思ってない。 ただ、後者ならC++ではなくJavaやC#を使った方が妥当だとは思うが。 君が見落としているのは、STLをカジュアルと呼ぶ連中は、 基本的に、STLを使わずに最速な実装が出来るものの、面倒なので、 「手抜き」を「カジュアル」と言い換えてごまかしているだけだということだ。 連中は君みたいにSTLが無いと何も出来ない馬鹿ではないんだよ。 > C++er憎し、では色々と話がおかしくなるよ これは違うぞ。俺は無知なくせにデタラメを言い張るゆとりは死ねと思っているだけだ。 ただし、お前が無知のままで死ぬ権利は尊重するので、 有用な情報は書かないようにするが。 : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/13(日) 22:14:29.75:VV8A9gRv0 キチガイにさわるな : デフォルトの名無しさん (ワッチョイ 4bf0-k37M) [sage] 2018/05/13(日) 22:15:45.94:AL0mRZz+0 密度が低い : デフォルトの名無しさん [] 2018/05/13(日) 22:19:54.88 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 >俺は去るよ。 : デフォルトの名無しさん (ワッチョイ 4bf0-k37M) [sage] 2018/05/13(日) 22:28:00.02:AL0mRZz+0 吐いた唾は呑ませんぞ : デフォルトの名無しさん (ドコグロ MM01-pJ79) [sage] 2018/05/13(日) 23:48:52.64:d5CbxlL9M > ならコンパイラ出力コードが手書きアセンブラと比べてどれだけ糞かも知ってるはずだ。 爺いは早めに滅びればいいのに : デフォルトの名無しさん (ワッチョイ 0504-Ca5/) [sage] 2018/05/14(月) 00:21:52.22:BWBgd2BN0 constexpr+UCS=ニューパラダイムのはずだったんだがなぁ。 コンパイルタイムは夢がある。 : デフォルトの名無しさん (ワッチョイ 2334-AkjX) [sage] 2018/05/14(月) 02:44:09.99:xNObD1oN0 昔はライブラリもそんなに充実してなかったしアルゴリズム事典とか読み漁りながら色々自作してやってたけどね しかしまぁ便利な時代になったもんだ C言語だと型が変わるだけで使い物にならなくなっていたものが大半だったけど 型に囚われないSTLライブラリは本当に有能だよ 型に囚われない部分は全部インラインになっちゃうけどね : デフォルトの名無しさん (ワッチョイ 55b3-A5aB) [] 2018/05/14(月) 13:39:06.22:0aBfdvZZ0 オンラインになるんか! : デフォルトの名無しさん (ワッチョイ 55b3-A5aB) [] 2018/05/14(月) 13:40:44.68:0aBfdvZZ0 実行可能形式はC++、スクリプトはPython。 これができる大人の選択。 : デフォルトの名無しさん (ワッチョイ cb81-Iyo3) [sage] 2018/05/14(月) 13:48:17.86:mA8jyKTp0 バッチは? : デフォルトの名無しさん (ワッチョイ 55b3-A5aB) [] 2018/05/14(月) 13:56:29.91:0aBfdvZZ0 バッチは他人からパクるので贅沢は言いませぬ。 : デフォルトの名無しさん (ワッチョイ 0508-1KvI) [sage] 2018/05/15(火) 20:21:01.90:L6tD5feN0 スタイルについての質問なんですけど、Cの文法で書けるならできるだけCで書いたほうがいいのでしょうか 上司のC++のコードがもうほんとゴリゴリのCって感じで、C++でcharの配列も無かろうよと思ったりするんですよ 確かにその方が分かる人は多くなるかもしれないですけど : デフォルトの名無しさん (ワッチョイ 6360-bFqk) [sage] 2018/05/15(火) 20:32:27.71:tHLzTn7F0 C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが 簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを 追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。 C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、 それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる: - うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が 安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、 もはや笑えるレベルを超えている) - 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに 効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の コードがその素晴らしいオブジェクトモデルに依存していて、直すためには アプリ全体を書き直さなきゃなんない。 言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに 限定するってことは、他の人がそれをめちゃくちゃにしないってことで、 ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい 「オブジェクト・モデル」のたわごとを持ちこまないってことだ。 : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/15(火) 20:34:21.22:joZeDATc0 いや別に C++で問題ない 上司の意図は知らんが パフォーマンスを考えたコードとか 互換性を考えたコードとか そういう可能性も 5chの一般的な価値観とは違って C++っぽいのが良いコードって訳じゃない : デフォルトの名無しさん (ワッチョイ 0550-c79c) [sage] 2018/05/15(火) 20:36:35.58:joZeDATc0 逆に若者はコストも考えずに安易に汎用コンテナを使ったりと思うことがある : デフォルトの名無しさん (ワッチョイ 7d7f-7wac) [sage] 2018/05/15(火) 21:03:22.33:5psId9wb0 ものによるのじゃん? メモリイメージを意識するならCスタイルの方がきれいにおさまる。 : デフォルトの名無しさん [] 2018/05/15(火) 21:09:12.04 バグを生む可能性が一切ないならCスタイルのほうがいいに決まってる : デフォルトの名無しさん (アウアウカー Sa11-9wuq) [sage] 2018/05/15(火) 21:41:08.24:h7VmA7z3a c言語って移植性あるの?まともなの? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-CqHk) [sage] 2018/05/15(火) 21:41:08.58:NlOsi0K3d 最近のC++は、std::vectorが配列に最適化されるのか? 遅いだろ : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-CqHk) [sage] 2018/05/15(火) 22:23:39.58:NlOsi0K3d C++11以降ならstd::array使うけど、覚えることがともかく多い : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-CqHk) [sage] 2018/05/15(火) 22:26:59.43:NlOsi0K3d 区間チェックしてくれる配列を簡単に指定できると嬉しいの† : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-CqHk) [sage] 2018/05/15(火) 22:31:58.98:NlOsi0K3d 例えば、[ ]を二重に書くと添字チェックしてくれるとか。どうかな。 int a[[10]]; : デフォルトの名無しさん (ブーイモ MM43-/P3g) [sage] 2018/05/15(火) 22:42:37.30:PNM8l+laM atじゃだめなんか? : デフォルトの名無しさん (ワッチョイ 0504-Ca5/) [sage] 2018/05/15(火) 22:43:36.39:sqV4cudU0 例外投げるインデクサと投げないインデクサ両方ありますから。 : デフォルトの名無しさん (ワッチョイ e34c-Ci6B) [sage] 2018/05/15(火) 22:46:39.90:IhUmYIjB0 プロパティONにするとチェック有効で : デフォルトの名無しさん (ワッチョイ 2334-AkjX) [sage] 2018/05/15(火) 22:46:50.65:IPNyvhtL0 オブジェトCを彷彿させるので嫌です : デフォルトの名無しさん (ワッチョイ 8d79-QK6s) [sage] 2018/05/16(水) 03:32:46.81:gRCAgj/W0 attributes構文と紛らわしい。 : デフォルトの名無しさん (ワッチョイ 057f-Je+M) [] 2018/05/16(水) 23:25:18.23:cmH84vOv0 arrayはなんで[]でチェックしてくれないの : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-Iyo3) [sage] 2018/05/16(水) 23:28:49.70:axtQyUCZ0 ゼロコストの原則 : デフォルトの名無しさん (ワッチョイ 0db3-A9b3) [] 2018/05/17(木) 02:43:52.94:vEqyw0xg0 C++のコストの大部分は例外に起因するらしい。 Cでコンパイルできるコードであっても、C++としてコンパイルするとバイナリが肥大化する。 その原因は例外。 : デフォルトの名無しさん (ワッチョイ 5550-D7Hy) [sage] 2018/05/17(木) 07:10:31.59:AhjFsLsi0 x86-64だとゼロコストだよ : デフォルトの名無しさん (ワッチョイ 758a-ZY9B) [sage] 2018/05/17(木) 08:34:28.77:FVFi5bM10 どこにコストが消えたんだろ サボってるの? : デフォルトの名無しさん (ワッチョイ da33-RYnA) [sage] 2018/05/17(木) 09:12:53.49:UhXGat7x0 要出典。 : デフォルトの名無しさん (スップ Sdfa-D7Hy) [sage] 2018/05/17(木) 14:51:21.43:T9EnGAyld x86-32だと割り込み発生時に対応出来るように 関数コールの度にスタックに情報を埋め込む x86-64はこれが不要 割り込み処理がなければコストはかからない : デフォルトの名無しさん (ワッチョイ 0db3-A9b3) [] 2018/05/17(木) 18:56:39.80:vEqyw0xg0 組み込み開発の株式会社○○みたいなサイトで読んだんだけどな。 なかなかためになる内容だったしブックマークしとくんだった。 見つけたらリンクくれ。 : デフォルトの名無しさん (ワッチョイ 0db3-A9b3) [] 2018/05/17(木) 18:58:28.25:vEqyw0xg0 俺の見解では、例外にコストが割かれるなら、それは必要なコストだと思うんだよな。 : デフォルトの名無しさん (ワッチョイ daeb-yA46) [sage] 2018/05/17(木) 19:43:22.14:WDNJ9RfY0 元記事消えてるっぽいからアーカイブだけど ttp://bytepointer.com/resources/pietrek_amd_x64_primer.htm Windowsの例外機構がx64ではスタックベースからテーブルベースの通過するだけならゼロコストなものに変わった ただしバイナリサイズは増える : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-HRP5) [sage] 2018/05/17(木) 19:46:45.63:oI1zc+Au0 例外を使うならコストがかかるのは当然なんだが、 例外が通過しないかもしれないのにそこかしこで情報を積まないといけないのは良くないってことなんよ。 そんでまあ例外を投げたときだけにコストが生じる方式がいいよねっていう話。 : デフォルトの名無しさん (ワッチョイ 5550-D7Hy) [sage] 2018/05/17(木) 20:29:27.85:AhjFsLsi0 例外が発生しない時のコストなんてゴミみたいなもんだけどな : デフォルトの名無しさん (ワッチョイ 5550-D7Hy) [sage] 2018/05/17(木) 20:30:03.35:AhjFsLsi0 イヤなら64bitで組みなさい : デフォルトの名無しさん (ワッチョイ 0db3-A9b3) [] 2018/05/17(木) 20:38:19.60:vEqyw0xg0 64ビット化するとサイズが1.5倍になるらしいけどな。 : デフォルトの名無しさん (ワッチョイ 5550-D7Hy) [sage] 2018/05/17(木) 20:40:58.24:AhjFsLsi0 今時コードのサイズなんて問題にならんだろ その代わりに得るものは大きい : デフォルトの名無しさん (ワッチョイ 0db3-A9b3) [] 2018/05/17(木) 21:11:41.72:vEqyw0xg0 1.5倍って40sの可愛い少女が60sのオバはんになるってことではないだろか。 さあどっちか選ぶんだ。 : デフォルトの名無しさん (ワッチョイ 2ee7-+uOs) [sage] 2018/05/17(木) 21:42:32.65:53fi3uKJ0 どうしても対応し続けないといけない32bitのレガシーデバイスがあるなら頑張って そうじゃなけりゃもう32bitなんて捨てろ : デフォルトの名無しさん (ドコグロ MMc2-hlLb) [sage] 2018/05/17(木) 21:43:14.24:egaCGTtIM それ得るもの無さすぎないか? : デフォルトの名無しさん (ワッチョイ 0db3-A9b3) [] 2018/05/17(木) 21:57:59.98:vEqyw0xg0 60kgのオッサンになるよりはいいだろ。 : デフォルトの名無しさん (ワッチョイ b605-NEzo) [sage] 2018/05/17(木) 22:02:48.61:/ukQRMvg0 32bitがレガシーだあ? どこで吹き込まれたか知らんが 騙されやすいやつだな : デフォルトの名無しさん (ワッチョイ 5a68-RYnA) [sage] 2018/05/17(木) 22:20:15.79:yYAGBjqQ0 クラスのconst配列メンバをコンストラクタで初期化するにはどうしたらいいでしょうか? class A { const double array[]; void A( double &temp[] ) : array(temp) { } }; これはコンパイルでエラーが出てダメでした : デフォルトの名無しさん [] 2018/05/17(木) 22:32:37.31 できないからあきらメロン 素直にconst外してアクセサで制御するか、vector使うかしとけ テンプレートとかを駆使して無理に実現しようと試みるのはいかにも頭が悪いし時間の無駄 : デフォルトの名無しさん (ワッチョイ ee9b-XwNb) [sage] 2018/05/17(木) 22:33:23.35:MPVDtJCy0 constの問題というよりサイズが決まってないからダメなんじゃないの? : デフォルトの名無しさん [] 2018/05/17(木) 22:34:24.00 ここ3年ほど32bitの組み込み機器に触ったことない : デフォルトの名無しさん (ワッチョイ 2ee7-+uOs) [sage] 2018/05/17(木) 22:37:16.99:53fi3uKJ0 今はほとんど64bitの上で無理矢理32bit動かしてるんだよ ネイティブ32bitCPUなんて化石 : デフォルトの名無しさん (ワッチョイ 5a68-RYnA) [sage] 2018/05/17(木) 22:51:21.67:yYAGBjqQ0 了解です、constは諦めマスカット どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんで サイズは未定にしておきました : デフォルトの名無しさん (ワントンキン MM25-1jw3) [sage] 2018/05/18(金) 17:13:18.87:8ieomEvbM vc++のマルチコアのオプティマイズなんて甘々だから余裕で 勝てるけどなぁ。 あんなのに負ける人もいるって、世の中広いなぁ(棒) : 771 (ワッチョイ b133-NTEn) [sage] 2018/05/18(金) 18:23:15.07:G5mHfuQa0 アホだろお前 : デフォルトの名無しさん (ワッチョイ 6e2a-+uOs) [sage] 2018/05/18(金) 18:33:25.05:pNV6CZfO0 そりゃあ頑張れば勝てるだろう コーディングコストと可読性の犠牲に見合うほど速くなるかどうかは別問題だがね : 771 (ワッチョイ 95b3-NTEn) [sage] 2018/05/18(金) 18:57:13.66:jCVxhDbN0 VCもそうだけど大体のコンパイラは並列化や自動ベクタライズは強くないと思う 古くからある機能とそうでないものでは最適化に差が出るのは当然 だからこそSIMD使うときはみんなイントリンシック命令使ってるのであって : デフォルトの名無しさん (スップ Sdda-D7Hy) [sage] 2018/05/18(金) 20:11:41.99:Xj+Uy2RAd て誰に対してのレス? : デフォルトの名無しさん (ワッチョイ 4623-XbkE) [sage] 2018/05/18(金) 21:20:25.60:TsUe9Yho0 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以降。 >>どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんでサイズは未定にしておきました 要素数が決まってないとコンパイル時に困るので、テンプレートクラスにしちゃったけれど… : デフォルトの名無しさん (ワッチョイ 4623-XbkE) [sage] 2018/05/18(金) 22:05:36.49:TsUe9Yho0 あーいや、 は配列を渡して初期化したいのか… ↑じゃだめだ だいぶ別物になっちゃった。 ttps://wandbox.org/permlink/gUlWoKLb3QfigsQk : デフォルトの名無しさん (ワッチョイ b133-NTEn) [sage] 2018/05/18(金) 22:33:37.26:G5mHfuQa0 参考にしてみた ttps://wandbox.org/permlink/3asRA3QSPQXmmn8l C++17ならヘルパー不要にはなる・・・(コンストラクタに与えた引数から推定 けどどっちにしても配列数可変にはできない ていうか配列の参照とか初めて使ったw : デフォルトの名無しさん (ワッチョイ 9aa2-NEzo) [sage] 2018/05/19(土) 00:03:26.14:9PVep4LN0 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 } : デフォルトの名無しさん (ワッチョイ da34-+iZv) [sage] 2018/05/19(土) 00:10:45.61:WRHfxyyT0 糞面倒だな : デフォルトの名無しさん (アウアウウー Sa39-RYnA) [sage] 2018/05/19(土) 00:15:37.45:VIvIbG0Fa アンチパターンを生み出すための新機能が次々出てくるのがc++だ! : デフォルトの名無しさん (ワッチョイ da34-+iZv) [sage] 2018/05/19(土) 00:33:17.81:WRHfxyyT0 こういうのからiostreamみたいになってゆくんだろうな : デフォルトの名無しさん (ワッチョイ 769a-qaY6) [sage] 2018/05/19(土) 03:41:10.01:BMt6S/TK0 つか引数にconst double(&temp)[]って何だと渡せるのこれ ()ないとエラー出るし : デフォルトの名無しさん (ワッチョイ 6e2a-+uOs) [sage] 2018/05/19(土) 06:54:38.61:KlOWaW480 何も渡せないよ 配列数のない配列型はどんな文脈でも不完全型だからその型のオブジェクトは存在し得ない : デフォルトの名無しさん (ワッチョイ dacf-pX8m) [sage] 2018/05/19(土) 07:39:54.12:03NPLOb40 VS2017 15.7.1のVCのReleaseモードだとtemplateの部分が赤の下波線になるな Debugモードにするとなぜか消える そしてReleaseモードはエラーが出ているのにコンパイルして実行可能 バグじゃね : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-HRP5) [sage] 2018/05/19(土) 12:37:22.83:WMhjioR90 仮引数として表れる場合はポインタに調整されるんじゃなかったっけ? : デフォルトの名無しさん (ワッチョイ 6e2a-+uOs) [sage] 2018/05/19(土) 13:11:36.50:KlOWaW480 配列型はね 配列の参照型はされない : デフォルトの名無しさん (ワッチョイ da34-+iZv) [sage] 2018/05/21(月) 09:24:48.82:SHQ/MEmo0 引数で渡す場合は配列自体が参照型だもんな : デフォルトの名無しさん (ワッチョイ b632-NEzo) [sage] 2018/05/21(月) 21:45:00.90:SySmX4Pj0 配列への参照ってのはあるんだけどね template <typename T, int N> N size(T (&)[N]) { return N; } : デフォルトの名無しさん (ワッチョイ b632-NEzo) [sage] 2018/05/21(月) 21:45:22.62:SySmX4Pj0 あ、ミスった わかる人笑ってw : デフォルトの名無しさん (ドコグロ MMa5-/8Ls) [sage] 2018/05/22(火) 10:34:44.57:QHYj3MXfM > バグじゃね 未定義ならコンパイルできて実行できると言うのも規格に準拠してる正しい動作 : デフォルトの名無しさん (ワッチョイ dacf-pX8m) [sage] 2018/05/22(火) 17:07:12.03:CbgK21am0 見当違いのレスだな DebugとReleaseでエディタの動作が首尾一貫してないって言ってるんだがな 15.7.2が来たから入れてみる : デフォルトの名無しさん (ドコグロ MMfa-/8Ls) [sage] 2018/05/22(火) 17:37:39.23:LzyusK+ZM 普通の知能を持ってたら > コンパイルして実行可能 に突っ込まれてることぐらいわかるだろうに... : デフォルトの名無しさん (ワッチョイ dacf-pX8m) [sage] 2018/05/23(水) 09:57:56.51:NT2O+rqe0 15.7.2にしたらReleaseでも赤い波線出なくなったぞ エディタのバグが直ったようだ : デフォルトの名無しさん (ワッチョイ 758a-ZY9B) [sage] 2018/05/23(水) 10:14:09.85:2zsXYckB0 の3行目は無かったことにすると : デフォルトの名無しさん (ワッチョイ dacf-pX8m) [sage] 2018/05/23(水) 10:39:06.93:NT2O+rqe0 だから「エディタの」バグと書き忘れただけなのにお前らしつこいな DebugモードでもReleaseモードでもコンパイルして実行できてたんだから : デフォルトの名無しさん (ドコグロ MMa5-/8Ls) [sage] 2018/05/23(水) 12:24:31.22:fJYH1ZEbM 書き忘れとか知らんがな w そもそもエディタのバグと言うなら三行目は元々不要 余計なことを書いて突っ込まれるとか低能にありがちな行動ってだけ : デフォルトの名無しさん (アウアウウー Sa39-zBOy) [sage] 2018/05/23(水) 12:33:07.54:8Hna4W5Ya 気にするな。俺にはの方がよほど的はずれなことを言ってると思うよ。 : デフォルトの名無しさん (ドコグロ MMa5-/8Ls) [sage] 2018/05/23(水) 12:40:43.11:fJYH1ZEbM 同じようなレスを書いてループさせるのも低能にありがちな行動 : デフォルトの名無しさん (ブーイモ MMfa-SJSt) [sage] 2018/05/23(水) 13:02:27.39:nSCJSr52M エラーの話なのになぜか未定義とか言い出す奴が : デフォルトの名無しさん (ドコグロ MMa5-/8Ls) [sage] 2018/05/23(水) 15:37:22.12:fJYH1ZEbM 未定義の意味を理解してないなら絡んでこない方がいいぞ : デフォルトの名無しさん (ワッチョイ b678-NEzo) [sage] 2018/05/23(水) 17:20:05.74:CpOh1zRO0 エラー 警告 未定義 不適格 ↑ 混同するやつが後を絶たないな : デフォルトの名無しさん (ワッチョイ 89fa-9WOx) [] 2018/05/23(水) 19:15:29.66:Au5e7VGg0 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 V9EWM : デフォルトの名無しさん (ワッチョイ b678-NEzo) [sage] 2018/05/23(水) 21:13:20.83:CpOh1zRO0 しょーもね : デフォルトの名無しさん (ドコグロ MMa5-/8Ls) [sage] 2018/05/23(水) 21:13:21.12:fJYH1ZEbM この文脈でエラーとか警告とか言い出す時点でアホ丸出しなんだが...w : デフォルトの名無しさん (ワッチョイ daeb-yA46) [sage] 2018/05/23(水) 22:07:04.14:lbYCZF160 VisualStudioはインテリセンスとコンパイルに使うコンパイラが違う ちょっと設定変えると、とてつもなくエラーが出るのにコンパイルは通るという事態は稀に良くある : デフォルトの名無しさん (ブーイモ MM1d-RIxT) [sage] 2018/05/24(木) 12:25:45.78:hqF4m+XgM : デフォルトの名無しさん (ワッチョイ 5146-vwA5) [sage] 2018/05/24(木) 23:58:30.63:XccjINB00 あるコンテナaとコンテナbを連結?するようなクラス(イテレータ)を作りたいんだが イメージとしてはa.begin()からa.end()-1までいったら次はb.begin()になるようなやつを思い浮かべてるんだけど どんな風につくればよいかアドバイスください : デフォルトの名無しさん (ワッチョイ 93a2-vxiR) [sage] 2018/05/25(金) 00:18:38.25:HgmGhgcw0 concat_iteratorでググるとそれっぽい実装がチラホラ : デフォルトの名無しさん (バットンキン MM25-vADk) [] 2018/05/25(金) 10:18:09.43:SC+wi2VoM C++で2Dのwindowsで動くゲーム作ろうと思っているのだけど、ライブラリって何使えばいいんだ? : デフォルトの名無しさん (ブーイモ MM1d-RIxT) [sage] 2018/05/25(金) 10:18:58.21:AT66E0O7M GDI : デフォルトの名無しさん (ワッチョイ 8b9a-2NJ2) [sage] 2018/05/25(金) 11:33:06.12:JXMMrzE70 direct2d : デフォルトの名無しさん [] 2018/05/25(金) 12:11:02.95 Unity : デフォルトの名無しさん (ワッチョイ 59b3-x/qq) [sage] 2018/05/25(金) 12:19:23.12:lIIOH/4a0 Opengl : デフォルトの名無しさん (アウアウウー Sadd-DqgS) [sage] 2018/05/25(金) 12:52:26.94:s00mTA6Oa DirectX Tool Kit : デフォルトの名無しさん (ワントンキン MM25-RIxT) [sage] 2018/05/25(金) 14:11:55.60:7mkguDclM cairo : デフォルトの名無しさん (ワッチョイ 39a9-vADk) [] 2018/05/25(金) 18:33:18.15:vSqqKkie0 いっぱいあるなー、一通り試してみようかな : 放置された蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-s+lB) [sage] 2018/05/25(金) 18:37:43.90:mtapFpQed 全部は時間的に無理。 : デフォルトの名無しさん (アウアウウー Sadd-Ockd) [sage] 2018/05/25(金) 19:06:13.22:O4zlrz7ka DirectX Tool Kit一択だとおもうが : デフォルトの名無しさん (ワッチョイ 9381-DqgS) [sage] 2018/05/25(金) 19:16:41.38:BiCg0uer0 OpenGLなんてのは? : デフォルトの名無しさん (ワッチョイ fb9b-bqqt) [sage] 2018/05/25(金) 19:17:34.72:el+ngQt20 windowsに限定するならopneGLにする意味は薄い : デフォルトの名無しさん (ワッチョイ 39a9-vADk) [] 2018/05/25(金) 23:32:47.23:vSqqKkie0 DirectX tool kit なるものは一般的なDirectXの上位互換みたいな捉え方でおk? : デフォルトの名無しさん (ワッチョイ d904-zX0R) [sage] 2018/05/25(金) 23:41:23.37:9e9u/b+G0 よこからだけど、これ面白そう。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b6f-DqgS) [sage] 2018/05/26(土) 01:45:05.97:r5N0xqhb0 Siv3D とかも楽に使えると思う。 (3D という名前がついてるけど 2D もいける) : デフォルトの名無しさん (ワッチョイ 7923-Y0oy) [sage] 2018/05/26(土) 09:49:22.16:Gw/MbzDj0 今の時代なら cocos 2d とかモバイルでも使えるライブラリ使った方がいいんじゃないのか : デフォルトの名無しさん (スプッッ Sd33-PpUk) [] 2018/05/26(土) 10:01:48.35:KfOwUuVld c++ならアンリアルエンジンで行こうぜ : デフォルトの名無しさん (ワッチョイ d993-xy05) [sage] 2018/05/26(土) 15:38:59.11:dTnlF+1t0 あれESCキーが消えるから… : デフォルトの名無しさん (アウアウウー Sadd-vxiR) [sage] 2018/05/29(火) 08:17:20.26:kgP2LOmLa string::size_type についてですが、 size_type の前についている 「string::」 というのは何ですか? : デフォルトの名無しさん (アウアウウー Sadd-vxiR) [sage] 2018/05/29(火) 08:20:28.98:kgP2LOmLa 名前空間ではないようですし。 : デフォルトの名無しさん (ドコグロ MM3d-Lo1h) [sage] 2018/05/29(火) 08:28:38.63:HMjaHK3IM 静的メンバ関数 でぐぐれ : デフォルトの名無しさん (アウアウウー Sadd-vxiR) [sage] 2018/05/29(火) 09:38:09.06:kgP2LOmLa ありがとうございます。 string::size_type は companion type というものらしいのですが、 この companion type とは何でしょうか? : デフォルトの名無しさん (ワッチョイ 7923-Y0oy) [sage] 2018/05/29(火) 12:33:02.70:WLsT9puy0 メンバ関数の引数や戻り値、メンバ変数などで使用するためにクラススコープで定義された型のこと クラス(この場合はstd::string)を利用する側は、 実際にはその型がなんであるかを知る必要なく 文字列のサイズの型としてstring::size_type を用いることができる 参考 ttps://stackoverflow.com/questions/41471741/string-companion-types : デフォルトの名無しさん (アウアウウー Sadd-vxiR) [] 2018/05/29(火) 13:47:00.51:kgP2LOmLa ありがとうございました。 : デフォルトの名無しさん (ワッチョイ 89ab-wW0t) [sage] 2018/05/29(火) 23:46:46.84:vO9YU0hS0 std::threadでサブスレッドで処理をしているのですが、処理をキャンセルするためthreadをdetachすると メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。 サブスレッドではnewでのリソース確保もしていないので理由がわからないです。 detachする際にはjoinableである以外に条件があるのでしょうか。 : デフォルトの名無しさん (ブーイモ MM33-wlFZ) [] 2018/05/29(火) 23:59:57.19:6Y/6D3P7M スレッドローカル記憶域とか破棄されたあとにアクセスしてんじゃないの? : デフォルトの名無しさん (ワッチョイ 13eb-Jwyk) [sage] 2018/05/30(水) 00:33:26.79:4+P0NcT60 std::threadのdetachってスレッドを手放すだけでキャンセルはしないのでは ラムダ式で処理を渡してるなら、ローカル変数の参照キャプチャとかしてるない? : デフォルトの名無しさん (ワッチョイ c9b3-UDci) [] 2018/05/30(水) 00:33:44.46:D8xt/f/p0 detachしてもスレッドは動き続けますが。 : デフォルトの名無しさん (ワッチョイ 7923-Y0oy) [sage] 2018/05/30(水) 00:56:37.13:OvmXW6ID0 一般にスレッドのキャンセルは難しいので適当に処理を終わらせてjoinするのが良いも思う : デフォルトの名無しさん (ワッチョイ d904-28pY) [sage] 2018/05/30(水) 01:10:14.80:K2528e3P0 ttps://ideone.com/3LDXGx 質問です。定期的に同じ関数をスレッドで起動するクラスを作りました。 んでコード中のここ無駄って書いてある行を削除する方法はありませんか。 開発はVCでやってますが、GCCでも通ればいいなーと思っています。 : 897 (ワッチョイ 89ab-wW0t) [sage] 2018/05/30(水) 02:51:38.91:gP4Z92jH0 すみません。言葉足らずでした。 メインスレッド:GUI、サブスレッド:既存のライブラリでデータ補間の重い処理 を担当していて、途中でデータ補間パラメータを変更したくなった場合 キャンセルボタンを押してやり直す、という処理を考えています。 CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは 構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。重い処理のループの中にキャンセル用フラグでも用意できればキャンセル通知後 ループを抜けて速やかにjoinするところまで到達させる等の方法があるのですが、 既存ライブラリなのでそうはいかず諦めてdetachしようと考えています。 そのまま走り続けるだけだから結果を回収せずほっておけば良いのかと思ってましたが 甘かったみたいです。 thread_localは使っていないです。 アドバイスありがとうございます。関数オブジェクト作ってキャプチャは使っていないです。 スレッドを平和理に終了させる方法はなさそうなのでdetachできなければ諦めてjoinするしかなさそうですね… とりあえず最小の再現例を作ってみることにします。 : デフォルトの名無しさん (ワッチョイ 31c3-4/py) [sage] 2018/05/30(水) 09:53:15.07:eD7a+sCF0 重い処理の方を別プログラムのプロセスにしちゃって止めるときはブチ殺すのがシンプルで良さそうに見える : デフォルトの名無しさん (ワッチョイ d904-28pY) [sage] 2018/05/30(水) 17:43:48.31:K2528e3P0 async つかえ。 wait_forっていう関数がプロミスにある。 : デフォルトの名無しさん (ワッチョイ d904-28pY) [sage] 2018/05/30(水) 17:44:50.87:K2528e3P0 たのんますー。 : デフォルトの名無しさん (ワッチョイ d904-28pY) [sage] 2018/05/30(水) 17:50:39.57:K2528e3P0 基本的にstd::threadでキャンセルは不可能。 自分でそういう機構を汲んでやらないといけない。 whileの実行をキャンセルするbool変数つっこむとか。 それでもクリティカルパスの実行は避けられない。 : デフォルトの名無しさん (ワッチョイ d950-UKFX) [sage] 2018/05/30(水) 18:55:49.81:DJsvI6z80 強引にスレッドを殺すと、 そのスレッドが確保してたリソースが解放されないかもしれないぞ メモリであったりセマフォだったりハンドルだったり ちゃんと終了処理を追加しないとダメだよ : デフォルトの名無しさん (ワッチョイ 1323-Y0oy) [sage] 2018/05/30(水) 19:05:49.61:EimB82cz0 そのスレッドが使用するメモリ等のリソースを全て スレッド終了まで保持していても >メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。 となるなら、そもそもそのライブラリがスレッドセーフじゃないのかもしれない。 式に別プロセス化するのが一番なのかもね : デフォルトの名無しさん (ワッチョイ d904-28pY) [sage] 2018/05/30(水) 22:01:02.21:K2528e3P0 ぷぅうううううううううりいいいいいいいぃいいいいいいいいいずへーーーーーーーるぷみーーーーーーーーーー。 : デフォルトの名無しさん (ワッチョイ 4a7e-msj4) [sage] 2018/05/31(木) 16:11:24.94:W0WQ5cWo0 関数の中にif(cancel)return;みたいなのを大量に仕込んで外からフラグを立てて止めろ : デフォルトの名無しさん (ワッチョイ 457e-msj4) [sage] 2018/05/31(木) 19:02:31.60:OT8Sfmwc0 基本的にはフラグで止めるか別プロセスで実行するのが定石だが 質問者は >CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは >構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。 と言ってるからなぁ : ◆QZaw55cn4c (ワッチョイ da60-667V) [sage] 2018/05/31(木) 20:27:20.65:4k9lsrlf0 join なんて、カラクリが良く分からないものを、よく使う気になるなぁ 私なら、チャイルドプロセスが自爆するように、陽に記述するなぁ : デフォルトの名無しさん (ワッチョイ 7a34-6ZIh) [sage] 2018/05/31(木) 20:40:15.15:nmebeT/e0 joinが嫌ならdetachすればいいのよ パンがなければお菓子をたべればいいのよ : デフォルトの名無しさん (ワッチョイ 169f-msj4) [sage] 2018/05/31(木) 20:53:09.91:VgZC2OSf0 世の中には信じられないメンタリティの人がいるもんだなあ : デフォルトの名無しさん (ワッチョイ 7a23-XTxf) [sage] 2018/05/31(木) 21:03:58.91:3a+XHa0i0 join のカラクリは何も難しいことないと思うが : デフォルトの名無しさん (ワッチョイ 7a34-6ZIh) [sage] 2018/05/31(木) 21:13:34.61:nmebeT/e0 標準ライブラリが嫌ならpthread使えばいいのよ : 897 (ワッチョイ bdab-b3FY) [sage] 2018/05/31(木) 21:49:57.28:VY6h/Th40 いろいろアドバイスありがとうございます。 どうもdetachした後に局所変数が確保されるとスタックを破壊してしまうようで、 局所変数を確保する前に氏のいうようにif(cancel)return;入れるとLinuxでは落ちなくなりました。 ですが、windowsでは改善せず諦めました。atomicにするのものも面倒ですし。 結局キャンセルするときは結果を回収せず、さらに別スレッド立ち上げてjoinすることで メインスレッドのGUIに制御が戻るようにしました。長期的には別プロセス化するしかなさそうですね。 ありがとうございました。 : デフォルトの名無しさん (ドコグロ MM19-/PkI) [sage] 2018/05/31(木) 21:53:20.51:TwfgGFWOM > 既存ライブラリなのでそうはいかず って書いてあるのに,,とかバカなら黙っとけよ... : デフォルトの名無しさん (ワッチョイ 7abd-h81y) [sage] 2018/05/31(木) 22:35:57.56:EV/maKH/0 913はスレッドを自爆させた後joinしないのであろう… : デフォルトの名無しさん [] 2018/05/31(木) 22:51:40.57 子スレッドが一つならjoinで待っててもいいけど、複数個になったら無限ループで待つよね : デフォルトの名無しさん (ワッチョイ 7abd-h81y) [sage] 2018/05/31(木) 22:52:12.55:EV/maKH/0 ていうか「重い処理かつ終了に時間が要するスレッド」複数個を所有するサーバみたいなスレッドを一発噛ませて、 パラメータを変えたくなったら「現行スレッド停止」と「新しいパラメータでのスレッド起動」をサーバに対して指令するつくりにすれば 良い この場合は「重い処理かつ終了に時間が要するスレッド」が終了するまで誰も待つ必要はなく(※サーバ終了時は除く 、サーバみたいなスレッドは、クライアントから「新しいパラメータでのスレッド起動」コマンドを受けたときおもむろに 「死んでる(再利用できる)スレッドはどれかいな〜、」とタイムアウト0秒のjoinでポーリング式にサーチすれば良い 現行スレッドが死ぬまでの間現行スレッドと新たに起動するスレッドが並列に動くことになるが >CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは 構わない ということですしおすし、 : デフォルトの名無しさん (ワッチョイ 7abd-h81y) [sage] 2018/05/31(木) 22:56:14.51:EV/maKH/0 ウィンドーズならWaitForMultipreObjects()とかその亜種で複数の終了待ちができうる そうでなくともイベントフラグの同時待ちはだいたいどんなマルチタスクOSでもできるから それを使って類似のしくみを作れうる、。 : デフォルトの名無しさん (ワッチョイ daf9-xIz4) [sage] 2018/05/31(木) 23:21:33.93:i2WXWbd70 できうる、作れうるって日本語的におかしいだろう : デフォルトの名無しさん (ワッチョイ f58d-InwY) [] 2018/06/01(金) 04:04:16.74:p3jBadVq0 ウインドーズとか何か別物感あるし、multipleのスペルもおかしいし大丈夫か : デフォルトの名無しさん (ワッチョイ 7a34-6ZIh) [sage] 2018/06/01(金) 04:08:40.92:ampOWGNn0 色々なところで糞が露呈している それがWindows : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e6f-NLsb) [sage] 2018/06/01(金) 04:11:32.11:uW2rQW//0 デザインとしては Windows の方が現代的なんだけど、 色んなものが POSIX を基本にしたデザインになってるから噛み合わないんよなぁ。 : デフォルトの名無しさん (ワッチョイ 7a34-6ZIh) [sage] 2018/06/01(金) 04:16:04.83:ampOWGNn0 POSIXに準拠できないWindowsがどうかしている : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e6f-NLsb) [sage] 2018/06/01(金) 04:22:16.25:uW2rQW//0 昔は POSIX 準拠にしてたよ。 アメリカの政府が採用するのに POSIX を要求してたみたいで、仕方なくやったって話。 だけど、基本的なモデルが違うものに API だけ接ぎ木してもなぁ。 : デフォルトの名無しさん (ワッチョイ 4a7e-msj4) [sage] 2018/06/01(金) 04:43:45.31:SICoZSIN0 windowsでpthread使うたびにトラブル起こってつら : デフォルトの名無しさん (ブーイモ MMbe-k5Cw) [sage] 2018/06/01(金) 08:14:44.74:WJ5uQBEIM 他に条件があるならともかく、普通にjoinで待てばよくね? : デフォルトの名無しさん (ブーイモ MMbe-k5Cw) [sage] 2018/06/01(金) 08:27:54.49:WJ5uQBEIM joinしたら再利用できないだろ : デフォルトの名無しさん [] 2018/06/01(金) 08:30:22.24 別に、joinで済むならjoinでいいんじゃね : デフォルトの名無しさん (ワッチョイ f523-XTxf) [sage] 2018/06/01(金) 09:15:20.19:oHKnNuZr0 キャンセルしたくなるほど長い処理ならスレッドキューイングする利点はない もちろんしたいならしてもいい : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 09:35:53.16:uCsHgk1n0 C++を使うなら、Windowsでいいんじゃないの。 Clang、gcc、clと主要なコンパイラが動く貴重な環境だし。 文書を残さないといけないからアプリも必要。 図を描くのにvimでSVG書くって人もいるけど、流石にそれは労力の使い方を間違えてる。 : デフォルトの名無しさん (ブーイモ MMbe-o2EZ) [] 2018/06/01(金) 10:01:00.93:oDn7ey18M サブスレッドでjoinして結果を使わない、というのとデタッチするのとどう違うんやろな。デタッチってなんのメリットあるんやろか。 : デフォルトの名無しさん (ワッチョイ f523-XTxf) [sage] 2018/06/01(金) 10:15:36.25:oHKnNuZr0 自分で書いてる通り結果を使わなくて終了も待ちたくないなら join せずデタッチ。 メリットはリソース(スレッドハンドルなど待ち合わせ用リソース)の自動的な解放くらいか。 : デフォルトの名無しさん (アウアウウー Sa09-msj4) [] 2018/06/01(金) 11:41:29.12:sIQxQP9sa 連結リストのクラス list があります。 addFirst removeFirst などのメンバ関数があります。 この list を継承して、 stack クラスを作ります。 stack クラスにはメンバ関数 push と pop があります。 push の中で addFirst を呼んでいます。 pop の中で removeFirst を呼んでいます。 stack クラスのインスタンスからは、 list クラスの addFirst, removeFirst などを 利用不可としたいのですが、どうすればいいのでしょうか? : public list と継承するともちろんダメです。 : private list と継承すると push の中で呼んでいる addFirst が使えなくなってしまいます。 どうすればいいのでしょうか? : デフォルトの名無しさん (スップ Sd7a-2KSg) [sage] 2018/06/01(金) 11:47:52.19:1LiDvq+rd protect : デフォルトの名無しさん [] 2018/06/01(金) 11:55:31.26 friend : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 11:55:48.39:uCsHgk1n0 ・stack : protected listとして、必要なメンバをstackで明示的に公開する。 ・listとstackのポインタに互換性がなくなる。 : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 11:58:45.22:uCsHgk1n0 ・assert、throw等で警告するだけのaddFirst、removeFirstをstack側に作りオーバーライドし、規約で使うなと言っておく。 ・非常にダサい。 : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 12:00:33.78:uCsHgk1n0 ・基底クラスbasic_listを設け、そこからlistとstackを別に派生する。 : デフォルトの名無しさん (ワッチョイ 4a7e-msj4) [sage] 2018/06/01(金) 12:12:54.27:SICoZSIN0 釣りか? MSYSがあるからなんとか我慢して作業できるが 仕事以外でそんな苦痛を受けながらプログラミングなんかしたくはない : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 12:31:43.05:uCsHgk1n0 wslでおk。 : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 12:33:20.56:uCsHgk1n0 wslを有効にしてコルタナにウブンツと言えばすぐ使えます。 : デフォルトの名無しさん (ワッチョイ 4a7e-msj4) [sage] 2018/06/01(金) 12:41:08.30:SICoZSIN0 wslでWindowsネイティブなバイナリ作れんの? : デフォルトの名無しさん (ドコグロ MMe2-/PkI) [sage] 2018/06/01(金) 12:43:01.01:Iz+jFShBM > 仕事以外でそんな苦痛 でもどんな苦痛なのかは書けない w : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 12:44:36.05:uCsHgk1n0 さあどうだろ? Linux側からWindowsのファイルは読めるけど。 環境設定が大変そうだな。 逆にWindows側からLinuxのファイルを直接変更したらだめらしい。 : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 12:47:41.68:uCsHgk1n0 俺のおすすめの使い方は、Windowsバイナリはcl、Linuxバイナリはwsl上のgccで作る。 開発環境はVisual Studio2017、CMakeプロジェクトを使う。 これだけでWindowsとLinux両方対応できる。 : デフォルトの名無しさん (ワッチョイ 4a7e-msj4) [sage] 2018/06/01(金) 12:51:07.74:SICoZSIN0 それ良さそうだな 今度試してみる : デフォルトの名無しさん (アウアウウー Sa09-msj4) [sage] 2018/06/01(金) 13:01:33.50:sIQxQP9sa ありがとうございました。 Macを使っている人はいませんか? コンピュータサイエンティストって大抵Macのノートパソコンを使っているイメージがあります。 : デフォルトの名無しさん (ラクッペ MM35-HOfo) [sage] 2018/06/01(金) 13:11:39.88:pUOZzX0iM mac使ったところでmacしか使えないだけ 本物になりたいならシェアが高いウインドゥスを使え もしくはLinux : デフォルトの名無しさん (ワントンキン MM8a-75sl) [sage] 2018/06/01(金) 13:29:21.95:A9MSzynoM 別に補陀落渡海しても良いのよ : デフォルトの名無しさん (ワッチョイ d58a-/WEz) [sage] 2018/06/01(金) 13:30:34.27:STCtC+aF0 Macの内部はUnixだから : デフォルトの名無しさん (ブーイモ MMbe-k5Cw) [sage] 2018/06/01(金) 16:26:14.37:WJ5uQBEIM 念の為、標準ライブラリにlistもstackもあるからね。 あと標準ライブラリのlistは継承して使えるように設計されてないからね : デフォルトの名無しさん (スップ Sd7a-2KSg) [sage] 2018/06/01(金) 18:47:58.65:U3fjUVmpd リスト構造のスタックなんて簡単なんだからゼロから作っちゃえば? : デフォルトの名無しさん (スップ Sd7a-2KSg) [sage] 2018/06/01(金) 18:52:33.22:U3fjUVmpd push pop size copy move swap constructor destructor くらいでしょ使うの 片方向でもいいだろうし : デフォルトの名無しさん (ワッチョイ 0123-C2Ni) [sage] 2018/06/01(金) 19:38:34.27:nSTFCyDP0 stackはlistではないし継承は間違ってるわな : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/01(金) 19:48:21.87:uCsHgk1n0 俺、リストツリーっていうの考えたんだけど、聞きたい? : デフォルトの名無しさん (スップ Sd7a-2KSg) [sage] 2018/06/01(金) 19:58:07.59:U3fjUVmpd 頭が硬いやつはソフトに向いてない : デフォルトの名無しさん (アウアウウー Sa09-msj4) [] 2018/06/01(金) 20:19:59.69:sIQxQP9sa ありがとうございました。 実は、 最近出版された岩沼宏冶他著『データ構造とアルゴリズム』(コロナ社) という本にスタックとキューのそのような実装が書いてあるんです。 まず連結リストをテンプレートを使って実装しています。 その関係で質問しました。 まえがきに「本書の前半ではC++言語での実装コードを示すが、これは 初学者によいコードを読ませることが目的であり、Art of Programmingに つながるような解説を付記するように努力する。」と書いてあります。 : デフォルトの名無しさん (ワッチョイ 018a-75sl) [sage] 2018/06/01(金) 21:27:36.17:naL+ZRGN0 下手が伝染るから、クヌースを取り寄せしたほうが良いぞ : ◆QZaw55cn4c (ワッチョイ da60-667V) [sage] 2018/06/01(金) 21:36:56.16:/qAuBE/I0 私なら委譲を使います : デフォルトの名無しさん (ブーイモ MMbe-k5Cw) [sage] 2018/06/01(金) 21:52:15.80:eT4/jjIPM どんな用途を想定してるの? : デフォルトの名無しさん (ワッチョイ f523-XTxf) [sage] 2018/06/02(土) 01:50:36.43:z1beHaLa0 横レスだけど複数スレッドがあったとき ・どれかの終了を待つならjoinでは無理 ・全ての終了を待つなら適当な順でjoin というだけのことでは : デフォルトの名無しさん (ワッチョイ 79ce-eFb7) [sage] 2018/06/02(土) 07:25:22.85:uqsytqRM0 そういうことをやるなっていうのが「リスコフの置換原則」 : デフォルトの名無しさん (ワッチョイ 2593-5uk3) [sage] 2018/06/02(土) 07:40:27.42:SH+PTz7E0 「外から見えるインターフェースが変わらなければ 内部の具体的な実装がまったくの別物に変わっても使うのに支障ない」 ていうオブジェクト指向のカプセル化だっけ、あのあたりの教材じゃなかろうか。 それと継承のアクセス制御の使い方。 : デフォルトの名無しさん (ワッチョイ 2593-5uk3) [sage] 2018/06/02(土) 11:23:31.53:SH+PTz7E0 派生クラスのアクセス制御、と書くべきだったかな。 意味は通じると思うけど、用語の使い方に厳しい人もいる故。 : デフォルトの名無しさん (ワッチョイ 7abd-h81y) [sage] 2018/06/02(土) 13:02:49.13:x6PfuSbY0 言葉足らずだったスマン スレッドハンドルの配列があったとして、[i]についてjoinしたら[i]を再利用できる(再びスレッドをcreateしなおせば良い 、の意味 joinせずとも済むやり方もあるが、 (「重い処理かつ終了に時間が要するスレッド」の関数本体をそのままスレッドにするのではなしに、 普段イベントを待ち、イベントが来たら「重い処理かつ終了に時間が要するスレッド」の関数本体を普通にcallし、そいつがreturnしてきたら 再びイベントを待つ、というループするスレッドとしてwrapすれば良い、等 結局「重い処理かつ終了に時間が要するスレッド」が使っていた資源が開放されたことを論理的に知る必要からは逃れられず、 一番簡単なのがjoinですよという意味でではjoinと言ったので察してホスイ、 : デフォルトの名無しさん (ワッチョイ 5db3-/C2z) [] 2018/06/02(土) 17:26:29.14:RQ4rJlvL0 ほむほむ、ところでgtestとBoost.Testはどっちが良いですかな? : デフォルトの名無しさん (アウアウカー Sa5d-cyJq) [sage] 2018/06/03(日) 18:24:16.97:gfv0Z2yCa 初心者脱出したいから課題くれ : デフォルトの名無しさん (ワッチョイ daf9-xIz4) [sage] 2018/06/03(日) 20:26:24.96:g8+eu/OT0 自分でこれまで勉強した範囲で疑問なり興味なり沸いてきて、あれこれコード書いて試して見ようとしたことは無かったの? もし全くないのならもう諦めた方がいい。 : デフォルトの名無しさん (スップ Sd9a-LFwF) [sage] 2018/06/03(日) 23:46:44.76:D70hzHzDd 純粋な言語部分 プリプロセッサ 標準ライブラリ 特定のOS, 特定のライブラリ 組み込み どの辺の課題? : デフォルトの名無しさん (ワッチョイ 7abd-h81y) [sage] 2018/06/03(日) 23:58:49.35:/T91IteZ0 「計算機プログラムの構造と解釈」(SICP)を読んで演習課題を解いたら良い : ◆QZaw55cn4c (ワッチョイ da60-667V) [sage] 2018/06/04(月) 19:13:33.43:gbEnuF2j0 まだ scheme 手習いが終わっていないのです(泣) : デフォルトの名無しさん (ワッチョイ d541-NxRc) [sage] 2018/06/06(水) 22:04:43.09:2Ea3o2oY0 リトルインディアン、ビッグインディアンも教えない職場があるんだな。 おっさん、びっくりしたわ。 : デフォルトの名無しさん (ワッチョイ d5a9-jaPo) [] 2018/06/06(水) 22:13:02.59:JW9lzKor0 周知のこととして扱われているのかもしれませんね。 私は学校で教わりました。 : デフォルトの名無しさん [] 2018/06/06(水) 22:41:41.43 インディアンかー 俺も教わった覚えないな : デフォルトの名無しさん (ワッチョイ bab6-jY45) [sage] 2018/06/06(水) 23:17:12.31:jNE6zLei0 One little, two little, three little Indians : デフォルトの名無しさん (ワッチョイ 7aeb-Uejh) [sage] 2018/06/06(水) 23:33:53.26:m+Bnnm4Z0 エンディアンなのかインディアンだったかいつも忘れる 口語は混ざる : デフォルトの名無しさん (ワッチョイ 9a4c-lSES) [sage] 2018/06/06(水) 23:36:43.24:zexNX0En0 インディアンは習ったろ : デフォルトの名無しさん [] 2018/06/06(水) 23:48:14.36 ネイティブアメリカンなら習ったけど🙄 : デフォルトの名無しさん (ワッチョイ ba81-NLsb) [sage] 2018/06/06(水) 23:48:33.17:Ne6bz6Er0 ガリバー旅行記はいつどこで習うんだろう : デフォルトの名無しさん (ワッチョイ d193-HI6s) [sage] 2018/06/07(木) 06:56:59.11:u4DD79290 「リトル・エンディアン」「ビッグ・エンディアン」て用語は 『ガリバー旅行記』が由来、という情報が載ってるサイトで、 主人公が漂着した小人の国、巨人の国のエピソードから…、とか 書いてあるのを見たことがある。ネタだったのかも知れないけど。 : ◆QZaw55cn4c (ワッチョイ d360-EqDK) [sage] 2018/06/07(木) 08:03:30.91:twFjtnTk0 それはほんと、小人国での卵の割り方にちなみます : デフォルトの名無しさん [] 2018/06/07(木) 08:17:13.03 ニホンゴムズカシイネ^^ : デフォルトの名無しさん (アウアウカー Sa2d-abwI) [sage] 2018/06/07(木) 11:07:30.43:texCzkEwa 今どきバイトオーダー意識するようなプログラム書くような職場じゃなきゃ教えないよ アライメントなんかも同様 : デフォルトの名無しさん (スップ Sd73-wQOh) [sage] 2018/06/07(木) 11:22:48.86:W9Xn18jEd インディアンを教える職場って どんな職場だよ : デフォルトの名無しさん (スプッッ Sd7d-diB1) [] 2018/06/07(木) 11:49:27.36:ZMsL/8Fsd だってオラはSEだから : デフォルトの名無しさん (ワッチョイ 1334-KXLn) [sage] 2018/06/07(木) 12:38:00.08:pGQiQE2u0 SEなら尚更知っておかないと 日本はなんちゃってSEばっかだもんなw : デフォルトの名無しさん (スップ Sd73-wQOh) [sage] 2018/06/07(木) 13:14:35.77:W9Xn18jEd SEとインディアンの関係は? : 985 (ワッチョイ d193-HI6s) [sage] 2018/06/07(木) 13:15:06.93:u4DD79290 調べたら小人同士の戦争の原因なのね。巨人国は関係ないな。 実は空の国の「学者の無意味な論争」の一例だと思い込んでいたんだわ。 「ウチはCのコーディングスタイルとしてAT&T式を基本とします」 ってところはあるかも知れん。 : デフォルトの名無しさん (ワッチョイ 6b13-DGJA) [sage] 2018/06/07(木) 20:44:47.09:BA7hChNz0 貴様が知る必要はない! : デフォルトの名無しさん (ワッチョイ 09c3-5Ttc) [sage] 2018/06/07(木) 20:48:11.43:DJdTp6lo0 何でもネットに繋がらなきゃならないこの時代にhtolやltohを避けて通れるもんなのか? PHPしか触らないWeb屋ならともかくここC++スレだぞ : デフォルトの名無しさん (ドコグロ MM7d-Chll) [sage] 2018/06/07(木) 21:46:11.03:XXEPBZnxM 今時C++と言えどhtol()とかltoh()なんて低レイヤーの関数使うことなんて滅多にないだろ : デフォルトの名無しさん (アウアウウー Sad5-5aY/) [sage] 2018/06/07(木) 21:50:55.26:gS6wfz1ca ソフトウェアがなんでもかんでもネットワークに繋ぐ必要があると思ってるの?ここC++スレだぞ : デフォルトの名無しさん [] 2018/06/07(木) 22:31:28.79 C++使うくらいだからXMLとかJSON使うんだろ : デフォルトの名無しさん (ワッチョイ 1b37-x2t7) [sage] 2018/06/07(木) 23:10:47.05:C4iY9p8E0 utf16はどうしたらいいの? : デフォルトの名無しさん (ワッチョイ 534c-cPPs) [sage] 2018/06/07(木) 23:16:41.18:B+7Xk0Ks0 続きはwebで : 1001 [] Over 1000Thread このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 68日 2時間 56分 35秒 : 1002 [] Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ ttps://premium.5ch.net/ ▼ 浪人ログインはこちら ▼ ttps://login.5ch.net/login.php
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。