1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part118 peace.2ch.net/test/read.cgi/tech/1435970316/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net peace.2ch.net/test/read.cgi/tech/1439849418/ 次期規格C++1zはこちら C++14/C++1z 20 peace.2ch.net/test/read.cgi/tech/1410382924/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
2 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 18:19:24.65 ID:NE3NvROE.net] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒ
3 名前:ントぐらいにはなったな。 うむごくろう。 [] [ここ壊れてます]
4 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 19:14:01.72 ID:5EwNZntw.net] >前スレ984 throw()は無駄な処理を削減してないだろ 無駄な処理を削減したのはnoexcept
5 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 19:16:45.24 ID:LIRnTqik.net] 前スレ >>999 >「富豪的プログラミング」を洗脳的に刷り込まれたやつが書くコードが >世の中をどんなに減速しているか、わかってからでは遅いしね 指摘してる方法も富豪的だから見当違いだぞ
6 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 19:31:48.85 ID:5ehxqyCu.net] marupeke296.com/OOD_No8_SceneOperation.html ここのサイトにあるデータコンテナというものを実装しようと思い std::shared_ptr<void>型にデータへのポインタを格納しようとしたのですが データの領域を確保するときに、 datacontainer.push_back(malloc(size)); とするとnewで確保していないのでshared_ptrのdeleteが機能しませんよね? newでサイズを指定して確保することは出来ますか? それとも他に良い方法があるでしょうか?
7 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 19:47:09.78 ID:7HL3lB9q.net] >std::shared_ptr<void> リンク先は見てないけど そのサイトはきっと糞だろ
8 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 19:59:45.08 ID:fU5zBptm.net] 普通は仮想デストラクタを持った基底クラスBを作って std::shared_ptr<B>にして 他のオブジェクトはBから派生させる
9 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 20:08:38.97 ID:LIRnTqik.net] >>5 読んだけどシリアライザ・デシリアライザでググった方が良いかも
10 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 20:10:42.59 ID:LIRnTqik.net] すまん、直列化でググったほうが引っかかる
11 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:06:38.27 ID:4UR705Ml.net] >>4 どうしてそう思います?
12 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:13:30.93 ID:GshNEBF9.net] >>5 >newで確保していないのでshared_ptrのdeleteが機能しませんよね? いえそんなことはありませんpush_backの実装次第です
13 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:17:39.10 ID:LIRnTqik.net] >>10 どうしてって…フリーリストの処理と 無駄なメモリを確保しておくのは同じぐらい富豪的だろ
14 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:33:11.25 ID:fIQY5cyk.net] 20年くらい前のとある弾幕シューティングゲームは 画面に表示するタマが256個上限で固定長メモリ上にフリーリストと確保済みリストを構築していた あんま富豪じゃない
15 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:34:56.89 ID:4UR705Ml.net] >>12 どうしてですか? std::mapの1エントリが、一体どれだけのメモリ量なのか、計算してください まず、保持すべき整数値IDとポインタで8バイト、 木なので最低でもrightとleftが有るので+8バイト 加えてエントリはnewで確保されるので、頭に管理領域が付く 一方、std::vectorなどで配列で管理する場合、 1エントリに付きポインタ1つの容量なので、4バイト つまり、配列をかなり無駄遣いしたとしても、配列の方がメモリ量は少ない
16 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:35:02.50 ID:LIRnTqik.net] それ静的なリソースじゃなくてオブジェクトの管理だろ
17 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:39:37.35 ID:LIRnTqik.net] >>14 上限が決まっていない配列は拡張の度に確保する羽目になる 速度を求めるなら、大きさはだいたい2倍ずつになる(pythonなどもそう) はっきり言って無駄 ってかフリーリスト何処行ったんだよ…本当自分の意見は適当な野郎だな
18 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:48:52.48 ID:4UR705Ml.net] >>16 配列の、その無駄よりも、mapの方が、メモリが無駄になるって>>14 で計算して見せただろ あと、フリーリストって言う名前で書いたけど、これももちろん配列だから IDやハンドルをポインタに変換するのに、配列を使う方法は、 もっとも効率的な方法なのに、これを富豪的と言われてしまってはね 他に効率的な方法が無いのにどうしろと もちろん、ポインタの値を生で使えば、もっとも効率的ではある 変換して無いので、今回のテーマにはそぐわないが
19 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:52:48.87 ID:BMYxuVz1.net] えっ? フリーリストって配列要素の中に前と後ろの二つのポインター持つんじゃないの?
20 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 22:55:47.52 ID:LIRnTqik.net] >>17 「配列だから」って…あのなあ フリーリストは文字通りリストで配列じゃないだろ 配列で実装はできるが、最悪管理する配列と同数の上限付きスタックになる
21 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:04:41.29 ID:LIRnTqik.net] そして勝手に自分でリソースID割り振る前提で進めてるが、 固定の離散値の場合はどうするんだ 変換用のMapでも作るつもりか?
22 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:12:33.08 ID:4UR705Ml.net] >>18 何か知らんが、フリーリスト用の配列に、開放されたリソースのIDをpushしておけばよいだけ 新規リソースにIDを割り当てる時は、フリーリストから1つ取ってきて、割り当てればよい 面倒ならフリーリストはなくても良いだろうな この場合、IDを割り当てるたびに、先頭から空いているIDを探さなければならないが、 配列は連続したメモリ領域なので、この処理はキャッシュに乗りやすい類の処理だ 一方で、mapへの追加は、想像よりも遅いだろう 挿入箇所を探すのに、値を比較をしながら、ポインタをたどらなければならない(キャッシュに乗りにくい) 大体は赤黒木なので、バランスをとる作業も入る 毎回newが発生する ちなみに赤黒木はこんな感じのアルゴリズム www.moon.sannet.ne.jp/okahisa/rb-tree/
23 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:14:33.96 ID:4UR705Ml.net] >>19 >配列で実装はできるが、最悪管理する配列と同数の上限付きスタックになる そういったワーストケースでも、std::mapよりもメモリ効率が良い事は>>14 で計算したが
24 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:19:39.84 ID:LIRnTqik.net] >>21-22 あのな、そもそも想定のリソースはポインタだぞ? 構造体ならわかるが、ポインタに速度なんて必要ないんだよ そしてフリーリストのワーストケースはメモリに関しては4nだろ 自分で管理するコストを乗せたら余りあるぐらい無駄 しかも離散値が絡んだら全変更 お前本当都合よく話進めるな
25 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:27:34.44 ID:LIRnTqik.net] 画像リソースそのものじゃなく、ポインタの確保にフリーリストとか 頭おかしいわほんと
26 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:30:09.30 ID:GshNEBF9.net] IDが自プログラム外で採番されることは良くあるが それについて>>21 が言及した姿を見た者はいないのであった
27 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:32:54.34 ID:4UR705Ml.net] >そしてフリーリストのワーストケースはメモリに関しては4nだろ std::mapがどれだけメモリを無駄遣いするかは、>>14 で計算している 1エントリについて、最低でも2
28 名前:0バイトは必要なので、 その言い方だと、最低でも20nになる newの管理領域次第で、もっと悪くなる >あのな、そもそも想定のリソースはポインタだぞ? >構造体ならわかるが、ポインタに速度なんて必要ないんだよ もう、なにいってるか意味不明でしょう? これが底辺C++erなのか [] [ここ壊れてます]
29 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:38:12.87 ID:LIRnTqik.net] >>26 >その言い方だと、最低でも20nになる なんで20「バイト」が「n」になるんだよ… 頭おかしすぎてもうついていけないわ俺…
30 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:43:50.15 ID:LIRnTqik.net] そうそう、そんなにフリーリストが好きなら、どうぞ使って下さい 自分は別に困らないので
31 名前:デフォルトの名無しさん mailto:sage [2015/08/31(月) 23:47:08.58 ID:4UR705Ml.net] 単位を書かないお前が悪いんだろ フリーリストの最大サイズは、すべての要素が開放された時で、 n個の要素になる 1つの要素はintで4バイトだから、4nと推測したのだが フリーリスト付きの配列で、n個格納するのに、 最大で4nの要素が必要と言う意味かね これでもstd::mapの方がメモリ効率が悪いことには変わりないが
32 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 00:06:41.75 ID:W5JS3HZb.net] dlmalloc GNU Cライブラリ (glibc) の malloc は、dlmalloc を元に作られている chunk および利用中フラグがあるため、8バイトまたは16バイトのオーバヘッドを含めたメモリ確保が必要である。 アロケートされていないchunkも他のフリーなchunkへのポインタを持つため、chunkの最小サイズは24バイトとなっている つーわけで、std::mapの、1エントリは、上記のnewのオーバーヘッド + ID、ポインタ、left、right、などが必要なので、 相当なサイズになることが分かってもらえるだろうか 一方で、配列でする場合は、1エントリ4バイトで済む 余程の無駄遣いをしない限りは、配列の方がメモリ効率が良いし、オマケに速度も速いのだ
33 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 00:09:22.12 ID:Ba8p7FNG.net] アルゴリズムの文脈なのにnで通じないと 相手を底辺と言うだけありますね で、そこから離散値はどうするのかな? さらに木構造にでもする?
34 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 00:11:53.02 ID:Ba8p7FNG.net] >>30 なんか自己満足仕様で勝利宣言してるしこの人…
35 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 00:19:58.95 ID:Ba8p7FNG.net] >一方で、配列でする場合は、1エントリ4バイトで済む だからならねえって、ちょくちょく虚言吐くなあ 癖なの?
36 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 01:11:45.51 ID:0+ju4But.net] 新たなタイプの触っちゃいけない人が出てきたなあ…
37 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 01:37:17.37 ID:Ba8p7FNG.net] 実際は開放されないって事がすっぽり抜けてるのかな …いや絶対わざと言ってるなこれ
38 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 01:52:06.05 ID:GHEmL8/j.net] >>3 throw() でも無駄な処理が消えることあるよ。 https://goo.gl/crS9gO https://goo.gl/BMmqFt
39 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 02:10:03.23 ID:fDCmPfsg.net] ワタシ思うに、両方やって、比べればいいと思う、アルよ 机上論の応酬などいくらやっても無駄 故人曰く案ずるより産むが易しってな
40 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 08:08:03.99 ID:olKwiEx6.net] 曖昧な要件にオレオレ仕様加えて俺の勝ち〜 まあ、よく見る光景ですなw
41 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 08:20:35.50 ID:p5lCrfoJ.net] >>36 消えてねーだろ 984の主語は呼び出し側じゃなくて呼ばれた方だぞ?
42 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 09:28:03.11 ID:GHEmL8/j.net] >>39 ん?・・・リンク先見直したけどやっぱり7命令ほど削れてるよね? 主語?・・・いま974から見直してもそんなの書いてないと思うんだけど・・・見落としてたらごめんね。
43 名前:デフォルトの名無しさん [2015/09/01(火) 12:19:42.42 ID:CdEi71Zr.net] モデルクラスってデータ構造を持つべき? それとも持つべきではない?
44 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 18:28:43.15 ID:zo1v2bDs.net] >>41 まずそのモデルクラスとやらが何なのか定義を聞こうか
45 名前:デフォルトの名無しさん [2015/09/01(火) 19:08:10.13 ID:4KR7vAAo.net] 定義を決めてもらわないと回答もできないようじゃ三流
46 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 19:30:56.55 ID:pwoXX+fq.net] まずその三流とやらが何なのか定義を聞こうか
47 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 21:26:17.28 ID:jc1TnNJe.net] モデルクラスってあまり聞かない言葉だね。 一般的な用語から入らないとレス付かないと思うな。
48 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 21:57:34.27 ID:pYMkwSaE.net] 造語だったりしてw
49 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 22:07:22.53 ID:AdYeXoWK.net] 昔ながらのMVC開発のモデルなら データ構造をメンバーとして持つ感じじゃないか 最近のなんやらかんやらは知らんが
50 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 22:09:34.18 ID:AdYeXoWK.net] つかMVCってC++でやることってあるの? 昔Javaを使ったWebの開発現場では煩い位に聞いたけど
51 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 22:14:30.02 ID:nXuOkFi0.net] 特定の文脈でしか通じない用語を 断り無しに連発するのは馬鹿の特徴
52 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 00:21:31.48 ID:TZYcxUIB.net] チンピラの群れがお互いに喧嘩を売って歩くスレ
53 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 08:20:41.73 ID:8HjhIrCM.net] お互い売るけど、どちらも買わない
54 名前:デフォルトの名無しさん [2015/09/02(水) 11:40:01.60 ID:3Er4L3kb.net] #include<iterator> #include<fstream> #include<iostream> int main(){ std::ifstream f{"abc"}; std::istream_iterator<unsigned char> i{f}; for(auto a=0;a<5;++a) std::cout<<" "<<std::hex<<static_cast<int>(*i++); return 0; } このコードでabcという名前の読み込むファイルの中に16進数で0Cがあると なぜか表示されなかったり0が2個になったりします 何がわるいのですか? g++とclang++で試しました
55 名前:デフォルトの名無しさん [2015/09/02(水) 11:52:12.56 ID:3Er4L3kb.net] 自己解決しました
56 名前:デフォルトの名無しさん [2015/09/02(水) 12:00:08.37 ID:3Er4L3kb.net] 直ったと思ったら勘違いでした 教えてください
57 名前:デフォルトの名無しさん [2015/09/02(水) 12:17:49.56 ID:3Er4L3kb.net] こんどは直りました ありがとうございます
58 名前:デフォルトの名無しさん [2015/09/02(水) 12:19:48.06 ID:kvoheval.net] どういたしまして
59 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:22:36.42 ID:RN6F+W1d.net] >>54 istream_iteratorは>>演算子によって文字を読取るため、0x0cのようなホワイトスペース文字は スキップする こいつを読み取らせるにはバイナリ入出力を使う #include <fstream> #include <iostream> #include <iomanip> int main() { std::ifstream f {"abc.txt", std::ios::in | std::ios::binary}; int x; // std::istream_iterator<unsigned char> i {f}; // for (auto a = 0; a < 5; ++a) // std::cout << " " << std::hex << static_cast<int>(*i++); while ((x = f.get()) != EOF) { std::cout << " " << std::setw(2) << std::setfill('0') << std::hex << x; } }
60 名前:デフォルトの名無しさん [2015/09/02(水) 12:25:51.06 ID:3Er4L3kb.net] unsetf(std::ios::skipws)でできましたよ
61 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:26:31.09 ID:RN6F+W1d.net] >>58 同じことだな
62 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:29:04.68 ID:RN6F+W1d.net] 他の方法としてはstd::noskipwsをその都度指定するか www.cplusplus.com/reference/ios/skipws/
63 名前:デフォルトの名無しさん [2015/09/02(水) 12:29:52.92 ID:kvoheval.net] や っ ぱ ス ト リ ー ム は ク ソ だ わ
64 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:34:52.18 ID:RN6F+W1d.net] 慣れの問題だろ istream_iteratorが>>演算子を内部で使ってるとちゃんと書いてある本を持ってれば分かる話
65 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:37:36.59 ID:pfz+JPDH.net] >>47 ありがとう モデルってビジネスロジック書くところだと勘違いしてた もろにデータ構造そのものを指すんだな
66 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 13:03:07.04 ID:spisOxh2.net] >>62 はどういう意味ですか?
67 名前:デフォルトの名無しさん [2015/09/02(水) 13:39:30.67 ID:3Er4L3kb.net] <<を使わないために istreambuf_iteratorを使いたいんですけど ifstreamのrdbuf()をイテレーターの初期化にしてもできませんでした
68 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 19:01:21.83 ID:I203tbc8.net] 慣れの問題と思ってる奴はバカ iostreamが糞なことに気づかないようではどうしようもない
69 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:13:37.89 ID:+ga1UiZL.net] すいません初心者なんですけど クラステンプレート質問させてください 例えば templat e<class Type> class A { Type a; public: A() : Type() {}; もしくは A(Type x = Type()) {}; } みたいなイニシャライザやデフォルトテンプレート引数の場所に出てくる Type() <- 括弧の中に何も入ってない の意味を教えて下さい 本読んでも唐突に出てきてネット調べてもわからないです 両者が同じものなのか違うものかもわかんないです
70 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:14:35.25 ID:+ga1UiZL.net] ;の付け方グチャグチャだったけどそこはスルーしてください…
71 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:36:41.71 ID:4+szYIhP.net] >>67 コンストラクタ呼び出し
72 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:42:45.88 ID:ygSRnlxE.net] >>67 Type()はデフォルト初期化だよ TypeがPODならゼロ初期化されるし、そうじゃなければデフォルトコンストラクトされる
73 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:45:27.50 ID:ygSRnlxE.net] >>67 には ;以外にも色々おかしいところはあるけどType()の意味は上の通り
74 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:54:19.65 ID:+ga1UiZL.net] 回答有難うございます いただいた回答で意味が判りましたありがとうございます 自分で判った間違いは直しました、なんとなく気持ち悪いので template <class Type> class A { Type a; public: A() : a(Type()) {} もしくは A(Type x = Type()) {} }; そもそも初心者スレで聞くべきだったかもしれませんすいませんありがとうございます
75 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 21:52:05.05 ID:m/gpmXab.net] なんでもいいが、俺なら template <class Type> class A { private: Type _a; public: A() : _a() {} }; と書く Typeのコンストラクタを呼ぶというより、_aをデフォルトコンストラクタで初期化しといたやでという意味で書いてるから。 >>72 の書き方だとコピーコンストラクタを呼ぶことになるのでは?
76 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 22:18:06.66 ID:HOyUHIr6.net] >>70 どうしてそう息を吸って吐くようにウソが出てくるんだ?
77 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 22:47:41.96 ID:1DlJs2CJ.net] >>73 コンストラクタを呼んじゃいけないという おまえの脳内前提で質問されても
78 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:14:30.27 ID:ygSRnlxE.net] >>74 具体的にどうぞ どう言えば正しいのかまで それが出来ないならお前はクズの中のクズ
79 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:19:25.72 ID:HOyUHIr6.net] >>76 規格の定義と異なる嘘を並べておいて随分と横柄な態度だな 仕様を読み間違えたとかじゃなくて知らないくせにテキトー抜かすのは 止めた方がいいぞ
80 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:20:58.11 ID:ygSRnlxE.net] >>77 で?
81 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:34:08.05 ID:0+j6o+Dn.net] >>78 レス止めたほうがいいってよ(´・ω・`)
82 名前:デフォルトの名無しさん [2015/09/02(水) 23:42:02.07 ID:urmqHodw.net] 大きく出る割に話がピーマン
83 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:34:33.32 ID:iQnjIkb4.net] 具体的には説明できないがお前は
84 名前:間違っている!!! [] [ここ壊れてます]
85 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:42:05.98 ID:CZJfW2V/.net] >>73 >>72 だとxvalueでムーブコンストラクタが呼ばれるのでは?……と思ったけど、必ずしもムーブコンストラクタが定義されてるわけではない上に、デストラクタ明示したらムーブセマンティクスも明示しないと削除されるか(推奨であって規格ではない)
86 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:45:59.94 ID:SvUuACZU.net] 荒れてるところ恐縮ですが質問してもいいですか? class A { B& b; } class B { A& a; } こんなふうな相互に参照を持つことってできるのですか? ポインタ使う以外に道はないですか?
87 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:50:37.56 ID:fKKhgssi.net] 指摘した後に勘違いと気づいたパターン
88 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 01:12:32.53 ID:hDY8eKzg.net] >>83 class c { class b; class a { b &b_ = *new b(); }; class b { a &a_ = *new a(); }; }; これで一応動くけど、どうすんのこれ
89 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 01:16:38.14 ID:fKKhgssi.net] それ相互参照じゃない というかムリ
90 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 02:36:12.57 ID:VxVmaHFN.net] 仮引数をstd::stringへのconst参照にしてconst char*の文字列("...")を渡す動作はC++標準ですか?
91 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 03:11:20.88 ID:CZJfW2V/.net] 標準。 プログラミング言語C++第4版の関数多重定義解決規則をみよ。 適合できない引数を暗黙変換できるならする。 そのさいに引数を1つとるコンストラクタにも入れ子式に適用される。
92 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 03:20:02.37 ID:fKKhgssi.net] 暗黙変換はされるのは1回だけだよ
93 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 04:07:13.75 ID:SvUuACZU.net] >>85 そんな手がありましたか でもdeleteは自分でしなきゃダメですよね >>86 やはり、参照を使うのは無理ですよね 「相互参照」でググってもポインタを使う例ばかりですし ありがとうです
94 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 05:34:06.26 ID:D704J011.net] >>83 ほれ ideone.com/9VuNcJ
95 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 07:13:38.72 ID:1aBHaasU.net] プログラミング言語C++第4版というのはISO/IEC 14882:2014のことですか?
96 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 08:22:08.15 ID:ZCmiwbzV.net] あれやこれや言われてる>>72 の正しい解答教えてくれんと僕眠れない
97 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 09:36:59.35 ID:SPzlieDS.net] 組み込みでc++を使用しているのですが、 C++の標準ライブラリのcoutや、vectorを使用したいと思っています。 そのためには何らかのドライバの役割を果たすソースが必要ではないかと考えています。 どのようにすれば使用できるようになるのでしょうか。
98 名前:デフォルトの名無しさん [2015/09/03(木) 09:56:07.26 ID:gfhZ4+hm.net] 動作するSTLソース
99 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 10:17:18.79 ID:PXwT0hDa.net] ソース一覧 www.bulldog.co.jp/ ブルドックソース株式会社 東京都 www.kagome.co.jp/ カゴメ株式会社 愛知県 www.otafuku.co.jp/ オタフクソース株式会社 広島県 www.ikari-s.co.jp/ イカリソース株式会社 大阪府 www.kikkoman.co.jp/ キッコーマン株式会社 千葉県 www.oliversauce.com/ オリバーソース株式会社 兵庫県 www.sky-net.or.jp/toshi/ カープソース 広島県 www.maruki-su.com/ 株式会社 川上酢店 愛知県 www.kozima.co.jp/ 小島食品製造株式会社 愛知県 www.komi.co.jp/ コーミ株式会社 愛知県 www.sankyohikari.co.jp/ サンキョーヒカリ 愛知県 www.junmaru.co.jp/ 株式会社 純正食品マルシマ 広島県 www.papaya-sauce.co.jp/ パパヤソース本舗 大洋産業株式会社 京都府 www.takahashisauce.com/ 高橋ソース株式会社 埼玉県 www.choko.co.jp/ チョーコー醤油株式会社 長崎県 www.timelyhit.ne.jp/ajiyoko/shop/sauce/sauce1.htm 阪神ソース株式会社 兵庫県 www.kyoto-thinking.co.jp/hirota/ 京風味ソース本舗 蛇ノ目食品廣田徳七商店 京都 www.optic.or.jp/com/fujiisauce/fujiisauce.html 有限会社 藤井ソース工場 岡山県 www2.neweb.ne.jp/wd/hikari/ ヒカリ食品 徳島県 www.hat.hi-ho.ne.jp/aokia/ 下北沢ビレッジソース 丸寿食品工業株式会社 東京都 www.yamayashokuhin.co.jp/ 山屋食品株式会社 東京都 brothersauce.com/ ブラザーソース森彌食品工業株式会社 www.asahi.co.jp/you/t20011026.html 神戸地ソース物語 【関連団体】 www.maff.go.jp/koueki/sougou/35/35.htm (社)日本ソース工業会 www.japan-tomato.or.jp/ 社団法人 全国トマト工業会 www.soysauce.or.jp/ 日本醤油協会
100 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 10:35:36.61 ID:Zp2ZXSAW.net] >>94 とりあえず試してみて、そのまま使えなようなら、コンパイラのマニュアルを読む。
101 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 10:57:30.22 ID:3MKID8ns.net] >>97 __dso_handleがどうのこうのでエラーが出ます コンパイラはg++です。 マニュアルのインデックスをざっと見てみたのですが セクションが多すぎて該当部分がわかりませんでした
102 名前:デフォルトの名無しさん [2015/09/03(木) 11:17:42.50 ID:qqXcw9HH.net] 組み込みでcoutなんかいるのか? coutがすぐ使えないってことはベアメタルだよな
103 名前:デフォルトの名無しさん [2015/09/03(木) 11:22:18.14 ID:BYrhbrh5.net] いるかどうかは問題にしてない
104 名前:デフォルトの名無しさん [2015/09/03(木) 11:23:37.79 ID:SPzlieDS.net] >>99 OSでnewlibのサポートはあるのですが C++ライブラリのサポートがないようなので何とかして使えるようにならないかと coutは簡単にデバッグ用メッセージをコンソールに出力できたらいいなと newlibではprintfが使用できます。
105 名前:デフォルトの名無しさん [2015/09/03(木) 11:33:23.42 ID:gfhZ4+hm.net] 標準ライブラリとSTLは別物。 どちらもビルド済みがコンパイラと同包されてるケースが多いが。 無ければ自らビルドするなりして組み込まないと動作するわけない。
106 名前:デフォルトの名無しさん [2015/09/03(木) 11:44:20.68 ID:gfhZ4+hm.net] newlib STLでググった結果。 AVR 8ビットマイクロコントローラでSTLを動かす話かと。 AVR toolchain with GCC 4.8.1 and C++ STL support - Antoni Buszta Building compiler Building C Standard Library Patch GCC sources Building C++ Standard Library and other tools antoni.buszta.info/2013/07/18/avr-toolchain-with-gcc-4-8-1-and-c-stl-support/
107 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 12:03:05.07 ID:UXgFNAqG.net] 最近は、8bitマイコンでも、C++が動くのか? びっくりした
108 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 12:09:28.35 ID:SvUuACZU.net] >>91 ありがとうございます unionで何らかのポインタ(void*でなくてもよさげ?)をnull初期化してやれば、 参照(をメンバに持つクラス)をメンバに持つ場合でもいけるわけですね 配置newでthisを渡すというのも初めて知りました 自分にはちょっと技巧的すぎるやり方ですが、とても勉強になりました
109 名前:デフォルトの名無しさん [2015/09/03(木) 12:16:39.79 ID:gfhZ4+hm.net] 軽量なコード、システムを選択していけばいけるんじゃないの?やったことはない。 uClibc stl でググった結果。 uClibc++ C++ library cxx.uclibc.org/status.html Small scale C++ STL for embedded use www.exactcode.com/site/open_source/embeddedstl/ Embedded C++ - Wikipedia 1990年代後半、組み込み用途への適用を目指して、肥大化したC++の仕様を必要最低限のものに絞り込んだサブセットが考案された。 一般的には、Embedded C++を用いた場合、C++よりプログラムをコンパクトにできる傾向がある。
110 名前:デフォルトの名無しさん [2015/09/03(木) 12:43:32.79 ID:SPzlieDS.net] >>102 なるほど、iostreamは標準ライブラリでvectorはSTLになるのですね ちなみに組み込み用(ARM)用のstdlibc++.aは存在します その中で"objdump -C -t"してあげるとcoutのシンボルは存在しますがvectorなどは確かに見つかりませんね >>103 どこでcoutの出力先やらメモリの動的確保の方法を指定しているのかがわからないですね >>106 こんなのがあるんですね
111 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 12:56:42.10 ID:hDY8eKzg.net] 8-bitマイコンってメモリ空間256バイトではないよね なにをもって8-bitなの?
112 名前:デフォルトの名無しさん [2015/09/03(木) 13:20:30.95 ID:gfhZ4+hm.net] STLといっても最終的にはCPUの基本命令まで翻訳されるわけで。 STLの実装・翻訳の過程で無駄がないとすると、STLを使わないものと遜色はないはず。 メモリや速度で難があるのは無駄があるだけ。
113 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 14:47:23.71 ID:UXgFNAqG.net] >>107 coutは標準出力。 ファイル・ディスクリプタ、0:標準入力(stdin)、 1:標準出力(stdout)、2:標準エラー(stderr) メモリの動的確保は、reallocか、 free + malloc >>108 CPUの命令長が、8bit
114 名前:デフォルトの名無しさん [2015/09/03(木) 16:50:12.14 ID:rBNlqiiW.net] >>110 確かにそれは上位のレイヤーではそうなのですが 下位層を意識してみると 内部のコードを読んだことないので自分の中での理解なのですが Linuxの場合 例えばprintfは文字列を処理してから fd:1を引数としたwriteシステムコールで 文字列を出力しているなどしてるのかと思っています。 しかし、windowsでは別の文字列出力方法があると思います。 その環境ごとの文字列出力法の差異をどこで吸収するのか気になっています。 Newlibはおそらくwrite_r等と言う関数を定義することで環境の差異を吸収しているように見えました。
115 名前:デフォルトの名無しさん [2015/09/03(木) 18:06:39.67 ID:zWhDxOK5.net] std::tuple< std::tuple<std::tuple.... *,int>> *, int > 自分自身のポインターを要素に持つtupleって出来ないんですか?
116 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 18:23:10.49 ID:hPxxKfzL.net] >>93 「Type()」はデフォルト初期化でなく値初期化 値初期化の過程でゼロ初期化されるかどうかはルールが複雑なので ISO/IEC 14882:2014の8.5を読めとしか言えない ただPODかどうかは関係ない 例えば struct X {int a; protected: int b;}; はPODではないけれどゼロ初期化される
117 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 18:51:40.41 ID:XvCyn3hF.net] JAVAといっても最終的にはCPUの基本命令まで翻訳されるわけで。 JAVAの実装・翻訳の過程で無駄がないとすると、JAVAを使わないものと遜色はないはず。 メモリや速度で難があるのは無駄があるだけ。
118 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 19:17:25.38 ID:G+oloE/W.net] >>112 template<typename T> class hoge{}; hoge<hoge<int>*> n_inst; ??????
119 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/03(木) 19:21:44.93 ID:un01NHO0.net] 合わせ鏡みたいなタプル? できるわけないだろ
120 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 19:27:06.77 ID:G+oloE/W.net] template<typename T, typename U> class hoge{}; hoge<hoge<int, int>*, int> tu_inst; 意味が分からん。それとも template<typename T> class hoge{ public: T* m_p; }; hoge<int> n_inst; n_inst.m_p;//int*型 普通にこうしたいだけ?
121 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 19:29:10.11 ID:G+oloE/W.net] ていうか、論理が分からないのか、循環参照したがるんだよな 循環参照は不定なだけ
122 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 20:34:41.66 ID:YegStso1.net] むしろ>>112 の説明で何がわからないのかがわからない。 出来ないとは思うけど
123 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 20:43:03.17 ID:G+oloE/W.net] >>119 int hogeeeeeee(int i){return hogeeeeeee(i);} void main(){hogeeeeeee(1); return;} これが戻り値が不定にならないと思うのと同じ
124 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 20:44:02.06 ID:fKKhgssi.net] >>91 おお、知らなかった C++11でできるようになってたんだな
125 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 20:50:29.42 ID:G+oloE/W.net] テンプレートは動的でなく静的だからね TempClass< float, 6 > test1; // OK TempClass< char, items++ > test2; // Error, second parameter // must be constant.
126 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 21:03:10.32 ID:D704J011.net] ちょっと考えたけど使い道無さそうだわ ideone.com/hnYBeO
127 名前:デフォルトの名無しさん [2015/09/03(木) 21:04:11.91 ID:yKj1FtgQ.net] #include <iostream> #include<tuple> using namespace std; int main() { using A=std::tuple<B*,int>; using B=std::tuple<int,A*>; return 0; } どうやってこのエラーを取り除けるのでしょうか?
128 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 21:08:45.94 ID:fKKhgssi.net] >>124 それは規格に無理と書いてある
129 名前:デフォルトの名無しさん [2015/09/03(木) 21:14:36.19 ID:yKj1FtgQ.net] むりなんすか ありがとうございました
130 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 21:16:27.91 ID:G+oloE/W.net] >>124 テンプレートは生成が静的だから完全解決できないと生成できません プログラムコードも静的だから完全解決できないこういうコードはできません int hoge(int i){return hage(i);} int hage(int i){return hoge(i);} void main(){int ret=hoge(1); return;} hogeかhageかでif分岐などで解決しないと実行できません で>>124 みたいなテンプレートは↑こういう風に解釈されます
131 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 21:31:53.50 ID:fKKhgssi.net] >>126 14.5.7 >The type-id in an alias template declaration shall not refer to >the alias template being declared. The type produced by an alias >template specialization shall not directly or indirectly make use of >that specialization. 要するにテンプレートの再帰型は直接であれ間接であれ使えない
132 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 21:47:39.21 ID:G+oloE/W.net] どういうのがやりたいのかわからんけど、↓でそれの何ができないの? class base{ public: base(base& n){m_p=&n;} base* m_p; }; class A : public base{ public: A(A& n) : base(n){;} }; class B : public base{ public: B(B& n) : base(n){;} };
133 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 22:00:58.39 ID:ujbBBsKz.net] コテハン=キチ○イ の法則
134 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:06:39.08 ID:G+oloE/W.net] >>129 でA←→Bの相互通信がしたいなら messengerクラスを独立に作ればいいだけ
135 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:09:18.49 ID:G+oloE/W.net] base* m_p; つかこれはthisポインタだな
136 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:12:34.19 ID:G+oloE/W.net] 要するにクラス参照の持ち合いなんて baseクラスからAとBを派生させて 独立なメッセージクラスで通信すりゃあいいんだよ
137 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:19:52.99 ID:G+oloE/W.net] abstract factoryパターンだろ
138 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 22:22:17.51 ID:hvDmk3I7.net] この馬鹿はさっきから何言ってるの? ビョーキなの?
139 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:39:04.34 ID:G+oloE/W.net] 要するにAとBのクラス参照の持ち合いなんて baseクラスからAとBを派生させて 独立なメッセージクラスで通信すりゃあいいんだよ デザインパターンではabstract factoryパターンだろ そのまんまだよ
140 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 23:14:36.34 ID:fKKhgssi.net] なんのこっちゃ
141 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 23:18:52.70 ID:yR6wfki7.net] 1) 釣りである 2) 知ったかしなきゃ死ぬ病気である 3) 本屋にくるおしゃべり天使みたいにスレでもうわごとレスを止められない 4) 本人はまじめだが知能がいちじるしく低い
142 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 23:24:43.23 ID:G+oloE/W.net] class base{ public: int m_val; base(int i):m_val(i){;} virtual int func(int i){return i;} }; class add:public base{ public: int func(int i){return m_val+i;} }; class sub:public base{ public: int func(int i){return m_val-i;} }; base *p,*q;//abstract factoryパターン int r;//メッセージクラス p=new add(21); r=p->func(7); q=new sub(r); r=q->func(7);
143 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 23:34:56.29 ID:G+oloE/W.net] class base{ public: int m_val; base(int i=0):m_val(i){;} virtual int func(int i=0){return i;} }; class add:public base{ public: int func(int i=0){return m_val+i;} }; class sub:public base{ public: int func(int i=0){return m_val-i;} }; base *p,*q;//abstract factoryパターン int r;//メッセージクラス p=new add(21); r=p->func(7); q=new sub(r); r=q->func(7); intを任意のクラスにしたらなんか色々出来そうだろ
144 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 23:41:00.21 ID:G+oloE/W.net] ありゃ、コンストラクタ忘れた class base{ public: int m_val; base(int& i=0):m_val(i){;} virtual int func(int i=0){return i;} }; class add:public base{ public: add(int& i=0):base(i){;} int func(int i=0){return m_val+i;} }; class sub:public base{ public: sub(int& i=0):base(i){;} int func(int i=0){return m_val-i;} }; base *p,*q;//abstract factoryパターン int r;//メッセージクラス p=new add(21); r=p->func(7); q=new sub(r); r=q->func(7); intを任意のクラスにしたらなんか色々出来そうだろ
145 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 23:56:33.17 ID:fKKhgssi.net] 薬飲んだらすぐ寝ないと駄目だぞ
146 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 00:38:45.05 ID:ye/5uETN.net] >>112 これでどう? #include <tuple> struct S; typedef std::tuple<S> TS; struct S { TS* p; }; TS loop{S{&loop}};
147 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 00:53:27.48 ID:ye/5uETN.net] >>83 なんか変な回答ついてるけど、ふつうに↓でコンパイル通るよ。 class B; class A { B& b; }; class B { A& a; };
148 名前:デフォルトの名無しさん [2015/09/04(金) 01:15:43.42 ID:IG+8/rPl.net] 循環【参照】か
149 名前:NAS6 ◆n3AmnVhjwc [2015/09/04(金) 01:16:03.14 ID:tzKKrHnI.net] >>144 それだと、どちらかを先に完全確定する必要があるんだけど まぁ、とりあえずデフォルトコンストラクタでもいいけど 実体作った後でもいいけど、A,Bはどんな状態遷移すると思う? class B; class A { int m_val; B& m_b; A(){;} A(B& b):m_b(b){;} }; class B { int m_val; A& m_a; B(){;} B(A& a):m_a(a){;} }; A a(); B b(a); a.m_b=b; これで、マルチスレッド環境だったりしたら、かわいそうなことに・・・
150 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 01:27:40.32 ID:1ELVgZ8Y.net] >>144 相互に参照を持つように初期化したいという意図だろうから それじゃ回答になっていないし、他の人が既に回答済み
151 名前:NAS6 ◆n3AmnVhjwc [2015/09/04(金) 01:28:13.61 ID:tzKKrHnI.net] 志村Kんの志村、後ろ、後ろ、状態
152 名前:NAS6 ◆n3AmnVhjwc [2015/09/04(金) 01:36:42.35 ID:tzKKrHnI.net] 循環参照する必要があるなら アブストラクトファクトリパターンで シングルトンパターンのメッセージクラスで 応答になるんだろ
153 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 01:41:27.56 ID:ye/5uETN.net] >>146-147 そういうことか。ありがとう。 いちおう↓こんなのはできるけど、これが望むものなのかどうかはやっぱりわかんないね。 class B; struct A { B& b; }; struct B { A& a; }; struct Loop { A a; B b; } loop = {{loop.b}, {loop.a}};
154 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 01:46:02.11 ID:ye/5uETN.net] >150 よりこっちのがいいかな。 struct Loop { A a{b}; B b{a}; } loop;
155 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 02:03:19.63 ID:1ELVgZ8Y.net] それならc++03でもいけるね コンストラクタ書く必要はあるけど
156 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 03:33:33.23 ID:CNzc1DB/.net] >>150 AもBも他のクラスのメンバとするならば、初期化で問題なくインスタンス化できるという話ですか? いずれにしろAとBをマネージするクラスを作るのは避けられないですかね? >>152 どちらもgccのc++03でいけましたが、>>151 はc++03だと警告が出ました コンストラクタは書かなくても大丈夫ではないですか?
157 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 04:59:59.47 ID:ukgXeb3f.net] >>153 どっちも参照しかもって無いんだから誰かが実体持つ必要があるだろ。 それは相互に参照してようがしてまいが変わらない
158 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 05:04:41.54 ID:1ELVgZ8Y.net] >>153 C++03でクラス化するにはコンストラクタがいるよ それと試しにg++(gcc)でやってみたけど、 C++11でのみ有効な機能っていう警告が出たよ それじゃなかった?
159 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 06:17:53.16 ID:rG9hvPUX.net] >>101 コンソールに出力すると コンソールの通信速度に引っ張られて プログラムの動作が遅くなる デバッグだからと言って無闇に大量に出力しないように気をつけないといけない
160 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 08:17:29.72 ID:9mN0gzGK.net] 余計なお世話だ
161 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 08:58:14.87 ID:voaTutYw.net] コンソールってバッファリングしてないのか?
162 名前:デフォルトの名無しさん [2015/09/04(金) 11:55:39.86 ID:1AVS2Ktf.net] >>156 言うだけ無駄 どーしてもcoutと手段が目的化してる
163 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 12:28:24.29 ID:s9W6t8fF.net] やぱログに吐いた方がいいって事ですか
164 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 12:30:58.91 ID:8nJVYQKk.net] >>154 mainとかの関数内ではAやBのインスタンス作れないですよね? 何かしら方法あるのかな
165 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 12:37:05.16 ID:g9gAlQ8r.net] >>161 普通に作れるでしょ…
166 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 14:48:15.68 ID:yKUUH6cx.net] どうでもいいけどcerrじゃ
167 名前:デフォルトの名無しさん [2015/09/04(金) 17:07:42.09 ID:ynK+SMBx.net] >>156 >>158 リングバッファに貯めて別タスクでワイヤレスのコンソールに吐き出させています >>160 確かにそうかもしれません。 主目的は、標準ライブラリの移植です。 >>163 それでもかまいませんが やらなくてはならないことは同じではないかと思いました。 ちなみにiostreamをヘッダファイルに加えると以下のようなエラーが出ます hoge.cpp:(.text.startup+0x48): undefined reference to `__dso_handle' /path/to/libstdc++.a(system_error.o): In function `_GLOBAL__sub_I__ZNSt14error_categoryC2Ev': system_error.cc:(.text.startup._GLOBAL__sub_I__ZNSt14error_categoryC2Ev+0x4c): undefined reference to `__dso_handle'
168 名前:デフォルトの名無しさん [2015/09/04(金) 20:19:10.44 ID:STCOa/Lw.net] STLをビルドして組み込め。実装はただひとつでなくいくつもある。動作するやつで。
169 名前:デフォルトの名無しさん mailto:sage [2015/09/05(土) 18:20:35.46 ID:pkvC4koK.net] erosuga1.blog.fc2.com/blog-entry-3174.html 親戚のエロお姉さんとS◯Xwwwwwwwwwww
170 名前:デフォルトの名無しさん [2015/09/06(日) 23:13:13.97 ID:kzoJkPUN.net] CのCHAR_BITに当たるものはC++だとなんですか
171 名前:デフォルトの名無しさん mailto:sage [2015/09/06(日) 23:59:11.69 ID:TtEkoNQG.net] >>167 CHAR_BIT かな。 [] [ここ壊れてます]
173 名前:デフォルトの名無しさん [2015/09/07(月) 19:34:51.82 ID:XjY9JrjD.net] nextとhasNextはnextを実装するときコピーが必要だが終端がわかっていればnextだけで進める moveNextとcurrentはcurrentを実装するときコピーはいらないが進むのにmoveNextが必要という トレードオフがあると思いませんか?
174 名前:デフォルトの名無しさん mailto:sage [2015/09/07(月) 20:08:22.86 ID:AAyuiqtl.net] 奇遇だな ちょうど俺もそう思っていたところだ
175 名前:デフォルトの名無しさん [2015/09/07(月) 21:24:45.26 ID:107fD43G.net] え!?俺も昨日同じこと考えたとこだった!
176 名前:デフォルトの名無しさん mailto:sage [2015/09/07(月) 21:26:55.88 ID:xAuYi2fm.net] ちょっと>>169 が何言ってるかわからない
177 名前:デフォルトの名無しさん [2015/09/08(火) 10:01:21.06 ID:LEkrsXyv.net] typelistの代わりにtuple使ってるんだけどなんかダサいから typelistの可変引数版みたいなのを自作しようと思います
178 名前:デフォルトの名無しさん mailto:sage [2015/09/08(火) 12:57:45.86 ID:rdzMyuc+.net] 俺も俺も
179 名前:デフォルトの名無しさん mailto:sage [2015/09/10(木) 14:29:57.70 ID:vNCRKT6f.net] unique_ptrで配列を使う場合、テンプレート引数はどうするんでしょうか? unique_ptr<int> p(new int[3]); unique_ptr<int[]> p(new int[3]); はどちらもGNU C++11でコンパイルが通りますが、両者は同じですか?
180 名前:デフォルトの名無しさん mailto:sage [2015/09/10(木) 17:14:13.20 ID:tn/zLcPl.net] >>175 前者は消滅時に変なdeleteが呼ばれるんじゃね
181 名前:デフォルトの名無しさん mailto:sage [2015/09/10(木) 18:13:22.19 ID:vNCRKT6f.net] >>176 share_ptrの場合<int[]>だとコンパイルエラーになりますが、 unique_ptrは配列の特殊化があるので<int[]>にしないとダメということでしょうか?
182 名前:デフォルトの名無しさん mailto:sage [2015/09/10(木) 18:33:57.55 ID:jMDA+bxl.net] はい
183 名前:デフォルトの名無しさん mailto:sage [2015/09/10(木) 19:52:32.49 ID:Ubq2dser.net] shared_ptrってなんで配列の特殊化が用意されてないんだろうね 代わりにshared_arrayがあったと思うけど、要するに生配列なんてクソなものは使うなよってことなのかね
184 名前:デフォルトの名無しさん mailto:sage [2015/09/10(木) 20:18:56.37 ID:dU3rTPO3.net] >shared_array いえそんなものありません
185 名前:デフォルトの名無しさん [2015/09/10(木) 20:26:28.15 ID:2c1W3PII.net] shared_ptr<array<int,3>>で
186 名前:デフォルトの名無しさん [2015/09/10(木) 20:42:53.70 ID:XPHYFe1B.net] unique_ptr<T[]>は知的興味でしかないだろうな なぜなならアーレイやベクトルやストリングがあるからさ そんな僕でもこれらデータ構造よりもunique_ptr<T[]>が使えると思いつく場面はあるんだ それはヒープ配列の生のポインターをAPIで所有権をうけとるときたった一つさ
187 名前:デフォルトの名無しさん [2015/09/10(木) 23:41:24.04 ID:Lt3YsJ/Z.net] > アーレイ 和服の彼女かとおもた
188 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 10:32:13.74 ID:yGFUVtFx.net] そういえばshare_ptrの参照カウンタって 実際の情報はどこで保持されてるんでしょうか?
189 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 10:33:39.57 ID:H6P2Jlk5.net] ソース見ればいい
190 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 11:22:30.30 ID:Ra3TP7iE.net] ソースみれば分かるが動的に確保しているよ ただし高速化の工夫はしてある
191 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 14:11:15.39 ID:yGFUVtFx.net] share_ptrのソース見ましたが、atomic型を使って うまいことやってるというくらいしか分かりませんでした atomicについて知らなかったので調べたんですが、 これってC++11のメモリモデルに関するもので、 いわば言語のコアの機能なんですね
192 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 14:12:30.08 ID:yGFUVtFx.net] つまりC++11以前やCではこのshare_ptrを直接実装する方法はなく、 たとえば参照カウンタを持つクラスを用意し、これをshare_ptrさせたい クラスに継承させるという間接的な方法しかないということですよね?
193 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 14:20:50.61 ID:ZeO2NzYz.net] んなわけねーだろ
194 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 15:00:10.29 ID:xy/6VGnh.net] C++11で、型推論autoを使って楽をしようと思ったんだが、 2つの変数の型を自動的に整合させる方法が分からないのだ。 void some_job() { const auto loop_times = 10; for (auto cnt = 0; cnt != loop_times; ++cnt) { /* ループ内の処理 */ } } // (インデントはおそらく破壊される) 上の場合、ループ回数 loop_times と、ループカウンタ cnt は どちらのautoもintと判断されるのでとりあえず一致する。 しかし auto loop_times の初期値にintでない値を与えると 当然ながら loop_times と cnt の型が違ってしまう。 「cntの型は、loop_timesの型からconstを外したものだよ」 という変数宣言の書き方はないだろうか? 諸兄らの教えを乞いたい。
195 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 15:18:09.86 ID:yGFUVtFx.net] >>189 どのへんが間違ってるんですか? C++初心者にもわかる説明だとありがたいです
196 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 15:43:03.84 ID:BdWqvAgc.net] >>190 ttp://ideone.com/CTjWaa これでどうよ >>191 boost::shared_ptrのソースでも見てみれば shared_ptrが標準に入ったのは11からだけどそれ以前にもshared_ptrはあったんだから
197 名前:190 mailto:sage [2015/09/11(金) 18:00:12.76 ID:xy/6VGnh.net] >>192 まさに希望した通りの情報です。感謝します。 std::remove_const 云々 と書くのか。 sizeof() と typeid().name() とで並べて見たところ loop_times と cnt の型は一致した。 loop_times = 10U; や loop_times = '3'; でも 試したら自動的に型が合った。 テンプレート構造体に閉じ込めたtypedefか。 こんな仕掛けを思いつくとは尊敬すべき変態さん達だな。
198 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 19:32:57.26 ID:eMWeHauN.net] これって const auto && loop_times = 10; でも動くんか? そこはdecayじゃないのかって思ったんだけど
199 名前:デフォルトの名無しさん mailto:sage [2015/09/11(金) 21:03:06.98 ID:yGFUVtFx.net] >>192 よく見てみたら、参照カウンタ自体の仕組みはごく単純で、自分のイメージ通りでした というか、そもそも自分がshare_ptrの使い方をちゃんと理解していませんでした share_ptrに生ポインタ渡せるのは初回だけなんですね・・・ ideone.com/mysMec スレ汚し失礼しました
200 名前:デフォルトの名無しさん [2015/09/11(金) 23:54:45.84 ID:b8iFLD3f.net] コーディング言語は「オープンソース」が制す:Github人気調査結果 ≪ WIRED.jp wired.jp/2015/09/11/github-coding-languages-open-source/ wired.jp/wp-content/uploads/2015/09/wiredus09101024x541.jpg
201 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 01:27:55.77 ID:JUZlHW5G.net] Rubyがそんなに上位だと思えないけどなぁ
202 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 02:10:12.94 ID:xJrAsa7q.net] ま、どうせcssとか入ってくる調査だし でも混ぜこぜでもcssに負けてんのはちょっと面白い
203 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 04:58:03.64 ID:oXtx5tH/.net] HTMLとJavaScriptとCSSのみっつが順位を競う プログラミング言語ランキングとは サイトの名前をwiredからweirdに変えた方がいい
204 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 13:10:32.88 ID:JUZlHW5G.net] だよねぇ。おかしいよねぇ。 なんだかんだCは上位にいると思う。
205 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 13:17:01.58 ID:VGFicEEt.net] 9位は十分上位だろう githubはもともとスクリプト書いてる人が多く使ってたから ああいう順位なんだと思うよ
206 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 14:01:59.69 ID:kwHtj/5N.net] マルチスレッドとグローバル変数の寿命に関する質問なのですが detachしたスレッドが,メインスレッド終了後も生き続けてもグローバル変数にアクセスしても問題はありませんか? StackOverflowなどには大丈夫だという回答があり、簡単なテストコードでも問題は無かったのですが クラス内static変数にアクセスしたときに時々異常終了したことがあったので少し不安です
207 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 14:06:47.33 ID:JUZlHW5G.net] 便乗質問 メインスレッドを終了してもコスレッドは生きてるんでしたけ? まずそこから・・・
208 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 14:06:59.24 ID:5QpLz49+.net] 問題あるだろ
209 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 14:37:23.35 ID:kwHtj/5N.net] >>203 生きてないですね(核爆
210 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 15:31:31.26 ID:Jf5oAWRg.net] コンストラクタ() = delete; これってなんですか
211 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 15:52:40.95 ID:uQU/vJQH.net] cppreference.comでは以下のように説明されている >Inhibiting the automatic generation of a default constructor by the compiler.
212 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 16:38:30.48 ID:Jf5oAWRg.net] コンストラクタを書かないのとどう違うのですか?
213 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 16:40:31.69 ID:pEVoCQGH.net] 書かないと自動生成されるだろ
214 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 16:41:18.68 ID:9veCOfSe.net] コンストラクタ書かなきゃいけなくなる
215 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 16:41:52.46 ID:9veCOfSe.net] デフォルト以外の
216 名前:デフォルトの名無しさん [2015/09/12(土) 16:43:08.92 ID:Hpj3Z5wB.net] ビッグ4の法則はコンストラクターには成り立たないからな
217 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 18:04:37.15 ID:fhFqy1Q7.net] 見たとおりコンストラクターが定義される ただし使うとコンパイルエラーになる特別な本体で 定義されるので書かなかったときの自動生成は行われないし privateで書いて生成禁止にしてもfriendからアクセス出来てしまうという誤りを防げる
218 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 21:36:31.32 ID:XAqQ9sMD.net] 素直に単純に コンパイラのコンストラクタの自動生成を阻止する とせずに 使えない特殊なコンストラクタを定義 ↓ コンストラクタがあるので自動生成されない という回りくどいプロセスを踏んでいるのは何故ですか?
219 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 21:46:02.85 ID:mqPDPmPF.net] >>214 どっちが回りくどいかもう一度考えてみたら?
220 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 21:48:41.33 ID:urgaTojg.net] >>213 の二段落目二行目のためでは
221 名前:デフォルトの名無しさん mailto:sage [2015/09/12(土) 22:39:51.40 ID:fhFqy1Q7.net] >>214 そりゃ>>207 のサイトが嘘つきなだけで 自動生成を抑止するためじゃなく 使えない関数を定義することが目的だからね ideone.com/LKN3q1
222 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 01:24:33.20 ID:T9Cd4+Hx.net] 目的は書く人次第だが
223 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 01:28:55.66 ID:Auzbsz6v.net] つまり>>207 も>>217 も目的を決めつけた嘘つきってことですね
224 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 02:17:23.86 ID:T9Cd4+Hx.net] どうでもいい
225 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 03:41:04.36 ID:6aqKmbgS.net] 使えない関数を定義しているのではなく、そのシグネチャの関数がdeletedであることを宣言しているのだろう。 適用されるのは同じ翻訳単位だけなのでは?
226 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 04:33:23.08 ID:fzKWBIn4.net] >>221 そのレスする意味ある?
227 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 05:08:08.47 ID:6aqKmbgS.net] >>213 みたいな無駄にややこしい上に誤った説明をそのままにしておくのは無責任なのでは?
228 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 05:42:13.47 ID:fzKWBIn4.net] そうじゃなくて、そのレス何も説明してないでしょ 他人を批判する前に自分を省みろって
229 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 06:21:11.66 ID:oxWskyTT.net] >>221 deleteが同じ翻訳しか適用されなくても delete関数はインライン関数だから 違う翻訳単位でdeleteじゃかったらODR違反 問題ない
230 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 08:36:35.77 ID:GRWOhyHT.net] std::queue<T>についてなんですが clear()メソッドが無いのは何か理由有り? 一応pop()がデータを返さなくてfront()で先頭要素にアクセスしてからpop()すべき仕様なのは 極力先頭要素のコピーをしたくなくて、参照で済ませたいからだと推測できるのですが clear()が無い理由はちょっと…
231 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 08:40:43.87 ID:1aU/2qC8.net] >>226 データ構造上、コンテナを使い回すメリットがないから 新たにインスタンス作ればよろしいということ
232 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 08:43:14.92 ID:m2o7J/Xt.net] >>226 まーたその話かよ コンテナアダプタだからって結論が出ただろ
233 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 13:19:52.29 ID:BGQqu8BA.net] clearが欲しいなら黙ってstd::dequeを使えばいいだけ FIFOを使う場合にclearが必要になるのがおかしい
234 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 13:59:21.40 ID:21SWVEBe.net] >FIFOを使う場合にclearが必要になるのがおかしい へー、どうして? FIFOを乱す順序の操作ではないよね?
235 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 15:45:14.55 ID:zCQU/fdL.net] >>226 clearしたければclearする派生クラスを作ればいい そういう設計だ
236 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 17:42:34.20 ID:aPjNmwB2.net] >>226 >極力先頭要素のコピーをしたくなくて pop()が要素を返す場合コピーコンストラクタが例外を投げる可能性があるので 例外安全を満たすことができなくなる。
237 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 17:59:22.43 ID:dMwVjMJU.net] >例外安全を満たすことができなくなる へー、どうして?
238 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 18:45:49.56 ID:ABWGqgkn.net] popでデータを返さないのはコピー時に例外発生したときにコンテナの中身から取り除かれるわpopした中身受け取れないわになるのを防ぐためってのもある あとtopで参照返すことによりswapなどを使う事により例外発生させることなく受け取ることが可能になる C++11からmove出来るようになったからほぼいらなくなったけど
239 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 20:20:56.97 ID:M0wiS1Aa.net] 平面を二次元配列で表す時 array[width][height] array[height][width] どっちがいいですか?
240 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 20:22:35.56 ID:G58MCBrj.net] >>236 そんなことはお前のやろうとしていること次第。 ここできくことじゃない。
241 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/13(日) 20:25:57.90 ID:io0Trfl5.net] >>235 横向きに連続してアクセスするなら array[height][width] がいい。まあ、その辺はインライン関数で抽象化して、実測すればわかる。
242 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 21:21:42.16 ID:M3GBYhkY.net] 速度の差異を知りたいって事か。 変わるんすかねぇ
243 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 22:47:56.80 ID:q3JnkdTU.net] 何故かわらないと思うんですか?
244 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 23:01:44.40 ID:JxlRVXLx.net] 無礼な奴だな まず変わると考える根拠を述べよ
245 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 23:26:04.26 ID:q3JnkdTU.net] 変わらないと思う理由が知りたかっただけです ここ、C++スレですよね
246 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/13(日) 23:55:37.85 ID:io0Trfl5.net] array[height]は、width個の横に連続したデータになるから、 横方向に連続したアクセスなら、早くなるはず。 先読みとかキャッシュも関係するかも。
247 名前:デフォルトの名無しさん mailto:sage [2015/09/13(日) 23:57:05.44 ID:ABWGqgkn.net] アクセス方法次第でCPUのキャッシュミスの発生率も変わるから速度も変わる
248 名前:デフォルトの名無しさん mailto:sage [2015/09/14(月) 01:17:12.52 ID:h9CenDqd.net] >>235 プログラムが完成したら入れ替えてテストしろよ
249 名前:デフォルトの名無しさん mailto:sage [2015/09/14(月) 02:27:47.71 ID:WQ7njzDq.net] なぜcolumn majorにしなかったのか
250 名前:デフォルトの名無しさん mailto:sage [2015/09/14(月) 19:17:30.03 ID:nW8KHDe7.net] 質問です template templateという機能がありますが、これをクラステンプレートではなくて 関数テンプレートを渡す機能はありますか? codepad.org/pYejO9Fn 意図としては、ライブラリを作るにあたって、ユーザーからコールバックとして 関数テンプレートを受け取りたいです。 コードの最初のFooクラスのように、クラスで包んでoperator()を定義すれば 実現できます。しかし不格好なので、 bar のように普通に定義された関数テンプレートを 渡すことはできないでしょうか?
251 名前:デフォルトの名無しさん mailto:sage [2015/09/14(月) 19:24:44.32 ID:cuv2HbJp.net] >>246 関数テンプレートを渡す機能はありません
252 名前:デフォルトの名無しさん mailto:sage [2015/09/14(月) 19:29:09.13 ID:nW8KHDe7.net] >>247 そうか。あざす。残念。
253 名前:190 mailto:sage [2015/09/15(火) 08:28:18.63 ID:j+WGnnSb.net] >>194 の内容が >>190 , >>193 と関連していることに気づかず失礼した。 const auto loop_times = ... に対しては for (std::remove_const<decltype(loop_times)>::type cnt = 0; ... for (std::decay<decltype(loop_times)>::type cnt = 0; ... どちらで書いても期待通り動作することを確認。 const auto && loop_times = ... に対しては 前者(remove_const)はコンパイルエラー、後者(decay)は動作する。 ところで const auto && loop_times という変数宣言の && の 意味が分からないのですよ。 この&&が変数にどんな性質を与えるのか、 検索時に使うべきキーワードなど教えていただきたい。
254 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 08:37:09.59 ID:kADVoeCZ.net] rvalue reference declaratorで検索とかどうよ
255 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 14:25:08.30 ID:B7TuBbRI.net] endで取得したイテレータをデクリメントして 最後の要素を得るのは仕様的に問題無いでしょうか? ideone.com/dzDqLI
256 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 19:45:47.95 ID:AnTXPfgv.net] プログラム内で生成した連番画像データを、 動画の形式(H.264など)に圧縮して、 ネットワークに送出し、 タブレットなどの端末でストリーミング再生できるようにしたいのですが、 どのようにすればできるでしょうか? 動画の形式にするにはMediaFoundationやNVENCなどのHWエンコーダを利用する プログラムで可能であることは分かりました。 ネットワーク経由でストリーミングする具体的な方法が分かりません。 扱えるAPIは ・WinAPI ・WinSock ・Direct3D11 ・DirectShow ・MediaFoundation などです。 よろしくお願いします。
257 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 19:48:50.92 ID:8YL7tngp.net] >>251 最後の要素が存在するならOK
258 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 20:38:35.34 ID:j2Iw9RkO.net] 素人丸出しの質問で申し訳ありません static const int で定義した変数を、switch-case文のラベルに使うことって可能なんでしょうか。C++的に。 なんかダメな感じはするけど、昔使ったコンパイラでは通ったような記憶もあって混乱中。
259 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 20:46:51.23 ID:Or0Sr6DS.net] やってみりゃわかるけど、ラベルに変数使えましたけ? ???
260 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 21:25:23.69 ID:levHHN+I.net] static const intなら大丈夫
261 名前:デフォルトの名無しさん [2015/09/15(火) 21:31:16.73 ID:zI3JQASJ.net] staticは関係なくね
262 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 21:31:38.97 ID:Or0Sr6DS.net] ん enum も使えたようなw
263 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 21:36:13.99 ID:levHHN+I.net] const int n = a; とか定数以外を束縛できちゃうのでダメ
264 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 21:44:32.92 ID:IZgZ7hQz.net] 関数の外でconst int n = (定数);としたなら逝ける
265 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 21:57:48.20 ID:HX9x+LxP.net] static constをconstexprに変えてコンパイルが通るならcaseにも使える
266 名前:デフォルトの名無しさん [2015/09/15(火) 22:09:03.95 ID:Z2SQdZ/1.net] >>255 おまえはやってみたのかよw
267 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 22:24:06.82 ID:ucrFrhcB.net] >>251 つrbegin
268 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 22:36:25.02 ID:WfYHRfSY.net] >>251 問題ないけど、back()やpop_back()を使う方が適切な場合が多いよ。
269 名前:デフォルトの名無しさん mailto:sagete [2015/09/16(水) 19:23:22.85 ID:3SPxKhTi.net] c#なら参照も aaa.bb();で間はドットだけだから1クリックでいいけど->は三回もクリックしないといけないから面倒
270 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 19:31:14.76 ID:OezDmTKu.net] >>265 クリックじゃなくてプレスかタップ
271 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 19:45:37.70 ID:FdNN8V0s.net] C++も参照は.だろ
272 名前:デフォルトの名無しさん [2015/09/16(水) 19:49:28.49 ID:P6BY/gAm.net] 参照は.だけれど参照の実態はポインターだから アクセスが遅い
273 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 19:59:21.74 ID:a5qJ/F/3.net] 流れが見えないレスですね アクセス速度の話してましたっけ
274 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 20:57:52.20 ID:+CviF6rc.net] キーボードならタイプかストロークかヒットじゃないのか ボタンウィジェットの話?
275 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 23:22:43.19 ID:/GUNKgZc.net] クリックは、一般英語としては「カチッと押す」くらいの意味でしか無いらしいし そちらの意味でなら実は何ら問題ないという可能性も?
276 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 20:44:50.17 ID:vEWjEaDX.net] そもそも突っかかる部分がどうでもよすぎてちょっと
277 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 21:00:22.78 ID:kJeXGTkh.net] アスペは定義にこだわるんだよ 社会不適合者が唯一相手を言い負かすことのできる領域だからね
278 名前:デフォルトの名無しさん [2015/09/17(木) 21:11:41.17 ID:Qtg7/zjM.net] click == ポチる
279 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 21:14:01.08 ID:/7qLf8rs.net] ソフトウェアキーボードとマウスでしょ(適当)
280 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 01:45:36.53 ID:TWvmhBF9.net] >>273 なんでそうすぐ荒らそうとするんだお前は
281 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 02:16:02.58 ID:ziYbj+Cy.net] 規格書全
282 名前:R読めてないわ [] [ここ壊れてます]
283 名前:デフォルトの名無しさん [2015/09/18(金) 09:07:58.49 ID:4JhMPdKG.net] アスペとは何かがまるで解ってないようだな
284 名前:デフォルトの名無しさん [2015/09/18(金) 11:51:31.83 ID:5wBzpDO5.net] stlのiteratorであることを調べる方法はありますか? iterator_treitsで型が定義されているかどうかを 調べられるかということです
285 名前:デフォルトの名無しさん [2015/09/18(金) 11:59:04.47 ID:4JhMPdKG.net] >>279 ない(断言)。 なぜならN3797にSTLなる文言が一度たりとも出てこない。 そのような分類が存在しないということだ。 「型識別子が宣言されているか否か」は正直ときどき欲しいことがあるが、 これはC++の文法上できない。 仮にis_declarated<foo>::valueのようなトレイツを作ろうにも、 fooがクラスなのかオブジェクトなのかにより構文規則が変動してしまい、 このためパースできない。
286 名前:デフォルトの名無しさん [2015/09/18(金) 12:48:17.69 ID:vvw8eaFK.net] opencvのcv::matが分からん。画像処理とかムリポ。
287 名前:デフォルトの名無しさん [2015/09/18(金) 17:58:07.46 ID:5wBzpDO5.net] #include <iostream> using namespace std; template<typename T> struct A{ using type =int; }; template <typename T> auto f(typename A<T>::type& a){ return a; } int main() { typename A<int>::type x; cout<<f(x)<<endl; // your code goes here return 0; } どうやってマッチするようにできますか >>280 ありがとうございます
288 名前:デフォルトの名無しさん [2015/09/18(金) 18:27:30.80 ID:5wBzpDO5.net] #include <iostream> using namespace std; #include <iostream> using namespace std; template<typename T> struct A{ struct B{}; using type =B; }; template <typename T> auto f(typename A<T>::type& a){ return a; } int main() { typename A<int>::B x; f<typename A<int>::B>(x); // your code goes here return 0; } ソースコードを間違えました。 こちらでお願いします。 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
289 名前:デフォルトの名無しさん [2015/09/18(金) 18:37:33.56 ID:5wBzpDO5.net] すみません ソースコードをまた間違えました これが最後です #include <iostream> using namespace std; #include <iostream> using namespace std; template<typename T> struct A{ struct B{}; }; template <typename T> auto f(typename A<T>::B a){ return a; } int main() { typename A<int>::B x; f<typename A<int>::B>(x); // your code goes here return 0; }
290 名前:デフォルトの名無しさん [2015/09/18(金) 19:41:08.07 ID:5wBzpDO5.net] これが最後の最後です。 コードを短くしてわかりやすくしてみました #include<vector> using namespace std; template <typename T> auto f(typename vector<T>::iterator t){}; int main() { std::vector<int> a; f<typename vector<int>::iterator>(a.begin()); return 0; }
291 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 20:07:17.89 ID:5egfmsiH.net] ideone に貼っとくれ
292 名前:デフォルトの名無しさん [2015/09/18(金) 20:44:44.53 ID:5wBzpDO5.net] ideone.com/iKRfDL 自己解決しました ありがとうございました
293 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 23:40:50.48 ID:ctwqb5Ko.net] 何をしたいのか全くわからんのだが
294 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 00:49:03.07 ID:yY3lA1m6.net] >>280 >C++の文法上できない ほんとか? すぐ出来そうな気がするんだけど ideone.com/IuwOg1
295 名前:デフォルトの名無しさん [2015/09/19(土) 03:17:45.05 ID:8Pb114IF.net] >>289 ちょっと言ってることと違う using foo = int; int main() { cout << is_declared<foo>::value; //1 cout << is_declared<bar>::value; //0 } これはできるのか?
296 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 05:09:41.19 ID:O1tI28gd.net] >>290 それできて何の意味があるの?
297 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 05:35:18.13 ID:YQpUAMED.net] STLなんて言葉は無い厨の馬鹿さが証明されてしまったな
298 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 08:22:51.87 ID:e8fiNzCd.net] STLはあれだが、iterator_treitsはねーわ どうやったら、こう、間違えるんだよ
299 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 12:03:44.27 ID:q2VPyPCF.net] Visual C++の超拡張機能ならSFINAEでnon-dependent typeもdependent type扱いだぜ
300 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 16:46:44.70 ID:JTlp29uf.net] ここに書いてあることって今見るとどうですか?もう8年前の記事ですが espresso3389.hatenablog.com/entry/20070204/1170538374 自分は速度欲しいところはC++、GUIとかはC#、両者をつなぐときはP/Invokeなり C++/CLIを挟むなりとしてきましたが、全部C#で閉じないものかと思うことはあります
301 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 17:15:28.41 ID:XzxcjOEi.net] 思うに、ポインタが危険と熱く語っているけど、C#にも参照が有るし、 ポインタ演算が出来ない点を除いては、ほぼポインタが有るのと同じ状況じゃね? 参照がnullだとヌルポするんでしょ?危険度は一緒では? 彼はC#に色々期待していたようだけど、今思えば結局VBの置き換えが目的だったんだなって納得できる
302 名前:デフォルトの名無しさん [2015/09/21(月) 17:17:30.30 ID:8N0qbHVY.net] windowsのステマを本気にするバカはいないだろ
303 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 18:41:13.82 ID:IJWaFyNv.net] >>296 > 参照がnullだとヌルポするんでしょ?危険度は一緒では? 典型的な C# 脳だな w 危険なのは書き込みの方だよ
304 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 18:42:53.29 ID:0lL32CsL.net] delegateはstd::functionで代用出来るしマルチキャストデリゲートはBoostにsignal2ってのがある。これは8年以上前からある GCもshared_ptr unique_ptrで大抵の用途に事足りる C#はGCのせいでデストラクタが使い物にならないし、そのせいでusingを書かないと解りづらいリソースリークの元になる。どっちが優れてるとは思わない一長一短 他はこの人の言う未来が早く来るといいですねー が8年たった今でも変わらない感想 >>296 バッファーオーバーフローが予測できない結果をうむのに比べたら安全。だからこそvalgrindなどのメモリチェックツールがある。事実は事実として認めないとね
305 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 18:50:48.72 ID:XzxcjOEi.net] なるほど、ポインタはmemcpyが怖いって言う認識ですか
306 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 19:09:45.69 ID:4SVIoSBj.net] ダングリングポインタのこと言ってんじゃね
307 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 19:47:50.10 ID:IzwQBNZR.net] 物理メモリが見えないから、原理的に無限のメモリを使えるキリッ とか書いてあるんだけどさ、、、 前々から疑問なんだけど、C/C++ってデフォで関数が動的(staticでない)なんだけど、 あれって何で?メリット無いよね? 教えてエロい人。 C#やJavaはランタイムがある前提だから、実行時に動的関数のアドレスを再利用することも出来る。(やろうと思えば) だから、確かに原理上はどんな大きなプログラムでも、一時的に使用するメモリが十分小さければ実行できる。 結果、C#やJavaには動的関数にするメリットがある。 でもC++ってないよね? あれって分割コンパイルを円滑に行うための方便? 別にstaticである必要もないんだけどさ。
308 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:02:23.73 ID:qBJEaPVd.net] >>302 >C/C++ってデフォで関数が動的(staticでない)なんだけど よくわからない,もう少し説明がほしい メンバ関数は「デフォ」でstatic じゃないインスタンスメソッドだがそれはC#/Javaと同じ C#/Java はクラスに属しない関数は存在しえないが,C/C++ はクラスと結びつかない関数はありえる,ということはあるね ランタイムの存在とインスタンスメソッド/クラスメソッドの有無とに何の関係も見出せないが?
309 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:02:28.82 ID:0lL32CsL.net] >>302 何言ってるか解らないんだけど 関数のアドレスが枯渇するプログラム?何それ?
310 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:06:20.03 ID:4SVIoSBj.net] 関数が動的ってどういう意味なんだろう ぐぐったらこんなのが出てきたけど ttp://www5b.biglobe.ne.jp/~suugaku/vc++kougi/ckougi/dai8koudai3wa.html 関数それ自体が消滅するわけじゃないよね
311 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:08:30.59 ID:0lL32CsL.net] >>302 前々から疑問に思ってるんならそのままにせずにちゃんと調べた方がいいよ あんたの書いてる事読むと基礎を全く理解しないまま放置して自分の中でこういうものと思いこんでる物が育ってる感じしかしないよ
312 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:08:47.78 ID:QVf3KibQ.net] >>302 メモリ管理はOSの仕事だろう
313 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:11:04.82 ID:XzxcjOEi.net] 単にstaticといわれても メンバ関数と普通の関数では意味が変わるし それを加味しても言ってる意味が良く分からないんだが それともライブラリの静的/動的リンクの話か? それなら実行ファイルのサイズ削減と実行時のメモリ節約だ 同じライブラリを複数のプロセスから動的ロードすると ライブラリのメモリ上での実態がプロセス間で共有される
314 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:16:03.88 ID:qBJEaPVd.net] DLLはあまり成功しているようにみえないが‥
315 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:17:39.45 ID:QVf3KibQ.net] >>305 仮に動的生成をしてるとしたら、 f()を直接呼ぶ場合と、 何かの関数を呼び、その中から呼んだ場合で アドレスが変わると言うこと何だろうけど、本当?
316 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:21:39.99 ID:XzxcjOEi.net] >>309 成功も失敗も・・・ OSのAPIはDLLにするしかないだろ そうしないとアプリにOSそのものを静的リンクしなければならなくなるだろ、ありえん DLLは絶対必要な仕組み
317 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:26:20.93 ID:XzxcjOEi.net] >>310 >>305 のページは殆ど無茶苦茶で頭痛くなるので君のような初心者は読まないほうが良い 有る程度分かった人がニヤニヤしながら読む以外に存在価値のないページ 関数のコードが動的に生成されたりはしない スタックフレームが動的に生成されるだけ
318 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:27:30.64 ID:4SVIoSBj.net] >>310 ttp://www5b.biglobe.ne.jp/~suugaku/vc++kougi/ckougi/dai8koudai3wa.html 関数にstaticつけるとメモリに駐留するとか適当なこと言ってて 単に知識がないか間違って覚えてるっぽい
319 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:34:16.96 ID:0lL32CsL.net] >>305 >>310 リンク先読んで吹いた やべぇなこれ。思い込みでここまで書けるのもすごいが、こんなの公開して誤った知識を持つ奴が増えるのも恐ろしい。 C言語界におけるテロ行為や〜 >※ プログラミングの学習において、完全に理解してから次に進むという完全主義は、学習を妨げることになります。基本は、意図したとおりコンピュータが動けばよいです。 とかかいてるけど理解しないのと誤った理解をするのは別だよな… 去年までページ更新してるみたいだし連絡したら削除してもらえんかなぁこれ少なくともC言語に関わるところ全て
320 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:34:19.78 ID:f8ZVmSR1.net] >>305 >>314 ワロタwww これ絶対にわざと間違えて書いてるだろうww
321 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:42:48.62 ID:az+bvJoo.net] なんかよくわからなくなってきたんだが、自由関数のアドレスっていつ決定されるの?? プログラムのロード時?だとすると、なぜ関数ポインタをテンプレートに渡せるの? テンプレートがインスタンス化された時に相対的なアドレスが決定されるからという理解でいいのかな??
322 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:58:13.63 ID:0lL32CsL.net] >>316 関数のアドレスはリンク時に決定する テンプレートに関数を渡せるのはマクロと一緒でテンプレートを実体化したコード内に関数名そのまま埋め込まれるから
323 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:25:16.23 ID:/zbs+z1X.net] >>313 ヤベー、コーラ吹いたわ 変数の知識から、頑張って類推で理解しようとしているのか もしくはファンクタとごっちゃになってるのか
324 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:30:27.57 ID:K/qYM/td.net] そこはファンタ吹いとけよ
325 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:31:25.34 ID:XzxcjOEi.net] その人類推するのは大好きみたいで掛け算についても色々類推して リボン計算とやらを発見したらしんだが、 どうみても普通の筆算の書き方を変えただけなんだが www5b.biglobe.ne.jp/~suugaku/neko/dai1koudai6wa.html
326 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:37:25.15 ID:IzwQBNZR.net] >>305 のリンクが話題になっているが、 実は俺もそのリンクにしかたどり着けず、長年の疑問を解消できていない。 そのリンク先での内容はスタックの存在を考えていないことが間違いだ。(static変数とstatic関数を混同している) 多分、C言語は仕様にスタックの存在が仮定されていると思う。 ただ、関数自体はそのように動的に生成され、消滅しても良いことに仕様としてはなっている。 (と断言できるほど明確に記述はされていないが) ただこの場合関数ポインタが使えなくなるため、通常のC/C++では実際には生成/消滅はしない。 結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。 だからこそ、静的関数のメリットが分からない。 C++の場合、templateは静的に展開される。 つまり、必要なものを全てコンパイル時に生成し、実行体に埋め込む。 templateは使った分だけきっちりexeが膨らむ。 従って、template等を使い尽くした場合、場合によってはアドレス空間が枯渇する。 (ただし parametar pack の場合だけ別扱いかもしれないが。) en.cppreference.com/w/cpp/language/parameter_pack >>310 C++/CLIでは関数は動的に配置される。 そのクラスが使用される時にメンバ関数がメモリ上に配置され、不要になれば回収される。 従って原理的には32bitマシンでも4GB以上のexeを動作させられる。(C#も多分同じ) クラス外部から関数のアドレスを参照する場合は static である必要がある。 これは実行時に仮想関数等のアドレステーブルに配置できることを保証するため。 つまり、staticを付けるかどうかは明確に違いがある。 分かりやすくいえば、 ・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上) となる。C++/CLI、C#は出来る。Javaも多分出来る。 C/C++は多分できない。(動的関数ならできる)
327 名前:デフォルトの名無しさん [2015/09/21(月) 21:40:23.93 ID:QaJZDGlp.net] そのページの人はがんばって考察してるのは好感が持てる
328 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:46:12.22 ID:XzxcjOEi.net] >>321 >結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。 >だからこそ、静的関数のメリットが分からない。 つまらない事を長年悩んだり、長文書き込む前に まず基本的なCの文法を学習しては? static void hoge()のメリットなんか初心者でも知ってる事 たぶんC言語の初心者用のサイトでも載ってる筈
329 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:46:34.32 ID:4SVIoSBj.net] >>321 関数にstaticを付けた場合その関数は内部リンケージになるってだけだぞ 一体どっから動的関数やら静的関数やらが出てくるんだ…
330 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/21(月) 21:53:27.69 ID:3iy+9eBG.net] typedef void (*FN)(void); void *p = malloc(...); memcpy(p, ...); FN fn = (FN)p; (*fn)(); free(p); 「動的関数」ってこんな感じ?
331 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:59:22.27 ID:XzxcjOEi.net] はーそんな例とか むしろ proc = GetProcAddress( の方が一般的だろうに 普段散々使っておいて 残念な人だ
332 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:09:21.94 ID:/rzmNe57.net] mallocの領域を実行したらメモリ保護で落ちるだろ 20年前からワープしてきたのか
333 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:09:54.13 ID:rFlrDRn6.net] 型を変数として扱うことってできない? 型を格納する型 Typetype だとしたら Typetype ttype1 = 引数の型をハッシュ化する関数(var); if (ttype1 == ttype2) {} みたいに
334 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:11:28.95 ID:rFlrDRn6.net] ただsizeofってのはなしで
335 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:12:05.09 ID:0lL32CsL.net] >>321 > ・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上) > > となる。C++/CLI、C#は出来る。Javaも多分出来る。 > C/C++は多分できない。(動的関数ならできる) そりゃあ間にVMをかましてるんだから原理的には出来るだろうけど(一時記憶にメモリを使わずファイルに書き出すとかね) まともな実効速度が出るはず無いしメリット何も無いから誰もやらないだけ。 それを出来るというには無理がある。 C/C++だって同じようにVM作れば出来る。同じようにメリット無いから誰も作らないだけ
336 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:12:17.14 ID:tvQQ1s/5.net] >>328 typeid
337 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:15:54.75 ID:rFlrDRn6.net] >>331 ありがとう こんな機能があったとは知らなかった
338 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/21(月) 22:17:34.32 ID:3iy+9eBG.net] VirtualProtectみたいな関数ってMacやLinuxでもあるの?
339 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:20:25.72 ID:0lL32CsL.net] >>321 大体クラスとか関数単位でプログラムをロードして実行出来たところで4GBのメモリ制限に蚊に刺されるほどしか影響しねえよ お前は実行されるコードが数GBになるプログラム作ったことあるんか?と そんなのより普通はデータを記憶するためのヒープが圧倒的に足りなくなる
340 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:21:24.48 ID:0lL32CsL.net] >>333 mprotect
341 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:34:48.88 ID:IzwQBNZR.net] >>323-324 確認した結果、確かにそのようだ。こちらの勘違いだった。 こちらは純粋C++ではなくVC++遣いなので、少し混乱していた。すまん。 >>325 手動ならそういうことになる。CLRはそれを自動的にやっている。 >>330 ,334 CLRはそうなっている。文句はMSに言ってくれ。 個人的には、自分で書いた部分だけで4GBを越えることは今後とも無いとしても、 C/C++の場合はDLLも含めて4GBだから、こちらは越える時があるのかもしれないとは思う。 生ポインタを渡さず抽象化している場合は、一つのarrayにつき4GBの制限になる。 だから実質的にデータ部分も含めても4GBの制限がないのと同じ。 ただ素直に64bitに移行する方がいいと思うし、実際にMSもそういう判断だと思うが。
342 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:39:34.79 ID:tvQQ1s/5.net] >>336 あんたの使ってるのはVC++ではなくてC++/CLIなので ttp://peace.2ch.net/test/read.cgi/tech/1268613679/ スレはこっち >>310 のサイトでもC++/CLIをC++だと間違って書いていて 迷惑この上ない
343 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:49:46.15 ID:QVf3KibQ.net] 数GBにもなるプログラムってあるのかな 何か間違っている様な気がする。 分割して10個〜20個くらいに分割した方が良くないかな・・
344 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:53:28.63 ID:0lL32CsL.net] >>33 MSに文句も糞もねえよ 仕様上は出来る、同じようにC言語だって仕様上は出来る でも使える速度にならないから使えねえって言ってんの MSだってそんな事わかってるからそんな実装にしてないだろ 実質使えないものを出来るって主張して何がしたいのか?
345 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:01:45.88 ID:IzwQBNZR.net] >>337 > >>310 のサイトでもC++/CLIをC++だと間違って書いていて なるほどそういうことか。そう思って読めば確かにそうだ。 以前おかしいと思っていた説明部分も見あたらない、、、こちらも勘違いだったのかも。すまん。 > あんたの使ってるのはVC++ではなくてC++/CLIなので 使っているのはVC++だぞ。 C++はVC++6.0までだというのならそれは認めるが。 ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。 ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。 とはいえ、アンマネージで全部書けば限りなくC++に近くなるはずではあるし、 「初心者のための」なんだから、その辺はいいとは思うけど。
346 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:04:28.14 ID:tvQQ1s/5.net] 初心者こそC++/CLIなんて変態言語ではなく CLRを使うのならC#を使うべきだ
347 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:11:16.76 ID:XzxcjOEi.net] >ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。 >ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。 ほら、もう何にも分かってなくね プロジェクトを作る時にCLRにするかどうか選べる CLRにしなければ普通のC++だ どこまで勘違いでスレを混乱させたら気が済むの?
348 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:12:45.18 ID:IzwQBNZR.net] >>339 勘違いしているのだと思うけど、 C#は完全にCLR上で動いていて、関数は動的配置だぞ。これはいいか? 批判的なのはいいが、事実としてC#は既にそうなんだよ。 ランタイムまで自分で作る気ならCでもできるとも言えるが、それは普通は出来ないと言うよ。 C#の場合はそこまで含めて勝手にやってくれる。 つまり、ポインタのサイズを意識する必要がない。 Javaに至ってはポインタがないんだからポインタのサイズも糞もない。 ランタイムなんて糞遅いというのは事実なんだけど、 実際、そういう糞遅いアプリでも問題ない場合の方が大半なんだよ。
349 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:16:50.51 ID:XzxcjOEi.net] それってJITのためであって 32bitの壁とか関係なくね? C++はコンパイル言語なんでJITは無いから 始めから関係なくね
350 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:17:06.84 ID:tcBLogIW.net] >>331 意地悪な回答だな type_index教えてやらないと使いにくくてしょうがないだろ
351 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:19:54.09 ID:IzwQBNZR.net] >>338 DLLのロード/アンロードはOSがやるから出来るのだけど、 C/C++の場合はDLL先の生関数ポインタも仕様的には掴めるはず。 だから、実質的にはDLLのアンロードは出来ない。 (正確に言うと、アンロード後の空間に別のDLLを配置しなおすことは出来ない) よって、同様に、C/C++の場合は、DLLやフレームワークまで全て含めて4GBの制限になる。 今のところまだかからないけど、今後は分からないよ。 それとは別に、マルチプロセス/プロセス間通信で実現するというのはありだ。
352 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:26:54.98 ID:IzwQBNZR.net] >>342 > CLRにしなければ普通のC++だ そうだったのか。了解した。 >>344 > 32bitの壁とか関係なくね? いや、関係ある。 生ポインタを渡す限り、アドレス空間の再利用が出来ない
353 名前:から、 一切合切含めて4GBの制限がかかってしまうという話。 生ポインタを渡さない場合は、この制限が無くなる。 ただその制限がないとして、今の時点では特にメリットが無いというのも認める。 [] [ここ壊れてます]
354 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:27:29.86 ID:tvQQ1s/5.net] CLRだろうが32bitアプリのvirtual sizeが4Gを超えることはないんじゃないか >>346 FreeLibraryすればdllは解放されるだろ そのあとつかんだ関数ポインタの先は無効になるだろうし 解放した領域に別のdllが読み込まれても問題がない
355 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:30:33.86 ID:XzxcjOEi.net] >>348 これ以上引っ掻き回さんでくれ 彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事
356 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:31:24.91 ID:IzwQBNZR.net] >>341 今はそう思うけど、 C既習だと、C++と付いている方が安心するんだよ。
357 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:31:52.49 ID:XzxcjOEi.net] あと、C#の関数が動的なのはJITの為であって 32bit空間でスワップしてやろうって意図はないはず C++にJITは無いので動的である必要もなし
358 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:32:52.24 ID:0lL32CsL.net] >>343 それで、そのCLIは何で実装されてるのかな?どうやって動くのかな? そこまでちゃんと考えてる? 4GBの制限はポインタサイズだけの問題だと思ってないよね?
359 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:35:35.38 ID:IzwQBNZR.net] >>349 > 彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事 そういうこと。 >>348 自分で管理してFreeするのならそれは出来る。 ただこの場合は自分で掴めるアドレス全体が4GBの制限にかかる。 CLRだと仕様的にはいくらでもつかみ放題だということ。管理する必要もない。
360 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:40:33.83 ID:IzwQBNZR.net] >>352 どうやら君は理解できていない。 動的再配置の場合は、今まさに使っているもの以外は見えないんだよ。 だから、全体で4GBではなくて、各部品が4GBの制限になる。これは理解できているかい? すまんが空回りするようならこの話はここら辺で終わりでいい。 他の人は理解できているから。
361 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:44:22.13 ID:XzxcjOEi.net] 嫌、俺も理解できてないし、バカなこと言ってるなって思っているから もっと続けていいぞ >>352 の言いたい事は、CLRそのものは何ビットで動いているんだという事 CLRそのものが32bitで動いていては、どの道4GB以上は扱えないよね
362 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:47:39.61 ID:0lL32CsL.net] >>354 ほらまた自分の思い込みを積み重ねて… なんか相手するのがめんどくさくなったから >>355 さんに任せようかな!
363 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:49:41.24 ID:IzwQBNZR.net] >>351 なるほどその通りだ。 関数がGCされるのは結果的なことかもしれないね。
364 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:50:48.00 ID:0lL32CsL.net] まぁ最後に一つだけこれは理解出来るだろうというのを そんなに簡単な話だったら32bit版.netフレームワークに4GBの制限なんてないよね
365 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:57:39.16 ID:IzwQBNZR.net] >>355 MMUでググレ。 32bit空間でリニアに使えるのは4GBなんだけど、交代で再配置するのなら実はいくらでもいける。 ただしユーザに与えた生ポインタを変更することは出来ないため、C/C++では4GBに事実上制限される。 GC前提の場合は、この制限は見えなくなる。
366 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:04:04.39 ID:JsyQDq8z.net] 他人が書いたコードを読むのは 超労力がかかる オナニーコードは 超面倒な
367 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:06:58.92 ID:ThaQ2i1X.net] 32bit上で4GB制限を突破させる機能の名前はx86ならPAEな それを使ってもMMUの管理する仮想アドレス空間は4GBのまま
368 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:12:11.77 ID:dkFhdmkv.net] CLRが勝手に関数(コード)をアンロードするわけないだろ。何考えてるんだ?
369 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:18:17.64 ID:FQwXFz67.net] アンロードはしないけどシリアライズしてメモリ以外に保存する実装があってもおかしくはないな もちろん使う側からは透過的に
370 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:24:52.12 ID:ThaQ2i1X.net] >>363 それ実行ファイルがディスクにあるはずなのにシリアライズして保存する意味がわからねーな 直前にJITコンパイルしたバイナリを一時的にディスクに保存してから実行するとかならまぁ解るけど
371 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:26:02.37 ID:PT+IC+/U.net] >>363 CLRはMSILという中間言語を実行時にJITして配置するから、 結果的に各関数は使うまで配置されないし、使い終わったら捨てられるのかと。 多分オリジナルのMSILはstaticに存在するのではないかと。 ただそれがメモリ上である必要はないが。 結果的に透過的になる。 https://msdn.microsoft.com/ja-jp/library/z1zx9t92.aspx
372 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:36:49.33 ID:PT+IC+/U.net] >>361 そこまで知っているのなら俺が言っていることの意味は分かるはずだが。 PAEまで使えばとりあえず4GBx10までは見える。 ただ、PAEがマトモに使えるようになったのはWin8からだ。 そして、そんなことをやるより64bitに移行するのをMSは選択した。 XPにPAEという声も根強かったが、ガン無視したからね。(それで正しいと思うが)
373 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:42:01.36 ID:dkFhdmkv.net] >>365 コードの場合「使い終わった」を自動的に判定する方法が無いでしょ 勝手なアルゴリズムで判定されても困るので、現実にはそんな実装は使い物にならない 現実にはプログラマーが明示的に指定するしかないんだよね
374 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:53:02.41 ID:rOSfUNAw.net] >>367 いえ関数の実行が終わったら捨ててもいいです
375 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:57:27.51 ID:PT+IC+/U.net] >>367 各クラスのメンバ関数は、そのクラスのインスタンスが全て無くなれば要らなくなる。 当たり前だが、GC上のオブジェクトについては全て「型」を知っている。 だから、GCヒープしか提供していない言語であれば、全く問題なく回収可能。 それ以前に、JIT前提であればとりあえず回収して例外処理で再配置も可能。 コピーオンライトの関数版だ。 とにかく君達が懐疑的なのは分かったが、実際CLRはそうなんだよ。
376 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:00:19.19 ID:WExvsg0o.net] そんなゴミ実装してるわけねーだろ 常識で考えろ
377 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:03:28.46 ID:rOSfUNAw.net] >そのクラスのインスタンスが全て無くなれば要らなくなる なんだその非論理的な思考は X x = new X(); x.Baka(); x = null; //よし、いらなくなった!かいほうだ!! x = new X(); x.Baka();
378 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:09:52.47 ID:RZYVlzX/.net] GCの実装を妄想で語るスレ?
379 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:11:24.05 ID:PT+IC+/U.net] >>371 X x = new X(); //ここで初めてオブジェクトのメンバ関数も配置される x.Baka(); x = null; //これ以降解放してよし。GC対象。 x = new X(); //ここで再びXがメンバ関数と共に配置される x.Baka();
380 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:15:38.85 ID:RZYVlzX/.net] .NETのGCも一般のGCの機構も理解してないみたいだね 全てが参照カウントだと勘違いしてる アセンブリの機構考えれば、即時開放がありえないとわかると思うけど 何でそんな実装だと思ったんだろ?
381 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:16:15.49 ID:ThaQ2i1X.net] >>369 どうなんだよ 実際32bit版で4GB越えれるのかよ? 仕様上はできるっていうならC言語でもできるって言ったよな?
382 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:17:40.85 ID:PT+IC+/U.net] てかまあもうスレチだし止めよう。 とにかくCLRはそうなんだよ。 ググッてもなかなかでてこないのだけど、(いいキーワードが思いつかない) 例えば delegate というのは関数ポインタなんだけど、これはへまをするとGCされる。 https://msdn.microsoft.com/ja-jp/library/43yky316(v=vs.110).aspx kchon.blog111.fc2.com/blog-entry-139.html https://msdn.microsoft.com/ja-jp/library/17sde2xt(v=vs.90).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-3
383 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:19:10.62 ID:PT+IC+/U.net] >>375 分かりやすく書いただけ。 もっと分かりやすく言えるのなら、君が371にレス付ければいい。 要するにエラーにはならないということが明確に分かればいいだけだろ。
384 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:23:12.34 ID:rOSfUNAw.net] そうかそうか >>373 はクラスロード時にJITコンパイルが行われると勘違いしちゃったんだな それでオブジェクトの寿命とリンクするという珍妙な発想に至ったと
385 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:24:00.21 ID:PT+IC+/U.net] >>375 32bit版とかいう概念がJavaやC#の仕様にないってことだよ。 そこは既に抽象化済みなんだよ。 はいもうこの件は終わり。 PAEまで使って32bitを延命させる意味はないとMSが判断した以上、.NETもそれに追従だ。 今後はどうなるかは知らない。
386 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:28:11.27 ID:ThaQ2i1X.net] >>375 > 32bit版とかいう概念がJavaやC#の仕様にないってことだよ。 > そこは既に抽象化済みなんだよ。 長々続けて結論それ?
387 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:28:25.18 ID:RZYVlzX/.net] >>376 最初のコード例、自分でGC呼んでる時点で即時開放理論が破綻してるじゃん なんで自分で理解できてないサイトをなんで出すの?
388 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 01:37:37.39 ID:RZYVlzX/.net] あー…、読み返したらプロセスアドレス空間もまともに理解せずに MMUで拡張できるとか言ってるレベルなのねこの人
389 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 03:17:16.45 ID:+Z/sOppv.net] なんかスレ伸びてると思ったらスレ違いのことで伸びてるのか。 > そのクラスが使用される時にメンバ関数がメモリ上に配置され、不要になれば回収される。 C#なら回収されるのはアプリケーションドメイン単位 >>376 それはおそらく関数ポインタを入れてる変数がGCされている
390 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 03:20:50.96 ID:PT+IC+/U.net] >>375 ちなみに知らないのだとおもうが、PAE対応アプリもあるにはある。 SQL Server とか、他にも一つか二つくらいあったはず。逆に言えばそれくらいしかなかったと思う。 > この結果、アプリケーションは 15 GB までの物理メモリにアクセスできます。 https://msdn.microsoft.com/ja-jp/library/Cc785115(v=WS.10).aspx https://technet.microsoft.com/ja-jp/library/ms175581(v=sql.105).aspx APIはMapUserPhysicalPagesで窓アクセスになる。 https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa366527(v=vs.85).aspx てかこの件について君らがムキになる意味が分からん。 ランタイムで隠蔽すれば普通に出来る。(ユーザーが全く関知する必要がない=同じソースコードで動く) ただし出来るのとやるのは別で、MSは64bit化を急ぐという判断だった。 PAEは延命で、64bit化は解決なのだから、妥当な判断だと思う。 逆にLinuxはPAE派だったと思ったが、どうなったのかは知らない。
391 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 03:21:26.35 ID:PT+IC+/U.net] 広範囲にランダムアクセスをするのでなければ、窓アクセスでもそこそこ使える。 オブジェクト指向なら見えないもの(privateやスコープ外)の方が多いのだから、 ランタイムがしこしこ貼り直してくれれば問題ない。 これを手動でやるとなると、実際には管理しきれないから、 単純なキャッシュ的使い方にするか、あるいはラッパを用意するかになる。 もちろんそれでもやりたい人はやれるようにAPIがあるわけだが。 > 大量のデータを操作するアプリケーションが、ハード ディスクの代わりにメモリにデータを維持することで、パフォーマンスが向上します。 https://msdn.microsoft.com/ja-jp/library/cc775523(v=ws.10).aspx C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能) だから4GBの壁が直接見える。 C#とかはそもそもメモリモデル自体が必要ない。 変数はただの箱で、前回入れたものが出てくるだけ。共用体は禁止だ。 だから4GBの壁なんてものがそもそも存在しない。 ランタイムさえ対応すれば同じソースでPAE/AWEで15GBまでヒープ上に確保できることになる。 (C#のArrayは必ず添字チェックをしているため、ランタイム側で細切れに貼り直すことが出来、 結果、ユーザ側に15GBの一つのArrayを確保することも可能。) ただしMSはこれを目指さなかった。 特に不思議なわけでもなく、ムキになる話でもないと思うが。 GCヒープ自体が一つのオブジェクトみたいなもので、get/setしかインタフェースを提供してない。 だからこういう事が普通に出来る。 (ただし繰り返すが、出来るのとやるのは別)
392 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 03:33:20.14 ID:ThaQ2i1X.net] >>385 だから何度も言ってるように仕様はそうかもね、でも仕様の話だったらC言語でも可能だよ で実装はどちらも対応してないよね
393 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 03:36:37.45 ID:RZYVlzX/.net] そらあらゆる機能を使えば「可能」だろうが あんた「実際」とか「たぶん」とか実装の話してただろ .NETは無闇にアンロードはしないよ
394 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 03:37:04.93 ID:RZYVlzX/.net] >>387 は>>385 宛てね
395 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 04:21:48.04 ID:RZYVlzX/.net] C#単体での仕様にすら注意書きに 実装では不要かどうかは将来使われるか解析してから決めるだろうとか書いてある ちょっとひどすぎませんか?
396 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 04:22:58.08 ID:PT+IC+/U.net] >>386 そうじゃなくて、Cの場合は sizeof(void*) が確定的なんだよ。 だから32bit版というものが絶対的に存在してしまう。 C#にはそれがないって話。 ただこれは379と同じなんだけどね。
397 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 04:24:02.48 ID:PT+IC+/U.net] >>384 > C#なら回収されるのはアプリケーションドメイン単位 了解した。 > それはおそらく関数ポインタを入れてる変数がGCされている その線は考えたが、、、まあ上記と合わせて冷静に考えればそのようだ。 ここの人達は関数の動的配置/回収をそもそも信じていない。 だから回収事例として用意したつもりだが確かに間違いのようだ。 動的関数生成をしないのなら、GCする必要もなく、回収がAPドメイン単位なら静的展開してそれっきりだね。 ちなみに回収タイミング/単位自体は俺は気にしておらず、動作できる例として出していたのだが、 そこに噛みつく奴がいて余計におかしな事になった。 ただまあ、APドメイン単位での回収で確定だし、助かった。 > プロセス全体を停止せずに、個々のアプリケーションを停止できます。 アプリケーション ドメインを使用すると、1 つのアプリケーション内で実行されているコードをアンロードできます。 > 個々のアセンブリや型はアンロードできません。 アンロードできるのはドメイン全体だけです。 https://msdn.microsoft.com/ja-jp/library/2bh4z9hs(v=vs.110).aspx ただこれならもうちょっとC++/CLIは緩くてもいいはずなのだが、、、 他クラスのpublicメンバ関数を呼ぶ場合もstaticじゃないとC2352エラー(下側例)になるのだが、これは何故? APドメイン単位で展開してるのなら呼ばせてくれよーと思う。(これがあるから型単位だと思っていた) https://msdn.microsoft.com/ja-jp/library/2x426hte.aspx なお回答頂けるのであれば、CLIスレで構いません。 peace.2ch.net/test/read.cgi/tech/1268613679/
398 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 04:25:27.88 ID:PT+IC+/U.net] すいません、>>391 は>>383 宛て
399 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 04:36:51.05 ID:RZYVlzX/.net] >>390 sizeof(void*)は確定的じゃないし そもそもメモリアドレスって物理アドレスそのまま使ってるわけじゃないよ
400 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 04:44:57.21 ID:RZYVlzX/.net] >>391 >とにかく君達が懐疑的なのは分かったが、実際CLRはそうなんだよ。 って言ったんだから自分でGC呼んじゃ駄目でしょ
401 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 05:53:43.52 ID:ThaQ2i1X.net] >>390 Cのソースコードに32bit版も何ももありませんけど? ついでにいうと事前にネイティブコードに変換しなければならないというCの仕様もありません C言語のインタプリタも可能ですし実際にあります で、何が確定的ですか?
402 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 06:51:30.72 ID:4+3Ce3pv.net] 専用ハード作って動かせばなんでもできるよ
403 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 06:59:57.30 ID:BmBfsQQC.net] >>305 > これが何故、ビルドエラーしないのでしょうか。 この一文で読む価値のないページってわかる w
404 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 08:40:28.48 ID:lcSEArpd.net] 自説に絶対の自信ニキ vs 違う、違うよ(その他全員) の構図が大変面白い よろしい、続けたまえ スレ移動して誘導先張ってくれると なおありがたい
405 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 08:51:45.99 ID:QigibK2U.net] >>385 >C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ いえ、ISO/IEC 14882:2014はそうはなってないと思います
406 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 11:22:32.99 ID:LojobDxZ.net] やっぱりマシンがどのように動作しているか理解するには、c言語が理解できる程度の脳ミソがないと難しいのかね。
407 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 11:52:36.13 ID:PT+IC+/U.net] >>399 どれのこと?Nxxxxでよろしく。またはググるからキーワードをくれ。 www.wdic.org/w/TECH/ISO/IEC%2014882%3A2014
408 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 11:54:51.98 ID:PT+IC+/U.net] スレチだが、動的関数配置に関してはもうちょっと分かりやすい例があった。 > DynamicMethod クラス > コンパイル、実行、および破棄できる動的メソッドを定義し、表します。 破棄されたメソッドは、ガベージ コレクションの対象となります。 > Just-In-Time (JIT) コンパイラ によって作成された実行可能コードは、DynamicMethod オブジェクトがクリアされたときにクリアされます。 https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.dynamicmethod(v=vs.110).aspx C/C++ではやってない話だから気味が悪いのだと思うが、とにかくCLRの世界はこんな感じなんだよ。 なおこれは既存のMSIL(中間言語)をコピーするようなので、生成ではなく流用になる。(evalではない)
409 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 12:49:28.58 ID:RZYVlzX/.net] >>402 それ標準実装じゃないだろ それを「とにかくCLRの世界はこんな感じ」って無茶言うなよ
410 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:10:51.94 ID:ThaQ2i1X.net] >>401 お前が >C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ な根拠を出さなきゃいけない立場なの あと確定的ってのも
411 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:33:48.83 ID:LojobDxZ.net] そういう機能を実現するために使う言語だからそういう機能の標準化がしづらいんだよ。
412 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:34:44.79 ID:dkFhdmkv.net] まだやってるのか… >>402 元々staticキーワードの有無によってできる関数の違いの話じゃなかったっけ? なんでプログラムが実行中に組み立てたメソッドの話になってるの? それで100レスくらい使って>>302 や>>321 で書いてた疑問や間違いについて少しは理解できた?
413 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:45:48.19 ID:39XjsZ/s.net] どうでもいいが、32bit版の.Netアプリって 32bit版の.NET Framework上で動くんじゃないの? というのも32bitアプリからは64bitDLLを読み込めないから だから32bit版の.Netアプリは32bit版.NET Framework上で動くと思うんだけど (その辺の事情はスレ違いだしよく知らんが) フレームワーク側、.Net側、管理側が32bitで4Gの壁があるのに、 その制限の中で4G以上のコードのスワップの運用をするの? そんな実装はありえないと思うんだが MMUの話が上がっていたが、あれはハードウェアで高速だし、 MMUは物理メモリが足りない場合にスワップする用途だが、 今足りない前提になっているのは論理アドレスの方なわけで 論点がズレてるわな
414 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:57:03.37 ID:PT+IC+/U.net] 俺の疑問(302)は解消したよ。 お前らの疑問はあるみたいだし、それについて説明も出来るけど、もう面倒なので止める。 誰か分かる人は回答してやってくれ。 てかお前らもうちょっと他言語も触った方がいいぞ。 Cの世界だけで閉じているから、Cを客観的に見れてないんだよ。 それとは別に、401に対する回答は募集する。
415 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 14:05:36.49 ID:RZYVlzX/.net] 虚勢ばっかりだな
416 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 14:15:49.93 ID:WwQzZTLz.net] いい加減スレ違いの話は収束して欲しい。
417 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 14:41:30.97 ID:ThaQ2i1X.net] ブーメランな捨て台詞で終わったな
418 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:14:28.65 ID:o5uWY3Fx.net] >>408 C++はオブジェクト以外の領域をポインターで指すこと自体出来ないんだからわかれよ int a; (&a + 1); // undefined behavior 1.7 The C++ memory model The memory available to a C++ program consists of one or more sequences of contiguous bytes "sequence"は複数形だぞ
419 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:31:50.22 ID:LojobDxZ.net] そもそも16bitアプリでfarやhugeでそれ以上の領域扱うなんて当たり前だったろうに。 cにもc++にもリニアなメモリ空間という縛りはない。 だいたいポインタが何者かすらその挙動でしか定義されていない。 実装次第でどうにでもなる。
420 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:34:20.90 ID:FVa42+rI.net] >>412 本題とはずれてくるけど、 &a + 1 は undefined じゃないよ。 *(&a + 1) にアクセスしたり &a + 2 すると undefined になる。
421 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:34:29.27 ID:nPjcOL1Q.net] そもそもメモリ空間やリニアうんたらまで考慮してプログラムしなきゃあかんのか。
422 名前:デフォルトの名無しさん [2015/09/22(火) 16:37:24.66 ID:4a3z373J.net] 俺が感じるのは int a;はaのアドレスの位置を直接番号で示していると思うんだ int a[10];と書くとアドレスの先頭のアドレスの番号を示していると思うんだ a=a+1と書くとaは変数ではなく番号だからエラーになるんだと思うよ
423 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:40:57.49 ID:BmBfsQQC.net] >>414 配列じゃないんだけど?
424 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:42:13.67 ID:gQIVdZQM.net] >>416 配列名を示す識別子を,配列要素を指定する[] を伴わずに単独で使用する用法は,特異点にしてC/C++にて一番醜いところ
425 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:51:41.05 ID:WExvsg0o.net] いちいち&a[0]と書けと? &a[0]のほうが醜いと思うが
426 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:59:16.98 ID:PT+IC+/U.net] >>412 > contiguous bytes 他の言語ではこの必要すらない。 これがリニアって事だよ。 ちなみに君はC以外の言語一つでも使えるかい? だったらその言語でこの必要があるかを考えてみるといい。
427 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:59:35.71 ID:FVa42+rI.net] >>417 配列じゃないオブジェクトへのポインタ演算のルールは要素数 1 の配列といっしょ。 5.7 [expr.add] p4 > For the purposes of these operators, a pointer to a nonarray object > behaves the same a
428 名前:s a pointer to the first element of an array of length > one with the type of the object as its element type. [] [ここ壊れてます]
429 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:07:12.07 ID:gQIVdZQM.net] >>419 構造体・クラスの場合は,単独の識別子でアドレスを示すことはないだろう? それと同じことだ
430 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:16:16.72 ID:WExvsg0o.net] 構造体と配列は大きさが違うだろう
431 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:30:38.04 ID:RZYVlzX/.net] >>420 それ実装じゃなくて抽象機械相手のもので x86の論理アドレスや物理アドレスなどとポインタと同一なんて規定は書いてない JITにしてでコンパクションしてアドレス変更されようがCは関係ない お前本当都合が良いと思った事しか答えないな いい加減どこが決定的な問題なのか説明しなよ それとずっと逃げてないで sizeof(void*)が確定的という事についても説明してね
432 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:33:33.60 ID:gQIVdZQM.net] >>423 大きさ?なんの話だ? struct a { int n1; int n2; int n3; } int b[3]; どちらも同じ集合体だが a と b で意味するものが違うのは不整合だろう?
433 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:38:23.04 ID:RZYVlzX/.net] つか言語仕様にunsafeとfixed持ってる時点で同類なのにアホなのかなこの人
434 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:40:24.63 ID:RZYVlzX/.net] >>426 は>>425 宛てじゃないからね
435 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:22:00.45 ID:WwQzZTLz.net] >>425 それ、違くない? struct {int n1; init n2; int n3;} a; int b[3]; printf("%p",a); printf("%p",b); エラーにはならない。
436 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:26:29.93 ID:WwQzZTLz.net] >>428 ごめん、a,bの前に&がいる。
437 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:53:37.56 ID:BmBfsQQC.net] >>421 なるほど、勉強になったわ
438 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:59:44.87 ID:PT+IC+/U.net] >>424 別に逃げているわけではなくて、 今の君の知識範囲では理解できないだろうから諦めたんだよ。 もう既に十分説明している。 俺の疑問は既に解消したのだから、君の突っかかりにいちいち答える必要もない。 君は知っているつもりなんだろうけど、全然分かってない。 元々のブログ(>>295 )、以下のくだりは真なんだが、そもそもこれを理解できてないだろ。 > たとえば、32bitのCPU上では、通常のプログラムは、4GBのメモリ空間に制限され、4GB以上のメモリを利用することは非常な困難を伴います。 > ところが、JavaやC#といった言語は、原理上、そのような制限を受けません(バンク切り替えだとか、セグメントだとかの話はあえて無視)。 > あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが、ポインタといった概念が言語上に出現しないことによって、 > データをメモリ上の番地で表現する必要がないためです。 俺はこの部分の説明をしていただけなんだよ。ただ、君が理解できていないとなると、その前の部分 > C/C++のプログラマの住んでいる世界は、ポインタがあるおかげで、ある意味では、何でも出来るアセンブラの世界ではあるのですが、 > そのことが逆にC/C++プログラマの発想を狭い範囲に閉じこめてしまっていることが多々あります。 > JavaやC#のようなポインタのない世界が実は、 > アセンブラのようなポインタというかアドレスに支配されている世界では想像しにくい新たなパラダイムや手法を与えてくれることもあります。 も真なのかな、とも思えてくる。(個人的にはこの部分はハズレだと思っていた。) 君が無知なままでいるのは君の責任だ。 誰かが君のことを可哀想と思うのなら、いつか教えてくれるかもしれない。 俺はここに認めてもらいに来たわけではなくて、疑問を解消しに来ている。だから用は済んだ。 君が俺のことを誤解するのも君の自由だ。それを修正する必要もない。 ただなあ、とりあえず最初のブログの中身も理解出来ないのにその態度は、痛いよ。 そういうのは止めた方がいい。 傍観している連中の中にも明らかに分かっている奴もいるはずだが、誰も出てこないのはそういうことだよ。
439 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:11:33.18 ID:FVa42+rI.net] >>431 >> ところが、JavaやC#といった言語は、原理上、そのような制限を受けません(バンク切り替えだとか、セグメントだとかの話はあえて無視)。 >> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが、ポインタといった概念が言語上に出現しないことによって、 >> データをメモリ上の番地で表現する必要がないためです。 これがポインタの存在によって C や C++ に限っては成り立たないと言われているようだけど、 そんなことはないと思うんだ。 言語上の「ポインタ」を Java や C# の参照と同じように実装することは禁止されちゃいないわけで。 そこらへんわかってて言ってるの?
440 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:20:45.42 ID:ThaQ2i1X.net] >>432 こいつは何言っても解らないよ 可哀想なやつだと思うけど俺は諦めた
441 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:23:21.47 ID:39XjsZ/s.net] 毛の壁風の人なんじゃね?
442 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:24:45.07 ID:PT+IC+/U.net] >>432 生ポインタを使えないC言語なんて存在価値がないだろ。 実際それがあったとして、使う奴がいるとも思えないが、 ネイティブコードを吐くJavaが欲しい時に使うのか?
443 名前:432 mailto:sage [2015/09/22(火) 19:26:32.23 ID:FVa42+rI.net] >>433 そうだね >399 からそう言われてるわけで、説得できるとはあんまり思ってない。 堂々と「以下のくだりは真」というのにツッコミ無しっていうのはマズいだろうと思った。
444 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:27:26.06 ID:ThaQ2i1X.net] ほらなw Emscriptenとかも知らないんだろう
445 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:33:20.20 ID:FVa42+rI.net] >>435 存在価値の話は関係無いと思うんだ。引用箇所は >>> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが という話だからね。 C や C++ でも同じことでしょ、と言っている。
446 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:34:46.81 ID:PT+IC+/U.net] >>432 ちなみに禁止されていないのは確かだが、C言語では実現出来ないだろ。 C++で演算子のオーバーロードを基本型にも全部やってラップすれば達成可能な気もするが、 ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)
447 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:36:47.03 ID:ThaQ2i1X.net] >>439 Emscriptenでググれ 生ポインタの扱えないC言語(に限らないけど)だぞ
448 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:42:18.38 ID:PT+IC+/U.net] >>437 いやちょっと待て。実はEmscriptenは使用を検討しようとしていた。 理由は生JavaScriptが色々糞だからで、TypeScriptも検討中だ。 それはEmscripten用の書き方だということか? ならば確かにその記述方法は妥当だろう。 LLVMからの変換だと思っていたが、それ以前にLLVMに生ポインタコードが出ないようにラップするわけだな。
449 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:44:12.61 ID:FVa42+rI.net] >>439 >385 で言ってた↓の根拠は不明で「ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)」ということでいいかな? > C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能) > だから4GBの壁が直接見える。 なんかはっきりした根拠を思い出したら教えて欲しい。
450 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:58:38.83 ID:39XjsZ/s.net] いやもう、彼の頭をデバッグするのバカらしいし、やめようよ
451 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:58:39.53 ID:PT+IC+/U.net] >>438 それは繰り返しにしかならないが、以下の通り。 原理的な話なら、抽象化された変数領域しか持たない言語(C#,Java)では、アドレスというものがそもそも見えない。 だから、4GBの壁がそもそもユーザーに見えない。 これに対して、C/C++では4GBの壁がユーザーに丸見えだ。 >>432 のように、ポインタをユーザーがラップして全てint**とかにした場合、それは「ユーザーがそう記述した」という。---(A) そうではなくて、ユーザーが通常通り int* のまま使っていて、 それをコンパイラだけで int* のネイティブにするのか、int** のJava的参照ポインタにするのかをコンパイルオプションで切り換えられるのなら、 ---(B) それは「コンパイラで4GBの壁を越えた」という。 いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。 ところで、Emscriptenは(B)のどちらなのか、知っていたら教えてくれ。 (ユーザ側で int** と意識して書く必要があるのか、 もしかしてユーザーは int* のままで書いてもEmscriptenが int** に完全に変換できるのか)
452 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:59:56.93 ID:39XjsZ/s.net] この感じ、知っている人は知っている、毛の壁臭
453 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:06:26.45 ID:PT+IC+/U.net] >>442 違う。 > ポインタのところに若干制限があった気がする。 演算子のオーバーライドは俺は使ってないので詳しくないのだが、 最近読み直した「プログラミング言語C++」には11.2.3に(第3版ならP317) > 特に、ポインタだけを操作する演算子関数は定義できないことに注意して頂きたい。 とあって、この件について本の中で別に説明されていたのだが、今見ても該当部分がすぐには出てこないということ。 たしかC言語との互換性を保つために、ポインタ演算子については自由に上書きできない部分があったはず。 > C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能) > だから4GBの壁が直接見える。 根拠も何も、そのまんまだ。 逆に聞いてみよう。 君はC#が使えるみたいだが、C#のマネージドコードだけの世界で、4GBの壁を意識することはあったかい? 無いだろ。そういうことだよ。
454 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:14:07.69 ID:FVa42+rI.net] >>444 > これに対して、C/C++では4GBの壁がユーザーに丸見えだ。 これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。 > いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。 だれもそんなことは言ってないと思うんだ。 「C/C++では4GBの壁がユーザーに丸見えだ」などという人が一人いるので、それは 言い過ぎだと言っている。 >>446 「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。 ループ気味になってきたし、ここまでの書き込みをちゃんと読んで理解しようとしてくれていれば この流れでそんなこと言えるわけが無いと思うんで、僕もそろそろ降りさせてもらうよ。
455 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:21:17.81 ID:PT+IC+/U.net] >>447 > これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。 いや見えてるだろ明らかに。 void*が32bit環境では4GBまでしか表せない。だから4GBの壁が見える。 C#やJavaにはこれがない。それだけの話だよ。 > 「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。 あるだろ。というか言い出したのはそちらだが。 4GBの壁は変数領域が抽象化されていないから見える。 だから、int**にして抽象化すれば直接は見えなくなる。 これがC#やJavaで4GBの壁が見えない理由そのものだ。ブログ主もこの観点で言っている。 まあいいよ。完全にループだし、君の論法もループしている。 降りで了解だ。こちらもその方が助かる。 それはそうとEmscriptenの情報があればよろしく。
456 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:30:45.91 ID:39XjsZ/s.net] 何かっこつけてんだよ、初心者の癖に
457 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 21:15:01.03 ID:ozShReaP.net] クサカベは知ってるけど 毛の何とかは知らないなあ
458 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 21:58:18.19 ID:PT+IC+/U.net] >>444 ,448 スレチだが自己解決した。 生ポインタはTypedArrayにマッピングされるようだ。 まあ、冷静に考えれば当然だった。
459 名前:デフォルトの名無しさん [2015/09/22(火) 22:12:42.50 ID:hQ0EouVl.net] 4GBの壁か。 配列を使う場合など、データサイズの上限なんかは 何言語であろうと普通に何らかの了解のもとに使っているよなあ。 C++ みたいにsizeof(void*)がはっきりしてれば自明の理として納得いくが、 そうでない言語では怪しげなご託宣に従うしかないという 理詰めな性格の人には優しくない話だよね。
460 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:39:14.16 ID:PT+IC+/U.net] むしろ俺は話の通じなさにびっくりだったわ。 32bit環境でのC言語で4GBの壁が見えるのは自明でしかない。 それを見えないと言われても頭おかしいとしか思えない。 >>447 マジでお前らは他言語少しでも触った方がいい。 完全に盲目になっている。
461 名前:412 mailto:sage [2015/09/22(火) 23:51:24.00 ID:7b9YUjXM.net] むしろ わざわざ>>412 で『"sequence"は複数形だぞ』 って書いてやったのに目に入らない盲目にびっくりだわ
462 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:55:40.08 ID:PT+IC+/U.net] >>454 いやそこは関係ないんだよ。 ちなみに君もC/C++しかできないのか? ちょっとマジで他言語、何でもいいからやってみた方がいい。
463 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:57:25.78 ID:LojobDxZ.net] 特定の処理系でvoid*が32bitという話でしかない まあ、それで99.9%困らないからcpuの機能に薄い皮被せて見せているだけのはなし 16bit時代にhugeやfarでそれ以上にアクセス出来るようにしてあったのは、それですまないほど不便だったから cやc++はの扱うcpuはハーバードだったり1ワード16bitがアドレスの指し示す最小単位だったりとなんでもあり
464 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:02:54.19 ID:M/UFFhhb.net] 32bitで表現できるポインタが4GBまでだが、仮に1アドレスが4バイトでも良いんじゃないかとも思った。 文字列は2文字ないし4文字でワンセットになるけど
465 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:07:22.49 ID:Q8fOJWKp.net] >>453 「32bit環境でのC言語で4GBの壁が見える」が言えるのと同じように 「参照を32bitアドレスで表現しているJava/C#処理系では4GBの壁が見える」とも言える ・・・んじゃないの?
466 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:15:57.36 ID:qfkgp73Y.net] バカに物事を理解させるのって本当に大変だね 教師には頭が下がるよ 俺にこんなバカで尊大な生徒が居たら無視していじめ問題とかになってるわ
467 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:24:11.18 ID:MwhyHk4V.net] >>458 それはその通り。 ただ、参照自体のサイズをユーザーが関知する必要がない。(ソースコードに現れない) そこが決定的に違う。 だから、処理系が勝手に64bit参照にしていたとしても、同じソースコードがそのまま動くことになる。 ただ悪いが、この件に関して俺がいちいち回答する必要はマジでない。 俺が言っているのは本当に自明なことばかりであるし、君達も少し他言語をかじるだけで分かる話だ。
468 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:28:22.82 ID:nPFFi/Oi.net] ほうほう、C++だとポインターのサイズがソースコード上に現れて同じソースが使えないのですか もちろんポインターのビットイメージを操作する場合を除いてですが
469 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:33:24.68 ID:qfkgp73Y.net] >>461 わざわざコードを書くときにポインタのサイズを意識して同じソースコードで動くように書かないんだろうよ 無能な働き者ってやつだ
470 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:51:40.95 ID:KSDSHGp7.net] staticの意味すら知らなかったんだからC/C++をろくに知らないんだろう。 JavaやC#ですら思い込みによる間違った認識に囚われていた。 ISO/IEC 14882:2014と言われてどのNxxxxかと尋ねるあたりは勘違いのしやすさを象徴していたな。 それでこの態度だから、まわりもろくに間違いを指摘してくれないんだろう。かわいそうに。
471 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:52:34.21 ID:MwhyHk4V.net] 悪いがいちいち面倒なので、アホレスしたIDはそれ以降無視することにするよ。 とりあえず現在の無視対象は ID:nPFFi/Oi, ID:qfkgp73Y マジでお前ら他言語触った方がいい。 そもそも他言語ではアドレス自体を取れないことが多い。 次に、取れたとしてもキャストできなかったりする。 だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。 C言語において無理なキャストをしなければ void* のサイズはコンパイラが自動的に判断して確保してくれる。 結果、32bitと64bitで同じコードが動く。 これはID:nPFFi/Oi, ID:qfkgp73Yみたいな馬鹿でも知っている、当たり前の話だ。 ただこれはユーザーがちゃんとそう記述したことを保証しなければならない。つまり、ユーザー依存だ。 上記のように、そもそもアドレスを取れない言語では、ユーザーがどうやっても sizeof(void*) 依存のコードを記述できない。 だからそもそも 32bit とか 64bit とか気にする必要もない。ここが決定的に違う。 何度も言うけど、お前ら本当に他言語を少しでも触った方がいい。
472 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:58:25.97 ID:nPFFi/Oi.net] そういやVisual Basic 6.0って文字列のアドレス取れたし ビット数依存の糞コードが散乱していたな
473 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:04:51.91 ID:qfkgp73Y.net] >>463 思い込みの塊みたいなやつだから周りが指摘しても意味が無いんだろ それはここで証明されてるじゃないか 指摘すると思い込み一つ増えたみたいだしね。 ここの住人が他の言語を触ったことがないって
474 名前:デフォルトの名無しさん [2015/09/23(水) 01:05:07.72 ID:AnQ6XBDy.net] アドレスを扱えるのは機能性の一つであって欠点ではないよ?
475 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:06:11.71 ID:i5QbssGO.net] なんか時々現れるよな 新手のキチガイが
476 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:08:10.92 ID:qfkgp73Y.net] >>467 場合によっては欠点になるよ 上にも書いたけど無能な働き者によって他の環境で動かなくなる
477 名前:デフォルトの名無しさん [2015/09/23(水) 01:13:44.76 ID:AnQ6XBDy.net] そりゃ書いたとおりにしか動かないでしょ。
478 名前:デフォルトの名無しさん [2015/09/23(水) 01:16:15.46 ID:AnQ6XBDy.net] 1+1を間違えて1+2と書く恐れがあるから+演算子を無くすべき!とか言ったって仕方ないよ。
479 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:21:28.78 ID:MwhyHk4V.net] >>467 もちろんその通り。 生ポインタを扱えることこそがCの最大の特徴であり、それをやらないのならCを使う意味はほぼ無い。 ただ生ポインタってのは実際は両刃の剣で、生ポインタさえなければ色々なことが単純になるんだよ。 そこは元のブログにも書かれているし、もっと他にも色々ある。 結果、Java作者はない方がいいと思ったから廃止したし、 C#作者は無いと困るがふんだんに使われても困るということで例外的使用に留めている。 ただまあ、本当にここら辺は一般論で、別に俺がわざわざここで言い直す必要もなく、 他でもさんざん言われていることだ。あのブログの中でも然り。 そしてそう思う奴も覆いから他言語も賑わっているわけで。 てゆうかもういいっすかね。特に俺である必要ないはずだし。
480 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:23:01.21 ID:0mJKXhs3.net] いや、皆がお前だけ消えてくれることをのぞんでるぞ
481 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:23:53.95 ID:v0Nc4YZQ.net] >>472 うん、もういいよ お前の代わりは居ないけど要らないから
482 名前:デフォルトの名無しさん [2015/09/23(水) 01:28:45.41 ID:AnQ6XBDy.net] 今はどの環境でもリークをチェックできるし困ることは何もないけどなあ。 後始末の必要なリソースはメモリーに限らないので、メモリー管理によって鍛えられた C++戦士は凄腕プログラマへの近道。
483 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:31:43.38 ID:nPFFi/Oi.net] >メモリー管理によって鍛えられた >C++戦士は凄腕プログラマへの近道 もうC++を使わないで下さいね他人がきっと迷惑してます
484 名前:デフォルトの名無しさん [2015/09/23(水) 01:32:57.44 ID:AnQ6XBDy.net] >>476 なるほど、キミはバトルプログラマーを知らないんだね?
485 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:38:23.42 ID:M/UFFhhb.net] 最近はスキルが有効かどうかが環境より言語に左右されるような気がする。
486 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:45:30.10 ID:iC4K+Xaq.net] >>472 >結果、Java作者はない方がいいと思ったから廃止したし、 Java8で復活した部分がある,C++ では ->*, ::* で扱うポインタ Java での呼び名:メソッド参照 peace.2ch.net/test/read.cgi/tech/1434079972/12
487 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:49:55.57 ID:nPFFi/Oi.net] 危険を伴う有用な機能を具備することのリスクが 説明を受けても理解できない低能はどうしようもないな だから>>479 みたいなとんちんかんなレスをするんだろう
488 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:55:54.98 ID:IndlIx5T.net] 散々論破されてるのに悪いと思わない時点でただのキチガイだろ
489 名前:デフォルトの名無しさん [2015/09/23(水) 01:58:32.17 ID:AnQ6XBDy.net] はあ、また論破してしまった。 やはりC++は最強だな。
490 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:02:23.55 ID:IndlIx5T.net] >>464 >そもそも他言語ではアドレス自体を取れないことが多い。 >次に、取れたとしてもキャストできなかったりする。 >だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。 君の大好きなC#はポインタもsizeofも取れるよ 君は他言語を触る前にC#について勉強しなさい
491 名前:デフォルトの名無しさん [2015/09/23(水) 02:04:33.69 ID:AnQ6XBDy.net] しかし今日の敵は弱かったな。 今までで最弱じゃないか?
492 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:12:08.91 ID:MwhyHk4V.net] >>479 これか? qiita.com/pepepe/items/3d810e1bbed25768caa0 これは危険なタイプの生ポインタではないんだ。だから問題ない。
493 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:12:34.07 ID:qfkgp73Y.net] 最初は32bit環境で4GB越えのバイナリを実行できる CやC++は出来ない だったはずなのに、指摘されても誤りを認めず最後の方には 参照が32bitであることを関知する必要がない に変わってた。
494 名前:デフォルトの名無しさん [2015/09/23(水) 02:18:39.97 ID:AnQ6XBDy.net] C/C++で出来ないことはレジスタをいじること。 他は何でもできるから。 わかったらもうケンカ売ってくるなよw
495 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:51:39.64 ID:iC4K+Xaq.net] キャリーフラグは触れてほしかったね‥ キャリーの読み込み,書き出しをしたいんだ インラインだと後で最適化という介入があって心配だ
496 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 05:09:46.93 ID:DOrhv1Zg.net] >>448 > void*が32bit環境では4GBまでしか表せない。 この時点でなにもわかってないことがバレバレじゃん w
497 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 05:12:56.52 ID:sl1FEDPC.net] >>487 インラインアセンブラはダメか
498 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 06:12:19.83 ID:kDaXs3BE.net] メモリマップドレジスタみたいに環境によっては弄れるよね
499 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 11:53:18.53 ID:dAcDykGY.net] >>490 ありゃ規格の範囲外だからな。 gcc に慣れすぎて、他の使うとつらい。 >>491 I/Oレジスタじゃなくて、CPU のレジスタの話じゃないかな?
500 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 13:59:22.37 ID:DOrhv1Zg.net] >>491 レジスタは読むだけでフラグリセットしたり複数回読むと違う値になったりする奴があるから高級言語で読み書きするのはちょっと怖い >>492 どこまでを CPU レジスタって言うかによる
501 名前:デフォルトの名無しさん [2015/09/23(水) 20:23:32.33 ID:VRhTdQAB.net] メモリマップドI/Oではなく、 メモリマップドレジスタね 制御記憶が主記憶空間にマッピングされているという
502 名前:デフォルトの名無しさん mailto:sagete [2015/09/23(水) 20:32:04.80 ID:1jqGrEyR.net] 2Dゲーム当たり判定総合 [転載禁止]c2ch.net peace.2ch.net/test/read.cgi/tech/1442990347/
503 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 20:43:11.41 ID:3ci5dXPK.net] 0ページレジスタもね
504 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/23(水) 20:54:04.93 ID:KfupEJ55.net] △ マップド D マップト
505 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 21:07:34.84 ID:D/ibv0yF.net] クソコテは日本語もマトモに書けないのか
506 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/23(水) 21:15:35.76 ID:KfupEJ55.net] >>498 添削の時間は限られている。まる、ばつ、さんかくだけで採点できる。
507 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 22:20:05.97 ID:lyPqrQHB.net] >>499 添削?採点? 突然何を言い出すのですか。頭は大丈夫ですか。 それにまるばつさんかく以外の記号が書かれているようです。
508 名前:デフォルトの名無しさん mailto:sage [2015/09/24(木) 01:42:54.1
] [ここ壊れてます]
509 名前:3 ID:/TjFSMYs.net mailto: 基地外が新たな基地外を呼び寄せるカオスなスレ [] [ここ壊れてます]
510 名前:デフォルトの名無しさん [2015/09/24(木) 22:11:32.00 ID:O8aOI61G.net] 初期化子でthisを渡すと警告が出ていたと思うんだけど、いつの日からか出なくなった。 どこかの時点で規格が変わったの?
511 名前:デフォルトの名無しさん mailto:sage [2015/09/24(木) 23:09:55.66 ID:y5NlXAUf.net] >>502 普通のコンパイラーでは 警告と規格は関係ありません
512 名前:デフォルトの名無しさん [2015/09/25(金) 00:05:04.36 ID:WA9ffgJV.net] もしかしてthisへの代入があった ごく初期のC++のことか?
513 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 01:39:59.76 ID:hOC+hAXG.net] >>502 これ? https://msdn.microsoft.com/en-us/library/3c594ae3.aspx > 'this' : used in base member initializer list ... > This warning is off by default. ...
514 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 23:34:43.11 ID:IdnO5CBH.net] STLのコンテナcで*(c.begin())とやるのとc.front()とやるのは何か違うの? 同じだとしたらどっちがどっちの糖衣構文?
515 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 23:55:05.37 ID:Ku6iuwWR.net] >>506 糖衣構文では無いよ。 先頭要素にアクセスすると言う目的に対して、同じ結果が得られる別の手段があったというだけの事。 より目的に合っているのは後者だと思うけど。
516 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 00:00:24.18 ID:9hL7F3GQ.net] かなり長いことC++触って無いけど もうboostは、標準仕様になってるんですか? まぁ、コンパイラによるから、何とも言えないかも しれないけどさ
517 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 00:06:37.49 ID:cPpGYmLk.net] >>508 boostのどのライブラリ? 全てなら永遠にその時は来ないよ
518 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 08:10:46.09 ID:OajUOnCA.net] boostの社内における認識が、「誰が作ったか分からないハイリスクなライブラリ」から 「実績があり安心して使える準標準ライブラリ」になるのはいつですかね…
519 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 08:23:46.53 ID:ySVgmYih.net] boostに重大なバグがあって会社に損害を与えたとき誰も責任を取れないでしょ? 永遠にその時は来ないよ。
520 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 09:17:56.96 ID:teqXcjFQ.net] boostは、その全てが必ず標準化されるわけでは無いよ。
521 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 09:21:36.35 ID:T1LoOiMi.net] ↑ごらんください! これがアスペです!!
522 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 09:37:29.93 ID:cPpGYmLk.net] >>511 OSS全く使えない会社か 勤めたくないね
523 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 11:02:45.10 ID:xWCYZ6+4.net] そういう会社はboostよりも先に自分が作り込んだ重大バグで潰れるから心配ない
524 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 11:30:42.93 ID:FH4mU5/4.net] そう言えば、バグがあった時直せないからって理由で、C++開発なのにC++標準ライブラリ禁止って職場があったわ
525 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 12:50:25.19 ID:9hL7F3GQ.net] >>516 スゴイ会社だな 会社で使ってるコンパイラが信用出来ないのか…… もしかしてVectorとかのSTLが禁止? まぁ、VC++6.0ではVectorで醜いバグあったらしいが って事は、コンパイラ作ってる様なもんだな (コンパイラは言い過ぎかも知んないけど)
526 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:00:09.30 ID:FH4mU5/4.net] >>517 コンテナはOKだった と、言ってもstring、vector、mapくらいしか使ってなかった気がする algorithmは全面禁止だった なので、ループ文とそのコピペの嵐で読むのも辛かったしバグも多かった記憶
527 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:05:49.06 ID:FH4mU5/4.net] 書いてて思い出し笑いしちゃったよ 「バクがあった時直せない」って理由で標準ライブラリ使わずに、自作コードでバクだらけとか、草生えまくりだなwww
528 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:19:28.92 ID:uKQbY5Ux.net] A a = A(); ってやったとき ・単にaが構築される ・右辺が構築されてから左辺のコピー(ムーブ)コンストラクタが呼ばれる ・左辺と右辺がそれぞれ構築されてから左辺のコピー(ムーブ)代入演算子が呼ばれる どれ? デバッガで追ってみるとコピー(ムーブ)コンストラクタ/代入演算子は呼ばれてないから ・単にaが構築される のはずなんだけど コピー(ムーブ)コンストラクタ/代入演算子がないクラスでこれやると なぜかエラーが出るんだよね A &a = A(); ってやるとコンパイル通るけどMSVCの独自拡張みたい? 素直に A a(); ってやればいいんだけど A *a = new A(); ってやったときとシンタックスの一貫性がなくて微妙。 (常に 変数 = コンストラクタ の形にしたい) あと関数宣言として解釈されることがあってイライラ。 標準規格とかでどう定義されているのかとか、説明できる方がいたら教えて下さい。
529 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:34:13.70 ID:GN/a0FjA.net] >コピー(ムーブ)コンストラクタ/代入演算子がないクラスでこれやると >なぜかエラーが出るんだよね マジ? ここがおかしいような気がする
530 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:34:31.65 ID:8isGWqIv.net] 普通にコピコンだろう
531 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:37:52.70 ID:xWCYZ6+4.net] コピペをしない自作なら、自分で理解できるだろう、直せるだろう。 なのかな? そういえば、GCC使って開発してたとき、GPSに触れないよう 使うライブラリを全部自社開発したことはあったな
532 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 14:33:54.80 ID:NFyEOKoE.net] 規格上はコピーコンストラクタが走るけど、 コピコンに副作用が無さそうと判断されたら、 最適化の際にただのコンストラクタによる構築に勝手に変更されている と我が脳内コンパイラは申しております 実際のところどうなんだろう
533 名前:デフォルトの名無しさん [2015/09/26(土) 15:45:53.15 ID:b1WQaLX+.net] 設定ファイル(1行には設定項目名と値が1つずつ書いてある)を読み込んで、 設定項目ごとに対応する変数に値を格納する関数があります。 設定項目は200個くらいあって、それに応じてif文が200個くらいあります。 静的検査で、「循環的複雑度」とかいう指標が200とかになって、 これをもっと小さくしなければならないことになりました。(40以下くらい) どういう風に作るのがスマートだと思いますか?
534 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 15:50:09.12 ID:snRIqmgr.net] そんな変な書き方は今すぐ止めればいいと思います >A a(); >ってやればいいんだけど >A *a = new A(); >ってやったときとシンタックスの一貫性がなくて微妙。 やってること、やりたいこと、が別なのに 一貫性を求める必要は無いと思います タイプ量が増えるだけでしょう
535 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 15:53:15.68 ID:snRIqmgr.net] >>525 mapを使うか もしくは設定項目文字列とenumのテーブルを用意して配列に突っ込む
536 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 16:49:06.14 ID:mVMjJSEh.net] >>520 >・単にaが構築される >・右辺が構築されてから左辺のコピー(ムーブ)コンストラクタが呼ばれる のいずれか。規格ではどちらも許される ただし仮に後者を採用したとしてコンパイルエラーになるコードは 許されていない(コピーコンストラクターがprivateなど) 呼ばないことによる副作用の有無は関係無い
537 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 18:22:01.93 ID:9hL7F3GQ.net] C++でコード書くの嫌い 最適化云々で、クラスを.hで書いてメンバ関数は.cppに 書くべきだから、正直メンドクセ。 でもテンプレートはヘッダー内に全部書くべきだし…… 全部volatileつければ、問題無いのか? でも、それもメンドクセ。 最近はAndoroidアプリ作ってるから、クラス内に全部書けるけど javaだから、unsignedがなんてcharだけなのか そんで、オペレーター無いし あと、いくらGCでも、「ちゃんとこっちで始末しますから」 って思ったりもする。 それと、C++みたいにprivateのラベルの様に 「こっからここまでprivate」みたいに……… 愚痴は、いくらでも出るのに、ロクなコード書けない俺が 一番やっかい。
538 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 19:00:14.27 ID:1RpaQohZ.net] >>525 使えるのならリフレクション。 キーワードが共通の時にテーブルを書く手間をケチれる。 一応C++でもモドキがあるようだからいけるはず。 taichino.com/programming/1945
539 名前:デフォルトの名無しさん [2015/09/26(土) 23:32:48.30 ID:5mMoR0BV.net] >>525 自分の上司に訊きなさい。
540 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 23:47:31.13 ID:G4HmjC7J.net] 上司にきくことじゃないな >>531 みたいなバカは脳がスカスカなので 次にタイプする文字も上司に訊いてるんだろう
541 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 00:28:15.57 ID:Aie1F5/k.net] >>525 辞書(HashMap)、関数ポインタなどで、 vTableのように、文字列と処理を結びつける
542 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 00:57:34.05 ID:IK6WV2UC.net] 関数内で関数の宣言したらコンパイル通って驚いた void Func() {
543 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 00:58:05.23 ID:IK6WV2UC.net] void A(); } みたいな感じでね
544 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 01:06:55.56 ID:YOaTuDE7.net] >>520 A && a = A{}; これでOK
545 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 01:21:55.60 ID:7JlNsb+t.net] Cから受け継いだクソ仕様だな
546 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 11:47:05.82 ID:+LbsO3cu.net] >>537 どれがどういう理由で糞なの?
547 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 12:26:51.51 ID:Wa6E2D6E.net] >>489 やり方教えて
548 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 13:53:17.26 ID:0R68gjtE.net] >>534-536 こんなやり方あったんだ。便利そうだな
549 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 14:37:12.97 ID:hEAZFQJb.net] A && a = A{}; これマジで安全なの? オブジェクトの寿命はどうなるの?
550 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 15:00:57.98 ID:zsE9aaJl.net] >>541 なにも問題ない 参照のスコープまで生き延びる 確か規格の8.5.3か12.2あたり
551 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 15:13:07.68 ID:zsE9aaJl.net] 12.2一時オブジェクトの段落5か The temporary to which the reference is bound or the temporary that is the complete object of a subobject to which the reference is bound persists for the lifetime of the reference except: 去年Visual C++は Sub && s = Full{}.sub; の寿命が延びないバグがあったのでバグ報告しといたけど、直ったようだ
552 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 15:14:15.81 ID:hEAZFQJb.net] aが右辺値参照なのはどうして? 右辺値参照と何の関連性が?
553 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 15:15:29.74 ID:zsE9aaJl.net] >>544 右辺値を受け取ってるんだから右辺値参照なのは当たり前だろう
554 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:14:48.82 ID:x2H664Vf.net] >>539 やり方? 何を指摘されてるかすらわかってないだろ w
555 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:37:38.84 ID:1KsOvSTX.net] >>546 自分は全くの通りすがりですよ。 わからないので聞いてるだけ。
556 名前:デフォルトの名無しさん [2015/09/27(日) 17:42:40.55 ID:IjMgIUn3.net] >>544 const左辺値参照でもよいはず
557 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:44:07.83 ID:hEAZFQJb.net] ユーザーモードとカーネルモードがあるのに そういうことに言及せずにざっくり4GB制限とか言ってるから バカにされてるだけじゃね
558 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:51:25.33 ID:hvy9lckk.net] そういう話とはちょっと違うと思ったけど、どうなの?
559 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:55:09.33 ID:Tcvq0fDO.net] ID:hEAZFQJb が馬鹿な事は分かった。 ユーザーモードとカーネルモードで空間分離していれば3GBの制限も無いはずなんだが。
560 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:05:02.17 ID:hEAZFQJb.net] 誰も別空間とは言っていないのだが むしろ同じ空間を目分量で分離しているからこそ問題であり メモリの上限の話をする上で 言及しないのはおかしいのではと言う話なのだが
561 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:12:42.15 ID:Tcvq0fDO.net] >>552 お前が賢いつもりなら、さっさと>>539 に対して明確に回答すればいいだけ。 それも出来ないのに喚いているだけだから、お前は馬鹿なままなんだよ。
562 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:13:02.34 ID:Pogh5WEF.net] 32bit環境でもポインタのサイズを64bitにしてハードウェアを活かさない実装にしてもC及びC++の規格上問題ない
563 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:15:56.97 ID:hEAZFQJb.net] いや別にそういう立場ではないんで
564 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:20:03.99 ID:Tcvq0fDO.net] ID:hEAZFQJb : カーネルモード知っている俺カッケー ID:Pogh5WEF : 屁理屈言える俺カッケー だからお前らは馬鹿なままなんだよ。
565 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:22:11.81 ID:Pogh5WEF.net] >>556 屁理屈もなにも一番元の話がそれなんだけど
566 名前:デフォルトの名無しさん [2015/09/27(日) 18:26:28.84 ID:IjMgIUn3.net] sizeof(void *)の話とカーネルモードは本質的に無関係 無理やりこじつける実装も存在するというだけ そもそも命令デコーダとアドレスデコーダは別物
567 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 19:00:43.12 ID:nW+23lOG.net] C++インタプリタがあるんだから 何Gあろうが関係なくね
568 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 19:51:34.01 ID:YOaTuDE7.net] もはや何を言い争っているのかわからん
569 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 19:53:58.16 ID:1KsOvSTX.net] 全然教えてくれないんじゃん
570 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 20:28:04.86 ID:Af4kFVrx.net] 元はJava,C#空想実装と現実のC,C++実装を比較するのはおかしいという話 空想実装でよければC,C++だってそんな制限はないと言ってるだけ 文脈嫁
571 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 21:41:42.41 ID:VW7AXb3O.net] だけ
572 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 21:49:51.60 ID:KfU5Es7n.net] 空想実装と現実の実装の違いについては JavaとCで違いがあるのか? どちらも現実はビット数の制限受けてるだろ
573 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 22:48:35.59 ID:Tcvq0fDO.net] >>561 そりゃまともな奴なら出来ないって言うからね。回答しようがない。 ここで引っかかっている馬鹿はその程度でしかない。 こいつらはCスゲーしか認めないようだが、そういう問題ではないんだがな。
574 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 01:23:45.19 ID:8FV3B/V7.net] いいんだよ 各自好きな事言っとけ ここは落書き
575 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 06:44:48.23 ID:Rj5Nu0nM.net] >>565 >>546 バカがアホに諭すとか滑稽すぎ w
576 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 07:05:49.65 ID:oN5IJNc7.net] もはやなんのスレか分からない
577 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:08:56.51 ID:BV7UhKgt.net] C++のコードで参照渡しをやたらと多用する人がいますが、意図がよくわかりません。 ポインタの代替として使われているのでしょうか? int hoge(Foo &foo); 再代入を行わない場合、普通にポインタ渡しでも意味は変わらない気がするのですが。 開発上の利便性を考えてのことなのでしょうか。 個人的な考察として、以下の可能性を想定しています。 1. "->"による値参照が嫌で、"."を用いたい。そのために参照渡しを多用している 2. オブジェクトの状態変化の可能性を示唆させるために参照渡しとポインタ渡しを使い分けている
578 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:21:34.67 ID:VY24hflb.net] A a; hoge(&a); が面倒ってだけ てか、C++ならスマートポインタ使え
579 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:21:55.29 ID:3TMmR4lP.net] >>569 2の意味がわからんけど場合によってポインタで渡すより幾つか利点ある null参照を渡せない 参照先を関数内で変更出来ない(ポインタでもconst付けりゃ出来なくする事出来るけど) あと普通にポインタ渡しとか参照渡しを多用とか言ってるけど参照渡しは普通だから むしろnullpointer渡すことが出来る時か文字列リテラル渡すときぐらいしかポインタ渡しは使わない
580 名前:デフォルトの名無しさん [2015/09/28(月) 11:26:57.20 ID:DQYQoyfG.net] ポインター版の関数とポインターじゃない版の同じ関数を2回書かなくていいという意味もある
581 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 12:49:29.07 ID:4w+sdak1.net] 特別必要がない限りポインタ渡しなんてヤメレ
582 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 13:35:58.94 ID:BV7UhKgt.net] レスありがとうございます。 C++の世界では参照渡しがデフォと考えた方が良さそうですね。 C++は他人のコードを眺める程度なのですが、 同じような用途なのに人によって参照渡しで統一している人やポインタ渡しで統一している人がいて不思議に思っていました。
583 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 13:47:22.82 ID:iX8okw0+.net] メンバ変数を引数として渡す関数の場合、参照は使いにくい
584 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 14:26:10.97 ID:wVFkh7Dk.net] >>574 はい、その通りです。 C++はポインタとプリプロセッサマクロの撲滅を目標の一つとして開発されています。 そのためC++ではポインタよりも参照が推奨されています。 C++であってもポインタを多用する人はいますが、 その人の勉強不足でCのポインタを引きずっているとも言えますし C++の参照がポインタからの全面移行を促すだけの魅力が無いとも言えます C形式のポインタを捨ててもらえるよう、C++は永遠に進化中です。
585 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 17:34:31.23 ID:rUo6g3/R.net] 例えば関数の引数なんかでオプション的な引数がある場合 (その引数があってもなくても関数が動作するような場合 例えばログ出力先の指定など) ポインタだと楽なんだけどね void runSomething(const std::string* log) { // log = 0なら何も出力しない } これってなんか横着せずに参照でやるべきなんだろうか
586 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 17:35:18.80 ID:rUo6g3/R.net] 上記constはおかしいな
587 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:47:53.83 ID:wVFkh7Dk.net] >>577 俺ならデフォルト引数か関数オーバーライド使うかな? 参照はデフォルト引数出来たっけ? ダメなら関数オーバーライドで。 String位ならデフォルト付き値渡し引数にconst付けてコンパイラさんお願いっ!てしちゃうかも
588 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:53:56.76 ID:VY24hflb.net] オーバーライドじゃなくてオーバーロードやろ?
589 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:58:09.96 ID:XXoDc2O6.net] >>577 ところでこの例の場合引数が省略された時に0が渡されるのは保証されてたっけ?
590 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 19:05:58.93 ID:4w+sdak1.net] 577の引数が省略されたらコンパイルエラーになることが保証されてるよw NULLを渡されたら特別な処理をしたいならポインタ使ってもいいんじゃないか 俺ならそういう設計は可能な限り避けるけどな
591 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 19:07:49.95 ID:P8/hbuJG.net] >>581 この例のままだと引数の省略は出来ない void a(const std::string *s = 0); とするか、意味は少し変わるが void a(const std::string& s=std::string()); としてempty()の場合無しとして扱うか 俺は後者をよく使う
592 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:02:10.71 ID:91/ACm3S.net] >>575 ん? なんか面倒なことあったっけ?
593 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:07:14.94 ID:91/ACm3S.net] >>582 > 577の引数が省略されたらコンパイルエラーになることが保証されてる そんな保証あったっけ?
594 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:34:23.74 ID:tAj/1R7q.net] もちろんです
595 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:21:10.12 ID:qXJ0fmsD.net] >>570 何でもかんでもスマポにすればいいと言うわけではない スコットメイヤー先生の糞本でも読んで出直せ
596 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:23:31.06 ID:1BrOiTcA.net] うっせーハゲ
597 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:30:32.73 ID:AY6OxaHG.net] >>583 >void a(const std::string& s=std::string()); void a(const srd::string& s = "")); でええやろ
598 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:33:11.06 ID:mUEYl4pK.net] スマートポインタってオーバーヘッドでかいでしょ 一度に大量の解放が起こると性能ガタ落ちだし 速度を追求するためにC++使ってるのに、本末転倒
599 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:35:19.98 ID:1BrOiTcA.net] unique_ptrならいいだろ
600 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:38:52.17 ID:tAj/1R7q.net] >>589 お前はいいかも知れないが 許容出来ない人も居るだろう >>590 スマポのオーバーヘッドはアセンブリレベルで マナポと完全に同一にまで改善されたというのが ハーブサッターとスコットメイヤー教祖の教えなのだが ただしunique_ptr<T>に限る
601 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:39:23.89 ID:ynPwQZO2.net] つか、uniqlo_ptrしか使わんな
602 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:40:52.11 ID:ynPwQZO2.net] /// unique_ptrだ 予測変換入ってもた
603 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:54:34.42 ID:FIIzSoGf.net] つかstd::unique_ptrの構文が参照ではなくてポインタのそれである件について: やっぱC++においては参照の方がおまけ概念 const T&以外の参照渡しは禁止
604 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:55:27.14 ID:0rYiKgaG.net] >>583 >void a(const std::string& s=std::string()); >としてempty()の場合無しとして扱うか おお、これでちゃんと動いた! 大抵はこれでどうにかできそう 良いこと聞いた 空文字列と文字列が無いことを区別して取り扱いたい時が稀に良くあるが 仕様変更できる場合が大半だな 文字列以外ではあまりないし
605 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:57:51.67 ID:mUEYl4pK.net] >>592 いやでも、shared_ptrは遅いんでしょ? unique_ptrが使える場面なんて限られてるし、片手落ちかと だいたい、新技術を導入するか否かの決定権を持っている上の人たちは 長年生ポインタのやり方で染み付いている訳で、 便利だから乗り換えましょう、とはそうそういかないかと
606 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:57:53.72 ID:0rYiKgaG.net] >>595 生ぽさえ撲滅出来ればそれでいいんじゃよ
607 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:01:49.61 ID:1BrOiTcA.net] むしろshared_ptrのほうが使える場面が限られてる 遅いといってもshared_ptrのコストが問題になる場面なんてめったにないだろう
608 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:04:24.66 ID:tAj/1R7q.net] ナマポをスマポに
609 名前:書き換えるときに unique_ptrじゃなくてshared_ptrしかダメ というのは作りが相当おかしい [] [ここ壊れてます]
610 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:20:39.17 ID:XXoDc2O6.net] >>597 うちはナマポ使ってると、レビュー時にその必要性について議論させてるぞ Cできちんとポインタを使いこなしていた人ほど すぐにC++ではナマポ不使用派に転向しちゃう 基本、実績のある古いコードをそのまま持ってきた場合とシステムコールとかのC形式ライブラリ呼ぶところ位しかナマポは残らないな shared _ptrが遅いというのは、ナマポで安全対策を入れていない場合と比べてだ ナマポに安全対策を入れたら大抵はshared_ptrより遅くなるぞ ナマポの方が速いと主張する人たちは レビューとプロファイラーの前で生き残れなかった ま、うちだけかもしれんが
611 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:24:13.61 ID:XXoDc2O6.net] でもC++のスマポは記述が冗長なのが好きになれない ナマポはレビュー時に見落とすくらいシンプルなのにね
612 名前:デフォルトの名無しさん [2015/09/28(月) 23:36:28.90 ID:FF3rjUqv.net] 動的記憶が前提だからね あくまで用途はその範疇で
613 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:38:37.64 ID:FIIzSoGf.net] いくらスマポが良いといっても やめて!メモリの動的確保する気でしょう? エロ同人みたいに
614 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:45:35.35 ID:0rYiKgaG.net] う、、、ネタがわからん
615 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:55:41.35 ID:0rYiKgaG.net] 実際、スマポも生ぽもほとんど使わないな メモリ操作はSTLのコンテナとイテレータにお願いしちゃうし ポインタ渡しは参照使うし 型変換とかも名前付きキャストとunionでどうにかなるし
616 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 00:42:40.24 ID:0lZfHTgJ.net] まあポインタでも参照でも好きなもんを使えばいいよ。プログラムなんて動けばいいのさ。
617 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 01:17:31.36 ID:HqSuUkpS.net] こまけぇこたぁ いいんだよ!! /) // /) `/// __ |イ二つ/⌒⌒\ | 二⊃ (●) (●) \ / ノ/⌒(_人_)⌒ \ \_/| |┬| | / \ `ー′ /
618 名前:デフォルトの名無しさん [2015/09/29(火) 02:44:20.18 ID:NXR0Nytt.net] よくねえよヴォケ
619 名前:デフォルトの名無しさん [2015/09/29(火) 07:18:55.18 ID:UCFlulCD.net] ナマポの利点ってなんなの
620 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:27:03.26 ID:4NffsMzC.net] 働かなくても生活出来ること
621 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:30:36.21 ID:Y2fWXifr.net] >>571 >参照先を関数内で変更出来ない 意味がわからない codepad.org/mXQd0mNP 参照であっても参照先を関数内で変更できるようだが
622 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:42:57.14 ID:Y2fWXifr.net] >>576 STLのイテレータをみていると、これはポインタと同じ使い方 本当にポインタを撲滅する気があるようにはみえない codepad.org/gQY11puS
623 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:46:58.42 ID:GdgkSls5.net] >>612 参照が示す場所と言えば良かったかな? 参照先の値を変更出来るのは当たり前だからわざわざコード書かなくてもいいよ
624 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:18:41.17 ID:kfE15Zdi.net] C++になっても生ポインタを結局ばりばりに 使うのだよな・・・みんな。
625 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:38:09.16 ID:bCmPOTpj.net] >>613 それはナマポ派のひとを取り込むためにわざと記法を似せてるんじゃないかな?
626 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:42:32.67 ID:2BMWd/g5.net] どうしてもイヤならC++なんか手を引くべき
627 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:43:37.29 ID:bCmPOTpj.net] >>614 よく分からんがポインタのアドレス値そのものを書き換えるってこと?? もらったポインタをfor文の中でインクリメントしてデータアクセスする以外の用途が思いつかないな 上記の用法ならイテレータの参照を渡すかのが普通だからわざわざポインタ使うほどのものでもないし
628 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:46:03.17 ID:bCmPOTpj.net] >>615 それがC++の良いところでもあり悪いところでもある 清濁併せて飲み込んじゃう混沌さがC++らしさ
629 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:51:42.83 ID:GdgkSls5.net] >>618 > よく分からんがポインタのアドレス値そのものを書き換えるってこと?? そう 変更出来ない事を(細かい事だが)メリットとして挙げてる ポインタもconst付ければ変更出来ないけど面倒くさいからな
630 名前:デフォルトの名無しさん [2015/09/29(火) 11:25:09.86 ID:NXR0Nytt.net] 標準アルゴリズムはナマポ前提でそ ナマポとイテレータを透過的に置き換えられるってだけで ナマポ撲滅を主張するような作りにはなってない
631 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 11:39:27.99 ID:9FBYnxt5.net] ポインタを使うて事にそんなにアレルギーがある人がいるんだ… コードを全部配列で書いてもアレルギーでるの?
632 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 11:49:34.30 ID:Fziu4eIr.net] >>622 Cかよと面倒臭い気持ちにはなる んで、しぶしぶtraitsを書こうと思って、c++ array specializeでググる
633 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:13:37.73 ID:XovM8eOK.net] 生ポがわいてんのか
634 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:35:12.59 ID:Y2fWXifr.net] >>614 ますます意味がわからない >>571 >参照先を関数内で変更出来ない できちゃってるよ‥ codepad.org/6rGzlzmc 参照を使っても呼び出し元に影響を与えないわけではないのだが、どういうメリットを強調したかったの?
635 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:37:23.78 ID:bCmPOTpj.net] >>620 あ、了解。やっとわかった。 ポインタのメリットとして書き換え可能をあげてるのかと勘違いしてた 参照のメリットとしてアドレス値(?)が書き換わる可能性が無いと言うことね
636 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 17:06:50.42 ID:0lZfHTgJ.net] 参照はだいたい理解したんだが && と言うのだけが理解出来ないよ。
637 名前:デフォルトの名無しさん [2015/09/29(火) 19:52:43.47 ID:NXR0Nytt.net] テンポラリへの参照
638 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:32:38.62 ID:rSzsIUwL.net] new, deleteを生で書かないという前提なら生ポでいいじゃん
639 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:37:38.49 ID:XSRpVFiu.net] >>627 右辺値への参照です int a=0; int & lr = a; //左辺値参照 int & rr = 0; // 右辺値参照 void f(int &); void f(int &&); //両方のオーバーロード f( a ); // f(int &) f( 0 ); // f(int &&) int g(); int && rr2 = g(); //g()呼び出し結果は右辺値
640 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:38:39.97 ID:XSRpVFiu.net] 失礼 int && rr = 0; // 右辺値参照 だった
641 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:42:24.19 ID:XSRpVFiu.net] class A { void f() &; void f() &&; } A a; a.f();//f()& (new A())->f(); // f()&&
642 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:59:50.06 ID:UeLWTQcw.net] shared_ptrが遅いって言ってるやつはどの操作にとんなコストがかかるか理解して言ってるんだろうか
643 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 21:05:55.31 ID:Z5H58J48.net] shared_ptrを使ってみて遅いと評価することと どの操作にとんなコストがかかるか理解 することにどのような因果関係があるのでしょう
644 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 21:09:20.14 ID:VAPx39zG.net] まあ、実際sharedは遅いよ。 それでも多言語のGCやらに比べればマシだけど。 要は機能豊富過ぎるんだよね。 殆どの用途にはuniqueで十分
645 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:00:15.35 ID:UeLWTQcw.net] どの操作にどんなコストが掛かるのか知らないと効率的な利用が出来ないだろ
646 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:06:58.07 ID:xQzivTWI.net] shared_ptrの効率的な利用のためにshared_ptrの仕組みを理解することと shared_ptrをナマポの代替で使ってみて遅いケースがあると判断することに 何の関係が
647 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:13:09.38 ID:VAPx39zG.net] 実装の詳細は知らんけど ナマポと比較して shared_ptr1つ目生成時中間バッファ作成コスト、コピー作成時とコピー削除時に同期コスト、weakも入れた最後の削除時に中間バッファ削除コスト、 デリファレンス時ノーコスト ってな感じじゃね。
648 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:13:19.41 ID:diX6sJrx.net] (new A())->f() は f() && でなくf() & が呼ばれる *(new A()) が左辺値だから
649 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:31:50.55 ID:mPnf6nOs.net] >>636 こないだstd::mapのstd::setを使ったらスゲー請求書が来てびっくりした
650 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:46:20.57 ID:diX6sJrx.net] そういやshared_ptrのカスタムデリーターってtype erasureしてる? 制御情報と別にさらに動的領域が必要になりそうな
651 名前:デフォルトの名無しさん [2015/09/29(火) 23:01:51.29 ID:NXR0Nytt.net] >>639 だよな、俺も変だと思った ビルトイン演算子の単項 * は常に左辺値を生じるわけで
652 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:17:58.28 ID:H886HULU.net] shared_ptr使ったらいつのまにかuse_countが万単位になっててビビった >>635 みたいなバカは実測もしないでshared_ptrがGCより速いと勘違いしてんだろw
653 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:18:59.34 ID:OUPKSVtA.net] 万の共有してるお前がバカなだけ
654 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:27:46.40 ID:mPnf6nOs.net] やっぱスコープを超えて生きつづけるような動的メモリ確保は悪 個数に上限がない上に、ソースコードの検索で実体を特定できない分グローバル変数より性質が悪い 1スコープ1画面すなわち25行未満とするの正義
655 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:35:18.44 ID:LyudXVtb.net] 2015年に於いて一画面が25行の環境の>>645 は ムーブセマンティクス全否定だそうです
656 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:42:59.40 ID:mPnf6nOs.net] 動的メモリ確保を必要以上に有りがたがって多用する奴は グローバル変数を多用するビギナー未満の存在、 チューリングマシンあたりからやり直せ
657 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:56:13.74 ID:VAPx39zG.net] そりゃ実行時のデータで必要なオブジェクトの数や種類が変わらないなら必要は無いのだろうが。
658 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 00:49:17.79 ID:k73k1QZf.net] >>638 make_shared使ったら中間バッファ作成コストは無くなる その代わりweak_ptrを使った場合それが残ってる間も解放されない あと、shared_ptrのコピー速度が問題になる程コピーするか? そんな設計だと生ポインタだったら所有権の管理出来ないと思うんだが >>643 糞実装というのは置いといてもshared_ptrの速度と何の関係が? gcのある環境だと数万も参照持つ程長い間生きてるといざ解放するときstop the worldになる糞コスト高い世代のgcになるだろうけどな
659 名前:デフォルトの名無しさん [2015/09/30(水) 01:08:31.92 ID:YymjgiCr.net] GCとshared_ptrの速度を比較する馬鹿がいると聞いてきました。 しかもネタじゃなくて本気で書き込んでるらしいと聞きました。
660 名前:デフォルトの名無しさん [2015/09/30(水) 01:44:40.15 ID:wkMyE1bD.net] どっちが速いかって問題じゃないから ここが通じないやつと話しても不毛なだけだよ
661 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 07:07:44.73 ID:L4DkDpWh.net] >>630 分からん。 そもそも右辺値参照する理由は何ですの?
662 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 08:23:18.30 ID:FCo7WZBm.net] >>652 ま、もったいないお化けの呪いです。
663 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 11:52:14.07 ID:Q1Di+uY9.net] 関数の戻り値を変数に受けずに直接ゴニョゴニョするときに有益
664 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 12:49:31.47 ID:4JsedgFo.net] >>652 右辺値参照はパフォーマンス向上のために導入されたもので、参照先は、以後のスコープで使われる機会のない(デストラクトを待つだけの)一時オブジェクトと見なされる。 実際に使われる機会のないことはプログラマーが保証する
665 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:08:20.36 ID:vdDHGEBP.net] >>652 右辺値参照が導入された第一の理由はmoveセマンティクスを実現するため
666 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:16:43.24 ID:L4DkDpWh.net] 分からん。c++以外の言語で右辺値参照と言う機構は有るんでっか? もしc++固有の機構なら何でc++だけそんなもん導入する必要があるのですかい?
667 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:39:20.73 ID:VnaX2NHk.net] C++はスタックにオブジェクトを確保するから
668 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:45:19.98 ID:VnaX2NHk.net] いや、もちろんヒープに確保する事もできるんだけどGCが無いから
669 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:55:13.48 ID:XhnAqUEm.net] unique_ptrのmoveコンストラクタの存在とコピーコンストラクタがないことでどういう効果があるか考えれば分かると思う。
670 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 14:19:24.56 ID:7iKwfO2h.net] >>657 俺様的個人見解では コピーでなくムーブで済ませるのは本来ならコンパイラやインタプリタの最適化ルーチンのお仕事 それを言語仕様上「いいか、絶対にコピーするなよ、絶対にだぞ!」 と明記することが出来るようにしたのが右辺値参照 ムーブできなくてコピーが発生するくらいならコンパイルエラーにしてくれ 俺(プログラマ)がムーブ出来るように手順を考え直すから と言うことを&&でコンパイラさんに伝えてる 他の言語は「こまけーことはいいんだよ!」でできています。
671 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 14:28:06.26 ID:vdDHGEBP.net] >>657 C++は他の高級言語と比べて高パフォーマンスであることを特に重要としてるから プログラマの工夫で高速化できる機能が備わってる
672 名前:デフォルトの名無しさん [2015/09/30(水) 14:49:50.37 ID:R06l1h0q.net] C++以外はすべて糞言語だから右辺値参照が無い。
673 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 21:51:39.92 ID:L4DkDpWh.net] >>661 うーん、まだ分からん。
674 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 21:58:53.58 ID:lnfdPqWh.net] コピーよりスワップのほうが早い場合があるだろ
675 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:00:11.74 ID:VnaX2NHk.net] srad.jp/~taro-nishino/journal/507551/ これ読んで分らなかったらあきらめな
676 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:01:27.44 ID:k73k1QZf.net] >>664 存在する理由が解らなければ使わなければいいよ 標準ライブラリを使ってるだけで割と恩恵受けてるから
677 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:16:34.76 ID:L4DkDpWh.net] >>666 読んでいる途中で諦めた。明日再挑戦するわ…
678 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:19:44.01 ID:VnaX2NHk.net] こんなやつ・・・
679 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:34:51.73 ID:IxoD0KLd.net] >>666 『名前を持たないなら、それは右辺値"なのである』 その理屈で行くと*(new int)が右辺値になってしまうな
680 名前:デフォルトの名無しさん [2015/09/30(水) 23:35:15.70 ID:aEcL3JaV.net] peace.2ch.net/test/read.cgi/internet/1401535906/107 ↑ ↑ ↑ ↑ ↑ ↑
681 名前:デフォルトの名無しさん [2015/10/01(木) 00:18:26.56 ID:MrcZAfOx.net] メンバ変数とメンバ関数の定義ってどういう順序で書くのが一般的なの? 【VC++方式】 publicメンバ関数 privateメンバ関数 publicメンバ変数 privateメンバ変数 【Google方式】 publicメンバ関数 publicメンバ変数 privateメンバ関数 privateメンバ変数 貴様らはどっちを使ってるの?
682 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:23:26.58 ID:W6dzHXP5.net] 全部パブリックだし無駄なアクセサとか作らない性質なんで関係無いですね
683 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:26:52.37 ID:yE0+l/d1.net] 統一されてりゃいい
684 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:28:09.19 ID:0eXwX1cj.net] 変数は全部上に持ってってる。 何で下に配置しようとするのか理解できない。
685 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:34:01.87 ID:e+Nqpsc9.net] クラスを利用するときは変数なんて見ないだろう
686 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:43:09.13 ID:j4gRyYlh.net] 変数が上だな つーかデフォルトprivateなのだから そこから書くのが自然な気がする。
687 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:43:40.25 ID:P62utjXs.net] 何で上に持っていくのか理解できない
688 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:46:42.51 ID:KtuKSkrc.net] ヘッダファイルが誰のためにあるのか考えろや
689 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:47:30.33 ID:W6dzHXP5.net] これはね、 内部仕様を大事にする東洋哲学と 外部仕様を大事にする西洋哲学の 違いですね
690 名前:デフォルトの名無しさん [2015/10/01(木) 01:06:55.36 ID:W4wdkuI5.net] >>635 >>640 の話をよくよく聞いてみたところ、彼ら、ソートを再帰で作ってたらしいです。 引数としてstd::shared_ptrを渡していたのでコピーコストが凄いことになっていたようです。 ソースを戴いたのでループに修正してあげたところ、かなり驚いた様子で改心していました。
691 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 01:17:32.02 ID:aA9UfTOs.net] >>681 shared_ptrを引数として渡すならconst参照でいい
692 名前:デフォルトの名無しさん [2015/10/01(木) 02:12:38.73 ID:W4wdkuI5.net] >>682 >>635 の人ですか。 また何か疑問がわきましたか?
693 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 02:32:50.77 ID:aA9UfTOs.net] >>683 ちげえよ 引数でshared_ptrを渡すならコピー渡しじゃなくて const std::shared_ptr<T>& p にしろ その関数内で所有権が欲しいならその時にコピーしろ
694 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 02:52:40.21 ID:aA9UfTOs.net] 何でソートをオレオレ実装してんだstd::sort使えよとか他にも突っ込み所あるけどね
695 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 08:01:51.69 ID:ZyUEx0el.net] つーかキチンと所有権管理の意識をしていたら、わざわざsharedを使う場面が殆ど無いことに気づくはず。
696 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 09:58:06.89 ID:LB18ex5+.net] std::sortはpredを値渡しだが、少し複雑なpredのメンバにshared_ptrを持たせたことがあった。それが正しい判断だったのか余計な心配だったのか不明。
697 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 15:43:10.33 ID:mZxAmtu3.net] faithandbrave.hateblo.jp/entry/20121116/1353047948 boost::threadのスタックサイズはthread::attributes::set_stack_sizeで設定できるようですが std::threadではどのようにして設定するのでしょうか?
698 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 16:41:46.71 ID:lsGbndod.net] You can't.
699 名前:デフォルトの名無しさん [2015/10/01(木) 19:19:35.56 ID:BUCLrkun.net] Oh,no.
700 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 20:12:32.90 ID:LB/4icN7.net] C++のクラスとか実は構造体なのだからデータ1stに決まってるだろ; メンバ関数から書く奴は頭おかしい(もしくはclassとstructの明示的使い分けを説明できねばならない まあ一応概念上は「手続きに与えるデータ」の側面(手続きがメイン)を強調したいときがstructで それ以外はclassではある
701 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:11:20.09 ID:P62utjXs.net] >>691 関係ない
702 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:21:12.13 ID:WeiZCb/T.net] >>691 >もしくはclassとstructの明示的使い分けを説明できねばならない 互換性以外でstruct意味あるの? 自分のコードでは使おうと思ったことない
703 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:31:33.68 ID:QENZiec8.net] 使い分けなんか決まりが有るわけでもないし適当でいい。 それより「クラスとか実は構造体」なんてアホなこと言ってる奴は 早く病院行った方がいい
704 名前:デフォルトの名無しさん [2015/10/01(木) 21:35:17.70 ID:BUCLrkun.net] 構造体をクラスで特殊化しようとしたら出来なかったから同じではないみたい
705 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:39:07.38 ID:BshYJ+by.net] TMPにはまってた頃はstructばっかりだったな。 データを持つなんてことは滅多にないし。
706 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:41:20.18 ID:QENZiec8.net] 「構造体」などという定義の不明な用語を用いる奴は アビバに行ってエクセルでも勉強してた方がいい
707 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:55:36.66 ID:LB/4icN7.net] >>692-695 structの実体は全メンバがデフォルトでpublicなだけのclassにすぎないと ストラストロウpップ本のどっかに書いてあった 一方クラス名と構造体名は同ではないが理由は知らん
708 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:03:04.84 ID:QENZiec8.net] 「全メンバがデフォルトでpublicなだけのclassにすぎない」 そんな嘘つき本は 早く窓から投げ捨てた方がいい
709 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:21:18.99 ID:BshYJ+by.net] 親クラスがデフォルトでpublic あとは何だっけ?
710 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:23:51.58 ID:+UnsXPfG.net] classから/への継承ができない POD型になれる(Cと共用することができる)
711 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:32:16.11 ID:CWBNpZAW.net] classもPODになれるぞ
712 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:32:25.91 ID:LB/4icN7.net] classにできてstructにできないこと(あるいはその反対)とは? 2011年の規格になるがn3337.pdfならタダでダウソできるので classとstructの違いがどこに書いてあるか指摘してくれると嬉しい
713 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:35:10.94 ID:QENZiec8.net] 三つ前のレスも読めない奴は 早く眼科に行った方がいい
714 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:40:03.08 ID:LB/4icN7.net] >POD型になれる(Cと共用することができる) classもPOD型になれる n3337.pdfのChapter 9より >A POD struct109 is a non-union class that is both a trivial class and a standard-layout class, and has no >non-static data members of type non-POD struct, non-POD union (or array of such types). で、 >A standard-layout struct is a standard-layout class defined with the class-key struct or the class-key class. なのである classがCと共用できないのはそれはその通りだがC++内の話題か?
715 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:40:18.43 ID:o05Ai7EN.net] >>686 unique_ptrは逆に、所有権のない生ポの代替にはならないところがなぁ。 前に誰かが言っていたけど、コピー不可の「ほぼuniqueな」shared_ptrがあったらよさそうなのにな。 ・基本、コピー不可 ・使いまわす場合はweak_ptr(相当のもの)で ・それをlock()して得られるのも「ほぼuniqueなshared_ptr」 ・それをローカルスコープの外に持ち出すには明確な記述が必要なんで 非ユニークな期間の管理は容易 自分でも作れるかもしれないけど、なんか落とし穴があったりするかな?
716 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:41:52.40 ID:LB/4icN7.net] >>704 で、classにできてstructにできないこと(あるいはその反対)とは?
717 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 23:12:05.84 ID:P62utjXs.net] >>699 どこが嘘つきなの?
718 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 23:41:36.26 ID:YVTNhxF0.net] >>706 それweak_ptr経由したら無限にコピー作れるよね
719 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 23:46:09.70 ID:BshYJ+by.net] クラスのメンバとして「所有権は持ってるけどコピーは可能としたい。だけど
720 名前:自分でnew deleteを書きたくない。」 っていう一番素朴ともいえる需要にはunique_ptrもshare_ptrも答えてくれないんだよね。 要素1個のvectorを持てば目的には合うけど、それはちょっと。 [] [ここ壊れてます]
721 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 00:09:17.73 ID:Ty2xSLut.net] 所有権の無いナマポはナマポでいいんじゃ。 getして作る物じゃないの?
722 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 00:12:30.94 ID:E6p9V3H1.net] >>709 意図的にそうすることはできるけど、このポインタ使う人にとっては意図せずにそうなることを 防げれば十分でしょ、って理屈。
723 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 01:37:40.67 ID:qg2lMJZH.net] 使い道が良くわからない unique_ptrでgetで良いじゃんって思う
724 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 01:42:57.88 ID:UOnaTtLl.net] >>706 が言ってるのは「基本的にはいつ勝手に解放されてもいいけどlock中に解放されるのだけはやめてほしいweak_ptr」じゃないかな
725 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 01:53:10.11 ID:UOnaTtLl.net] あるいは「必要なときだけ一時的に強参照に変えられるweak_ptr」か
726 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 02:04:44.52 ID:t/H9126e.net] >>715 それただのshared_ptr
727 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 02:12:07.99 ID:UOnaTtLl.net] >>716 そだね 今リファレンス読み直してみたけど、普通にshared_ptrとweak_ptrでいいじゃんと思ってしまった >>712 の言い分もわからなくはないけど、ちょっと動機としては弱いよね
728 名前:デフォルトの名無しさん [2015/10/02(金) 03:28:41.26 ID:ONuETOP6.net] weak_ptrをスレッド跨ぎに使うととても便利だぞ。 スレッドAからスレッドBに作業を依頼するとき、スレッドA内でコールバックする オブジェクトをweak_ptrに入れてスレッドBに渡す。 スレッドBは結果を返す時、weak_ptrを一緒に返す。 スレッドAは結果が返されたとき、weak_ptrが生きているかどうかで処理を継続するか 破棄するか決定する。
729 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 04:11:04.12 ID:mB2ii6Jd.net] >>718 C++ でおk
730 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 05:15:26.18 ID:XsCDb17v.net] おれは生ぽ派
731 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 06:56:56.47 ID:K61YkWCE.net] ちゃんと後処理できるならなんでもいいのではないかな
732 名前:デフォルトの名無しさん [2015/10/02(金) 07:00:41.57 ID:BtQI5LIk.net] unique_ptrを使うべき典型的な例くだちゃい
733 名前:デフォルトの名無しさん [2015/10/02(金) 07:01:11.19 ID:BtQI5LIk.net] shared_ptrの間違いでちゅ
734 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 08:06:56.11 ID:ZDJdmWRt.net] >>723 >>687
735 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 08:13:15.20 ID:t/H9126e.net] >>723 CopyOnWriteを実装する時とか
736 名前:デフォルトの名無しさん [2015/10/02(金) 18:07:26.95 ID:7Yht83rO.net] C++ って実際どういうところで使われてるん?
737 名前:デフォルトの名無しさん [2015/10/02(金) 18:12:29.97 ID:TpeMyO1f.net] 基本的なソフト、ライブラリの多くはC++製だろ。 スクリプト言語とかもC++製が多くてC++なしでは実装できないのが多い。
738 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 18:41:39.93 ID:8WzixXxl.net] webブラウザ
739 名前:デフォルトの名無しさん [2015/10/02(金) 19:07:51.07 ID:AwBeWBui.net] Haskellで書きなおせば省メモリーかつ10倍高速になるという人もいるね。
740 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 19:16:46.43 ID:8WzixXxl.net] >>729 やってから言えって話だな
741 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 19:47:03.73 ID:0lgmsqw8.net] Haskellが省メモリだと…?
742 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 22:01:36.63 ID:PixdrOkR.net] コードサイズが省メモリという意味では。 「関数型ならこんなにシンプルにかける!」って宣伝よく見るし。 ってか仕方ないことだけどC++がコードサイズ大きい
743 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 22:50:51.68 ID:oFtaSIUa.net] >>726 3Dのゲーム開発はみんなC++だよ C++じゃないと重すぎてまともに動かん
744 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 22:57:22.05 ID:w2Lswr2g.net] >任天堂のゲームはこれまで,CやC++といったプログラミング言語で開発されており, >そのため高いパフォーマンスを発揮していたが,反面,開発に時間がかかっていたという。 >このセッションではそれ以外の方法,つまりHTMLやJavaScriptを使ってWii Uの全機能にアクセスしつつ, >より手軽にゲーム開発を行う方法が説明されるようだ。
745 名前:デフォルトの名無しさん [2015/10/02(金) 23:00:04.35 ID:TpeMyO1f.net] それはないかと。ウェブブラウザで3Dしたり、3Dエンジン・ライブラリを呼ぶ形だと言語速度差少なかったり。
746 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 23:36:20.41 ID:dTb/cHoI.net] C++使う目的がスピードなのは今も変わらないと思うが、RustやGoがいくら早くなろうが、C++は使われ続けると思う。 最適化にこだわろうと思った場合C++以外の言語では話にならない。
747 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 23:39:28.76 ID:07KUSVzt.net] C++は柔軟性が抜群
748 名前:デフォルトの名無しさん [2015/10/03(土) 00:29:39.75 ID:mC8UjI5p.net] Haskellが一番速いといわれてるけどな。
749 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 00:37:13.63 ID:TzdXrt85.net] >>738 Haskellが一番速いという言葉に強い魅力を感じるのですが、数値演算では、C++やFortranと 較べてどれくらい速いでしょうか。 そもそもHaskellには、数値計算用の函数(三角関数、対数、指数などの初等函数)は インプリメントされているでしょうか。そしてその有効桁数はどれくらいでしょうか。 少なくとも12桁できれば、16桁以上欲しいのですが。
750 名前:デフォルトの名無しさん [2015/10/03(土) 01:40:39.95 ID:F9VAPS7W.net] Haskellはやめとけ。理想的なコンパイラが実現したらとかいう想定なんだろ? 現実では未実装で。 純粋関数型言語とそのコンパイラが完成されれば速いんだろうが。
751 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 01:48:15.69 ID:OaBps6Fz.net] そんなに早いならHaskellの動画エンコーダーがあっていいはず
752 名前:デフォルトの名無しさん [2015/10/03(土) 01:48:36.78 ID:F9VAPS7W.net] Haskell 自動並列化でググッた結果。 マルチコアでスケールするようになった Haskell2015年2月12日 Glasgow Haskell Compiler(GHC)は、関数型言語Haskellの主要コンパイラです。 GHCは(並列性に加えて)並行性を主要な目的として長年開発されてきました。 www.iij.ad.jp/company/development/tech/activities/haskell/ マルチコア時代の最新並列並行技術〜 Haskellから見える世界 〜 [PDF ... www.iij.ad.jp/company/development/tech/techweek/pdf/141126_2.pdf Concurrent HaskellおよびParallel Haskell www.kotha.net/ghcguide_ja/7.0.4/lang-parallel.html 【Async】Haskellによる並列・並行プログラミングを読了した (2)【Concurrent】 | FiS Project www.fisproject.jp/2015/08/parallel-and-concurrent-programming-in-haskell-2/ 未来の並列プログラ ミング言語としての Haskell ll.jus.or.jp/2008/slides/6/shelarcy.pdf
753 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 02:07:18.42 ID:4GRc9B1x.net] URL貼るだけで自分の見解を何も述べられない低能は去れ
754 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 03:44:12.63 ID:RI5yhOba.net] 知らんHaskellは しかしインタプリタ言語であるErlangがとある大規模並列案件についてC++より早く動いたという話をどっかで聞いた そりゃー開発コストとバグのリスク(コードの読み辛さ)を考えずに最適化設計すれば最終的にはC++が勝つだろうけども
755 名前:デフォルトの名無しさん [2015/10/03(土) 04:40:55.15 ID:HrivTQ+h.net] Haskellは強力な型システムのおかげでコンパイルが通ればバグが無いことが保証されるといわれてるけどな。
756 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 04:44:51.70 ID:mgovDRA4.net] 何その都市伝説
757 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:02:15.82 ID:I2+KZq9W.net] >>744 Java以下の速度のErlangがC++に勝てるわけねーだろwwww
758 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:12:08.92 ID:I2+KZq9W.net] Erlangが使われれる理由は速度じゃなくて、強力なフォールトトレラント性 Haskellは遅延評価がある時点で並列向いてない 触った事あればすぐわかるだろうに、本当に恥ずかしい奴だな
759 名前:デフォルトの名無しさん [2015/10/03(土) 08:47:05.87 ID:QGdOGmK1.net] そう、Erlangは強力なフォールトトレラント性が特徴。 生命維持装置のような何十年も安定して稼働し続けなければならない物には Erlang以外使えない。 エラーが起きた時点で国際宇宙ステーションの全員が死ぬことになる。 再起動も許されない。 そういったミッションクリティカルな場所で使うためにErlangが開発された。
760 名前:デフォルトの名無しさん [2015/10/03(土) 08:50:57.42 ID:QGdOGmK1.net] Erlangの最大の美点は静的検査によりコンパイルが通ればバグが無いことを保証できる点。 この特長によってJavascript並みの安全性を確保できるといわれている。 これはC++では絶対に実現できない。
761 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:52:47.18 ID:OaBps6Fz.net] >Javascript並みの安全性 ここ笑うところなのかな
762 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:53:15.81 ID:I2+KZq9W.net] Javascript並みの安全性? ポエムは自分のブログでやってくれよキチガイ
763 名前:デフォルトの名無しさん [2015/10/03(土) 08:58:23.08 ID:QGdOGmK1.net] また、Erlangは強力な並列性を持ち、2000万スレッドのベンチマークが行われたこともある。 C++プログラムとの比較でErlangは文字通り2000万倍の性能をたたき出した。 これは大きな差であり、現在のスーパーコンピュータではErlangが主流となっている。
764 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:59:57.30 ID:I2+KZq9W.net] ErlangがC++より型付け強いってのも笑うところ 名前以外全く知らないのがわかる
765 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:06:44.71 ID:I2+KZq9W.net] あ、これ本物のキチガイだ
766 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:07:13.61 ID:eQmk9cX0.net] >>750 ? Erlangはチューリング完全じゃないのか?
767 名前:デフォルトの名無しさん [2015/10/03(土) 09:28:38.72 ID:QGdOGmK1.net] C++が負けたのがそんなに悔しいですか。
768 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:35:22.34 ID:hNjBKdKI.net] あーくやしいくやちくてしょんべんちびっちゃうわー
769 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:37:58.97 ID:RI5yhOba.net] >>747 gccと比べたら確かに遅かったorz ttp://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=erlang&lang2=gcc&data=u64q しかし事はユーザーが書いたコード断片の実行速度ではないのかも知れぬ、 >>748 >Haskellは遅延評価がある時点で並列向いてない ぬんで?遅延評価しようがすまいがimmutableなオブジェクトだけの世界なら排他とか生じないんじゃ…
770 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 10:00:51.34 ID:I2+KZq9W.net] >>759 Haskellの遅延評価はあらゆる物に適用される で、サンク取り払ってメモ化される度に止まって逆説的に向いてないというオチ ここらへんは自分で制御しようと思えばできるから 飽くまで他の並列化を前提とした言語と比べて向いてないという意味
771 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 10:37:40.95 ID:R/xGcqGB.net] >>745 でもコンパイルエラーを突き止めるのに専用のツールが必要だったり コンパイルが通るまでに半年かかったりするんでしょ?
772 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 10:42:17.61 ID:R/xGcqGB.net] >>748-749 フォールトトレラントのおかげで 内部で死にまくってても見過ごしてるだけというオチじゃなかろな
773 名前:age [2015/10/03(土) 11:02:06.53 ID:xcjdOcxh.net] Queueに関して教えて下さい。 queue<BYTE> fifo; として定義した場合、pushできるfifoの最大の深さはどこで確認できるのでしょうか? fifoに書き込まれているバイト数はsizeで確認できますが、 深さに関する事が調べたのですがどこにも書かれていませんでした。 用途としては、10MByte位のFIFOを用意しておいて、 fifoに半分位たまったら一括でファイルにライトする様な処理を考えています。
774 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:09:56.72 ID:OaBps6Fz.net] 深さとサイズがどう違うんだ
775 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:36:19.09 ID:UaQHAHfU.net] その場合は、dequeを調べればいいんじゃないかな?
776 名前:デフォルトの名無しさん [2015/10/03(土) 11:38:25.79 ID:JIliozMV.net] 自分がハッカーかどうかわからないのですが ハッカーになると自分はハッカーであるとわかるものなんですか? それとも人に言われてはじめて気づくものなんでしょうか?
777 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:49:29.97 ID:UaQHAHfU.net] ハッカーはハッキングします。 あなたはハッキングしましたか?
778 名前:デフォルトの名無しさん [2015/10/03(土) 11:52:29.29 ID:JIliozMV.net] それはクラッカー
779 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:56:32.43 ID:y6+evVSu.net] あたり前だ
780 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 12:05:26.41 ID:UaQHAHfU.net] ハッキングによって入手した情報を悪用し、罪を犯すのがクラッカーです。 ハッカーは罪を犯すことを目的にハッキングはしません。
781 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 14:23:52.05 ID:bfkpTtOm.net] まあ、俺クラスになると自分がハッカーだと自覚できてるな
782 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 14:45:00.58 ID:bKUFTYSg.net] 俺がこんなに強いのも… C++関係ないね。
783 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 15:03:31.31 ID:6CgBohu1.net] カーしか共通点無い
784 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 15:04:24.02 ID:6CgBohu1.net] クラッカーの話題が出てたのか。スマン
785 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:05:55.00 ID:8AFtPGV4.net] まあ、俺クラスになると自分が馬っ鹿ーだと自覚できてるな
786 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:08:13.17 ID:DbjSwrzl.net] 禿げてないとハッカーにはなれない
787 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:09:09.20 ID:4asnCA7K.net] 俺クラスになるとその点も問題ない
788 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:12:08.77 ID:H2im6CWF.net] 自作クラス最強説
789 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:46:46.05 ID:hZCkGPov.net] やっぱりナビスコだな
790 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 17:03:29.86 ID:5Y3yXyVr.net] C++使ってる時点で十分ハッカーだと思うけど。
791 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 18:24:19.53 ID:bfkpTtOm.net] >>779 それはクラ…リッツとかオレオ!
792 名前:デフォルトの名無しさん [2015/10/03(土) 20:23:09.16 ID:HRif353B.net] ハッカーの大部分が悪いことをするので、ハッカーは悪事を働く人を意味するようになった。 そこで、ハッカーたちはクラッカーという新しい言葉を作り、俺はハッカーだから 悪いことをしていないと取り調べで言うようになった。
793 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 20:24:08.26 ID:I2+KZq9W.net] リンゴマークをこよなく愛する
794 名前:デフォルトの名無しさん [2015/10/03(土) 20:27:19.39 ID:25KCQVnt.net] ハッカーの彼女ってペンギンだろ
795 名前:デフォルトの名無しさん [2015/10/03(土) 20:28:46.01 ID:HRif353B.net] クラッカーという言葉を作って、犯人はクラッカーだと言うようになった。
796 名前:デフォルトの名無しさん [2015/10/03(土) 20:30:44.43 ID:HRif353B.net] 電話を無料でかける装置を50ドルで売った。 これは良く売れた。 マンハッタンのビジネスマンが一日に50台注文することもあった。 この利益でいくつかのフリーソフトウェアが完成した。
797 名前:デフォルトの名無しさん [2015/10/03(土) 21:34:06.93 ID:GmUX5JOa.net] 2つの矩形(XYWH)を覆う四角形Z(XYWHR)を求めるにはどのような計算式を書けばいいですか?
798 名前:デフォルトの名無しさん [2015/10/03(土) 21:40:46.15 ID:8iRLWTDj.net] std:::min と std::max を使うと簡単だよ
799 名前:デフォルトの名無しさん [2015/10/03(土) 21:47:00.05 ID:GmUX5JOa.net] >>788 矩形から矩形ならそれで出来ますが、矩形から傾きのある矩形を求める方法が知りたいです
800 名前:デフォルトの名無しさん [2015/10/03(土) 21:48:38.22 ID:DW8kiwr4.net] ちょっと図で書いてみて
801 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 21:53:58.07 ID:wd3SBpbJ.net] 傾きありだと飼いは無数にあるから条件が必要
802 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 21:58:00.99 ID:8iRLWTDj.net] >>789 これでどう? 動画も有るよ sssiii.seesaa.net/article/194921654.html
803 名前:デフォルトの名無しさん [2015/10/03(土) 22:07:52.43 ID:GmUX5JOa.net] シューティングゲームのすり抜け防止に使いたい 1F前の矩形+現在の矩形で矩形を求めて判定した後高速判定)、当たっていれば傾きありの矩形で判定したい(厳密判定)
804 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:18:40.75 ID:eQmk9cX0.net] 頂点8つだし、厳密なものでなくていいなら、最も遠い頂点間を長径とする長方形でいいんじゃないの?
805 名前:デフォルトの名無しさん [2015/10/03(土) 22:30:23.52 ID:GmUX5JOa.net] 線分でしてみます。
806 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:31:15.33 ID:RI5yhOba.net] 指定した点Pが凸多角形Xの内側か外側かはベクトルの内積で判定できるので、 凸多角形Yが凸多角形Xと重なりを持つかどうかなら、Yの辺を構成する全部の画素について上と同じことをやれば良い、 もし、YとXが非接触の状態から、Yの内側にXがいきなり飛び込むケースが在る場合は、 念のためXとYを入れ替えた判定もやる 単純にビットマップのANDでも取る方が幸せ鴨、 本当かどうかは知らん
807 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:34:55.68 ID:RI5yhOba.net] 訂正 誤:単純にビットマップのANDでも取る方が幸せ鴨、 正:が、小さい判定領域であればそこまでやるより単純にビットマップのANDでも取る方が幸せ鴨、
808 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 01:30:06.66 ID:RUTa+wSI.net] >>793 簡単 頂点を引き伸ばせばよい uploda.cc/img/img56100238268d5.png ↑適当な図
809 名前:デフォルトの名無しさん [2015/10/04(日) 03:21:04.05 ID:ZIaV4muE.net] >>798 そういう図は何で描いてるの?
810 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 04:42:29.50 ID:r2m0aNE2.net] C++スレなんだからC++じゃないの ちな、このレスもC++で書いてる
811 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 10:03:01.78 ID:J4whK/1Y.net] JavaScriptの、isPointInPath のように、 その点が、図形のパス内にあるかどうか、判別できないの? それか、RGBAのアルファ値の、250〜255を、 アルファ値として使わず、 物体の判定用フラグとして使うとか
812 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 10:06:56.41 ID:yZJnSbHB.net] >250〜255を、アルファ値として使わず 30年前のC++使いが考えそうなクソ設計だな
813 名前:デフォルトの名無しさん [2015/10/04(日) 10:40:50.29 ID:+wQ6czRK.net] 内積で判定するのってどうやるの?
814 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 11:26:51.95 ID:r2m0aNE2.net] >>803 言いたかったのは ttp://www.nttpc.co.jp/technology/measurement.html の「線分と点の位置関係の判定」の部分 (最後の方の簡単な式。前半の大量の式は内外判定ではなくて距離の算出方式の解説に費やされている。 だが、上の記事の第2回目にさらにいろいろ書いてあったわ; ttp://www.nttpc.co.jp/technology/number_algorithm.html 世間は広大だわ、
815 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 19:47:31.94 ID:T8eNBhl9.net] boost::geometry に何かないの?
816 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:18:19.75 ID:VFapxPBu.net] VC++2015にて std::map<std::wstring, std::wstring> testmap; testmap[L"Hello"] = L"World"; const std::map<std::wstring, std::wstring>& testmap2 = testmap; std::wstring val = testmap2[L"Hello"]; この4行目でC2678 二項演算子 '[': 型 'const std::map<std::wstring,std::wstring,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' の 左オペランドを扱う演算子が見つかりません (または変換できません) が発生するんだけど、要は「鍵と要素がwstring」で「constな」mapを上記のようにリテラル文字列で[]参照する書き方ってできる・・・? const std::wstring ws = L"Hello"; std::wstring val = testmap2[ws]; とかやってもだめだった エラーの詳細としては、mapのoperator[]に「wstring&」と「wstring&&」の両方があって曖昧だからNGらしい そもそもconstなmapなのに要素変更にも使える[]を呼んでいるのがダメってことかいね?const外せば動くし
817 名前:デフォルトの名無しさん [2015/10/05(月) 14:26:27.32 ID:9/62paZL.net] 同じ質問が最近にもあったような
818 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:37:36.36 ID:VFapxPBu.net] 本スレの過去をmapで検索してもそれらしき件は見あたらず・・・(過去ログは読めない)
819 名前:デフォルトの名無しさん [2015/10/05(月) 14:41:46.58 ID:HSAikNuy.net] >>806 testmap[L"jerk"]; これだけで副作用が生じるわけで諦めるしかあんめー std::wstring val = testmap2.find(ws)->second; あえてendが返ったか見てないけど、 それはoperator[]と同質の問題ってことで
820 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:43:47.49 ID:zntwOtDH.net] std::mapはconst版( operator[](const Key&) const )は無いよ−。 キーがなかったら新しい値を挿入するという動作だから。 ja.cppreference.com/w/cpp/container/map/operator_at findしましょ。
821 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:48:47.23 ID:VFapxPBu.net] そうか、[]の時点で要素増えるからダメか
822 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 23:43:18.77 ID:EGogu2NJ.net] C++の文法はクソだからな コンパイラーが手を抜いてプログラマーが不利益を被る良い例だ
823 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 00:10:39.56 ID:1Ze1Ogug.net] >>806 https://www.google.co.jp/search?q=std+map+at
824 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:05:09.41 ID:CpsQkQ9O.net] C++の仕様がいい加減だからなのか、 regexのマルチライン対応なんかは、VCは対応でGCCは非対応だからな 行頭の^が文字列の頭になると行頭じゃえらい違いだよな
825 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:23:22.63 ID:EO5+cWSu.net] STLに問題があるようだな
826 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:25:23.49 ID:eWd5i2Y2.net] >>812 文法はあまり関係ないけど? 低脳が口挟んでも
827 名前:pかくだけだぞ [] [ここ壊れてます]
828 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 11:20:11.67 ID:k9h8FU3j.net] むしろ文法があんなだから コンパイラは手を抜けないとも
829 名前:デフォルトの名無しさん [2015/10/06(火) 11:54:27.84 ID:+syJpT4+.net] 文法じゃなくて意味が糞なんだよな
830 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:27:05.15 ID:Zn1/MkM8.net] そうそう、mapで思い出したけど テーブルって実行時に初期化したくないやん ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな? 環境によって違うけど 構造体の配列とかだと、初期化子リスト付けとくと、.dataセクションに即値が書かれてて 初期化時にはそれをコピーしてポインタをセットして準備完了 それと同じようなことをmapでやって見たい c++11だとmapでも初期化子リスト使えるからそれでいけるのかな? 何年か前にg++でコンパイルして.dataセクション見てみたけど当時はmapの即値になってるように見えなかった c++03とかだとどんな手があるんだろう??
831 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:35:26.69 ID:k9h8FU3j.net] そうそう、mapで思い出したけど テーブルって実行時にメモリ使いたくないやん ある程度の大きさのmapは実行時にメモリのコストが大きいけどどうしたらいいのかな? https://research.preferred.jp/2011/07/stllike-containers/
832 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 16:00:02.92 ID:wWQ1shVW.net] 初期化はだって実行時じゃないか?
833 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 20:34:00.60 ID:hYLbQ3+q.net] どうしてもdataセクションにそのままアクセスしたいのであればキーと要素を持つクラスをキーでソート済みの配列で書いてstd::mapのconstメンバ関数と同じものを持つラッパークラス書くとかかな
834 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:14:23.94 ID:mXRqVUnf.net] >>821 要するに map を実行時に構築するんじゃなくてコンパイル時に構築しといて実行時はメモリーコピーだけにならんもんか? っつーことでしょ たまに俺もそう思うことがある
835 名前:デフォルトの名無しさん [2015/10/06(火) 21:27:26.34 ID:jUDOLtzl.net] 確かにねー そんな気することよくあるよな constexprなコンストラクタでどこまでできるのかと
836 名前:デフォルトの名無しさん [2015/10/06(火) 21:34:08.29 ID:MCB0h3nq.net] シリアライズかデータベースつかえ
837 名前:デフォルトの名無しさん [2015/10/06(火) 21:37:47.97 ID:MCB0h3nq.net] >>820 の意図するところと、>>823 は別で>>820 は省メモリにしたいって話だろ。
838 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:54:53.32 ID:2Pt1OMoQ.net] 配列に入れて線形探索 要素数が小さいうちは線形探索はもともと他より致命的に悪いわけではないし 今日日のCPUならキャッシュと分岐予測とOOOの華麗な連携プレーを目の当たりにできる
839 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 22:43:09.92 ID:8+tr+OYB.net] これは遅くなりそうだからってがんばってマップ作ったら 線形探索ゴリ押しの方が速かったことならある
840 名前:デフォルトの名無しさん [2015/10/06(火) 22:47:58.27 ID:Cu8Zkmdv.net] 二分検索じゃだめなの
841 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 23:07:19.25 ID:hYLbQ3+q.net] std::sortもstd::lower_bound もあるんだからバイナリサーチぐらいしようぜと
842 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 05:07:06.28 ID:vlTfjNXN.net] >>826 >>823 は >>819 の > ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな? の話だよ データベースとか頓珍漢過ぎ
843 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 07:13:23.42 ID:JsRvQDZJ.net] コードの工夫で初期化コストを改善するのではなく データベースでの永続保存という別手法での改善方法もあり得ることを示すことが それほどトンチンカンとも思えないが
844 名前:デフォルトの名無しさん [2015/10/07(水) 08:23:24.99 ID:PbTUGDDG.net] mapはエントリーを追加できるんだからドンダケ待ってもそうはならないと思。
845 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 08:34:53.72 ID:q7nyuwNL.net] >>832 なにを改善したいかも理解してないアホ w
846 名前:デフォルトの名無しさん [2015/10/07(水) 08:52:16.49 ID:d/PBWwg/.net] static_mapみたいな名前になるんだろか。
847 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 09:44:01.58 ID:0iwSPjqO.net] Rubyでは、Hashの要素数が増えていくと、再編成される バケット数は、2の累乗付近の素数を使う。 つまり、倍々に増やしていく 8+3, 16+3, 32+5, 64+3, 128+3, 256+27, 512+9... 1つのバケットには、平均して5つの要素を入れる(衝突)。 11*5=55, 19*5=95, 37*5=185... つまり要素数が、56, 96, 186...個になると、 バケット数を増やして、再編成する 普段、1万個の要素を追加するのに、8msかかるが、 再編成するタイミングでは、20msかかる。 要素数が増えていけば、もっとかかるだろう
848 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 11:02:09.32 ID:8pl0pVx/.net] C++のスレでRubyとかアホなの? 環境も書かずに2msとかアホなの? C++なら1万個追加で1msだ
849 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 11:19:07.99 ID:vH7WjwMJ.net] 昔、某オンラインゲームの支援ツール作って、プロセスメモリ上にあるVC++2008実装のstd::mapの テーブルを直接アクセスするコードを書いたのを思い出した
850 名前:デフォルトの名無しさん [2015/10/07(水) 11:20:45.74 ID:Qd1lXfpw.net] そういった成功体験は捨てたほうがいい
851 名前:836 mailto:sage [2015/10/07(水) 11:50:30.95 ID:0iwSPjqO.net] 「Rubyのしくみ」という本に書いてあるのだが、 RubyのHashは、Peter Moore が考案したもの。 C++でも、彼のロジックを使っているのなら、同じかなと思って mapの要素数が増えていくと、 バケット数を増やして、再編成されるので、 その際、全要素が移動するから、どうしても遅くなる だから、メモリ的には損だが、 最初から大きめのバケット数を確保しておけばよい
852 名前:デフォルトの名無しさん [2015/10/07(水) 13:03:07.75 ID:gQOBln3k.net] ん、std::hashって算法まで規定されてたっけ? 17.6.3.4を見る限りそうではなさそうだが
853 名前:デフォルトの名無しさん [2015/10/07(水) 14:19:20.92 ID:4iZc7XH3.net] struct hoge{}; const hoge h; をコンパイルすると error: uninitialized const 'h' と出ます。何故ですか constを外すとコンパイルできます。GCC4.4です。
854 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 15:58:16.91 ID:2UUkd3/F.net] 定数は値が書き換えられないわけで 最初の時点で値を代入しなかった場合、「お前なんのために定数宣言したの?」って突っ込まれてる
855 名前:デフォルトの名無しさん [2015/10/07(水) 16:15:42.33 ID:4iZc7XH3.net] vcではエラーにならないのは何故ですか どっちが正しいですか
856 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 16:35:55.12 ID:vH7WjwMJ.net] どっちかというとGCCのほうが余計なお節介?
857 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 16:40:45.70 ID:jyxNZJK8.net] そうそう、馬鹿が作ったプログラムがちゃんと動かなくてもコンパイラの責任じゃないしね…
858 名前:デフォルトの名無しさん [2015/10/07(水) 16:42:23.02 ID:Qd1lXfpw.net] ideone.com/Sr2PO1 エラーにならないけれど
859 名前:デフォルトの名無しさん [2015/10/07(水) 17:24:17.24 ID:gQOBln3k.net] 842は警告ではなくエラーなのはなぜかと聞きたいんだろ
860 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 17:42:19.19 ID:tt9P1ak1.net] どっちが正しいも糞もないのでは
861 名前:デフォルトの名無しさん [2015/10/07(水) 19:09:00.13 ID:qAlHmwsj.net] gccはいつも糞だから、これもgccが悪いんじゃねーの。
862 名前:デフォルトの名無しさん [2015/10/07(水) 19:11:12.75 ID:Qd1lXfpw.net] gccではエラーにならないと言っているだろ
863 名前:デフォルトの名無しさん [2015/10/07(水) 20:31:15.75 ID:lwnukUe8.net] なるから言ってるんですアホなんですか
864 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 21:27:09.31 ID:BAz1ThzD.net] >>849 少なくともお前が糞なことは確か
865 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 21:40:43.83 ID:3DMfLJBU.net] 標準C++ではエラーになるのが正しい VC++でエラーにならないなら標準非準拠か独自拡張 クラス型のconstオブジェクトをデフォルト初期化(で定義)するときは そのクラスにはユーザ定義のデフォルトコンストラクタがなければならない >>847 がエラーにならないのは静的記憶期間のためゼロ初期化されて上記には該当しないから
866 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:01:49.00 ID:JsRvQDZJ.net] >>854 >ゼロ初期化されて上記には該当しないから フーン、それはISO/IEC 14882:2014のどこに書いてあるのですか?
867 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:06:57.63 ID:pNycS8F+.net] パーサー書いたことある人いますか 一応作ったけどすごい難しいというか面倒というか どういったアルゴリズムがいいのか馬鹿だからわからん
868 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:22:04.98 ID:ftNCaisU.net] BoostにC++パーサーがあったような
869 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:23:53.25 ID:Kru1mWVv.net] boost::spiritでおk
870 名前:デフォルトの名無しさん [2015/10/07(水) 23:24:01.37 ID:gQOBln3k.net] (1)文字単位の検査 →エラー文字を弾く (2)文字を結合してトークンを作る →エラートークンを弾く、コメントなど延期トークンをまとめる (3)トークンを結合して再帰的ツリーを作る →構造の欠損を弾く (0)メタな表記がある場合、そのメタ表記についてまた(1)から逆再帰的に繰り返す できたツリーを意味解析に渡す
871 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:25:58.96 ID:0v/h/3vS.net] >>856 オープンソースのパーサー腐るほどあるだろそれいっぱい読め
872 名前:デフォルトの名無しさん [2015/10/08(木) 00:13:00.11 ID:p7bZHcv9.net] >>856 あります。 ・(E)BNF ・HTTP ・Sentence segmentation 等書きました。
873 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 04:32:10.77 ID:FlZYA0H2.net] >>856 LL(5)位がおすすめ
874 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 06:37:28.57 ID:ETVAEvki.net] >>862 なんでLL(5)んああんだよ? 5記号先読みするパーサなんて一般的じゃないだろJK、 ていうかLL(1)(再帰下降構文解析の一番簡単なやつ)とかは 素人でも勝手に再発見するがそこで理解が止まってしまうと 数式のパーサで死ぬので(そのまま作ると2項演算子が全部右結合になってしまう 、やpっぱまずわ正規言語のパーサあたりからから作ってみて感触をつかんだるのちに ボトムアップパーサの理解に進むべし、
875 名前:デフォルトの名無しさん [2015/10/08(木) 11:19:30.61 ID:GTAWjzct.net] LL(1)はLL(1)文法になるように人工的に作り出した言語にしかほとんどつかえないからな LL(5)位なら適当にある言語ならほとんど解析できるだろ
876 名前:デフォルトの名無しさん [2015/10/08(木) 12:23:57.11 ID:GTAWjzct.net] 左結合にしたければカッコつければいいだけだし 右結合する演算子なんて普通無いしな
877 名前:デフォルトの名無しさん [2015/10/08(木) 12:25:42.38 ID:PEkcocuS.net] バックトラックはセキュリティの問題をはらみやすいので避けたほうが良い。
878 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 12:28:11.85 ID:GTAWjzct.net] また例の再帰関数大嫌い君か
879 名前:デフォルトの名無しさん [2015/10/08(木) 12:33:40.58 ID:PEkcocuS.net] 好き嫌いの問題ではないはず。 安全か安全でないか。
880 名前:デフォルトの名無しさん [2015/10/08(木) 12:39:28.24 ID:GTAWjzct.net] 妊娠と同じですとでも言いたいのか?
881 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 13:46:07.06 ID:XT2XQMd7.net] template関数をvirtualにはできない制限って今後のC++でも続くんでしょうか? そもそもこの制限の理由は仮想関数テーブルを作るコストが大変だから、ってやつですよね? コンパイル時間かかってもいいからやってくれ、ってニーズはないんでしょうか?
882 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:03:10.79 ID:jZEKLa+0.net] 具体的にどういう風に仮想関数テーブルを構築したら template関数のvirtual化が可能なんですか? 分割コンパイルは可能なのですか? コンパイル単位を守れるのですか?
883 名前:デフォルトの名無しさん [2015/10/08(木) 14:29:05.60 ID:1TGlpU6G.net] >>871 やってみろよ、まず struct A { template <typename T> virtual void func(T) { } };
884 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:40:04.09 ID:jZEKLa+0.net] そんなこと出来っこないだろう、という返しだったのですが・・・
885 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:48:15.03 ID:jZEKLa+0.net] プログラムに必要なソースコードをグローバルな視点ですべて解析してから コード生成を開始するならテンプレートな仮想関数どころか もっととんでもない事が可能かも知れんが C++はcpp単位で分割コンパイルするのがルールだから無理っていう baseクラスをコンパイルしてvtable作る時には それにどんな派生クラスがあるか分らないし、分らなくてもコンパイルできるように なってるのがC++のルールだからね
886 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 15:32:00.85 ID:YWpiDxnr.net] テンプレートのインスタンスの概念すら知らないってことでしょ? こんなの初心者レベルの内容じゃん やってみろよじゃねーよ
887 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 17:33:27.84 ID:G0kXf/E8.net] むしろ出来ないと主張する根拠を聞きたいものだ
888 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:00:23.72 ID:TDkjtQvD.net] 今の仕組みじゃ出来ないだろ。 普通のvtableより更にものすごく遅い 仕組みでやるなら出来ないことはないだろうが。
889 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:07:23.28 ID:G0kXf/E8.net] ISO/IEC 14882:2014は別にvtableの実装を要求してないのだが 「今の仕組み」が普遍的なものであるかのように語られても
890 名前:デフォルトの名無しさん [2015/10/08(木) 18:11:00.56 ID:1TGlpU6G.net] vtable以外の実装の具体例もしくは具体案なしに空想論を語られてもねえ 今んとこ「できるわけない」という立場を取っているが 説得力のある反論〜反証は金払ってでも拝聴したい
891 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:12:29.15 ID:jZEKLa+0.net] 普通に考えて無理だろう 実行時に動的にロードする事も有るし うまくいくとは思えないね
892 名前:デフォルトの名無しさん [2015/10/08(木) 18:12:44.05 ID:GTAWjzct.net] 出来るからやるんじゃない 出来ないからやるんだよ
893 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:13:11.65 ID:TDkjtQvD.net] vtableより早い仕組みがあれば vtableに置き換わるだろうが vtableでできないなら何らかの 遅い仕組みで実装しなきゃいけない。 その機能を使わない場合に遅くならないようにするためおそらくはvtableとのハイブリッドになる。 少なくとも現状の仕様でできないのだから、できるというならリーズナブルな実装の一つでも提案しろと。
894 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:20:47.25 ID:G0kXf/E8.net] なんだ 「俺の使ってる糞コンパイラーではできない」 ってとか。そりゃしょーがない
895 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:22:57.97 ID:jZEKLa+0.net] struct base { template< typename T > virtual void method( T ){} }; struct derived : public base { template< typename T > void method( T ){} }; このとき、 base::method< int >(); base::method< float >(); derived::method< int >(); derived::method< float >(); の関数の実態があったとき、仮想関数に詰め込む順番をあわせる必要が有る これはリンカで行うしかないが、動的にロードする場合はどうなるんだという問題が出る また、derived::method<double>() を追加したとして baseの方に対応する関数がなかった場合はどうするんだという問題が出る リンカエラーにするのかvtableを拡張するのかどうするのか 動的にロードする時にどうするのか
896 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:33:41.15 ID:TDkjtQvD.net] 凄いな。 それができるc++コンパイラを持っているらしいぞ。
897 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:55:11.54 ID:G0kXf/E8.net] 「分割コンパイルするから無理」「テンプレートのインスタンスの考えからして無理」 と言うから理由を聞いてみたのだが 「ボクのvtable実装では無理」とか、話をすり替えるなんて 非仮想関数と非テンプレ仮想関数は追加オーバー無しでテンプレ仮想関数を実現する方法さえ思いつかないらしい
898 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:11:16.86 ID:TDkjtQvD.net] だから追加オーバーヘッドの無い 実装方法や実装したコンパイラを 具体的に出せと。
899 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:14:33.28 ID:jZEKLa+0.net] どちらにしても、C++は一つのcppのコンパイル中は、それしか見えない仕様 コンパイル単位とかいう物がある だからテンプレート仮想関数のvtalbeの構築はリンカに頑張ってもらうしかないが 動的にリンクする場合はどうするんだという問題が出てくる
900 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:20:02.77 ID:e3P/In2F.net] >>841 されない
901 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:28:15.57 ID:idvE5Tw4.net] >>888 動的じゃなくてもリンカーがインスタンス化されてないtemplate仮装関数を発見しちゃったらtemplateのコードをインスタンス化してコンパイルやり直さなきゃいけないよね 動的リンクするならコンパイラを実行ファイルに組み込まなきゃいけない JITありのインタプリタみたいなものになる そんなものを規格に入れるわけがない
902 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:03:43.82 ID:YWpiDxnr.net] >>886 黙ってろゴミ
903 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:13:36.43 ID:ETVAEvki.net] vtable方式は構造体に(メンバ)関数へのポインタを埋め込む方法より 1段ポインタ参照が増えるから不利だが vtable方式をやめるとdynamic_castの実現で頭を抱えることになると思う
904 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:17:35.06 ID:tERbEPZQ.net] 相変わらず雲をつかむような話で喧嘩できるエスパーなスレですね
905 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:19:58.94 ID:fbjyyooL.net] え?お前出来ないの?
906 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:43:07.22 ID:YWpiDxnr.net] そもそも規格で駄目と明言されてる事なのに 自分じゃできないからって、実装方法すら他人を煽るわせびるわ 頭悪いにも程があるだろコイツ
907 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 21:05:21.80 ID:idvE5Tw4.net] >>895 現時点での規格で駄目だとしてもそれが将来的に実現可能かどうか、妥当かどうかを考えてみるのは興味深い事だと思うよ ただ、なぜか彼は偉そうで喧嘩腰なのがいただけないけど
908 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 21:07:33.55 ID:p4LiiGTw.net] 婆ちゃんのために天ぷら揚げないで
909 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 22:26:31.48 ID:XT2XQMd7.net] >>874 >プログラムに必要なソースコードをグローバルな視点ですべて解析してから >コード生成を開始するならテンプレートな仮想関数どころか >もっととんでもない事が可能かも知れんが ですよね C#の生産性の高さを考えると、C++ももう少しユーザに優しくあってほしいと思うわけです 当方数値科学計算が仕事ですがC++歴は浅いので、戯れ言として聞き流してください
910 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 22:40:21.99 ID:ETVAEvki.net] >>874 >プログラムに必要なソースコードをグローバルな視点ですべて解析してから >コード生成を開始するならテンプレートな仮想関数どころか >もっととんでもない事が可能かも知れんが あーそれかなり無理 任意のプログラムに対して有限停止問題が解けるというのと多分同義
911 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:01:41.40 ID:3NeJM4zm.net] かなり無理は不可能なのかそうでないのか
912 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:08:18.42 ID:GfpzmItO.net] 必要なソースコードをグローバルな視点ですべて解析してからコード生成 と同等のことは他言語でやってること
913 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:09:59.28 ID:m6l+7vgz.net] 言葉の意味まで変更してしまえば当然なんでも可能です
914 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:21:28.96 ID:IUqyiVrM.net] >>901 へえ、例えば? そういう言語があるとしたらそれソースコード以外のライブラリが使えないんだけどそういう言語はインタプリタで実行するものしか知らんなあ そういう言語は大抵そこを実行するときに他のソースを読み込むし
915 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:23:34.66 ID:m6l+7vgz.net] C#ではジェネリックなメソッドをオーバーライド出切るんだけど、 C#のジェネリックとC++のテンプレートは仕組みが違うからなぁ
916 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:26:43.46 ID:m6l+7vgz.net] C#はそこそこ頑張っているんじゃないのかねぇ ヘッダファイルは無いし、複数のファイル間で相互参照があっても うまいことコンパイルしてくれるって聞いたこと有るぞ
917 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 06:57:51.96 ID:VT/0EZUp.net] >>899 > 任意のプログラムに対して有限停止問題が解けるというのと多分同義 全然違うと思う
918 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 09:59:13.28 ID:4cEJzv4C.net] >>904 抽象でしかできないぞ
919 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 13:36:37.06 ID:IUqyiVrM.net] >>904 ググっても エラー出るよ助けてよー 出来ないから別の方法使え しか見つからなかったけど本当に出来るの?
920 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 18:02:05.60 ID:m6l+7vgz.net] 「ジェネリック メソッド オーバーライド C#」 でググって一番上にあるのに何を検索したんだかww あまりにも検索能力が低すぎて日常にも支障が有るレベルでは
921 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 18:22:33.28 ID:IUqyiVrM.net] >>909 ttp://qiita.com/monry/items/5a512cfedba665b09135 これのことじゃないよね?
922 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 18:36:34.10 ID:IUqyiVrM.net] ああ、ここのコメントに書いてあった オーバーライドしてねえじゃんで読むの止めてしまったわ
923 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:04:30.76 ID:9aZeSACJ.net] いつも常に自分の足を撃たないように地雷原を歩いてる気がする 新機能がオアシスに見えて逃げ水どころか底なし沼だったり、何だこの、これ
924 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:53:06.45 ID:UhDsPJDp.net] もし生まれ変わって再びプログラミングの世界に入るとして、C++選ぶのかな?
925 名前:デフォルトの名無しさん [2015/10/10(土) 00:59:46.33 ID:kmqm1hww.net] 生まれ変われるとしたら(C+=2)-1かな 例外のクソすぎるところをやり直させてくれるベルダンディが降臨したら迷わず帰依する
926 名前:デフォルトの名無しさん [2015/10/10(土) 01:03:34.69 ID:kmqm1hww.net] 頼みもしないスタック巻戻しにくっついてくるRTTIだとか バカ高いコストのくせに RESUME NEXT がないとか
927 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 01:24:55.29 ID:E0664ZmB.net] >>914-915 コストって何がどれだけあること言ってんの?実行時間?メモリ使用量?コードサイズ? 最近のコンパイラなら問題になることなんてほとんど無いと思ってるんだけど。
928 名前:デフォルトの名無しさん [2015/10/10(土) 01:33:54.53 ID:kmqm1hww.net] ほとんど無いと思ってて
929 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 01:46:30.25 ID:E0664ZmB.net] >>917 答えられないってことは、どうせ迷信や10年前のコンパイラでの話を未だに信じてるだけなんでしょ?
930 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 06:51:03.57 ID:fP3IUTM/.net] resume nextってなんぞやとググったらVBかよ
931 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:05:16.97 ID:CCNhJ4kM.net] デフォルトのコピーコンストラクタやコピー代入演算子って コピー時に各
932 名前:メンバに対して(ビットコピーではなく) コピーコンストラクタやコピー代入演算子を呼び出すことは保証されてる? ポインタを持たせても、生ポインタではなくshared_ptrを使う限りは デフォルトのコピーコンストラクタやコピー代入演算子に任せても安全? [] [ここ壊れてます]
933 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:25:34.33 ID:QRzKPIbr.net] >コピー時に各メンバに対して(ビットコピーではなく) >コピーコンストラクタやコピー代入演算子を呼び出すことは保証されてる? そうか考えたこともなかった >>920 頭いいな
934 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:29:34.25 ID:fP3IUTM/.net] >>920 安全
935 名前:デフォルトの名無しさん [2015/10/10(土) 08:40:12.34 ID:kmqm1hww.net] >>918 なんの今現在の話だよ ちょっとやってみりゃすぐわかる馬鹿なこと聞くから相手してやんねーの
936 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:50:45.32 ID:fP3IUTM/.net] >>923 いいからVBつかっとけよ
937 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 14:35:21.78 ID:C2+tlbor.net] ちょっと調べればすぐ分かるから教えてやらない(震え声) いい加減に適当に喧嘩をふっかけてそれを買うとすっとぼけるのはやめようよ まったく意味のないトラブルばかり招くから…
938 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 16:00:00.63 ID:WQItE+Nd.net] VBと比較してる時点でどうせネットの風評信じて自分の目で 実際の正常系に影響与えてるかどうか検証してないだけだろう さもなくばただの条件分岐に例外多用してるアレな人か
939 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 16:53:49.17 ID:E0664ZmB.net] >>923 ちょっとやってみりゃ↓こんな結果(-2.6%~+4.0%)になるだろうってのがわかってるんだよ。 preshing.com/20110807/the-cost-of-enabling-exception-handling/ この結果でも4年前のだしな。
940 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 17:12:47.93 ID:+pTteXD6.net] resume nextが欲しいと思う時点でやばい
941 名前:デフォルトの名無しさん [2015/10/10(土) 18:29:23.01 ID:DZQ9wvWi.net] >>925 調べればじゃねえよ、やってみればだ とぼけてるのはおまえだろ 怠け者め なんで4年前の記事なんか引っ張んだよ おまえがやれ、つーかできねえんならこの板ではROMってろ
942 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 19:31:04.17 ID:WQItE+Nd.net] >>929 やんのはオメーだろ
943 名前:デフォルトの名無しさん [2015/10/10(土) 20:43:07.08 ID:DZQ9wvWi.net] なすり合いってことにしたいんなら そうすれば? おまえが何も得ないだけだし
944 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 20:52:50.43 ID:wZWPBuKi.net] 擦り付け合いとかじゃなく、 お前がやれ その結果は書き込まなくて良い
945 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 20:53:39.88 ID:WQItE+Nd.net] 馬鹿じゃねーの?押し付けてんのはお前だろ せめて自分で実際にやってから言えよクズ
946 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 20:54:33.77 ID:RukYXTRG.net] まあまあ
947 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:14:34.91 ID:LXdnro1p.net] えらそうに言う奴は先ずテメーのソースコードをここに貼ってみろや!
948 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:31:15.08 ID:PxJo6CPN.net] おらおらおらおらー
949 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:43:47.39 ID:0dTjLyRb.net] やめて! 俺のために戦わないで!
950 名前:デフォルトの名無しさん [2015/10/10(土) 23:11:33.18 ID:6QuLtZGt.net] 以上のような状態をセックスと定義します。 男同士でセックスするのはホモです。 従って>>929 以降はホモ野郎という事になります。 気持ち悪い。
951 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 23:20:00.07 ID:9fj3wNmr.net] >>938 その定義だとお前もって事になるけど大丈夫?
952 名前:934 mailto:sage [2015/10/10(土) 23:38:35.56 ID:pverhzbk.net] まず「以上のような状態」を定義してくれ なぜ俺はホモ疑いに巻き込まれたんだ
953 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 23:40:41.29 ID:0dTjLyRb.net] 通常の定義と全く異なる俺定義を展開されても しかも言葉のすり替えでホモに結論づけするとは悪質だな
954 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 01:48:42.13 ID:XDL1o532.net] homoとhogeって似てるな
955 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 02:35:14.49 ID:cdE875Rm.net] C++書く人達って無駄に攻撃的な人多いね
956 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 03:49:40.51 ID:Nau1HDji.net] C++技術者にも色々いるだけだ
957 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 04:00:43.62 ID:PVe4pURO.net] ID:kmqm1hww とかVBだしな C++に限らない
958 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 04:51:42.92 ID:gSJDxW7y.net] おっと江○添の悪口はそこまでだ
959 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 15:18:32.98 ID:OMjxUQhq.net] ごちゃごちゃ言ってないでしゃぶれよ
960 名前:デフォルトの名無しさん [2015/10/11(日) 21:07:53.47 ID:WBYIj+O0.net] VBだっておバンバン それWindows世代だろw
961 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 06:25:32.18 ID:b39cwc+L.net] >>942 ソフトウェア商品のグレードなんかの Home Edition てのも Homo Edition に似てるね。
962 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 12:18:52.11 ID:eT/PtTP3.net] なんだそのクリックすると喘ぎ声が出そうな製品
963 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:00:35.40 ID:ouSN4Vlw.net] std::coutというか,basic_ostreamのoperator>>についての質問?なんですが, javaの課題をC++でやってみようとおもって,まだ途中なんですが以下のコードを書きました. codepad.org/DdMr0gro これをVS2015環境下でデバッグ実行すると,コマンドライン上に [test] と書かれるはずが ] est つまり,basic_ostreamのイテレータ?が最初に戻ってしまう現象が現れました. (コマンドライン引数には data/test.txt を指定して,dataフォルダに 「test」と書かれたtest.txtを配置しています.) おそらくifstreamかgetline()が原因なんだと思いますが,cinとcoutの同期が 原因かなと思ってtieしても解決しませんでした. なにが原因でこうなってしまうんでしょうか?
964 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:16:39.48 ID:KCAkXS7a.net] ソース読んでないが、テキストファイル側にbom付いてるだけじゃね
965 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:20:47.78 ID:aH9tdNzV.net] ios::binaryで読んでるから\r\nが\nに変換されずに読みこまれてる coutに\rを入れるとその行の先頭にカーソルが移動する
966 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:43:29.57 ID:ouSN4Vlw.net] なるほど,改行コードのことだとは気付きませんでした. となると,自分で取り除くか,binaryではなく,ios::inにするとよさそうですね. ありがとうございました.
967 名前:デフォルトの名無しさん [2015/10/15(木) 20:43:14.49 ID:Z5UOv0gP.net] ストリームはクソだわ
968 名前:デフォルトの名無しさん [2015/10/15(木) 20:59:33.37 ID:kRNzdeWM.net] そこでHaskellですよ。
969 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 21:31:42.27 ID:Pl/e/d+4.net] Javaの課題を写したんなら当然だがc++らしくないな いっそ元の問題を晒してみたら? だれかかっこいいc++を書きてくれるかもよ
970 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:21:39.39 ID:eGvButUC.net] >>956 IOは副作用がある (キリッ
971 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:39:21.45 ID:4rmzgbky.net] >>958 そこでモナドですよ(キリッ
972 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 23:43:57.69 ID:KCAkXS7a.net] っ ::fscanf
973 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 00:21:52.64 ID:yFhNulgB.net] std::fscanfでなく::fscanfを薦める奴に ロクな奴はいない
974 名前:デフォルトの名無しさん [2015/10/16(金) 01:22:34.18 ID:MCA6CYcJ.net] extern "C" int fscanf(FILE*, const char* ...); namespace std { using ::fscanf; }
975 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 08:30:18.81 ID:15bBcd+N.net] 可変長引数って func(const char *s, ...) func(const char *s ...) どっちが正しいの?
976 名前:デフォルトの名無しさん [2015/10/17(土) 11:43:59.18 ID:U1ERA7pu.net] #include <iostream> using namespace std; template<typename ...T> auto f(T...x)
977 名前:{ for(int i:x...) cout<<i<<endl; }; int main() { f(1,2,3); return 0; } 昔こういうことが出来たような気がするんですが どうやるのか忘れました 教えてください [] [ここ壊れてます]
978 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 12:19:44.07 ID:e8xa7PiS.net] >>963 どちらも正しい
979 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 12:28:14.71 ID:e8xa7PiS.net] >>964 for (int i: {x...}) initializer_listを構築してそれをイテレートする
980 名前:デフォルトの名無しさん [2015/10/17(土) 12:50:24.84 ID:U1ERA7pu.net] ありがとうございます
981 名前:デフォルトの名無しさん [2015/10/20(火) 18:25:41.85 ID:3vGCFixJ.net] ファイルから指定文字列を検索したい。以下のコードだとsearchが実行時にエラーExpression: istreambuf_iterator is not dereferencable ifstream f("Text.txt"); string s("is"); istreambuf_iterator<char> eof; eof == search( istreambuf_iterator<char>(f.rdbuf()), //f.rdbuf(), eof, s.begin(), s.end()) ); VS2013です どうすればいいですか
982 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 20:46:00.53 ID:8yDPqMwa.net] cpprefjp.github.io/reference/iterator/istreambuf_iterator.html -------引用開始------- istreambuf_iteratorは、operator++()でイテレータを進めることにより、ストリームバッファのsbumpc()メンバ関数でストリームからデータを読み込む入力イテレータである。 ストリームからのsgetc()メンバ関数による読み取りがTraits::eof()を返した場合に、イテレータはendイテレータと等しくなる。 -------引用終わり------- って事で、1文字ずつしか読み込まないのでは?
983 名前:デフォルトの名無しさん [2015/10/20(火) 21:44:27.08 ID:RWFAio1T.net] eofに代入してないね 等値比較して結果を捨ててる
984 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 21:51:20.77 ID:wM4Y4a1V.net] >>968 案1 ファイルの内容を全部stringに読み込んでfindする 案2 ファイルの内容を全部stringに読み込んでregexする 案3 外部コマンドとしてgrepとかawkとかsedをインストールしておいてc++から起動する お好きな方法でどうぞ
985 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 22:01:04.78 ID:82Xf4s6u.net] std::searchはForward Iteratorを要求するから Input Iteratorのistreambuf_iteratorを渡してもだめだわさ std::findならInput Iteratorでいいから一文字目だけをfindで見つけて 二文字目以降は別にチェックするとか
986 名前:968 [2015/10/20(火) 23:37:01.59 ID:3vGCFixJ.net] ありがとう 試行錯誤してみるよ
987 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 23:46:27.98 ID:Kav8lZYy.net] >>973 一番簡単なのはstd::stringクラスのfindで 一番応用が利くのはstd::regex系を使いこなすこと だと思うな
988 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 00:48:57.67 ID:k2x/6pgE.net] #include <iostream> #include <fstream> #include <iterator> #include <cstdlib> int main(int argc, char** argv) { std::ifstream ifs("src/main.cpp"); std::istream_iterator<char> is(ifs); std::istreambuf_iterator<char> ibf(i fs); std::istreambuf_iterator<char> ibf_e of; std::string istr(ibf,ibf_eof); std::cout << istr.find("std"); return EXIT_SUCCESS; }
989 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 01:47:07.42 ID:k2x/6pgE.net] あ、すまん。std::istream_iterator<char> is(ifs); この行不要な それとcoutの最後にはstd::endlつけてやってくれ
990 名前:デフォルトの名無しさん [2015/10/22(木) 13:25:09.22 ID:3HJoxiXv.net] ベクトルのコピーで検索すると ベクトル同士をコピー代入演算子でコピーするのが一番簡単なきがするのですが 違うやり方ばかり出てくるのはなぜですか? これがまちがっているということですか?
991 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 13:34:38.59 ID:TivbSMZT.net] まちがってないで
992 名前:デフォルトの名無しさん [2015/10/22(木) 13:47:47.59 ID:3HJoxiXv.net] ありがとうございます
993 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 13:55:49.77 ID:CPFSlH5N.net] 違うやり方ってのはstd::vector::assignでbeginからendまでコピーとか? それのメリットはvector以外の型からもコピーできることかね
994 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 15:52:01.07 ID:wxGQnodN.net] >>977 単純なコピーの需要が少ないのでは? 単純コピーなら参照でも十分だし コピーするのは何かを変更したいからワザワザコピーしてを作るわけで 変更するならコピーするタイミングでやるのが簡単だからとか?? あと、要素に参照とかポインタが含まれている場合 シャローコピーになっちゃうわけで参照先の管理が面倒くさくなっちゃう ディープコピー作るなら一工夫必要だしね
995 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 16:46:09.18 ID:UnQTPRBv.net] vectorの便乗質問ですが、reserveされてしまった余分な容量を削除する方法としてswap技法 std::vector<T>(x).swap(x) がありますが、これは一時オブジェクトは全く作成されないのですか? 無名オブジェクトとはいえコンストラクタを呼んでいるわけですから、作成されてるような気がするのですが
996 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 17:44:22.04 ID:TivbSMZT.net] されてるよ
997 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:39:56.40 ID:UnQTPRBv.net] >>983 ありがとうございます。やはり作成されるのですね vectorの容量をシュリンクする効率的な方法としてswap技法を紹介してる人を目にしますが、 コードはシンプルになるものの処理効率が上がるわけではないですよね
998 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:43:29.83 ID:TivbSMZT.net] >>984 swap技法以外に、方法なくない?
999 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:49:05.63 ID:+o7cqPdB.net] >>981 は質問の意図をまったく把握してないから無視していいと思う >>984 複雑で効率的な方法示してみなよ。無いから。
1000 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:53:09.88 ID:UZ6K9ouN.net] 自作のベクタークラスを作る サイズを縮小する場合はreallocを使う
1001 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:56:31.41 ID:IiO/at8e.net] shrink_to_fit()
1002 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:59:03.48 ID:E1Ocrnf5.net] 最初から必要なサイズを確保すればいい。
1003 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 20:19:27.23 ID:gQOdFLsP.net] 春よこい
1004 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 21:33:39.08 ID:OXupIzBk.net] 次スレ C++相談室 part120 peace.2ch.net/test/read.cgi/tech/1445516998/
1005 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 21:55:12.08 ID:kinLxVE3.net] >>989 必要なサイズがわかってるなら単なる配列でよくね?
1006 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 22:15:13.77 ID:TKCRaEBU.net] >>992 だったら君は配列だけ使ってれば?
1007 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 22:43:30.77 ID:kinLxVE3.net] >>993 必要なサイズがわかってるなら、そうしてますが何か?
1008 名前:デフォルトの名無しさん [2015/10/22(木) 23:19:22.19 ID:OwqJeF9X.net] 必要なサイズがわかっててもvectorなドアホがいたw
1009 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:21:34.94 ID:plnHfgiP.net] ポインタでも参照でもない変数って 仮想関数呼んでも呼ばれる関数が静的に決まるよね このときもvtable経由で呼ばれる?(仮想関数の呼び出しオーバーヘッドがある?) それともオーバーヘッド0で呼ばれる? それとも未定義? 最適化次第?
1010 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:21:45.47 ID:4GjtJ8Lk.net] 「わかる」タイミングの問題だ
1011 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:22:03.08 ID:l1df8Qjo.net] vectorって配列に比べてそんなにオーバーヘッドあるか?
1012 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:24:06.05 ID:Y4jcRaLX.net] スタック容量を減らすならarray < vector
1013 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:33:55.59 ID:rvBOfPQs.net] >>995 それをドアホというお前さんこそドアホである可能性
1014 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。
1015 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています