■過去ログ置き場に戻る■ 1- 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part16
1 名前:v(^・^)v :03/02/20 22:04
C++に関する質問はこちらへどうぞ。
ただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。

過去スレ、関連スレ、関連リンクなどはこちら>>2-15

2 名前:v(^・^)v :03/02/20 22:04
■基本■
[Stroustrup]
禿 http://www.research.att.com/~bs/
C++に関するリンクの総本山でもあります。

[C++ Final Draft International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf

[JTC1/SC22/WG21 - C++]
http://std.dkuug.dk/jtc1/sc22/wg21/
規格書の重箱の隅的な話題などが読めます。

[C/C++ Users Journal]
http://www.cuj.com/
[Object Management Group]
http://www.omg.org/
[Association of C & C++ Users]
http://www.accu.org/

[news]
news:comp.lang.c++
news:comp.lang.c++.moderated

[ML]
cppll(日本語) http://www.trickpalace.net/cppll/
メインページにC++に関する良質なC++日本語リンク集があります。

3 名前:v(^・^)v :03/02/20 22:04
■Document■

C++FAQ Lite http://www.parashift.com/c++-faq-lite/
C++FAQ(日本語) http://www.bohyoh.com/CandCPP/FAQ/
Cとその仕様を比較しながらの解説なので分かりやすい。
*** 質問の前に必ずこの二つに目を通してください ***

[STL]
STL Programmer's Guide http://www.sgi.com/tech/stl/
日本語としてはおそらくここ。ただしリファレンス的内容。
http://www.wakhok.ac.jp/~sumi/stl/

[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~g940455/wp/
news news:gmare.comp.lib.boost.devel

4 名前:v(^・^)v :03/02/20 22:05
■Books■
amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/(翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/(翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/(翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/(翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/(翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/(翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/(翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/(翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/

5 名前:v(^・^)v :03/02/20 22:05
■Compiler■
[GCC]
http://gcc.gnu.org/
(Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
1.0 http://www.microsoft.com/japan/msdn/netframework/downloads/sdk.asp
1.1βhttp://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/MSDN-FILES/027/002/056/msdncompositedoc.xml
[MSVC] コンパイラ以外のツール、ドキュメントです。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
(一括ダウンロードの時は上のURLに続けてこちらを入力してください
default.htm?p=/msdownload/platformsdk/sdkupdate/psdk-full.htm)

なお上記三者を組み合わせたプログラミングにおいてはこちらが分かりやすいです。
http://www.geocities.com/Tokyo/Ginza/5432/documents/winprog/index.html

[DigitalMars]
http://www.digitalmars.com/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm

6 名前:v(^・^)v :03/02/20 22:05
■Libraries■
Boost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
LokiPort
MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
MSVC6.0 SP5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

ACE/TAO http://www.cs.wustl.edu/~schmidt/
Network、Thread、ORBなどのポータブルなライブラリ
Blitz++ http://www.oonumerics.org/blitz/
数値計算ライブラリとして人気がある、らしい
spirit http://spirit.sourceforge.net/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ

他ライブラリリンク集
http://www.trumphurst.com/cpplibs/cpplibs.phtml

7 名前:v(^・^)v :03/02/20 22:05
■過去スレ■
Part1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
Part9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
Part10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
Part11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
part12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
part13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
part14 http://pc2.2ch.net/test/read.cgi/tech/1041328679/l50
part15 http://pc2.2ch.net/test/read.cgi/tech/1043605481/l50


■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc2.2ch.net/test/read.cgi/tech/1037795348/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
STLスレッド
part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html

8 名前:デフォルトの名無しさん :03/02/20 22:15
乙かれ

9 名前:v(^・^)v :03/02/20 22:19
■関連スレ(環境依存の話題)■
[GCC]
GCCについて http://pc2.2ch.net/test/read.cgi/tech/1007731543/l50
祝・GCC 3.0リリース http://pc.2ch.net/test/read.cgi/unix/992942337/l50
[Digital Mars]
Code of the Nerds" Digital Mars C/C++
http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[Borland]
C++Builder相談室
part1 http://piza2.2ch.net/tech/kako/969/969458279.html
part2 http://pc.2ch.net/tech/kako/997/997074601.html
part3 http://pc3.2ch.net/tech/kako/1016/10160/1016065855.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1035596146/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1045542179/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1030493157/l50
[VisualC++]
VisualC++相談室
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc2.2ch.net/test/read.cgi/tech/1036897197/l50

10 名前:v(^・^)v :03/02/20 22:20
VisualC++(MFC限定)相談室 MFC6.dll
http://pc2.2ch.net/test/read.cgi/tech/1039607377/l50
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
COM の世界を斬る!
http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
ATL 相談室
http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
managed C++ やろうぜ!!
http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50



>>8 連続6回までしか書けないみたい。thanks

11 名前:デフォルトの名無しさん :03/02/20 22:27
v(^・^)v

12 名前:デフォルトの名無しさん :03/02/20 22:29
v(^・^)v ぉっ

13 名前:デフォルトの名無しさん :03/02/20 22:31
We're like morning sun〜♪

14 名前:デフォルトの名無しさん :03/02/21 00:36
心擦れ鬱枯れー

15 名前:デフォルトの名無しさん :03/02/21 18:09
STLつかうと一気に実行ファイルサイズが10倍に?!

16 名前:デフォルトの名無しさん :03/02/21 19:24
こら!もう!すぐ調子に乗るんだから〜

17 名前:デフォルトの名無しさん :03/02/21 20:26
>>15
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

18 名前:デフォルトの名無しさん :03/02/22 08:09
>>17
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

19 名前:仕様書無しさん :03/02/22 08:41
>>17
環境じゃなくて最適化の結果によるだろ。
STL のコードが全部インライン展開されるなら、オブジェクトファイルサイズは
リンクの形態と無関係に膨れ上がる。。

20 名前:デフォルトの名無しさん :03/02/22 09:23
static変数を関数中で宣言すると、関数が呼び出されるたびに毎回初期化されてるか否かの条件分岐
するんだよな。

21 名前:デフォルトの名無しさん :03/02/22 14:44
C++の言語仕様やライブラリは一応覚えたつもりなんですが、
次に実際のプロジェクトの設計やコードを見て勉強したいと考えています。

VC++のオープンソースプロジェクトでソースや設計が比較的綺麗なものってありませんか?

22 名前:デフォルトの名無しさん :03/02/22 14:46
Apache

23 名前:v(^・^)v :03/02/22 14:51
>>20
ハァ?

24 名前:デフォルトの名無しさん :03/02/22 15:13
>>18>>19
いや、本当なんだってば(汗。
-vi オプションを付けるとインライン展開を使ってくれるが、
それでもファイルサイズは膨れあがったりしないよ。
ちなみに -D_RTL_DLL を外して -vi オプションを付けた時と
付けない時でファイルサイズを比較しても、そんなに大きな
差はない。

25 名前:デフォルトの名無しさん :03/02/22 15:15
ところで、>>18さんの意見はどういう意味でしょうか?

> ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。

この部分がよくわかりません。DLLを使えば、元々スタティックリンクされる
はずだったコードがDLLに追い出されるので、その分ファイルサイズが
小さくなるという意味で書いたのですが。

26 名前:デフォルトの名無しさん :03/02/22 15:17
std::vectorとDLLの関係もイマイチわからん

27 名前:デフォルトの名無しさん :03/02/22 16:00
>>26
STLはDLLに追い出せてないと思います。何せテンプレートで、コンパイル時
にしかわからないものばかりのはずですから。

ただ、インライン展開を抑制しても有効にしても、STLを使った時と使わない時
でファイルサイズが10倍も違ったりはしません。

28 名前:デフォルトの名無しさん :03/02/22 16:01
まぁ、VC++はstd::stringとかstd::wstringをDLLに置いてたりするが。

29 名前:デフォルトの名無しさん :03/02/22 18:34
C++やってみたいんだけど、何がこれでできるんですか?

30 名前:デフォルトの名無しさん :03/02/22 18:36
汎用的なソフトウェアの構築

31 名前:デフォルトの名無しさん :03/02/22 19:12
凡庸的なソフトウェアの構築

32 名前:デフォルトの名無しさん :03/02/22 19:13
>>29
物凄い気持ちいいオナニ。
辞められなくなってサルになるよ。
そして実際の子作りは永遠に遠のいた夢となります。

33 名前:デフォルトの名無しさん :03/02/22 19:16
砂粒でまとめ上げて城を築けます。

34 名前:デフォルトの名無しさん :03/02/22 21:53
すげえな・・・C++って・・。シェンロンみたい。

35 名前:デフォルトの名無しさん :03/02/22 22:38
>>28
何度も言っているが、
「Visual C++はC++ではない。」
誤解無きよう。

36 名前:デフォルトの名無しさん :03/02/22 22:41
>>35
ハァ?

37 名前:デフォルトの名無しさん :03/02/22 22:42
アフォ?

38 名前:デフォルトの名無しさん :03/02/22 22:45
VC++はC++のスーパーセットだ。
お分かりか?

39 名前:デフォルトの名無しさん :03/02/22 22:49
VC++厨、必死だな。

40 名前:デフォルトの名無しさん :03/02/22 22:59
いや、サブセットだろ。標準満たしてないし

41 名前:デフォルトの名無しさん :03/02/22 23:00
標準仕様に完全準拠し、かつバグのないコンパイラなど存在しない。

42 名前:デフォルトの名無しさん :03/02/22 23:01
点プレも実体化しておけばDLLに置けまっせー

43 名前:デフォルトの名無しさん :03/02/22 23:01
>>41
解決努力の有無が重要だよな。

44 名前:デフォルトの名無しさん :03/02/22 23:04
製品名なんだからスーパーセット、サブセットって話には
ならないと思うんだけどな。

45 名前:デフォルトの名無しさん :03/02/22 23:08
この文脈ではVC++はMSの実装したコマンドラインコンパイラを意味するだろ。

46 名前:デフォルトの名無しさん :03/02/22 23:36
これでいいの?

47 名前:デフォルトの名無しさん :03/02/22 23:51
>>42で思い出したが、最近テンプレートの使われている
ライブラリをビルドして.lib作って普通に別のプログラムで
ヘッダだけインクルードしてそのスタティックライブラリを
リンカに読ませてビルドできるんだけど、OKなんだよね?

48 名前:デフォルトの名無しさん :03/02/22 23:56
>>47
アフォですか

49 名前:47 :03/02/23 00:16
>>48
実体化してない状況でlibはおっけー?という話なんだが
その辺を聞きたい。

50 名前:デフォルトの名無しさん :03/02/23 00:27
実体化されてようがされてまいが、exportされてない限りtemplateの
実体はお前がincludeしたヘッダの中にあるだろうが。

51 名前:デフォルトの名無しさん :03/02/23 00:28
47はtemplateを定義したのか、それとも使っただけなのか。
前者ならコードのサイズはゼロだからlib,a,dllは作れない。
(staticの実装は別)で後者ならもうそれは立派なクラスだから
libでも、aでも、dllでも、oでも好きにするがいい。

52 名前:デフォルトの名無しさん :03/02/23 12:50
int f(){hogehoge} と int g(){hogehoge} という2つの関数があって、コンパイルした結果が同じだとしたら
最適化で f==gになるんだろうか?

53 名前:デフォルトの名無しさん :03/02/23 13:02
>>52
VC6だとテンプレートの展開結果については
まとめてくれることがあるみたい。
.mapファイル吐かせたら、複数のシンボルが同じアドレスになってた。

54 名前:デフォルトの名無しさん :03/02/23 16:55
C++でIEのhtmlファイルに書かれている文字列を
取得して表示させたいんだが どんな感じで書けばいいんだろう。
初心者な質問でごめんなさい・・・

55 名前:デフォルトの名無しさん :03/02/23 17:01
I〜略〜2::toString();

56 名前:デフォルトの名無しさん :03/02/23 21:26
クラスの生成時にmemsetを使ってメンバ変数を初期化する場合

class A
{
int hoge_a[10];
char hoge_b[20];


public:
 A(){memset( this , 0 , sizeof(A));}

};

このような使い方は有りでしょうか?
さらにメンバにvirtual関数があった場合も使用しても問題ないのでしょうか?


57 名前:デフォルトの名無しさん :03/02/23 21:28
>>56
アァ・・・ (; ´Д`)

58 名前:デフォルトの名無しさん :03/02/23 21:32
>>56
ついでに言うと、Cのお馬鹿な文化はC++には持ち込むなと。

59 名前:デフォルトの名無しさん :03/02/23 22:06
>Cのお馬鹿な文化
オブジェクトインスタンスを生成時に0で埋めるのはまともなOOPLでは常識なわけだが。

60 名前:デフォルトの名無しさん :03/02/23 22:36
エッ・・・ (; ゚Д゚)

61 名前:デフォルトの名無しさん :03/02/23 23:02
>>56
sizeof(A)は本当にクラス内の変数の大きさだけを返すのだろうか。

62 名前:デフォルトの名無しさん :03/02/23 23:06
thisやselfを0やnullで埋めてるソースなんて見た事無いが。

63 名前:デフォルトの名無しさん :03/02/23 23:10
どうしてもthisを弄くりたかったら、offsetofでも使うしかないな。

64 名前:デフォルトの名無しさん :03/02/23 23:11
std::vectorとか使えばよかろうに・・・

65 名前:デフォルトの名無しさん :03/02/23 23:16
自分が持ってるメンバを責任持って初期化するのは当然だとは思うが。
でも、ここ1年ぐらい生の配列メンバに持ったクラスなんか書いてないな。

66 名前:デフォルトの名無しさん :03/02/23 23:18
超初心者ですが、ただのC++と、Visual C++ってちがうんですか?

67 名前:デフォルトの名無しさん :03/02/23 23:23
人生初心者は (・∀・) カエレ!!

68 名前:デフォルトの名無しさん :03/02/23 23:26
>>61
virtual関数があるとsizeof(A)は正確な値を返さなかったね、たしか

69 名前:デフォルトの名無しさん :03/02/23 23:26
>>56
C++では無理。

>>62
そりゃそうだ普通は言語レベルで勝手に0で埋めるからね。
この動作はもちろんオーバーヘッドが大きいのは間違いないけど
つまらないバグの発生を抑えてくれる。
ヒープやローカル変数の未初期化領域を参照できてしまうなんてあってはならないことだ。

70 名前:デフォルトの名無しさん :03/02/23 23:27
class A {
char buf[10];
public:
virtual void func() {}
};

たとえばこれで sizeof(A) が 10 を返す処理系は少ないだろう。
memset(&a, 0, sizeof(A)); なんてしたら、とっても嫌〜なヨカン。

71 名前:デフォルトの名無しさん :03/02/23 23:29
>>68
ハァ?

72 名前:デフォルトの名無しさん :03/02/23 23:33
>>71
おまえが( ゚Д゚)ハァ?

73 名前:デフォルトの名無しさん :03/02/23 23:42
「俺が知っている値」==「正確な値」

74 名前:デフォルトの名無しさん :03/02/23 23:47
と言うわけで、C++では横着せずに、地道に各メンバーを初期化しましょう。

75 名前:デフォルトの名無しさん :03/02/23 23:50
newの実装をcallocに変更







すると余計なバグが増えそうだな

76 名前:デフォルトの名無しさん :03/02/23 23:53
つまり使っていいかどうか分からないでFA?

77 名前:デフォルトの名無しさん :03/02/24 00:04
te

78 名前:デフォルトの名無しさん :03/02/24 00:06
各メンバの初期化って基本型だけでいいだろ。
基本型以外はその型のコンストラクタで初期化されてるはず。

79 名前:デフォルトの名無しさん :03/02/24 00:08
皆が使っているプログラミングソフトを教えてくれ。

80 名前:デフォルトの名無しさん :03/02/24 00:09
オブジェクトのポインタを宣言して
obj *a,*b;
b->x = 1;
*a=*b;
としたとき、a->x = 1
となるのは当然として
a=b となってポインタも同じところを
指すようになりますか?



81 名前:デフォルトの名無しさん :03/02/24 00:12
>>56
vtbl へのポインタを隠しメンバに持ってたりするからね。
0で埋めたらエライことに。

82 名前:デフォルトの名無しさん :03/02/24 00:15
>>80
なりません

83 名前:デフォルトの名無しさん :03/02/24 00:21
>>78
いやそれは分かるんだが、>>56の使い方をしてバグなんかの問題は
ないかって事に関しての答えはどうなん?

84 名前:80 :03/02/24 00:24
>>82
どうしても、そうなっちゃうんだけど・・・。
>>80の続きで
メンバ関数が
func()
{x=2;}
として

a->func();
とするとa->x=2となってしかも
b->x=2となっちゃうんだけど、何で?




85 名前:デフォルトの名無しさん :03/02/24 00:25
C++の設計思想にいたく賛同した奴が、
急にCコンパイラのみの環境に放り込まれたときに陥る罠を列挙してください。

とりあえず、スコープの途中で変数定義してエラーになるのは思い出した。

86 名前:デフォルトの名無しさん :03/02/24 00:26
>>84
同じインスタンスを指してるからだろ。

87 名前:デフォルトの名無しさん :03/02/24 00:27
>>85
newとコンストラクタがなくてメンバを初期化できず鬱。

88 名前:デフォルトの名無しさん :03/02/24 00:28
>>85
void*の恐怖が蘇る。

89 名前:80 :03/02/24 00:29
>>86
*a=*b
でポインタも同じところを指すようになるってこと?

90 名前:デフォルトの名無しさん :03/02/24 00:30
>>85
つい struct キーワードを忘れてしまう

91 名前:デフォルトの名無しさん :03/02/24 00:30
>>84
なりません。

struct A {
int x;
A() { x = 2; }
};

int main()
{
A* a = new A;
A* b = new A;

*b = *a;
a->x = 3;
std::cout << b->x << std::endl;
delete a; delete b;
}

92 名前:デフォルトの名無しさん :03/02/24 00:35
>>85
//でコメントを書く、ってのはC99だと罠にならないか…

とりあえず、sizeof('a') == 2

93 名前:デフォルトの名無しさん :03/02/24 00:37
>>85
スマートポインタが無くてリソースの解放し忘れ多数。

94 名前:80 :03/02/24 00:37
>>91
確かにならんな〜。
何で俺のはなるんだ?


95 名前:デフォルトの名無しさん :03/02/24 00:38
>>80 でていけ。

96 名前:デフォルトの名無しさん :03/02/24 00:41
>>94
短いソースなら貼り付けてみれ。

97 名前:デフォルトの名無しさん :03/02/24 00:42
>>85
STLが無くて、基本的なアルゴリズムを思い出せずに鬱

98 名前:デフォルトの名無しさん :03/02/24 00:43
>>91
*b = *a;
a->x = 3;

 を

a->x = 3;
*b = *a;

にしたらどうなるかな?

99 名前:80 :03/02/24 00:44
>>96
void main( )
{
one_image *in_image = new one_image;
one_image *noise_image;
one_image *median_image = new one_image;

in_image->load_image_data();
noise_image = in_image;
noise_image->make_noise();
*median_image = *noise_image;
int code = median_image->median();

最後の行をやっても*noise_imageに影響ないはずなんだけど
一緒に変わってしまう。何で?


100 名前:デフォルトの名無しさん :03/02/24 00:44
>>98
そりゃ変わるっしょ。当たり前。 

101 名前:デフォルトの名無しさん :03/02/24 00:46
>>99
多分コピーコンストラクタが書かれてないからだと思う。
メンバにポインタとか持ってないか?

102 名前:80 :03/02/24 00:49
>>101
クラスの定義は下だけど、*imageに問題があるってこと?

class one_image
{
protected:
int x_size, y_size;
unsigned char *image;
public:
one_image();
one_image(int HSize, int VSize);
one_image(struct base_image *base);
virtual ~one_image();
void load_image_data();
void save_image_data();
void set_imagedata(struct base_image *base);
void make_noise();
int median();

};


103 名前:98 :03/02/24 00:50
コピーコンストラクタじゃなくて
operator=

 ・・・だとおもう

104 名前:デフォルトの名無しさん :03/02/24 00:50
>>102
その通りです。デフォルトのコピーコンストラクタは単なる
ビットのコピーなので、ポインタは考慮してくれません。

105 名前:デフォルトの名無しさん :03/02/24 00:50
( ´-`).。oO(one_image・・・どこかで見た事がある・・・)

106 名前:デフォルトの名無しさん :03/02/24 00:51
代入演算子が書かれてないからか。

107 名前:デフォルトの名無しさん :03/02/24 00:54
これと同じことが起こっている。

struct A {
int* x;
A() { x = new int(0); }
void func() { *x = 2; }
};

int main()
{
A* a = new A;
A* b = new A;

*b = *a;
a->func();
std::cout << *a->x << std::endl;
std::cout << *b->x << std::endl;
delete a;
delete b;
}

108 名前:80 :03/02/24 00:55
>>104
ちょっと調べてみましょう。原因が分かったことだし。
>>105
たぶん同一人物でしょう。前も書いたことあるから。


109 名前:デフォルトの名無しさん :03/02/24 00:56
これで解決。めでたしめでたし。

struct A {
int* x;
A() { x = new int(0); }
void func() { *x = 2; }
int operator=(const A& a) {
return *x = *a.x;
}
};

int main()
{
A* a = new A;
A* b = new A;

*b = *a;
a->func();
std::cout << *a->x << std::endl;
std::cout << *b->x << std::endl;
delete a;
delete b;
}

110 名前:デフォルトの名無しさん :03/02/24 00:57
ていうか、vector<unsigned char> を使えば万事解決じゃん?

111 名前:デフォルトの名無しさん :03/02/24 00:57
デフォルトのコピーコンストラクタがビットのコピーですって?
全部の要素について operator= でしょう?

112 名前:デフォルトの名無しさん :03/02/24 00:58
>>111
スマソ。コピーコンストラクタは関係ないわ。

113 名前:98 :03/02/24 01:01
なんとなく delete する順番が気になってるのは自分だけ?
a,b って作ったら b,a って消したくなる

114 名前:デフォルトの名無しさん :03/02/24 01:03
>>111
コピーコンストラクタがoperator=ですって?

115 名前:デフォルトの名無しさん :03/02/24 01:03
>>113
その方が何かメリットあればそうする。何かあったっけ。

116 名前:デフォルトの名無しさん :03/02/24 01:04
コピーコンストラクタが呼び出されるのはどういう場合かを述べよ。

117 名前:98 :03/02/24 01:04
>>114
そもそもコピーコンストラクタなんて
どこでも呼ばれていないけど

118 名前:デフォルトの名無しさん :03/02/24 01:04
>>115 bがaに依存する場合。

119 名前:デフォルトの名無しさん :03/02/24 01:06
>>113
依存性があろうがなかろうがいちいち考えるのが面倒なのでデフォルトでそうしてる。

120 名前:デフォルトの名無しさん :03/02/24 01:07
>>118
そしたらaがbに依存してたらやっぱりaを先に消すわけだね。

121 名前:デフォルトの名無しさん :03/02/24 01:08
コピーコンストラクタは次のような場合呼ばれる。

A a;
A b(a); // コピーコンストラクタが呼ばれている

122 名前:デフォルトの名無しさん :03/02/24 01:09
>>120
その場合b, aの順に生成するだろ。
いつも依存性と生成順序ばらばらにしてるの?

123 名前:デフォルトの名無しさん :03/02/24 01:11
>>122
そうではない。俺は出てきた順にdeleteしている、ただそれだけだよん。

124 名前:98 :03/02/24 01:11
>>121
引数が一つでexplicitが無いと
暗黙の型変換としても呼ばれるよ

125 名前:デフォルトの名無しさん :03/02/24 01:17
結論。メンバにポインタを持っていたら、自前のoperator=と
コピーコンストラクタを書こう。でよろしいか?

126 名前:デフォルトの名無しさん :03/02/24 01:19
> one_image(struct base_image *base);
> void set_imagedata(struct base_image *base);
こんなのがあるなら、本当は浅いコピーがやりたい可能性も十分ある。


127 名前:デフォルトの名無しさん :03/02/24 01:19
operator=は次のように書いた方がいいと思うが。

struct A {
int* x;
A() { x = new int(0); }
void func() { *x = 2; }
A& operator=(const A& a) {
*x = *a.x;
return *this;
}
};

int main()
{
A* a = new A;
A* b = new A;

*b = *a;
a->func();
std::cout << *a->x << std::endl;
std::cout << *b->x << std::endl;
delete b;
delete a;
}

128 名前:デフォルトの名無しさん :03/02/24 01:20
prototype pattern?

129 名前:デフォルトの名無しさん :03/02/24 01:22
>>111
配列メンバも operator= なのかと小一時間

130 名前:98 :03/02/24 01:28
>>127
受け取るのにconst付けたなら
返すのにもconst付けたら?

131 名前:デフォルトの名無しさん :03/02/24 01:31
>>130
Effective C++の15項に、operator=の返り値はconstにしない方が
良いという内容があるよ。

132 名前:デフォルトの名無しさん :03/02/24 01:35
>>131
constの意味わかってる?
何でわざわざ禁止にするのか
その上でもう一回読んでみて

133 名前:デフォルトの名無しさん :03/02/24 01:39
>>132
A a, b, c;
(a = b) = c;
というコードが通らないようにconstをつけ人がいるらしいけど、
int i, j, k;
(i = j) = k;
は通るので、組み込み型との互換性を無くさないように、
operator=の返り値はconstにしないのだと書いてある。

134 名前:デフォルトの名無しさん :03/02/24 01:40
こんな糞議論をしなきゃいけないような糞言語は今後二度とつかわねーと叫びながら町内を走り回りたい気分でいっぱいです。

135 名前:デフォルトの名無しさん :03/02/24 01:42
>>134
そこが慣れるとたまらなく快感になる。

136 名前:98 :03/02/24 01:46
>>133
スマソ
勘違いしてた
組込型は通るコードだったんだ

137 名前:デフォルトの名無しさん :03/02/24 01:47
この仕様はC言語互換のためなのかな?

138 名前:デフォルトの名無しさん :03/02/24 01:50
>>137
そうかもしれないが、Effective C++の著者は相当パラノイアだな(w

139 名前:デフォルトの名無しさん :03/02/24 01:53
ふむ。で、その書き方は何の役に立つの?

140 名前:デフォルトの名無しさん :03/02/24 01:54
>>139
役には立たんだろ。ただ意図しないエラーが出なくなる、それだけの
ような気が。

141 名前:98=137 :03/02/24 01:55
>>139
そんなこと全然考えてなかった
何かの役に立つのかな?

142 名前:バク転キッカー ◆O1dBMUxvmo :03/02/24 01:58

  ま  さ  に  本  末  転  倒

143 名前:デフォルトの名無しさん :03/02/24 01:59
ぶはは。

144 名前:デフォルトの名無しさん :03/02/24 03:00
>>137
少なくともVC++の場合、Cとしてコンパイルすると
>error C2106: '=' : 左のオペランドが、左辺値になっていません。

となるが。

145 名前:デフォルトの名無しさん :03/02/24 03:18
>>144
VC++はANSI-Cにすら準拠してないのです。
ご愁傷様。

146 名前:デフォルトの名無しさん :03/02/24 04:57
Cで=演算子は左辺値を返さない。>>144で正しい

147 名前:デフォルトの名無しさん :03/02/24 08:11
>>139
void set_str( const CString& s ) {
 (m_str=s).TrimLeft()TrimRight().MakeLower();
}
とか、代入演算子に限らず自分を書き換えるだけのメソッドは全て
自分への参照を返すように決めておくと何かと便利。

148 名前:デフォルトの名無しさん :03/02/24 08:51
const CString &なのに?

149 名前:デフォルトの名無しさん :03/02/24 08:53
書き込んだ直後に間違いに気づく。 ●5点

150 名前:デフォルトの名無しさん :03/02/24 09:07
m_strの型、というかのoperator = の結果型がわからんので何とも言えぬ気が

151 名前:147 :03/02/24 09:17
>>150
「operator=の結果型をconstじゃない参照にする書き方は
何の役に立つか?」 に対するレスのつもりだったので、そこんとこは
推測して頂きたいわけだが。

152 名前:デフォルトの名無しさん :03/02/24 13:56
http://qb.2ch.net/test/read.cgi/accuse/1046017091/215

IDがC++
カコイイ

153 名前:デフォルトの名無しさん :03/02/24 15:38
AV電話相談室
アダルトビデオについて質問のある方大募集!!
料金は無料!!
TEL 046-239-1539

154 名前:デフォルトの名無しさん :03/02/24 16:44
private継承って皆さん使ってますか?
俺は使う場面がよくわからないので使ってないのですが。

155 名前:デフォルトの名無しさん :03/02/24 18:11
このような事ができるとすれば、純粋仮想関数の意味が
なくなってしまうような気がするのですが・・・・・俺だけ?

struct Base {
virtual void who() = 0;
};

struct Derived : public Base {
void who() {}
};

void Base::who() {
std::cout << "純粋仮想関数のメンバ関数だよん" << std::endl;
}

int main()
{
Derived d;

d.Base::who();
}

156 名前:デフォルトの名無しさん :03/02/24 18:15
>>155
Baseのインスタンスは作成できないから意味がある。

157 名前:デフォルトの名無しさん :03/02/24 18:27
VC7/istream でカンマ区切りのデータを読み込もうと考えたのですが、
ロケールの関係で数字を読み込むとカンマが桁区切り記号と誤認されてしまい読み込みに失敗してしまいます。
STLのコードを見た限りではoperator>>は問答無用で桁区切りを読み込むようになっており、
動作を変更するオプションは見当たりませんでした。

,を読み込まない関数を書くのは簡単ですが毎回それではスマートさに欠けます。
何か標準で用意されている方法はあるでしょうか?

158 名前:デフォルトの名無しさん :03/02/24 18:32
>>154
継承したいメンバを制限する時。
単独ではあまり役に立たないが、アクセス宣言と共に使うと
必要なメンバだけ引っ張り出せる。

159 名前:デフォルトの名無しさん :03/02/24 18:46
>>157
こんなのは?

int main()
{
std::ifstream ifs("comma.txt");

while (true) {
char buf[128];
ifs.getline(buf, sizeof(buf), ',');
if (!ifs) break;
std::cout << std::atoi(buf) << std::endl;
}
}

160 名前:デフォルトの名無しさん :03/02/24 19:06
>>154

例えば次のような事ができる。意味論的にどうなるのかは知らないが。

struct Base {
int i;
int j;
int k;
};

class Derived : private Base {
using Base::i;
protected:
using Base::j;
public:
using Base::k;
};

161 名前:デフォルトの名無しさん :03/02/24 19:14
>>160
この場合 using Base::i; は冗長だね。
ただ次のような事をすると usingがないとエラーが出る。

struct Base {
int i;
int j;
int k;
};

class Derived : private Base {
// using Base::i;
protected:
using Base::j;
public:
using Base::k;
Derived(int ii) : i(ii) {} // エラー
Derived() { i = 1; }
};


■過去ログ置き場に戻る■ 1- 最新50
DAT2HTML 0.33f Converted.