- 1 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:37:43 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。
- 454 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:56:02 ]
- 思ったw
- 455 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:26:41 ]
- .netフレームワークを要求する商用アプリで動きが機敏なアプリをいまだかつて見たことないな。
- 456 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:32:25 ]
- 多言語からc++を呼ぶインターフェイスで
std::cout がおかしくなる原因になってるらしくなんとかしたい #define __streambuf なにか にできればいいのだけど voidに置き換えるとコンパイルとおらない 何か適当なクラスでもないでしょうか?
- 457 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:38:17 ]
- ios::sync_with_stdio で解決されるような問題じゃなくて?
- 458 名前:456 mailto:sage [2008/04/10(木) 00:12:16 ]
- 他言語の処理系がstdcoutをすでにリンクしているのに
さらにその処理系から呼び出すcのプログラム中でもリンクしてるのが 問題なってる可能性があるような気がしています なので #define __streambuf Hoge できると多分うまくいくのではないかと
- 459 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:17:47 ]
- XNAなめんな
- 460 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:22:13 ]
- >>456
多言語から呼び出すってっ、もしかすると他言語からDLL呼び出しすることってことかな? だったらライブラリの初期化がうまく言ってないんじゃないか?dllmainはこねこねした?
- 461 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:23:42 ]
- あと、DLLはマルチスレッドライブラリでコンパイルだよ。
- 462 名前:456 mailto:sage [2008/04/10(木) 00:24:19 ]
- >>460
正確にはlibhoge.soを呼んでます libhoge.soがstd::stream関係をリンクしてます
- 463 名前:460 mailto:sage [2008/04/10(木) 00:27:49 ]
- linuxでしたか。>>460はwinの場合の注意事項でした。
- 464 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 07:50:43 ]
- >>461
MTでコンパイルしないといけない決まりでもあるの?
- 465 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 08:21:08 ]
- >>464
ある。 DLLをコンパイルするときはMTでする必要がある。プロジェクトの作成でDLLを選択すると自動的にマルチスレッドランタイムライブラリが選択される。 呼ぶ側はどっちでもいい。
- 466 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 11:49:02 ]
- >>465
何の処理系の話か知らないがVisualC++なら シングルスレッドのランタイムの静的ライブラリをリンクしたシングルスレッド専用のDLLを普通に作れる
- 467 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 11:57:21 ]
- 端で見てて想像した通りの食い違い方w
- 468 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 12:10:14 ]
- 初歩的な質問で申し訳ないんだが、他言語から C++ の
ライブラリを使って問題無いはず、という保証はあるんだろうか? あと、普通に C++ で呼び出すとかなぜしないのだろうか。 (これは状況がわからんとなんとも言えないけど)
- 469 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 14:18:03 ]
- operator==() の定義はクラスの中とクラスの外に置けますがどのように
使い分けるのでしょうか? std::type_info はクラスの中でその他はクラスの外が多いのですが。
- 470 名前:デフォルトの名無しさん [2008/04/10(木) 15:34:04 ]
- 別にoperator==()に限らずメンバ関数は中にも外にも置けるけど。
- 471 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 17:04:36 ]
- ププ
- 472 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 17:05:09 ]
- ペペ
- 473 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 17:30:44 ]
- == どうするかは状況によるんでは。無理無く member にしないで
いいならそうすればいいような気がするが。中身の情報が必要な 場合に member にしてるんじゃないの?普通に生じる状況だと思うけど。
- 474 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 17:43:05 ]
- メンバに出来るものは中に書く。
メンバに出来ないものは外に書く。 以上。
- 475 名前:デフォルトの名無しさん [2008/04/10(木) 18:05:52 ]
- c++のエラー出力の文字コードがutf-8になっているのですが、
euc-jpにする方法ありますか? Linuxのeuc-jp環境でプログラミング行っており、 gcc version 4.1.2 です。
- 476 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:18:07 ]
- iconv
- 477 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:40:50 ]
- ロケール切り替えろとしか
- 478 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 19:06:32 ]
- public 関数だけで実装できる場合は非メンバーにする。
friend を使って非メンバーにすることもある。
- 479 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 20:50:36 ]
- 式の対称性が必要なら非メンバー
- 480 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 20:59:53 ]
- 自身への参照を返すことが期待されるか、自身を変更する場合は、メンバーにすることが漏れは多いな。
operator=, +=等はメンバに。operator==, <<, +等は非メンバ(場合によってはfriend)にしてる。
- 481 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 21:08:54 ]
- op == あたりの話はeffective C++に書いてなかった?
もう忘れちゃったけど。 グローバルにop ==を置くことでカプセル化が上がるとか その話とはまた別?
- 482 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 21:20:10 ]
- friend はできれば避けた方が良いというの無かったっけ?
- 483 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:12:02 ]
- C++ Coding Standards の 44 には
「できるだけ非メンバーかつ非 friend の関数を書くようにしよう」 というのがありました。
- 484 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:19:02 ]
- C++の本質はやっぱプリプロセッサとテンプレートだろ・・・
オブジェクト指向なんてうんこ
- 485 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 23:00:41 ]
- プリプロセッサはちょっと違うだろ・・・
現実的にメタプログラミングするのには必要だけど。 個人的にはデストラクタを推すね。 2行目は同意。
- 486 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 23:08:04 ]
- デストラクタとはいいところをつくね。
RAII 万歳!
- 487 名前:デフォルトの名無しさん [2008/04/10(木) 23:25:35 ]
- friendかな
- 488 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 23:58:56 ]
- >>485 == >>486 ??
- 489 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:01:31 ]
- デストラクタの価値が分からないうちは
プログラマの資格なしだぜ
- 490 名前:485 mailto:sage [2008/04/11(金) 00:03:01 ]
- >>488
ID出ない板だからどうしようも無いけど、 違うとだけ。
- 491 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:14:49 ]
- デストラクタはクリティカルセクション解除するのに使ってる。
メモリリークどころの騒ぎじゃない
- 492 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:17:31 ]
- Javaとかどーやってんだ?
デストラクタ
- 493 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:20:23 ]
- Javaはcloseとかdisposeとかメソッド作って
呼び出さないといけないんじゃなかったっけ?
- 494 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:25:56 ]
- Javaはデストラクタ勝手に作ってくれるから。
DB接続とかファイルハンドルにクリティカルセクションだの なんでも閉じてくれる。
- 495 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:28:48 ]
- 前スレから
pc11.2ch.net/test/read.cgi/tech/1200044614/496- 496 :デフォルトの名無しさん [sage] :2008/02/15(金) 14:44:30 つまるところc++ではデストラクタに頼るべき。 497 :デフォルトの名無しさん [sage] :2008/02/15(金) 14:54:04 C++はつまるところデストラクタのことだからな closeさせといてガベージコレクタがあるとか抜かす言語は笑えるな intは回収できるが巨大なファイルリソースはリークするわけだ 498 :デフォルトの名無しさん [sage] :2008/02/15(金) 15:06:22 日本語でおk 499 :デフォルトの名無しさん [sage] :2008/02/15(金) 15:08:34 >closeさせといてガベージコレクタがあるとか 禿げあがる程同意。 C#はusing(o1,o2,...){}があるから多少マシだけど、 forみたいにusing用のスコープ作るから スコープ違いが混じるとネストして見辛くなる。 どう考えてもc++みたいに対象の変数のスコープでDisposeした方が良いと思う。 javaのtry-finally-closeに至っては論外。 しかもcloseで例外出たらfinally内で潰さないと try内で発生したより重要な例外が消されるし・・・。 500 :デフォルトの名無しさん [sage] :2008/02/15(金) 16:33:04 >どう考えてもc++みたいに対象の変数のスコープでDisposeした方が良いと思う。 そして言語はC++/CLIへと進化するのであった、まる
- 496 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:34:08 ]
- Javaをはじめ、メジャーな言語のGCはメモリ不足しか認識しないから、
明示的にcloseしない場合、メモリに余裕があればfinalizeは呼ばれず、 DB接続も閉じられない そしてコネクションプールのタイムアウトで死に始める業務アプリ 鳴り始めるサポートデスクの電話機達
- 497 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:39:21 ]
- まぁJavaなんてマーケット戦略で広まっただけのうんこ言語だからな・・・
プログラマと名乗るくらいならC++くらいできる頭を持って欲しい・・
- 498 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:59:54 ]
- finalize()でリソース解放なんて保険でしかないからな
- 499 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:00:32 ]
- リソース管理で似た話を読んだことある気がしてたけど思い出せた
ttp://mag.autumn.org/Content.modf?id=20050506023118
- 500 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:00:40 ]
- でもね、C++は巨大で複雑怪奇だからね。Cを引きずってる面もあるし。
無駄を削ぎ落として細部を明確にした言語が望まれるというのもわかるよ。 それとGCの有用性とは別の話だが。
- 501 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:03:52 ]
- 実はVBなんかも
リソース周りは優秀だったりする
- 502 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:26:11 ]
- continuationを明示的に扱えない言語はうんこ
- 503 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:26:35 ]
- scheme習いたてですか?
- 504 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:55:30 ]
- >>503
C++習いたてです。
- 505 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 07:46:34 ]
- C#のusingの使いづらさは異常
scopedとでもして識別子が入ってるブロックの最後でdisposeしてくれたほうがよかった
- 506 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 08:50:00 ]
- 素朴な疑問です。
#include <iostream> struct S { virtual void hoge() = 0; // 純粋仮想のみ }; struct S1 : public S { void hoge() { std::cout << "S1" << std::endl; }}; struct S2 : public S { void hoge() { std::cout << "S2" << std::endl; }}; int main() { S1 s1; S2 s2; S& r1 = s1; S& r2 = s2; r1.hoge(); r2.hoge(); r1 = r2; // 基本クラスの参照を代入 r1.hoge(); r2.hoge(); return 0; } VC8で上記のコードを実行すると S1 S2 S1 S2 と表示されました。 r1 = r2;はS::operator=を呼ぶだけなので何も変わらない、と理解したのですが、 これはC++的に正しい挙動なのでしょうか? それとも未定義でたまたまこうなっているだけなのでしょうか?
- 507 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 08:55:40 ]
- あ、改行を削ったらコメントをミスりました。
> struct S { virtual void hoge() = 0; // 純粋仮想のみ }; は > struct S { virtual void hoge() = 0; /* 純粋仮想のみ */ }; です。
- 508 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 08:56:43 ]
- 単純に、自動生成されたoperator=(S, S)で仮想関数テーブルが書き換わらないようになってるだけ。
- 509 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 08:57:18 ]
- s1, s2のうちSの部分だけがコピーされた、と解釈すればわからんでもない
- 510 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 09:00:15 ]
- とりあえず解決するには自分でS2 operator=(S, S)を定義すればいいように思えるが、
それはS = Sの一般的な代入に関して考えるとかなり狂っているから諦めろって言う話でっていう
- 511 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 12:27:47 ]
- >>498
同意。finalizeって呼ばれるとは限らないとか。ほんとに気休め程度だね。
- 512 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:29:20 ]
- >>506
代入や他オブジェクトでの初期化でvptrは変更されない。
- 513 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 15:56:17 ]
- class A { friend class B; int x; };
class B { class C {}; }; VC8.0 では class C から class A の x が参照できますがこれは C++ の仕様ですか?
- 514 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 19:00:01 ]
- Cのreadableなプログラムを自動生成するメタ言語みたいなの
ないでしょうか? readableじゃないのならあるのですが、読めないと意味ないのです
- 515 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 16:01:17 ]
- 具体例を。
- 516 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 16:08:22 ]
- まともなCソースも >>514 には、readable じゃなさそうだ...。
- 517 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:17:27 ]
- vector<int>で何個か反復子を進めたあと、
それが今何番目の要素なのかを知る関数はないですか?
- 518 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:20:51 ]
- >>517
std::distance
- 519 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:21:19 ]
- i - v.begin();
- 520 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:55:08 ]
- できました、ありがとうございます。
- 521 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:34:09 ]
- mag.autumn.org/Content.modf?id=20050506145337
ここ読むとC++よりもJAVAのほうがリソース管理に関して 優れているように思えるんだけど
- 522 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:42:17 ]
- だから何だよ
- 523 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:46:30 ]
- 優れているというかパフォーマンスを犠牲にしてリソース管理の安全性を高めたという方が近いかな。
そんな事いったらC++も保守性を犠牲にパフォーマンスを高める余地のある言語と言えるけど。 ただJavaの場合は“余地”どころかプログラマに選択をさせない完全な“切捨て”であるけどね。 だからプログラマが手段を選択できる余地の残っているC++の方が優れている。終了。
- 524 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:49:22 ]
- 手段を選択する必要のある場面においては、だけどな。
- 525 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 02:15:33 ]
- javaってfinallyの書き方間違えると死ねるしなあ
という話が >>495 にあるよ jdbcでoracle使ったことがある人は知ってると思うけど、 closeし損ねるとリークしてそのうち動かなくなるんだよね これを注意深く追ってると、「なんだかCでやってんのと変わらんなあ」 と思うぜ、実際。
- 526 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 02:27:32 ]
- だってメモリしか管理してくれないもの
- 527 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 07:08:37 ]
- >521
「RAIIが発明されるまでのC++」については、Javaのほうが リソース管理が優れていた、と云わざるを得ない、けどねぇ。
- 528 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 07:25:04 ]
- 他のリソースも管理してくれればいいのになあ。
ファイルハンドルが足りない時には ファイルクラスのインスタンスへのガベコレを 優先的にやってくれるとか。
- 529 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 10:47:50 ]
- >>527
> 「RAIIが発明されるまでのC++」 って具体的に何を指すの? RAII ってプログラミング ポリシーだと思うんだけど。「発明」されたっていまいちピンと来ない。
- 530 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 11:04:02 ]
- RAII が浸透してない C++ って感じのことを言いたいんじゃないか?
未だに RAII を取り入れない C++ があるとは信じられないのかもしれないが。
- 531 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 12:21:55 ]
- >>528
デストラクタを活用するべき
- 532 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 12:25:18 ]
- javaの話だろ
- 533 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 12:50:09 ]
- >>527
C with class の話ですか? C++は初期のARMがかかれた頃から散々言われていますけど。
- 534 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:05:47 ]
- >>529
強いて言えば、テンプレートがなかった頃には、 auto_ptrや(削除子付きの)boost::shared_ptrのような 汎用的なものは作りづらかったと思う。 それでも、fstreamみたいに個別に作っていく手があったはずだけど。
- 535 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:38:58 ]
- なんでそこで糞設計のstreamを持ち出すかなー
- 536 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:33:50 ]
- とりあえずデストラクタでcloseしてくれるからいいだろ。
今は糞設計かどうかなんて関係ない。
- 537 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:13:37 ]
- 自分のクラスにiteratorをアタッチ
するにはどうすればよいの?
- 538 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:45:20 ]
- >>537
クラスって新しい container 作ってんの? 普通に vector とかにオブジェクト入れて iterator 使うとかいう話 じゃないんだよね?
- 539 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 02:36:34 ]
- >>537 アタッチの意味がわからん。
- 540 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 07:56:33 ]
- Rubyみたいにアタッチしたいんだけど
なんでできないの?
- 541 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 08:59:06 ]
- だからアタッチって何だよ
- 542 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 09:20:53 ]
- ウラララララーって叫ぶやつじゃね?
- 543 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 16:55:57 ]
- それは、アパッチ
- 544 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 16:56:46 ]
- >>543
叫ぶやつはジェロニモだ
- 545 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 17:24:27 ]
- だってオラは人間だから
- 546 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 21:52:48 ]
- テンプレートクラスとクラステンプレートの違いを教えてエロい人!!
- 547 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 21:58:18 ]
- クラステンプレートを使って作られたクラスがテンプレートクラス
- 548 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:09:23 ]
- 何か詳しく書かれたサイトがあれば貼っていただきたいです。
- 549 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:14:51 ]
- お前誰だよ
- 550 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:20:43 ]
- つーか言葉にこだわってどーすんの
テンプレート勉強すりゃわかることだろうに
- 551 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:32:59 ]
- ヒントがあれば十分だろ。
自分で考えて解決する楽しさを知らないやつは(ry
- 552 名前:551 mailto:sage [2008/04/15(火) 22:33:53 ]
- >>551
誤爆しました。ごめんなさい、
- 553 名前:デフォルトの名無しさん [2008/04/15(火) 22:36:31 ]
- 輪講で必要なんです。
わかりにくかったので聞いてみました。
- 554 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:43:22 ]
- >>552
流れとしてはわりと的を射ている気がするw
|

|