2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part21

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

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

2 :デフォルトの名無しさん:03/07/07 21:15
2get...?

3 :v(^・^)v:03/07/07 21:16
■基本■
[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++日本語リンク集があります。

4 :v(^・^)v:03/07/07 21:16
■Document■

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

[STL]
http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
Standard Template Library プログラミング on the Web
リファレンス的内容。http://www.wakhok.ac.jp/~sumi/stl/
STL Programmer's Guide http://www.sgi.com/tech/stl/
[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
news news:gmare.comp.lib.boost.devel

5 :v(^・^)v:03/07/07 21:16
■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/

6 :v(^・^)v:03/07/07 21:16
■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/library/default.asp?url=/downloads/list/netdevframework.asp
[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/
[OpenWatcom]
http://www.openwatcom.org/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm

7 :v(^・^)v:03/07/07 21:17
■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/
数値計算ライブラリとして人気がある、らしい
antlr http://www.antlr.org/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ

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

8 :v(^・^)v:03/07/07 21:21
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/tech/kako/1041/10413/1041328679.html
part15 http://pc2.2ch.net/tech/kako/1043/10436/1043605481.html
part16 http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html
part17 http://pc2.2ch.net/tech/kako/1047/10475/1047560042.html
part18 http://pc2.2ch.net/tech/kako/1050/10501/1050177746.html
part19 http://pc2.2ch.net/test/read.cgi/tech/1052625846/
part20 http://pc2.2ch.net/test/read.cgi/tech/1055162298/

9 :v(^・^)v:03/07/07 21:30
■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
part1 http://pc2.2ch.net/tech/kako/1037/10377/1037795348.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50

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

10 :v(^・^)v:03/07/07 21:31
■関連スレ(環境依存の話題)■
[GCC]
GCCについて
part1 http://pc2.2ch.net/tech/kako/1007/10077/1007731543.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1046179115/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/tech/kako/1035/10355/1035596146.html
part5 http://pc2.2ch.net/tech/kako/1045/10455/1045542179.html
part6 http://pc2.2ch.net/test/read.cgi/tech/1054280736/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/tech/kako/1030/10304/1030493157.html
[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/tech/kako/1036/10368/1036897197.html

11 :v(^・^)v:03/07/07 21:31
初心者にVisual C++を教えるスレ
part1 http://pc3.2ch.net/tech/kako/1023/10235/1023530449.html
part2 http://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
part3 http://pc2.2ch.net/tech/kako/1038/10381/1038160750.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1044196393/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1048698321/l50


VisualC++(MFC限定)相談室 MFC7.dll
http://pc2.2ch.net/test/read.cgi/tech/1047949606/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

12 :デフォルトの名無しさん:03/07/07 21:46
オツカレーション

13 :デフォルトの名無しさん:03/07/07 21:56
>>1
乙。

14 :デフォルトの名無しさん:03/07/08 00:11
インスタンス化された関数テンプレートのポインタを取得したいのですが、以下の書き方ではエラーになります。
template<typename T> void func() { hoge };
void (*ptr)();
ptr = func<A>; // error: void(void) から void (__cdecl*)(void) に変換できません。
ptr = &func<A>; // 同上

どのように書けばよいでしょう?
VC++6.0 SP5 です。

15 :デフォルトの名無しさん:03/07/08 00:15
>>14
func<A>とかfunc<B>とかは全部オーバーロードされた関数として
扱われるので、明示的にキャストなどが要るはず。
 ptr = (void(*)()) &func<A>;

16 :デフォルトの名無しさん:03/07/08 00:33
>>15 ありがとうございます。
しかし、駄目でした。
error: '' から 'void (__cdecl *)(void)' に変換することはできません。

空欄の型とはいったい。コンパイラのせいなのかな。
駄目そうだったらおとなしく仮想関数を使います。

17 :デフォルトの名無しさん:03/07/08 00:44
>>16
これは
typedef void pf();
pf p= fn<int>;
p();

18 :oisn:03/07/08 00:44
>>1
また前スレの1さんでつか?
乙でし!
またよろしくおながいいたしますm(__)m

19 :デフォルトの名無しさん:03/07/08 00:44
>>18
ふざけんな!

20 :デフォルトの名無しさん:03/07/08 00:45
pf *p = fn<int>の間違い

21 :18:03/07/08 00:48
>>19
どこがふざけとるん?

22 :デフォルトの名無しさん:03/07/08 00:50
VC7で
void (*pf)();
pf=func<int>;
これはコンパイルできないけど

void (*pf)()=func<int>;
これはコンパイルできる。なんで?

23 :デフォルトの名無しさん:03/07/08 00:57
>>21
> また前スレの1さんでつか?

24 :デフォルトの名無しさん:03/07/08 00:59
>>17
駄目でした。
最初のエラーと同じ 'void(void)' から 'void(__cdecl *)(void)' に変換できません。

特殊化を定義しておくと通ったりしてちょっと謎。
template<> func<A>() { hage }
ptr = func<A>; // OK
コンパイラのせいかな?

25 :21:03/07/08 01:00
>>23
勝手な思い込みでした。気分害してスマソ。
新スレありがとう。。。

26 :デフォルトの名無しさん:03/07/08 01:01
>>25
ネタだけどな。
つーかなんでそう思ったん?
名前欄か?

27 :デフォルトの名無しさん:03/07/08 01:03
>>24
確実にコンパイルできる方法

template <class T> struct foo{ static void bar(){/*hoge*/} };

void (*pf)();
pf=foo<int>::bar;

28 :26:03/07/08 01:05
>>25
v(^・^)vさんをコテハンだと思いますたTT
いつもこのスレには本当にお世話になり、頼りに
しています。(自分は会社勤務ではないため
聞く人がいないのです。といってMLは恥ずかしくて聞けないTT)
これからもよろしくです。。。


29 :デフォルトの名無しさん:03/07/08 01:07
v(^・^)v←決まり事だと思ってた

30 :名無し@沢山:03/07/08 01:08
ヌヒよ、おれを頼りにしろ。

31 :デフォルトの名無しさん:03/07/08 01:08
VBの質問スレはv(^・^)bなのになんでここはc(^・^)c
とかc(+・+)cじゃないの?

32 :デフォルトの名無しさん:03/07/08 01:10
>>27
無事通りました。この方法でいってみたいと思います。
ありがとうございました。

33 :c(^p^)p:03/07/08 01:37


34 :デフォルトの名無しさん:03/07/08 01:48
c(pp^)

35 :デフォルトの名無しさん:03/07/08 11:35
STLつかうと一気に実行ファイルサイズが10倍に?!

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

37 :デフォルトの名無しさん:03/07/08 11:39
>>36
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

38 :デフォルトの名無しさん:03/07/08 11:43
あれ、このやりとりどっかで見たような気が……deja vu?

39 :デフォルトの名無しさん:03/07/08 12:05
>>38
恒例のやりとりですね。

40 :デフォルトの名無しさん:03/07/08 12:30
ヌヒよ、STLぐらいでガタガタいってたら
boostはどうすんだよ。

41 :デフォルトの名無しさん:03/07/08 12:44
>>40
ドタドタする

42 :デフォルトの名無しさん:03/07/08 15:49
VC7.1にしたらwarning C4244が大量に出てきて鬱だよママン…

43 :デフォルトの名無しさん:03/07/08 17:24
>>39
ああ。なんか前にもあったな。

44 :デフォルトの名無しさん:03/07/08 17:26
>>42
すげえ。VC7.1にしといてwarning C4244が大量に出てきたとかいってるよ。この人。

45 :デフォルトの名無しさん:03/07/08 18:49
>>44
そんな事言われても出たもんは出たんだよヽ(`Д´)ノ ウワァァァン
まぁあんまりその辺気にせずにVC6を使ってた漏れが悪いが…

46 :デフォルトの名無しさん:03/07/08 19:03
http://me.bird.to/hakoniwa/files/hakowai020.lzh

一応C++

47 :名無し@沢林:03/07/08 23:00
しまった。デジャブーにのりおくれた・・・

48 :名無し@沢森:03/07/08 23:07
沢○が大量発生だな。おい。

49 :デフォルトの名無しさん:03/07/09 00:21
僕の名前はエンポリオです。

50 :デフォルトの名無しさん:03/07/09 08:12
次作「ラン・タイム・エラー」でお会いしましょう。(飛呂彦)

51 :デフォルトの名無しさん:03/07/09 11:25
          Z
_____(-∀- )__
_│_│_│_│_│
│_│_│_│_│_          ポイント♪
_│_│_│_│_│
│_│_│_│_│_     (・∀・ )⌒ヽ⌒ヽ⌒ヽ


           
          
_____Σ(-∀・ )_
_│_│_│_│_│
│_│_│_│_│_        ポイントカード オモチデスカ?
_│_│_│_│_│
│_│_│_│_│_    (・∀・ )⌒ヽ⌒ヽ⌒ヽ



_____Σ(;・Д・)_
_│_│_│_│_│
│_│_│_│_│_        
_│_│_│_│_│        ・・・ポイント10バイ!
│_│_│_│_│_    □⊂(・∀・ )


52 :デフォルトの名無しさん:03/07/09 11:57
糞スレ化の危機により緊急age
質問カモ〜ン

53 :デフォルトの名無しさん:03/07/09 12:00
質問:C++って死滅しちゃうの?

54 :デフォルトの名無しさん:03/07/09 15:28
じゃあ俺が問題を出してやる

0<x<2などの複数回比較を可能にするクラスmulticomparisonと
そのヘルパ関数mcompを作成しろ。これによって次の例が可能になる
0<mcomp(x)<3、mcomp(x)==y==z

55 :デフォルトの名無しさん:03/07/09 15:39
>>54
http://pc2.2ch.net/test/read.cgi/tech/1047970129/814-825

56 :デフォルトの名無しさん:03/07/09 19:53
>>54
http://www.trickpalace.net/cxx/dagger/tips.h

57 :デフォルトの名無しさん:03/07/09 21:40
あったよ♪

http://akipon.free-city.net/page003.html

http://endou.kir.jp/betu/linkvp/linkvp.html

58 :デフォルトの名無しさん:03/07/09 23:27
いつからかわからんけど、ム板つまんなくなったよね。

59 :デフォルトの名無しさん:03/07/09 23:31
>>58
スレタイを10000回復唱汁。

60 :デフォルトの名無しさん:03/07/10 02:07
ちと教えてたもー。
基本クラスAとその派生クラスBがあったとします。
A* p = new B;
delete p;
という風に書きたい場合はAのデストラクタを仮想関数にするのでいいのでしょうか?

61 :デフォルトの名無しさん:03/07/10 02:14
>>60
Yes

62 :デフォルトの名無しさん:03/07/10 02:15
>>60
その通り。

というか、特殊な事情がない限り
デストラクタは仮想関数にしておいた方が無難。

特殊な事情ってのは、
派生クラスを作る予定が全くない、
よほどパフォーマンスやデータサイズが気になる、
とか。

63 :60:03/07/10 02:33
>>61-62
ありがd。

勉強になりました。
派生する価値のあるクラスが書けるかどうかはおいておくとしてとりあえず癖につけておきます。

64 :デフォルトの名無しさん:03/07/10 03:31
>>60
そうしないと未定義

65 :デフォルトの名無しさん:03/07/10 07:03
>>60
Aのサイズでヒープを開放しようとするのでヒープ領域が破壊される
ヨカーン。

66 :デフォルトの名無しさん:03/07/10 07:07
>>62
えーやだなー

67 :デフォルトの名無しさん:03/07/10 09:30
質問お願いします。

あるデータに関するクラスAがあり、
そのクラスのオブジェクトを集約リストとして持っているクラスBが別にあります。
クラスAのオブジェクトは、全てそのリストで管理されています。
クラスBは他に妥当なクラスがないという消極的な理由から、クラスAのリストを保持してます。

そこでお尋ねしたいのですが、このリストに対する操作(ソートや全検索など)を
実装する場合、それをクラスBのメンバ関数とするのと、クラスAの静的メンバ関数に
するの、どちらが妥当でしょうか?

68 :デフォルトの名無しさん:03/07/10 09:33
えっと別スレで聞いたのですが説明なしで自己満足で終わられたみ
たいなのでこのスレに投げます。

SYOTI_F( char * ) test_time SYORI_P(( const time_t *tp, char *buf ));

とGCCで書いてあるヘッダをC++Builderでコンパイルすると
[C++ エラー] test.h(38): E2293 ) が必要

となるのですがこれはSYOTI_F( char * ) を返り値とした関数
の宣言と考えて良いでしょうか?

69 :デフォルトの名無しさん:03/07/10 09:37
>>67
そのリストがどこに所属しているかによる。

クラスAの設計の一部として(クラスAが成り立つために必須)存在しているのならクラスAのメンバにすべき。

それとも、クラスAは単独で存在できるけど、たまたま今回のプログラムではそれをリスト上で管理しているのならクラスBのようなコレクションクラスのメンバにすべき。

70 :デフォルトの名無しさん:03/07/10 09:44
>>68
おそらくSYOTI_FとSYORI_Pはマクロだと思うが、それが定義されていないためのエラーってことはない?


71 :デフォルトの名無しさん:03/07/10 09:45
>>68
× SYOTI_F
○ SYORI_F
のタイプミスが原因に 1000 ガバス。

72 :67:03/07/10 09:53
>>69
レスありがとうございます。なるほど、
リストというデータの帰属を問えば良いのですね。

今回の私のケースは、69さんの二行目に反するようです。
(二行目の様にリストの内包が必須なクラスを、今ちょっと想像出来なくて、少しだけ不安ですが)

ですのでBのメンバにしようと思います。御陰で吹っ切れました。重ね重ね感謝です。

73 :デフォルトの名無しさん:03/07/10 09:57
>>70
定義って#define以外に?

74 :デフォルトの名無しさん:03/07/10 09:59
>>68
こっちにも書いとく。

>えっと別スレで聞いたのですが説明なしで自己満足で終わられたみ
>たいなのでこのスレに投げます。

回答してくれる人をなんだと思ってるんだ?
おまえの質問に答えてやるためだけに常駐してるとでも思ってるの?

75 :デフォルトの名無しさん:03/07/10 10:02
>>74
意味の通らないことを散々書いておいて、突然はたと居なくなるのが
自己満足以外のなんだというんですか?w
質問者に礼儀が必要なのはもちろんですが、回答者にだって必要かと..ww

76 :デフォルトの名無しさん:03/07/10 10:03
C++には、VBのStrConv関数のようにSHIFT-JISをUnicodeに変換する関数はないのでしょうか?
以下のような関数を自作できないこともないとは思いますが。
if((fi=fopen(source,"rb"))!=NULL)
if((fo=fopen(target,"wb"))!=NULL){
printf("Start conversion\n");
fputc(255,fo);
fputc(254,fo);
while((c = fgetc(fi))!=EOF){
後略


77 :デフォルトの名無しさん:03/07/10 10:04
分かっている事ばかり答えてもらってもしかたなか(-.-)
分かっている事ばかり答えてもらってもしかたなか(-.-)
分かっている事ばかり答えてもらってもしかたなか(-.-)

78 :デフォルトの名無しさん:03/07/10 10:05
俺は68がまったく意味不明なんだが

79 :デフォルトの名無しさん:03/07/10 10:05
相互リンク
http://pc2.2ch.net/test/read.cgi/tech/1054280736/491-

80 :デフォルトの名無しさん:03/07/10 10:07
>>75
あのね質問に全部答えても解答がでてないの〜^^;


81 :デフォルトの名無しさん:03/07/10 10:09
ウンコ野郎にマジレスしちまった・・・鬱

>>79
被害の拡大を防いでくれてありがとう

82 :デフォルトの名無しさん:03/07/10 10:10
>>75
>突然はたと居なくなるのが

あたりまえ。おまえみたいに暇な人ばかりじゃない。

83 :デフォルトの名無しさん:03/07/10 10:11
>>80
みすだ

84 :デフォルトの名無しさん:03/07/10 10:12
>>81
答える事ができないのに偉そうなのがむかつく

85 :デフォルトの名無しさん:03/07/10 10:17
>>81
分からないのに偉そうにあれを調べろこれを調べろ
って時間の無駄〜他の人にしないで下さいね

86 :デフォルトの名無しさん:03/07/10 10:21
>>76
標準C++には無いよ
ライブラリかOSの機能をつかうべし

87 :デフォルトの名無しさん:03/07/10 10:39
>>86
行いたい機能から関数を逆にたどるのがむずかしいのですが、
Borland C++ Compiler 5.5のライブラリの中にはSHIFT-JISをUnicodeに変換する関数などはないのでしょうか?

88 :デフォルトの名無しさん:03/07/10 10:40
>>76
mbstowcs 関数というのがある。
ヘッダファイルは cstdlib 。
ただし、Shift-JIS を使っている OS に限る。

89 :デフォルトの名無しさん:03/07/10 10:47
>>88
wchar_tがうにコードとは限らな(略

90 :デフォルトの名無しさん:03/07/10 14:01
>>88
mbstowcs()とwcstombs()がありました。ありがとうございました。

91 :デフォルトの名無しさん:03/07/10 14:17
Cを始めて勉強するのにお勧めな本はありますか?

92 :デフォルトの名無しさん:03/07/10 14:18

昔、私がTemplateすれに貼り付けたもの。
C++ でワイド文字をマルチバイト文字列に変換

std::localeloc( "japanese" );
std::locale::global( loc );

std::wstring source( L"(・∀・)" );
std::string result( source.size()*2, char() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.narrow( &*source.begin(),&*source.end(),'?',&result[0]);

std::wcout << L"wide : " << source << std::endl;
std::cout << "narrow : " << result << std::endl;

結果
wide  : (・∀・)
narrow : (・∀・)

マルチバイト文字列からワイド文字列へは、

std::string source( "(・∀・)" );
std::wstring result( source.size(), wchar_t() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.widen( &*source.begin(),&*source.end(),&result[0]);

VCで確認済みだが、他の環境(UNIXとか)では知らん


93 :92:03/07/10 14:23
こぴぺミス。

×std::localeloc("japanese");
○std::locale loc("japanese");

他にもミスあるかも…

94 :デフォルトの名無しさん:03/07/10 14:45
>>92
VC++7.0 では期待通り動くけど、
VC++7.1 じゃ表示がおかしくなるね。

なんか違うのかな?

95 :デフォルトの名無しさん:03/07/10 17:57
前スレ>>944
http://pc2.2ch.net/test/read.cgi/tech/1055162298/944
亀レスだけど

typedef Typelist<class1,Typelist<class2,Typelist<class3,NullType> > > ClassList;

class Base{
public:
    virtual int GetID()=0;
    virtual ~Base(){}
};
template <typename classname>
class BaseImpl:Base{
    int GetID(){
        return IndexOf<classname>::value;
    }
};
class class1:public BaseImpl<class1>{
};

96 :デフォルトの名無しさん:03/07/10 17:57

class AbortType{
public:
    AbortType(){abort();}
};
class Factory{
public:
    Base * Create(int ID){
        switch(ID){
        case 0:return new TypeAtNonStrict<ClassList,0,AbortType>::Result;
        case 1:return new TypeAtNonStrict<ClassList,1,AbortType>::Result;
        case 2:return new TypeAtNonStrict<ClassList,2,AbortType>::Result;
        //...
        }
        //static Base * (*Funcptr[ClassList])()={TypeAtNonStrict<ClassList,0,AbortType>::Result::operator new(),
        //TypeAtNonStrict<ClassList,1,AbortType>::Result::operator new()};
        abort();
    };
};
Factoryはperlとか使って出力しておく。
templateスレへ行けとか言われそうな気もするけど思いついたので。
typelistとかTypeAtとかも書くと長くなりそうなので省略


97 :デフォルトの名無しさん:03/07/10 18:49
>68
そう考えてよい。以上。

98 :デフォルトの名無しさん:03/07/10 19:02
UTF8でファイルの読み書きしたい場合、C++標準ライブラリとかありますか?

99 :デフォルトの名無しさん:03/07/10 19:04
標準には存在しない。

100 :デフォルトの名無しさん:03/07/10 19:57
>>96
そういうときこそpreprosessor-metaprogrammingだ

101 :デフォルトの名無しさん:03/07/10 22:33
>>98
あつかっている文字が始めから最後までUTF8なら
通常の読み書きの関数をそのまま使えば済む話だけど、
具体的にどういうことがしたいの?

102 :デフォルトの名無しさん:03/07/10 23:08
初心者の質問ですみませんが、以下のコードがg++でコンパイル時にエラーとなります。
何故でしょうか?static をはずすか、又はコンストラクタ内で static メンバ
にアクセスしないようにすると問題無くコンパイルが通ります。

% g++ a.cpp
/tmp/ccC2TuDO.o: In function `Hoge::Hoge(void)':
/tmp/ccC2TuDO.o(.Hoge::gnu.linkonce.t.(void)+0x5): undefined reference to `Hoge::x'
collect2: ld returned 1 exit status



103 :102続き:03/07/10 23:08
#include <stdio.h>

class Hoge {
static int x;
public:
Hoge() { x = 0; }
void SetHoge(int a) { x = a; }
int GetHoge() { return x; }
};

class Hoge2 {

Hoge hoge;
int y;
public:
Hoge2() { y = 0; }
Hoge2(int b) { y = b; }
void SetHoge2(int a) { y = a; }
int GetHoge2() { return y; }
};
main()
{
Hoge2 hoge2;
printf("%d\n", hoge2.GetHoge2());
}


104 :デフォルトの名無しさん:03/07/10 23:09
どこにもプログラムコードが無いんだが

105 :104:03/07/10 23:09
すんまそ、勇み足ですた。

106 :104:03/07/10 23:12
>>103
Hoge() { Hoge::x = 0; }
void SetHoge(int a) { Hoge::x = a; }
int GetHoge() { return Hoge::x; }

こうすればOK

107 :デフォルトの名無しさん:03/07/10 23:23
>>104-106
もちつけ(;´Д`)とりあえずニラ茶でも飲んでだな・・・

>>103
Hoge クラスを宣言し終わった後らへんに
int Hoge::x = 0;
としてやるべし。静的メンバは,クラスの外のどこかで
実体とでも言うべきモノを定義してやる必要がある。

108 :名無し@沢山:03/07/10 23:26
>>102
ヌヒよ、それはコンパイル時のエラーちゃうやん。コンパイルは通ってるやん。

109 :102:03/07/11 00:51
どもです。

>>104さん
そのようにやってみた所、やはり同様のエラーがでてしまいますた。(;;)

>>107さん
確かに外側で初期化したら通りました!ありがとうございました。
しかし何故外で再?定義してやらないといけないのか今一分かりません。

>>108
正確でなく、すみません。リンカーの方ですた。


110 :102:03/07/11 00:52
あうっ


>>108


>>108さん


111 :デフォルトの名無しさん:03/07/11 01:38
>>109
クラス定義の中に書いてるのは変数の定義じゃなくてただの宣言。
これがもし定義だったらどうなるか考えてみれ。
軒並みシンボルの重複でリンクエラーになるぞ。

112 :デフォルトの名無しさん:03/07/11 10:06
VC++ .NET + DirectXの質問ですが、適切なスレが無さそうなのでここで質問させて頂きます。

VC++ .NETでDirectX 9.0 SDKについていたサンプルプログラムをビルドしようとしているのですが
DirectPlayを使用するプログラムはビルドすることが出来ません。
その際表示されるエラーメッセージが
「ChatPeer fatal error LNK1181: 入力ファイル 'dplay.lib' を開けません。」
というようなものです。

VC++ .NETの方ではインクルードファイル、ライブラリファイルともパスは通してあります。
ただパスを通したディレクトリに 'dplay.lib' ファイルはやはり無いんですよね。
'dplayx.lib' とは全く別物のようですし。

どなたか分かる方がいましたらよろしくお願いします。

113 :デフォルトの名無しさん:03/07/11 10:10
> 適切なスレが無さそうなので
ハァ?

114 :デフォルトの名無しさん:03/07/11 10:52
無くてもリンクできる。以上。

115 :112:03/07/11 11:13
>>114
しかし実際エラーが出てしまいます。
IDEのバージョンを一応記載しておきます。
VC++ .NET Standard 2003です。

116 :デフォルトの名無しさん:03/07/11 11:14
削れといっている。以上。

117 :デフォルトの名無しさん:03/07/11 11:15
いいよもう、すれ違いなんだから、無視しようよ。

118 :デフォルトの名無しさん:03/07/11 11:22
もしかしてやり方がまずいのでしょうか。
IDE起動後、
ファイル→
開く→
プロジェクト→
(例えばaddressoverride.vcprojを選択後)開く

その後
ビルド→
ソリューションのビルド

ここでコンパイルエラーになります。

>>116
もう少し詳しく言ってくださるとありがたいです。

119 :デフォルトの名無しさん:03/07/11 11:32
厚顔無恥とはよくいったもんだ( ´∀`)

120 :デフォルトの名無しさん:03/07/11 11:32
>>118
鬱だ氏のう DirectX (Part 9)
http://pc2.2ch.net/test/read.cgi/tech/1054553472/


121 :112:03/07/11 11:34
>>120
こんなスレがあったのですね。誘導ありがとうございます。
どうもご迷惑をおかけしました。


122 :デフォルトの名無しさん:03/07/11 15:41
>>119
葉夏至区同意。

123 :デフォルトの名無しさん:03/07/11 19:24
>>100
#define MAX_FACTORY_SIZE 100
#define MACRO01(dummy,i,arg2) case i:return new TypeAtNonStrict<ClassList,i,AbortType>::Result;
//template <int i>struct int2int{
//    enum{value=i};
//};

class Factory{
public:
    Base * Create(int ID){
        switch(ID){
        BOOST_PP_REPEAT(MAX_FACTORY_SIZE,MACRO01,arg2_dummy)
        //BOOST_PP_REPEAT(int2int<100>::value,MACRO01,arg2_dummy)
        }
        abort();
    };
};
さらに手を加えればより使いやすくなるだろうけど
ただ、Factoryのサイズをdefineで定義しないといけないけど。


124 :デフォルトの名無しさん:03/07/11 19:42
PP最高!!!

125 :デフォルトの名無しさん:03/07/12 20:47
Cを勉強せずにC++をマスターすることは可能ですか?

126 :デフォルトの名無しさん:03/07/12 20:58
>>125
マスターすることは不可能。
でも使うことはできる。

127 :デフォルトの名無しさん:03/07/12 21:05
完璧なマスターは不可能だけど
C++でプログラムを組むことは可能ということですね?
ありがとうございました。
がんばります。


128 :デフォルトの名無しさん:03/07/12 21:38
結果的にC++を熟知する頃にはCをかなり深く理解しているだろうね。
CとC"++"だけあって、C++の勉強が、そのままCの勉強ことであったりするだろうし。
個人的には、Cをある程度かじってからのほうが近道のように感じる。

129 :デフォルトの名無しさん:03/07/12 22:15
C++は初心者が引っかかりそうな事項が多いからなぁ

130 :デフォルトの名無しさん:03/07/12 22:21
でも一方で、初心者が引っかかりそうなポインタなんかを後回しに勉強出来る
から良いって見方もあったりもするわけで。

131 :デフォルトの名無しさん:03/07/12 23:09
参照は便利だよなぁ。

132 :デフォルトの名無しさん:03/07/12 23:41
参照とポインタの違いは?

133 :デフォルトの名無しさん:03/07/12 23:49
>>132
知らないのか?
納豆にネギを刻むと美味いんだ。

134 :デフォルトの名無しさん:03/07/12 23:52
山椒とボニータの違いは??

135 :デフォルトの名無しさん:03/07/12 23:54
>>131
今年は7/25が土用丑か

136 :デフォルトの名無しさん:03/07/13 00:29
梅干も食わねえとな

137 :デフォルトの名無しさん:03/07/13 00:41
関数ポインタを参照(゚д゚)ウマー

138 :デフォルトの名無しさん:03/07/13 00:44
土用丑の日に鰻なんて、
平賀源内の思惑に乗っちゃだめだ!

139 :デフォルトの名無しさん:03/07/13 02:00
int main() {
int *p;
int a=100;

p=&a;

func(p);

return 0;
}

void func( int &aaa ) {
cout << aaa << endl;
}

error C2664: 'func' : 1 番目の引数を 'int *' から 'int &' に変換できません。

参照にポインタを渡す方法はありますか?

140 :デフォルトの名無しさん:03/07/13 02:01
func(*p);

141 :デフォルトの名無しさん:03/07/13 02:09
>>140
あ、うまくいきましたー。
あれー?
さっき同じ事やった時はコンパイラとおらなかったんだが
勘違いだったかな
ありがとうございました

142 :デフォルトの名無しさん:03/07/13 03:16
class Test{
public:
    //...
    Test & operator=(int arg){
        //...
        return *this;
    }
};

まあこれも同じことで。


143 :バッファ:03/07/13 03:17
winsock2 を使っているのですが
struct Request {
int v;
char *n;
char *a;
} req = {1,"sample","sample"};

という構造体を送信データバッファとして

send(s, (char*)&req,sizeof(Request), 0);

と書いて送信するのは正しいでしょうか?




144 :デフォルトの名無しさん:03/07/13 04:24
>>143
ポインタを送信しても意味が無いと思われ。

145 :デフォルトの名無しさん:03/07/13 11:57
>>144
スレッド間通信に使ってるのかもしれないじゃん(和良

146 :デフォルトの名無しさん:03/07/13 15:06
'あ' みたいな2バイト長の文字定数って、やっぱり、標準ではみとめられて
ないのかな? 実際には(警告はでるけど)たいていのコンパイラで使える
みたいだけど。これを使って、

// 文字列コンバータのファンクタ
template<int C> struct Converter {
string operator()( const char* s );
};

// ソースがEUCで書かれている場合
template<> struct Converter<0xa4a2> { // 0xa4a2 == EUC('あ')
string operator()( const char* s );
};

// このソースの文字コード用のコンバータ
typedef Converter<(unsigned short)'あ'> ConverterT;

int main()
{
string s = ConverterT()( "あいうえお" );
}

みたいなことをやりたいんだけど…


147 :デフォルトの名無しさん:03/07/13 15:12
>>146
L'あ' (wchar_t型)だべ

148 :デフォルトの名無しさん:03/07/13 16:03
visual studio 2003は
C++の例外指定に対応した?

149 :デフォルトの名無しさん:03/07/13 16:07
ANSI C++ 規格と
ISO C++ 規格はなにが違うの?


150 :デフォルトの名無しさん:03/07/13 16:12
>>148
どういうこと?
例外指定ってexception-specificaation?
void hoge() throw(std::runtime_error) {...}とかこういうやつ?
記述はVC6の頃から通ったと思うが。

記述されていない例外を投げるとunexpected()が呼ばれる動作とか
してなかったんだっけ?

151 :デフォルトの名無しさん:03/07/13 16:12
windows環境での最強のC++コンパイラは
実質 VS .net 2003に付属する
コンパイラってことになっちまった?

152 :デフォルトの名無しさん:03/07/13 16:13
>>151
exportは無いけど、総合的にはそうなってしまったようだ

153 :デフォルトの名無しさん:03/07/13 16:14
>>150

いや、warningだよ。
文法的に解釈はしてくれてるようだけど、
実装はされていないよ。

154 :デフォルトの名無しさん:03/07/13 16:16
throw(type)
The function can throw an exception of type type. However, in Visual C++ .NET, this is equivalent to throw(...).

まだ対応してない模様

155 :デフォルトの名無しさん:03/07/13 16:20
VS.NET 2003のmsdn library見ると:

Function exception specifiers other than throw() are parsed but not used. For example:

void f() throw(int); // parsed but not used
void g() throw(); // parsed and used
For more information on exception specifications, see Exception Specifications.

ほんとだ。

156 :デフォルトの名無しさん:03/07/13 16:36
>>155

thanx

157 :デフォルトの名無しさん:03/07/13 18:28
>>149
昔は ANSI(アメリカ国内) だけでやってたのを ISO(国際) で標準化するようになったってだけ。
ISO/ANSI C++ とかいう言い方することもあるし。


158 :146:03/07/13 19:19
>>147
> L'あ'
g++ 3.2.2 だと warning: character constant too long とかいわれますね。
それに、L をつけると元の EUCなりSJISなりではなくなってしまう気が。

159 :デフォルトの名無しさん:03/07/13 23:36
>>158
g++で比較すんな!

160 :デフォルトの名無しさん:03/07/14 00:22
柴田望洋の「プログラミング講義 C++」を買ってきました。
明日からちょっとづつ読むことにします。

161 :デフォルトの名無しさん:03/07/14 00:27
望洋さんはいいよねー。
「Cのエキスパート」感があって、安心できる。
俺も奴の本で勉強した。



162 :デフォルトの名無しさん:03/07/14 00:31
>>161
「望洋さん」と「奴」の組み合わせにワラタ

163 :デフォルトの名無しさん:03/07/15 09:09
class A
{
public:
 virtual ~A();
 int x;
};
A a[2];

↑という定義がある( A はPODではない)とき、↓の式の結果は定まりますか?

reinterpret_cast<int*>(reinterpret_cast<char*>(&a[0].x) + sizeof(A)) == &a[1].x

164 :デフォルトの名無しさん:03/07/15 09:34
>>163
定まる。
パディングとか考慮しても
sizeof (A) は a[0] と a[1] の距離と等しくなることが
確か保証されてた筈だから、
その要素間の距離も sizeof (A) で OK 。

int* → char* の変換でアドレスが変わるような特殊な環境でも
char* → int* の変換でちゃんと元に戻される...と思うので大丈夫。
こんな変な環境を使ってる人が今いるのかどうか知らんが。

165 :163:03/07/15 09:48
1.8 -5- に、
"An object of POD type shall occupy contiguous bytes of storage."
って書いてあるので、保証されてるのはPODだけだったりしませんか?

166 :デフォルトの名無しさん:03/07/15 10:06
int*とchar*でポインタ表現が異なる環境でもreinterpret_castで問題はないのですか?

167 :デフォルトの名無しさん:03/07/15 10:25
ポインタ表現が異なるの意味が分からんが、reinterpret_castはビット変化しないよ。

168 :166:03/07/15 10:29
ポインタ表現 -> 内部表現
でした。つまりソース表記上では同じアドレスでもint*とchar*とで内部表現が異なる環境で
reinterpret_castしても問題は起こり得ないのでしょうか?

169 :デフォルトの名無しさん:03/07/15 10:32
> ソース表記上では同じアドレス
やっぱり意味がわからん。

170 :デフォルトの名無しさん:03/07/15 10:36
俺も分からん。
>>166は「内部表現が異なる」の具体例を明示して説明すること。

171 :デフォルトの名無しさん:03/07/15 10:43
ageとこう。

172 :166:03/07/15 10:50
すまそ、寝ぼけてNULLポインタ周りの話(0の内部表現の話)とごっちゃになってます。頭冷やしてこよう。

173 :デフォルトの名無しさん:03/07/15 11:27
その調子じゃNULLポインタ周りも理解して無さそうだな。

174 :デフォルトの名無しさん:03/07/15 11:40
こういうことだろ

char *pc = hogehoge;
int *pi = reinterpret_cast<int *>(pc);
if ( sizeof(char *)!=sizeof(int *) && memcmp( &pc, &pi, sizeof(char *) ) )
{
piとpcは同じアドレスをさすが内部表現は違う
}

175 :174:03/07/15 11:42
すまん
&& -> ||

176 :デフォルトの名無しさん:03/07/15 11:49
それを内部表現というのか

177 :166:03/07/15 12:16
確認したいのですが>>174氏の例で、sizeof(char*)==sizeof(int*)を満たしているときは
memcmp(&pc,&pi,sizeof(char*))は常に0を返すと考えて良いのでしょうか。

178 :166:03/07/15 12:21
あれ何か違うな。memcmp確認。

179 :166:03/07/15 12:31
勘違いでした。
失礼。

180 :デフォルトの名無しさん:03/07/15 13:45
>>165
これは、例えば int の 4 バイト(の環境として)が
連続する 4 つのバイトに確保される、ということでは?

○ xxxxooooxxxxxxxx
× xxxxooxxoxxxoxxx

で、規格見つけた。

5.3.3 -2- より抜粋
When applied to a class, the results is the number of bytes
in an object of that class including any padding
required for placing objects of that type in an array.
クラスに(sizeof を)適用した場合の結果は、
配列として配置した場合に要求されるあらゆるパディングを含めた、
そのクラスのオブジェクトのバイト数になる。

181 :山崎 渉:03/07/15 14:04

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

182 :デフォルトの名無しさん:03/07/15 15:49
CTest test;
test.method();

と書いても

CTest pTest;
pTest = new CTest();
pTest->method();
delete pTest;

と書いても

結果おんなじですよね。

newする必要性を教えて下さい。


183 :デフォルトの名無しさん:03/07/15 16:00
>>182
その場合は new する必要性は無い。

>>177
http://www.catnet.ne.jp/kouno/c_faq/c5.html#6
> データの型が異なるとポインターの内部表現が異なるマシンがある
ので、常に 0 を返すとは限らない。

184 :182:03/07/15 16:51
おお。
やっぱり、単純な奴は必要ないのですね。

newの
必要性があるのは、
どんな時でしょうか?

内部パラメータが大きい時とかですか?
結局確保するんだから、さいしょから CTest test;でも、
いいような気がするんですが。

185 :デフォルトの名無しさん:03/07/15 16:55
>>184
そのオブジェクトを作る必要がそのときどきで異なるとき

186 :デフォルトの名無しさん:03/07/15 17:00
>>184
> 内部パラメータが大きい時とかですか?
CTest test; とすると(普通は)スタックに確保され、
new CTest; とすると(普通は)ヒープに確保される。
(普通は)スタックは小さく、ヒープは潤沢なので、
確かに巨大なものを確保する時には new を使う。

187 :デフォルトの名無しさん:03/07/15 17:01
今風に言えばフリーストアか? >ヒープ
律儀にフリーストアって言葉使ってる人いるけ?

188 : :03/07/15 17:24
テキストファイルをバッファに一度に読み込みたいのですがバッファのサイズはどうやって知るの?

char filename[] = "\C\Hello.txt";
std::ifstream f(filnename,std::in);

char* buf = new char[?];
int readsize = f.readsome(buf,?);
buf[?] = \0;

というのを考えたんですけどサイズ(?)はどうやって知るの?
Win32APIにファイルサイズ知るのがあるらしいけどファイルハンドルとか要求してきてよくわかりません。
なんか良い方法ありませんか?

189 :デフォルトの名無しさん:03/07/15 17:39
>>188
最後に seekg して tellg 。

190 :デフォルトの名無しさん:03/07/15 17:44
>>188
std::stringとか使えば?

#include <iostream>
#include <fstream>
#include <string>
#include <boost/lexical_cast.hpp>

main(){
std::ifstream ifs("Hello.txt");
std::string s=boost::lexical_cast<std::string>(ifs.rdbuf());
std::cout << s;
}

191 :デフォルトの名無しさん:03/07/15 18:11
>188
ファイルのサイズじゃなくて、バッファのサイズ?
ヘッダに書かれていると思う。




192 :188:03/07/15 18:47
>>189 >>190 >>191
みなさん、どうも有り難うございます。

>>189
なるほど、そうやればいいんですね。感謝。
>>190
すいません。boostライブラリはまだ自分にはちょっと無理なようです。
>>191
ファイルの内容を全部読み込みたいんです。
テキストファイルの場合は\nが2文字から1文字になる?とかあるとか読んだので
確かにファイルサイズじゃなくて全部読み込めるだけのバッファのサイズのほうが無駄がないのかな?
でもちょっとだけ大きくてもいいのでファイルサイズでもいいけど。
あとヘッダてファイルのヘッダという意味?ただのテキストファイルにもあるの?
それとも違うヘッダのことかな。


193 :デフォルトの名無しさん:03/07/15 18:59
バッファとは、「需要側と供給側の間に挟まって、緩衝の役目を果たすもの」を
指します。よって、「バッファのサイズ」とは、「緩衝用途に幾らメモリが割り当て
られているか」であり、「(iostreamの)バッファサイズ」なら、iostreamヘッダを
調べれば判る、という話でしょう。

194 :デフォルトの名無しさん:03/07/15 19:07
>>192
std::ifstream ifs("Hello.txt");
std::ostringstream ost << ifs.rdbuf());
std::string s=ost.str()
std::cout << s;


195 :188:03/07/15 19:19
>>188
std::inじゃなくてstd::ios::inだった。

196 :デフォルトの名無しさん:03/07/15 19:30
普通こうする
#include <iterator>
#include <fstream>

int main(int,char **av)
{
    ifstream in(av[1]);
    string s((istreambuf_iterator<char>(in)),
             istreambuf_iterator<char>() );
    cout<<s;
}


197 :名無し@沢山:03/07/15 20:33
>>196
ヌヒよ。そのコードは想像を絶するほど遅いぞ。

198 :  :03/07/15 21:33
>>191 >>193
すいませんでした。自分の言葉遣いがおかしかったですね。
特にC++の場合はバッファといえばストリームクラスが使ってるバッファのクラスになりますよね。
readやreadsomeの第2引数で指定する、ファイルのデータを読み込んで書き込む領域のこととして誤って使ってました。

>>194 >>196
charの配列に読み込むよりこっちの方がC++らしいですね。
参考にさせていただきます。ありがとうございました。

199 :デフォルトの名無しさん:03/07/15 22:26
>>197
想像を絶する遅さってどのくらいよ。
そんな低スペックな処理系でC++でプログラム組むんじゃねーよ。
それに、そんなBIGなファイルを一気に読みこもーなんて、ふつう、しないよ。

200 :デフォルトの名無しさん:03/07/15 22:41
C/C++でパフォーマンスを否定しちゃいかんよ

201 :デフォルトの名無しさん:03/07/15 23:35
>>197
istream_iteratorじゃなくてistreambuf_iteratorだぞ。

202 :スタパ風:03/07/15 23:55
>>200
最近はそーでもない。

と思ったが C/C++ ですか…。
俺は C++ で飯食ってますが、 C/C++ なんて言語の事は知らないしな。
とりあえず C++ は「ここは可読性低くていいからとにかく速く」と
「ここはメンテしやすくいこうっと」の使い分けが大事な言語だと思った。
逆にいえばその使い分けができる言語だと思った。
そして求人広告によく載っている C/C++ ってどんな言語なんだろうと思った。

203 :163:03/07/16 00:04
>>180
> 配列として配置した場合に要求される

こういう限定があるってことは、
非PODオブジェクトのメンバが、配列として配置したバイト列内に
存在する保証はないということになりませんか?

204 :デフォルトの名無しさん:03/07/16 00:14
>>201
freadでのsetvbufに相当するのはistreambuf_iteratorではどうやればいいの?

205 :デフォルトの名無しさん:03/07/16 00:24
>>204
streambufのpubsetbufでする。

206 :デフォルトの名無しさん:03/07/16 00:41
実際windows環境じゃ役にたたない罠。

207 :名無し@沢山:03/07/16 00:42
>>199
おれの想像を絶したぐらいの遅さだよ。

>>201
分かってるよ。

208 :デフォルトの名無しさん:03/07/16 01:00
>>203
んー。言ってる意味がよく分からん。

例えば
struct AB {
 int a;
 short b;
};
とした時、単独では別に b の後のパディングは必要ないかもしれない。
AB ab;
short c;
としたときに、ab.b と c がくっついてても問題なさそうに見える。

でも、配列にしたとき int, short, int, short となるから、
5.3.3 -2- の仕様から AB::b の後にはパディングが入る
(パディングの入れ方は環境依存だけど、こうなることが多い)。
sizeof (AB) が 8(の環境とする)になるわけだから、
単独で確保してもやっぱり 8 バイトじゃなくちゃまずいということになる。
だから、AB ab; short c; でもパディングは入るし、
そのパディングのサイズは AB のサイズの中に織り込み済みである。

と、そういうことを表した仕様だと思われ。

209 :163:03/07/16 01:18
>>208
メモリレイアウトについての規格が軒並みPOD型についてに限定してあったりするので、
非POD型については、メンバごとに全然違うメモリ領域に配置するような実装を
許そうとしているような気配を感じたのです。
(そのような実装が有利になるような環境は、現状では存在しないとは思います。)

210 :名無し@沢山:03/07/16 01:20
おまいらよ。どれくらい想像を絶するかおまいらにも体験してもらおうと思って
実際にプログラムを書いてみたよ。Windows専用ですまんよ。
適当なfileという名前のファイルを用意してくれよ。

//前半

#include  <windows.h>
#pragma  comment(lib,"winmm.lib")
class  Timer{
public:
  Timer(){  start();  }  
  void  start(){  prev_time_=timeGetTime();  }
  unsigned  long  get()  const{  return  timeGetTime()-prev_time_;  }
private:
  unsigned  long  prev_time_;
};


211 :名無し@沢山:03/07/16 01:21
//後半

#include  <iterator>  
#include  <fstream>  
#include  <iostream>  
using  namespace  std;
int  main(){  
  {
    Timer  t;
    ifstream  in("file",ios_base::binary);
    char  buf[10000];
    string  s;
    while(in){
      in.read(buf,10000);
      s.append(buf,buf+in.gcount());
    }
    cout<<t.get()<<endl;  
  }

  {
    Timer  t;
    ifstream  in("c",ios_base::binary);
    string  s(istreambuf_iterator<char>(in),istreambuf_iterator<char>()  );  
    cout<<t.get()<<endl;  
  }
}  


212 :名無し@沢山:03/07/16 01:23
おまいら二つ目のifstreamに渡すファイル名を変え忘れたよ。
"c"から"file"に替えてくれよ

213 :デフォルトの名無しさん:03/07/16 01:24
>>209
確か POD 型のメモリレイアウトは宣言順+パディング可だったはずです。
他にも仮想関数テーブルやら継承した場合やら色々仕様はあると思いますが、
基本的にはそんなもんかと。

1.8 -5- で POD 型を含めていないのは POD 型はパディング可だということを
言いたいのだと思います。
でも、パディング込みで考えれば連続領域(別の変数が割り込まない)で、
そのサイズは sizeof で得られる、
というようなことは、多分仕様に書いてあると思います(まだ調べてませんが)。

214 :213:03/07/16 01:26
POD 型と非 POD 型を逆に書いてしもた。すまん。
たまにしか使わない用語なので。

215 :名無し@沢山:03/07/16 01:27
ちなみにおれの環境では約300kbのファイルを読むのに

おれバージョンだと108ミリ秒
>>196バージョンだと23694ミリ秒かかるよ

300kbをBigなファイルだといったり
230倍の差を気にしないとかいうならもうプログラマやめたほうがよいよ。

216 :名無し@沢山:03/07/16 01:45
おまいらよ、わざわざコードまで書いてやったのに反応がまったく無いとさみしいよ。

217 :デフォルトの名無しさん:03/07/16 02:28
名前が悪いと思われ

218 :デフォルトの名無しさん:03/07/16 02:30
>>217
うん、うん、沢山だもんね
もう、君のネタは、沢山だよ

219 :デフォルトの名無しさん:03/07/16 11:41
荒らしは完全放置

220 :デフォルトの名無しさん:03/07/16 12:00

沢山の話し方は煽りが入っていて気に入らないが、同意せざるを得ないな。


221 :デフォルトの名無しさん:03/07/16 18:55
セレロン2GHで3MBくらいのファイルをよみこんでみたら

vc6 stlport使用
リリース mt
沢山バージョンだと46ミリ秒
>>196バージョンだと110ミリ秒かかるよ

デバッグ mt
沢山バージョンだと203ミリ秒
>>196バージョンだと27820ミリ秒かかるよ

12MBだと
リリース mt
沢山バージョンだと203ミリ秒
>>196バージョンだと453秒かかるよ

222 :221:03/07/16 18:56
> デバッグ mt
> >>196バージョンだと27820ミリ秒かかるよ
2782ミリ秒の間違いです。

223 :デフォルトの名無しさん:03/07/16 19:49
ちなみに最速はmemory mapped fileで、ファイルサイズ以上のバッファを
確保して一気に読み込みがほぼそれに近い時間で終わる。
以下、ループ実行回数に比例して実行時間が長くなり、1byteのバッファでの
読み込みとistreambuf_iteratorがほぼ同等。

224 :名無し@沢山:03/07/16 20:06
おまいらよ。どうや最適化オプションを忘れてたようだよ。
正直すまんかったよ。

225 :名無し@沢山:03/07/16 20:07
おまいらよ、恥かいたのでこの名前も捨てようとおもうよ。短い間だったけどありがとうよ。

226 :名無し@沢山:03/07/16 20:15
と、書いたけど、もう一度ちゃんと確かめた結果は

おれバージョンは110ミリ秒
>>196バージョンは23655ミリ秒

なんでだよ?VC7に標準で付いてるSTLは死ぬほど遅いのかよ?

227 :デフォルトの名無しさん:03/07/16 22:22

とりあえずC#相談室よりは上にいてほしいので
age

228 :デフォルトの名無しさん:03/07/16 22:24
バカじゃねーの…

229 :デフォルトの名無しさん:03/07/16 22:32
age

230 :デフォルトの名無しさん:03/07/16 22:35
http://pc2.2ch.net/test/read.cgi/tech/1051842450/475
> http://pc2.2ch.net/test/read.cgi/tech/1057580107/227
> > とりあえずC#相談室よりは上にいてほしいので
> > age
>
> 必死に対抗するか見てみよう
> age

マジで反応してやがる。にゃははは。

231 :デフォルトの名無しさん:03/07/16 22:35
バカだなバカ

232 :デフォルトの名無しさん:03/07/16 22:36
>>229
釣れた!(w

233 :229:03/07/16 22:37
>>230-232
俺がオマエラ釣ってるんだって
227と無関係だし

234 :ゼーレ01:03/07/16 22:37
IPの隠し方知ってますか?パス抜きされて困ってます。
誰か助けてください!!お願いします



235 :デフォルトの名無しさん:03/07/16 22:38
>>233
諦めれ(w

236 :デフォルトの名無しさん:03/07/16 22:39
クソスレ上げんな

237 :デフォルトの名無しさん:03/07/16 22:39
すれたいがにていてまぎらわしい

238 :デフォルトの名無しさん:03/07/16 22:41
>>237
ここにも顔つければいいんだよ。
c(+_+)とか。

239 :デフォルトの名無しさん:03/07/16 22:43
>>233
何のために釣っているんだよ。
なにも内容が無い釣りは
何かに反応したとしか思えないぞ(w

240 :デフォルトの名無しさん:03/07/16 22:49
>>238
それ採用!
具体的な顔募集します。

241 :デフォルトの名無しさん:03/07/16 22:52
v(・∀-)b

242 :デフォルトの名無しさん:03/07/16 22:52
こうして又一人C++盲信者が潰されましたとさ。

243 :デフォルトの名無しさん:03/07/16 22:53
c(P_P)

244 :229:03/07/16 22:53
>>239
釣れればなんでもいいし
今回は「age」って書けば十分釣れると思った・・・悪かったよ

245 :デフォルトの名無しさん:03/07/16 22:58
C(+ω+`)

246 :デフォルトの名無しさん:03/07/16 23:03
(c +_+) < cの部分は耳だよ

247 :名無し:03/07/16 23:52
(c +_+)

248 :デフォルトの名無しさん:03/07/16 23:57
(c +∀+)アーヒャヒャヒャ

249 :デフォルトの名無しさん:03/07/17 00:59
ends<<endl;

250 :デフォルトの名無しさん:03/07/17 09:45
1000/4

251 :デフォルトの名無しさん:03/07/18 18:20
perlとかのsplitみたいにstringを複数のstringに分割する関数はないですか?

252 :デフォルトの名無しさん:03/07/18 18:25
>>251
boost::tokenizerがいいと思う。
#include <boost/tokenizer.hpp>だけで使えるし

253 :デフォルトの名無しさん:03/07/18 18:27
>>251
split みたいなのは知らんなぁ。
文字列の切り出しは substr くらいかな?

あとはここでも読んでちょ。
http://www.wakhok.ac.jp/~sumi/stl/index.html

254 :デフォルトの名無しさん:03/07/18 18:32
>>252
> #include <boost/tokenizer.hpp>だけで使えるし
だと良いね

255 :デフォルトの名無しさん:03/07/18 18:40
>> #include <boost/tokenizer.hpp>だけで使えるし
>だと良いね

良いよぉ。まさかお前C++を使っていてboostを
構築はともかくインストールしていない訳じゃああるまい

256 :デフォルトの名無しさん:03/07/18 18:42
その言い訳は苦しい

257 :デフォルトの名無しさん:03/07/18 18:44
まあインストールしていないのは英語が分からない奴くらいだろうな

258 :デフォルトの名無しさん:03/07/18 18:48
言えば言うほど見苦しい

259 :デフォルトの名無しさん:03/07/18 18:49
芳ばしい臭いがするので、ちょっと晒し上げておこう

260 :デフォルトの名無しさん:03/07/18 18:49
>>257
コンパイラがしょぼいのも無理ぽ。

261 :デフォルトの名無しさん:03/07/18 18:50
むしろラインセンス

262 :デフォルトの名無しさん:03/07/18 18:52
ちょっと指摘されただけで英語云々持ち出さんでも・・・
「boostにはこんなのあるよ」の一言を忘れただけなんだから次回から気をつければいいだけだろ・・・

263 :デフォルトの名無しさん:03/07/18 18:56
>>262
なんだお前は英語が読めないのか?
>「boostにはこんなのあるよ」
そう言う内容なのは明らかだろ。お前は読解力ゼロ

264 :デフォルトの名無しさん:03/07/18 18:59
boostつかうと保守に問題が出るよな。

265 :デフォルトの名無しさん:03/07/18 19:01
英語厨のおでましか

266 :デフォルトの名無しさん:03/07/18 19:01
>>264
お前は今後一切使うな

267 :デフォルトの名無しさん:03/07/18 19:04
>>263
読解力無いのはオメーだろ。
内容が明らかなのとboostがインストール済みかどうかはまったく別問題だ。
boostにケチはつけんが、boostスレじゃない場所でboostがインストール済みであることを前提に話す奴は逝ってよい。
相手は初心者かもしれん。

268 :デフォルトの名無しさん:03/07/18 19:05
必死なのがいるなぁ。俺も晒し上げておこう。上から2スレ目だけど。

269 :デフォルトの名無しさん:03/07/18 19:09
まぁ煽り文句で「英語が読めないのか」は王道だよな

270 :デフォルトの名無しさん:03/07/18 19:32
どっかの会社が、boostを商用ライブラリとして出してくれないかなぁ

271 :デフォルトの名無しさん:03/07/18 19:39
>>268
ワロタ

272 :デフォルトの名無しさん:03/07/18 20:39
つーか、boostのライセンスのどこが問題なんでしょう?
regex使ったら、使ったこと書いてね!!
以外になんか不満あるようなもんあるんでしょうか?

273 :デフォルトの名無しさん:03/07/18 20:47
完全にboostスレ向きの質問だと思うが

274 :デフォルトの名無しさん:03/07/18 21:37
そしてboostスレでもライセンスの話題は何度か出ている。

275 :デフォルトの名無しさん:03/07/18 23:35
stringstream の中身をクリアするにはどうしたらいいんですか?
clear()を呼んでも残っているみたいなんですが。

276 :デフォルトの名無しさん:03/07/18 23:56
>>275
たぶんそれは、basic_ios::clear()を呼んでいる。
中身をクリアするってのはないけど、
str(string const&)で文字列を割り当てることができるので、
空の文字列を割り当てればよい。つまり
str(string());

277 :デフォルトの名無しさん:03/07/19 00:37
>>275
eraseしろ!!

>>273
boostスレではライセンスに(商用でも)問題ない(らしい)という結果だったはず。
でも、問題があるよといわれれば、どこが問題なのかやはり気になるもんでね。

278 :デフォルトの名無しさん:03/07/19 00:51
ttp://www.tietew.jp/cppll/archive/5777


279 :277:03/07/19 01:09
>>278
大変ありがたいのだが、すでにそのページは拝見しております。
私が気になるのは、問題があるという人は何をもってしてそう判断したのか?ということです。
新しい発見(?)したとか。何かの特許に抵触したとか・・・。

280 :デフォルトの名無しさん:03/07/19 01:46
>>279 英語を読めない人の妄言です。

281 :デフォルトの名無しさん:03/07/19 03:31
C++自体の質問なのでスレ違いかもしれませんが、よろしければご教授ください。


A.cppというファイルからB.hとC.hをIncludeして使おうと思っています。
C.hではクラスの宣言をしています。
そして、A.cppではそのインスタンスを作成しています。

しかし、B.hで作成したインスタンスのメンバーを読み込もうとすると、
コンパイル時に、そのインスタンスが『未定義』とされエラーがでてしまいます。
その後、A.cppでインスタンスを作成する場所でも『再定義』というエラーがでるので、
きっと、宣言の順番の問題なんだろうと思うのですが、何かよい解決策はないでしょうか。

わかりにくい文章ですみませんが、よろしくおねがいします。

282 :281:03/07/19 03:34
すみません。
最初にこのスレを見つけられずに、他のスレッドに書き込もうとしていたので、
その時書いた文章の残骸が残ってしまいました。
スレ違い云々は気にしないでください。
申し訳ありませんでした。

283 :デフォルトの名無しさん:03/07/19 04:04
いつもいつも思うんだが
質問したいならageろ!
よろしくお願いしたいならageろ!
あほか。なにがメール欄に「sage」だよ。
きどってんじゃねーよ。

284 :デフォルトの名無しさん:03/07/19 04:05
B.h には何が書いてあるの?

285 :デフォルトの名無しさん:03/07/19 04:05
癖でsageちゃうことはよくあるよね。

286 :デフォルトの名無しさん:03/07/19 04:20
yes

287 :デフォルトの名無しさん:03/07/19 04:23
いつもいつも思うんだが
スレ違いの事を書き込むならsageろ!
晒し上げじゃないならsageろ!
あほか。なにがメール欄に「nuge」だよ。
荒らしてんじゃねーよ。

288 :デフォルトの名無しさん:03/07/19 04:25
代わりに上げてやってるんじゃないか。
しかもアドバイスしてさ。
親切じゃない。

289 :デフォルトの名無しさん:03/07/19 04:31
余計な御世話じゃないの?
漏れなら、アドバイスだけして、本人に揚げさせる

290 :デフォルトの名無しさん:03/07/19 04:38
まぁ、こういうどうでもいいレスで
ちゃんとしたレスを埋もれさせるのが一番不本意なので、
ちゃんとしたレスにアンカーを貼っておこう。

質問 >>281

レス >>284



291 :デフォルトの名無しさん:03/07/19 05:32
余計な御世話

292 :デフォルトの名無しさん:03/07/19 11:49
クラス内で定義されている名前を
クラス外で::なしで使うにはどうすればよいですか?
class A
{
public:
typedef int type;
static const size_t SIZE;
};
みたいなときに
A::type i; size_t n = A::SIZE;
とかではなく
type i; n = SIZE;
とか書く方法はないでしょうか。
using A::type;
とかはだめみたいです。

293 :デフォルトの名無しさん:03/07/19 11:51
クラス外で定義しろ

294 :292:03/07/19 11:56
>>293
ごめんなさい。よくわかりません。

295 :デフォルトの名無しさん:03/07/19 11:57
>>292
出来るが、そんなことして欲しくないので教えない。

296 :デフォルトの名無しさん:03/07/19 12:01
>>292
typedef A::type type;
const int SIZE=A::SIZE;

と事前に書いとく

297 :292:03/07/19 12:01
>>295
いじわるしないでぇ
そんなことして欲しくない理由と共に教えてください。
ちっちゃな翻訳単位ローカルに使うんだったら
そんなに悪くないとおもうんですが。

298 :デフォルトの名無しさん:03/07/19 12:02
何のためにそんな事するのか小1時間・・・

299 :292:03/07/19 12:03
>>296
なるほど。っていうかそんなことも思いつかん褐炭か>俺
ありがとうございます。

300 :デフォルトの名無しさん:03/07/19 12:04
やるのかよ。
いや、別にいいけどさぁ・・

301 :292:03/07/19 12:05
いやぁん♥
冷たくしないでぇ

302 :デフォルトの名無しさん:03/07/19 12:14
(c +_+) なんだかなあ……

303 :292:03/07/19 12:16
はじめて自分の偽者とであいました。
こんにちは>>301

304 :281:03/07/19 13:10
>>281 です。

>>284
わかりにくくてすみません。
B.hでは別のクラスが宣言されています。
簡単に書くと、こんな感じです。

[B.h]
class CHuman
{
int Speed;
void SetSpeed(void)  { Speed = Ball.Spin; } ●1
};
-------------------
[C.h]
class CBall
{
int Spin;
};
-------------------
[A.cpp]
#include "B.h"
#include "C.h"
CHuman tanaka;
CBall Ball; ●2
main()
{ tanaka.SetSpeed(); }

●1が、未定義のエラーが出るところ、●2が再定義のエラーが出るところで、
それぞれの変数はpublicで宣言されていて、コンストラクタで数値が代入されていると考えてください。

たびたびの長文すみませんが、よろしくおねがいします。

305 :デフォルトの名無しさん:03/07/19 13:12
そりゃ出るわな

306 :デフォルトの名無しさん:03/07/19 13:13
>>281
ポインタで宣言してコンストラクタで new すれば?

307 :デフォルトの名無しさん:03/07/19 13:14
>>304
B.hで
#include "C.h"
extern CBall Ball;
とするか、SetSpeed の実装をcppに分ける。

308 :デフォルトの名無しさん:03/07/19 13:16
印来るドのジュンバン

#include "C.h"
#include "B.h"

CBall Ball; はいらない。



と思う漏れは実はC++なんてよく知らないのだが(w


309 :デフォルトの名無しさん:03/07/19 13:21
継承したクラスのコンストラクタについての質問です。
CParentと、それを継承したCInheritedがあります。
CInheritedのコンストラクタで、
1.
CInherited::CInherited():CParent(){
}
2.
CInherited::CInherited(){
  CParent::CParent();
}
は何が違うのでしょうか。

310 :デフォルトの名無しさん:03/07/19 13:33
>>304
#include "C.h"
CBall Ball;
#include "B.h"
CHuman tanaka;
こんなかんじにしたら


311 :デフォルトの名無しさん:03/07/19 13:36
>>309
初期化の優先順位が違う。
こんな感じ

312 :デフォルトの名無しさん:03/07/19 13:37
>>281
もしやとは思うが、
ヘッダを
#ifndef HOGE
#define HOGE
//ここに本文
#endif
でくくる方法は知ってるよな?

313 :デフォルトの名無しさん:03/07/19 13:38
プリプロセッサで再定義を防げばインクルードの順番なんて関係ないはずだぞ。

314 :281:03/07/19 13:47
>>312
すみません、知りませんでした。
調べてみる事にします。

結局>>307のやり方でやってみたら、なんとかできました。
こたえてくださったみなさん、ありがとうございました。

315 :デフォルトの名無しさん:03/07/19 13:50
>>309
struct A{
A(){
std::cout<<this<<" A"<<std::endl;
}
};

struct B : public A{
B():A(){
std::cout<<this<<" B"<<std::endl;
}
};
/*
struct B : public A{
B(){
A::A();
std::cout<<this<<" B"<<std::endl;
}
};*/

Bの定義を入れ替えて実行結果を見てみろ。

>>311はアホ

316 :デフォルトの名無しさん:03/07/19 13:55
CParent::CParent(); は一時オブジェクトってこった。


317 :デフォルトの名無しさん:03/07/19 14:29
標準C++ではコンストラクタには名前がないから
CParent::CParent()などとして呼ぶことはできない

318 :デフォルトの名無しさん:03/07/19 15:54
map<int,int> hoge;
return hoge[0];

とかやったら、intにコンストラクタはないから返り値は未定ですよね。
int型とかにコンストラクタをつけたい場合は新しくクラスを作るしかないですか?

319 :デフォルトの名無しさん:03/07/19 16:15
>>318
intはデフォルト初期化で0になるので返値は0です。

320 :デフォルトの名無しさん:03/07/19 17:12
template<typename Iter>
class Value_iter : public Iter
{
public:
    Value_iter(const Iter &it): Iter(it){}
    typedef typename Iter::value_type::second_type value_type;
    value_type operator*()
    {
        return Iter::operator*().second;
    }
    value_type operator->()
    {
        return Iter::operator->().second;
    }
};

こういう感じで、一部の関数を上書きするために公開継承を使っても問題はないでしょうか。
std::map<A,B>::iterator 辺りを渡されることを期待するテンプレートです。

321 :320:03/07/19 17:15
考えてみれば operator-> は要らなかった…

322 :デフォルトの名無しさん:03/07/19 17:26
>>318

int n = int();  // デフォルトコンストラクタ
          // 0で初期化
assert(n == 0);


323 :デフォルトの名無しさん:03/07/19 17:49
>>320
ほとんどの場合、問題「ある」。例えばその例なら、

Value_iter<map<key,val>::iterator> i;
val x = *i++; // error

324 :デフォルトの名無しさん:03/07/19 18:17
>>323
ああ、なるほど。理解しました。有難うございました。

325 :デフォルトの名無しさん:03/07/19 19:17
クラスメンバのconstな関数ポインタ変数って初期化できんのー?

class CMoe {
const void (*pFunc)();
public:
CMoe(void (*func)()):
pFunc(func) // だめぽ
{
}
};

326 :デフォルトの名無しさん:03/07/19 19:38
void (* const pFunc)();
だろ

327 :デフォルトの名無しさん:03/07/19 19:42
const void型って何だ(笑)

328 :デフォルトの名無しさん:03/07/19 21:00
>>323
何ゆえ *i++ ←(increment operator)関数どこ?
>>320
意味ない。何のためのiteratorがあるのかわかる?
>>327
const void はそのままじゃんか。何か?

329 :デフォルトの名無しさん:03/07/19 21:51
>>328
キミ、会話の意味がわかってないなら黙ってた方がいいと思うよ。

330 :Error 改行が多すぎます:03/07/19 22:19
>>325
#include <iostream>
using namespace std;
const void test(){
    cout << "test" << endl;
}

class CMoe{
protected:
    const void (*pFunc)();
public:
    CMoe(const void (*func)());
    void Do();
};

CMoe::CMoe(const void (*func)()){
    pFunc = func;
}

void CMoe::Do(){
    (*pFunc)();
}

int main(){
    CMoe moe(test);
    moe.Do();
    return 0;
}



331 :325:03/07/19 22:20
>>326
なーる。サンクス!

スマソ、も1つ。
class CHoe {
 // うにょにょ〜(operator=なし)
};
int main() {
 CHoe hoe;
 vector<CHoe> Moe;
 Moe[0] = hoe;  // CHoeにoperator=が定義されてない。
 return 0;
}

ちゃんと定義しないとダメ?

332 :325:03/07/19 22:24
>>325
そう、まさにそれがやりたかった。ありがと。

333 :デフォルトの名無しさん:03/07/19 22:44
>>332


334 :328:03/07/19 23:36
>>329
意味わかんないかな?
こんなのは使わんけど。
#include <iostream>
#include <map>
#include <string>

template<class T,class U>
struct TorU : std::map<T,U>::iterator
{
  typedef typename std::map<T,U>::iterator base;
  TorU(std::map<T,U>& m) : base(m.begin()){}
  operator T(){ return base::operator ->()->first; }
  operator U(){ return base::operator ->()->second; }
};

int main()
{
  using namespace std;
  map<int,string> cs;
  cs.insert(pair<int,string>(0,"ring 0")) ;
  cs.insert(pair<int,string>(1,"ring 1")) ;
  TorU<int,string> tu(cs);
  while(tu != cs.end()){
    cout<<(int)tu<<' '<<(string)tu<<'\n';//castめんどくせー
    ++tu;//ここがポイントなのよ
  }
}


335 :デフォルトの名無しさん:03/07/19 23:44
>>334 黙ってた方がいいと思うよ。

336 :const void???:03/07/19 23:49
誰か>>328を日本語に訳してくれないか?

337 :328:03/07/20 00:12
沈黙・・・・・・

338 :328:03/07/20 00:45
なんだconstのほうかよ
これで納得いかないか?
#include <iostream>

template<class T> struct Imitation;

template<>
struct Imitation<void>
{ static void fun(){ std::cout<<"Variant"<<std::endl; } };

template<>
struct Imitation<const void>
{ static void fun(){ std::cout<<"Constant"<<std::endl; } };

int main()
{
  Imitation<const void>::fun();
  Imitation<void>::fun();
}



339 :328:03/07/20 00:51
おおっと
>>320よみなおしたら意味違ったすまん。

340 :デフォルトの名無しさん:03/07/20 01:53
むしろ>>332>>325を日本語に訳して欲しいわけだが…

341 :331:03/07/20 06:34
ごめ。
単にCHoeのメンバがconstだったり参照だったりしてただけだった。
代入演算子が生成されないんだね。

342 :_:03/07/20 06:42
http://homepage.mac.com/hiroyuki44/

343 :デフォルトの名無しさん:03/07/20 15:29
template <class T> void foo(T){}
template <class T> struct bar{};
template <class T> void foo(bar<T>){}

int main(){
bar<int> b;
foo(b);
}

以上のプログラムがコンパイル通りません。
そこで以下のようにしたら無事とおりました。下のプログラムはC++的に正しいですか?

template <class T> void foo(T){}
template <class T> struct bar{
friend void foo(bar<T>){}
};

int main(){
bar<int> b;
foo(b);
}



344 :デフォルトの名無しさん:03/07/20 15:31
うわー、びっくりした。

345 :デフォルトの名無しさん:03/07/20 15:34
static 変数をメンバに持つクラスから、幾つかのクラスを派生させ、
それぞれの派生クラスのインスタンスを作った場合、
ベースクラスから継承した一つの static 変数をそれらで共有することになりますか?
厨でスマソ。

346 :デフォルトの名無しさん:03/07/20 15:37
>>345
なる

347 :デフォルトの名無しさん:03/07/20 15:39
>>343
上の通るなあ。bcc32

348 :343:03/07/20 15:42
>>347
VC7では通らなかったのですが、、、

上の例は関数の部分的特殊化に当たるから不可、なのではないのですか?

349 :345:03/07/20 15:42
>>346 つまらない質問に付き合って下さって、ありがとうございます。

350 :デフォルトの名無しさん:03/07/20 15:53
>>348
ISOのドキュメントによると関数テンプレートのオーバーロードに相当して
より特殊化したものが選ばれる。事になっていて問題ないようだけど…

より詳しい人よろしく

351 :デフォルトの名無しさん:03/07/20 16:35
>>348
関数があいまいてVC7(VC6も?)はエラーがでるから
おしえてあげればいいのでは?
foo<int>(b);
しってたらごめん。

352 :343:03/07/20 17:09
>>350
なるほど thx!
ってことはVC7はそこラ変がまだまだだったってことでしょうか

>>351
明示的に指定せずに上手くいく方法を探してます。すいません。

353 :デフォルトの名無しさん:03/07/20 20:41
void func()関数で宣言したclassHogeクラスのオブジェクトcHogeを
グローバル変数に渡したいのですが、どのようにすればよいのでしょうか?
(ローカル変数のスコープをグローバルに変換したい)

自分がやってみたのは以下のとおりです。
おかしな点があったらご指摘頂けないでしょうか。

// グローバル
classHoge* global_ptr_cHoge;

//
void func()
{
  classHoge cHoge; // オブジェクト作成
  global_ptr_cHoge = &cHoge; // オブジェクトのアドレスをグローバルに格納
  test(global_ptr_cHoge); // テスト用関数
}

void test(classHoge* ptr_cHoge)
{
  ptr_cHoge->Method();
  ...
}

354 :デフォルトの名無しさん:03/07/20 20:52
>>343
VC7.1では上ので通る

355 :デフォルトの名無しさん:03/07/20 20:56
>>353
funcを抜けてからアクセスしなければ大丈夫

356 :デフォルトの名無しさん:03/07/20 20:58
>>353
> ローカル変数のスコープをグローバルに変換したい
ここがおかしい。

357 :デフォルトの名無しさん:03/07/20 20:59
>>353
諦めてグローバルにインスタンス置いと毛

358 :353:03/07/20 21:11
>>355
func外からも使いたかったんですが、
funcを抜けるとやっぱりまずいですよね・・・

>>356
う、確かに・・・

>>357
はい、そうしときます。
変な質問してしまいすみませんでした。



359 :デフォルトの名無しさん:03/07/21 03:56
みんなちゃんと理由を説明してやれよ。かわいそうに。
>>353
func を抜けたら func の auto 変数の cHoge は destruct されるから
それ以降に触るのは危険。
というか cHoge を func 内の static にしておけばいいんだけど
それだとやりたい事と意味があっているかどうかはわからん。

360 :デフォルトの名無しさん:03/07/21 11:40
>>359
かわいそうも何も明らかに普通でない質問だろう。
「変な質問」と自覚していて、それでもやりたいというならば、
それこそその理由を述べるべきだ。


361 :sage:03/07/21 14:31
//
void func()
{
  global_ptr_cHoge = new classHoge; // オブジェクトのアドレスをグローバルに格納
  test(global_ptr_cHoge); // テスト用関数
}


362 :デフォルトの名無しさん:03/07/21 15:09
template <class T> struct bar;

classと指定してるとvc6だと組み込み型の宣言ができない。
組み込み型も宣言したいときはtypenameで指定すればよかったと思われ。

template < typename T> struct bar;

もう解決してるかね?

363 :362:03/07/21 15:12
上のレスは
>>343 へのレスですー。

2重カキコすまそ。

364 :デフォルトの名無しさん:03/07/21 15:27
using namespace std;
とネームスペースを一括?指定するのはよくないことなの?

365 :デフォルトの名無しさん:03/07/21 15:30
>>364
俺は .cpp でやるんなら別にいいと思うが、
.h でやるのはお行儀悪いと思う派。

366 :デフォルトの名無しさん:03/07/21 15:53
そのことで前揉めてたな
モミモミ

367 :364:03/07/21 15:57
>>365
それはなぜなんでしょう?

368 :デフォルトの名無しさん:03/07/21 16:02
>>367
名前のバッティングを防ぐためにわざわざnamespaceに入れたのに、それをあえて同じ名前空間にインポートして無意味にしてしまうusingを、複数のソースファイルで共有されうるヘッダーファイルで使うのは問題だろ?

369 :デフォルトの名無しさん:03/07/21 16:10
そういう理由なら.cppでやるのも同じように問題な気もするが・・・
(複数のソースファイルから共有されるという点は別だけど)

370 :デフォルトの名無しさん:03/07/21 16:21
>>369
>複数のソースファイルから共有されるという点は別だけど
これは重要な違いだと思うがね。
まぁ、それでも using が嫌いという人がいるのも分かるし、
usign 使わないのを止(と)めようとは思わんが。

371 :デフォルトの名無しさん:03/07/21 16:24
>>369
> (複数のソースファイルから共有されるという点は別だけど)
大きなポイントじゃないすか? 衝突の可能性を広い範囲に作っちゃうのは
やっぱ怖いというか、安心できないですよ。
自分(cppファイル)の中だけで「曖昧だ」とかコンパイラに怒られるだけなら
屁でもないですから。

些細なことかもしれないけど、この程度のことで未来に何かを課したくはないです、俺は。

372 :デフォルトの名無しさん:03/07/21 16:26
using 論争ですが、
ヘッダファイルは公共の場所、
実装ファイルは家の中などのプライベートな場所、
っていう雰囲気があると思う。

家の中で素っ裸になるのは個人の自由だけど、
表でやったらタイーホの予感。

実装で using を使って怠けるのは自由だけど
ヘッダで using を使うのは(明日の自分も含めた)他人への迷惑をかえりみない行為。


373 :デフォルトの名無しさん:03/07/21 16:40
かわいいおにゃにょこの裸ならお外でも・・・・・ハァハァ

374 :デフォルトの名無しさん:03/07/21 16:46
>>373
つまりそれは std と boost だけはヘッダで using してもいいという事ですか?

375 :デフォルトの名無しさん:03/07/21 16:52
>>374
ネタです

376 :デフォルトの名無しさん:03/07/21 17:09
>>375
いや、「わたしかわいいおにゃにょこだからだいじょうぶね♪」といって
ネカマデブ、ババア、破壊的ブスどもが裸で街を跳梁跋扈する闇の時代がくるという予言です。


377 :デフォルトの名無しさん:03/07/21 18:07
>破壊的ブス

ワラタ

378 :デフォルトの名無しさん:03/07/21 18:44
>>369
あほ。全然違うだろ。

379 :378:03/07/21 18:45
あ、>>369の言いたいことが分かった。
普段
#include "hoge.cpp"
とかやってるだろ?1から勉強し直した方がいいぞ。

380 :デフォルトの名無しさん:03/07/21 19:24
久しぶりだな、半角?くん。

381 :デフォルトの名無しさん:03/07/21 19:32
>>380
久しぶりだな、半角?くんを半角?くんと呼ぶお前。

つーか半角で?を打つ奴が一人しか居ないと考え
決め付けるお前の浅はかさには閉口してしまうよ?

382 :デフォルトの名無しさん:03/07/21 19:40
ヴァカが紛れ込んできたようですね

383 :デフォルトの名無しさん:03/07/21 19:44
どうでもいいけどどこに半角?があるんだ?誤爆?

384 :デフォルトの名無しさん:03/07/21 19:45
>>2だな

385 :>>378:03/07/21 19:47
天然?

386 :デフォルトの名無しさん:03/07/21 20:19
>>364
スコープ内でusing使ってください。
あと名前のバッティングなんて別に怖いもんでないような?
エラーが出たら一括に名前付けて置換すりゃーいいんだし。

387 :デフォルトの名無しさん:03/07/21 20:26
>>385
>>369読んで出直して来い。

>>384
ありがと。
そんな2週間も前のやつにレスしてたのか。


388 :デフォルトの名無しさん:03/07/21 20:29
??????????

389 :デフォルトの名無しさん:03/07/21 20:32
>>386
シグネチャがほとんど同じだどエラーが出なくて通ってしまい、
挙動のおかしさ悩むこともある

390 :デフォルトの名無しさん:03/07/21 21:38
かなりお馬鹿な質問ですが、
C++で作った関数をC言語プログラムに組み込む方法はないでしょうか?

391 :デフォルトの名無しさん:03/07/21 21:41
絵x手rん ”C"

392 :デフォルトの名無しさん:03/07/21 22:58
>>390
#if cplusuplus
extern "C"
{
#endif
 void MyCPlusPlusFunc(void);
#if cplusuplus
}
#endif

どぞー

393 :デフォルトの名無しさん:03/07/21 23:30
マングリ返し

394 :デフォルトの名無しさん:03/07/21 23:52
>>392
__cplusplus をデフォルトでサポートしてくれているコンパイラが殆どなので、
__cplusplus と書いておいた方が楽っぽ。
あと、#ifdef な。

395 :デフォルトの名無しさん:03/07/21 23:58
>>394
__cplusplusは規格で必要とされている。

396 :デフォルトの名無しさん:03/07/22 00:44
>>395
あ、ホンマや。
昔は規格外だったと思ったけど。
199711L で定義されてるってことは、
1997 年 11 月の規格で導入されたんだろうな。

397 :デフォルトの名無しさん:03/07/22 01:14
C++ のソースファイルの拡張子が .cpp とか .cxx とか色々ある歴史的理由を教えて下さい。

398 :デフォルトの名無しさん:03/07/22 01:48
#ifdef じゃあ
C で
#define __cplusplus (0)
と定義されたらやヴぁくない?

399 :デフォルトの名無しさん:03/07/22 02:06
>>398
#define __cplusplus (1)
と定義され(ry

400 :デフォルトの名無しさん:03/07/22 02:14
#ifdef じゃあ

エラー

401 :390:03/07/22 09:55
#if __cplusplus
#endif

でできました。ありがとうございます。



402 :デフォルトの名無しさん:03/07/22 13:44
普段Javaですが、都合でC++初めて使っているのですがかなり参ってます。
例えばデストラクタの使用で、

...
Test::~Test(){
printf("%d",0);
}
...
Test *t;
t = new Test();
for(int i=0;i<100;i++) delete(t);

これで0が100回出力されてしまうのが謎です。
tが指しているオブジェクトは1回deleteを行った時点で
破棄されているはずじゃないのでしょうか?
どうして100回デストラクタが働くのでしょう?

403 :_:03/07/22 13:45
http://homepage.mac.com/hiroyuki44/

404 :デフォルトの名無しさん:03/07/22 13:52
C++では、ポインタの指しているオブジェクトの生き死にには、
自分で責任を持たないといけない。以上

405 :デフォルトの名無しさん:03/07/22 14:11
クソ言語だな。おい。

406 :デフォルトの名無しさん:03/07/22 14:12
( ´,_ゝ`) プッ

407 :デフォルトの名無しさん:03/07/22 14:16
boost::shared_ptrとかstd::auto_ptrとかあるからその辺使えばdeleteのタイミングをあまり気にする必要なし。
例外対策にはほぼ確実に必要だし。


408 :402:03/07/22 14:43
>>404,407
えーと、つまり
こんなふうにdelete100回書いちゃっても問題ないのでしょうか?
それともこの場合たまたま0が100回出力されただけで
2回目以降は偶然って考えのほうがよいでしょうか?

うーん、Javaよりむずい。

409 :デフォルトの名無しさん:03/07/22 14:45
>>408
> こんなふうにdelete100回書いちゃっても問題ないのでしょうか?

大問題。

410 :デフォルトの名無しさん:03/07/22 14:50
同じポインタを複数回deleteした場合、どうなっても知らない。ただそれだけだ。
それがいやならdelete後に0でも代入しておくという手もないではないが、
複数回deleteが呼ばれうるという時点で設計が間違ってる。

メンバ変数に触らない非仮想のメンバ関数はthisの値がどうなっていてもエラー
にならないことが多いから動いているように見えただけ。

411 :デフォルトの名無しさん:03/07/22 14:55
デストラクタを呼ぶ部分はともかく、
メモリ解放処理がなぜエラーにならないか無気味だな。

412 :デフォルトの名無しさん:03/07/22 16:44
template<typename T>
inline void safe_delete(T*& ptr ){
delete ptr;
ptr = 0;
}



413 :デフォルトの名無しさん:03/07/22 16:49
オブジェクトは1度目のdeleteで破棄された(無くなった)
 ↓
デストラクタも無くなった
 ↓
無くなってるはずのデストラクタが呼ばれる
 ↓
なんで???

って疑問なんじゃないの?

414 :デフォルトの名無しさん:03/07/22 17:16
>>413
デストラクタなんぞ、
メンバ変数(仮想関数テーブル含む)使わん限り
普通の関数と大して変わらんじゃんかよ。

415 :402:03/07/22 17:38
>>413
そういうことです。

>>414
なるほどと思って
別の関数を作ってdeleteした後に呼んでみた、すなわち

for(int a=0;a<10;a++)
delete(t3);
printf("%d\n",t3->test2());

これでもエラー起きないんだね。
deleteってのは振る舞いを未定義にするだけで
解放するって認識はやめたほうがいいのかな・・・

416 :デフォルトの名無しさん:03/07/22 17:42
>>415
違う
一度削除されたオブジェクトへのアクセスは未定義だから、
プログラムがクラッシュすることもあれば、
突然ディスプレイが火を噴くこともある。
アドレス帳の全メアドに添付ファイルつきメールを送りつけることもある。

もちろん一見うまく行っているように見えることもある。

417 :デフォルトの名無しさん:03/07/22 17:43
複数回deleteした時の振る舞いが未定義なんじゃないの?
資源の解放という認識でいいと思うけど。

418 :416:03/07/22 17:45
紛らわしくてスマン
「削除されたオブジェクトへのアクセス」は>>417の意味

419 :デフォルトの名無しさん:03/07/22 17:49
正直、一見何事もないかのように見えるのが一番やっかい。

420 :デフォルトの名無しさん:03/07/22 17:52
俺は同じメモリを100回deleteしてみる奴始めてみた。
動作を確認してみようという姿勢は悪くは無いが。

421 :デフォルトの名無しさん:03/07/22 17:56
死体に鞭打つような真似はやめようよ...。> delete 100 回

422 :デフォルトの名無しさん:03/07/22 17:58
100回加熱殺菌とか

423 :デフォルトの名無しさん:03/07/22 18:06
ただ、deleteによって対象のポインタがNULLになると勘違いしてる奴は沢山いる。
こういう奴は「NULLをdeleteしても問題ないから」と考えるかもしれない。

424 :デフォルトの名無しさん:03/07/22 18:13
たまたま開放したままで誰もヒープをいじってないから
残骸のアドレスは空き領域で、再度開放は単にこっそり失敗してるだけだろうな。
デストラクタ自体は単なる関数だからオブジェクトがいなくなっても消えないが。

...もしデストラクタが仮想関数だと少し事情が違うかもしれないが
これも呼び出し時点で対象オブジェクトのクラスが明らかな場合は
最適化で直接呼び出しになってるかもしれんか。


425 :デフォルトの名無しさん:03/07/22 18:17
template<class T>void del(T *&p){delete p;p=0;return;}

426 :デフォルトの名無しさん:03/07/22 18:20
メモリ管理嫌ならJava使え。

427 :デフォルトの名無しさん:03/07/22 18:33
safe_deleteみたいに2回目以降も安全なのと、
2回目以降は例外投げてくれるのとどっちがいい?

前者の方が楽だけど、後者の方が鬱陶しい代わりに
バグの温床を早めに発見できるので。

428 :デフォルトの名無しさん:03/07/22 18:48
>>427
どっちも使わないのが良い。
ポインタなんて複数箇所から同じオブジェクトを指すんだから、一箇所だけ0クリアしたって焼け石に水。
でもそれをわかった上で使うなら前者がいいと思う。
複数回deleteするかもしれないからこそわざわざsafe_delete使うんだし、それがダメなら自分でチェックすれば良い。

429 :デフォルトの名無しさん:03/07/22 18:58
早い話、生のポインタなんか使うなってこった

430 :デフォルトの名無しさん:03/07/22 19:02
>>428
なるほど参考になります。
そうすると下手に自作するより、Boost等のスマートポインタが
うまくやってくれるのに任せるのも安全&&楽ちんで良いですね。

431 :デフォルトの名無しさん:03/07/22 19:03
結局GCになるのか。

432 :デフォルトの名無しさん:03/07/22 19:05
ループで集中してdeleteしてるから、無事に動いてるように見えるけど、

delete p;
.
ヒープを扱う処理
.
delete p;

みたいに、間をおいて実行すると、すごいことになる予感。

433 :デフォルトの名無しさん:03/07/22 19:11
boost::shared_ptrみたいにすでにあるもの使うこともできるし。
機能に不満があったら自作することもできるし。
選択肢が多いのはいいことだと思う。


434 :デフォルトの名無しさん:03/07/22 20:10
> 選択肢が多いのはいいことだと思う。
勉強用としてはね。
実用としては悪いことになりえる。

435 :デフォルトの名無しさん:03/07/22 20:40
実用としては選択肢が少ない方が良いとでも?
馬鹿じゃねぇのか?
お前はBASICでも使ってろ。選択肢少ないぞ

436 :デフォルトの名無しさん:03/07/22 20:50
選択肢が多い方がいいのは応用の部分じゃねーかな。
基礎の部分で多いのは困るぜ。
たとえばライブラリごとに使ってるスマートポインタが違かったりする。
コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。

437 :デフォルトの名無しさん:03/07/22 20:58
C++は設計からしておかしいからね。
クソと言われてもしかたないよ。

438 :デフォルトの名無しさん:03/07/22 20:59
> コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。
ATLは言語に依存しないCOMのため。
MFCはSTLがVC++にまともに搭載される前からのもの。


439 :デフォルトの名無しさん:03/07/22 21:00
>>435
少ない方がいいとはいわんが
必要ないものはいらん。

440 :デフォルトの名無しさん:03/07/23 02:01
>>437
どこが?

441 :デフォルトの名無しさん:03/07/23 02:16
>>440
いつもの荒らしだろ
放置しろよ。

442 :デフォルトの名無しさん:03/07/23 03:12
>>436
例えば文字列ですかね>応用

C由来 : char*, wchar_t*
C++由来 : std::string, std::wstring
SourcePro由来 : RWCString, RWWString
Xerces由来 : DOMString, XMLString
Xalan由来 : XalanDOMString
ICU由来 : UnicodeString
SGI由来 : std::rope
MFC由来 : CString


443 :デフォルトの名無しさん:03/07/23 03:22
>>436
VCの不満はマイクロソフトに言え
C++に文句言うのはお門違いだ

444 :hoge:03/07/23 03:39

(*hoge)->hoge_f
って()で囲んで*つけると普通の構造体参照とどう異なるの?

445 :デフォルトの名無しさん:03/07/23 04:29
>>444
hogeはstruct tag **hoge
ここまで言えば分かるでしょ。

446 :デフォルトの名無しさん:03/07/23 05:22
(*hoge).hoge_f
の間違いじゃないのか

447 :hoge:03/07/23 05:25
>>444
ポインタのポインタを指す場合は()で囲んで*をつけるのですね@@;
ありがと

448 :デフォルトの名無しさん:03/07/23 05:45
>>446
それならhoge->hoge_fとかくだろ

449 :_:03/07/23 05:52
http://homepage.mac.com/hiroyuki44/

450 :教えてください:03/07/23 13:27
VC++で、Waveでデータを波形にし、サンプリング周波数を出すプログラムはできたのですが、
波形の高い部分を見つけ、それをテキストに変換し保存するプログラムが分かりません。
どなたか、教えてくれませんでしょうか?
参考URLなどご存知でしたらお願いします。
せめて、WAVEデータをテキスト変換するプログラムを教えてください。

お願いします。


451 :デフォルトの名無しさん:03/07/23 13:29
↓次の質問ドゾー

452 :教えてください:03/07/23 13:33
煽ってないでお願いします。

453 :デフォルトの名無しさん:03/07/23 13:34
↑次の質問キター

454 :デフォルトの名無しさん:03/07/23 13:42
>>450
テキストに変換、の意味がわからん
音声認識じゃないだろうし

455 :教えてください:03/07/23 15:11
>>454
音声認識です。


456 :デフォルトの名無しさん:03/07/23 15:17
音声認識ソフト作ってる会社に金払って教えてもらえ

457 :デフォルトの名無しさん:03/07/23 15:43
音声認識ならMicrosoftのSpeechエンジンが無料で使えるぞ

458 :デフォルトの名無しさん:03/07/24 00:09
void printf2(const char *str, ...)
{
  printf(str, ...);
}
可変個数で受け取った引数を、さらに別の関数の可変個数の引数として
渡すことってできますか? ↑のような感じに。


459 :デフォルトの名無しさん:03/07/24 00:27
>>458
void myprintf( const char* str, va_list args ) { ... }
void printf2(const char *str, ...)
{
 va_list args;
 va_start( args, str );
 myprintf(str, args);
 va_end( args );
}
とかなんとか。標準(だったけ?)ライブラリにvprintf関数
ってのがあるから、そのソース見るとかすればわかると思う。

460 :459:03/07/24 00:28
あー、つまりその、printf に対する vprintf みたいなのが用意されてれば、
そっちに va_list を渡せばいい。そういうのが用意されてないと、無理。

461 :デフォルトの名無しさん:03/07/24 00:56
通常は反則技だが。

__declspec(naked)
void printf2(const char* str, ...)
{
 __asm {
  jmp printf
 }
}

462 :163:03/07/24 01:09
あれ(>>163)から幾度か規格を漁るうちに、また妙な記述を見つけました。

offsetof@cstddef が引数として受け取る型は、
POD structure か、 POD union だと規格に書かれていました。(18.1 -5-)

やっぱりC++の規格は、非POD型オブジェクトについて何か想像を絶するメモリレイアウトを受け入れる余地を
意図的に残しているのだろうか?誰か知らないですか?

463 :hoge:03/07/24 03:54
if ( au & kddi )
の&ってどういう処理?

464 :デフォルトの名無しさん:03/07/24 03:55
byってゆー処理

465 :デフォルトの名無しさん:03/07/24 03:56
>>463
ビットAND

466 :デフォルトの名無しさん:03/07/24 04:01
C++ 始めたばかりだけど、std::string spaces(10, ' '); って構文はどうなのよ?
C では () が付くと関数というルールがあると思うけど、上のはどう解釈すれば良いのかな?

467 :デフォルトの名無しさん:03/07/24 04:09
コンストラクタに引数を渡しているだけでは・・・

468 :デフォルトの名無しさん:03/07/24 04:34
コンストラクタとクラス名は違っても良いんだ? なるほど。
コンストラクタが「インスタンス名()」って変なの。

469 :hoge:03/07/24 04:39
>>465
ありがと^^

ちなみに sig = (num < 0)
はnumが0未満だったらsigに代入するって事?

470 :hoge:03/07/24 04:41
もひとつ^^;
ハイビットセット処理って何?

471 :_:03/07/24 04:43
http://homepage.mac.com/hiroyuki44/hankaku10.html

472 :デフォルトの名無しさん:03/07/24 05:01
>>468
え??
std::string型のspacesを定義してコンストラクタには(10,' ')を渡すんだと思っていたけど違うの??

473 :デフォルトの名無しさん:03/07/24 05:28
>472
下のコードの sharp(10, '#'); の部分ってどう理解したら良いのやら検討が付きません。
sharp は変数名なのに引き数を取っている?

#include <iostream>
#include <string>
int main()

    std::string sharp(10, '#');
    std::cout << sharp << std::endl;
    return 0;
}

474 :デフォルトの名無しさん:03/07/24 05:29
編集中に int main() の次の行の { が抜けてしまいました。

475 :デフォルトの名無しさん:03/07/24 05:42
>>473
そういう仕様だからしかたないんだよね・・・・
どうしても気になるならstd::string sharp=std::string(10, '#');と書きなよ。
std::string sharp(10, '#'); は上記の省略形。

476 :デフォルトの名無しさん:03/07/24 05:42
>>473
コンストラクタはその型のインスタンスが構築される際に働く関数で、
変数の定義時に変数名の右に引数を書いて渡すのは、まぁ、そういう決まりってこと。

ちなみにintとかの組み込み型でも
int hoge(100);
っていう書き方ができるよ。この場合はint型の変数hogeを100で初期化してる。

477 :476:03/07/24 05:43
かぶって候

478 :デフォルトの名無しさん:03/07/24 06:02
>>475-477
レスありがとうございます。
今まで色々な言語を見てきましたが、難解ですね。ある変数を初期化、代入するのには型、変数名、
初期値があれば良いと言うのは分かりますが、「型 変数名(初期値)」という構文は脳が異次元に
ワープしそうです。

479 :デフォルトの名無しさん:03/07/24 07:29
>>478
それのどこが難解なんだよ。本当に色々な言語を見てきたのか?

つーか難解さで言えば関数ポインタ型の変数の方がもっと上だろ。

480 :デフォルトの名無しさん:03/07/24 08:01
>>478
 × 型名 変数名(初期値);
 ○ 型名 変数名(コンストラクタへ渡す引数のリスト);
だ。あと、std::string(10, '#') なんかも
 型名(コンストラクタへ渡す引数のリスト)
とそのまんまに解釈すべき文であって
 コンストラクタ関数(コンストラクタへ渡す引数のリスト)
という意味ではないので誤解せん方がよい。

() が関数呼び出し、という固定観念から離れた方がいいと思うが、
まあ、関数と紛らわしいってのはその通りで、
 string s( istream_iterator<char>(cin), istream_iterator<char>() );
と書いて変数定義をしたつもりが関数の宣言とみなされて困ったりはするのだが。

481 :デフォルトの名無しさん:03/07/24 08:18
コンストラクタも関数なんだから、()は関数呼び出しという認識でも、つじつまは合う?

482 :デフォルトの名無しさん:03/07/24 09:36
関数の戻り値を参照で返すとき、関数内でreturn Class1(arg1, arg2);という
具合に引数つきコンストラクタで初期化したクラスで値を返すとします。
このとき、Class1の実体が保持されているタイミングはどこまでなのでしょうか。

483 :デフォルトの名無しさん:03/07/24 10:32
>>482
関数内まで。
というか、エラーも警告もなしにコンパイル通る?

484 :デフォルトの名無しさん:03/07/24 16:46
>>483
警告を出してくれないコンパイラも困りものだが、
これでエラーがでたらそれはコンパイラのバグ。

485 :デフォルトの名無しさん:03/07/24 17:31
>>484
非 const の場合、g++ だとエラーになったよ。

486 :デフォルトの名無しさん:03/07/24 20:08
>>485
確かにこの場合、非 const だとエラーにはなるだろうが、
それは右辺値・左辺値の問題なのでオブジェクトの寿命の問題とはまた別。

487 :デフォルトの名無しさん:03/07/24 20:51
今、ファイルへ書き込みするプログラム作ってるんだけど、
複数あるクラスのデータを、基本クラスのtypeプロパティを読み込んで
switchで派生クラスのデータをそれぞれ書いてるんだけど、
なんか、あまり綺麗じゃないんです。
ちなみに、基本クラスから派生しているクラスは5種類くらいあって
中身がそれぞれ違うんで、switchみたいなの使わないといけないんですが
なんか他にいい方法ないですかね?

488 :_:03/07/24 20:55
http://homepage.mac.com/hiroyuki44/

489 :デフォルトの名無しさん:03/07/24 21:02
>>487
元クラスを弄れないと仮定して、MixJなら楽勝なんだが…Visitorかな?

490 :デフォルトの名無しさん:03/07/24 21:25
Siralizableとかいうインターフェースを保存したいクラスに実装してそれぞれでSirializeをオーバーライドしたら?

491 :デフォルトの名無しさん:03/07/24 21:34
>>489
とりあえず、Visitorで検索したけど、
これで、いいんですかね?
http://member.nifty.ne.jp/yamazaki/doc/cpp_design_pattern.html#Visitor

>>490
それ、書き込んだ後に思いつきました。
とりあえずやってみます。

492 :デフォルトの名無しさん:03/07/25 00:18
>>486
いや、だから寿命の話じゃなくて
エラーがでないってことはないよってことで...。

493 :hoge:03/07/25 01:52
malloc()で動的にメモリ領域を確保して

構造体を格納してその後にprintfで内容を出力、
実行するとprintfの所で

Segmentation fault (core dumped)

gdbでデバッグしてみると
#0 0x610ba041 in strlen () from /usr/bin/cygwin1.dll
で落ちている...

strlenで落ちる(しかもprintf)のはどうしてでしょうか?


494 :デフォルトの名無しさん:03/07/25 02:02
>>493
訳が分からんが、普通strlen()で落ちるのは'\0'がないからでは?

495 :hoge:03/07/25 03:29
>>494

返答ありがとう^^
調べたのですが多分\0がないからと思います。
なぜならcharに数値を代入しているみたいです(こんな事ありえますか?)


496 :デフォルトの名無しさん:03/07/25 03:30
ワケワカラン。
一体どんな状況なんだ?

497 :hoge:03/07/25 03:45
new->s_pt = new->s_ft + BYTE_LEN;

charで定義されたs_ptに数値が代入されている恐怖の構造体みたいっす
最初は構造体の宣言に沿ってprintfの書式を決定していたのですが...w

498 :デフォルトの名無しさん:03/07/25 03:55
char は整数型だから、普通の整数値として扱うこともあるが。
まぁ、その場合は普通 singed か unsigned か付けるけど、
0 〜 127 しか扱わんなら問題になることはまれだと思う。

それにこれは C じゃないのか?

499 :hoge:03/07/25 03:59
>>494
ゴメ C言語なら俺に聞け! Part 62 が適当でしたね^^;;

charの謎が解けました^^;ありがと

500 :デフォルトの名無しさん:03/07/25 09:56
500

501 :デフォルトの名無しさん :03/07/25 10:23
質問です。
下のコードで、メモリは正常に解放されるのでしょうか?

int* np;
np = new int;
void* vp = np;
delete vp;


502 :デフォルトの名無しさん:03/07/25 10:46
>>501
そのコードがうまくいったとして、
void*をdeleteすんのはまずいだろ

503 :デフォルトの名無しさん:03/07/25 13:37
>>501
メモリは正常に解放されることが多いと思うが、未定義かな。
あと、デストラクタがある場合はデストラクタが呼ばれなくなってしまう。
delete をオーバーライドしてた時も、それが正常に呼ばれなくなってしまう。
ってところか。
まぁ、兎に角そんなことはすんな、と。

何をしたいのか分からんが、
テンプレートを使ったら良さそうなことを
したがってるような気がする。

504 :デフォルトの名無しさん:03/07/25 14:40
オーバーロードだった。不覚。

505 :デフォルトの名無しさん:03/07/25 15:16
>>593
レスありがとうございます。
動的に確保したいろいろな型のメモリアドレスを
リストかなんかで 持って置いて、あとで全ていっぺんに
解放できるかどうかためしていました。
void*で デストラクタが呼ばれないんじゃ使いもんにならないですね。


506 :デフォルトの名無しさん:03/07/25 15:19
待てよ?
POD 型だけなら大丈夫なのか?
デストラクタないし。
規格じゃどうなってる?

507 :デフォルトの名無しさん:03/07/25 15:38
>505
素直にスマートポインタを使ったほうがいいかと

508 :デフォルトの名無しさん:03/07/25 18:18
X (int i = 0) : m_i(i) { }
これってどういう意味?

509 :デフォルトの名無しさん:03/07/25 18:20
アハァ?

510 :デフォルトの名無しさん:03/07/25 18:25
ゴメソ全部書かないとわからんわな
struct X
{
X (int i = 0) : m_i(i) { }
int get() const { return m_i; }
int m_i;
};
で、どういう意味?

511 :デフォルトの名無しさん:03/07/25 18:25
クラスXのintを引数にとるコンストラクタで、メンバm_iをiで初期化します。
引数を指定しなかった場合iは0になります。

512 :デフォルトの名無しさん:03/07/25 18:29
>>511
510じゃないが、そういう意味なのか。わかりにくいな・・・
X (int i = 0){m_i=i } これじゃだめなのか

513 :デフォルトの名無しさん:03/07/25 18:29
m_iがクラスだったらどうすんだよ。

514 :デフォルトの名無しさん:03/07/25 18:35
>>512
初期化リスト( コロンから { まで )で書かれたものは初期化になるが
コンストラクタの関数ブロック内( { から } まで )に書かれたものは
普通のコードとして処理され、代入文は初期化ではなく代入になる。

int相手なら違いは無いが、メンバ変数がクラスインスタンスならこの違いが
いろいろ問題になることがある

515 :512:03/07/25 18:38
あ、なるほど。
intと書いてあったからintでしか考えていなかった。


516 :デフォルトの名無しさん:03/07/25 21:00
>>512
あと、m_i が const だとこの構文が必須。

517 :デフォルトの名無しさん:03/07/25 21:44
教えてください。
当方、solaris環境でプログラムを作っております。
すると作ったプログラムが、動かすマシンによって動作が異なるのです。
具体的には、Blade100なら問題なく動きますが、Ultra2だとたまーに
Bus Errorにてあぼーんです。
OSはSolaris8ですが、両マシンともリビジョンは同じ。環境も同じ。
違うのはOBPのバージョンくらいでしょうか。
プログラムはマルチスレッドとDBアクセスを実装してます。
なにか、ここが怪しいみたいなことありませんか?

518 :デフォルトの名無しさん:03/07/25 21:45
>>517
core拾ってデバッグしなはれ

519 :517:03/07/25 21:50
>>518
core吐かないのでしゅ

520 :デフォルトの名無しさん:03/07/25 22:27
>なにか、ここが怪しいみたいなことありませんか?
おまいのプログラム

521 :デフォルトの名無しさん:03/07/25 22:35
>>519
ulimitみたいなのはないのか?

522 :デフォルトの名無しさん:03/07/25 22:37
BusErrorってコア吐かないんだ。へぇー

523 :デフォルトの名無しさん:03/07/25 22:54
>>522
意外だろ?w

524 : :03/07/25 22:58
「たまーに」の頻度によるけど、core が得られない場合には strace しとくと
原因究明の手助けになることがありますよ。Solaris だと truss? ってのかな。


525 :デフォルトの名無しさん:03/07/25 23:22
ここは最高♪

http://www3.free-city.net/home/akipon/page001.html

526 :デフォルトの名無しさん:03/07/26 08:29
>>511
structとして宣言してるのに、クラスとして扱えるんですか?
構造体ってメンバ関数なんて搭載できたっけ?

527 :デフォルトの名無しさん:03/07/26 08:33
>>526
classとstructの違いはデフォルトのアクセス指定子だけ。
(class=private, struct=public)

528 :デフォルトの名無しさん:03/07/26 09:36
>>527
細かい事言うと、
template<class A> ...
はできるけど
template<struct A> ...
はできないという違いもある。

529 :デフォルトの名無しさん:03/07/26 09:43
template<ほげほげ> のほげほげに
class 〜 と typename 〜 両方を使えるようにしたのはどういう意図があるのかな?
教えて偉い人。

530 :デフォルトの名無しさん:03/07/26 09:46
最初は class しかなかったけど、
class じゃないものにも class を使うのもなんだってんで
後から typedef を仕様に加えた、ってんだったと思う。

細かい事言うと、
テンプレート引数にクラステンプレートを使う場合には
class しか使えない。

例)
template<template<typename T> class C> ....     // OK!
template<template<typename T> typename C> ...  // Illegal!

531 :デフォルトの名無しさん:03/07/26 09:47
typedef じゃなくて typename だって。

532 :デフォルトの名無しさん:03/07/27 02:37
> テンプレート引数にクラステンプレートを使う場合には
> class しか使えない。

こっちは、classじゃないものは型テンプレートにできないからそのまんま、
ってことなんだろうなあ。……と思ったけど、もし将来的にtypedefテンプレートが
規格に入ったら、typenameも使えるようになったりするのだろうかね。

template<typename T> typedef T size255array[255];
template<template<class> class> TCls {};
TCls<size255array> ...;

533 :デフォルトの名無しさん:03/07/27 22:02
3つほど。

cstdioヘッダはstdio.hをstd名前空間に移したもの。っていう認識でいいんですかね?

標準 C++ ライブラリには、Cの標準ライブラリも含まれるんですか?

それで、C++ソースでcstdioを(っていうかCの関数ライブラリを)利用することは
なんの格好悪さも無い。という認識でいいんですかね?

534 :デフォルトの名無しさん:03/07/27 22:02
>なんの格好悪さも無い
とは言えんけど別にいいんじゃないかな。

535 :デフォルトの名無しさん:03/07/27 22:12
>>527
字も違うよ!!!

536 :デフォルトの名無しさん:03/07/27 22:16
vector <vector <CEnmMissile*> > m_pEnmMissile0;
クラスのメンバとしてこの様に宣言したら、警告がでたんですけど。
何がいけないんでしょうか?

537 :デフォルトの名無しさん:03/07/27 22:17
>>536
コレだけの情報じゃ和歌欄

538 :536:03/07/27 22:26
警告の内容はこれです。

d:\program files\microsoft visual studio\vc98\include\vector(39) : warning C4786:
'std::vector<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >::vector<std::vector

<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >' :
デバッグ情報で識別子が 255 文字に切り捨てられました。

d:\program files\microsoft visual studio\vc98\include\vector(60) : warning C4786:
'std::vector<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >::~vector<std::vecto

r<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >' :
デバッグ情報で識別子が 255 文字に切り捨てられました。

539 :デフォルトの名無しさん:03/07/27 22:29
ああいつものやつね

540 :デフォルトの名無しさん:03/07/27 22:39
>>536
お前プログラマ向いてないよ。今すぐそのソース消してやめちまえ。
普通warning C4786でドキュメント見るか検索するだろ。

541 :536:03/07/27 22:50
>>540
原因がわかりました。ありがとう。

542 :デフォルトの名無しさん:03/07/27 23:31
>>533
>なんの格好悪さも無い
格好悪いけどどうしようもない時はある。
(プログラムの終了処理をメッセージ出力しながらデバッグしている時は
std::cout などがもうデストラクトされてて printf 系を使うしかなかったりする)

あくまで補助、あくまで利便と互換性の為。

543 :デフォルトの名無しさん:03/07/28 01:00
BorlnadC++5.5で以下のようなコードをコンパイルすると
「push_backに一時変数を使っている」というような警告が出ます。
しかし、これは警告の方がおかしいのではないでしょうか?
仮想関数を持たないクラスなら、こんな警告はでません。
それとも、なんか勘違いしてるでしょうか。どなたかお願いします。

#include <iostream>
#include <vector>
using namespace std;
class Hoge{
public:
virtual void func() const = 0;
};
class SubHoge : public Hoge{
void func() const{};
};
int main(){
vector<Hoge*> v;
v.push_back(new SubHoge());
}

544 :デフォルトの名無しさん:03/07/28 01:22
push_back の引数の型は const T& だから、
テンポラリオブジェクトを渡すことは規格では可能
(例えば const int& に 4 とかを渡して構わない)。
この規格がいつ追加されたか分からないけど、
BC++ がこの規格に対応してないってことだけは確かみたいだね。

545 :デフォルトの名無しさん:03/07/28 01:50
警告だから対応してはいるだろ

546 :デフォルトの名無しさん:03/07/28 02:06
うーん。拡張機能として扱われてるのかな。
BC++ 5.5 は古いからなぁ。

547 :デフォルトの名無しさん:03/07/28 02:17
言い訳必死。

548 :デフォルトの名無しさん:03/07/28 02:23
一時変数を渡してるからじゃなくて(それはできる)、
暗黙に一時変数が作られてるっていう警告だよ。確か。

549 :デフォルトの名無しさん:03/07/28 21:36
>>548
>暗黙に一時変数が作られてるっていう警告だよ。確か。
よくわからんのだが、それは悪いことなの?

550 :デフォルトの名無しさん:03/07/28 21:53
>暗黙に一時変数が作られてるっていう
関数の値返しでは普通の方法。
通常bcc32でその警告は非const参照で一時変数を
参照する(標準規格外の利用)時に出るんだが
なぜそのプログラムでも出るのか不明

551 :デフォルトの名無しさん:03/07/28 21:53
コンパイラがしっかりしてれば問題ないはず。
これに警告を出すというのがちょいと気になるところではあるけど...
多分対応してくれてると思う。

552 :デフォルトの名無しさん:03/07/28 22:45
push_backにnew SubHogeの参照じゃなく、そのコピーの参照を渡してるみたいだナー
cl(VC7)もそう。gcc2.95はコピーを作らなかった。

553 :デフォルトの名無しさん:03/07/29 00:45
new SubHogeの結果はポインタだからコピーで問題ないのでは?良く分からんのだけど。

554 :デフォルトの名無しさん:03/07/29 00:55
いまさらだけど、>>543のプログラムをbcc32やったら、警告でますた。
不思議でつ。

555 :デフォルトの名無しさん:03/07/29 01:01
SubHoge* から Hoge* への変換で一時オブジェクトが発生。

556 :デフォルトの名無しさん:03/07/29 01:12
>>555
ビンゴ!
あんたは偉い!

しかし、文法的には、それでも間違いではないよねえ。
なんで警告出すんだろ。

557 :デフォルトの名無しさん:03/07/29 01:17
>>552
今、近くに環境がないんだけど、clでやるとうじゃうじゃ警告が出るのに、
IDEでやるとうそのように警告0になるってことない?
俺はSTLがらみでよく経験したような気がするんだが。

558 :デフォルトの名無しさん:03/07/29 01:23
>>555>>556
ふーん。そうなんだ。キャストじゃなくてポインタの一時オブジェクトなのか。・・・うーん。

559 :デフォルトの名無しさん:03/07/29 01:38
>>556
コンパイラが古いからじゃね?

560 :デフォルトの名無しさん:03/07/29 02:10
> これは,参照変数またはパラメータが,ユーザーの期待するものではなく,
> 一時変数を参照していることを意味する警告です。 ←BCBのヘルプ

おまいが渡したと思った変数の参照は、実は渡されて無いぞ!ってことかな。
仮に受け取った関数側でconst外してNULLとか代入しても(そんなことしないだろうけど)、
それはコピーだからコピー元は変更されてないぞと。

561 :デフォルトの名無しさん:03/07/29 05:10
コピー元はどうせ単なる値であって変数じゃないから
それで問題ないんだけどね。

562 :デフォルトの名無しさん:03/07/29 06:46
小4くらいのとき、マンコが穴だなんて思いもしなかった。
が、年の離れた兄貴のいる加戸は
「ヤッターマンコーヒーライター」
などという言葉を知っているいわば勇者的存在であった。
で、穴があることを知った俺たちだが、どうしてもそれが信じられない。
で、むしろ逆にガキであることを利用して調べようと思った。
ターゲットは音楽の教師である。美人だった。今にして思えば
20歳くらいだったのではないだろうか。短大出てすぐだったように思う。
実行はいたって単純。ガキ特有のカンチョーというあれである。
あれを前に突き刺すというのだ。
ガキなら許されるであろうという勝手な発想だが、
たしかにマンコすら知らない奴がほとんどだったからナイスな判断だったろう。
で、実行は加戸だった。
加戸はなんの躊躇もなくやった。
思い切り。
思い切ってやっちゃいかんだろ、と思った。なぜにおまえはフルパワーなのだ、と。
音楽教師は泣いた。20歳前後という年齢を考えればギャグでもきつい。
ガキからすれば大人だったのだが、今思うと娘だ。
むしろ、処女だった可能性すらある。すまん先生。
が、加戸も泣いていた。
両手人差し指骨折だった。第2関節より下で折れていた。
もろに刺さったんだと感心した。やはり勇者だ。
しかも、救急隊員に、マンコに指が刺さって折れましたと泣きながら事情を説明していた。
あの姿も相当かっこよかった   

563 :デフォルトの名無しさん:03/07/29 12:02
変数渡しても一時オブジェクト作られるけどね

564 :デフォルトの名無しさん:03/07/29 13:59
仮引数のことけ?

565 :デフォルトの名無しさん:03/07/29 14:09
SubHoge* a;
v.push_back(a);
としても、aの参照じゃなくて、aのコピーの参照が渡されるって話。

566 :デフォルトの名無しさん:03/07/29 14:35
別にコピーなんて作られんと思うが。

567 :デフォルトの名無しさん:03/07/29 15:10
作られてるよ

568 :デフォルトの名無しさん:03/07/29 16:00
SubHogeのコピーじゃなくてSubHoge*のコピーな。

569 :デフォルトの名無しさん:03/07/29 16:05
まあ、そいういうことが起こってるってのを頭の隅に入れておけばいいんじゃない >>543

570 :デフォルトの名無しさん:03/07/29 16:27
あ、やっと分かった。
コピーされるわ。

571 :デフォルトの名無しさん:03/07/29 18:53
コピーされるのは当然だが
なぜその警告が出るのかが分からない

572 :デフォルトの名無しさん:03/07/29 18:53
>>571
俺も

573 :デフォルトの名無しさん:03/07/29 19:02
当然なのか。gccはされないけど。

574 :デフォルトの名無しさん:03/07/29 19:13
gccは最適化か知らんが時々変わったことをするからな
rvalueをconst参照する時は一時変数が作られることになっている

575 :デフォルトの名無しさん:03/07/29 19:14
言葉のアヤかもしれんが、(だったらすまん)
>>565
>aの参照じゃなくて、aのコピーの参照が渡されるって話。
は、少し変だと思う。
SubHoge*であるaが直接、参照Hoge*&が渡されるか、
Hoge*にキャストされたものが渡されるんだよね。
(正直よくわからんのだが。)
キャストで内部的にコピーを作ることがあるのかもしれないが、
絶対コピーされるということはないんでは?


576 :575:03/07/29 19:15
×参照Hoge*&が
○参照Hoge*&に

鬱。

577 :デフォルトの名無しさん:03/07/29 19:21
>>575
コンパイラ依存の挙動をここで語るべきではないと。

a = b;
のような代入ですらコンパイラによっては最適化で消滅してしまうのだから何も言えなくなってしまう。

578 :デフォルトの名無しさん:03/07/29 19:32
>>574
そうなんだ。ごめん。ちゅうことは、処理系依存じゃなくて規格で決まってるのか。
それじゃ確かに警告はおかしいね。

579 :575:03/07/29 22:46
>>577
まあ、つまり、俺も
>コンパイラ依存の挙動をここで語るべきではないと。
と言いたかったんだが。
それで、「コピーされる」は規格にはないのでは?と。
(これは>>578と同じ趣旨かな?)

なんか難しくなりすぎたな。
>>543はどっか逝っちゃったか?

580 :543:03/07/29 23:45
543です。みなさんありがとうございます。
でも、びびってちびりそうです。
>>543で書いた「仮想関数を持たないクラスなら」って大嘘でした。
継承関係がある場合、同じ症状がでるようです。すみません。
それと、VC7(コマンドではなく)でやったら、警告は出ないという
話を友人から聞きました。未確認ですが。

もうROMになります。

581 :デフォルトの名無しさん:03/07/30 00:13
例外を使わずに、失敗し得るオブジェクトの生成を行う方法にはどんなものがあるでしょうか?
さしあたって、Embedded C++ です。泣けます。

582 :デフォルトの名無しさん:03/07/30 00:15
くだらんレスですまんが、
>泣けます。
しみじみ。

ということで、誰か助けてやってくれ。

583 :581:03/07/30 00:23
>>582
ありがとう。

Embedded C++ って、破綻してるような気がしてきた。
コンストラクタの失敗を伝える唯一の手段を削っておいて、
代替手段はどうするつもりなんだろう。

584 :デフォルトの名無しさん:03/07/30 00:32
class PossiblyFail {
 ...
public:
 static PossiblyFail* Create() {
  PossiblyFail* p = new PossiblyFail;
  if( FAILED == p->Init() ) { delete p; return 0; }
  return p;
 }
};

か、あるいは

class ShippaiSurukamo {
 ...
public:
 ShippaiSurukamo() {
  ...
  m_bSuccessFully_Constructed = 異常なし?true:false;
 }
 operator bool() const {
  return m_bSuccessFully_Constructed;
 }
}

として if( ShippaiSurukamo obj ) { ... } else { /*エラー処理*/ } か、
じゃないか?よくある手としては。

585 :デフォルトの名無しさん:03/07/30 00:56
>>580
C++のテンプレはよくは知らんので勘違いだったらすまんが、
引数渡しの方法がどうこうとか、push_back(arg)が引数の更に
コピーを登録しているとかなんて問題じゃなくて、543のコードは
実際不味いだろ。

 v.push_back(new Hoge());

の v.push_back()の引数にオブジェクトそのものじゃなくて、newで
生成したオブジェクトへのポインタを渡しているが、メイン側では
そのポインタをどの変数でも受けてないだろ。

コンパイラはポインタを渡している関数の素性や、その先でちゃ
んとpop、delete しているか迄は関知しないから、プログラム的に
は、参照が残るがどうか分からない行方不明候補のオブジェクト
が生成された事になる。

(要は、 new Hoge(); ってのを単体でやっているのと同じ状態)

だから、「本当にいいんかい、ワレ? テメェ、この関数はちゃんと
先で責任取っているんだろうな?」ってワーニング出しているんだよ。
ワーニング吐く吐かないは、単なるワーニングレベルオプションの
設定の違いかと思われ。

586 :デフォルトの名無しさん:03/07/30 00:59
>>585
その理屈だと new Hoge(); と書いたら同じ警告が出ることになるのかね?

587 :デフォルトの名無しさん:03/07/30 01:03
>>585
> ポインタをどの変数でも受けてないだろ。
vが受け取ってるだろ

588 :デフォルトの名無しさん:03/07/30 01:43
もっともらしくデタラメぶっこくなや

589 :デフォルトの名無しさん:03/07/30 07:14
>>585
申し訳ないが、でたらめかと。

590 :デフォルトの名無しさん:03/07/30 09:30
>>585
ん?これでたらめじゃない?

591 :デフォルトの名無しさん:03/07/30 10:33
>>585
おっとこいつぁでたらめだ。

592 :hina ◆IqUyIbTXck :03/07/30 18:00
sprintfのバグ発見してしまいました。
__int64型の数字を%dで二つ入力すると二つ目の数が0になります。
char buf[32];
__int64 iTest1 = 30000, iTest2 = 20000;
sprintf(buf, "%d\t%d\t\n", iTest1, iTest2);

ちなみに環境はVC++.NET

593 :hina ◆IqUyIbTXck :03/07/30 18:00
age

594 :デフォルトの名無しさん:03/07/30 18:08
>>592
intが4バイトなら当然かと。
一番目の%dでiTest1の4バイト分をintとして表示し、二番目の%dで残りの4バイト分をintとして表示するんだから。

595 :デフォルトの名無しさん:03/07/30 18:08
%d指定しといて何言ってんの
sprintf(buf, "%I64d, %I64d", iTest1, iTest2);

596 :594:03/07/30 18:12
「表示」はしてないか。

597 :hina:03/07/30 18:15
やはりそうだったんですか。
釣りではないんですが、intの他にdoubleぐらいしか指定できなかったもので・・。
この場合はdoubleを指定すればいいんでしょうか

598 :デフォルトの名無しさん:03/07/30 18:15
いるよね、592みたいな奴。
自分でミスっといてコンパイラやライブラリのせいにする奴。

599 :デフォルトの名無しさん:03/07/30 18:17
>>597
はぁ?変換指定子のことか?
それなら595が%I64dと書いているだろ。__int64も含め移植性は低いが。

600 :hina:03/07/30 18:19
>>599
あっすみません。
しかし、VSのヘルプにはI64なんて載ってないよ(;´Д`)

601 :デフォルトの名無しさん:03/07/30 18:22
>>600
バージョンは?
VS.NETのヘルプには書いてあります。

602 :hina:03/07/30 18:26
printf 関数の型フィールド文字
↑ここみてました

603 :デフォルトの名無しさん:03/07/30 18:28
コンパイラのせいにした挙句ヘルプにも載ってないとほざく

604 :デフォルトの名無しさん:03/07/30 20:08
* printf 関数と wprintf 関数の書式指定フィールド
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_format_specification_fields_.2d_.printf_and_wprintf_functions.asp?frame=true

605 :デフォルトの名無しさん:03/07/30 20:37
C++でクラス(仮にAとします)のstaticメンバの初期化は
Aのグローバルなインスタンスのコンストラクタよりも先に呼ばれることは
保証されているんでしょうか?↓こんな感じです。

class A{
  static int m_val;
public:
  A(){/*m_valを参照するようなコンストラクタ。m_valが初期化されている必要あり。*/}
};

int A::m_val = 0;//スタティックメンバの初期化

A a;//グローバルインスタンス

int main()
{
  //処理
}

一応、上のコードでテストしたらうまくいっているようなのですが、本当にいつでもうまく行くか
よく分かりません。
教えてくださいスゴイ人!


606 :デフォルトの名無しさん:03/07/30 21:00
>>543

#define STRICT
#include <windows.h>
#include <vector>

class nurupo : public IUnknown
{
public:
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, void **);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
};

std::vector<IUnknown*> mona;

HRESULT fucktory()
{
mona.push_back(new nurupo);
return S_OK; // ( ´_ゝ`)< ふーん
}


607 :デフォルトの名無しさん:03/07/30 23:26
>>605
グローバル変数&関数外のスタティック変数は忘れれ。
仕様としてあるだけでどっちも使い物にならん。
スタティック関数を使ってシングルトンにしな。

608 :デフォルトの名無しさん:03/07/30 23:38
シングルトンをマルチスレッド対応するのは
結局どうするのが正しい(安全)んだろ?


609 :デフォルトの名無しさん:03/07/30 23:40
アクセスしない

610 :デフォルトの名無しさん:03/07/30 23:41
>>608
インスタンス生成でちゃんとロックしとけばええんでないの?

611 :581:03/07/31 00:03
>>584
ありがとう。

コンストラクタの失敗に関する問題を中心に話し合った結果、
Embedded C++ しか使えないのであれば、むしろ C のほうがマシという結論に至りました。

ぐぐって見つけた↓のような個人的な見解は的を得ていると思う。
「彼らは『実装するのが難しい』という判断に基づいて勝手な制限を提唱している」
(ttp://gcc.gnu.org/ml/gcc/1998-12/msg00984.htmlより、意訳)

仕様を決めたのは誰だろうと見てみれば、これ、日本の企業が主導してたんだな・・・

612 :デフォルトの名無しさん:03/07/31 00:03
CPUクロック周波数と、メモリ搭載量、システムリソースの残量、IPアドレスの取得をしたいのですが、どうすればいいでつか?

613 :デフォルトの名無しさん:03/07/31 00:09
>>612
環境に依存するのでココで聞いても無駄

614 :デフォルトの名無しさん:03/07/31 00:22
×的を得る
○的を射る
○当を得る

615 :デフォルトの名無しさん:03/07/31 00:25
>>611
Embedded C++ とやらがどんなもんかはよー分からんが、
C でできることは C++ でできるんだから
わざわざ C にすることはないんじゃないの?

616 :デフォルトの名無しさん:03/07/31 00:26
>>614
> 文例
> この作品に対する彼の批評は的を得たものとはとうてい言いがたい.
> I really must say that his criticism of this work is wide of the mark.
> New College Japanese-English Dictionary, 4th edition (C) Kenkyusha Ltd. 1933,1995,1998

時代の流れです

617 :デフォルトの名無しさん:03/07/31 00:29
第4版でそれか...。

618 :デフォルトの名無しさん:03/07/31 00:43
>>616
その辞書だけだろ。

619 :581:03/07/31 00:48
>>614
あぃ、すんません。
>>615
基本的には、C++のフル仕様から以下のものを削除したものになります。
mutable・例外・実行時型情報・template・namespace・
多重継承・仮想継承・C++スタイルキャスト・
wchat_t・long double・ファイル操作・ロケール

C++プログラムとして相当中途半端なソースにならざるを得ないのです。
特に痛いのは、例外・templateですね。
これが有るのと無いのとでは根本的なソースの書き方が違ってしまいます。

うーん、それでも、たしかにC++のほうがいい場合も十分多くありますねぇ。

620 :デフォルトの名無しさん:03/07/31 00:54
>>611
なんだか悲惨そうな話ですね。

組み込み系ってよく知らないんですが、
普通のC++を使うという選択もあるんですか?
>>611を見ただけで、EC++嫌って気がしてきたので。

621 :デフォルトの名無しさん:03/07/31 01:18
>>619
C から削られた機能がないなら EC++ でいいんじゃない?
C++ として中途半端だろうが、C より組みにくいってことはないやろ。
参照、inline 関数、クラス、bool 。
これがあれば EC++ にも十分アドバンテージあるんじゃない?

例外は昔ながらの goto + bool でいい。
どうしようもなく面倒になる場合は exit してしまったんでいいし。
template はマクロを駆使するか、使わないでなんとかするか、
どうしようもない場合は自前でソースをコンバートするか。

昔は「template は将来のために予約されています」とかヘルプに書いてあったもんじゃー。
Turbo C++ 1.0 ...懐かしい。

622 :605:03/07/31 02:00
>>607-610 サンクス

とりあえず、グローバル変数はやめにして実装し直すことにします。

623 :デフォルトの名無しさん:03/07/31 09:40
弓道をイメージすれば、「的を得る」のおかしさは自明。

624 :デフォルトの名無しさん:03/07/31 11:47
あんた、よくクドイって言われるだろ。

625 :デフォルトの名無しさん:03/07/31 12:25
>>624
涙目ですね。
でもそれだけ悔しい思いをすればもう間違いませんよね?

626 :デフォルトの名無しさん:03/07/31 14:21
え?弓道って優勝者への景品として的が持ち帰れるのとちごたん?

627 :デフォルトの名無しさん:03/07/31 14:38
このスレはいつから会社でウザがられてるウンチクおやじの
ストレス発散場になりましたか?

628 :デフォルトの名無しさん:03/07/31 20:02
一般常識レベルの日本語能力もないんじゃなあ。
「的を射る」は就職試験とかでも頻出してるのに。

629 :デフォルトの名無しさん:03/07/31 20:23
みなさんC++の基礎を覚えるのにどれくらいかかりました?
SDKやMFCじゃなくて初心者本で良くあるdos窓のプログラムです。

630 :デフォルトの名無しさん:03/07/31 20:31
operatorから仮想関数が呼べるようになるまで3ヶ月だったかな...
TCPLの初版で。

631 :デフォルトの名無しさん:03/07/31 20:34
>>623-628
オマエラこのスレ的にゼンゼン的を得ない発言だな
言葉として知っていても意味を知らない馬鹿ドモハケーン

>>629
基礎がいったいドコまでを指すのかわかんね



632 :デフォルトの名無しさん:03/07/31 21:32
exportが実装できるぐらいまでが基礎とか(無茶)

633 :デフォルトの名無しさん:03/07/31 21:57
的を得るはあるよ。意味は「射る」とは別だけどね。

634 :デフォルトの名無しさん:03/07/31 22:12
get a target

635 :デフォルトの名無しさん:03/07/31 22:17
肉壷げっちゅ〜

636 :デフォルトの名無しさん:03/07/31 22:23
バグを得る

637 :デフォルトの名無しさん:03/07/31 22:32
的を得るは的を射るや当を得るの間違いから生まれたという説が多いが、俺はそうは思わない。
というのも、的を得るからは的を射るとは異なったニュアンスを受けるからだ。
的を射るは要点をずばり突いているという感じだが、的を得るは要点を正しく把握したうえで発言しているという印象を受ける。
つまり誤用ではなく、異なった意味を持つ造語だ。
この場合の「得る」は要領を得るの「得る」と共通するものがあると思う。

638 :デフォルトの名無しさん:03/07/31 22:34
必死だな

639 :デフォルトの名無しさん:03/07/31 22:47
「的を得る」は弓道から派生してきてないよ。
「景品をならべておき、それを鉄砲で撃ち、当たったら景品をお持ち帰り」
の、テキ屋からきている。
 この、「鉄砲のタマを当てようとする景品」は「的」に他ならず、
「景品にタマが当たったら、お持ち帰り」なのだから、それは
「的を得る」と表すより他にない。
 意味としては、「UFOキャッチャーで品物を巧くGetできて
うれしいね」という状態を表す。

640 :デフォルトの名無しさん:03/07/31 23:09
>>639
的を射ると同じ意味で使ってるのはおかしいと言ってるんだYO!!
つーかそろそろスレ違いだからやめようぜ。言葉は進化する厨が出てくるし。

641 :デフォルトの名無しさん:03/07/31 23:31
>>639
UFOキャッチャーに的は有りません。

642 :デフォルトの名無しさん:03/07/31 23:39
>640
同じ意味で使っているとどうして分かる?
>641
あるわけねーだろが。比喩なんだからよ。

643 :デフォルトの名無しさん:03/07/31 23:39
>>641
ならラッキーショットだ。

644 :デフォルトの名無しさん:03/07/31 23:40
>>640
>つーかそろそろスレ違いだからやめようぜ。言葉は進化する厨が出てくるし。

そろそろじゃねーよ馬鹿、てめー自分が再燃さしといて何抜かしてやがる、死ねキチガイ

645 :640:03/07/31 23:44
>>644
正直すまんかった。

んじゃやめよう(´・ω・`)ションボリック

646 :デフォルトの名無しさん:03/07/31 23:45
頭が悪い奴はすぐキレる

647 :デフォルトの名無しさん:03/08/01 00:45
おまいらC++の話してくださいよ

648 :581:03/08/01 00:46
>>621
たしかに言語機能の面だけで比較すればC++に移行するほうがいいです。
でも、現在の環境に特有のデメリット・導入コスト(ここらへんは詳しく説明するつもりはありません)
をあわせて天秤にかけた結果、Cのままでいくことになったわけです。

そして、みなさま、ごめんなさいでした。

649 :デフォルトの名無しさん:03/08/01 00:51
ぶっちゃけtemplateがなかったらC++は廃れてた気がするよ。

650 :デフォルトの名無しさん:03/08/01 00:54
>>648
まぁ、そういうことならしゃーないわな。

651 :デフォルトの名無しさん:03/08/01 01:05
>>649
同意。もしtemplateが無かったら俺はC++を支持してない。
JavaやC#の方を支持してるだろうな。

ただ、Cよりかは遥かにマシ。

652 :デフォルトの名無しさん:03/08/01 01:21
C++ と Java/C# は
ネイティブコンパイラがメインか否かという大きな違いがあるので、
一概に比べることはできんと思うが、
純粋な言語仕様的にというなら分かる気もする。
C# は魅力的なところも多いけど、
template(generic)が無かったのには落胆した。
generic を追加するという話は聞いたことあるけど、どうなることやら...。

653 :スカトロ初心者:03/08/01 01:25
C++について最近勉強を始めたごくごく初心者です。
今ひとつポインタについて理解することができません。
そこで、動的オブジェクトの割り当てとその開放について質問させてください。

int *t;
t = new int;*t=1;
t = new int;*t=2;
t = new int;*t=3;

上記のようにして動的オブジェクトを3回割り当てた場合、
ポインタtは一番最後のアドレス(値3が格納されたメモリ)のみ記憶しています。
この状態で、
質問1:
値1や値2の格納されたメモリエリアに簡単にアクセスする方法はありますか?
(言い換えれば、値1や値2のポインタを取得する方法はありますか?)
質問2:
delete t;では値3の格納されたエリアしか開放できません。
値1や値2の格納されたメモリを開放する簡単な方法はありますか?
質問3:
ポインタを使ったポピュラーなデータ構造として「リンクリスト」がありますが、
このデータ構造は上記のプログラムと本質的に同じ部分があると思われます。
つまり、リストの各要素を格納しているメモリエリアに固有の識別名が与えられていません。
(例えば、配列なら、a[0],a[1],a[2]・・・のように、それぞれのメモリエリアの識別ができます)
リストのn番目の要素のポインタや値を簡単に取得する方法はありますか?
また、リスト全体を簡単にdeleteする方法はありますか?

これらの質問の真意は、
確保したメモリについてプログラマはどこまで責任を持たなければならないのか?ということです。
質問2が不可能だとすると、このようなプログラムは「書いても文法上エラーにはならない」が、
やがてはメモリ不足でエラーを起こす「書いてはいけない」プログラムだということになりますよね?
よろしくお願いします。m(__)m

654 :デフォルトの名無しさん:03/08/01 01:29
>>653
メモリリークという言葉を知っている?

655 :デフォルトの名無しさん:03/08/01 01:29
回答1:ない
回答2:ない
回答3:ない

656 :デフォルトの名無しさん:03/08/01 01:32
>>653
std::vectorを使いなさい

657 :スカトロ初心者:03/08/01 01:32
>>654
えぇ、意味は知っています。
要するに、これはメモリリークを起こすプログラム例だということですね?
こういうプログラムは書いちゃいけない、と。

>>655
ひゃっほう。
ってことは、リンクリストを削除する場合、
ここの要素をひとつずつたどりながらdeleteしていくしかないわけですか・・・かっふん。

658 :スカトロ初心者:03/08/01 01:36
>>656
現在はまだ初心者なのでその言葉の意味がわかりませんが、
頭の隅にとどめておきます。ありがとうございました。m(__)m

659 :デフォルトの名無しさん:03/08/01 01:36
>>653
名前が...まぁいいけど。

回答1:
ない。1 や 2 の格納されたアドレスを保持していた変数 t は
新しいアドレスで書き換えられてしまったので、
1 や 2 の格納されたアドレスにアクセスする手段は失われてしまった。
アクセスしたいなら、そのアドレスを保持するポインタ変数を作るべし。

回答2:
ない。従って、1 や 2 の格納されたメモリエリアはプログラム終了まで永遠に開放されない。
これをメモリリークといって、厄介なバグのうちの1つである。
少量なら気づかないが、ずっとプログラムを実行しておくと溜まり溜まって
メモリを圧迫してしまうなんてこともある。
バグがあることに気づきにくいってところが厄介なわけね。

回答3:
n 番目の要素を得るには、順番に n 回辿っていかなくてはならない。
リスト全体を delete するには、普通に巡回して delete していけばいい。

回答4:(最後の話に対して)
プログラマはきちんとメモリを管理しなくてはならない。
それが面倒な場合、スマートポインタというのを使うことができる。
標準では auto_ptr 、別のライブラリには boost::shared_ptr とかある。
これでも使用法に注意する必要があって、
完全に気にしなくて良いという状態にはならない。

660 :デフォルトの名無しさん:03/08/01 01:37
一般的な双方向リンクリストならstd::listを使え。

661 :デフォルトの名無しさん:03/08/01 01:40
C++はCほどじゃないがメモリに関する注意(リークだけじゃなく)は怠るなってことだな。

662 :デフォルトの名無しさん:03/08/01 01:41
回答2は、「ある」だよ。ガベコレ使えばいいんでないか。
簡単かどうかは、ま、何ともいえないけどサ、、

663 :スカトロ初心者:03/08/01 01:44
>>659
詳細にありがとうございます。

BASICから入ったせいでしょうか、
そもそも値の保持されている領域になんの名前もついていないことが
今ひとつしっくりこなくて・・・。
回答4に関してはまだ理解できませんが、覚えておきます。
深夜にどうもありがとうございました。

>>660
はい、これも記憶しておきます。
ありがとうございました。

664 :デフォルトの名無しさん:03/08/01 01:46
>>662
よく見ろ。
> この状態で、


665 :デフォルトの名無しさん:03/08/01 01:47
std::vector    動的配列
std::list      双方向リスト
std::deque    .双方向キュー。配列とリストを融合したようなもの(要素の追加が楽な配列のようなもの)
std::queue    キュー(std::priority_queue というのもある)
std::stack    .スタック
std::set      高速探索可能なコンテナ(std::multiset というのもある)
std::map     .連想配列(std::multimap というのもある)
std::hash_set  ハッシュ表+set
std::hash_map .ハッシュ表+map

666 :デフォルトの名無しさん:03/08/01 01:47
ガベコレはふつー、newを乗っ取る。

667 :デフォルトの名無しさん:03/08/01 02:05
>>666
よく見ろ。
> 簡単な方法

668 :デフォルトの名無しさん:03/08/01 02:10
>>649
うむ

669 :デフォルトの名無しさん:03/08/01 02:34
こんなコードを見ました。
enum col{red, black, white};
int a[3];
a[red] = 0;
a[black] = 0;
a[while] = 0;
これはまちがってないのでしょうか。
それならどういう意味なのでしょうか。

670 :デフォルトの名無しさん:03/08/01 02:37
a[0] = 0;
a[1] = 0;
a[2] = 0;

671 :デフォルトの名無しさん:03/08/01 02:40
>>670
教科書でenumの定義を見ました。
確かにそんな感じですが、ほんとうにいいんでしょうか?
なんかenumと整数は違うとも書いてあるんです。

672 :デフォルトの名無しさん:03/08/01 02:44
心配なら
enum col{red=0, black=1, white=2};
とすればいい

673 :デフォルトの名無しさん:03/08/01 02:44
>>671
enum の普通の使い方だけど。

enum col{ red, black, white, col_size };
int a[col_size];
a[red] = 0;
a[black] = 0;
a[white] = 0;

のように、サイズを enum で定義するテクニックもある。
まぁ、列挙子としては不正な値を1つ増やしてしまうというデメリットもあるけど。

674 :669 == 671:03/08/01 02:49
>>670 >>672 >>673
なんとなく、なっとくいきました。
ありがとうございます。

675 :デフォルトの名無しさん:03/08/01 02:53
>>674
その調子でガンガレ。

676 :デフォルトの名無しさん:03/08/01 03:08
いつもこうしちゃう、小心なオレ
enum col{red=0, black, white};

677 :デフォルトの名無しさん:03/08/01 03:29
>>676
兄貴と呼ばせてください。

678 :デフォルトの名無しさん:03/08/01 03:32
>>653
struct IntList{
  int i;
  IntList * prev;
  IntList * next;
};
IntList * pstart=new IntList;
pstart->i=0;
pstart->next=NULL
pstart->prev=NULL;
pstart->next=new IntList;
pstart->next->prev=pstart;
pstart->next->next=NULL;
pstart->i=1;
pstart->next->next=new IntList;
pstart->next->next->prev=pstart->next;
pstart->next->next->next=NULL;
pstart->next->next->i=2;
for(IntList p=pstart;p!=NULL;p=p->next){
  std::cout << p->i << std::endl;
}{
  IntList p;
  for(p=pstart;p!=NULL;p=p->next){
    delete p->prev;
  }
  delete p;
}
手抜きだがこんな感じでポインタ使わないと簡単には実現できないようなものを作ってみるとポインタの理解が深まるかもね
使うだけならstd::listを使うけど
追記:bad_allocとかの例外を考えると素直にスマートポインター使いましょう。


679 :デフォルトの名無しさん:03/08/01 04:11
配列を関数に渡すだけでポインタ使うんだけどね。

680 :デフォルトの名無しさん:03/08/01 04:24
参照で渡せる

681 :デフォルトの名無しさん:03/08/01 04:57
>>680
固定長か vector ならね...。

682 :デフォルトの名無しさん:03/08/01 05:03
可変長の配列などC++にはない。

683 :デフォルトの名無しさん:03/08/01 05:16
>>682
渡せる配列のサイズが固定という意味で言ったのだが...。

684 :デフォルトの名無しさん:03/08/01 05:27
可変固定とは別に静的に対する動的な配列はnew構文の中だけに
存在するが、配列長が実行時に決まる場合、可変な型が存在しない以上
これをポインタ以外で受け取る方法はない。
結局、サイズが固定でない配列はない。

685 :デフォルトの名無しさん:03/08/01 06:05
new int[10]はint(&)[10]を返して、参照(又はポインタ先)に
限って動的型を許すのは出来ないのかね。
int (&a)[n]=new int[n];//動的配列への参照
int *a=new int[n];//標準変換によって合法
それで配列でないnewも参照を返す方がエレガントだ。
int &i=new int;
int *p=&new int;

686 :デフォルトの名無しさん:03/08/01 06:35
見た目は綺麗だけど、多分不便。

687 :デフォルトの名無しさん:03/08/01 07:14
>>681
#include <iostream>
template <int size>
void func(int (&buf)[size]){
    for(int i=0;i<size;i++){
        std::cout << buf[i] << std::endl;
    }
}
int main(){
    int buf[]={0,1,2,3,4,5,6,7,8,9};
    func(buf);
    return 0;
}
templateスレだと既出っぽ


688 :デフォルトの名無しさん:03/08/01 10:28
まあ、同じことだが、

void func (int buf, int size) {
for (int i = 0; i < size; ++i) {
std::cout << buf[i] << std::endl;
}
}

template <int size>
void func(int (&buf)[size]){
func(buf, size);
}


689 :デフォルトの名無しさん:03/08/01 10:32
>>688
どうせなら template のほうには inline の指定をしとけ。

690 :デフォルトの名無しさん:03/08/01 11:06
stringをincludeしていないのにstrlenが使えるんですがなぜなんでしょうか?
やさしいC++という本にはインクルードしなければいけないと書いてありました。
環境はVC.NET2003です。

691 :デフォルトの名無しさん:03/08/01 11:09
>>690
Cとしてコンパイルしているだろう?

692 :デフォルトの名無しさん:03/08/01 11:54
>>689
そういう話をしているんじゃないだろ。

693 :デフォルトの名無しさん:03/08/01 12:12
>>692
だから「どうせなら」からレスが始まってるんだろ。

694 :690:03/08/01 13:20
ソースファイルの拡張子はcppなのでC++だとおもいますが、、
Cとしてコンパイルとはどういうことでしょうか?

695 :デフォルトの名無しさん:03/08/01 13:33
>>693
>>688等はinlineぐらい知ってるだろ。
今回の話に関係ないから敢えて言及していないんだろうが。
それを何が偉そうに「しとけ」だ。
ようやく自分の知識が生かせると思って意気揚揚とレスしたのか。おめでてーな。

696 :デフォルトの名無しさん:03/08/01 13:43
>>694
C++としてコンパイルしてても、別のヘッダ経由で間接的にインクルードしてるかも

697 :デフォルトの名無しさん:03/08/01 14:00
>>690
cstringかstring.hをインクルードしているから

698 :デフォルトの名無しさん:03/08/01 17:22
>>695
なにこの人キレてんの?

699 :690=694:03/08/01 17:33
プロジェクトのフォルダの中にはcppファイルが一つと
空のコンソロールプロジェクトを作成した時に自動で作られたファイルだけです。
*.hのファイルはありません。
インクルードしているのはiostreamだけです。
#include <iostream>
using namespace std;
でこの後にmain()関数を書いています。

700 :デフォルトの名無しさん:03/08/01 17:34
C++で\nとendlはどう使い分けるんですか?

701 :デフォルトの名無しさん:03/08/01 17:39
>>700
endl は改行+フラッシュ。


702 :デフォルトの名無しさん:03/08/01 17:45
>>699
じゃあiostreamが中でインクルードしてるんだろ

703 :デフォルトの名無しさん:03/08/01 19:10
コンストラクターで変数(char* name )を(Null、1Byte)初期化したい。
この場合
A::A()
:name( 0 )
{

}
で良いのでしょうか?



704 :デフォルトの名無しさん:03/08/01 19:47
>>703
1byteってのが謎だ

705 :デフォルトの名無しさん:03/08/01 20:00
>コンストラクターで変数(char* name )を(Null、1Byte)初期化したい
失礼しましたNullをセットするときになんとなく
口癖でNULL1Byte(=(Null、1Byte))と言ってしまうので。


706 :デフォルトの名無しさん:03/08/01 20:10
>>705
やっぱり意味わからんが。
NULLポインタは1バイトということはないはずだが。
null文字1バイトを指すポインタということなら 0 ではなく "" と書かねばいかんが
まさかそういう話?

707 :デフォルトの名無しさん:03/08/01 20:16
このスレは703の口癖NULL1Byte(=(Null、1Byte))をはやらすスレに
なりますた。

一応突っ込んどくが…
ポインタは1バイトじゃないぞ。
ついでに1バイトのNULLは '\x00'。

708 :デフォルトの名無しさん:03/08/01 20:24
>>707
NULLと大文字で書いた場合はポインタ。
'\0'はヌル文字であって、ポインタではないわけだが

709 :デフォルトの名無しさん:03/08/01 20:33
>>708
707の言うNULL(ラテン語)と708の言うNULL(識別子)がかみ合ってないだけと思う。

710 :デフォルトの名無しさん:03/08/01 20:36
>>708はCプログラマ。プ

711 :デフォルトの名無しさん:03/08/01 20:45
>>708
NULLも\0も0だろ

712 :( ● ´ ー ` ● ):03/08/01 20:55
707必(ry

713 :デフォルトの名無しさん:03/08/01 20:58
> ポインタは1バイトじゃないぞ。

そうなの?

714 :デフォルトの名無しさん:03/08/01 21:00
>>713はJava厨もしくはDel厨、C#厨による
スレが荒れることを狙ったネタレスです。放置してください。

715 :デフォルトの名無しさん:03/08/01 22:00
クラスのメンバ変数をコンストラクタで初期化する方法で質問です。

例えば

Hoge::Hoge(int a, int b)
{
aa = a;
bb = b;
}

これを、

Hoge::Hoge(int a, int b)
:aa(a), bb(b)
{}

この様に書けると聞いたんですけど、

Hoge::Hoge(int a, int b)
{
rect.ra = a;
rect.rb = b;
}

この様に構造体を初期化したいときはどうすれば良いんでしょうか?


716 :デフォルトの名無しさん:03/08/01 22:07
Hoge::Hoge(int a, int b) : rect(a, b) {}

717 :715:03/08/01 22:25
>>716
レスありがとうございます。

そのやり方でやってみたんですけど、(構造体のメンバの数が4個なので、引数を4個渡しました)
こんなエラーがでてしまいました。

error C2661: 'tagRECT::tagRECT' : 4 個の引数を持つオーバーロードされた関数はありません。

何でだろう?

718 :デフォルトの名無しさん:03/08/01 22:34
NULL(ポインタ)とNUL('\0')は区別しよう。

719 :デフォルトの名無しさん:03/08/01 22:41
>>718
脳内語を他人に強制するなよ

720 :デフォルトの名無しさん:03/08/01 22:47
>>717
tagRECT構造体に4 個の引数を持つオーバーロードされたコンストラクタがないからだろ。
もしVC++でRECT構造体使ってるならCRectクラスに変更すれ。

721 :デフォルトの名無しさん:03/08/01 22:55
>719
NUL SOH STX ETX EOT ENQ ACK BEL BS HT NL VT FF CR SO SI
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

NULは使わなくてもBS,CR,LF,ESCなら使ったことあるだろ。


722 :デフォルトの名無しさん:03/08/01 22:56
NULはNULLの略語じゃん

723 :デフォルトの名無しさん:03/08/01 22:59
用語辞典にも載っている用例を脳内といわれても、困るんだが、、
http://www.atmarkit.co.jp/icd/root/67/130299067.html
>また、文字コード場合はNULと表記される

724 :デフォルトの名無しさん:03/08/01 23:01
MSDNは'\0'のことを普通にNULLと呼んでるぞ
まったく不毛だからその辺でやめとけ

725 :715:03/08/01 23:02
>>720
解りましたありがとうございました。

726 :デフォルトの名無しさん:03/08/01 23:09
だめぢゃん。MSDN

727 :デフォルトの名無しさん:03/08/01 23:13
NUL is a null character っていうのならOKだけど。
小文字のnullは一般名詞。


728 :デフォルトの名無しさん:03/08/01 23:18
>724
普通に NULL と呼んでいないと思うぞ。
terminating null character というときの null は NULL じゃない。


729 :デフォルトの名無しさん:03/08/01 23:18
>>724
よくみろ。NULLじゃなくてNULL文字だ。

730 :デフォルトの名無しさん:03/08/01 23:19
さすがじゃん。MSDN

731 :デフォルトの名無しさん:03/08/01 23:20
>>714
いやまじで聞いているんだが。
1バイトなんて環境は滅多にないだろうが、規格でもそう決まっているのかと。

732 :デフォルトの名無しさん:03/08/01 23:23
>>714は知ったかぶりをしたアフォです。放置してください。

733 :デフォルトの名無しさん:03/08/01 23:29
NULLポインタはポインタだ。
NULL文字は文字だ。

さてなぜNULLはポインタであると断言できよう。

734 :デフォルトの名無しさん:03/08/01 23:32
>>733
ガッ

735 :デフォルトの名無しさん:03/08/01 23:32
NULLという定数は整数
NULLポインタはポインタ(当たり前だが)

736 :デフォルトの名無しさん:03/08/01 23:33
Cでは、
#define NULL (void*)0
だったから、Cの文脈では明らかにポインタだった。
C++では
#define NULL 0
となったが、
char *p = (void*)0;
がエラーになるから (void*)0 を 0 にしただけで、
気持ちの上ではCのNULLとなんら変わるところはない。

CのNULLがポインタである以上C++のNULLもポインタである。


737 :デフォルトの名無しさん:03/08/01 23:34
>>687
固定長の関数を関数テンプレートでいくつも作ってるだけじゃん。
inline ならともかく、inline じゃなかったら無駄に関数が大量に作られる可能性があるぜ。

>>695
ということを言いたいんだと思われ。

738 :デフォルトの名無しさん:03/08/01 23:36
>>736はCプログラマ。プ

739 :デフォルトの名無しさん:03/08/01 23:36
for(int i=NULL;i<10;i++)

740 :デフォルトの名無しさん:03/08/01 23:38
>>738
ウワァァァン

741 :デフォルトの名無しさん:03/08/01 23:38
void foo(char*);
void foo(int);
void foo(char);

foo(NULL);

NULLはint


742 :デフォルトの名無しさん:03/08/01 23:39
>>731
JIS X3010 5.2.4.2.1
および
JIS X3010 6.3.4
を参照されたし

規格票を所有すべきであると進言する

743 :デフォルトの名無しさん:03/08/01 23:40
NULLは単にマクロを意味する大文字なだけで、元のnullはゼロという意味で、C++ではNULLが0なのだから。

str[end] = NULL;
とするのも、意味論的に間違いではないと思う。

俺はしないけどさ。


ってゆーか
>>741それ悲惨すぎるw

744 :742:03/08/01 23:40
ISO/IEC14882
だった

逝ってきます

745 :デフォルトの名無しさん:03/08/01 23:41
>>742
JISか。CみたいにPDFを落とせるかもしれないから探してみよう。

746 :745:03/08/01 23:42
JISの3010ってCじゃん ウワァァァン

747 :デフォルトの名無しさん:03/08/01 23:52
なんだこのぬるぬるしたスレは!

748 :デフォルトの名無しさん:03/08/01 23:58
>>747
ガッ

749 :デフォルトの名無しさん:03/08/01 23:59
>>747>>747>>747
ガッガッガッ

750 :714:03/08/02 00:37
案の定荒れますた。

751 :山崎 渉:03/08/02 02:03
(^^)

752 :デフォルトの名無しさん:03/08/02 08:45
C++の演算子や関数、クラスなどがまとめられているような本はないでしょうか?
ヘルプから探すの苦手なんです(ノД`)

753 :デフォルトの名無しさん:03/08/02 08:55
>>752
C++第3版

754 :デフォルトの名無しさん:03/08/02 10:09
マジレス
>>753に同意

ど初心者でなくなったら所有しろ
真面目に読むかどうかは別だが
辞書としてイチオシ

755 :デフォルトの名無しさん:03/08/02 11:48
ヘルプから探すの苦手って時点で終わってる気がするんだが。


756 :デフォルトの名無しさん:03/08/02 12:49
C++第3版はあまりおすすめしないが。
索引がおかしいせいで、調べたい情報がなかなか出てこない。

757 :デフォルトの名無しさん:03/08/02 13:00
ふぁふぁふぁふぁ

758 :デフォルトの名無しさん:03/08/02 13:01
そらよ。本物か知らんが
ce.sharif.edu/~bateni/download/else/cpp3rd.zip

759 :デフォルトの名無しさん:03/08/02 14:04
定義したクラスってメモリ(仮想)上のどこに配置されますか?
やっぱりコード(テキスト)領域?

760 :デフォルトの名無しさん:03/08/02 14:56
>>759
クラス自体にはこれといった場所は無い。
コードはコード領域だし、インスタンスはそれぞれのために割り当てたメモリだし・・
クラス固有なのはtypeinfo, vTableぐらい? これは定数領域かも。

761 :デフォルトの名無しさん:03/08/02 15:06
vテーブルは、ふつうインスタンスメンバと同じとこだけどな。

762 :デフォルトの名無しさん:03/08/02 15:29
クラスの各メンバが一箇所にまとまってるんじゃなくて
データメンバならデータ(定数)領域
メンバ関数なら実行コード領域という感じですか?

763 :デフォルトの名無しさん:03/08/02 16:04
メモリレイアウトは環境依存でどうにでもなるんじゃないの?

764 :デフォルトの名無しさん:03/08/02 18:14
浦東戸新鳩南川赤志王王西駒本東後飯市四永溜六麻白高五戸荏旗長洗石雪御久千池蒲京糀大穴天羽羽
和川塚井が鳩口羽_子_が_駒大楽田がつ田池本布金輪反越原の_足川谷嶽が鳥__浜_鳥守空田田
美口安宿谷が元岩_神_原_込前園橋谷谷町山木十高台田銀中台_池台大山原町__蒲_居稲橋空西
園_行__谷郷淵茂谷子_込_______王一番輪__座延_原__塚___上田田谷_荷_港タミ


●――――――●――――――――●●●●●――――●―――――――――――●―――――●●空特
●――――――●――――●―――●――●―――――●――●――――――――●―――――●●特快
●●――●――●――●―●――●●●●●●●―●―●――●―――●――――●●―――●●●快速
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●各停

←――――――→←――――――――――――――→←→←――――――――――→・←――――→
.     ↑                 ↑           ↑         ↑        ↑    ↑    
.     埼                 営           営         東        京    京    
.     玉                 団           団         急        急    急    
.     高                 南           池         池        蒲    空    
.     速                 北           上         上        田    港    
.     線                 線           線         線        線    線    


765 :デフォルトの名無しさん:03/08/02 18:14
【徹底的】プログラマーが語るviとemacs 4【バトル】
http://pc.2ch.net/test/read.cgi/prog/1059814696/

766 :デフォルトの名無しさん:03/08/03 04:30
仮想関数テーブルはインスタンスの先頭ってきまってなかったっけ?

767 :デフォルトの名無しさん:03/08/03 07:11
>>752
母数が大きいと756のようなアンチの数も比例するが
TCPL3は辞書としての使い勝手は悪くない
現に漏れがそういう使い方をしている

別な話バイブルや規格票は良し悪しに関係なく用意すべき
TCPLが\7Kくらい、ISO/IEC14882は\30Kくらいするが
完全に遊びならともかく「ちゃんと」取り組むなら
やむを得ない出費と割り切るべし

768 :752:03/08/03 07:47
C++第3版は検索ですぐ見つかりましたがISO/IEC14882
とは本の名前でしょうか?検索しても書籍名として出てきませんでした。



769 :デフォルトの名無しさん:03/08/03 07:49
stringをインクルードして文字を代入するのと配列に代入するのはどうちがいますか?
使い分けあるんですか?

770 :デフォルトの名無しさん:03/08/03 08:17
>>768
http://www.jsa.or.jp

771 :デフォルトの名無しさん:03/08/03 10:08
そらよ。本物か知らんが
www.rgai.hu/~beszedes/munka/ISO+IEC+14882-1998.pdf

772 :デフォルトの名無しさん:03/08/03 10:10
つーか>>3くらい読めよ

773 :デフォルトの名無しさん:03/08/03 12:17
class storage
{
  T a[N];
public:
  T* get(); // a の中のある要素を指すポインタを返す
  bool contains( T const* p ) const; // p が a の中の要素を指しているかどうか判定
};
bool storage::contains( T const* p ) const
{
  return ( p != 0 ) && ( &a[0] <= p ) && ( p <= &a[N] );
}

↑この storage::contains のような判定は有効ですか?
「同じ配列内のポインタ以外の比較は無効」という話を見かけたので心配になりました。

774 :773:03/08/03 12:23
あぁ・・・。
修正です。
bool storage::contains( T const* p ) const
{
  return ( p != 0 ) && ( &a[0] <= p ) && ( p < &a[N] );
}


775 :デフォルトの名無しさん:03/08/03 12:36
多分動くだろうが、規格では
細かいことは色々あるがポインタの比較で==,!=以外は
(同じ配列であっても)不定と思っていいようだ。
同じ配列である時に限ってマイナス演算子は
期待通り働くがそうでなければ未定義だから使わないほうがいい
かも知れない。
だからそれは標準C++で組みたければ一つ一つ==で
比較するということになるだろう

776 :773:03/08/03 13:04
では、こんな感じ、ということですね。

bool storage::contains( T const* p ) const
{
#if defined( USING_RELATIONAL_OPERATORS_OF_POINTERS )
  return ( p != 0 ) && ( &a[0] <= p ) && ( p < &a[N] );
#else
  if( p != 0 )
    for( T const* q = &a[0] ; q != &a[N] ; ++q )
      if( p == q )
        return true;
  return false;
#endif
}

あと、5.9 -2- を読む限り、同じ配列内の要素ならちゃんと定義されてるっぽいですよ。

777 :デフォルトの名無しさん:03/08/03 13:17
>>773
<= とか < でなく、std::less と std::less_equal を使えば
任意のポインタについて比較ができることが保証されてる。(20.3.3.8)

ただ
 std::less_equal()(&a[0],p) && std::less()(p,&a[N]);
は、pが配列内を指すならtrueなのは確かだが、外の時必ず
falseになる、と定められているかどうかはわからん。。。

778 :773:03/08/03 13:56
>>777
おぉ、有益な情報をどうもありがとう。
しかし、ほんとに微妙ですね。

boost::pool::is_from に同様のコードを発見しました。
が、結局は、単純な結果を返すことはできないようで、戻り値の仕様は微妙です。

779 :773:03/08/03 14:03
ん?ということは、同様のことをCでやろうとすると、
全要素比較以外の方法は標準では不定ってことですかね?

780 :デフォルトの名無しさん:03/08/03 14:07
そういう場合はポインタを整数になおせばいい
p - a

781 :デフォルトの名無しさん:03/08/03 14:09
if ((unsigned)(p - a) < N) return trure;


782 :デフォルトの名無しさん:03/08/03 14:10
なんか改行で送信される・・IMEが変になった

783 :デフォルトの名無しさん:03/08/03 14:17
で、普通に書くと
return (p && (unsigned)(p - a) < N);
どの環境でも問題なさそうなのは
return (p && (unsigned)((char*)p - (char*)a) < N*sizeof(T));


784 :773:03/08/03 14:23
>>780-783
その'-'演算子が問題なわけですよ。
ttp://www-ccs.ucsd.edu/c/express.html#Subtract

785 :デフォルトの名無しさん:03/08/03 14:30
アーキテクチャ上、問題は起こらないと思うけど。

786 :デフォルトの名無しさん:03/08/03 14:49
>std::less と std::less_equal を使えば
>任意のポインタについて比較ができることが保証されてる。(20.3.3.8)

マジで?またヘンチクリンな事しよって…
勘弁してくれ

787 :デフォルトの名無しさん:03/08/03 14:54
>>766
vTableへのポインタならインスタンス中だが、先頭かどうかはわからん。
多重継承のときには複数並ぶしな。
vTable自体はインスタンスとは別に同一のクラスのすべてのインスタンスから
共有されるようにどっか別のところに配置されるだろ。

788 :デフォルトの名無しさん:03/08/03 15:01
おまえら完全に誤解してる様だが、
C/C++では「移植性のある」コードを書けると期待してはいけない。
今回のケースがまさにそうだ。潔癖症な奴はこの場合、
#define is_array_ptr(〜)
でも定義しておき、環境毎に適切な処理に置き換える。
この置き換えが効く事が、「移植性が良い」といわれる所以。
>>776みたいなコードを見ると泣けてくる・・・

789 :初心者:03/08/03 15:05
CかC++の入門書より少し難しいソースコードが記載されているサイトを知りませんか?

790 :デフォルトの名無しさん:03/08/03 15:08
Cはコンパイラの仕様を熟知していないと(他の環境のソースを)
正しくビルドできないことが多々あるから泣けてくる。
>>776の試みには賛同する

791 :デフォルトの名無しさん:03/08/03 15:08
>>789 >>7

792 :デフォルトの名無しさん:03/08/03 15:13
>>788
> おまえら完全に誤解してる様だが、
> C/C++では「移植性のある」コードを書けると期待してはいけない。
いやここまでのところ、誰もそんなことは期待してないと思うぞ。
どの部分が「移植性があっ」て、どの部分が環境毎に
書かねばならんのか、切り分けようとしているだけで。

>>786
set<T*> やら map<T*,U> を作れるように…って苦肉の策だろうね。

793 :デフォルトの名無しさん:03/08/03 15:17
おまえらの場当たり的なコードを見ると泣けてくる。
実際、誰かは気を付けても、他の誰かは守らない。
延々これの繰り返しだ。
ということだよ。>>792
絶望するか、鈍感になるか、潔癖になるか、業界から去るか・・

794 :777:03/08/03 15:22
自己レス。
> は、pが配列内を指すならtrueなのは確かだが、外の時必ず
> falseになる、と定められているかどうかはわからん。。。

よく考えたら配列は contiguously allocated なので (3.3.4/1)、
&a[0] と &a[N] の間に配列の要素でないものを指すアドレスは
存在しない。ゆえに boost::pool::is_from の方法でOk、だ。

795 :デフォルトの名無しさん:03/08/03 15:41
ふむ。
std::less の定義が std::set< T* > を有効にするためのものだとすれば、

#include <functional>
bool storage::contains( T const* p ) const
{
  std::less< T const* > lt;
  return !lt( p , &a[0] ) && lt( p , &a[N] );
}

これで十分ということになりますね。ちょっとキモいけど。
Cの場合は>>776のようなアプローチが最善策である、と。

そうなると、boost::pool::is_from の仕様がやたら複雑に記述してあるのは
どういうわけなんでしょうか?

796 :初心者:03/08/03 15:45
日本語のサイトはないのでしょうか?
英文が全然駄目で。

797 :デフォルトの名無しさん:03/08/03 15:47
C++も英単語ですが。

798 :初心者:03/08/03 15:50
ひまわりを使うことにしました。
C++なんて糞!!

799 :デフォルトの名無しさん:03/08/03 15:51
JavaのpackageみたいなのをやりたいときC++ではnamespaceですか?

my; //ルート
my.util;
my.math;

たとえば↑みたいなのは、

//util.h
namespace my {
  namespace util {
    //class ...
  }
};

//math.h
namespace my {
  namespace math {
    //class ...
  }
};
ってやらないとだめなのでしょうか・・・。

800 :768:03/08/03 17:42
レスいただいた皆さんいろいろ情報ありがとうございました。
アマゾンでC++第3版注文することにしました。

801 :デフォルトの名無しさん:03/08/03 17:49
図書館で借りる→返せと電話が来るまで借りる→返す→また借りる
俺はこの繰り返し。

802 :773:03/08/03 18:37
あ、>>795==>>773でした。

803 :デフォルトの名無しさん:03/08/03 19:50
つーかよ、お前ら
標準にアクセスする方法知らないの
致命的じゃねえかよ

804 :デフォルトの名無しさん:03/08/03 21:26
ほんとC++の参照はクソだな
参照をベースに多態を書こうと思ったら思わぬ縛りがわんさか

805 :デフォルトの名無しさん:03/08/03 22:42
初期化死が書けないだけ
constを激しく誤解している
未だにコストが0だと強弁している
以上は、ただ恥ずかしいだけ

配列が作れないのはイヤだけど

806 :デフォルトの名無しさん:03/08/03 22:50
class A{
int a;
;

class B : public A{
int b;
};

A *p = new B;

?????

807 :デフォルトの名無しさん:03/08/03 22:51
馬鹿がいます

808 :デフォルトの名無しさん:03/08/03 22:56
>>807 それはお前だ。

809 :807:03/08/03 23:03
馬鹿はボクでした

アホがいます

810 :デフォルトの名無しさん:03/08/03 23:03
クラスをnewで作成して、deleteする可能性のあるものには、必ずデストラクタをつけたほうがいいですかね?

811 :デフォルトの名無しさん:03/08/03 23:05
>>809
自他共に認める馬鹿。そしてアホ。

812 :デフォルトの名無しさん:03/08/03 23:12
>>810
そこまでわかってて何が聞きたい?

813 :809:03/08/03 23:19
馬鹿でアホはボクでした

この中に一人、侍がおる オマエやろ>>814

814 :デフォルトの名無しさん:03/08/03 23:25
>>812
自信から確信にしたいので・・・

815 :デフォルトの名無しさん:03/08/03 23:44
>810
new し delete することと、デストラクタの要不要はまったく無関係だ。


816 :デフォルトの名無しさん:03/08/03 23:54
ていうかデストラクタは、全部のクラスにつけとけよ馬鹿

817 :デフォルトの名無しさん:03/08/04 00:13
不要な仮想関数テーブルを持ちたくない場合もあるのだよ

818 :デフォルトの名無しさん:03/08/04 00:14
・・・( ゚Д゚)ポカーン

819 :デフォルトの名無しさん:03/08/04 00:21
・・・( ゚ポ゚)Дカーン


820 :おまいらも折りませんか?:03/08/04 00:28
平和記念公園の焼けた折り鶴14万羽折らないか?4
http://off.2ch.net/test/read.cgi/offmatrix/1059911297/l50

821 :デフォルトの名無しさん:03/08/04 01:08
そういえば、鶴の折り方忘れた

822 :デフォルトの名無しさん:03/08/04 01:08
intじゃなくてINTを使ったり、voidじゃなくてVOIDを使ったりする
メリットってありますか?

823 :デフォルトの名無しさん:03/08/04 01:24
その昔は #define VOID int という処理系があったりしたものじゃ

824 :デフォルトの名無しさん:03/08/04 02:26
ちょっと疑問に答えてくれ

struct test1{
int &x;
test1(int &i):x(i){}
};

struct test2{
const int &x;
test2(const int &i):x(i){}
};

int i;
//new int&(i);//(a)これはもちろん出来ない
new test1(i);//(b)これが出来る
new test2(1);//(c)これも出来てしまう

まず、(b)(c)はできるものなのか。出来るのならば
(a)が出来ないのに(b)が出来るのは不思議である。
というのも実際に参照を生成しているのと同等に見える。それはいいのだが
次に(c)が出来てしまうのはどう考えよう。この時int型の一時変数が
出来るとして、その寿命はどうなるのた?

825 :デフォルトの名無しさん:03/08/04 03:05
int i;
int &r1 = i; // (b)
const int &r2 = 1; // (c)

単純化するとこういうことだよね。(b)も(c)も可能。
C++の参照ってのは別名と考えるといいんでない?
(b)の場合、r1はコンパイルの便宜上iにつけられた別名。
(c)のr2は、無名インスタンスにつけられた名前。
r1やr2という「参照型のインスタンス」が存在するわけではない。

826 :824:03/08/04 03:18
>>825
>const int &r2 = 1; // (c)
上とtest2*p=new test2(1);が同じだとすると
このp->xの参照先の一時変数の寿命はどうなるのだろう?
縛っている*pと同じで長寿か、それともそのローカルのスコープで
一時変数だけ死んでしまうのか?それがわからない。

827 :デフォルトの名無しさん:03/08/04 03:51
>>824-826
12.2 -5- より、引用。
"A temporary bound to a reference member in a constructor's ctor-initializer persists until the constructor exits."

コンストラクタを抜けるまで有効らしい。

828 :825:03/08/04 03:59
というより、この場合「p->xの参照先の一時変数」というものは存在しないのでは。
test2 *p = new test2(1);
というコンストラクタ呼び出しは、「p->xは1の別名である」と言っているにすぎない。
p->xが出てきたら、その都度リテラル1に置き換えられるだけ。
って、すげー勘違いしてる?

829 :827:03/08/04 03:59
あー。微妙にずれてるな。
コンストラクタの呼び出しに一時オブジェクトへの参照を渡すんだから、
この場合はこっちか?(同じく 12.2 -5- より)
"A temporary bound to a reference parameter in a function call persists until the completion of the full expression containing the call."

830 :827:03/08/04 04:01
> p->xが出てきたら、その都度リテラル1に置き換えられるだけ。
それはすげー勘違い。


831 :824:03/08/04 04:23
>>827
それだ!
という事はそういう事をするとメンバ自体が無意味になってしまうのか…
つまり結局参照をメンバに持つクラスはnewで生成する物ではなく
(同じくnewで生成された寿命を持つオブジェクトを参照するなら
ポインタでいいわけだし)
しかも一時変数は値を得るだけでメンバに参照させてはならないということか

言われてみれば当然だが、俺の中で参照の株が急落中
test2 t(1);程度はしていいものと思っていた。
const int i=1;同じ寿命の物を用意して
test2 t(i);としなければならないわけか。参照意味なし

832 :デフォルトの名無しさん:03/08/04 04:44
この場合、コンストラクタである必要はなく、ただの関数引数でも一緒でしょ。
void f(int& r);
void g(const int& r);
int i;
ここに、f(i), g(i), g(0)は可能だけど、f(0)は無理。

同様に、
void f(string& r);
void g(const string& r);
に対して、g("ABC")は可能だけどf("ABC")は不可能。
もちろん、関数呼び出しの間だけ有効なstring型の一時オブジェクトが作られる。

833 :デフォルトの名無しさん:03/08/04 04:59
あ、良く読んだら参照の生存期間の問題も絡んでるのか。
ポインタもそうだけどエイリアスの問題だね。

大昔はconstでない参照にも勝手に一時変数が作られたから
参照の生存期間と一時変数の生存期間の違いによるバグも多かったんだろうな。

834 :デフォルトの名無しさん:03/08/04 08:35
オマエバカジャネーノ?


835 :デフォルトの名無しさん:03/08/04 08:41


836 :デフォルトの名無しさん:03/08/04 12:00
あるクラスにint型のデータメンバが二つあるとします。(仮にaとb)
このクラスのオブジェクトXをaとbの値が0で初期化して作成します。
このXにint型の値3をたしてaとbの値を3にするには+演算子をオーバーロードしないといけないのですが、
クラスのメンバ関数として
X X::operator +(int n)
{
a+=n;
a+=n;
return *this;
}
というようにするかフレンド関数として
X operator+(X x,int n)
{
X tmp;
tmp.a = x.a + n;
tmp.b = x.b + n;
return tmp;
}
とするのはどちらがいいのでしょうか?

837 :デフォルトの名無しさん:03/08/04 12:07
前者は operator + ではなく operator += をオーバロードすべし。
その上で、両方とも定義して可。


838 :デフォルトの名無しさん:03/08/04 12:18
>このXにint型の値3をたしてaとbの値を3にするには+演算子をオーバーロードしないといけないのですが、
別に演算子オーバーロードにしなくてもいいです。

>X X::operator +(int n)
>{
> a+=n;
> a+=n;
operator + なのに += しちゃ意味違うだろ。しかも a に2回足してるし
(誤植だろうけど注意力30000過ぎー)

質問の本来の答えは、Effective C++ あたりを読んでくだちい


839 :836:03/08/04 13:23
レスありがとうございます。
誤植すいません。
まだプログラム初めて一週間ぐらいなんでって言ってもいいわけですね。



840 :デフォルトの名無しさん:03/08/04 14:24
>>839
プログラムはじめて1週間で演算子オーバーロードですかおめでてえな。
もっと先に覚えなきゃいけない事イパーイあるよ。
というか演算子オーバーロードは使い方難しいからもう少し後にしな。

841 :デフォルトの名無しさん:03/08/04 15:14
>>839
プログラム初めて一週間なら、誤植は仕方ないな。

ンナワケネーダロ

842 :デフォルトの名無しさん:03/08/04 16:35
質問
あるアドレスが 動的確保されているかどうかチェックできるような
標準関数ってない?




843 :デフォルトの名無しさん:03/08/04 16:39
「標準」では存在しないはず。

844 :デフォルトの名無しさん:03/08/04 17:48
>>840
一週間もたっていればそれくらい進んでいてもおかしくない。


…とマジレスしてみるテスト

845 :839:03/08/04 17:54
プログラムの入門書でやっているのですが
winアプリを作るときは入門書に書いてあることは
すべて必須なんでしょうか?
今使っている入門書はやさしいC++です。

846 :デフォルトの名無しさん:03/08/04 18:00
(´-`).。oO(世の中の大半は無駄なことだよ・・・・・・・・・)

847 :デフォルトの名無しさん:03/08/04 19:24
>>839
今すぐ本を読むのを止めて以下のキーワードでググれ。
RegisterClassEx
CreateWindowEx
ShowWindow
UpdateWindow
GetMessage
TranslateMessage
DispatchMessage


848 :デフォルトの名無しさん:03/08/04 19:26
>>847
…情けない

849 :847:03/08/04 20:01
>>848
何が情けないの?
「今やってる事って役に立ちますか?」とか甘っちょろい事言ってるから、
とりあえず自分の目で見て眩暈の一つもおこして見ろって言ってんの。

850 :848:03/08/04 20:22
>>847
スレタイを暗唱してはどうか。

851 :デフォルトの名無しさん:03/08/04 20:25
WTLかMFCにしろって事?

852 :デフォルトの名無しさん:03/08/04 20:26
>>851
gtkmmにしろって事だろ

853 :847:03/08/04 21:01
このスレは誘導禁止らしいです。>>850 がそう言っています。
皆さんもスレ違い君がきても、絶対にこのスレに引き止めるように!

854 :デフォルトの名無しさん:03/08/04 21:07
俺は何が情けないのかが分からん。
>winアプリを作るときは
>>847でいいだろ。

ただ>>847は最後に誘導すべきだったと思う。
Win32API質問箱 Build13
http://pc2.2ch.net/test/read.cgi/tech/1059549320/


855 :デフォルトの名無しさん:03/08/04 21:08
MFCじゃなくてWin32APIをつかえってこと?
>>847

856 :デフォルトの名無しさん:03/08/04 21:12
今からMFC覚えるヤシなんているわけないじゃん

857 :デフォルトの名無しさん:03/08/04 21:13
>>845
マジレス致しますと内容は無駄ですが頑張って学んだ事実は今後に生きてきますのでがんがれ!

858 :デフォルトの名無しさん:03/08/04 21:18
このスレって怖いよね・・・

859 :デフォルトの名無しさん:03/08/04 22:32
>>858
この臆病も飲め!

860 :デフォルトの名無しさん:03/08/05 00:11
operator[] で
operator[](uint index)
operator[](uint index) const
という風に、constが付くか付かないか、と言う違いだけというのは、
問題ないですか?

861 :デフォルトの名無しさん:03/08/05 01:14
nai

862 :デフォルトの名無しさん:03/08/05 01:34
書き込み用、読み込み用で問題ないかと

863 :デフォルトの名無しさん:03/08/05 02:14
>>860
わかってるとは思うが、順番を間違えんようにな。

864 :デフォルトの名無しさん:03/08/05 06:10
みなさんは標準ライブラリのテンプレートや関数をどのくらい覚えているんですか?
量がかなり多いと思うんですが。

865 :デフォルトの名無しさん:03/08/05 06:31
STLは一般的なアルゴリズムとデータ構造を知ってればおぼえなくていい。
stringは直感的に使えるからおぼえなくていい。
iostreamはおぼえないといけないかも。

「おぼえなくていい」というのは、わかんなくなったときだけリファレンス引けばいいってことな。

866 :デフォルトの名無しさん:03/08/05 06:35
>>864
関数名にしろ引数の取り方にしろ、共通している部分が非常に多いから、
関わっていくうちにあまり多いとは思わなくなるし、片っ端から覚える必要を
感じなくなるよ。
基本がわかってれば、いつでもすぐ調べて使えるって感じ。

最初はアルゴリズムの数にちょっと圧倒されたけど、あれ結局数個しか使ってないし。

867 :865:03/08/05 06:36
STLも、やっぱりおぼえないといけないことはけっこう有るかな。

言い換えると、
おぼえないといけないことがライブラリの総量に比例しているわけではない
ってこと。

868 :デフォルトの名無しさん:03/08/05 07:06
Cの標準ライブラリよりは覚える量は少ないかも>STL

869 :デフォルトの名無しさん:03/08/05 07:50
今言っている「覚える」とはスペルや引数、使用条件を覚えるということなのか、
「こういう機能を持っているものがある」ということを知っているのとどっちですか?


870 :デフォルトの名無しさん:03/08/05 08:49
後者でしょ。前者は利用しているうちに自然と覚えてくる。

871 :デフォルトの名無しさん:03/08/05 10:04
>863
順番てconstの位置と言うことですか?
それなら理解してると思います。


872 :デフォルトの名無しさん:03/08/05 17:44
Accelerated C++という本が入門にいいときいて本屋で立ち読みしたんですがいきなり標準ライブラリとかメンバとかでてきてややこしく感じました。この本でプログラムを始めるのには向いてないんでしょうか?

873 :デフォルトの名無しさん:03/08/05 19:36
人には向き不向きがあるよ。別に無理してプログラマになる必要はないと思われ。

874 :デフォルトの名無しさん:03/08/05 19:42
STLやクラスは中盤以降だよ( ´ー`)y-~~

875 :デフォルトの名無しさん:03/08/05 19:56
stringがいきなり出てくる本は珍しいとおもわれ。
他の入門書はchar型の配列やポインタに代入しているが

876 :GET! DVD:03/08/05 20:00
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★ 新商品 ゾク・ゾク 入荷 ☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com.tw      
☆★  激安アダルトDVDショップ        
★☆    お買い得!! 1枚500円〜 急げ!   
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com.tw      
★☆        スピード発送!        
☆★      http://www.get-dvd.com.tw      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com.tw      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

877 :デフォルトの名無しさん:03/08/05 20:17
でもC++で文字列としてchar配列使ったら馬鹿だよ。

878 :デフォルトの名無しさん:03/08/05 20:20
>>877
なこたーない(AA省略)

879 :デフォルトの名無しさん:03/08/05 20:21
>>877
適材適所と思われ。

880 :デフォルトの名無しさん:03/08/05 20:21
stringがUNICODEだったら乗りかえるのになぁ。

881 :デフォルトの名無しさん:03/08/05 20:24
>>880
std::wstring

882 :デフォルトの名無しさん:03/08/05 21:06
>>872
独学なら興味あるところから始めれ
誰も引っ張ってくれないし客のプレッシャーもない
自分のやる気が全て

因みに漏れはoperatorから始めたyo
TCPLの初版とZortec C++ 1.06で

883 :デフォルトの名無しさん:03/08/05 21:12
stringは廃止してwstringにしろ。

884 :デフォルトの名無しさん:03/08/05 22:02
そこでアメリカ人ブチキレですよ。

885 :デフォルトの名無しさん:03/08/05 23:29
邪婆厨か...

886 :デフォルトの名無しさん:03/08/05 23:51
そこでJava厨ブチギレですよ。

887 :デフォルトの名無しさん:03/08/05 23:56
おれはC・C++のワイド文字列の仕様は失敗だと思ってる。
だって、おれ自身全然使わないもん!

888 :デフォルトの名無しさん:03/08/06 00:04
localeがちょっと面倒だね

889 :デフォルトの名無しさん:03/08/06 00:24
初心者質問なのですが、
gcc.exeやcl.exe等で、GUI実装したWIN32アプリケーションを
作ることはできますか?

890 :デフォルトの名無しさん:03/08/06 00:26
できますよ。

891 :デフォルトの名無しさん:03/08/06 00:35
初心者質問ですが、
int array[2];
のような配列を宣言する時、
std::vectorを使いますか?

配列の操作としては、
swap( array[0], array[1] )
しかしません。

C++の本を読んだときに、
「ポインタはなるべく使うな。配列もまた体の良いポインタである。
 C++では配列を使わずにvectorを使う。」(かなり適当かつ出典忘れました。)
見たいな事が書かれていたので、他の方はどうされているのか
気になっています。


892 :デフォルトの名無しさん:03/08/06 00:36
> 配列の操作としては、
> swap( array[0], array[1] )
> しかしません。

それなら配列は使わない。
int a,b;

893 :デフォルトの名無しさん:03/08/06 00:37
>>889
という事はVC++買わなくても、
Win32SDKやMFCを入手してそのままコンパイラで使えるという事ですか?
そうだったら余計な出費が減りますね。

894 :デフォルトの名無しさん:03/08/06 00:52
>>891
自分でデータ型を定義するかstd::pairやboost::tupleなどを
使うといい

>>893
統合環境がいらないならその通り

895 :デフォルトの名無しさん:03/08/06 01:06
MFCはどうやって手に入れるのだろう。
というよりGUIプログラム作成の可否とMFCは直接は関係ないような。

896 :893:03/08/06 01:25
すみません、MFCじゃなくてWin32SDKでした。
しかしGUIプログラムは総合環境無しでは難しそうですね。
やっぱり買いますか…

897 :デフォルトの名無しさん:03/08/06 01:28
ソースあるやん


898 :893:03/08/06 01:37
>>897
ソースとは?

Frameのデザインとか数値だけで指定するのは面倒ですね。
あと今更ですが893だったのに気づきました。

899 :891:03/08/06 01:43
レスありがとうございます。
なんかC++以前の問題だったようですみません。
これを機にboostにも手を出してみようと思います。


900 :デフォルトの名無しさん:03/08/06 02:43
>>898
MFCだろ

901 :デフォルトの名無しさん:03/08/06 04:44
Accelerated C++
は読んでみたけどなかなかいいとおもいました。

902 :_:03/08/06 05:28
http://homepage.mac.com/hiroyuki44/

903 :デフォルトの名無しさん:03/08/06 14:42
VCなのですが、epsilonより小さい数値が0にならないみたいなのですが、
良いのでしょうか?

#include<iomanip>
#include<cfloat>
#include<cstdio>
int main(){
float ffff = FLT_MIN*FLT_EPSILON;
printf("\n%.8f\n",ffff);//0.0000000
std::cout << std::setprecision(8) << ffff << std::endl;//1.4012985e-045
}


904 :_:03/08/06 14:48
http://homepage.mac.com/hiroyuki44/jaz08.html

905 :デフォルトの名無しさん:03/08/06 16:58
Accelerated C++の話が出でいるので聞きたいのですが各章の最後にある課題の答えはどこかにあるのでしょうか?
ソースコードや落とせる場所や解説しているページがあればお願いします。

906 :デフォルトの名無しさん:03/08/06 21:26
フォームのTextが空欄だと、ShowInTaskbarがtrueでもタスクバーに表示されないのはバグですか?

907 :デフォルトの名無しさん:03/08/06 21:27
>>906
スレ違い

908 :デフォルトの名無しさん:03/08/06 21:27
全角スペースを入れてください

909 :デフォルトの名無しさん:03/08/06 21:27
>>906
すれ違い

910 :デフォルトの名無しさん:03/08/06 21:48
女房がどこへ逝ったか知りませんか?

911 :デフォルトの名無しさん:03/08/06 21:50
俺の横さ

912 :デフォルトの名無しさん:03/08/06 22:31
”タスクバーに”じゃなくて、”タスクバーが”だった。

913 :デフォルトの名無しさん:03/08/06 22:35
タスクバー自体は制御しねーよハゲ

914 :デフォルトの名無しさん:03/08/06 23:04
ミロバーは?

915 :デフォルトの名無しさん:03/08/06 23:09
http://www.nekopla.com/nnk/mono/mono/006_2.jpg
むむぅ。

916 :デフォルトの名無しさん:03/08/07 01:07
Blake Stowell: C++ is one of the properties that SCO owns
today and we frequently are approached by customers who wish
to license C++ from us and we do charge for that. Those
arrangements are done on a case-by-case basis with each
customer and are not disclosed publicly. C++ licensing is
currently part of SCO's SCOsource licensing program.

http://mozillaquest.com/Linux03/ScoSource-02_Story03.html

C++もおしまいですね。

917 :デフォルトの名無しさん:03/08/07 01:37
http://jbbs.shitaraba.com/computer/bbs/read.cgi?BBS=5651&KEY=1049123895&START=13

918 :デフォルトの名無しさん:03/08/07 02:58
>>905誰かしらないですか?

919 :_:03/08/07 03:06
http://homepage.mac.com/hiroyuki45/jaz09.html

920 :デフォルトの名無しさん:03/08/07 11:20
>>916
SCOって基地外だな。

921 :デフォルトの名無しさん:03/08/07 12:12
実はSCOの幹部の中身があの民族に変わってたりしないよな?

922 :デフォルトの名無しさん:03/08/07 20:46
あげ

923 :デフォルトの名無しさん:03/08/07 21:00
>>921
ビジニュー水戸家
おまいの推測どおりあの法則だ

924 :デフォルトの名無しさん:03/08/07 21:41
なんだかんだいってSCOの主張が棄却されないところをみると
正当な主張なのだろう。

925 :デフォルトの名無しさん:03/08/07 23:02
またか・・・またあいつらか・・・いい加減にしろよまったく

926 :デフォルトの名無しさん:03/08/07 23:12
プログラムを勉強し始めようと思ってるんですが
CとC++どちらから勉強するのがベターですか?

927 :デフォルトの名無しさん:03/08/07 23:14
>>926
Windowsが好きならC#、そうでなければJava。
C/C++は実務・教養どちらにもあまりお勧めできない。

928 :デフォルトの名無しさん:03/08/07 23:53
>>927
Cの基本的な内容を含むC++参考書で勉強するといいと思われ。

929 :デフォルトの名無しさん:03/08/08 00:59
ディレクトリを開いて中のファイル名をすべて読み込みたいのですが
C++に特有な方法ってありますか?

930 :デフォルトの名無しさん:03/08/08 01:01
なんでC++標準のstringってわざわざSTLなんかを使っているのですか?
MFCのCStringやVCLのAnsiStringをみれば分かるとおり
クラスで実装できるでしょ。

使いたいだけちゃうんかと小一時間

931 :デフォルトの名無しさん:03/08/08 01:14
>>930
君頭いいね。

932 :デフォルトの名無しさん:03/08/08 01:25
あまりにも正当な意見で反論の余地が無いのか?
だとしたら本当に>>930は頭がいいのだろう。

933 :デフォルトの名無しさん:03/08/08 01:44
解読が難しいだけ

934 :デフォルトの名無しさん:03/08/08 08:14
>>930
すごいすごい。おまえ知能指数10000000はあるよ。
もうプログラミングやめろ。

935 :デフォルトの名無しさん:03/08/08 09:07
>>929
ディレクトリの扱いは C, C++ 標準規格には入ってない。OS 非依存、
例外安全にしたければ boost 使うのが良いと思うぞ。

936 :デフォルトの名無しさん:03/08/08 09:38
>>930
string が STL ですか。そうですか

937 :デフォルトの名無しさん:03/08/08 13:14
>>936
「stringがSTL」とは言ってない。

938 :デフォルトの名無しさん:03/08/08 13:35
Cマガの「C++基礎講座」という連載でC++の勉強をしています。
2003/02号の記事のlist4を、cygwinのgcc version 3.2 20020927 (prerelease)でコンパイルすると、

binder1st< less<int> > b1st( less<int>(), 3 );

という部分で「type specifier omitted for parameter」というエラーが出ます。
これはgccが悪いのでしょうか?
ちなみに、

binder1st< less<int> > b1st = binder1st< less<int> >( less<int>(), 3 );

とやると上手くいきますが、これはあまり美しくないですよね?

939 :デフォルトの名無しさん:03/08/08 17:43
Cマガなんて読むな

940 :デフォルトの名無しさん:03/08/08 19:35
>>935
ありがと、boostにあるのしらなかたよ

941 :デフォルトの名無しさん:03/08/08 21:19
boost, lokiってまともなプロジェクトでの実績ってあるの?
なんかお遊びツールにしか思えないんだが。

942 :デフォルトの名無しさん:03/08/08 21:25
>>941
何を以って実績と言うかが問題だ。
std::copyを使ったからといってSTLの実績とはいえないからな。

943 :実績とはこういうことさ:03/08/08 21:32
自社プロジェクトでの採用率
STL: 100%
boost: 0%
loki: 0%

944 :デフォルトの名無しさん:03/08/08 21:35
まず、boost のコードがちゃんとコンパイルできる
コンパイラを用意しないとな。

945 :デフォルトの名無しさん:03/08/08 21:47
VC7.1が普及するこれからってことか

946 :デフォルトの名無しさん:03/08/08 22:07
じゃあさっさとVC7.1をクロスプラットフォームにして下さい。

947 :デフォルトの名無しさん:03/08/08 23:33
>>938
多分 gcc のバグだと思う。

948 :デフォルトの名無しさん:03/08/09 00:02
ヤレヤレ、まだC++は枯れてないのか。

949 :デフォルトの名無しさん:03/08/09 01:36
>>941
http://www.boost-consulting.com/about.html
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=boost+c%2B%2B+site%3Asourceforge.net+build

てゆーかうちの会社では普通に使ってるが、まともってどの程度よ?

↓次スレよろ

950 :デフォルトの名無しさん:03/08/09 01:37
>>938
http://pc2.2ch.net/test/read.cgi/tech/1033830935/862-868n
に似てる気がする。gccのバグじゃないかなぁ。

951 :950:03/08/09 01:39
> ↓次スレよろ
ふが。わかった。ちょっと待ってて。

952 :デフォルトの名無しさん:03/08/09 01:49
http://pc2.2ch.net/test/read.cgi/tech/1060361082/

953 :デフォルトの名無しさん:03/08/09 02:52
保守


954 :デフォルトの名無しさん:03/08/09 03:03



みなさんもこの問題をといて見てはいかが?
C言語の問題です。
http://jbbs.shitaraba.com/game/bbs/read.cgi?BBS=1314&KEY=1060147851&START=115&END=200&NOFIRST=TRUE

955 :938:03/08/09 08:13
>>947
>>950

バグですか。
実は同じ号のlist7,8も上手くコンパイルが通らず、こっちは調べて
解決出来たのですが、938の件では自分・記事・コンパイラの
どれが悪いのか悩みました。

その後の号でも訂正記事は載ってないと思うのですが、やはり
Cマガを読んで勉強する人はあまりいないんですかね?

とりあえずバグということで納得して、次に進みたいと思います。
どうも有難うございました。


956 :デフォルトの名無しさん:03/08/09 08:23
>>955

http://www.cmagazine.jp/bugs/index.html
ここにもないね。

957 :デフォルトの名無しさん:03/08/09 14:18
映画が本当になったぞ!!
レインボーブリッジが封鎖されてるよ!!


958 :デフォルトの名無しさん:03/08/09 14:44
>>957
うそつけー。

959 :デフォルトの名無しさん:03/08/09 14:48
レインボーブリッジが光ってるよ!!

960 :デフォルトの名無しさん:03/08/09 17:17
レインボーブリッジの制御プログラムはC++で書かれている。

961 :デフォルトの名無しさん:03/08/09 18:51
                        / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     /\      /\        < 糞スレ
     /  \    /  \        |  おめでとうございまーす
    /     \_/    \      \_______
    /               \
   /                ヽ___  ___
  /  /  ヽ__/  \    /     ゙Y"     \
 |         │  /      /               \
 |       丶/     /                 \
 \         / ̄ ̄ ̄ ̄)        *      ( ̄ ̄ ̄ ̄)
   ヽ_____|    ─<         |\      >─   (
           |      )     /  (|ミ;\    (      )
           ヽ    ̄ ̄)    /(___人|,iミ'=;\  (  ̄ ̄   )
           /" ̄ ̄ ̄ ̄   /    《v厂リiy\  ̄ ̄ ̄ ̄\
           /        /        ゙|,/'' v:,,、.¨)z,_       \
          /       /         ミ/ .-─ .゙》z、      \
          /      /           〔」″ノ‐ 、u ¨\      )
         (      /             ゙|, ..冫 .rー    ̄\_   |
          |      〔              ミ./′   ..r-ー __,,ア┐ |
          |      |              {. .,,,,   .′ .´′ .¨\|

962 :デフォルトの名無しさん:03/08/09 18:51
          |       |              ∨   ノ冖′=vvvvvv¨\
          |     /               ミ.  ,i'          .゙\_
          |     /                .{. ノ  ,r¬″       .¨\
          |     /                 ゙|, |  ノ      ー'''''''''''  .ーミz
          |     |                  ミ.     .,、 ._,,,、、r   ,,,,_____ ゙┐
      _/"     |                  .ミ.   ./′ ´′      ̄⌒'h..¥
     (______)                  {.  }  ._,,,、  ,ノ冖''^¨    ″〕
                                 ゙|, .,| ./`  ,r'′  vvvv、   |
                                  .ミ、.` |    二、      〔  、 ,|
                                  .〔  |  .、 〔  rーー   |  |.,}
                                   .ミ .′ .|  〕  .} ─-「  y-リ
                                   .\   |,  ´v,,,]、、、v-  ..,/′
                                     ゙\ .\、    .  _/
                                      ¨'ーvu,,____''工レ-'″


963 :デフォルトの名無しさん:03/08/09 18:59
VC7.1でstlportを使うメリットはありますか?

964 :デフォルトの名無しさん:03/08/10 00:27
教えてください。
仮想関数テーブルはすべてのクラスのインスタンスにコピー
されていると聞いたのですがなぜですか?
1つのテーブルを共有すればいいと思うのですが。。。


965 :デフォルトの名無しさん:03/08/10 00:29
>>964 安心されよ。

966 :デフォルトの名無しさん:03/08/10 00:34
つーか、仮想関数テーブルはクラスに1つだろ。
インスタンスは、そいつへのポインタを持つのがふつう。

967 :964:03/08/10 00:39
>>966
ですよね。僕もそうだと思っていたのですが
最近読んだ書籍に、継承を多用するのは各インスタンスの
仮想関数テーブルを増大するから良くないみたいに書かれて
いたのです。


968 :デフォルトの名無しさん:03/08/10 00:52
>>967
> 継承を多用するのは各インスタンスの仮想関数テーブルを増大するから良くない
その書籍は捨てた方がいいかもな。

969 :デフォルトの名無しさん:03/08/10 00:59
その書籍の題名とISBNをたのむ。


970 :964:03/08/10 01:00
>>968
ネットでいろいろ調べてみたのですが...

>その書籍は捨てた方がいいかもな。


みたいですね。。。(−−);;

971 :デフォルトの名無しさん:03/08/10 01:20
多重継承を多用するってんならともかく。

972 :デフォルトの名無しさん:03/08/10 01:21
>>971 ハァ?

973 :デフォルトの名無しさん:03/08/10 01:34
Cを初めて触る初心者に適したマニュアルありますか?

974 :デフォルトの名無しさん:03/08/10 01:38
>>970
その書籍の題名を。

975 :デフォルトの名無しさん:03/08/10 01:47
>>972
多重継承する場合は、1 インスタンス中に vptr (vtbl を指してるポインタ)
が複数格納されるっつー話なら、正しいぞ。

976 :デフォルトの名無しさん:03/08/10 01:54
>>975
それは普通にサブオブジェクトとして格納された結果だろ。
vtblは関係ない。

977 :964:03/08/10 01:55
>>974
いちおう...
「MFCインターナル」のP185です

978 :964:03/08/10 01:59
969さんも聞いてくれていたのですね。
同時刻書き込みで見忘れてますた。
結構メジャーな本なのですが。。。

979 :964:03/08/10 02:10
んで関連質問なのですが、今基本クラスで仮想関数として
定義されている関数foo()を派生クラスでオーバーライド
しているとき、両クラスはもちろん別のvtblを持つと思いますが
テーブル内のfoo()の場所は同一のオフセットと考えていいですよね。


980 :デフォルトの名無しさん:03/08/10 02:13
>>979
そう考えてあながち間違いではないが、
その考えに基づいたプログラムを書いてはいけない。

981 :979:03/08/10 02:16
>>980
具体的にどんなミスがでるのですか?

982 :デフォルトの名無しさん:03/08/10 02:21
>>981
処理系依存のプログラムになる。
このスレで聞くからには処理系依存は良しとされないだろう。

983 :979:03/08/10 02:22
>>982
あ、なるほど。
もっともです。。。(--);;

984 :デフォルトの名無しさん:03/08/10 08:19
>>967
継承を多用するとそのクラスごとに仮想関数テーブルが作製される。
仮想関数の数が途方も無く多いと弊害がでる。

MFCってことはウインドウメッセージをそれぞれすべて仮想関数化すると?って感じの前フリがあったのでは?

985 :デフォルトの名無しさん:03/08/10 09:07
仮想関数エントリの数百〜数千くらい無視できるほど小さいと思う俺は贅沢すぎですか?

986 :デフォルトの名無しさん:03/08/10 09:08
C++プログラマはみな無視します

987 :デフォルトの名無しさん:03/08/10 11:17
継承多様による弊害は仮想関数テーブルの増大なんかよりも別にあると思うが

988 :デフォルトの名無しさん:03/08/10 11:36
>984
「各インスタンスの仮想関数テーブルを増大」
つまり、クラスとインスタンスの区別の付かないくらい
著者が莫迦だといいたいんだね?

989 :デフォルトの名無しさん:03/08/10 12:39
>>987
それはまた別の話。インターフェース継承なら、ふつー多重継承する
ものだし。

>>985
たとえエントリが 1 万個あったとしても、32bit マシンだと 40KB
程度でしょう。誤差、誤差。

990 :デフォルトの名無しさん:03/08/10 12:43
>>941
boost のスマートポインタ系や bind, compose, mem_fn, call_traits,
それに文字列処理に関して format, regex あたりは仕事で使ってるけど。
さすがに lambda, mpl なんかは、使ってる処理系のバージョンが古い
ためもあって使ってない。

991 :デフォルトの名無しさん:03/08/10 13:37
C++のRTTIについて質問なのですが、これってC++は
どうやって実現しているのですか?
文字列で各インスタンスに埋め込んでいるのでしょうか?


992 :次スレ案内:03/08/10 13:42
C++相談室 part22
http://pc2.2ch.net/test/read.cgi/tech/1060361082/l50

993 :991:03/08/10 13:47
次スレに質問移動しますた。

994 :デフォルトの名無しさん:03/08/10 13:51
ウメ〜

995 :デフォルトの名無しさん:03/08/10 13:59
1000鳥合戦はいつ始まるの?

996 :デフォルトの名無しさん:03/08/10 14:00
スレが立てられた時に始まっています

997 :デフォルトの名無しさん:03/08/10 14:05
1000

998 :デフォルトの名無しさん:03/08/10 14:07
記念カキコ v(^-^*)

999 :GET!DVD:03/08/10 14:12
☆★ 新商品 ゾク・ゾク 入荷!! 急げ〜!! ☆★☆
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★ 送料激安!  スピード発送!  商品豊富!   
★☆      http://www.get-dvd.com        
☆★ 激安DVDショップ 「GETDVDドットコム」 
★☆      http://www.get-dvd.com        
☆★ 今すぐアクセス Let’s Go!   急げ! 
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

1000 :デフォルトの名無しさん:03/08/10 14:12
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

231 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)