1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.76【環境依存OK hibari.2ch.net/test/read.cgi/tech/1312621728/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
2 名前:デフォルトの名無しさん [2011/12/12(月) 22:01:55.18 ] >>999 型キャストがビットシフトの前に行われるのって 言語仕様でしたかね?
3 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:22:29.78 ] JISX3010によると、 6.5.7 ビット単位のシフト演算子 意味規則 整数拡張を各オペランドに適用する。 らしいです。
4 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:26:00.04 ] >>2 算術演算子の優先順位 ttp://www.bohyoh.com/CandCPP/C/operator.html キャスト演算子の方がシフト演算子より優先順位高いですね。
5 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:51:51.26 ] >>2 ,4 優先順位とか関係なくね?
6 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:05:20.87 ] >>4 「暗黙の」型変換というところに引っ掛かりを覚えるのだが・・・ さらに言えば、ビットシフトとブール演算が右辺で複合的に行われた場合、それらのビットシフトやブール演算より先に 左辺の型を見て右辺の数をのこらず自動型変換って、期待していいものなのか?当てにしているとあぶなくないか?
7 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:22:54.97 ] >>5 型変換が行われないと、桁あふれで右辺は0になる
8 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:23:55.25 ] 汎整数拡張 ttp://ja.wikipedia.org/wiki/%E6%B1%8E%E6%95%B4%E6%95%B0%E6%8B%A1%E5%BC%B5
9 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:24:38.10 ] ん?>>3 に書いてあるとおりじゃないか^^ c<<16の段階で、両辺が整数型にキャストされてる。 左辺 i が整数であるかどうかはまったく関係ない。 double d = c << 16; のごとく書いても、cは整数型にキャストされるし char s = c << 16; のごとく書いても、cは整数型にキャストされる。 (そして結果はchar型にキャストされて面白い事になる)。
10 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:31:55.62 ] >>7 整数拡張は演算子じゃないから、優先順位とか関係ないぜ。
11 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:38:03.81 ] 左辺をuint64_tにして右辺で4バイト超えるとこまでシフトしても、うまいことキャストするみたいなんだが・・・環境依存? (単に整数型にするだけなら桁あふれでゼロ)
12 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:40:00.07 ] >>9 intはint型と書いてくれよ。char型だって整数型なんだから。
13 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:51:16.42 ] >>6-10 すんません。偉そうに教える程の知識は無いんですが、、、 「暗黙」だろうが「明示」だろうが、優先順位は変わらないと思います。 そして、式内では「精度の高い型」に変換されるので i = c<<16; は、うちは64bitOS(linux) (1)16はint型とみなされる。 (2)c<<16 で右辺の16はint型なので、cは暗黙的にint型にキャストされる。 (3)i = c<<16 で左辺の(unsigned int)にキャストされる。 ってな感じだと思っていたのです。 ・・・って、みなさんの言う、整数拡張ってwikiって見たら、 確かに演算子ではないですね。ということは、無条件に行われるから 優先順位が一番高いとも言えるのかな。 すっかり、ミイラ取りがミイラになっています。 とりあえず、多分、前スレ>>999 さんは unsigned char c; unsigned int i; c = 0xff; i = (unsigned char)(c<<(unsigned char)(16)); printf("c: %x\n", (unsigned int)c); printf("i: %x\n", i); を期待されていたのでしょう。
14 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:53:16.02 ] あ、アンカ間違えた × 前スレ >>999 ○ 前スレ >>997
15 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:56:03.66 ] img.pics.livedoor.com/012/d/6/d6f87fce733d70932354-1024.png mamorenihon.files.wordpress.com/2011/09/kao-demo1.jpg blog-imgs-34.fc2.com/d/e/l/deliciousicecoffee/201108040637592d3.jpg tantawan.blog.so-net.ne.jp/_images/blog/_13f/tantawan/E88AB1E78E8BE4B88DE8B2B7-18690.jpg stat.ameba.jp/user_images/20110820/18/lisa-w-paz/07/00/j/o0500032111430159404.jpg livedoor.blogimg.jp/news30over/imgs/c/3/c3860b80.jpg
16 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 00:22:04.65 ] www.bohyoh.com/CandCPP/C/operator.html 今まで何の疑問も持たずに見過ごしてきたけど、順位が間違ってるね。 配列の添字[]は関数呼び出し()より順位が高いですよ・・・
17 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 00:24:10.32 ] >>16 どんな式でその二つの優先順位の違いが問題になるの?
18 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:37:54.17 ] C/C++の宿題片付けます 154代目 ttp://hibari.2ch.net/test/read.cgi/tech/1322562648/ のスレを見て、他人のプログラムを見て色々と勉強させてもらっているのですが、 そのスレの、>>258 が質問し、>>259 が解答したプログラム(元コード ttp://ideone.com/BRXCl)があるのですが、 そのプログラム中にある、 char *roman_nums[] = {"XI", "XII", "XIV", "XVIII", "XXIV", "XLIII", "XCIX", "CDXCV", "MDCCCLXXXVIII", "MCMXLV", "MMMCMXCIX"}; for (i = 0; i < sizeof(roman_nums)/sizeof(*roman_nums); i++) { という文の、sizeof(roman_nums) / sizeof(*roman_nums) ところが分かりませんでした。 前(分子)のsizeofと後ろ(分母)のsizeofが何なのかがわかりません。割るとどういうことになるのでしょうか。 前の方は、roman_numsは配列なので&roman_nums[0]ってことでしょうか?? 自分の理解が大分足りてないようで、どなたか解説をお願いできませんか。よろしくお願いします。
19 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:41:37.26 ] 配列の数がわかる いちいち割らなくても_countofという便利なものもあるけど
20 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:56:20.91 ] >>19 ほんとですね。 今自分で試したのですが確かに配列の数がピッタリでますね。 どうしてこうなるのでしょうか・・・
21 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:58:20.66 ] sizeof(roman_nums)で配列全体の大きさがわかって sizeof(*roman_nums)で配列1個の大きさがわかるから *roman_numsが難しかったらroman_nums[0]と読み替えてもいい
22 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 03:03:42.52 ] >>21 >*roman_numsが難しかったらroman_nums[0]と読み替えてもいい ああ!そういえばそうですよね。すっかり忘れてました。 お陰ですっきりしました!! ほんとありがとうございます!
23 名前:デフォルトの名無しさん [2011/12/13(火) 06:54:21.79 ] Win7 64+GCC(on MinGW)で・・・・ これはゼロになる unsigned char c; uint64_t i; c = 0xff; i = c<<63; ----------------------------------------- これならMSBにビットが残る unsigned char c; uint64_t i; c = 0xff; i = (uint64_t)c<<63; ----------------------------------------- 暗黙の型変換でやってくれるのは、int(機種依存の?)まで? それはそうと、 :-] ←ドヤ顔
24 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 08:02:56.86 ] >>23 そそ、暗黙の型変換は左辺に何があるかは知らない。
25 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 10:57:50.76 ] >>23 整数拡張だったら大きい方で計算されるんじゃね? unsigned charとintならint、uint64_tとintならuint64_t
26 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 11:41:24.46 ] >>16 こっちの方が良かったかな? ttp://www.cppreference.com/wiki/jp/operator_precedence でも、添字[]と関数呼び出し()の優先順は同じはずですよ。あとは、結合の順番だけのはず。たしか・・・・。 >>17 たぶん、関数ポインタあたりを使うと書ける(問題になる)んじゃない?書いたこと無いけど。
27 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 13:16:20.65 ] for文を使う、配列を使わないやり方でお願いします。 10個の数値を入力 入力された各々の数値を二倍して表示するプログラム。
28 名前:デフォルトの名無しさん [2011/12/13(火) 13:24:43.76 ] >>27 for(i=0;i<10;i++){scanf("%d",&n);printf("%d ",2*n);}
29 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 15:02:10.31 ] 表示は入力の度ではなくまとめてでお願いします。
30 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 15:24:10.41 ] 条件小出しにしないで、宿題スレ行ったら?
31 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:03:53.64 ] むりじゃね?w ってか釣りか
32 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:19:14.88 ] int x2(int i){int n;for(;i;)printf("%d\n",x2(--i));scanf("%d",&n);return 2*n;} x2(10);
33 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 18:12:03.06 ] >>27 #include<stdio.h> #include<stdlib.h> int main(){ int i, n; char s[1000] = "", *p = s; for (i = 0; i < 10; i++) { printf("%d. ", i + 1); scanf("%d", &n); sprintf(p, "%d ", 2 * n); while (*p)p++; } printf("%s", s); return 0; }
34 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 11:27:42.91 ] 以下のような_allocaをラップした関数を作りたいのですが Debugでは意図通りに出力されません。 template<typename T> T *aloca(size_t t){ return (T*)_alloca(sizeof(T) * t); } int _tmain(int argc, _TCHAR* argv[]){ int *a = aloca<int>(1); *a = 1; int *b = aloca<int>(1); *b = 2; int *c = aloca<int>(1); *c = 3; printf_s("*a = %d\t", *a); printf_s("*b = %d\t", *b); printf_s("*c = %d\t", *c); return 0; } Debug出力 *a = 3 *b = 1 *c = 1 Release出力 *a = 1 *b = 2 *c = 3 やはりalocaを抜けた時点で_allocaが確保したメモリは解放されてしまうのでしょうか? だとするとReleaseで動いているように見える理由は? どうすればDebugでも動くようにできるでしょうか?
35 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 11:47:19.34 ] >>34 msdn.microsoft.com/ja-jp/library/wb1s57t5%28v=vs.80%29.aspx _alloca は、プログラム スタックから size バイトを割り当てます。 割り当てられた領域は、単に割り当てがスコープ外になる場合ではなく、 呼び出し関数が終了する場合に、自動的に解放されます。 このため、_alloca から返されたポインタ値を引数として free に渡さないでください。
36 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 13:35:47.86 ] _alloca()は実装にも拠るけど関数じゃないからね。
37 名前:片山博文MZ ◆0lBZNi.Q7evd [2011/12/14(水) 14:08:39.47 ] #define MYALLOCA(type, count) ((type *)_alloca(count * sizeof(type)))
38 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/14(水) 16:09:24.02 ] おっと、カッコで囲まなきゃ。 #define MYALLOCA(type, count) ((type *)_alloca((count) * sizeof(type)))
39 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 17:08:08.53 ] なるほどマクロならいけそうですね。 名前空間に入れられないのがつらいけど それでいこうと思います。 ありがとうございました。
40 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 19:56:37.04 ] マクロを使うとお先真っ黒ってね
41 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 20:43:11.65 ] >>40 まっ、苦労するのは確かだな。
42 名前:デフォルトの名無しさん [2011/12/14(水) 20:50:01.99 ] 在日の戦略にひっかかり、全ての間違いが始まった2009年 夏 |:::::::::::::;;;ノ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |::::::::::( 」 < 民主になればこの世はバラ色、政権交代! ノノノ ヽ_l \______________ ,,-┴―┴- 、 ∩_ /,|┌-[]─┐| \ ( ノ / ヽ| | 在 反 | '、/\ / / / `./| | 日 日 | |\ / \ ヽ| lゝ | | \__/ \ |  ̄ ̄ ̄ | | ┬ |それでも懲りない日本人、韓国民団総理支持率35%w早く目を醒まそう!
43 名前:デフォルトの名無しさん [2011/12/14(水) 21:50:18.48 ] visualstudio2008で開発を行っているのですが、デバッグでは発生せずリリースでのみ発生する不具合があって困っています。 プログラムとしては別スレッドで受信したデータをファイルに記録とウィンドウに表示するものなのですが、20分ほどするとJITのウィンドウが開いてプログラムがフリーズしてしまいます。 その際にVSを立ち上げて落ちた箇所を調べるとfwriteの実行で落ちているようで、書き込むデータのサイズが定数を使用しているにも関わらずfwriteの内部で値が全く違う大きな値になっていました。 このような現象の原因についてご存じもしくは思い当たるふしがあれば教えていただけないでしょうか? よろしくお願いします。
44 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:03:51.91 ] volatile修飾子に関係があるかもしれない 何故そう思ったかというと、つい数日前俺が勉強したばかりだからだ
45 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:10:24.40 ] >>44 C/C++のvolatilはjavaやC#とちがってメモリバリアもアトミックも 保証されていないぞ
46 名前:デフォルトの名無しさん [2011/12/14(水) 22:27:41.84 ] C++で、クラスポインタを0で初期化するようなプログラムを頻繁に見るんですか、いいんですか? 間違って、初期値のままポインタの参照先の値を書き替えてしまうと、かなり危険なきがするんですが。
47 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:32:29.62 ] >>46 間違って書き換える方が悪い、という考えで作られているのがC++。
48 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:44:51.81 ] class A{...}; A * p = NULL; *p = hogehoge; みたいなことを言ってるの? 余裕で落ちるから大丈夫
49 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:45:52.23 ] C++で class CHoge; CHoge* p_test = NULL; p_test = new CHoge(); ↑の処理は、 一番上はクラスの宣言、 二番目はCHogeを入れるためのp_testという名前の箱を用意してやる、 一番下はコンストラクタを呼び出して、実態を与えてやる といった処理でしょうか?
50 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:18:04.55 ] 宣言しただけじゃnewできんぞ
51 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:28:57.40 ] >>46 よく気がついたな かなりヤバイコードだから絶対に真似しちゃイカンぞ
52 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:29:11.50 ] CHoge* p_test = NULL; /*スタック領域にクラスのポインター型変数を確保*/ p_test = new CHoge(); /*ヒープ領域にクラスに必要なメモリを確保した後、 そのクラスのコンストラクタを呼び出し、 そのポインタをp_testに代入*/
53 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:32:32.42 ] RAIIのひろーい原則に従えば、ポインタにNULLを突っ込む余地はないはずなんだけどね 確保の直後に初期化されなければならないし、破棄は(コード的に)確保と隣接した場所で行われるから 要するに無効なまま運ばれる区間は限りなく短くなってるはずなので
54 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 00:40:15.58 ] なに得意そうにswitchさんデスっての?
55 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 09:43:31.74 ] 前スレ>>782 で >namespace manko { > extern "C" { > #include <Windows.h> を見て、へーこんなことできるんだと思って試してみた。 namespace Impl{ struct impl_struct{ char c[8]; }; extern "C" void externCtest(impl_struct *a){ for(int t = 0; t < 8; ++t) printf_s("%d ", a->c[t]); printf_s("\n"); } } namespace Decl{ struct decl_struct{ int a, b; }; extern "C" int externCtest(decl_struct *a); } void externCtest(){ Decl::decl_struct a = { 1, 2 }; printf_s("externCtest ret = %d\n", Decl::externCtest(&a)); printf_s("&Decl::externCtest = %x\n", (int (*)(Decl::decl_struct*))Decl::externCtest); printf_s("&Impl::externCtest = %x\n", (void (*)(Impl::impl_struct*))Impl::externCtest); } extern "C"をつければ、どのnamespaceで定義しても どのnamespaceで宣言しても、引数や戻り値がでたらめでも 名前と引数のサイズとかが合ってれば動くみたいなんだけど これってちゃんと仕様に沿ってるの?
56 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 10:16:23.06 ] 呼ばれる関数は同じだがオーバーロード(?)すらできた。 using Impl::externCtest; using Decl::externCtest; Impl::impl_struct a = { 3, 4, 5, 6, 7, 8, 9, 10 }; Decl::decl_struct b = { 1, 2 }; externCtest(&a); auto bret = externCtest(&b);
57 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 23:24:31.68 ] >>52 ありがとうございmす
58 名前:デフォルトの名無しさん [2011/12/16(金) 13:43:12.04 ] DLL内の関数名の前につく __imp__ と __imp_ の違いってなに?
59 名前:デフォルトの名無しさん mailto:sage [2011/12/16(金) 17:45:05.81 ] 気分
60 名前:デフォルトの名無しさん mailto:sage [2011/12/16(金) 19:33:04.17 ] エスパーすると区切る場所が違う __imp___func -> __imp__ + _func __imp__func -> __imp_ + _func ではなく __imp___func -> __imp__ + _func __imp__func -> __imp__ + func _func と func の違いは呼出規約(stdcallかcdeclか)の違い
61 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 01:05:33.53 ] インプ君思い出した
62 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 02:47:27.11 ] class Hoge { [型] hoge(bool var); } ↑のような関数があるとき、 Hoge hoge; bool foo = true; // どちらでもいいので初期化 hoge.hoge(foo); // (1). bool型の変数指定 hoge.hoge(true); // (2). trueの定数指定 hoge.hoge(false); // (3). falseの定数指定 と出来ますが、 (3)以外のパターンでコンパイルエラーにしたいのですが、可能でしょうか? falseしか指定できないenumを作るしかありませんか?
63 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:04:53.79 ] そもそも引数なんか必要ないんじゃないか? ちなみにC++0xなら、右辺値参照を使えば(1)をコンパイルエラーにできる。 hoge(bool &&var);
64 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:21:42.82 ] プロトタイプ宣言の関数の引数に書かれる「rhs」は何の略です?
65 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:33:14.60 ] >そもそも引数なんか必要ないんじゃないか? 申し訳ありません。 この例を見ると確かにそのとおりです。言われて気がつきました。 簡単に示そうとして、情報が欠落してしまいました。 Hogeのコンストラクタとして3つ、 Hoge hoge; Hoge hoge(false); Hoge hoge = false; hoge.無効化メソッド(false); のを許して、以下を許さない Hoge hoge(true); Hoge hoge = true; Hoge hoge(bool foo = false); ものを考えていました。 boost::optionalのintだけのようなものをライブラリなしでつかいたいな、と。 class Hoge{public: bool 有効化フラグ_; int hoge_};を使って。 おとなしくenumします。 右辺値参照初めて知りました。少し勉強します。
66 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:34:10.36 ] ×hoge.無効化メソッド(false); ○hoge.無効化メソッド();
67 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 04:09:31.81 ] >>64 lhs < Left Hand Side (左辺) rhs < Right Hand Side (右辺)
68 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 09:39:11.49 ] >>62 template<bool p> struct c_bool { static bool const value = p; }; struct Hoge { void hoge(c_bool<false> const & p); }; Hoge h; bool p; h.hoge(p); // error h.hoge(c_bool<true>()); // error h.hoge(c_bool<false>()); // ok
69 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 16:51:49.67 ] C++でコルーチンはどうやれば書けるの?
70 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:01:17.89 ] std::stringで数値を文字にする時に int 123 →"00123" int 1234→"01234" みたいに0で桁数を揃えるフォーマットにするにはどうしたらいいですか?
71 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:07:36.10 ] >>70 #include <sstream> #include <iomanip> std::string to_str(int x, int d) { std::ostringstream oss; oss << std::setw(d) << std::setfill('0') << x; return oss.str(); }
72 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:21:09.91 ] >>71 ありがとうございます!
73 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:26:44.94 ] string str = "123"; std::cout << (boost::format("%05d") % str).c_str(); だったかな。(うろ覚え) std::cout << boost::str(boost::format("%05d") % str); とか。(うろ憶え)
74 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:29:49.92 ] >>73 %dとstd::stringは、激しくマズイ気がするが気のせいだったらすまない。
75 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:41:39.80 ] >>70 >みたいに0で桁数を揃えるフォーマットにするにはどうしたらいいですか? 絶対ないというならいいけど、int 123456 の時に "23456" か "123456" の どっちになって欲しいか書いたほうがいいと思う。
76 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:32:08.83 ] class A { enum B {aaa, bbb, ccc} } int main(){ A::B b = A::aaa; // ※1 return 1; } 「※1」の右辺に、凄い違和感があって、 「A::B.aaa」か「A::B::aaa」ってなるのが妥当に思えるのですけど、 何でcの仕様がこうなっていて、 何に私が悩んでいるのか解決できるようなエスパーがいたら、 助言をして欲しいです。よろしくお願いします。
77 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:32:59.19 ] 禿がenum嫌いだから
78 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:36:48.96 ] 64です。 >>67 ありがとうございます。スッキリ出来ました。
79 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:46:53.65 ] >>76 俺も初めは違和感だったな それにC#ではA.B.aaaとなるし 考え方だがCでは整数に名前が付いてるだけ、 くらいの認識と考えれば、その言語仕様も少し納得しやすいかもしれない
80 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:56:04.21 ] Aのなかにデロ〜ンとaaa bbb cccが漏れてるからそうなるわけで
81 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 19:02:47.35 ] C++11でenum classが導入されてちゃんとクラススコープに入ったenumがつけるようになるんだったけか。
82 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 19:20:08.60 ] namespace ENUM{int aaa(){return 0;}int bbb(){return 1;}int ccc(){return 2;}} typedef int(*ENUM)(); // これで全て解決だ!
83 名前:76 mailto:sage [2011/12/17(土) 19:22:39.05 ] >Aのなかにデロ〜ンとaaa bbb cccが漏れてるからそうなるわけで つまり、enum自体はc++的なものではなくてc的なものなので、グローバルに展開されてしまうってことですね。 ただし、c++なので、クラス内や名前空間内に限定することは可能になっている、と。 納得できました。 ありがとうございます、>>79 ,>>80 ,>>81 。
84 名前:76 mailto:sage [2011/12/17(土) 19:23:29.46 ] >>83 もありがとうございます。
85 名前:76 mailto:sage [2011/12/17(土) 19:24:10.67 ] ×>>83 ○>>82 スレ汚し失礼しました。
86 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 21:32:25.42 ] 質問 C++で、GLSLのnoise関数のような関数はありますか? つまり、ある値を入に対し、決まった、予想の付かない値を返す関数なのですが
87 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 22:33:45.66 ] コピーコンストラクタ・operator=に関して一件教えてください。 コピーコンストラクタを用意する際には、 operator=も用意するように、 と教えていただいたので、そのようにしてました。あるとき、 そのoperator=の最後に記述する「return *this;」を忘れていました。 ところが、特に問題が出ていませんでした。 これは記述する必要がないのでしょうか?
88 名前: ◆QZaw55cn4c mailto:sage [2011/12/17(土) 22:36:15.47 ] >>86 適当なhash関数はいかが?MD5/SHA-1/2(256) とか。
89 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 22:47:36.22 ] >>88 ありがとうございます 検索してみるとwww.studyinghttp.net/md5 このページを見つけました しばらく見て参りますが、他に良い解説サイトなどありましたらご紹介くださいませ
90 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 23:13:57.89 ] >>87 下に示すような記述をする為には、自身を返す必要があるから。 従って、代入した結果を必要としないのなら問題にならない。 -- YourClass foo, bar, baz; foo = bar = baz;
91 名前:65 mailto:sage [2011/12/17(土) 23:25:10.40 ] 「codepad」でエラーになる理由を教えていただけませんか? codepad.org/VybcCvXY ideone.com/WA7TG
92 名前:65=91 mailto:sage [2011/12/17(土) 23:34:02.42 ] ideone.com/WA7TG ttp://www.geocities.jp/ky_webid/cpp/library/027.html 関数のプロトタイプ宣言で、throw(ココ)に書く内容でどのような変化があるのか調べています。 ↑のページの「std::bad_exception」の説明に関して試しています。 178行目の「i2 = hoge5;」において、54行目の関数が呼ばれています。 このとき、 プロトタイプ宣言で、54,55,56のパターンや、 throwする例外オブジェクトで、60,61,62の内容を試すのですが、 「std::bad_exception」がthrowされません。 どこを修正すると説明の通り、「std::bad_exception」がthrowされるか教えていただけませんか? よろしくお願いします。
93 名前:65=91 mailto:sage [2011/12/17(土) 23:49:52.60 ] あと、 「eclipseのc++」や「ideone.com」で試した際と、 「Visual c++」で試した際と、 の間に挙動の違いがあって、205行目が、 前者で実行されない 後者で実行される のですが、何故なのでしょうか? gccでは、宣言以外の例外発生の後に即terminate(); visual c++では、プロトタイプ宣言のthrow()を無視している のでしょうか? ideone.com/qqqhp ※60行目、178行目、205行目
94 名前:65=91 mailto:sage [2011/12/17(土) 23:57:49.65 ] 最後に、(いろいろ問題出そうですが、) 158行目の 「hoge5」 とした場合に、問答無用で、 「(int)hoge5」 「int(hoge5)」 とした場合と同じにすることは可能でしょうか? 可能であれば教えてください。 (型の指定がない場合は、int(T)としたい。が、代入先がboolの場合はbool。「.」や「->」など他のoperatorも残したい。)
95 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 00:02:42.24 ] >>60 ありがとう
96 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 01:41:15.51 ] >>91 エラーの理由をみるにcodepadでは(その警告を出すなら)警告もエラー扱いする設定になってる。 そしてそのソースに対してはクラス定義でのメンバの宣言順とコンストラクタでのメンバ初期化子の順序が違うと警告がでてるからエラーになる。
97 名前:91 mailto:sage [2011/12/18(日) 02:53:35.67 ] >>96 なるほど。理解できました。ありがとうございます。 エラーの内容が続くwarningで示されていたとは。 独立しているのだと勘違いして、warningは無視していました。 codepad.org/lTFa56Ar 動きました。
98 名前:87 mailto:sage [2011/12/18(日) 02:57:54.25 ] >>90 >foo = bar = baz; { bar = baz; foo = bar; } これと等価だと思っていました。わかりやすい説明ありがとうございます。
99 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 03:16:04.70 ] 何度も失礼します。 codepad.org/OuxHRqHa で、41行目にエラーがあり、その内容は、 「定義されていない変数(名)へのアクセスがある」 といったものなのですが、 Visual c++ 2010 Expressで試すと、素通りされてしまいました。 利用していないメソッドの場合も確認してくれるようにするには、どのような設定をすればよいのでしょうか? Visual c++のスレは一週間くらい人大杉で書き込めませんでした。
100 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 03:38:14.38 ] >>99 そりゃ hoge_ が定義メンバにも無いし 継承もしてないからじゃないの?
101 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 03:54:06.53 ] もしかして、メモリリークって、Windowsだと、そのプロセスが終了すれば開放される?
102 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 04:59:59.92 ] Visual C++ でコンソールアプリケーションでプロジェクトを作成して、 コンソールの他に、 独立した子ウィンドウをつくって、そこでなにやら処理したいのですけど、 インスタンスハンドルやらウィンドウハンドルやら説明を読んでも読んでもさっぱりわかりません。 そんなソースを示してくれているページを知っていたら教えてください。 簡単であれば書いてくれると助かります。
103 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 05:20:53.60 ] 開放される
104 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 05:52:09.57 ] >>102 です。 変な質問して申し訳ありませんでした。自己解決しました。忘れてください。
105 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 08:30:59.04 ] c++のように、演算子をオーバーロード・オーバーライドできる言語って少ないんですか? c++しか知らなくて、Javaをはじめてみたのですけど、不便で仕方がないかなぁ、なんて…、態度でかくてすみません。
106 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 08:42:28.35 ] C#とかScalaとかHaskellとかPythonとか
107 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 09:48:10.70 ] javaもoperatorみたいなもんが あれば良かったのにね〜 文字列は+=できるのにね
108 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:10:52.87 ] operator定義なんて邪悪でしか無いだろ いらんわこんなもん
109 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:15:28.01 ] forr.Add(bar) とかになるん?
110 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:17:41.86 ] C++で質問です。 クラスCHogeが構造体m_hoge[5]をメンバ変数として持つ場合、 まとめて初期化することは出来ますか?
111 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:27:26.08 ] C++11なら可能
112 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:27:45.79 ] PODなら配置new そうでないならアラインドストレージの配列にして配置new
113 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:28:44.51 ] コンストラクタ
114 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:32:56.34 ] > いらんわこんなもん 自分に必要ないなら使わなきゃいいだけなのに、 必要もないのに使って「いらんわ」ってアホすぎ。
115 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:37:36.67 ] >>114 使ってないよ なんで使ってると思ったの?
116 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:48:11.32 ] ああすまん、自分には必要ないけど、他人には必要ということが理解できないアホだったのね。
117 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:14:10.87 ] まあこんなもんに必要性感じてるアホよりマシだけどね
118 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:20:16.97 ] 感じてないよ なんで感じてるとおもったの? (w
119 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:26:28.99 ] 7月の段階で民主党が2兆円の復興予算を組んだとき 自民党が要請した復興予算は累計17兆円 自民党の17兆が7月時点でに決定されていたのなら 今の日本はもう少し違って居た筈だ ちなみに関東大震災のときは復興予算として現在の価値にして150兆円以上を組んでいた。 この事実を知れば、予算の規模の小ささ、ましてや増税なんて奇知涯にも程があると思わざる負えない。
120 名前: ◆QZaw55cn4c mailto:sage [2011/12/18(日) 12:38:33.64 ] >>119 で、その17兆とやらの財源は?東電売却?
121 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:40:02.40 ] まー補正予算をチマチマ組むより、一気に金つぎこんだほうがいいんだろうな
122 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:46:58.89 ] >>118 誰がお前の事って言った? 日本語をちゃんと読んでレスしなよ
123 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 13:11:02.53 ] オペレーターのオーバーロードってなんかまずいの? 小規模なプログラミングやっててよく使うんだが
124 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 13:15:39.99 ] 濫用すると分かりにくいコードができる。
125 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 13:35:31.11 ] C++の方でやってるね 可読性の問題かあ 自分一人でやる分には問題ないかな
126 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 14:43:24.80 ] >>122 自分のことなんて思ってないよ なんで俺のことっておもったの? (w
127 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:01:17.97 ] 俺、数学とか好きだから 例えば行列クラスとか作ったりした時(C#だけど) やっぱ、operatorは欲しいよ。 いちいちC = A.Multiplicat(B)って記述より C = A * B のほうがすっきりする ようは、実装するときにちゃんとしたコードさえ かけば、operatorは良いと思う。
128 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:38:48.84 ] C = Mul(A, B) Mul(inA, inB, out) 普通こう書くだろ行列でメンバがprivateなんてまずありえないしメンバ関数である必要ない
129 名前:127 mailto:sage [2011/12/18(日) 16:25:16.01 ] >>128 いいや、メンバは全部privateです。
130 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 17:02:24.99 ] C++さんも中置きにコだわらず Lispさんのユニークな演算子を定義できると言っても過言ではありません(要は関数なんだけどね みたいな書式を併用できればよかったのに
131 名前:デフォルトの名無しさん [2011/12/18(日) 17:35:46.82 ] 個別の要素ににアクセス出来ない行列とかワロス
132 名前:デフォルトの名無しさん [2011/12/18(日) 20:55:57.56 ] わしは、晶子が好きじゃ!
133 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 23:08:11.88 ] >>128 >C = Mul(A, B) ダサすぎてありえないw
134 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 01:23:33.65 ] イテレータやスマートポインタがポインタと同じように扱えるという 一点だけでも演算子オーバーロードの価値がある。
135 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 08:26:00.25 ] >>134 このへんはC++ならではだよなぁ cout << なんかは賛否両論ありそうだけど
136 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 15:16:33.62 ] Visual c++の環境をEclipseから使うことってできるかな? JavaやってみるためにEclipse使ってみたら、エディタタブの右のスクロールバーの右の キーワードのハイライトがわかりやすくて感動した。
137 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 15:21:54.95 ] Productivity Power Tools入れれば同じようなの出るよ
138 名前:127 mailto:sage [2011/12/19(月) 16:43:55.72 ] >>131 C#って書いたろ? そんなもんインデクサや、行又は列の長さくらいは public にしてるにきまってるだろ。
139 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 17:23:14.54 ] >>136 EcripseつかうならMinGWのが情報多いんでね?
140 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 22:50:04.94 ] operatorは初心者の俺には邪険な存在でしかない 1度目は適当に読み流してどんなもんか確認しただけだからかもしれなけど ちゃんと実行確認しながら2度目で理解出来ればいいんだけど
141 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 00:42:24.58 ] 朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。 捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。 >>866 14時以降に何が起きたんだ >>866 Domain Information: [ドメイン情報] a. [ドメイン名] ASAHI-NP.CO.JP e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ f. [組織名] 株式会社 朝日新聞社 これが規制されたからじゃねw −「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」− これはおそらく週刊誌さえ書けない。 「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ
142 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 01:50:40.47 ] >>140 Cのポインタなんかもそうだけど、最初は「そーゆーのがあるんだな」だけで良いと思うのだ operatorなんて、一部以外はそんな多用するもんでもない気がするし。
143 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 17:40:25.85 ] >>140 operator、始めは何この意味不明、と思ってたけど、あると確かに便利なものはあるんだ。 例えば、 ポインタを要素に含んだ構造体を複製する際、ポインタの先まで複製するってのを a = b って出来る。 a.clone(b) とかでいいんだけどね。 あと、他人が書いたコードのoperatorオーバライドは意味不明。確かに要らないと感じたりもする。
144 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 17:57:08.78 ] int型が何ビットになるか決めるのはコンパイラですよね? オプションで指定したり、クロスプラットフォームだったりするから。 ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88 を見ると、OS単位で決まってるみたいな書き方があると感じているのだけど、 OSの層とコンパイラの層があるのかな?
145 名前:デフォルトの名無しさん [2011/12/20(火) 18:20:08.40 ] VC10で以下のヘッダーファイルはコンパイルが通るのですが、プリコンパイル済みヘッダーにしようとすると二重定義だと怒られます 回避策はないでしょうか。あるいはどこが記述が間違っているのでしょうか error LNK2005: "public: static void __cdecl Hoge<int>::FuncA(void)" (?FuncA@?$Hoge@H@@SAXXZ) は既に stdafx.obj で定義されています。 error LNK2005: "public: void __thiscall Hoge<int>::FuncB(void)" (?FuncB@?$Hoge@H@@QAEXXZ) は既に stdafx.obj で定義されています。 // Hoge.h #pragma once template<typename T> struct Hoge { static void FuncA(); void FuncB(); }; template<> void Hoge<int>::FuncA(){} template<> void Hoge<int>::FuncB(){}
146 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 18:38:08.84 ] >>145 template<> void Hoge<int>::FuncA(){} template<> void Hoge<int>::FuncB(){} これは実装ファイルに1箇所だけに書かなきゃだめ リンクエラーになる
147 名前:デフォルトの名無しさん [2011/12/20(火) 19:22:16.84 ] >>146 ありがとうございます ただ、なんとなく inline つけたら問題なく動いちゃいました インライン関数はプリコンパイルしないようになっているのだろうか
148 名前:デフォルトの名無しさん [2011/12/20(火) 21:11:08.53 ] 定数構造体配列の添字をenumとして定義するのは、どうするのがスマートでしょう? typedef struct { BYTE value; const char* name; } STRCT; const STRCT const_array[] = { {1, "one"}, {3, "three"}, {5, "five"}, }; ↑ これらを一緒に定義したい(ONEと1と"one"を1行で定義したい) ↓ enum { ONE, THREE, FIVE }; マクロを駆使して、同じファイルを2回#includeとかしたら出来るんですが、もっといい方法は無いものかと。 Cで無理なら、C++でも可です。
149 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 21:17:50.19 ] struct S { static unsigned int value; std::string name; S(unsigned int v, std::string n) : value(v), name(n) { } }; typedef S const SC; static SC ONE(1, "one"), THREE(3, "three"), FIVE(5, "five");
150 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 21:18:44.16 ] × struct S { static unsigned int value; ↓ ○ struct S { unsigned int value;
151 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 21:46:35.05 ] >>144 整数型のサイズを決めるのはコンパイラのみ。 ただし、コンパイラの設計がターゲットOSのAPIなどに 影響を受ける場合があるということ。
152 名前:デフォルトの名無しさん [2011/12/20(火) 22:28:01.19 ] >>149-150 ありがとうございます >S(unsigned int v, std::string n) : value(v), name(n) { } この文法、初めて見たんですが何という名前の機能になりますか? 定義してコンパイルは通ったんですが、要素にアクセスする方法が分からなくて…
153 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 23:40:38.22 ] >>152 ONE.value, ONE.name
154 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 01:24:23.57 ] >>147 inline 関数は定義がいっぱいあってもその内容が完全に同じならおk
155 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 01:28:28.64 ] >>148 こんな感じでがんばれ。 d.hatena.ne.jp/Cryolite/20110920#p1
156 名前:デフォルトの名無しさん [2011/12/21(水) 02:27:39.19 ] おねがいします。 引数が SIZEの関数があったので func(SIZE(CX,CY)); と記述したらエラーとなりました。 SIZE size={CX,CY}; func(size); とするとOKでした。 変数を作らずに関数に値を渡すにはどう記述すればいいのでしょうか。
157 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 02:31:33.13 ] >>156 コンパイラがC99またはC++11対応ならSIZE{CX,CY}でいけるんじゃないかな。
158 名前:デフォルトの名無しさん [2011/12/21(水) 03:42:27.32 ] >>153 ありがとう。動作しました。 こんな文法があるとは。 ただ、これらを配列としてアクセスしたかったりします。 printf(const_array[ONE].name); のように。 >>149 の原理が分かってないので、応用できないというか… なにか参考URLはないでしょうか 構造体でググっても見つかりません…
159 名前:2011新作展示 [2011/12/21(水) 03:44:15.42 ] 2011新作展示 N級最高等級時計大量入荷 新品種類がそろっています。 baidurl.cn/4ye baidurl.cn/555 baidurl.cn/556 baidurl.cn/557 baidurl.cn/559
160 名前:144 mailto:sage [2011/12/21(水) 06:52:08.37 ] >>151 ありがとう
161 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 08:52:44.73 ] >>158 bool operator < (S const & a, S const & b) { return a.value < b.value; } std::map<S, S> make_array(void) { std::map<S, S> array; array.insert(ONE, ONE); array.insert(THREE, THREE); attay.insert(FIVE, FIVE); return array; } static std::map<S, S> const const_array = make_array(); int main(void) { std::cout << const_array[ONE].value << std::endl; std::cout << const_array[ONE].name << std::endl; }
162 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 23:11:15.45 ] 解散コールは1:55から 12.19 街頭演説、国民の怒りと危機管理への不安 www.youtube.com/watch?v=6PQf9GvXWB0 国民に罵声を浴びせられ駅前交番に避難するテレビアカヒの取材班 12/19正午 新橋駅前 blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/111219_124643_ed.jpg ,:' .l .::;',. :::;/..://:: /,':/ ', l、 .i ヽ . ,' ..::| .::;',' :;:','フ'7フ''7/ ',.ト',_|, , ',.', ,' .::::::!'''l/!:;'/ /'゙ / '! ゙;:|:、.|、| 'l . ,'. .:::::::{ l'.l/ 、_ _,. 'l/',|.';| l :::::::::::';、ヾ  ̄ `‐-‐'/! ';. ' . ! :::::::::::/ `‐、 ゝ |'゙ | | ::::::::/ \ 、_, _.,.,_ ノ::: ! 野田政権が早く終わりますように |::::/. _rl`': 、_ ///;ト,゙;:::::./ .. `´ /\\ `i;┬:////゙l゙l ヾ/ ,.:く::::::::`:、\ 〉l゙:l / !.| . /:.:.:.:\:.:.:.:.`:、ソ/:.:| | | 19日の報道ステーション /.:.:.:.:.:.:.:.:.:\:.:.:.:У:.:;l livedoor.blogimg.jp/kingcurtis/imgs/e/d/ed2dbc66.jpg
163 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 06:29:56.60 ] class A{ int hoge(){} } と書いてもコンパイルエラーにならないが、 class A{ int hoge(); } int A::hoge(){} と書くと、「値を返さなければいけません」のようなコンパイルエラーになるのは何故ですか? 両者は同じではないですか?
164 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 06:37:16.94 ] ttp://codepad.org/NM2qcsIg 文句言われるけど
165 名前:163 mailto:sage [2011/12/22(木) 07:40:15.39 ] >>164 ありがとうございます。 気になったらとりあえずcodepadに行ってみるのがいい感じですね。 mingwだと良く見ると警告が出ていて、 ideon、Visual C++だと警告すら出ませんでした。 警告に対する設定の違い見たいですね。。。
166 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:41:49.56 ] 前者は呼ばれない関数だからだろ。呼べばエラーになるよ。
167 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:49:11.02 ] #include <iostream> class A{ private: int ababababa(void) { std::cout << "hoge"; return 1; } }; int main() { A a; a.ababababa(); std::cout << "foo"; } 単体試験をしたいのですが、ababababa(void)がprivateであるためアクセスできません。 クラスを変更せずに試験を行うことは出来ませんか? クラスの内部にfriendを書く以外の方法があれば教えて欲しいです。
168 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:50:39.96 ] #define private public
169 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 08:48:37.01 ] 名前の違う、自由に改変可能な、同じ内容のクラスを作って 対象のクラスのポインタをそのクラスのポインタにキャストする
170 名前:167 mailto:sage [2011/12/22(木) 09:41:48.72 ] >#define private public これは…。 恐ろしいものを知りました。 >名前の違う、自由に改変可能な、同じ内容のクラスを作って ちょっと労力が大きいかも。 おふたかた、ありがとうございます。 因みに、プロの方ですか?現場でもこういったことをするのですか?
171 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 09:43:46.66 ] >前者は呼ばれない関数だからだろ。呼べばエラーになるよ。 ! 呼ばれなければコンパイルされないのか…。 ありがとうございます。
172 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 09:47:35.11 ] 呼ばれない関数でも普通はコンパイルされるよ。
173 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 10:47:13.94 ] >>168 背筋が凍った
174 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 11:56:21.38 ] 実際>>168 がまかり通ってるような現場ってあるの?
175 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 12:18:10.65 ] クラスにfriendを追加したりする変更権限のある人が テストをした方が良いと思うんだが。
176 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 14:39:19.81 ] >>171-172 呼ばれないメンバ関数をコンパイルしない代表は、VC++。 他人が使うクラスを作るときは要注意。
177 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 16:14:40.38 ] >>176 実例よろ
178 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 16:31:36.66 ] >>163 前者はインライン関数。 インライン関数は一部は一部文法チェックされるようだけど、 呼ばれなければ、returnがなくても怒られないね。 バイナリには含まれないから問題ない。 後者はインライン関数ではないので 呼ばれなくてもバイナリに含まれるから returnがなければ怒られる。 よって両者は異なる。
179 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:37:11.15 ] ひどいコンパイラだ…
180 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:46:22.31 ] 当然の処置だと思うがね。 インライン関数のマージ作業に意味解析済みである必要は無いというかそもそも無駄なんだから
181 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:54:10.81 ] そうかなぁ… リリースモードならともかく、デバッグモードではちゃんとコンパイルエラーを出して欲しい。 DEFCON^h^h^h^h^h^h警告レベル4でもでなのかしら? …実験してみるかな。
182 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 23:02:13.29 ] 未使用だと言うなら警告してくれてもいいとすら思う。
183 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 23:53:24.85 ] >前者はインライン関数。 なんと! クラス宣言の中に書いてしまうとインライン扱いになるということ? 警告してくれるようなオプションってないのかな? 後で邪魔になっても困る人もいるのでは?
184 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 01:09:32.25 ] 震災前 /::::::::::::::::::::::::::::::;;::ノ ヽ;::\ /::::::::;;;;;;;;;,,,;;...-‐''"~ ヽ:;::l |:::::::::::| 岡田 異音 |ミ| |:::::::/ ,,, ヽ,、 '|ミ| '|:::::::l '''"" ゙゙゙゙` |ミ| |:::::|. ,,r ‐、 ,, - 、 |/ ,/⌒| ノ ・ _), (. ・ `つ| | ( "''''" |"'''''" | ヽ,,. ヽ | | ^-^_,, -、 | | _,, --‐''~ ) | マニフェストもう守れない。どうしよう・・・・ 'ヽ ( ,r''''''‐-‐′ / 震災後 |:::::::::/ |ミ| |::::::::| ,,,,, ,,,,, |ミ| |彡|. '''"""'' ''"""'' |/ /⌒| -=・=‐, =・=- | | ( "''''" | "''''" | .ヽ,, ヽ .| キリッ | ^-^ | . | ‐-===- | 大震災が起こったのだからマニフェストの破綻も致し方ありません ,\. "'''''''" / 朝鮮民主党 解党
185 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 08:52:29.38 ] WIN32のAPIのwinsockの関数、「WSACleanup()」というのは、何をする関数なのでしょうか? 「WSAStartup()」と対になって、 初期化・開放 のようなものかと思っていたのですが、 調べてみると、 「WSAStartup()」はメモリを取得するが、 「WSACleanup()」をしても開放しないので、そのうちヒープか何かが無くなって落ちると知りました。
186 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 09:00:06.22 ] 何をするのか知らなくてもいいようにそういう関数になってるんだけど
187 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:32:56.69 ] 今独習C++やっているんですが、 std::ofstream out("test.txt", std::ios::out | std::ios::binary); double num = 100.45; out.write((char *) &num, sizeof(double)); の(char *) &numって何で&numなんですか?
188 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:38:00.47 ] numのアドレスでした 事故解決しました
189 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 13:14:39.78 ] >何をするのか知らなくてもいいようにそういう関数になってるんだけど プロセス中で複数回呼ぶのはNGで、 プロセスが終了したら開放されるのであれば、 「WSACleanup()」しなくてもいいってことにならないのでしょうか? もうひとつお願いします。 ソケットが使える常態かそうではないかはどのように確認できますか? WSARecv()などで受信してみないとわからないでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 07:15:28.99 ] STLのstd::mapをprivateメンバとしてもつクラスをDLLの内部に持って、そのクラスをエクスポートすると、 Visual C++では、警告:C4251 が示されます。 privateとして利用している場合は、OKなのでしょうか、NGなのでしょうか。 インタフェースとして利用している場合は、std::mapの実装が異なる可能性があるのでNGというのは、なんとなくわかるのですが、 内部で利用するだけであれば問題がある理由がわからないです。 inlineを利用してアクセスするのがNGというのも良くわからないです。 この件では、ヘッダの内容を全てcpp側にコピーしても同じ警告が出ます。どうしてなのでしょうか? コンパイラがインタフェースに利用されているか判断するのが困難だからでしょうか? 「class 'std::map<_Kty,_Ty>' は __export キーワードを使って class 'info::driver::InetPromiscuousDriver' にエクスポートしてください。」 とは、どこの何に対して、__exportを追記するとエクスポートできるのでしょうか? エスパー出来れば、この辺りについて教えてください。
191 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 08:48:18.60 ] cat test.cpp | indent で奇麗に整形されたソースになると思ったら とんでもない壊れたものしか出力されない 何かオプションでもいるの?
192 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/24(土) 10:22:48.99 ] >>191 www.6809.net/tenk/html/lib/doc/astyle_j.htm
193 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 17:43:03.67 ] >>190 private メンバもクラスのサイズに影響する。 inline でアクセスしてたらDLL内外で実装の異なる map アクセスが展開される可能性がある。
194 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 22:55:08.76 ] int を全部doubleにおきかえたら不具合おきることなんてあるんだろうか めんどくさくなってきたから全部doubleにしてしまいたい
195 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 23:10:57.90 ] >>194 >1/2*2 0 >1.0/2.0*2.0 1.000000
196 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 23:20:24.96 ] >>194 >めんどくさくなってきたから全部doubleにしてしまいたい すれば? 余計面倒なことになると思うが。
197 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:38:18.53 ] インデックスがdoubleとかどこのうちの会社のソースだよ
198 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:39:23.25 ] Luaではよくある事
199 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:44:23.33 ] doubleででるかどうかはプログラム次第。 []を小数点切り捨てとすると [a/n + b/n] [a/n] + [b/n] は異なる。
200 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:54:18.15 ] >>199 世も末だなw
201 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 02:57:13.99 ] >>194 double i; for(i=0;i<1;i+=0.01)printf("%f ",i); と int i; for(i=0;i<100;i++)printf("%f ",(double)i/100.0); とは違うことがある。
202 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 03:48:17.30 ] 実数をループカウンタにすんなよ
203 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 13:54:45.42 ] intをdoubleに置き換えたので仕方がないです 実数でループできるように言語仕様を変えるべきでは?
204 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:00:55.12 ] 実数でループできるが、計算の誤差が問題。
205 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:06:30.24 ] 2進数で表記出来ないような数値を繰り返しで足し算したりするとどんどん誤差が増えるんだっけ
206 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:24:16.46 ] ループが一回多かったり少なくなったりする。 マシーンで計算精度が異なる。 整数型であればズレが出ない。
207 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 15:16:35.68 ] 他の学問ならまだしもプログラミングって基本的に質問に向いてないよね
208 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 18:36:46.52 ] 仕様上は数値である必要すらないけどな。
209 名前: ◆QZaw55cn4c mailto:sage [2011/12/25(日) 22:10:03.45 ] >>207 コード・ソースを晒せば早いかもしれませんが、はじめのうちはなかなか勇気がでないかもしれません。
210 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:20:09.77 ] >>209 糞コードを晒す厚顔無恥さは勇気とは言わないけどな
211 名前: ◆QZaw55cn4c mailto:sage [2011/12/25(日) 23:23:41.70 ] >>210 具体的に
212 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:39:55.69 ] 自分で気付けない時点ですでに┐(´д`)┌ヤレヤレ
213 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:44:05.64 ] 糞コードと馬鹿にするだけのカスは要らないのでスレから立ち去りなさい 糞コードを改善する答えやヒントを人に与えることができる人間以外は必要ありません
214 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:56:37.99 ] >>213 はQがコテを外して書いた糞レス
215 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 22:56:39.86 ] 7BITとか31BITみたいな中途半端な整数型って作れますか?
216 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 00:10:20.44 ] >>215 intと暗黙で相互変換可能なクラスを作ればそれですむ。 厳密な意味での整数型が作りたければコンパイラに手を入れる必要がある。
217 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 00:59:27.39 ] ビットフィールド
218 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 11:09:05.80 ] 広いビット幅があれば制限すれば良い。 少ないビット幅しか使えないなら配列で多倍長数を表現する。 ハードウェアの対応でないから演算速度は落ちる。
219 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 14:44:51.44 ] // Hogeのインスタンスをたくさん作成 vector<auto_ptr<Hoge> > hoge_pointers(num, NULL); for (int i = 0; i < num; i++) { hoge_pointers[i].reset(new Hoge); } // pushするループで例外を投げたくないから、先行してhoge_userの内部にメモリを確保する hoge_user.reserve(hoge_pointers.size()); // pushされた時点からポインタはhoge_userが管理する for (int i = 0; i < num; i++) { hoge_user.push(hoge_pointers[i].release()); } こんな感じで、hoge_userの外でHogeインスタンスをたくさん作成してから hoge_userにポインタを渡したいんですが、どういう風にすればいいでしょうか 例外が起こった場合には、hoge_pointersがすべて解放されて、 hoge_userにpushされたポインタはすべてなかったことにしたいです で、スマポを使おうと思ったのですが、auto_ptrはSTLのvectorに突っ込めなくて、 boost::shared_ptrはポインタを取り出すことができないのでやめました try/catch 使えって話ですが、なにか他にいい解決策はありますか?
220 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:20:55.13 ] >>219 コンテナにauto_ptrを入れる行為はCOAPと呼ばれ厳禁 Effective STLを読め
221 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:25:10.76 ] その目的だとtry/catchで書くのが一番シンプルで楽だと思うよ vector<Hoge *> v; try { v.reserve(N); for(int i(0); i != N; ++i) { v.push_back(new Hoge); } } catch(...) { int n(v.size()); for(int i(0); i != n; ++i) { delete v[i] ; } throw ; } どうしてもtry/catchが嫌ならcatchブロックの部分をデストラクタで実行するクラスを作ってvのアドレスをもたせればいい
222 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:59:34.02 ] アドバイスありがとうございます 意地でもtry/catchを使いたくないので、そちらのコードを参考にしてクラスを自作したいと思います
223 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 18:41:37.49 ] 構造体内で確保したリソースを削除するには? public ref struct A { array<int> a; A() { a = gcnew array<int>(10); } ~A(){ delete a; } }; A^ s = gcnew A(); delete s; で~A()が呼び出されて内部のリソースも削除される?
224 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 19:09:14.58 ] >>223 節子それC++やない、C++/CLIや
225 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 19:32:32.67 ] あ、ここc++/cliの質問は禁止? すいません
226 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:00:27.48 ] 別の言語だしな。C#の質問をするのと大して変わらんw とりあえずスレ一覧をCLIで検索してみれ。
227 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 00:12:20.49 ] 機種依存OKって事になってますので、こちらで質問させてもらいます。 プリミティブ型の値をvectorに大量に一括設定する際、vector::assign以上に高速に 設定する方法はないでしょうか? VC++2010を使っています。
228 名前:227 mailto:sage [2011/12/28(水) 00:24:38.84 ] すみません、もう1点。 vector等のSTLのコンテナを含む静的ライブラリ(型を限定してコンパイルした上で提供)を作成しているのですが、 Debug版の遅さに我慢できません(VC++2010)。 ライブラリのリリースでは内部実装がDebug版である必要はないため、 Debugビルド向けにもReleaseでビルドして提供したいと考えています。 しかし、イテレータデバッグレベルがどうのこうのっていうエラーが発生してしまいます。 なんとか回避する方法はないでしょうか?
229 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 01:30:39.39 ] >>227 たぶん無いね。あっても大差無いだろう。 >>228 _SECURE_SCL の設定で片付くんじゃないの? msdn.microsoft.com/ja-jp/library/aa985965.aspx あと、エラーメッセージは正確にね。
230 名前:227 mailto:sage [2011/12/28(水) 03:28:57.27 ] >>229 ありがとうございます。 _SECURE_SCLについてはやってみましたが、プロジェクト全体で同じ値に設定しないとダメなようです。 Debugのプロジェクトは 利用者側 ... デバッグ作業がしたいので_SECURE_SCL=1にしたい ライブラリ側 ... デバッグは済んでいて高速に処理したいので_SECURE_SCL=0にしたい としたいのですが、下のLNK2038と同じエラーになってしいます。 > あと、エラーメッセージは正確にね。 申し訳ありません。 手元に環境がないため、ググッた結果になりますが、 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。 だと思います。 自前のクラスを作って置き換えるか、より高速なSTLの実装があれば、それを使うというのもありなのかもしれませんが…。
231 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 09:16:58.00 ] リンク先を読んだならchecked_***はためしたんだろうか
232 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 10:50:07.41 ] デバッグ用はおそくていい。 速くしたければリリース使う。
233 名前:227 mailto:sage [2011/12/28(水) 21:10:53.96 ] >>231 227に関しては早くなるかもしれませんね。 でも、今はなくなってしまったようです。 VC++2008のalgorithm msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.90%29.aspx VC++2010のalgorithm msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.100%29.aspx make_checked_iteratorは残っていますが、これを使ってstd::copyしても、内部で _DEBUG_RANGE _DEBUG_POINTER が呼ばれた後、ようやくコピー処理が走るようになってるようです。 >>232 それが、我慢出来ないくらい遅いんですよ。 ソースコードデバッグを開始すると数分反応が帰って来ませんし。
234 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:15:11.47 ] []じゃなくてatを使っているとか そういうのじゃないよね?
235 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:27:54.73 ] とりあえずreserve()してからだとどうなるか知りたいね
236 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:29:53.57 ] >>234 SECURE_SCLのせいでatも[]も変わらなくなってるよ 最初に気がついたときは怒りで発狂するかと思ったw ありなしでDLLまたげないしね ほんと面倒だわ >>233 うちもけっこうでかいプログラム作ってるけどSECUrE_SCLをOFFにしてDebug版は素直に使ってる ただ、デバッグ実行じゃなくてexeを直に叩いて立ち上げてからアタッチしたほうが 結構速い気がするのでそっちを使ってる
237 名前:227 mailto:sage [2011/12/28(水) 21:30:32.33 ] >>234 atは使ってませんね。[]です。
238 名前:227 mailto:sage [2011/12/28(水) 21:45:42.75 ] >>235 reserveして設定も試しています。 []で設定する他、生ポインタに変換して設定したり、OpenMPを使ってみたりしてみましたが…、 assignの方が早かったです。 どうも、reserveも要素ごとに配置newが発生したり、_DEBUG_RANGEなどが走ったりしているようで、 値の設定分、遅くなってしまうようです。 >>236 立ち上がってアタッチってのはたしかに有用かもしれませんね。 ありがとうございます。
239 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:52:35.70 ] どんな操作なのかソース出したほうがいいんじゃないかと思う
240 名前:227 mailto:sage [2011/12/28(水) 23:13:13.60 ] >>239 ソースは手元に無いので、覚えている範囲で似たようなコードを書きました。 あと、うちにあるのはExpressなので、OpenMPが動くかどうかは不明です。 codepad.org/kqZndGzg ちなみに >>238 はreserveではなくて、resizeでした。 申し訳ありません。 reserveも試してはいますが、assignの方が早かったと思います。
241 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 01:07:24.97 ] forじゃなくてfor_eachを使うと少しはましになるかもしれないなあとか この際だからmemcpyでいいんじゃねというくらいしかまともな方法は思いつかない boost::container::vectorとか使って望む結果になるかどうかも試したことないからわからないな
242 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 04:03:07.90 ] void function (char *arg); という関数に渡された引数が &hoge[1]だった場合、 関数の中ではhoge[0]はarg[-1]という表現でいいんですか?
243 名前:227 mailto:sage [2011/12/29(木) 06:52:19.95 ] >>241 へえ、boostにもvectorがあるんですね。 これは、試してみたいですね。 ありがとうございます。
244 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:20:41.31 ] boostには変なコンテナがたくさんあるよ Header <boost/container/container_fwd.hpp> Header <boost/container/deque.hpp> Header <boost/container/flat_map.hpp> Header <boost/container/flat_set.hpp> Header <boost/container/list.hpp> Header <boost/container/map.hpp> Header <boost/container/set.hpp> Header <boost/container/slist.hpp> Header <boost/container/stable_vector.hpp> Header <boost/container/string.hpp> Header <boost/container/vector.hpp> ひと通りどんな内容なのか目を通しておくとよい boostは今や膨大な内容になっていてとても全部目を通すのは不可能に 近くなってきたから興味のある所だけでも見ておこう
245 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:29:02.28 ] boostはいらん。 これ使うやつはアホウだ。
246 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:31:19.60 ] timerとか正規表現とかスマートポインタあたりで使うやつがいるが。 有名なライブラリがあったりtimerなど3行程度で自作できるだろ。 バージョン違いで動作が変わる可能性あるし、インクルードするやつはアホウ。
247 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:37:09.53 ] バイナリの配布で中身にboost使うなら良い。boostのバージョンに依存しないからな。 ソースコードを張ったり公開するところでboostはダメだな。
248 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 11:24:02.76 ] 0xが普及したらboostとか要らなくなる
249 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 13:11:43.53 ] スマートポインタなんて使う必要ないと思うんだが。 STLを使っとけばスコープ外れたら自動で解放するだろ。 どうやってnewの使用が回避出来なかったら手動で開放しろよ。 もしくはデストラクタに組み込めよ。そしたらいらん。
250 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 13:59:55.29 ] >>245-246 はアホウ 使ってもみないでただ批判ばかりしてる
251 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:33:10.27 ] >>249 >デストラクタに組み込めよ これを毎回書くのがだるいからスマポ使うんだろ
252 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:33:12.78 ] つかってみて言ってるんだ。 boostが優れている所なんてないだろ。 使う意味なし。
253 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:37:06.06 ] 釣りにしても露骨すぎる 真性なのだろうか
254 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:46:40.93 ] そうだな 標準の std::unique_ptr と std::shared_ptr で十分だよな
255 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:51:34.14 ] それもいらないが。速度低下するし。 スマートポイント使うんだったら、C#とかPHPとかBASICとか自動で開放するやつつかえよ。
256 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 15:03:08.22 ] 一理ある パフォーマンス犠牲にして楽したいなら他の言語だよな
257 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 15:08:46.98 ] 649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be: 学生プログラマ日本一決定戦(予選は社会人も参加可) ttp://codevs.jp/howto.html 現在予選開催中 応募締切 2012.1.6 12:00 おもしろいことやっているじゃん。誰か今から参加しろよ。
258 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 16:04:27.15 ] >>255 unique_ptr は速度低下しないだろ。
259 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 16:08:33.62 ] ユニポはクールだよねぇ 右辺値最高やわ
260 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 18:39:50.46 ] >>258 C++スレで他言語持ち出すバカなんだから察してあげなよ
261 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:29:53.46 ] 境界チェックつきの配列を使いたく、オリジナルで detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1111063861 の回答のようなクラスを作ろうと思うのですが、 このクラスで作る配列を静的に初期化したいのですが、できますか? static int hoge[] = {0,2,4,5,};みたいな感じで扱いたいです。
262 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:45:38.95 ] boost::array使えば?
263 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:49:28.42 ] template <class T, unsigned int N> struct Array { T elements[N]; // コンストラクタデストラクタは書かない T & operator [] (unsigned int n) { if(n < N) return elements[n] else throw out_of_range("out_of_range"); } // 以下略 } ; たぶんこれでいけると思うよ
264 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 00:15:22.35 ] boostは使えませんので、類似のものを作るか・・・ >>263 operator[]はメンバー関数である必要があります っていわれました。 環境は、VC2010です
265 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:09:07.12 ] すいません。そのままでコンパイルできました。 size N を明示的に書かなくても使えますか?
266 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:42:55.10 ] 無理 でもVC10なら自分で書かずともstd::arrayで範囲チェックできるだろ
267 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:58:25.77 ] 平松サイド vs 橋下サイド 民主党 大阪市民 自民党 ν速民 共産党 財界 関西電力 連合 自治労 日教組 公務員 毎日新聞 MBS 解同 極左 大阪の敵が濃縮されてわかりやすくなったな
268 名前:265 [2011/12/30(金) 12:04:10.90 ] サイズを省略するのはあきらめます。 template <class T, unsigned int N> struct Array { T elements[N]; // コンストラクタデストラクタは書かない T & operator [] (unsigned int n) { if(n < N) return elements[n] else throw out_of_range("out_of_range"); } // 以下略 } ; int main() { Array<int,5> test = {1,2,3,4,5}; } みたいにすると、 コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください といわれコンパイル通らないのはなぜでしょうか?
269 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:16:50.18 ] MSVC2010 / C++ □使用可能なライブラリ stl / boost / zlib / ライセンスがうるさくないものであればその他もOK □やりたいこと zipファイルの中身(主にファイル名)を列挙したいです。 その時に、なるべくwchar_tベースでの書庫ファイル指定や、ファイル名取得をしたいです。 zlib + minizip だと、char文字列でのやり取りしかできないように思います。 □質問 どんなライブラリをどういう感じで使うと実現できますでしょうか。 よろしくお願いいたします。
270 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:23:41.34 ] charで格納された物は、ユニコードにならないんだよ。 ユニコードで格納された物はユニコードで取り出せる。 取り出しかたの問題ではないから工夫しても無理。
271 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:28:04.94 ] shift+JISの方が好き
272 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:03:50.87 ] EUCやSJISで格納された名前をwhar_tに変換して格納すれば良い。 zip読み取りルーチンとは関係なし。 UTF-16LEで格納されていればそのまま格納すれば良い。 格納時のエンコードの問題。
273 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:13:05.57 ] VC++であるクラスを継承してメンバ変数を追加し=operatorをオーバーロードした時に 基底クラスのメンバーをコピーするのはどうやって記述すればいいんでしょうか? class NewClass : public OldClass { public int mNewMenber; ... NewClass operator=(NewClass &nc){ /* 基底クラスのメンバーをコピー */ ???????????????? mNewMember = nc.mNewMember; return *this; }
274 名前:273 mailto:sage [2011/12/30(金) 13:15:57.84 ] ああ、基底クラスにも自身の=operatorが定義してあります。
275 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:27:13.08 ] NewClass & NewClass::operator = (NewClass const & other) { OldClass::operator = (other); mNewMember = other.mNewMember; return *this; }
276 名前:デフォルトの名無しさん [2011/12/30(金) 13:41:19.18 ] Visual C++ 2010 EEです。 std::swapのclass Cスペシャルを適用したまま、このエラーを消す方法はありますか? template< typename A0, typename A1, typename A2 > class C; // std::swapのclass Cスペシャル。※実際はもっと細かく特殊化をしているのでこの形式は崩せません。 namespace std{ template< typename A0, typename A1, typename A2 > void swap ( C< A0, A1, A2 >& v0, C< A0, A1, A2 >& v1 ){ 略 } };// namespace std void func(){ typedef C< int, int, int > C_t; std::vector< C_t > x; std::vector< C_t > y( x.begin(), x.end() ); // error C2668: 'std::swap' : オーバーロード関数の呼び出しを解決することができません。 };
277 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:15:17.84 ] >>268 > みたいにすると、 > コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください > > といわれコンパイル通らないのはなぜでしょうか? 初期化子の書き方。 テンプレートを使っててもユーザー定義のコンストラクタをもたないクラスの初期化のやり方はかわらない。 struct S1 { int a, b, c; }; struct S2 { int a, b[3], c; }; struct S3 { int a[3]; }; int main() { S1 s1 = {1, 2, 3}; S2 s2 = {1, {2, 3, 4}, 5}; S3 s3 = {{1, 2, 3}}; return 0; }
278 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:23:28.26 ] 下のwhile文でbool_isがfalseなら以下行を読まずにwhileの先頭に戻りたいのですが、 簡単な方法はありませんか? ifで括るとかだとちょっと長いんで・・・ while(i<max) { bool bool_is =hogehoge(); if(!bool) { i++; 以下の行を読まずにwhileの先頭に戻りたい。 } etcetra.... i++; }
279 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:26:08.90 ] continue
280 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:41:22.84 ] >>277 なるほど。では実際にこの配列を初期化して使うにはどうしたらよいのでしょう?
281 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:13:29.19 ] >>280 新しめのコンパイラを使うといい g++なら-std=c++0x
282 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:25:39.65 ] >>280 ヒント >>268 でテンプレートArrayはArray<int,5>で struct Array<int,5> { int elements[5]; // コンストラクタデストラクタは書かない int & operator [] (unsigned int n) { if(n < 5) return elements[n] else throw out_of_range("out_of_range"); } // 以下略 }; というクラスを定義する。メンバ関数を無視してみると…。 struct Array<int,5> { int elements[5]; };
283 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:28:06.42 ] >>276 class Cスペシャルのswapをstdでなくclass Cと同じ名前空間(だけ)に置く。
284 名前:281 mailto:sage [2011/12/30(金) 16:18:11.57 ] >>280 すまん、よく読んだらバージョン関係ないな >if(n < N) return elements[n] else throw out_of_range("out_of_range"); if(n < N) return elements[n]; else throw out_of_range("out_of_range"); セミコロンが抜けてるだけかと。
285 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 16:59:46.80 ] openglで戦車のアニメーションを作っています 動きは前進、後退、その場での方向転換をキー操作で行いたいです 戦車自体が方向転換しても次に前進しようとした時に、ワールド座標系のX軸の向きに進むため 戦車が横滑りしてる感じになってしまいます うまく移動→方向転換→移動をを実現するにはどうしたらいいでしょうか
286 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:07:56.55 ] 実物の戦車は横滑りするよ
287 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:08:15.37 ] 3Dプログラムできるのに方向転換すらできないとは。
288 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:10:33.85 ] 戦車ローカル座標でみた前方への移動ベクトルをワード座標に直すんだよ
289 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:12:28.23 ] 向いてる向きから進む距離を割り出せよ。北へ進むのがY+1で、北西ならX-1/√2 Y+1/√2 とかだろ。 cosθ、sinθであらわせるはずだろ。
290 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:16:10.66 ] openglが扱えてここに書き込む時間があれば自己解決すると思うんだが。 難解な物理法則や、戦車特有の挙動などが関与してるのか?
291 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:22:54.86 ] >>288 ,289 あー、戦車のローカル座標のX軸に進めることしか考えてなかったです 現在の向きから計算してやればいいのか ありがとうございます、やってみます
292 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 18:39:35.50 ] >>285 です やっぱりわかりません glTranslatef(go*cos(Turn * PI / 180.0), 0.0,-go*sin(Turn * PI / 180.0) );// 平行移動 glRotatef( turn, 0, 1, 0 ); // Y軸回転 turnは回転の角度、goは前進した距離、Turnはgoが更新されたときに現在の回転の角度が入ります 原点から 方向転回→前進→方向転換 までできるんですけど その後前進しようとすると、再び原点から方向転換した方向へ進み始めてしまいます 現在の位置を考慮しないといけないと思うのですが、うまく実装できません…
293 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:05:03.70 ] >>292 戦車のモデルが +z を向いていて、Y軸回転がθだとすると、 戦車の方向ベクトルは(sinθ, 0, cosθ)となり 方向ベクトル*速度 * 経過時間 = 移動ベクトル 別な考え方では 戦車の向きベクトル = 戦車のワールド行列 * ベクトル(0, 0, 1) あとは同様 戦車の位置+移動ベクトル=新しい位置
294 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:31:07.28 ] 朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。 捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。 Domain Information: [ドメイン情報] a. [ドメイン名] ASAHI-NP.CO.JP e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ f. [組織名] 株式会社 朝日新聞社 −「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」− これはおそらく週刊誌さえ書けない。 「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ 09.3
295 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 20:16:30.63 ] >>285 戦車の頭のある位置 - 戦車の中心 = 戦車を中心を0とした時の方位ベクトル 方位ベクトルを正規化して x+y+z=1.0になるようにする 何故なら最大推力が1.0だから そしたら今度は移動速度をそのベクトルに掛けて 戦車の中心座標に結果を加算する
296 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 21:36:15.20 ] てんさいです 【東京都渋谷区】 12/31(土) 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ! 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ! 12時00分 渋谷駅ハチ公前広場 「街頭演説」(〜13時30分) 13時30分 移動 14時00分 渋谷公会堂前 「街頭演説」(〜14時45分) 15時00分 代々木公園・NHK横「イベント広場」 「年忘れしてはならない!紅白桜祭」 抗議集会・コンサート・炊き出し等々 盛りだくさんでお送りします!(〜21時00分)
297 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:25:43.79 ] 初歩的かもしれませんが 入力文字列const char* inputを文字コードの文字列として格納したいのですが unsigned int len = strlen(input); char* str = (char*)malloc(2*len + 1); if(str){ for(unsigned int c = 0 ; c < len ; c++){ sprintf_s(&str[2*c],2,"%x",(char)input[c]); } str[2*len] = 0; } このようなコードだとsprintf_s関数でバッファが足りないと言われてしまいます charを16進数で表示すると2Byteになると思うのですがなにか思い違いをしてるのでしょうか
298 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:31:16.40 ] はい
299 名前:297 mailto:sage [2011/12/30(金) 23:34:57.26 ] 書き込んだ後に解決する法則 ヌル文字も数えろとのことですか、ぐぬぬ
300 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:51:08.09 ] %02x
301 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:53:11.73 ] %x も %02x も int になっちゃうから 引数キャスト (char) してもだめ
302 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:10:22.70 ] >>283 それも試しましたが、やはり名前の衝突は避けられず・・ 結局自前のswapの名前を変えることで対応しました なんかC++の限界を感じた・・どうもありがとうございました
303 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:26:47.11 ] まあ自分の限界を知るのは悪いことじゃないよ
304 名前:297 mailto:sage [2011/12/31(土) 00:31:45.74 ] もしかして>>297 のコードはinput[c]をunsigned charにキャストしないとマイナスの値に対してエラーになる? とかなんとなく思った
305 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:54:14.97 ] 正解おぬでとう
306 名前:297 mailto:sage [2011/12/31(土) 00:57:19.48 ] やったね! エラーが出なくなった時、人は優しくなれる
307 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 09:25:35.25 ] >302 これで VC++10 でコンパイル通るよ。っちゅうか std に置いたままでも通ってる。 まずはエラーが起こる最小コードから確認してみれば? #include <vector> namespace mine { template<typename A0, typename A1, typename A2> class C {}; template<typename A0, typename A1, typename A2> void swap(C<A0,A1,A2> &c1, C<A0,A1,A2> &c2) {} } int main(void) { typedef mine::C<int, int, int> C_t; std::vector<C_t> x; std::vector<C_t> y(x.begin(), x.end()); return 0; }
308 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 17:24:15.70 ] cp2.uh-oh.jp/read_img/index/ab83e09400ff17d99f45ceee15a37e09.jpg cp2.uh-oh.jp/read_img/index/a58c2ddc9cdbe45529ef0d58c95cc232.jpg テレビに騙されるな(自称街の人-台本読んでるだけの業者)
309 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:44:43.53 ] class Hoge { public: int *count; }; Hoge hoge =new Hoge[x]; こういう配列を作るとxの値によっては作った瞬間にエラーになってしまう場合があるのは何故ですか? 回避策はありませんか?
310 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:45:47.14 ] Hoge *hoge =new Hoge[x]; の書き間違いです。
311 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:56:43.17 ] > エラーになってしまう なんで、エラーの内容を書こうと思わないんだろう… お前がバカだからという回答でも期待してるのか?
312 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:57:28.18 ] try { Hoge *hoge = new Hoge[x]; } catch (std::bad_alloc &e) { std::cerr << e.what() << std::endl; }
313 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 04:22:28.69 ] 馬鹿には無理
314 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 10:47:15.57 ] K-POPの真実 89 名前:名無しさん@12周年[sage] 投稿日:2011/12/27(火) 18:42:50.71 ID:oPBf/MSP0 12月23日、東京国際フォーラムホールAで大国男児、X−5 、C-REAL、チェ・スジョンらが出演した『K-POP LIVE for X'mas 2011』が開催された。 しかし、ふたを開けてみれば2階はすべてクローズド、1階も後列は空席だらけと、さんざんな結果に終わった。 news.infoseek.co.jp/article/cyzowoman_27Dec2011_17759 ↓ ↓ ↓ 395 名前:山師さん@トレード中[] 投稿日:2011/12/27(火) 15:21:13.95 ID:E5FNgBRR0 K-POP LIVE for X'mas 2011 公演日:2011年12月23日(金) 会場:東京国際フォーラムホールA(収容人数5000人) 出演:大国男児 / X−5 / C-REAL / Yoonji 開演前 cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221655.jpg cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221654.jpg 開演中 cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224222054.jpg 補助金が尽きてガラガーラ テレビは捏造演出装置
315 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:06:09.92 ] std::unique_ptrの使い方を勉強してるのですが、単純にauto_ptrから書き換えていて躓きました。 引数として渡すときはわざわざ呼び出し側で f(std::move(p)) とするのが普通なのでしょうか? それとも、 void f(std::unique_ptr<Hoge>& p) { std::unique_ptr<Hoge> p_ = std::move(p); } とした方がいいのでしょうか? この場合はどっちでもいいような気がするのですが、p_をクラスのメンバとするときに 呼び出し側にstd::moveを意識させた方がいいのかそれは冗長なのか教えてください。
316 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:10:02.98 ] pの所有権が誰にあるかによるだろ
317 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:20:56.43 ] もちろん、呼び出された側にあります。 想定しているのは、 class Hage { public: std::unique_ptr<Hoge> p_; Hage(std::unique_ptr<Hoge> p) : p_(std::move(p)) { } }; class Mage public: std::unique_ptr<Hoge> p_; Mage(std::unique_ptr<Hoge>& p) : p_(std::move(p)) { } }; new Hage(std::move(p1)); new Mage(p2); HageとMageどちらがいいのかなと思いまして。 auto_ptrの使い方を踏襲するのなら、Mageですが呼び出し側に移譲を意識させるのならHageの方が いいような気もしています。
318 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:24:27.04 ] class Hage { public: std::unique_ptr<Hoge> p_; Hage(std::unique_ptr<Hoge>&& p) : p_(std::move(p)) { } }; 所有権を移動させるなら 俺ならこうする
319 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:44:57.90 ] まあ普通に考えたらそれしかない
320 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 03:12:05.20 ] Hage(std::unique_ptr<Hoge>& p) : p_(p.release()) { } auto_ptrを踏襲するならこれでもいいだろうが どちらにしろ>>317 はないな
321 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 17:15:58.39 ] みんな健康でいいね。
322 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:30:28.40 ] hoge.h内 extern int hoge[]; hoge.cpp内 int hoge[] = {0,1,2,3,4}; として、 main.cpp内で int size = sizeof(hoge)/sizeof(hoge[0]);として配列の要素数を求めたいのですが、 これが使えません。 初期時に要素数を指定しないのはそのままにmain.cppで配列の要素数を求める方法を 教えてください、
323 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:32:39.73 ] 無理です
324 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:36:00.92 ] 無理なのですかあ。残念
325 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:39:55.69 ] sizeof(hoge)/sizeof(int)
326 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:51:40.59 ] それコンパイルとおらんやろ
327 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:04:17.85 ] >>325 要素数求めるなら、分母はhoge[0]の方がよくね?
328 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:06:51.78 ] PS2のゲームなのにPS1並のグラだろ 察しろよ
329 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 18:12:10.00 ] >>322 // hoge.h extern int const yousosuu; // hoge.cpp extern int const yousosuu = sizeof(...
330 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 23:54:07.38 ] DXライブラリ(DirectX)やGLUT(OpenGL)って、グローバルな環境変数的な何かを使っているからか、 ウィンドウを一つしか用意できない「っぽい」んですよね。 今回の例に限らず(というかこの例はイケてないかな)、 『グローバル変数を利用するスレッドセーフではない』ライブラリを、 複数箇所から安全に利用する方法として、 使いたい人がサンドボックス的な他に影響を及ぼさない場所を用意して、 その中にライブラリを展開して、 サンドボックス名.普通の使い方、とか、サンドボックス名::普通の使い方、みたいなことって出来ませんか? 今現在あるネーム空間を無理やり他のネーム空間に突っ込む、ということが出来れば解決なのですけど。 接頭を付加できるって聞いたことないし、試してみてもうまくいかないっぽい。 言いたいことを書けているかな…。日本語が不自由で申し訳ない。
331 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:11:48.57 ] ttp://toro.2ch.net/test/read.cgi/tech/1324704285/381 Javaスレでも質問したのですけど、↑についてお願いできますか? C++の場合はどうなのでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:41:57.09 ] Objectの実装にもよるし コンパイラにもよる
333 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 09:04:05.51 ] >>330 ライブラリをDLLでビルドして適当なnamespace内の関数ポインタに各種関数をロード
334 名前:331 mailto:sage [2012/01/05(木) 13:12:32.62 ] >>332 ありがとうございます。 もう一件、Javaも知っている方とかに聞きたいのですけど、 C++の名前空間とJavaのパッケージとの違いですが、 ・名前空間には直接変数を宣言できる ・protectedについて、Javaは同一パッケージでpublic、C++は同一名前空間でも継承が無いとprivate みたいな感じで、ほとんど同じと考えていいのでしょうか? C++もJavaもあまりわかってないのですが…。
335 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 15:10:56.67 ] >>331 Javaの場合は同じなんじゃないの。 C++はデストラクタの挙動がちがってくると思うけど。
336 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 06:45:15.80 ] >>331 javac 1.6.0_26 で確認したら全く同じになった C++の方も一応説明すると Object hoge; 引数無しのコンストラクタ呼び出し hoge = ...; 代入演算子の呼び出し Object hoge = ...; ... を引数としたコンストラクタ呼び出し になるから、実装による
337 名前:デフォルトの名無しさん [2012/01/07(土) 17:37:13.94 ] C/C++を一通り勉強してそれなりのWindowsの アプリも作成できるようになり、今はC#で色々 作ったりしてるんですが、あらためて疑問に思うのは C++のstd::endlってどういう利便性があるのでしょうか? いっつも、"\n"で終わらしてたんですが end lineの略なんだろうけど、いまだにわかりません。 教えてください。
338 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:11:55.44 ] 一応出力バッファのフラッシュも兼ねる が、たいていの環境は行バッファリングなんで改行すればフラッシュされるので違いが見えなくなる
339 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:51:12.89 ] B* b = new C(); 最近Javaを学んでいたので、ついうっかり↑の書き方をしたら特に問題なく動きました。 C++的にこの書き方はありでOKですか? B* b = new C;って書くのが筋で、止めた方がいいとかあります?むしろ()付がいい? 過去に、C c()って書くと関数の宣言にされるのを知らずに凄く悩んで、引数なしの場合は()をつけないものと思ってたのですが。 new C と書こうが、new C() と書こうが、Cの文法には触れないのでどっちでもいいのかな。 むしろ、C c()が無理なのは、Cを引きずってるからなのかな。 日本語に出来てるか心配ですが、エスパーしてもらってもいいですか?
340 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:54:16.61 ] ふつうnewを使わないんじゃ。。
341 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:56:29.29 ] どっちでも同じ
342 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:57:08.47 ] しかもアスタつけないでそ
343 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:04:28.62 ] =を使うな B * p(new B()); と書くのが唯一の正解だ
344 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:05:18.80 ] >>343 どっちでも一緒じゃん
345 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:18:02.66 ] 違う
346 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:21:11.18 ] >>343 はいちいち全部 int a(1);とか書いてるのか バカなやつだ
347 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:30:30.13 ] >>346 普通そう書くよ hoge h(aaa); int i = 999; こういうふうに混在してたら見た目悪いだろ
348 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:22:31.10 ] じゃあ、あったまいいお前らにきく Hogeクラスのオブジェクトkusohogeを初期化値1で生成するとき、 Hoge kusohoge(1); 以外に書き方があるのか?
349 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:25:00.24 ] Hoge kusohoge{1};
350 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:26:53.08 ] Hoge hoge; hoge.Init(1);
351 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:36:05.61 ] 意外にあるんだな。。 >>349 言語使用上、(と{が区別なく使えるってことか? それとも、 Hoge kusohoge(1); Hoge kusohoge{1}; は、言語仕様上も違い意味になるのだが、この場合に限っては 結果が同じになるという意味? >>350 たしかに、これはあるな むしろ、順当な書き方と言えるな オブジェクト変数名に、あたかも関数のように()が つく表記の方が、はじめ見たときは違和感を感じた
352 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:15:38.73 ] >>348 Hoge hoge = 1;
353 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:17:58.59 ] >>337 CRLF、Multibyte-charの緩衝とか
354 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:22:40.91 ] CRLFは関係なくないか
355 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:26:51.23 ] endlはついでにフラッシュすんだよ
356 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:27:58.95 ] crc32を計算したいのですが、ネット上に落ちているコードを比べてみても、 2パターンあるみたいで、どれが正しいのか分かりません。 データ: "a" (1バイト boostとか、あとは動的にテーブルを生成しているタイプのコード (テーブルは 0x00000000, 0x77073096, で始まるようです) crc32: 0xe8b7be43 0x00000000, 0x04C11DB7 で始まるテーブルを持つコード crc32: 0x19939b6b ttp://blog.goo.ne.jp/masaki_goo_2006/e/69c68a18c872338e8c2751d662706f46 これらは何が違うのでしょうか?
357 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:29:38.63 ] アルゴリズムスレへどうぞ
358 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 01:58:12.32 ] アルゴリズムスレ落ちたままなんだな まあwikipediaでもみればいいんじゃないか
359 名前:デフォルトの名無しさん [2012/01/08(日) 07:55:56.97 ] int get_int() { int i = 1; return i; } void func_int(const int* p) { int i = *p; std::cout << "i: " << i << std::endl; } void main() { func_int( &get_int() ); // error C2102: '&' に左辺値がありません。 } get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが, どうやれば良いでしょうか?
360 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 07:59:49.48 ] 関数が返すのは「値」であって、「変数」を返すわけではない。
361 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:11:39.78 ] >>359 > get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが, そもそもなんでそんなことしたいのさ。 int の一時オブジェクトとやらがあるのかどうかは知らんけど、仮にあったとしても func_int( ) に 渡った時点でそのオブジェクトは消えてるかもしれないよ。 「一時」オブジェクトなんだし。
362 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:52:02.73 ] >一時オブジェクトのポインタ そんな邪悪なものは封印すべきだ
363 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:58:58.24 ] 一次オブジェクトへのポインタ(あるいは参照)は普通に使うでしょ 無理やりmoveっぽいことを書きたい時とかに使う
364 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 11:01:58.72 ] >>359 この例だと、わざわざポインタ渡しするメリットが全くない。 多分、実際のコードではもっと大きなオブジェクトを渡していて コピーのコストが心配なんだろうけど、最近のコンパイラは こんな単純なケースでいちいちコピーなんかしないから値を返しても問題ない。 これでも読んどけ。 cpp-next.com/archive/2009/08/want-speed-pass-by-value/
365 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 11:05:52.26 ] >>363 >無理やりmoveっぽいことを書きたい そんなことはコンパイラが勝手にやる。
366 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:10:12.15 ] >>363 参照とポインタを一緒にされてもなぁ
367 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:23:48.54 ] >>365 返り値に関してはコンパイラ任せでいいだろうけど それじゃテンポラリを関数の引数に渡せないじゃん hoge.swap(MakeHoge()); みたいなことをするにはコンパイラの力だけじゃできない hoge.swap(MakeHoge().GetRef()); こういうふうに明示的に参照を返さないとね
368 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:33:24.07 ] int& get_int( int i = 0 ) { i = 1; return i; }
369 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:50:41.24 ] 自動変数の参照返してどうすんだ
370 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:54:52.93 ] 一次オブジェクトのアドレスワラタ それを仮に取ったとして、直後に大抵解体されてしまうから 無意味で危険なアドレスになっちまうよな constの参照は一次オブジェクトを束縛出来るんだっけ
371 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:11:14.91 ] できる
372 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:35:58.42 ] 皆さんレスありがとうございます. すいません.質問用に単純化したので,実際には get_int() は _strtoui64() で ulonglong を返します. func_int() は自作の,set_datas() という値をclassのメンバに設定する関数で,ポインタ引数を複数持ち, NULLが設定されていない引数をメンバに設定します. //member func void set_data(const POINT* ppoint, const FILETIME* ptime, const ULONGLONG* pID) { if( ppoint ) m_point = *ppoint; if( ptime ) m_time = *ptime; if( pID ) m_point = *pID; } 例えば POINT get_point() や FILETIME get_time() のような構造体を返す場合は,一見すると問題なくできたのに, ulonglong を返す場合にエラーとなってしまったので質問させて頂きました. set_data( &get_point(), &get_time(), &_strtoui64("1",NULL, 10 ) ); この場合,get_point(), get_time() の返す一時オブジェクトは, set_data() が終了するまで生きていると考えたのですが, 認識が間違っていたでしょうか? template<typename T> inline const T* GetPtr(const T& in) { return ∈ } set_data( &get_point(), &get_time(), GetPtr( _strtoui64("1",NULL, 10 ) ) ); ↑また,先ほど思いついたのですが,この方法は問題がありますか?
373 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:51:16.73 ] 構造体を返す関数は実装上は呼び出し側で一時オブジェクトを用意してそのアドレスを関数に渡すということをやってるから そんな実装依存オブジェクトの生存期間なんか知ったこっちゃない
374 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:13:46.62 ] >>372 言語仕様上、get_point()内で確保された一時オブジェクトは、 get_point()終了時に破棄される。 現実にはメモリ内には一時オブジェクトがそのまま残っていて 利用できることがあるが、あくまで偶然。
375 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:46:47.67 ] どうしてもポインタで渡すしかないならconst参照で引っ張ってみるトカ const POINT& p = get_point(); const FILETIME& f = get_time(); const ULONGLONG& n = _strtoui64("1",NULL, 10 ); set_data( &p, &f, &n );
376 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:49:41.65 ] 変数作るなら普通に受け取れよ VC++でもgccでも警告だぞそれは
377 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 15:30:47.58 ] なんかもう、C言語で書かれた関数を無理やりC++で流用してるせいで 参照の意味で使われている(C言語の)ポインタ渡しをただただ勘違いしてるという気がしないでもない。
378 名前:359 mailto:sage [2012/01/08(日) 17:48:54.81 ] 皆さん有難う御座います. 指摘の通り const 参照の時の寿命と同じようになるものだと勘違いしていたようです. VisualC++ 2010 Express でやっていたのですが,warning level 4 にしたら &get_point(), &get_time() の部分でも warning C4238 が出るようになりました. Microsoft の独自拡張で問題なく動いたように見えたのでしょうか? >>375 さんのやり方も参考にしながら,仕様変更も含めてもう一度考えたいと思います. 今回は勉強になりました.ありがとう.
379 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 10:22:44.32 ] Visual Studio 2010 です C++では、クラスのメンバ変数に文字列の定数は宣言できない仕様、ですが 自分は、良くない仕様だと思うのですが、みなさんはどう思われますか? また。文字列の定数をクラスのメンバ変数で宣言する、裏技はありませんか?
380 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 10:36:28.86 ] const char* str;とか宣言しといてコンストラクタで : str("aaa")とかすればいいんじゃないの?
381 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 11:31:27.24 ] >>380 ありがとう。コンストラクタでは、宣言できるんですね。
382 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 11:37:15.29 ] static char const str[]; でいけるでしょ。定義はクラス外に分けないといけないけど。
383 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 12:27:22.64 ] const char * str() const {return "foo";}
384 名前:デフォルトの名無しさん [2012/01/10(火) 15:38:40.14 ] std::listで後ろの方の要素を前に持ってきたいときはどうすればいいですか? 例えばこんな感じです。 std::list<int> ls; ls.push_back(1); ls.push_back(2); ls.push_back(3); ls.push_back(4); ls.push_back(5); 先頭(1)-(2)-(3)-(4)-(5)終わり となってるところで、先頭(1)-(4)-(2)-(3)-(5)終わり、とやりたいです。 単純にリンクの張替えで出来ると思ったのですが、やり方がわかりません。
385 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 15:49:05.46 ] std::list<int>::iterator pos2 = std::find(ls.begin(), ls.end(), 2); std::list<int>::iterator pos4 = std::find(ls.begin(), ls.end(), 4); assert(pos4 != ls.end()); ls.splice(pos2, ls, pos4);
386 名前:デフォルトの名無しさん [2012/01/10(火) 15:55:28.13 ] すげえ。。 ありがとうございました。
387 名前:デフォルトの名無しさん [2012/01/10(火) 23:39:37.95 ] リンクの付け替えとはとても思えないインターフェイス これは洗練されているというべきなのか。
388 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 03:53:25.45 ] corutineの実装がいろいろあるけど (Hamigakiとか) GPUを使うOpenCVとかと混ぜたらうまく動かないってことでいいのでしょうか
389 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 06:58:34.14 ] コルーチンってC#のyield returnみたいな構文が必要じゃね
390 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:26:37.71 ] 非同期のMessageBoxを作って、タイムアウトしたら自動で閉じるなどの機能を実装しようと思っています。 自分で作ったウィンドウではなく、MessageBox関数を利用します。 そこでMessageBoxのウィンドウハンドルを取得したいのですが 1 CreateThreadで別スレッドを作成 2 別スレッドがMessageBox呼び出し 3 メインスレッドがEnumThreadWindowsで別スレッドのウィンドウを列挙 4 GetWindowTextでタイトル照合 タイトルが一致するウィンドウがなければ3に戻る 5 取得したウィンドウハンドルは、タイムアウトしたらWM_CLOSEを送るなどに使用 CreateThreadで作成されたスレッドは IMEが作ったウィンドウや、タイトルのないウィンドウが あらかじめ作られているようで タイトルによってはそれらと一致してしまうので この手段が不確実です。 ウィンドウを列挙したり、文字列を比較するというのも かなり無駄が多いです。 このような原始的な方法しか思いつかないのですが 他になにか良い方法はないでしょうか。
391 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:42:36.84 ] タイトルを比較するのではなくウィンドウクラス名を調べればいい メッセージボックスのウィンドウクラス名は #32770 になってるから1発でわかる クラス名はGetClassNameで取れる
392 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:47:09.02 ] MessageBoxTimeoutというUndocumented APIが存在するから困る
393 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:50:24.76 ] MessageBoxを使うタイムアウト付きメッセージボックスのコードはMSが公開していたりする support.microsoft.com/kb/181934
394 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 10:33:38.43 ] void *に変換したら配置されてるメモリの先頭アドレスになるって保証ある?
395 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 10:38:49.79 ] >>394 何を言っているのかわからない。 int*をvoid*に変換したとき、intの2バイト目や3バイト目じゃなく 先頭を指すアドレスが得られるのか?ということか?
396 名前:390 mailto:sage [2012/01/12(木) 12:02:26.01 ] >>391 この方法を試してみたいと思います >>392 MessageBoxTimeoutはどのような動作をするのですか? >>393 この方法では非同期が実現できなそうです
397 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:10:32.89 ] CSub* sub = new CSub; CBase* base = sub; void* p = (void*)base; としたときに sub == pになるかってことじゃね
398 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:13:01.75 ] >>396 MessageBox を非同期化するのと同じ手法が使えないの?
399 名前:390 mailto:sage [2012/01/12(木) 12:39:24.61 ] >>398 393とCreateThreadを組み合わせるということですか? とりあえず、393は制限時間が未定の場合に対応できなそうです。 例えば次のような状況です。 1 ファイルのコピーを開始 2 ユーザーがキャンセルを押す 3 キャンセルしますか? の非同期メッセージボックスを表示 4 ユーザーが押す前にコピーが終わってしまった 5 キャンセルしますか? を自動で閉じて、コピーが終了しましたと表示
400 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:51:46.50 ] >>399 タイムアウト型 (開く前に時間を決めておいて 経過時間が過ぎたら勝手に閉じる) と別イベント型 (入力操作とは別になんらかのイベントを受けて閉じる) 両方が機能できるような MessageBox が欲しいということですかい?
401 名前:390 mailto:sage [2012/01/12(木) 13:15:06.61 ] まずはメッセージボックスを閉じるclose()というようなメソッドを実装しようとしています。 タイムアウト型もイベント型もこれを呼び出すことで実装したいです。
402 名前:390 mailto:sage [2012/01/12(木) 13:38:21.79 ] >>391 この方法で、ウィンドウの判別ができました。 自分が作成したスレッドで、他にメッセージボックスがないことは確実なので 誤認することはなさそうです。 ありがとうございました。 しかし、依然としてウィンドウの列挙と文字列比較には変わりありません。 問題を整理してみます。 A 非同期でメッセージボックスを表示する →CreateThreadで作成したスレッドからMessageBoxを呼ぶ B タイムアウト、外部イベント、またはプログラム内から能動的にMessageBoxを閉じる →MessageBoxを閉じるメソッドの実装 C MessageBoxを閉じるメソッドの実装 →ハンドルを取得して、WM_CLOSEを送る D ハンドルの取得方法 →スレッドウィンドウを列挙して、クラス名を比較する Aに問題はなさそうです。 BとC自体に問題はないと思いますが、Dに無駄が多いので、 ハンドルを取得せずに、MessageBoxをメインスレッド閉じる方法があれば知りたいです。 または、Dのハンドル取得方法でもっとスマートなものがあればと思います。
403 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 14:04:01.96 ] SetWindowsHookEx(WH_CALLWNDPROCRET, CallWndRetProc, でフック仕掛けて CallWndRetProcでWM_INITDIALOGを監視する
404 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 14:50:20.44 ] Cのsscanfって、大文字小文字を無視する設定ってできないんでしたっけ? sscanf(str, "ID%d", &id"); などとするとき、"ID100"からも"Id100"からも100を取り出したいのですが。
405 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:09:48.77 ] id = atoi(&str[2]);
406 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:20:32.89 ] 条件分枝構文って if else swich しかないのでしょうか boostやstlでもっと複雑なことのできる条件分枝はないのでしょうか
407 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:25:24.11 ] どんな複雑なことがやりたいんだ
408 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:26:08.52 ] あるよ 関数のオーバーロードやtemplate特化も条件分岐構文の一種 boostはこれらの条件分岐を駆使してとても複雑
409 名前:デフォルトの名無しさん [2012/01/12(木) 16:11:47.59 ] 2chやニコニコ動画に民主党から反日工作費が流れていることが知られるようになってきた。 民主党が用意した資金で工作員が2chを荒らしていることもだんだんと知られるようになってきた
410 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:26:40.40 ] 質問です。 同じ名前で引数が異なるローカル関数って作れますか? hoge(enum hoge); hoge(int hoge);
411 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:38:01.35 ] ローカル関数とは何のことを指しているのか Cでの話なのかC++での話なのか はっきりしてくれ
412 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:38:54.87 ] そこで出てくるのがintとenumとか、分かってて聞いてる気がしてならない
413 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 22:11:17.80 ] ローカル関数てなんだ? 関数のオーバーロードなら C++で普通に出来ます。
414 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 06:53:45.81 ] ローカル関数:関数内関数のこと。C++では作れない。 c-production.com/contents/c/sec08.html プロトタイプ宣言: グローバル領域で宣言すればグローバル関数となりどこからも呼出し可能 ほかの関数内で宣言すればローカル関数となりその関数内でのみ呼出しができる ↑みたいに書いてあるサイトがあるけど規格票にそんなことかいてあったっけ?
415 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 08:25:23.68 ] gcc拡張切ってから喋れボケ
416 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 08:39:22.53 ] void func(void) { struct { void operator () (void) {} } local ; local(); }
417 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 10:05:20.06 ] うげ gcc拡張だったとわ。 知らんかった。
418 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 11:37:09.75 ] >>414 グローバルな宣言がなくローカルに宣言した関数は、その関数からしか #ifdef __cplusplus 呼べない。 #else プロトタイプの適用が行なわれない。 #endif
419 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 11:56:02.25 ] C++はもともとローカル関数は作れないし C言語はプロトタイプ宣言不要だよ? ローカル関数なんて言葉もなかったような…
420 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 12:15:05.78 ] 完全にnothrowでSTLの代替になって著作権にうるさくないC++ライブラリってありますか?
421 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 13:36:42.82 ] >>419 規格には記載ないな きっと local function definitions are illegal を ローカル関数の定義が正しくありません。 と訳したVC++の所為
422 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:25:41.78 ] どうしたらこのスレに書かれてることを理解できるレベルに到達できますか? 初心者向けの本は勉強したけど、全然わかりません。 やさしいC++をひと通りコード書いて理解しました。 int main(void) とか、int main の中に何か入ってるものは何を意味してるのか分からないし operator関数も難しいです。
423 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:48:10.47 ] 他人が書いたソースを読むことだな とりあえず自分が興味ある分野のソースを見てみたらいい
424 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 21:01:01.85 ] >>423 いや、voidの意味から分からん言ってるなら、ロベールが先だろ
425 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 00:13:21.94 ] >>420 g++ で -fno-exceptions をつけるとかじゃダメなの?
426 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:06:12.81 ] 野田改造内閣に早速疑惑浮上 @aritayoshifu 有田芳生 捜査当局が内偵を続けている農水疑惑。詳細な怪文書まで出回っている。3億円の 行方はどこに? @minorucchu ジャーナリスト 田中稔 野田改造内閣を揺るがす、農水省3億円スキャンダルの怪文書。二人の議員名が浮上。 34分前 webから https://twitter.com/#!/minorucchu/status/157687110562881537 鹿野と筒井らしい 自公は問責も視野に調査開始だって
427 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:08:50.29 ] std::cout << "ほげ"; std::wcout << L"ほげ"; JavaからJNI(Java Native Interface)でc++のコードを使っていて、 デバッグ用にcoutを使ったら文字化けしてしまいました。 もしかしてコーディングが違うのでは?とか思いました。 調べてもよくわからないのですけど、おそらくJavaが用意したコンソールは、UTF16のビッグエンディアンなんじゃないかなと思いました。 なので、L"ほげ"というのをBigエンディアンに出来ないでしょうか? LってのがLittleだったら、神がかってるなと思って、B"ほげ"にしてみたらやっぱだめでした。 Localeなのかな。 std::wcout.imbue()付近で調べればわかりますかね?
428 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:22:56.59 ] >>427 エスパースレで聞いたほうがいい
429 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 03:08:09.92 ] LはLongだろ
430 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:00:04.10 ] どこのC++かは知らんが、VC++を使っているなら、 ShiftJIS(を独自拡張したCP932)しか使えないから。 文字列としてUTF16LEを受け入れたり内部で取り扱ったりすることはできるけど localeを経由すると必ずCP932になる。wchar_tに格納していてもCP932になる。 なぜならlocaleがunicode出力を受け付けないから(仕様)。ハゲワラ。
431 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:01:54.22 ] ごめん、UTF16LEじゃなくてUTF-16BEだったなw ま、これがUTF-32でもUTF-8でもいっしょだ。 localeを経由しないAPIかcharを使ってバイナリでごりごり出力するかどっちかだ。 あと、コンソールもUnicodeモードにしないとだめだぞ。
432 名前:デフォルトの名無しさん [2012/01/14(土) 14:05:30.65 ] windowsの問題というよりwindows日本語版の問題な。
433 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:13:22.67 ] >ShiftJIS(を独自拡張したCP932)しか使えないから。 馬鹿は休み休み言え
434 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:14:23.39 ] >>427 L は Letteral
435 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:32:16.79 ] 休み 休み 言って見ましたw
436 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:35:08.33 ] >>432 Windows日本語版の問題? うんにゃ。localeライブラリを自力で記述すればちゃんと動くよ。 VC++のlocaleがUnicodeを受け付けないのが問題なだけ
437 名前:デフォルトの名無しさん [2012/01/14(土) 16:03:26.59 ] >>423 他人が書いたソースが読めない場合は… まだ基礎力が足りていないんだと思うけど、一応初心者用の本をひと通り勉強したから ここからステップアップするには何が必要なんだろうかなと 他人が書いた"易しめ”のソースが、どこかで見られたら良いなと思うんですけど そういう場所や参考書は無いですか?
438 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 16:22:39.21 ] まずはアンカーの付け方とsage方を勉強しなさい
439 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:25:57.60 ] >>437 初心者用の本を読み終われば、他人のコードも読めるようになっているはず。 まだならば、読み切れていない。 知らない単語・関数があるのならば、リファレンス本(or Web)を使え。
440 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:42:18.61 ] >>439 リファレンス読んでみます。 オススメの初心者用の本を教えて下さい
441 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 18:48:59.22 ] codepad.org/N8er8eMm 8行目が4,3,2,1,0,になって欲しいんだけどなんでこうなっちゃうか教えて欲しい コピーコンストラクタが悪いんだろうけど何がおかしいのかわからなくて困ってる
442 名前:441 mailto:sage [2012/01/14(土) 19:00:36.48 ] >>441 は解決しました スレ汚しすみませんでした
443 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 20:32:10.91 ] class Interface { public: virtual void Release(void) = 0; }; class Hoge : public Interface { public: void Release(void) { delete this; } }; extern "C" __declspec(dllexport) IHoge * __stdcall Create(void) { return new (std::nothrow) IHoge; } --------------- extern "C" __declspec(dllimport) IHoge * __stdcall Create(void) ; これってDLLとEXEでvtableの構成が変わっちゃうかも、とか気にしなくていいの?
444 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 20:32:43.86 ] ×Interface ○IHoge で
445 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:31:49.20 ] >>443 vtblのレイアウトはWindowsでは決まっている(そうじゃないとCOMが動かない)
446 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:49:50.45 ] >>445 なるほど VC++やOSのバージョンは特に気にしなくていいということですかね 安心しました
447 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:20:13.66 ] #ifdef HAVE_CPP11 とか #ifdef HAVE_CPP0X みたいなことってできないの?
448 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:26:58.33 ] www.google.co.jp/search?q=__cplusplus+%92%E8%8B%60%8D%CF%82%DD%8E%AF%95%CA%8Eq+%22c%2B%2B0x%22 かな
449 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 01:25:48.99 ] VisualStudio2010みたいな中途半端なc++11の為に HAVE_LAMBDAとかHAVE_DECLETYPEとかほしいな
450 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 02:02:08.21 ] コンパイルエラーを捕まえて処理できる構文とかあればいいのにね template <class X> void my_swap(X & a, X & b) { STATIC_TRY { a.swap(b); } STATIC_CATCH { std::swap(a, b); } } // a.swap(b)がコンパイルエラーならstd::swap(a, b)でも試す こんな感じで めんどくさいメタプログラミング、とかマクロで実装状況を調べて、とか正直めんどくさい
451 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 03:31:12.67 ] 一応SFINAEがそういうものなんだけど実装状態がいまいち
452 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:45:54.75 ] intrusive_weak_ptrはなぜないんだろう なんか作るのに難しい所があるのかな
453 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:33:08.96 ] 簡単だと思うんならやってみればいいんじゃね?
454 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:36:26.76 ] クラスの静的メンバ関数って静的メンバ以外を引数にするのはNGですか?
455 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:41:25.59 ] >>454 問題無いですよ。
456 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 17:50:14.19 ] >>452 weak_ptr機能を導入すると実行コストがshared_ptrと大差なくなると思われ
457 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 19:49:04.54 ] VTableのサイズをするにはどうすれば?
458 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:12:22.34 ] サイズをする?
459 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:15:33.66 ] 知るですすいません
460 名前:デフォルトの名無しさん [2012/01/15(日) 22:39:15.44 ] 2ちゃんとかでよくみるAAをprintfで表示したいのですがどうすればいいでしょうか? メールで提出するので何かをダウンロードしたりしないでプログラムの中だけでやりたいです。
461 名前:デフォルトの名無しさん [2012/01/15(日) 22:40:25.34 ] >>460 すみません、フォントをMS Pゴシックに変える方法が知りたいです。
462 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 22:43:00.46 ] windows コンソール フォント
463 名前:デフォルトの名無しさん [2012/01/16(月) 00:35:53.28 ] vba用のdllをつくっています。C初心者です。 値をdllに渡して処理したあと、グローバル変数に値を入れておいて、 vbaから読み込みのフラグが立ったらその変数を戻すようにしているのですが、 グローバル変数は呼び出し速度が遅い等ネットで見かけます。 グローバル変数を回避して、ローカル変数のみで同様のことをするには ざっくりどんなことをすればいいのでしょうか
464 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 00:38:14.88 ] グローバル変数が遅いなんて初めて聞いたぞ どこだその糞サイトは
465 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 01:50:55.97 ] >>463 > グローバル変数は呼び出し速度が遅い等ネットで見かけます。 どういう理由で何の処理が遅くなるのかがあやふやなので、 まずはそのことがどこに書かれているか教えてください。
466 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:19.02 ] class window {
467 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:50.03 ] すいません誤爆しました
468 名前:デフォルトの名無しさん [2012/01/16(月) 02:08:26.73 ] class window {
469 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 02:12:55.51 ] };}; class window’ has the same name as the class in which it is declared
470 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 10:44:06.68 ] >>464 排他処理のこと言ってるんじゃね?
471 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:02.57 ] テンプレート関数について教えてください。 テンプレート関数に部分特殊化はないと思っていたのですが 以下のように書いたらよくわからなくなってきました。 //上になにもテンプレート宣言がないときは<>が構文エラー //template<typename T, typename U, typename V> void f<>(T, U, V){} //通常のテンプレート関数 template<typename T, typename U> void f(T, U){} //テンプレートの特殊化は問題なし? template<> void f<>(int, int){} //この構文は何? 既に本体を持っています。上のがなければok //void f<>(int, int){} //同じ引数の別のオーバーロードは問題なし? void f(int, int){} //テンプレートの部分特殊化のつもりの文 template<typename T, typename U> void f<>(T*, U){} //同じ引数の別のオーバーロードのつもりの文。関数テンプレートは既に定義されています //template<typename T, typename U> void f(T*, U){} //別のオーバーロードなのにtemplateの部分特殊化のように書ける? template<typename T> void f<>(T*){} 上の文のおかしなところをご指摘いただけないでしょうか。 VC2010です。
472 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:36.02 ] そもそもそのグローバル変数は何のために使っているんだろう。
473 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:47:37.53 ] >>471 > //テンプレートの部分特殊化のつもりの文 > template<typename T, typename U> void f<>(T*, U){} いいえ、それは部分特殊化ではありません。
474 名前:471 mailto:sage [2012/01/16(月) 12:30:28.34 ] やはりそうですか。 だとすると<>があるとないとでは、どのように違うのですか?
475 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:05:46.91 ] >>474 無意味で違いがない
476 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:35:20.11 ] ありがとうございました。
477 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 16:00:34.59 ] math.hのsin()を使う場合と、 float fsin = 0; _asm{FLD DWORD PTR DS:[fsin] FSIN FSTP DWORD PTR DS:[fsin]} を使う場合では、どちらが高速ですか?
478 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:18:33.69 ] レスを待つ時間あるなら、自分で計測すりゃいいだろ
479 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:46:29.15 ] 自分で計測したとして その結果は他の環境でも 当てはまりますか?
480 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:48:54.93 ] >>477 ライブラリのバージョンだとかCPUやチップセットの種類だとか様々な環境の違いで変わること。
481 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:49:12.23 ] そういう速度議論なんかはlibc開発者達の間でとっくに終わってる事なんだよね 一人の浅知恵が勝てるわけがない
482 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:54:55.30 ] >>481 いや、勝てる。 libcはいかなる環境のいかなる使い方でも最悪の速度が悪化しないことが求められる。 自作は勝手に条件絞ってその条件の範囲内でのベンチマーク最速を目指せる。
483 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:55:58.80 ] だからといってfsinでは勝てんがな
484 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:58:18.15 ] >>482 こういうことを言う奴に限ってクソみたいなもんを作る
485 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:01:54.85 ] 数学関数の作り直しで勝つとしたら、周辺処理との絡み方を良くして ループ展開、call削減、分岐削減、キャッシュヒット向上とか
486 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:04:20.74 ] >>484 ベンチマーク最速を目指すために書きまくる人vs理論で必死に否定する人
487 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:08:00.77 ] 複数の方法を用意してベンチマークを比べて速い方を選ぶ。それを幾度も繰り返し。 速度問題で勝ちたきゃそれしかねーよ。
488 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:18:11.99 ] >>477 これはsqrtの例だけど、こんな感じで検証して、できれば記事を投稿しろ。 www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx
489 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:19:55.69 ] あと、SSEが使える環境なら、FPU命令を使うよりSSEで関数を組んだほうが速い。 gruntthepeon.free.fr/ssemath/
490 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:25:56.78 ] zebra, john, gmpのソースを見て思った。 最高の速度を追求するときは標準関数には頼らない。
491 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:14:30.29 ] class Hoge { int mHoge; virtual void hoge(void) = 0; void test(int Num) { mHoge = Num; } }; みたいな抽象クラスを継承するHugaというクラスのインスタンスを作った時、 関数testの実体はインスタンスの数だけ存在するのでしょうか?
492 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:16:15.94 ] しません
493 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:19:11.75 ] しない
494 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:15.86 ] そうなんですね。意外ですmHogeはインスタンスの数だけあるのでしょうか?
495 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:17.72 ] 関数は常に一つ!
496 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:32.80 ] クラスってそういうもんなんですね。
497 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.44 ] 491さんではないですが、知らなかった 一つにするときはstaticを使うもんだと思ってました
498 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.96 ] >>494 なかったら困るだろ
499 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:42:53.62 ] IEのインターネット一時ファイルを弄ろうとしているのですが、 普通の方法(↓)ではアクセスできないみたいなんです。 fopen( "C:/.../Temporary Internet Files/sample.jpg", "r" ) 戻り値:null 何か特別な処理が必要なんでしょうか?
500 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:52:28.98 ] 馬鹿には無理
501 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 14:07:00.59 ] IEのキャッシュを扱うには専用のAPIを使う必要がある。 GetUrlCacheEntryInfoEx とか。
502 名前:499 mailto:sage [2012/01/19(木) 14:17:04.90 ] すみません。自己解決しました。 IEのインターネット一時ファイルの実体(?)って "/Temporary Internet Files/Content.IE5/"の更に下にあるんですね。 エクスプローラーではTemporary Internet Filesの直下にファイルがあるように見えたんですが、 コマンドプロンプトで見て気づきました。
503 名前:499 mailto:sage [2012/01/19(木) 14:19:27.28 ] >>501 さん 情報ありがとうございます。 GetUrlCacheEntryInfoExで調べてみます!
504 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 01:56:49.32 ] char hoge[10]; int len = strlen(hoge); これってlenに9が返ってくるとは思わないほうがいいですか? 帰ってこないとしたらどう初期化すべきですか?
505 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:00:01.82 ] int len = (sizeof(hoge) / sizeof(hoge[0])) - 1;
506 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:40:25.88 ] 9がほしいなら char hoge[10]; int len = sizeof(hoge)-1; でおk
507 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:50:14.66 ] 特に決まった初期化の方法はない感じですかね? ともあれレスありがとうございます
508 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 07:56:40.51 ] >>504 初期化したいのなら、hoge[0] = '\0';で。
509 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 08:09:46.09 ] >>504 char hoge[10] = {}; で。
510 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 09:55:24.58 ] hoge[0] = '\0'ってヌル文字でしたっけ するとstrlen(hoge) で0になっちゃいませんか? >>509 これはどういう動作になるんでしょうか? strlen(hoge)が9に約束されます?
511 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:12:30.97 ] template <unsigned int N> void init(char (&)[N]) { for(unsigned int i = 0 ; i < N - 1 ; ++i) a[i] = 1; a[N - 1] = 0 ; } char a[10] ; init(a) ; cout << strlen(a) << endl ;
512 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:24:30.57 ] >>510 ??? hogeに何が入っているかに因るから strlen(hoge)が保証される分けない。 strcpy(hoge, "a"); ってやった後に strlen(hoge); ってすればstrlen(hoge);は1であることが保証されるけど、 strcpy(hoge, "abcdefghi"); の後に strlen(hoge);ならstrlen(hoge);が9であることが保証される。 hogeの定義により確保したmemoryの大きさを保証したいのなら >>506 の言うとおりsizeof(hoge)とする以外にないよ。
513 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:53:05.54 ] やはりそういういうことですよね >>511 参考にさせて頂きます
514 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:07:59.47 ] 配列の長さと文字列の長さを混同しないようにな。 strlenはたんに'\0'の前までの数を数えているだけなのだから。
515 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:09:49.37 ] 配列に格納できる最大長が欲しいのか。 それならそうと最初からそう言えと。
516 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:10:16.96 ] char hoge[] = "123456789";
517 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 13:00:26.21 ] コンパイル時に決定される配列の大きさを実行時に求めたいという要求が理解出来ない
518 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 10:41:15.47 ] コンパイル時に決定されるかどうかは関係なく、 ポインタから配列の大きさを求めることは出来るのか?という疑問です もっと言えば、関数にポインタだけ渡しておけば、あとは勝手にサイズも見てもらって処理するような処理は可能か?ということです 上では一応sizeof使えとのことでしたが、ポインタの渡し方によっては ポインタそのもののサイズを返したりするので、結局素直に初期化する関数を作るべきかなあ
519 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:15.29 ] >>518 vector使えでFA
520 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:33.02 ] vector渡せばいい
521 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:10:22.47 ] サイズ付きの構造体、クラスでPK
522 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:42:01.82 ] > ポインタから配列の大きさを求めることは出来るのか?という疑問です これを書こうよ。。。 答え:できない
523 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:45:38.89 ] すいません、疑問がうまく文章になるまで時間がかかりまして。 vector考えてみます
524 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 12:59:38.80 ] // func.cpp namespace { template <unsigned int R> inline BigInt Factor(BigInt const & n) { return n == 0 ? 1 : n * Factor<R - 1>(n - 1); } template <> inline BigInt Factor<0>(BigInt const & n) { return n == 0 ? 1 : n * Factor<256>(n - 1); } } BigInt factor(BigInt const & n) { return Factor<256>(n) ; } // func.hpp BigInt factor(BigInt const & n); こんな感じのコードを見かけたんですけどこのテンプレートになにか意味あるんですか?
525 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:14:48.03 ] >>524 どこら辺を意味がないと思ったの。
526 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:49:19.71 ] >>525 なんで普通に再帰しないのかなーって
527 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:51:40.62 ] >>526 再帰の限界の数の回避とかなのかね。
528 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:18:57.37 ] こんなならループのほうがよさそうに思えるが
529 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:49:56.34 ] test
530 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 16:48:29.11 ] >>528 テンプレートでコンパイル時に計算させようとすると再起しかないんじゃないの。
531 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:21:33.84 ] >>530 そういう意味じゃないとおもう
532 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:13.43 ] テンプレート関数を特殊化したり、 テンプレート引数の代わりに関数引数で再帰している よくわからないコード
533 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:29.35 ] >>528 コンパイル時定数として階乗の結果が欲しいのをループじゃ対応できないのでは?
534 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:03:02.90 ] 問題は、100やそこらの再帰じゃ済まない階乗の値をBigIntで持つ必要が本当にあるのかどうか。
535 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:26:06.14 ] inline展開されてオーバーヘッドが無くなるというメリットはありそうだがこのサンプルでは無意味だろうな
536 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 20:12:08.33 ] >>535 コンパイル時に計算されるからインラインに展開してオーバーヘッドがなくなるとか関係ないのでは?
537 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 21:30:45.28 ] >>530 ,533,536 それはもしかしてこんなコードじゃないのかい ttp://codepad.org/t8ejWQ2g
538 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:01:51.79 ] 質問です。 template <typename T = char> class Hoge { }; void test(void) { Hoge h; } テンプレート引数 T に対して char を与えてやってるので、 Hoge を使用する際、テンプレート引数を与えなくてもよさそうなのに、 error C2955: 'Hoge' : クラス テンプレート を使用するには テンプレート 引数リストが必要です となります。どうしてですか? どうぞよろしくお願いします。 VS2008 pro Win7 pro x64
539 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:03:11.96 ] Hoge<> hoge;
540 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:31:02.17 ] つまり、class Hogeとtemplate<>class Hogeの区別がつかないんだな。
541 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:49:44.40 ] GPU計算に興味が有るんだけど、C++だとOpenCLってやつが一般的? C++で使えて入門に向いてるのって何があるかな?
542 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:53:37.64 ] 下記関数は5ms周期で実行されています。 CTMAXが200を超えたとき、例えば201に なったとき、10ms周期の処理が5ms後に実行 されるという現象がおきます。 下記のように毎回実行される5msの処理は仕方 ありませんが、10ms以降の処理は実行タイミング がかぶらないようになっています。この状態でさ らに実行タイミングがずれないような処理を作りた いのですが、思いつきません。できるものでしょうか? void time(void){ #define CTMAX 200 static int ct; if(++ct > CTMAX) ct = 0; func5ms();/* 5ms処理 */ if(ct & 0x01) == 0) func10ms(); else{ if(ct & 0x02) != 0) func20ms(); else{ switch (ct){ case 1: case 21: case 41: case 61: case 81: case 101: case 121: case 141: case 161: case 181: func100ms(); break; case 13: case 53: case 93: case 133: case 173: func200ms(); break; case 5: case 105: func500ms(); break; case 9: func1s(); break; }}}}
543 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:12:36.72 ] よく分からんけど、 s = milisecond(); do_something(); e = milisecond(); if(e-s<200)) sleep_milisecond(200-(e-s)); ぐらい?
544 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:24:07.29 ] とりあえずこういうこと? ctって0〜200までの値、つまり 201個の値を取ることになっていたんだけど、 そこがまず問題だよね。 1005ms が 1000ms と等しいよ。 本当ならば、>= としなければならないよね? // if(++ct >= CTMAX) ct = 0; or ct++; ct %= CTMAX;
545 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:34:49.47 ] void time(void) { #define CTMAX 200 static int ct = 0; // 0 <= ct <= 199 ct %= CTMAX; mod_10 = ct % 10; mod_100 = ct % 100; mod_200 = ct % 200; mod_500 = ct % 500; if(!mod_500) func500ms(); if(!mod_200) func200ms(); if(!mod_100) func100ms(); if(!mod_10) func10ms(); ct++; }
546 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 13:52:36.91 ] 素直に書いた方がoptimize有利なんだから ct = (ct + 1) % CT_MAX;
547 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:01:39.16 ] time()を初めて実行した時に困るでしょ。 ct = 1;で実行することになって起動後9ms, 19ms, 29ms, ... で実行することになるよ。 人が書いたコードにbug入れる奴っているんだよな 迷惑なんだよな
548 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:06:09.81 ] そもそも標準関数と同じ名前の関数を作るな間抜け。
549 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:10:55.35 ] これって組み込みだから問題ないと思って特に指摘しなかったよ。 time.hなんて高尚なヘッダは存在しないんじゃないの?
550 名前:538 mailto:sage [2012/01/24(火) 16:33:33.09 ] >>539 ありがとうございます。助かりました。
551 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 07:51:50.37 ] 結局>>542 はどうなった? 自分は解決したから後はシーラないってか?
552 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:36:12.44 ] >>544 さんのいうとおり++ct >= CTMAXとしただけでとりあえず 自分の作ったやつでも正常に動くっぽいですね。 ちなみに関数名にtimeなんて使ってません。書き込むとき 面倒なんで簡単な名前に変更しただけです。 >>545 のプログラムはわかりやすいですが、0のとき全部実行され てしまうのが難ですね。 それからmod_10で考えると10回に1回しか起動しないので、 それだと10msじゃなくて50ms周期になってしまいます。
553 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:43:21.64 ] >>552 > ちなみに関数名にtimeなんて使ってません。書き込むとき > 面倒なんで簡単な名前に変更しただけです。 それにしても標準関数と名前がかぶるってねーだろ
554 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:51:57.71 ] まぁ549さんの言うとおり、組み込みなんでtime.hなんて 使いませんし。
555 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:14:03.52 ] >>552 bug指摘されちゃった。 static int ct = 0; if(ct == 0){ ct = 1; return; } 投稿した後に、これでうまくいくって気づいてはいたんだけどね。。。 この後はctが0になることはなくて、 0と等価な200がctの値としてくるから問題ないよね。 これくらい思いついてよ。。。 > それからmod_10で考えると10回に1回しか起動しないので、 > それだと10msじゃなくて50ms周期になってしまいます。 こっちは気づかなかった。きちんとdebugしてうまい具合にしてよ。
556 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:19:00.51 ] 実際に問題になるかどうかじゃなくて、そういう紛らわしいことはするなってこった。
557 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:24:21.70 ] ct += 5とするか、 time()を1ms毎に実行するようにするかして修正すれば良さそうだね。 後は任せた。 void time(void) { #define CTMAX 200 #define POLLING 5 static int ct = 0; if(ct == 0){ ct = POLLING; return; } // 0 <= ct <= 199 ct %= CTMAX; mod_10 = ct % 10; mod_100 = ct % 100; mod_200 = ct % 200; mod_500 = ct % 500; if(!mod_500) func500ms(); if(!mod_200) func200ms(); if(!mod_100) func100ms(); if(!mod_10) func10ms(); ct += POLLING; }
558 名前:549 mailto:sage [2012/01/25(水) 10:29:57.73 ] 自分で実装する時はtime.hがないからっていって、 time()やらtime.hに含む関数名を使ったりしないよ。 本当は、time()なんて関数を自作するのはまずいし、 他人に披露する時に借りの名前とするのも、 あらぬ誤解を招きかねないのでまずいんだけど、 でも、2chに書き込まれるような関数名に意見するのも面倒だし、 組み込みで使っている関数だって事は一見して明らかだったので、 time.hを使うことはまずないだろうって事であえて指摘しなかったんです。 まあ、本当は>>549 がおかしいんだよ。 一々指摘するのも嫌だから指摘しなかっただけでさ。 私が名付けるとすれば、polling()かなぁ
559 名前:549 mailto:sage [2012/01/25(水) 10:31:25.79 ] >>558 の まあ、本当は>>549 がおかしいんだよ。 は間違いで、 まあ、本当は>>542 がおかしいんだよ。 が正しい。
560 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:47:03.80 ] >>542 コードを書く前にまずは何をしたいのかを正しい日本語で人に説明する訓練をしなさい
561 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 21:39:52.68 ] てすと
562 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:12:52.00 ] class Hogeを事前に宣言しておいて、 あとから定義したいと思うのですが、うまくできません。 何か解決方法はありますか? // 宣言 class Hoge; Hoge func( ); int main( ) { Hoge h = func( ); return 0; } // 定義 class Hoge { public: }; Hoge func( ){ return Hoge(); }
563 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:19:17.13 ] //hoge.h/////////////// // 宣言 class Hoge; Hoge func( ); /////////////////////// //hoge.cpp///////////// #include "hoge.h" int main( ) { Hoge h = func( ); return 0; } // hoge定義 class Hoge { public: }; Hoge func( ){ return Hoge(); } ///////////////////////////// ってことなら無理 Hoge h = func( );この時点でHogeの定義が見えてないとダメ int main()の前に hoge定義を持ってこないと
564 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:21:27.99 ] func()がHogeではなくHoge*(またはスマートポインタ)を返すようにすれば大丈夫なはずだが、 設計を見直したほうがいいような気がする。
565 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:37:44.02 ] std::map<boost::shared_ptr<Hoge>, value_t>から要素を生ポインタで検索したいという状況に陥ったのだけど、何かいい手はないですか? とりあえず動くコードとして、 mapの要素を巡回してshared_ptr<Hoge>::getの返り値と検索キーを比較 一致していたらそのイテレーターの指す要素をmから削除 としているのですが、これではO(N)になってしまいmapの利点を生かせません
566 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:44:01.91 ] 生ポインタをキーにする。
567 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:03:22.81 ] スマポをキーにしようという発想が理解できない
568 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:44:20.83 ] 検索キーになるポインタをshared_ptrに放り込む。 カスタムデリータに何もしない関数を指定してdeleteを防ぐ。 でも危険度は生ポインタをキーにするのとかわらないな。
569 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 09:47:26.46 ] >>568 それって別ポインタとみなされて比較うまくいかないと思うけど
570 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:08:13.74 ] コードが長くなってきたので、クラスの宣言と定義を、hとcppに分けたいのですが 下記のような場合、どう分ければいいでしょうか? class Hoge { private: const int m_x; public: Hoge(int x = 3) throw() : m_x(x) { //do something 1 } void func(int a = 5) { //do something 2 } };
571 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:31:36.35 ] // Hoge.h struct Hoge { Hoge(int x = 3); void func(int a = 5); private: const int m_x ; }; //Hoge.cpp #include "Hoge.h" Hoge(int x) : m_x(x) { do_something_1(); } void Hoge::func(int a) { do_something_2(); }
572 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:46:52.59 ] >>571 ありがとうございます 理解できました
573 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:27:31.12 ] Cを独学で学んでいる入門者です コンパイル→実行について教えてください PCは富士通のノートパソコンで OSはvista home premium エディタはemacs コンパイラはMinGW です ソースファイルをコンパイルして実行する際、 M-x compile だと上手くいかないので、 M-x shell から >gcc -std=c99 ファイル.c でコンパイルしています ただ、毎回gcc -std=c99を書き込むのは煩わしいし、複数のソースファイルをコンパイルして実行する方法がわかりません。 Emacsで複数のソースファイルをC99で?コンパイルして、実行する効率的なやり方が知りたいです
574 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:40:29.72 ] IDE(統合開発環境) vs emacs(テキストエディタ) kohada.2ch.net/test/read.cgi/prog/1244310984/
575 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:41:57.55 ] >>573 make もしくはbatかシェルスクリプト
576 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:46:48.53 ] ふつうmakeだろ
577 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 08:57:23.22 ] GetOpenFileName/GetSaveFileNameで lpstrFileに確保するバッファの大きさを決めるにあたって あらかじめ受け取るファイル名の長さを取得できないでしょうか。 長さが足りない場合再起不能だし、かといって使われないのに数キロも確保したくないし それでも足りない場合だってあるだろうし。 GetWindowTextに対するGetWindowTextLengthのような 関数があればよいのですが、この場合ユーザーからの入力なので どうしたものやら。
578 名前:573 mailto:sage [2012/01/30(月) 09:04:33.22 ] ありがとうございます。 Makeの使い方を調べてみます。
579 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:32:00.09 ] >>577 MAX_PATH分確保しとけばいいだろ
580 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:36:18.61 ] 大きなバッファを用意しても、260文字以上は格納されないんですか?
581 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:04:06.02 ] WinAPIならファイル名読むタイプのAPIは大抵バッファに読み込んだ文字数返るから その文字数とバッファ長比べてバッファが足りてないと判断したら失敗とみなしてバッファを伸ばしてリトライすればいいよ
582 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:12:39.59 ] つーか、そもそもCommonDialogで256文字以上返せるのか? そうでないなら260どころか、257で充分だ。
583 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:22:41.08 ] ttp://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx
584 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:01:42.03 ] 仮想関数の戻り値が、継承先の型でもOK、っていうルールの名前を何ていったっけ?
585 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:11:23.37 ] 共変性かな
586 名前:584 mailto:sage [2012/01/31(火) 07:55:25.34 ] >>585 それだ!ありがとー!
587 名前:577 mailto:sage [2012/01/31(火) 16:47:56.33 ] おお、ディレクトリ含めて260文字とかいれたら、無効ですって言われた・・・ ってことは、260文字以上入れたかったら、自分でダイアログ作れってことか・・・
588 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:03:36.11 ] 32ビットWindowsなんだけど アクセスして良いポインタかどうかを判定しようとしていて ぬるぽ 0 初期化されてない有効なヒープ 0xcdcdcdcd 解放されたヒープ 0xfeeefeee この他に、一見してアクセスできなそうなポインタって何かあるかな。
589 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:06:29.89 ] そんなんで判断するなよ
590 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:07:41.88 ] 0xdeafbeef 0xdeaddead 0xbeaffeed
591 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 18:05:29.85 ] 自分で確保してない領域にアクセスすんな。
592 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 19:51:41.31 ] 外部から渡される未知のポインタなんよ
593 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:47:10.19 ] なにそれ怖い
594 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:50:48.03 ] 悪魔召喚ポインタ
595 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:17:34.81 ] 絶対に逆参照してはいけな
596 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:23:31.08 ] 書き込んだ名前の人間は必ず死ぬという死神のポインタ
597 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:26:01.82 ] C系列って恐ろしい言語だったんだな
598 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:29:14.36 ] しょうもないネタには食いついてやがんの