- 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/
- 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
ありがとう こんな機能があったとは知らなかった
|

|