- 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/
- 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をアンロードしてスワップする事
|

|