1 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 19:44:28.87 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.77【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1323692486/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
552 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 11:46:05.93 ] 基本的な質問で申し訳ありませんが 自分は参照渡しとポインタ渡しは書き方が違うだけでコードは同様と思っていますが 意味が違うと言っている人(ポインタを理解していない?)がいたので質問します 以下のコードに書き方以外の違いはあるのでしょうか? void hoge::func1(int &p1) { p1++; } void hoge::func2(int *p1) { *p1++; }
553 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:00:28.31 ] 間違えました コードは同様→機能は同様 です
554 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:04:08.66 ] 基本的には一緒 NULLやポインタ演算を使う場合はポインタを使う 本人じゃないと分からんけど そういった点でセマンティクスが違うと言ってるのかもしれない
555 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:04:28.94 ] >>552 全く違う。ポインタを理解していないのはあんただ。 前者は内容を更新し、後者はポインタを更新する。
556 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:09:27.37 ] ポインタを理解してないのか、演算子の優先順位を理解してないのか どっちなんだろうな。
557 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:12:58.44 ] >>555 どっちも結果を捨てているから一緒じゃねぇか。 って突っ込もうと思ったが、ポインタ版は在らぬところを指してしまうからやっぱり拙いかな?
558 名前:530 mailto:sage [2012/06/06(水) 12:21:48.86 ] ありがとうございます。 >>539 >>542 とりあえずは、ws2_32.dllの非同期通信スレッドが 他のスレッドに邪魔されないように、優先度を上げようと思っています。 >>540 これで行けそうです。ありがとうございます。
559 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:22:27.46 ] >>552 *p1++; は *(p1++); になるから (*p1)++; って書かないと参照の方と同じ処理にならないよ
560 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:59:12.13 ] > どっちも結果を捨てている お前大丈夫か?
561 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 14:47:40.54 ] >>558 言語のインストーラがやたらと重いし時間が掛かるのでいつもmsiexexcexeをタスクマネージャで 一個下の優先度に変えているぜ マルチコアだと関係ないと思われるかも知れないがそれでもタスクの切り替えの時に何か引っ掛かる
562 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 15:55:12.46 ] c++のbool型って1バイト使ってますよね? bool型の変数を本当に1bitで使うことって出来ますかね? 具体的に言うとboolの配列を出来るだけ多く使いたいので、メモリ節約することで単純に宣言した場合の8倍の量使えるように出来ないかな思ったんですが・・・
563 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 16:06:14.41 ] bitsetを使おう
564 名前:530 mailto:sage [2012/06/06(水) 16:19:46.29 ] >>561 マルチコアでも、全部のコアが100%に近い場合は、 優先度が顕著に影響しますね。 言語を頻繁にインストールしているのですか?
565 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 17:10:27.14 ] >>564 そんな事はないけどあるコアを100%使う時に気づいた 100%使うような処理は優先度を一つ落とすべきだと思った >>562 Proxy Classを使うと実現可能だと思うけど遅いと思うぞ
566 名前:562 mailto:sage [2012/06/06(水) 17:30:22.35 ] >>563 ,565 bitsetで出来たのでこれでやってみます ありがとうございました
567 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:10:51.82 ] コンストラクタ・デストラクタ呼び出しについて、 new deleteではなくmalloc、コンストラクタ、デストラクタ、freeとやってしまって問題ありますか? 呼び出し忘れの可能性が増えること以外で
568 名前:552 mailto:sage [2012/06/06(水) 21:11:06.78 ] 演算子の優先順を考慮していませんでした (*p)++;ですね 慌ててて書き込むとダメですね 要は func1を p1 = 0; func2を *p1 = 0; として結果は同じことを確認したかったのです
569 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:26:40.20 ] >>567 問題ない デフォルトのoperator newは大抵mallocを使ってる
570 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:32:58.30 ] そうですか、とりあえず安心 では続けて質問・・・ class Hoge { public: int hensu; Hoge(){hensu = 0;} } // Hoge* hogeP = (Hoge*)malloc(sizeof(Hoge)); hogeP->Hoge();//エラー hogeP->Hoge::Hoge();//OKっぽい、hensu = 0になっている 上記エラーとOKの差の意味ってなんでしょう?
571 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:46:04.45 ] 本来は両方エラーだがコンパイラの独自拡張が下の例だけ対応しているだけのこと
572 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:47:15.64 ] >>570 配置new ideone.com/ate3L
573 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:48:31.56 ] なるほど・・・気にしたら負けな世界ですかね、あんまり深追いしないでおきます
574 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:51:11.80 ] > new(p) A(); 初めて見る書き方です。replacement newですかね?勉強してみます
575 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:08:51.39 ] >>569 おいおい変な事を教えるなよ 規格票に従え
576 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:10:22.34 ] だいたい継承関係にあるクラスの派生クラスをdeleteせずにfreeしたらちゃんと 基底クラスのデストラクタ呼び出してくれるのか?よく考えろ
577 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:13:45.30 ] 大概のライブラリでbitsetってスレッドセーフじゃないんだよね…vector<int>より結局遅くなるケースがおまんちん(´・ω・`)
578 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:15:37.02 ] POD型以外はmallocじゃ正しいサイズになる保証もないしな。
579 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:26:03.75 ] 引数付きコンストラクタも呼び出せないしな
580 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 23:48:03.25 ] >>575 具体的に >>576 されるけど、何がよく考えろ? ideone.com/C8PJH >>578 sizeofが正しいサイズを返さないってこと? sizeofにはvtblもアラインメントのパディングも反映されるし mallocの開始アドレスは基本型のアラインメントも保証されてる >>579 呼び出せるけど、確認してから言ってるの? ideone.com/TKP9g
581 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 23:56:44.79 ] >>576 >freeしたらちゃんと というか継承以前にfreeとデストラクタは関係無い
582 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:18:29.56 ] 質問させてください 引数で可変サイズの2次元配列を受け渡すにはどうしたらいいんでしょうか? int det(int[][] a, int n) { みたいに2次元配列とサイズをうけとってサイズに応じて計算したいんですけど…
583 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:29:35.85 ] >>580 だれもplacement newの話はしてないんだが・・・ 頭おかしい?
584 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:32:38.67 ] >>582 C#のジャグ配列みたいな奴って事? それじゃポインタのポインタのポインタもしくはポインタのポインタのリファレンスを渡して 行もしくは列方向が伸び縮みするようならreallocもしくはC++ならvectorを使った方がいいね 俺自身はvecctorが常に今の行数と行ごとの列数が簡単に把握出来て好きなんだが
585 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:33:30.43 ] ちなみにポインタのポインタではいけないのは、呼び出し元に行方向にreallocした 場合の結果を返せないから
586 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:34:53.65 ] >>582 こういうの?std::vector使った方が良いとは思うけど ideone.com/pspcT
587 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:36:37.16 ] >>583 どの部分に対するレスかも書けないお前の頭がおかしい
588 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:40:51.82 ] int det(int *, int); det((int *)a, (sizeof(a) / sizeof(int));
589 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:53:17.89 ] >>587 何でも人のせいにすんなカス 自分の文章を読む能力の不足を棚に上げて偉そうに
590 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:57:17.14 ] >>589 で、結局お前は>>580 のアンカ先のうちどれなわけ? それを書けと言ってるんだが
591 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:04:38.95 ] お返事ありがとうございます >>584 ,586 C言語の話でしたすいません >>585 とりあえず配列は READ ONLY で動いてくれれば… >>588 ためしにしたのプログラムでコンパイルしてみたんですけど a[1][1] でエラーになります メソッド内で要素にアクセスするにはどうすればいいんでしょうか… int det(int *a, int n) { return a[1][1]; } int main() { int a[2][2] = {{1, 2}, {3, 4}}; printf("%d\n", det(a)); return 0; }
592 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:09:32.39 ] >>582 ideone.com/tQkZx やっぱりC++とmalloc/free/reallocを組み合わせるのは気が引けるな std::vector<std::vector<int> > を使うか自前のクラスを作りたい
593 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:11:20.40 ] >>583 の正体は次のどれ? A:>>575 B:>>576 C:>>578 D:>>579 オーディエンスで。
594 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:12:46.86 ] >>591 >>586 をCにした ideone.com/VazAq
595 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:29:56.54 ] >>594 おーーー この方法で動ききました ほんとにありがとうございます! 助かりました! int det(int *a, int n) { return *(a+1 * n + 1); } int main() { int a[2][2] = {{1, 2}, {3, 4}}; printf("%d\n", det((int *)a)); return 0; } >>592 int det(int **&a, int n) { return a[1][1]; } って書き方試してみたんですけど printf("%d\n", det((int **)a, 2)); だとコンパイルとおらなくて int **b = a; printf("%d\n", det(b, 2)); で無理やり型あわせてわたしてみたらコンパイルできたんですけど動かなかったです
596 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:45:02.40 ] >>595 >>592 はC++だよ
597 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:48:28.56 ] >>596 そうなんですけど Cでも int**& って書き方自体できたので メソッド中で a[1][1] って書き方でアクセスできれば楽かなって試してみたんですけどダメでした Cで2次元配列扱うのって結構大変なんですね…
598 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:52:46.91 ] >Cでも int**& って書き方自体できたので やめてください
599 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:56:23.42 ] >>597 コンパイラが a[1][1] を *(a+1 * n + 1) のような計算に変換してくれているので nの部分をコンパイラが認識出来ないとどうしようもない mainの中で書けるのは int a[2][2] という定義が見えているため ↓のように認識させれば a[1][1] のように書けるけど1次元分以外は固定になってしまう ideone.com/vgeLc
600 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 02:09:39.53 ] >>599 なるほどです #define ならできるのはわかるんですけど 配列サイズをちっちゃくしながら再帰的にこのメソッドをよびたいので 変数で可変じゃないと困るんですよね… ちょっとソースが醜くなるけど 一応やりたいことは >>594 でできそうなのでこれでかいてみます 本当にみなさんありがとうございました
601 名前:デフォルトの名無しさん mailto:age [2012/06/07(木) 06:55:51.82 ] C++ class Hoge{ private: int hogehoge; }; このclassをvectorに4つ格納したいのですがどう記述すればいいのでしょうか 型の宣言がわかりません。 vector<Hoge> array(4) これじゃだめなんですか?
602 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 08:21:09.34 ] #include <vector> class Hoge{ private: int hogehoge; }; std::vector<Hoge> array(4);
603 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:31:48.34 ] .NETで開発する場合C++/CLIは必須ですか?
604 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:45:19.07 ] いいえ
605 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:26:18.99 ] >>604 だとするとCLIはいつ使うのですか?
606 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:32:22.18 ] >>605 d.hatena.ne.jp/itaro3/20110727/1311716477 これ見て考えろや でもここまでするなら普通にC/C++使えと思う 既存の.NETのリソースを活用したい時だけか
607 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:33:34.20 ] >>606 ありがとうございます!!!!!
608 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:20:14.46 ] 久しぶりにクラスのポインタの配列をnewしようとしたら記述方法が解らず過去のソース漁っちまったぜ 何でこんな記述方法なんだ
609 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:26:58.79 ] バカ避け
610 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:43:51.53 ] >>608 勘違いしてたらごめん、普通な記述方法だと思うけどコレと違うの? ideone.com/ZCwKK
611 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:07:55.41 ] >>610 自明ではないなあ、確かに調べたくなる。 int *p, *q; なのに int* [10];。
612 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:08:13.99 ] Bjarne Stroustrup氏 インタビュー www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
613 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:31:09.43 ] そこそこ有名な古文書ですね
614 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:28:57.23 ] >>611 配列のnewは type* p = new type[n]; なのでクラスのポインタ(type = cls*)なら cls** p = new cls*[n]; まとめて変数を定義する構文は欠陥品みたいなもんだから使わない方がいい 理解云々より「型 変数,変数;」にならない場合があるシンタックスがキモイ
615 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 23:18:54.25 ] ポインタ配列は使わずにptr_vector使ってるわ
616 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 00:09:07.32 ] >欠陥品みたいなもん 聞いたことないわ 脳内か?
617 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:31:56.33 ] 禿がそんなようなこと言ってた気がする
618 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 06:33:12.18 ] int *p, *q; int* p, q; どっちが意図通りか分かりにくい
619 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 09:22:15.62 ] >>616 C++言語設計者曰く Bjarne Stroustrup's C++ Style and Technique FAQ www2.research.att.com/~bs/bs_faq2.html#whitespace >A ``typical C programmer'' writes ``int *p;'' >A ``typical C++ programmer'' writes ``int* p;'' >... >Stick to one pointer per declaration and always initialize variables and the source of confusion disappears.
620 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 10:32:50.57 ] [C++設計と進化]でもCの宣言シンタクスをdisってるよね。 構文を変えようとしたけどCユーザーの反発とか色々あって放置に決めたっていう。
621 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 11:10:58.17 ] >>618 どっちがどうなのかさっぱりだ 基本Cな俺は上で記述したくなるけど
622 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 12:27:10.29 ] int*をtypedefしたらさらにややこしい
623 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 13:20:15.63 ] いやそこは#define だろ
624 名前: ◆QZaw55cn4c mailto:sage [2012/06/09(土) 13:47:33.95 ] なんでもありの #define は避けれるのであれば避けたほうがいい。
625 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 14:35:41.84 ] コテはアスペとわかっちゃいても ヤッパむかつくな
626 名前: ◆QZaw55cn4c mailto:日常やってるjね。野見祐二love [2012/06/09(土) 15:12:12.59 ] >>625 コードをみせてくれ。話はそれからだ。
627 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 15:46:21.13 ] ナッパむかつくわ
628 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 21:11:59.64 ] ラッパズボン
629 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 21:47:37.67 ] ガッペむかつく
630 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:03:37.47 ] charの配列に2バイト文字列が入ってるものをifとかで場合分けしたいんですが、どーしたらいいんでしょう? 別の事情でstring型は使うことができないんです 初歩的な質問ですいませんがよろしくお願いします
631 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:14:05.73 ] 正確ではないと思うが、全角文字の1バイト目を探すというのはどうだろう。 0x80〜 とかその辺だった記憶
632 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:21:18.75 ] >>631 回答有り難うございます 文字列で場合分けしたいので一文字じゃダメなんです…… でも参考になりました ありがとうございます 別で聞いた所strcmp?とかいうもので解決するそうです もう少し頑張ってみます
633 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:59:18.06 ] いや、charの配列を頭から一文字ずつチェックして その2バイト文字列の文字コードでマルチバイト文字の1バイト目であることを示す値が出てくるかどうかで判断するって話だろ
634 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:17:31.99 ] なんでそうなるw
635 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:24:29.07 ] 3バイト文字列
636 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 05:57:32.60 ] >>630 扱うコードは SJIS? UNICODE?
637 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 06:03:28.19 ] UTF8以外は認めない
638 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 11:41:33.27 ] UTF32でおk
639 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:11:18.15 ] Bjarne Stroustrup ってなんて読むの? バカジャネ ストラップ でいいの?
640 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:18:44.54 ] Wikiみろ。しかし、一般にはハゲである。
641 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:22:38.71 ] びよよん ストローストラップ
642 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 16:57:25.35 ] 初歩的な質問ですがよろしいでしょうか? C++における関数や関数の呼び出しにおける変数の扱いについてです。 関数や関数内にて宣言している静的な変数は、関数を呼び出すたびに実行に必要なメモリ領域を確保しているのでしょうか? 関数、変数ともにstatic、inlineなどがついていない関数を前提とします。
643 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:06:46.76 ] >>642 >関数や関数内にて宣言している静的な変数 >関数、変数ともにstatic、inlineなどがついていない 矛盾しとるがや。
644 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:34:56.98 ] >>643 すみません つまりこういうことです。 int func() { int var; } ここでのfuncやvarは実行されるたび確保されるのでしょうか?
645 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:38:33.59 ] 仕組みを知りたいなら"スタック 自動変数"でぐぐればわかるよ
646 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:51:53.23 ] >>645 ありがとうございます。 早速調べさせていただきます。
647 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 18:04:43.04 ] うるせぇ、許可なんか要らないから勝手に調べろよ。
648 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 18:36:02.03 ] ハイハイワロスワロスwwww
649 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:02:24.84 ] 許可を求めてない件
650 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:17:56.41 ] まぁアスペなんだろ かかわらないほうが吉
651 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:40:35.31 ] そもそも確保しなきゃ使えんだろ
652 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:51:54.42 ] 最初に確保して使いまわしているとかそんなのも考えていたんじゃないか? そうなると再起関数の部分とかで矛盾が発生するとか考えればわかるけど