1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
577 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:54:05 ] レスをたどると元々は float a = 1; のような気がする
578 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:59:33 ] >>577 それだとfloat変数の初期化だよね。 もともとは以下のようにfloat←doubleの代入だったはず。 >float a; >a=1.0
579 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:08:18 ] >>569 持ってる本は2冊ともunsignedまでは書いてないんだが… 駄目なの使ってるのね…(一つは学校指定だけど) 算術型 標準変換 でググったら見つかりました、有り難う。 long double > double > float > unsigned long int > long int > unsigned int > int int > unsigned int だとばっかり思ってた。 (表現力が大きい方に…ってかいてあるからマイナスが表現できる方が上なのかと… よく考えてみたら、表現できる値の絶対値はunsignedの方が大きいけど。)
580 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:15:02 ] >>566 DOMだったら、selectNodesとかselectSingleNodeとかを使えばいいよ。
581 名前:デフォルトの名無しさん [2008/03/08(土) 21:20:47 ] >578 最初に書き込んだものです。 多分みなさんが思っているよりもっと初歩的なことが 分かっていないのだと思います。 正直doubleとfloatの違いが精度の違いでfloatがメモリ確保の ためだけに使われるぐらいにしか考えていません。 情報落ちや桁落ちの問題でここまでするのでしょうか? 正しい解釈はこうですか? int a; float b; double c; a=1; b=1.0f; c=1.0;
582 名前:デフォルトの名無しさん [2008/03/08(土) 21:23:45 ] >581 すいません。もう少し質問させてください。 何のためにここまでするのかと言う部分です。 情報落ち、桁落ち、丸め誤差、その他 このうちのどれですか?
583 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 21:31:40 ] おっもくそ大量の数値データを扱うときはdoubleじゃなくてfloatにするなぁ・・・ で、単純に、floatを準備したからにはfloatを突っ込む。と。
584 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 21:37:28 ] >>581 何をどう解釈しているのか分からないが…。 1や1.0などの定数自身も型を持っていることは理解している? その定数をどの型の変数に代入するかに無関係に、定数自身が型を持っている。 1 ← int型 1U ← unsigned int型 1.0 ← double型 のように。 >情報落ち、桁落ち、丸め誤差、その他 この場合は、その他。 実数の1.0という値は、double型でもfloat型でも桁落ちも丸め誤差もなく正しく表現できる。 ここで指摘されているのは、定数の書式としてfloat型の定数を表現できるのだから それを使用したほうが適切だろう、ということ。 精度の大きい型の値を精度の小さい型の変数に代入しても、桁落ちなどがなければ全く問題ない。 桁落ちなどがあるとしても、それを意図して書いているなら動作としては正しい。 でも意図したものかどうかプログラムを他人が読んでも分からないので、そのような場合は明示的なキャストをしたほうがいいこともある。 この場合はキャストなんかせず、定数を明示的にfloat型で書けばいい。
585 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 21:39:04 ] 定数の1は整数型だが、実数に変換しても何にも問題ないので int a = 1; float b = 1; double c = 1; としてしまうなぁ。 # ただし、float b = 1.0としてしまうとdouble値からfloat値からのキャストになるのでコンパイラによっては巧くないね。
586 名前:デフォルトの名無しさん [2008/03/08(土) 22:09:18 ] >584-585 早速のレスありがとうございます。 よく分かりました。 >この場合は、その他。 >実数の1.0という値は、double型でもfloat型でも桁落ちも丸め誤差もなく正しく表現で>きる。 そう思っていたのに何故そこまでこだわるのだろうと思っていたら、 定数の型のことを言っていたんですね。
587 名前:デフォルトの名無しさん [2008/03/08(土) 22:20:53 ] マルチスレッドのプログラムでSTLは使えないと聞いたのですが、本当ですか? あと、_PTHREADSをdefineすれば使えるとも聞いたのですが、、、 googleしても、結構昔の情報が多くて実際のところはどうなのかよく分かりませんでした。
588 名前:デフォルトの名無しさん [2008/03/08(土) 22:23:39 ] FedoraとWindowsでソースレベルで100%互換のアプリケーションを 作ろうとしているのですが、現実的ではないでしょうか? またどの辺に気をつけて開発した方が良いでしょうか? 内容は不特定多数のPCとsocket通信でバイナリデータをやりとりし、 内部でPostgreSQLにアクセスする、いわゆるサーバアプリケーションです。 開発はほぼ全面的にWindows側(VisualC++.net2003)で行い、 1日2度程、Fedoraでも動作テストをする予定です。
589 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 22:56:48 ] >>587 そういうときは、闇雲にググるのではなく、 自分の使っているライブラリのマニュアルを読め。 例えば、Visual C++もlibstdc++もスレッド安全性についての文書がある。 msdn2.microsoft.com/ja-jp/library/c9ceah3b (VS.80).aspx gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s05.html#manual.intro.using.concurrency.thread_safety
590 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 22:58:30 ] かつてKylixという開発環境があってですね
591 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:48:11 ] >>588 完全に.NET上に載せてしまってMONO使うとか。 俺は使ったことないけど
592 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:56:01 ] 一つお伺いしたいのですが,FLVなどの動画をweb上からdownloadし, てローカルに保存するプログラムを作りたいのですが, どのようなライブラリを使えばいいのでしょうか? ライブラリなどなく自分で作るしかないのでしょうか?
593 名前:デフォルトの名無しさん [2008/03/09(日) 04:02:45 ] ダウンロードするライブラリはあるが、アドレスを発見するライブラリはない
594 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:10:04 ] レスありがとうございます. アドレス入力は手動でやろうと思っています. ダウンロードするライブラリはあるんですね.ありがとうございます
595 名前:デフォルトの名無しさん [2008/03/09(日) 04:14:05 ] Youtubeの動画がおいてある場所がわかれば ZIPやEXEやAVIやMP3を落とすのと同じ 場所がわからなければ無理 動画が見られるアドレスと違う
596 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 05:39:49 ] 祭りらしい 【ひめはじめ】その7 venus.bbspink.com/test/read.cgi/megami/1204907313/ 【ひめはじめ】その8 venus.bbspink.com/test/read.cgi/megami/1204919740/
597 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 09:17:25 ] >>588 ソケット通信をどうにかする必要がある。 WindowsとPOSIXで似て非なるAPIを持っているから、 自分でラップするなり既存のライブラリを使うなりしないといけない。
598 名前:デフォルトの名無しさん [2008/03/09(日) 09:51:30 ] 先にSTLについて質問したものです。 教えてもらったファイルとかを見てみたのですが、マルチスレッド環境で std::cout に何かを書き出す時、いちいちロックをとらないとだめなようですが、 ロックの必要ないcout相当のものはないでしょうか? 自分でinline関数を作ってつかうようにはしたのですが、、
599 名前:デフォルトの名無しさん [2008/03/09(日) 10:33:05 ] ごめんマクロだった boost::mutex mutex_io; #define safe_cout(m) { \ boost::mutex::scoped_lock lock(mutex_io); \ m \ } int main() { safe_cout( std::cout << "hello" << std::endl; ); こんな感じ。
600 名前:デフォルトの名無しさん [2008/03/09(日) 11:39:46 ] 頭がこんがらがってきたのですが、 クラスmyclassの大きさをnバイトとして、次のように定義すると、 myclass *A; A = new myclass[x]; myclass B[x]; sizeof()の戻り値が n ← sizeof(myclass),sizeof(*A),sizeof(*B) 4 ← sizeof(A) x*n ← sizeof(B) となるわけですが、AとBにはどういう違いがあるんでしょうか
601 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 11:45:03 ] 配列とポインタの違い。 ちなみにsizeof (*B)は、Bが配列型→ポインタ型への変換を受けた後、 それに単項*演算子を適用しているので、B型のインスタンスをsizeofにかけていることになる。
602 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 11:56:08 ] Aはポインタ型(配列の先頭を指す) Bは配列型(値は配列の先頭を指すポインタ) ってことでしょうか 両方A[0].xとかB[1].xでクラスのメンバ変数xにアクセスできるので、 イマイチ区別が付きませんでした
603 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 12:13:17 ] 配列型のインスタンスは、原則として式の中でその先頭要素を指すポインタに変換される。 (sizeof Bのように直接sizeofの演算対象にするのはその例外の1つ) それで、[]演算子は常にポインタを対象にしている。 このページの中程にそういう話がある。 kmaebashi.com/programmer/pointer.html
604 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 12:32:06 ] cout << Bでどう考えてもBがポインタだったのは、 自動で変換されていたためでしたか そのページを参考に基本的な部分を整理しようと思います ありがとうございました
605 名前:デフォルトの名無しさん [2008/03/09(日) 17:48:09 ] これの直しかたわかりませんか? コンパイル時にアットマークがついてしまいます Error 42: Symbol Undefined _WSACleanup@0
606 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:58:46 ] それはstdcall関数の仕様。 @がどうとか関係ないから、ws2_32.libか何かをリンクしろ。
607 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 18:03:44 ] C++の入門書のお勧めは?
608 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 18:04:43 ] accelerated C++
609 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:12:41 ] >>607 猫でも分かるC++言語プログラミング
610 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:05:34 ] >>608 そ・れ・は・な・い
611 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:22:02 ] >>610 え、そうなの? >>608 見てアマゾンに注文したばかりなんだけど。
612 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:29:54 ] >>611 評判はとてもいいのですが 入門向きでは無いだろあれw C++が初めてで、他になにかやってたってとかならまだいいんだろうけど
613 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:30:27 ] >>611 読む価値は非常に高い良書。 ただ入門書を探してる人のレベルによっては 難しいと感じるかもしれないというだけのこと。 いずれ読むべきだから買っておけ。
614 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:42:41 ] JavaやC#でいうところのInterface的なものを真似る場合 class IHogeの中に実装があってもいいのでしょうか?
615 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:48:02 ] 実装があるならabstractクラスを真似るべきじゃね
616 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:57:55 ] 多重継承最強!
617 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:06:06 ] >>614 「真似る」のなら駄目 C++的にIHogeの中に実装があってもいいかどうかは別ね
618 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:25:57 ] accelerated c++ はベターCでなく C++ らしいやり方で進めてるところが好き
619 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:30:02 ] いずれ読むべきという点で「C++の設計と進化」をお勧(ry
620 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:17:51 ] 独習C++やらロベールやら色々あるから 本屋でとりあえず立ち読みでもしてみれ。 ネットでポチっと買うと合わなかった時悲惨。
621 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:42:18 ] 現行規格とはずれているがARMの内容は秀逸。
622 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:53:59 ] 今のところ、入門に向いてるのは609の 猫でも分かるC++言語プログラミングだけだなw >>607 「猫でも〜」は本買った方がいいけど(著者にとって)、webでも見れるよ。 www.kumei.ne.jp/c_lang/howto.htm
623 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:02:50 ] じゃあ一発 これならわかるC++ ブルーバックス版
624 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:04:46 ] >>614 それなんてCOM?
625 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:05:50 ] 猫でもを妙に推している人がいるな。 本人なのか、信者なのか。
626 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:08:18 ] 猫でもわかるシリーズにC++編はないわけだが
627 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:10:15 ] ググったら確かに。書籍化されてるのは C だけだな。 じゃあ本人ではないなw
628 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:10:15 ] webにはちょっとあるけど全然使えない
629 名前:622 mailto:sage [2008/03/10(月) 00:13:06 ] >>625 推してるの一人じゃね? 俺はwebでも見れるよって言いたかったの。 "だけだな"って言ったのはacceleratedとかD&Eとか無茶やろって思ったからw
630 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:16:03 ] >>628 あれって全部じゃなかったんだ・・・
631 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:18:10 ] 独習やロベールは別に無茶じゃないだろ?
632 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:21:07 ] >>625 猫は素人でも知ってる場合があったぞw 素人メールに猫の話があった時には目を疑った。 Web主体の素人さんにはPG的に一番名度高いのかも知れんね。
633 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:23:37 ] >>631 ごめん"立ち読みしてみれ"のあたりしか読んでなかった。 独習は良いかもね。
634 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:25:03 ] 猫でもはサンプル動かして改造するのには最適 入門書読んで、猫でもで遊んで、オブジェクト指向とか良いプログラミング作法でも学んでいけばいいんじゃね
635 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:34:18 ] C言語を独学で学んでいるのですがよく分からない文字(演算子?)があります -> ↑これはどういった意味の物なのでしょうか?
636 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:37:35 ] アロー演算子
637 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:38:56 ] >>635 A* a = new A(); //以下の2行は同じ (*a).aaa(); a->aaa();
638 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:41:57 ] >>635 ポインタptrが指す構造体のメンバmemである (*ptr).mem を ->演算子を用いて ptr->memと表す。 a -> b は、aが指す構造体のメンバbを表す。
639 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:45:26 ] >>636-638 良く分かりました。ありがとうございます。
640 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:56:28 ] 俺は (*a) も a-> も導入せずに、 同じ意味で a@ みたいな演算子が欲しかったよ・・・ [0]の構文糖衣として。 a@.aaa(); a@ += 10; a@++; まぁ、提案するとしても20年くらい言うのが遅い(C言語宛てになるし)わけだけど。
641 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:03:40 ] Delphiみたいに ^ がいいな
642 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:22:49 ] そうなると、定義もDelphiっぽくA^ a;になってC++/CLI設計者が涙目w
643 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:26:36 ] A$でおk
644 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:53:11 ] >>640 そもそも*(ついでに&も)が後置だったら良かったと俺は思う。 なんで前置にしたんだろう。
645 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:57:37 ] それを言い出すとなんで関数ポインタの宣言はあんなに狂ってるんだとかそういうハナシに
646 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 03:09:58 ] そもそもなんでこんな話題話してんだという話になる
647 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 03:24:32 ] >>644 たしかに。後置で良いよな。 >>646 void 635(){ 640(); }
648 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 03:46:23 ] 何故前置にしたのか気になってD&Eちょっと見て C言語の設計者の方じゃないと意味無いことに気付いた
649 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 05:09:56 ] 素人の友達にWindowsプログラミングしてみたいから いい本ないかと聞かれて猫でもわかる〜を薦めたら 馬鹿にするなと怒られた。 他意はなかったんだが、うかつだったわ。
650 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 06:44:56 ] それだけ聞くと、なんか馬鹿っぽい友達だな。
651 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 07:25:43 ] 数学でも単項演算子は前置である割合が多いから、 特別な理由をその時思いつかなければ まず後置にはしないと思う。
652 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 09:54:49 ] オブジェクトの排他制御というのはマルチスレッドで処理するとき以外は気にしなくて良いのでしょうか? というか、マルチスレッドを利用する場面というのはどういうときなのでしょうか
653 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 10:01:09 ] マルチスレッドでぐぐれよもう
654 名前:デフォルトの名無しさん [2008/03/10(月) 11:21:28 ] >>652 ウンコしながらオナニーとか
655 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 11:50:51 ] >>652 GUIアプリなんかで通常の機能を提供しながら重い処理をバックグラウンドでやるとか
656 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 11:56:51 ] >>654 流石にそれは難しいだろう。 >>652 トイレで出すもの出しながら飲食するとか。
657 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 12:20:13 ] >>649 猫でもわかる〜のサイトは、中身はいいけど、体裁がなぁ... プログラムの入門サイトなんだし、HTMLのタグぐらい、もうちょっと調べようよつとか思うよね...
658 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 12:24:13 ] 文章が読めたら何でもいいだろ・・・
659 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 12:32:21 ] 本人乙
660 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 12:34:24 ] むしろプレーンテキストでいい
661 名前:デフォルトの名無しさん [2008/03/10(月) 13:33:18 ] Delphiなんかの ExpandFileName関数(相対パスを絶対パスにする)と 同じ働きをする関数って VC++ だとなんて関数?
662 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:37:42 ] GetModuleFileNameでがんばるとか
663 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:44:38 ] VC++標準じゃないが、boostにパス変換がある。 boost::filesystem::system_complete
664 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:45:59 ] >>662 何故GetModuleFileName()? あれはカレントからの相対パスを解決する関数なんだから、モジュールからの相対パスにしちゃダメだろう。
665 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:54:07 ] GetFullPathNameは駄目なの?
666 名前:デフォルトの名無しさん [2008/03/10(月) 13:56:31 ] クラスのメソッドから、クラスのインスタンスの変数名を知る方法ってありますか? 具体的には、 class test {}; test a1; a1.method(); としたとき、method内でa1という名前をしることは出来ますか?
667 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:05:01 ] >>666 ムリ
668 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:07:08 ] >>666 thisでよくね?
669 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:12:44 ] 面倒だがコンストラクタの引数で変数名を文字列受け取るようにして 自分で保持するってのは? class test { std::strung instance_name; public: test(const char *pName) { instance_name = pName; } } test a1("a1");
670 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:15:06 ] 変数名が知りたいっていう状況がわからんのだが どう使うの?
671 名前:デフォルトの名無しさん [2008/03/10(月) 14:26:04 ] >>667-670 ありがとうございます。 用途はデバッグです。あるクラスの中身を表示させているのですが、 どのインスタンスかがわかりやすいようにしたかったので、、 自動化したいので、コンストラクタの引数に書くのは避けたいです。 が、これが一番確実ですかね。
672 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:30:23 ] >>671 Use the debugger, >671
673 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:32:57 ] デバッグ用途ならマクロの文字列化演算子 # を使うとか
674 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:44:44 ] >>671 どういう環境かは知らんが>>672 の言うようにデバッガ使ったらいいと思う
675 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 15:03:47 ] >>671 何らかの制限で、デバッガが使えない場合 デバッグログが使えるのならば、 生成した側が、確保されたアドレスを出力(__FILE__と、__LINE__も一緒に出力するとわかりやすい) クラスの中身を表示するところでthisを表示すればいいんじゃないかな? >>674 なかなか面白い書き込み時間だ
676 名前:デフォルトの名無しさん [2008/03/10(月) 16:52:05 ] ttp://www.borujoa.org/upload/source/upload17298.c 簡易ブラウザを作っているのですが、ソケット接続エラーがでます。 どこが原因か分かりません。教えていただけませんか?
677 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 18:03:29 ] >>676 htonsとか?