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


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

C++相談室 part34
1 名前:v(^・^)v :04/08/09 11:30
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり


2 名前:デフォルトの名無しさん :04/08/09 11:31
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html

3 名前:v(^・^)v :04/08/09 11:32
改行制限により分割
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/

4 名前:v(^・^)v :04/08/09 11:33
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://std.dkuug.dk/jtc1/sc22/wg21/

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)

5 名前:v(^・^)v :04/08/09 11:33
■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 :04/08/09 11:33
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
 (日本語) http://www.kmonos.net/alang/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html

7 名前:v(^・^)v :04/08/09 11:34
■関連スレ■
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/
ようかんマンがC/C++の宿題を片付けて見せます 28棹
http://pc5.2ch.net/test/read.cgi/tech/1089974839/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL 相談室
http://pc5.2ch.net/test/read.cgi/tech/1029029882/
COM の世界を斬る!
http://pc5.2ch.net/test/read.cgi/tech/981823340/
WTLお勉強スレッド
http://pc5.2ch.net/test/read.cgi/tech/1078150663/

8 名前:v(^・^)v :04/08/09 11:34
■コンパイラスレ■
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/(html化待ち)
GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/

9 名前:v(^・^)v :04/08/09 11:35
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part13
http://pc5.2ch.net/test/read.cgi/tech/1089011118/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
C++Builder相談室 Part10
http://pc5.2ch.net/test/read.cgi/tech/1089299158/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/

10 名前:v(^・^)v :04/08/09 11:35
連続投稿規制に引っかかってむしゃくしゃしていた.
スレが立てられるなら何でも良かった.
今はあらかじめ串を用意しておくべきだったと反省している.

11 名前:v(^・^)v :04/08/09 11:35
STLつかうと一気に実行ファイルサイズが10倍に?!

12 名前:v(^・^)v :04/08/09 11:36
>>11
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

13 名前:v(^・^)v :04/08/09 11:36
>>12
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

14 名前:v(^・^)v :04/08/09 11:38
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

15 名前:v(^・^)v :04/08/09 11:38
>>14
#include <stdafx.h>

後死ね。

16 名前:v(^・^)v :04/08/09 11:39
>>15
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

17 名前:デフォルトの名無しさん :04/08/09 11:39
これでテンプレは終わりかな。

18 名前:デフォルトの名無しさん :04/08/09 11:40
イベントハンドラの記述に悪戦苦闘してます。
あるイベントに対応するハンドラを関数ポインタで設定しておき、
ウィンドウプロシージャからその関数ポインタを呼ぶようにしてます。
ですが関数ポインタは型に厳しくて、
typedef void (*EventProc)(CEvent&);
これだとクラスのメンバ関数は突っ込めないし。

typedef void (CEvent::*EventProc)(CEvent&);
こっちだとメンバ関数はOKだけど自分以外のクラスの関数ポインタはダメだし。
それに多重継承しているクラスのメンバは型が合わなくてコンパイルエラーになります。

何かよい解決策はありませんか?


19 名前:デフォルトの名無しさん :04/08/09 11:42
>>18
処理ごとにハンドラ型をいっぱい用意する


20 名前:デフォルトの名無しさん :04/08/09 11:44
>>19
(;´Д`)

21 名前:18 :04/08/09 11:53
class CMainWindow : public CWindow
{
 CButton btn;
public:
 void CMainWindow ::Init()
 {
  btn.pClickEvent = (CEvent::EventProc)OnClick;
 }
 void CMainWindow ::OnClick(CEvent& e) {}
};

btn.pClickEvent = (CEvent::EventProc)OnClick;
この部分は関数ポインタでは無理なんでしょうかね・・・。

22 名前:デフォルトの名無しさん :04/08/09 11:56
#exclude <stdio.h>

23 名前:デフォルトの名無しさん :04/08/09 12:04
staticにする

24 名前:デフォルトの名無しさん :04/08/09 12:07
関数ポインタじゃなくて仮想関数呼び出しにしろ。

25 名前:18 :04/08/09 12:23
>>23
それも考えたんですがそれだとハンドラからメンバへのアクセスってコンテクスト経由ですよね。
もっといいアイデアがあるんではないかなーと思ってるんで今の所保留にしてます。

>>24
そうですね。仮想関数なら実装は簡単なんですよね。
でも派生しないとハンドラ書けないじゃないですか。
それにCButtonを派生してハンドラ書いてもはっきりいって不便ですよね?
ボタンのハンドラはやっぱりウィンドウに記述したいじゃないですか。ってわがままかなぁ。


26 名前:デフォルトの名無しさん :04/08/09 12:28
>>18
http://pc5.2ch.net/test/read.cgi/tech/1091264964/120
http://pc5.2ch.net/test/read.cgi/tech/1091264964/130


27 名前:デフォルトの名無しさん :04/08/09 12:29
>>18
http://pc5.2ch.net/test/read.cgi/tech/1091264964/131


28 名前:18 :04/08/09 12:37
>>26-27
あーテンプレートって手もあるんですねー。ちょっと見てきます。
ありがとう。

29 名前:デフォルトの名無しさん :04/08/09 12:40
統合失調者が前スレ1000を取ったようだが乙

30 名前:デフォルトの名無しさん :04/08/09 13:10
あー地鎮祭が既に終わっているー!!無念(藁

31 名前:デフォルトの名無しさん :04/08/09 13:16
前スレ1000=29

32 名前:デフォルトの名無しさん :04/08/09 13:54
という事は>>29は統失者か

33 名前:デフォルトの名無しさん :04/08/09 14:17
>>18
http://boost.cppll.jp/HEAD/libs/signals/doc/とか

34 名前:デフォルトの名無しさん :04/08/09 15:25
それにしても2000円札っていまだに見ないね。

35 名前:デフォルトの名無しさん :04/08/09 15:32
そりゃ、引き篭もってたらお目にかかる機会はないだろうな。

36 名前:デフォルトの名無しさん :04/08/09 15:36
2000円札って2000年限定だっけ?

37 名前:デフォルトの名無しさん :04/08/09 16:15
>>18
boost::functionとboost::bind、boost::lambdaのあたりを使う
boost.signalsも手か。


38 名前:デフォルトの名無しさん :04/08/09 16:19
2000円札ってプレミア付いてる?

39 名前:デフォルトの名無しさん :04/08/09 17:03
スレッドセーフなコンテナってどうやって実装するべきなんでしょうか?

struct A{
 A(const A& a) { lock(); assign(a); unlock(); }
 ~A() { lock(); release(); unlock(); }
};

たとえば上のようにした場合、タイミングによっては破棄されたコンテナを
コピーしようとしてしまう事がありますよね?

コンテナが保持するオブジェクトへのアクセスのみロックで保護して、
コンテナ自体へのアクセスのロックは利用側が気をつけるしかないんでしょうか?

40 名前:デフォルトの名無しさん :04/08/09 17:12
コンテナかどうかは関係ないかと。
通常のスレッドセーフ対策と同じ。

41 名前:デフォルトの名無しさん :04/08/09 17:19
age

42 名前:デフォルトの名無しさん :04/08/09 17:25
>>40
そういわれても分からないから質問してるんです。
通常っていうと、保護したいオブジェクトにアクセスする前後で
lockとunlockをするというだけだと思うのですが、

それはオブジェクトを利用するクライアント側でコードを書かなきゃならないので
言ってしまえば面倒であると言う事なのですが。

STLPORTとかで提供されるスレッドセーフなコンテナと言うようなものは、
コンテナへのアクセス自体は自分で保護しないとならないのでしょうか?

43 名前:デフォルトの名無しさん :04/08/09 17:46
>>42

>そういわれても分からないから質問してるんです。
逆ギレ キター。

>通常っていうと、保護したいオブジェクトにアクセスする前後で
>lockとunlockをするというだけだと思うのですが、
そのとおりです。必要な場所でロックするように実装すればOK。

44 名前:デフォルトの名無しさん :04/08/09 17:48
>>42
それはスレッドセーフというよりも寿命管理の問題じゃないの?
>>39 のコードだと「タイミングによっては」完全に破棄された後でコピーされてしまう
ことがあるわけだけれども、それはスレッドの問題ではなく、寿命管理が全くできていない
からだと思うし。

参照カウンタを儲けてアトミックに操作するとか、そういう普通の方法でよいと思うけど。

45 名前:デフォルトの名無しさん :04/08/09 17:58
参照カウンタは関係ないな
デストラクタに入った直後にコピーコンストラクタが呼び出されると、
カウント0のオブジェクトをコピーしようとする事になるから

46 名前:デフォルトの名無しさん :04/08/09 18:07
>>45
コピーコンストラクタを呼び出す側が参照を保持してるから、
ゼロにならないと思うけど・・・
どういう状況を想定してまつか?

47 名前:46 :04/08/09 18:10
>>46は「参照がゼロにならないから、そもそもデストラクトされない」って意味でした。
参照カウンタによる寿命管理って普通そういうものですよね。
強制的に delete したりしたらどうしようもないけど。

48 名前:デフォルトの名無しさん :04/08/09 18:26
private:
void assign(const A& a) {p=a;++p->c;}
void release() {if(--p->c){delete p;p=9;}}
struct counter {int c;} *p; };

39の例だと、こうした場合には

(スレッド) 処理 // コメント
(0) A::~A()
(0) A::lock()
(1) A::A(const A&)
(1) A::lock()
(0) A::release() //p->c=0, p=0
(0) A::unlock()
(1) A::assign() // error

ということになる。

・・・と思ったけど、Aのインスタンスをカウンタで管理すると言う事かな?

49 名前:デフォルトの名無しさん :04/08/09 18:31
/p=a/p=a.p/
/p=9/p=0/

50 名前:デフォルトの名無しさん :04/08/09 19:58
>>48
>・・・と思ったけど、Aのインスタンスをカウンタで管理すると言う事かな
そういうことです。
「コンテナの寿命管理」なんて設計段階でやっておけば十分なような気も
しますけど、元々のネタ(>>39)がそういうお題なのでしようがない。

++ とか -- はスレッドセーフじゃないのでOS 固有の何らかのAPIで
アトミックに実行する必要がありますが。

51 名前:デフォルトの名無しさん :04/08/09 20:24
そこで boost::shared_ptr ですよ。

52 名前:デフォルトの名無しさん :04/08/09 20:25
>>42 ttp://www.sgi.com/tech/stl/thread_safety.html

53 名前:デフォルトの名無しさん :04/08/09 20:26
>>51
あれってスレッドセーフだっけ?

54 名前:デフォルトの名無しさん :04/08/09 20:53
>>53
スレッド周りの対応が山盛りでおなかいっぱい。

55 名前:デフォルトの名無しさん :04/08/09 21:26
>>54
調べてみた。
boost:shared_ptr は、同一のインスタンスについては、多重の読み込みしかスレッドセーフではない。
スレッド毎にコピーを作ってあげれば、参照カウントは共有され、かつ変更に対しても安全になる。


56 名前:デフォルトの名無しさん :04/08/09 22:30
このスレはセーフですか?

57 名前:デフォルトの名無しさん :04/08/09 22:37
レスごとにスレを分割すればOKです

58 名前:デフォルトの名無しさん :04/08/09 22:37
>>18
boost::function 使う。

59 名前:デフォルトの名無しさん :04/08/09 22:38
>>1
乙。

60 名前:デフォルトの名無しさん :04/08/10 02:06
初心者でもうしわけないのですがやっぱりC++とC#を将来使いこなしたいのであれば、
C言語を勉強する必要があるのでしょうか?


61 名前:デフォルトの名無しさん :04/08/10 02:23
>>60
>>4見て出直せクッソタレ!

62 名前:デフォルトの名無しさん :04/08/10 04:35
見たんだけれどC++でできる事はほとんどC言語でできるっぽいってのはわかったんだけれど、
C#ってのはどうなんかと思って。
C++とC#を将来使いこなしたい ってのをCC#を将来使いこなしたい
にしとけばよかった。スマソ 
ほかのスレでC++は得意だけれどC#は苦手とかC#はいけるがC++はダメポとか
いうレスみたんで。。 得意な方からいわせるとやはりC++とC#は違うのですかね?
違うと言うことになればいきなりC#から勉強できるのかな??

63 名前:デフォルトの名無しさん :04/08/10 04:36
>C++でできる事はほとんどC言語でできるっぽいってのはわかった
こんな奴がC#やっても時間の無駄

64 名前:デフォルトの名無しさん :04/08/10 04:36
>>62
ならC言語だけでデザインパターン23種類全部書いてみい。

65 名前:デフォルトの名無しさん :04/08/10 05:25
俺なんかもっとすごいこと知ってるぞ!!!
C++でできることも、C#でできることも、Javaでできることも、
みーんなアセンブラ使っても出来るんだぞ!!!!!!!

インターネットもリナックスもみんなアセンブラしてるんだぞ!!
友達のスーパーハッカーもアセンブラだって言ってたぞ!!!!

66 名前:デフォルトの名無しさん :04/08/10 05:28
嬉々として書くほどは面白くないよ。

67 名前:デフォルトの名無しさん :04/08/10 05:44
>>63 すみません。今日が初めての日なんで・・・
夜からずっとやってますが根性だけはあるんでアドバイスお願いいたします。ペコ

68 名前:デフォルトの名無しさん :04/08/10 05:51
C# < C++ < C


69 名前:デフォルトの名無しさん :04/08/10 06:17
C → C++ → C# ありがとうございますです。ペコ
調べ直していろいろさらに分かり、思ったのですが、Cはもう古いそうなんで
思い切ってC++から勉強したいと思います。
C++やっているみなさんから言いマストやはりそれは無謀でしょうかね?
ちなみに今高校1年生ですので難しい数学はやったことないレベルであります。汗。

70 名前:デフォルトの名無しさん :04/08/10 06:22
カキコ修正でごんす。
CがわからんとC++ほとんどわからんらしいっす。 いままでスマソ

71 名前:デフォルトの名無しさん :04/08/10 06:23
数学云々より向いてるか向いてないかの問題
そしてなんでもかんでもすぐ人に聞く奴は向いてない

72 名前:デフォルトの名無しさん :04/08/10 07:07
>>71
>そしてなんでもかんでもすぐ人に聞く奴は向いてない
禿堂

73 名前:デフォルトの名無しさん :04/08/10 07:22
>>72
いや全く。
とりあえず手元にPCはあるようですから、実際に動かしつつ勉強すればいいですな。
書店で適当な入門書を見繕ってきて、まずは1冊を読み通しながら。
gccならネットから無償で入手できるし、学生さんならMS製品もアカデミック価格でしたっけ?

74 名前:デフォルトの名無しさん :04/08/10 08:02
#include <iostream>
#include <string>
using namespace std;

int i,k;
int main()
{
string str[4][2];

str[0][0] = "就職 ";
str[0][1] = "活動 ";
str[1][0] = "会社 ";
str[1][1] = "訪問 ";
str[2][0] = "集団 ";
str[2][1] = "面接 ";
str[3][0] = "学校 ";
str[3][1] = "推薦 ";

for(i=0;i<4;i++){
for(k=0;k<2;k++){

cout << str[i][k] << endl;

}

cout << "\n";
}

return 0;
}

これってどうよ?

75 名前:デフォルトの名無しさん :04/08/10 08:55
>>74
初期化の仕方がダサすぎ

76 名前:デフォルトの名無しさん :04/08/10 10:07
スレッドセーフといえば、以前、COM のオブジェクトを実装するときに、
Release のスレッドセーフな実装でさんざん悩んでドツボにはまったことがある。

77 名前:デフォルトの名無しさん :04/08/10 11:54
>>67
根性あるなら我慢して真剣にCを1ヵ月勉強しなさい。
それで身の振り方もわかるようになるだろう。
Cでやった事はJavaなりC++なりC#なりで必ず役に立つ。
それに1つの言語をマスターすれば他の言語を覚えるのに時間はかからない。


78 名前:デフォルトの名無しさん :04/08/10 12:10
>>75
コピペニマジレスカコワ(ry

79 名前:デフォルトの名無しさん :04/08/10 15:21
>>71 72 73 77
本当にありがとうございます。
実は10時間くらい調べて聞いたのですがまだ調べたりなかったようです。ペコ
77さん本当に参考になりましたっす。C言語の入門書慎重に選んで熟読しプログラミングは覚えるより慣れろ
らしいのでがんばってやっていきたいと思います。

80 名前:デフォルトの名無しさん :04/08/10 15:26
>>77
BASICやアセンブラの場合は、他の言語覚えるのにまだまだ時間かかると思うけどな。

81 名前:デフォルトの名無しさん :04/08/10 15:29
C#のparamsって便利だよな。


82 名前:デフォルトの名無しさん :04/08/10 15:39
>>79
日本語の勉強もしておけよ。
仕事でプログラミングをする積もりなら読解力と文章構成力が必要になるからな。

83 名前:デフォルトの名無しさん :04/08/10 16:21
>>80
そうか?アセンブラ知っていればCは楽勝。とくにポインタでつまづくことがない。


84 名前:デフォルトの名無しさん :04/08/10 18:07
>アセンブラ知っていればCは楽勝

そうかなぁぁぁぁ?

85 名前:デフォルトの名無しさん :04/08/10 18:28
>>84
アセンブラ理解できるセンスがあればCは理解できそうな気がする。
C++はまた別のセンスが必要だけど。

86 名前:デフォルトの名無しさん :04/08/10 19:00
センスってなんだ。
勉強すりゃ誰でもできるわ。

87 名前:デフォルトの名無しさん :04/08/10 19:16
>>86 は世間知らず。
困ったことに勉強しても出来ない奴はごまんといます。

88 名前:デフォルトの名無しさん :04/08/10 19:17
>>85
センスというか相性だね。C++やり始めたらあまりの難しさに根をあげてしまう香具師は
いくらでもいる。反対にそんなに難しく感じずあっさりと身につけてしまう香具師もいる。
>>86
考え方が甘い

89 名前:デフォルトの名無しさん :04/08/10 19:19
センスが要求されるのはある程度より深いところの話で、普通に使うだけならちゃんとした学習すれば誰にでも出来る。

90 名前:デフォルトの名無しさん :04/08/10 19:25
できない人間はセンスだとか抽象的な表現を使う法則。

91 名前:デフォルトの名無しさん :04/08/10 19:29
>>86>>89
君はどうも努力万能主義だね。君の考え方に従えば、100人いれば100人が
努力すれば全員東大に合格して、エリートコースを歩めるという風に読める。

で、君は無事に東大を卒業してエリートコースを歩いているかね?それとも
ただの妄想ですか?ププ

92 名前:デフォルトの名無しさん :04/08/10 19:34
>>91
そんなに難しいことかい?


93 名前:デフォルトの名無しさん :04/08/10 19:37
>>92
東大卒ですか?

94 名前:デフォルトの名無しさん :04/08/10 19:38
>>91
努力すれば誰でも東大に受かるなんて風には、とても読めませんが。

95 名前:デフォルトの名無しさん :04/08/10 19:39
>>91
F1は誰にでも乗りこなせるものじゃないが、運転免許程度なら取れん奴のほうが珍しいだろ。

96 名前:デフォルトの名無しさん :04/08/10 19:51
C++は神に選ばれたものだけが使えるエリート専用言語なんだよ

97 名前:デフォルトの名無しさん :04/08/10 19:52
>>94>>95
同一人物ですか。東大とは拡大解釈しすぎかもしれんが、だからと言って君は
C++を舐めすぎ。エピステーメーみたいになれるんかよ?

98 名前:94 :04/08/10 19:56
>>97
同一人物じゃないし、C++を舐めてはいない。
妄想もたいがいにな。

99 名前:デフォルトの名無しさん :04/08/10 19:58
ちゅうか>>86はアセンブラの事かと思てたが

100 名前:デフォルトの名無しさん :04/08/10 19:58
>>98
妄想はお前の方。逃げるなよ。誰も脳無しのお前を責めたりしないから。

101 名前:94 :04/08/10 19:59
>>100
へぇ。俺はどんな妄想したんだ?

102 名前:デフォルトの名無しさん :04/08/10 20:00
マ板でやれよ

103 名前:デフォルトの名無しさん :04/08/10 20:02
まぁ、夏だからな

104 名前:94 :04/08/10 20:02
あぁ、ヘンな奴の相手してしまった。

105 名前:デフォルトの名無しさん :04/08/10 20:05
100は逃げました

106 名前:デフォルトの名無しさん :04/08/10 20:08
>>101
同一人物なのにそうでないと言い逃れするとはチキンな野郎だ。
嘘つきは相手をしても無駄なエネルギーを使うだけなので放置。

107 名前:デフォルトの名無しさん :04/08/10 20:12
そこまでC++を使えることが特別なことだと思わないとアイデンティティ保てない>>91=>>97=>>100=>>106って可哀相だな。同情する。

108 名前:94 :04/08/10 20:12
OK。95には悪いが、俺=95ってことでこの話題終了。

109 名前:デフォルトの名無しさん :04/08/10 20:14

































110 名前:デフォルトの名無しさん :04/08/10 20:17

































111 名前:デフォルトの名無しさん :04/08/10 20:18
夏満開

112 名前:デフォルトの名無しさん :04/08/10 20:19
ぁぁデムパに構いたい

113 名前:デフォルトの名無しさん :04/08/10 20:27
嘘つきは、泥棒の始まり。

114 名前:デフォルトの名無しさん :04/08/10 20:29
2chの電波は単なる子供の場合が多いから、もっと優しくしてやれよ。

115 名前:デフォルトの名無しさん :04/08/10 20:40

































116 名前:デフォルトの名無しさん :04/08/10 20:42
char_traits<T>::copyとchar_traits<T>::moveってどうちがうんですか?
どっちもバッファのオーバーラップが許されないとあるのですが、
だったらmoveの意義が無い気がするのですが。

117 名前:デフォルトの名無しさん :04/08/10 20:45
>>116
氏ね。そうすれば悩まなくて済む。

118 名前:デフォルトの名無しさん :04/08/10 20:46
>>114
お前自身が子供のようにな。

119 名前:デフォルトの名無しさん :04/08/10 21:27
ttp://tmp4.2ch.net/test/read.cgi/download/1091536277/515
すいません、この人を引き取ってもらえませんか?

120 名前:デフォルトの名無しさん :04/08/10 21:29
男割だ

121 名前:デフォルトの名無しさん :04/08/10 21:33
>>119
明らかにスレ違いだハゲ

122 名前:デフォルトの名無しさん :04/08/10 22:58
>>116
moveは重なってても大丈夫のはず。
何の記述を見たのですか?

123 名前:デフォルトの名無しさん :04/08/10 23:56
>>82 日本語の勉強も必要なんすかぁ〜 了解です!
Cと日本語がんばります! ありがとうございました。

124 名前:デフォルトの名無しさん :04/08/11 00:04
>>122
VC6に付いてるMSDNには許されないと書いてあるな。

125 名前:デフォルトの名無しさん :04/08/11 00:20
>>124
オンライン版(英語)を見た。→ttp://msdn.microsoft.com/library/en-us/vclang98/html/STRING2_CHAR_TRAITSCCMOVE.asp
"The source and destination may overlap." と書いてある。
日本語訳が間違ってるのかな?

126 名前:デフォルトの名無しさん :04/08/11 08:53
>>116
オーバーラップがないのが確実なら
オーバーラップが許されないほうを使うほうが速い。それだけ

127 名前:デフォルトの名無しさん :04/08/11 09:05
>>126
なにいってんだ

128 名前:126 :04/08/11 10:14
>>127
なんか変だった
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcstdlib/html/vclrf_string_chartraitsmove.asp
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcstdlib/html/vclrf_string_chartraitscopy.asp
copyはsequences must not overlap
moveはpossibly overlapping sequence.


129 名前:デフォルトの名無しさん :04/08/11 12:19
VC6 MSDNの和訳ミスということで。

130 名前:デフォルトの名無しさん :04/08/11 12:31
こんな程度、訳せないようじゃあ、他のところも全く信用できないな。

131 名前:デフォルトの名無しさん :04/08/11 13:42
まあ、原文が間違ってるところもあるし。

132 名前:デフォルトの名無しさん :04/08/11 14:30
ファイルサイズを取得するにはどうすればいいのですか?
今はifstreamでファイルをオープンして最後までなめる処理を
してるんですがあまりにもナンセンスなんで・・・

string strLogFileName = "hogehoge.txt";
ifstream in;
in.open(strLogFileName.c_str(), ios::in);
if (in.is_open())
{
 // サイズを見る
 uint nCount = 0;
 char c;
 while (!in.eof())
 {
  in.get(c);
  nCount++;
 }
}
in.close();
cout << nCount << endl;


133 名前:132 :04/08/11 14:35
あ、最後の出力のとこがnCountのスコープはずれてましたね。


134 名前:デフォルトの名無しさん :04/08/11 15:03
std::ifstream i(strLogFileName.c_str(), std::ios::binary);
if (i.is_open()) {
i.unsetf(std::ios::skipws);
std::istreambuf_iterator<char> it(i);
size_t s = std::distance(it, std::istreambuf_iterator<char>());
}


135 名前:デフォルトの名無しさん :04/08/11 16:38
スコープ外したらコンパイルエラー(ry

136 名前:デフォルトの名無しさん :04/08/11 17:49
せめて読むんじゃなくてseekしようよ。
で、普通はANSI標準じゃないけど
POSIX標準なstat/fstatを使うんじゃないかなあ。

137 名前:デフォルトの名無しさん :04/08/11 18:19
>>132
C++の標準にファイルサイズという概念はない。環境依存。

138 名前:デフォルトの名無しさん :04/08/11 20:50
>>136
fstreamではseekは推奨できないんじゃないか。

139 名前:デフォルトの名無しさん :04/08/11 21:01
>>134
i.unsetf(std::ios::skipws);は必要無いんじゃないか?

140 名前:デフォルトの名無しさん :04/08/12 01:30
>>137
概念は無くともファイルが存在すれば、
その格納データ量という意味で意味づけはできるんじゃない?

141 名前:デフォルトの名無しさん :04/08/12 01:38
ファイルサイズ。
fseek()で終端に位置づけてftell()で位置を取得で終わりじゃん。
テキスト、バイナリの区別は必要かもしれないが、
その辺は調べてちょ。

142 名前:デフォルトの名無しさん :04/08/12 01:40
boost使えば簡単じゃん。
次期標準だろ。

143 名前:デフォルトの名無しさん :04/08/12 01:46
プゲラ

144 名前:デフォルトの名無しさん :04/08/12 04:39
boost::filesystemにファイルサイズはない。

145 名前:デフォルトの名無しさん :04/08/12 06:14
本当にファイルサイズが必要なのか?
たとえばifstreamを使って読み込むなら、
スペースのスキップや改行コードの変更によって
読み出せるデータ量が変わってくるんだから
132のように一文字ずつ数えるしかないんじゃ?

146 名前:デフォルトの名無しさん :04/08/12 07:27
バイナリモードでfopenしてfseek,ftellじゃ駄目なの?

147 名前:デフォルトの名無しさん :04/08/12 08:51
ファイルサイズ・・・。
定番の釣りだな。アフォクサ。POSIXで答えでてるじゃん。

148 名前:デフォルトの名無しさん :04/08/12 09:10
アフォクサいのに釣られてるよ、この馬鹿。

149 名前:デフォルトの名無しさん :04/08/12 12:34
たまに見かける、「iostream系だけで解決したい厨」。
iostreamだけ使えとは誰も言っていないにも拘らず、定期的に湧く。

150 名前:デフォルトの名無しさん :04/08/12 13:32
147が釣りに見える

151 名前:デフォルトの名無しさん :04/08/12 15:42
>>141>>146で答えが出てるのにね。

152 名前:デフォルトの名無しさん :04/08/12 15:43
みんな、お盆休みは有効に使おうよ。

153 名前:デフォルトの名無しさん :04/08/12 15:49
class A{
// 省略
};
class B{
// 省略
};
class C : public A, public B{
// 省略
};

ポリモフィズムの事なんですが、
A* a = new C;
は、期待どおりの動作をし、
B* b = new C;
は、期待している動作をしてくれない、
(つまり、多重継承の場合、ポリモフィズムにできるのは1つ目に継承したクラスへのポインタだけ)
というような事を、以前、本かサイトで見た(読んだ)ような気がするのですが、
調べなおしてみても、どうもそのような事が書いてある部分を見つけられず、
以前見た(読んだ)と思っているのは、ただの勘違いのような気がしてきました。
B* b = new C;は可能か不可能か教えてください。

更に、
class D{
// 省略
};
class E : public C, public D{
// 省略
};
C* c = new E;
これは可能でしょうか?
お願いします。

154 名前:デフォルトの名無しさん :04/08/12 15:55
>>153

>B* b = new C;は可能か不可能か教えてください。
可能。

>C* c = new E;
>これは可能でしょうか?
可能。

やってみてから聞け。


155 名前:デフォルトの名無しさん :04/08/12 16:09
なんで試さないんだろう・・・

156 名前:153 :04/08/12 16:19
>>154>>155
コンパイルが通るかは試しましたが、ちゃんと動作するかどうかとなると、
規格では駄目でも、たまたま動いちゃったりするかもと思ったからです。

どうもありがとうございました。

157 名前:デフォルトの名無しさん :04/08/12 16:20
そもそも「ポリモルフィズム」の話題じゃないような気がします。
これは継承と、基底クラスのポインタへの代入というだけでは?

158 名前:デフォルトの名無しさん :04/08/12 16:34
>>153
「期待どおりの動作」が何を指して言ってるのか分からないので
C++言語的には正当な行為だとしか言い様がない。

まあ
C* c = new E;
こんな事してたらおおよそ期待通りの動作はしないだろうけど。

159 名前:デフォルトの名無しさん :04/08/12 17:07
規格で駄目なら普通はしない。
趣味のプログラミングなら話は別。

160 名前:153 :04/08/12 17:14
>>157>>158
申し訳ないです。
言われてみれば、153に書いた例では、単に基底クラスへのポインタに代入ができるかどうかしか問題にしていませんね。
良い例が思いつかず、クラスの中身を全部省略してしまいましたが、
基底クラスには仮想関数が宣言してあって、継承したクラスを「基底クラスへのポインタ」に代入し、
仮想関数を「基底クラスへのポインタ」から呼び出す事ができるかどうか。
また、基底クラスに仮想関数がない場合でも、継承したクラスを「基底クラスのポインタ」に代入すれば、
基底クラスに含まれるメンバ関数とメンバ変数(publicであれば)を「基底クラスへのポインタから」操作できるかどうかなどの事が聞きたかったです。

もっと具体的(実践的)に、現在、知りたかった事は、インターフェース・クラスは、一番最初に継承されていなければいけない物なのかどうかです。

161 名前:デフォルトの名無しさん :04/08/12 17:36
>>141>>146で答えが出てるのにね。

162 名前:デフォルトの名無しさん :04/08/12 17:40
↑↑↑
誤爆スマソ

163 名前:デフォルトの名無しさん :04/08/12 17:41
>>151で出てるのにね。


164 名前:デフォルトの名無しさん :04/08/12 18:59
あらら...orz

165 名前:デフォルトの名無しさん :04/08/12 22:14
ファイルサイズの話は決着付いたの?

166 名前:デフォルトの名無しさん :04/08/12 23:20
>>144
CVSにはもう追加されてます。
次のリリースからつかえるでしょう。

167 名前:デフォルトの名無しさん :04/08/12 23:25
>>160
> 仮想関数を「基底クラスへのポインタ」から呼び出す事ができるかどうか。
できる。というか、仕様書読め。

> また、基底クラスに仮想関数がない場合でも、継承したクラスを「基底クラスのポインタ」に代入すれば、
その用途のためには、規定クラスに純粋仮想関数(実態はないが型の定義だけしてある)を
定義しておく必要がある。

> もっと具体的(実践的)に、現在、知りたかった事は、インターフェース・クラスは、一番最初に継承されていなければいけない物なのかどうかです。
別に。

168 名前:デフォルトの名無しさん :04/08/12 23:38
>>160
それも自分でコード書いてみればすぐに分かる事じゃない?
少なくとも返事を待つよりは早く結果がでるぞ。

呼び出される関数について、オーバーライドはインスタンスの型によって決まり、
オーバーロードは呼び出し時のポインタの型によって決まる。


169 名前:デフォルトの名無しさん :04/08/12 23:46
>>160
> 仮想関数を「基底クラスへのポインタ」から呼び出す事ができるかどうか。

悪いけどこんな基本的なこと人に聞く人にC++は向いてないよ。

170 名前:デフォルトの名無しさん :04/08/13 00:04
>>165
POSIXで確定だよ。

今調べてみたが、フリーのVC++ToolKitにも
ちゃんとstat.hヘッダーが含まれていた。
今はファイルサイズに限定した議論になっているけど、
実用から見るとタイムスタンプ・属性などの情報もいずれ必要になってくるだろうし。
ANSI標準でのファイルサイズ取得に固執する行為は、初心者呼ばわりされるだけ。

171 名前:デフォルトの名無しさん :04/08/13 00:28
以下のパターンAとパターンBの違いについて教えて下さい。
パターンAとBの違いは、Baseクラスの関数にvirtual指定があるか、ないかです。

■パターンA

class Base {
virtual void Func(); // 仮想関数
}

class Deliver {
void Func();
}

■パターンB

class Base {
void Func(); // 仮想関数
}

class Deliver {
void Func();
}


172 名前:デフォルトの名無しさん :04/08/13 00:34
>>171
質問に真摯に答えると、vtableが出来るからsizeofの値が違う。
できれば質問の意図を教えて欲しい。

173 名前:デフォルトの名無しさん :04/08/13 00:36
>>171
違いって見たまんまだろ
パターンBのBase::Func()は仮想関数じゃないだけ

もしかしてDeliverはBaseから派生させたかったのか?

>>172
171に対してそれは無理な相談だ


174 名前:デフォルトの名無しさん :04/08/13 00:40
>>173
確かに。ワロタ。

175 名前:デフォルトの名無しさん :04/08/13 00:47
真剣にレス付けようと思っていたが、
先にリロードして正解だった。
>173がシンプルに説明をしてくれている。
後はBase::Funk()が仮想関数でないということは、どういうことかを
考えればよい。
つまり仮想関数であることにより期待される動作(これは勉強するべし)
を数え上げれば、それがすなわち2つのパターンの違いである。

176 名前:デフォルトの名無しさん :04/08/13 01:03
好意的に解釈すると、
Base* a = new Deliver;
a->Func();
したときにBaseとDeliverどっちのFunc()が呼ばれるかを書いて欲しいんだろうな。

177 名前:>>171 :04/08/13 01:14
>>176
あ、そういうことです。

と、いうことは、

パターンAの場合は、基底クラスが呼ばれて、
Bの場合は、派生クラスが呼ばれるということでいいんでしょうか?


178 名前:デフォルトの名無しさん :04/08/13 01:21
なんで自分で試してから発言しないのかを教えてくれないか?

179 名前:デフォルトの名無しさん :04/08/13 01:25
>177
だから仮想関数とは何かを勉強しなよ。
>176が好意的に書いてくれた丁寧なレスの内容なんて、
本読むなりサイトの記述をチェックすればすぐにわかること。
調べたけどわからなかったからここで聞いているんですなんて
いうのは却下だよ。それは自分の無能さを公に宣言するような
ものだからな。

180 名前:デフォルトの名無しさん :04/08/13 02:35
あるメンバ関数からしか呼ばない関数も
そのクラスのprivateメソッドとするべきかどうかで迷ってます。

クラス宣言が見づらくなるという、つまらない理由で
単なるstatic関数としてのみ扱うのは横暴でしょうか

181 名前:デフォルトの名無しさん :04/08/13 02:43
>>180
意味がわかりません。
もっと詳しく、読んで理解できる日本語で説明するか、コードで語ってください。

182 名前:デフォルトの名無しさん :04/08/13 02:56
>>180
*.cppにstaticで書いてるってことね。
関数内で関数定義が出来ればいいんだろうけど、出来ないんだよね。
そういう場合、俺はstructのoperator()で擬似的に関数内関数にしてる。

183 名前:デフォルトの名無しさん :04/08/13 03:02
>>182
> そういう場合、俺はstructのoperator()で擬似的に関数内関数にしてる。
不要なハックは感心しない。

184 名前:180 :04/08/13 03:04
>>182
そうです、すいません
モジュール内でstatic(=ローカル)な関数の意味でした

うーん、無理矢理、関数内関数っぽくしちゃうわけですか

元々、切り分ける意味が薄い関数なんですよね。
再帰や、ちょっとしたまとまった処理程度で。
確かに散らすよりは気分はいいかも…

早速試してみます、レスありがとうございました

185 名前:デフォルトの名無しさん :04/08/13 03:13
>184
そもそもprivate関数とモジュール内staticな関数の違いとして、
メンバにアクセスできる、できない、があるんだが。

186 名前:デフォルトの名無しさん :04/08/13 03:14
>>183
STLと同じ流儀なんだから標準的技法なんじゃないかと

187 名前:デフォルトの名無しさん :04/08/13 03:16
>>184
謝るこたーない、static関数で合ってるよ
>>181はどこが分からなかったんだ

188 名前:デフォルトの名無しさん :04/08/13 03:23
static関数がstaticメンバ関数と受け止められたんだろう。
俺も一瞬そう解釈した。

189 名前:デフォルトの名無しさん :04/08/13 03:26
わざわざstaticにしないで
namespace {} で囲っちゃえば?

190 名前:デフォルトの名無しさん :04/08/13 04:14
namespaceで囲うと、文字数が増えるので出来れば別の方法教えてください。

191 名前:デフォルトの名無しさん :04/08/13 04:22
>>182
オナニー以外の何物でもない。

>>180
横暴というかアホ。

192 名前:デフォルトの名無しさん :04/08/13 04:25
>>186
何のためにoperator()が使われているか理解してないんだね。
関数内関数(←全然違うw)を模倣するためじゃないことくらい分からないと。

193 名前:デフォルトの名無しさん :04/08/13 04:25
181大暴れだな

194 名前:デフォルトの名無しさん :04/08/13 04:25
>>182は別にハックでもなんでもない常套手段だと思うけど

195 名前:デフォルトの名無しさん :04/08/13 04:31
>>190
ん?無名namespace使えばいいだろ。

196 名前:デフォルトの名無しさん :04/08/13 05:00
なぜこの状況でnamespaceが出てくるのか誰か解説してください。

197 名前:デフォルトの名無しさん :04/08/13 05:28
staticの意味が・・・

198 名前:デフォルトの名無しさん :04/08/13 05:46
>>192
確か、コンテナ内部で使われるんだっけ?
フォローお願い。

199 名前:デフォルトの名無しさん :04/08/13 06:45
>>196
static関数に頼らないC++的な解決法とか・・・?

200 名前:デフォルトの名無しさん :04/08/13 07:29
staticでいいと思う

201 名前:デフォルトの名無しさん :04/08/13 07:41
>>177
逆だ
オーバーライドとオーバーロードの区別をしろ
ポリモフィズムを理解しろ

202 名前:デフォルトの名無しさん :04/08/13 07:48
んー、人それぞれだとは思うけど
無理に「C++流」にせず、「C流」で構わない部分ってのもあるとは思う。
staticもそうだけど、stdioの関数群とかキャストとか。

203 名前:デフォルトの名無しさん :04/08/13 08:07
>>202
うむ。漏れもそう思う。

204 名前:デフォルトの名無しさん :04/08/13 08:24
cout より printf

205 名前:デフォルトの名無しさん :04/08/13 08:29
てゆーかsprintf使えなくなって
stringstream使えとか言われたら
俺絶対泣くし。

206 名前:デフォルトの名無しさん :04/08/13 08:41
static キーワードでファイルローカルな宣言をするのは正式に deprecated ですよ。
stdio.hとか、strstreamとか、リテラルからchar*への変換とかと同等。

207 名前:ぼるじょあ ◆yBEncckFOU :04/08/13 09:18
(・3・)エェー 僕の知らない英語使わないでYO!
deprecated
【形】 《コ》〔仕様{しよう}などが〕廃止{はいし}される可能性{かのう せい}がある、
廃止予定{はいし よてい}の、
将来{しょうらい}のサポートが保証{ほしょう}されない(ので使用{しよう}すべきでない)、

208 名前:153 :04/08/13 09:23
>>167
どうもありがとうございます。
>>168
ポリモフィズムの時のデストラクタのように、
試してみるだけでは気付かない事があるかも知れないと思って聞きました。
(ここで聞くより本やサイトで調べろって言われれば、そのとおりなんですけども)

皆様、ご迷惑おかけしました。
今度こそ、消えます。

209 名前:デフォルトの名無しさん :04/08/13 09:36
>>208
だから「聞く」とか「本やサイトで調べる」とかじゃなくて、
その前に、自分でコード書いて実行すれば結果が分かるだろう?
っていう話をみんなしてる訳で・・・


210 名前:デフォルトの名無しさん :04/08/13 09:52
>>208
>ポリモフィズムの時のデストラクタのように、
>試してみるだけでは気付かない事があるかも知れないと思って聞きました。

それこそ、試した方が簡単に、確実に、良くわかるだろ・・・

211 名前:デフォルトの名無しさん :04/08/13 09:53
試してみるだけでは気付かない事があるかも知れない

212 名前:デフォルトの名無しさん :04/08/13 09:54
関連して質問させてください。

static関数よりも無名namespaceを使うべき、って聞いたことがあるんですけど、
(規格書にもそう書いてあった気がする。)

(1) なんでか知ってますか?
(2) みなさんはどっち使ってますか?

とりあえずワシは、規格書をもう一回読んできます。

213 名前:デフォルトの名無しさん :04/08/13 09:57
>>211
同意。

まず試すことはとても重要。
でも、試して大丈夫だからといって安心してはだめ。

質問するときは
「こういう目的のために、こういうコードを書いてみました。試したら上手く動きました。でも正しいか不安です。教えてくれ。」
って感じでよろしく。

214 名前:デフォルトの名無しさん :04/08/13 10:01
>>212
1. deprecated
2. neither

215 名前:デフォルトの名無しさん :04/08/13 10:03
試した姿勢が文脈から感じられない質問って教える気無くすもんだよ。
質問する側は相手からうまく情報を引き出すコツを身につけるべきだ。
相手の為ではなく自分の為にな。

216 名前:212 :04/08/13 12:09
>>214
1. なんで deprecated になったかを知りたいのです。宜しくお願いします。
2. それはそれでアリでしょうね。JAVAみたいだけど。

217 名前:デフォルトの名無しさん :04/08/13 12:34
>>216
staticは使う場所によって意味が幾つにも分かれてしまう(のでわかりにくいと言われている)から減らすため

218 名前:デフォルトの名無しさん :04/08/13 12:36
>>217
へえ。そんな理由だったんだ。
だったら、なんでクラスメンバにstaticなんてキーワードをあてたんだろう。
矛盾してるよね。

219 名前:デフォルトの名無しさん :04/08/13 12:39
上でも起きてるように
staticというキーワードに複数の意味を持たせる事で
実際に混乱してるからね。

でも、絶対に「非推奨」が「不可」にはならないと思うけどね。
Cが無くならない限り。
むしろ(単語の意味はともかく)、staticメンバのするために、
既存の「static」というキーワードを利用したのが混乱の原因なんだから。

関数内staticな変数だって
C++がマルチスレッドを前提とした言語にならない限り
無くなることはないだろうし。

220 名前:デフォルトの名無しさん :04/08/13 12:49
>>218
file local = static
ってのは、staticって単語の誤用だからでしょ。
infinite existence = static
に統一したんでしょ。

>>219
> 関数内staticな変数だって
> C++がマルチスレッドを前提とした言語にならない限り
> 無くなることはないだろうし。

そんなことはないです。
マルチスレッドだってstaticなlock変数は極めて有効です。

221 名前:デフォルトの名無しさん :04/08/13 12:49
>>215
> 相手からうまく情報を引き出すコツ
2chで一番有効なのは、
その場の人間達を小馬鹿にするような口調で間違った主張を披露して、
知識をひけらかすことに命を賭けてる厨が「正解」を携えて突っ込んでくるのを
待つって戦法ですね :-)

222 名前:デフォルトの名無しさん :04/08/13 12:58
小細工の必要は人はきのこれない悪寒。

223 名前:デフォルトの名無しさん :04/08/13 12:59
いや、だから
extern宣言は関数スコープでもファイルスコープでも同じように書けるのに
infinite existence変数の記法は関数内外で違う書き方が推奨されるってのがね。

違うのはスコープ(可視性)だけで、寿命その他は同じなのに。
(初期化タイミングは違うけど、「スコープが初めて有効になった時に初期化される」という意味では同じ)

224 名前:デフォルトの名無しさん :04/08/13 13:09
>>220
クラスメンバと infinite existence って違う概念のような気がするなあ。
グローバル変数だって infinite だし。だからグローバルな static関数/変数は非推奨にしたって考えればいいのかな。

マルチスレッドで使うstaticなlock変数と、auto変数じゃないstatic変数って別ものじゃないかなあ。
再入可能性の制御ってこと?

225 名前:デフォルトの名無しさん :04/08/13 13:10
まあ、ここでどうこう言ったって標準化委員会の目にとまるわけでもないし
std::や#include <c...>あたりから、なんとなく
Cとの互換性(というよりCしか知らない人の移行しやすさ)を軽視する方向のような気もしてるけど
それならそれで仕方ないかなって気もするし。

226 名前:デフォルトの名無しさん :04/08/13 13:51
>>223
オート変数へのstatic qualifierが「変更する」のは、
寿命でしょ。スコープは変えないよ。

qualifierの行う変更について、
static: 寿命
extern: スコープ(defaultだから基本的に意味なし)
と統一したんでしょ。

で、名前のスコープはnamespace使えと。

> 違うのはスコープ(可視性)だけで、寿命その他は同じなのに。

はとんちんかん。
グローバル変数の元から持っている性質とオート変数の
static qualifierが変えた性質が同じだからって何だって言うの?






227 名前:デフォルトの名無しさん :04/08/13 13:54
>>224
> クラスメンバと infinite existence って違う概念のような気がするなあ。

infinite existence: クラスメンバの性質の一つ
オブジェクトが存在しなくても存在し続けるメンバ。

staticなオート変数が関数実行中でないときも存在するのと同じ。

後半については何言いたいのかサパリ




228 名前:デフォルトの名無しさん :04/08/13 14:11
>オート変数へのstatic qualifierが「変更する」のは、
>寿命でしょ。スコープは変えないよ。

なにわけわかんないこと言ってるの?
auto変数は常にauto変数であって、決してstaticではないよ。

関数スコープのローカル変数に、autoとstaticの2種類があるだけ。

229 名前:デフォルトの名無しさん :04/08/13 14:24
>>227
要するに、
「いろんなタイプの変数や関数が存在するけど、とりあえず寿命がinfiniteなものに付けるキーワードはstaticでいいや」
って標準化委員会が考えたってことだね。

変なのぉ〜とは思うけど、まぁ理解はできる。

230 名前:デフォルトの名無しさん :04/08/13 18:21
今までCを使っていたんだけですが、理由があってC++を使うことになりました。

プログラムの中でソケットを扱うのですけど、Cでは直接socket()等のシステム
コールを叩きますよね。
でもC++でそれをやるとC++らしくなくなる気がします。
特にselect/pollで多重化して非ブロックにして…、なんてのをやると
「オブジェクトは何所行った?」って感じがするんですよね。

そこで聞きたいのですが、みなさんはC++でネットワーク関連のプログラム
を書くときどういう設計にしますか。sourceforge.netで調べていたら
cppsocketというソケットのクラスラッパがあったりするので
そういうのをみなさんも使用(または自作)しているのかなと想像しているのですが。

ソケット周辺だけでなく、どうもC++を書いているとどこでシステムコールの
ような低レベルインターフェースを叩くか迷うんです。理想と現実というか…。

231 名前:デフォルトの名無しさん :04/08/13 18:33
C++らしい手段が提供されてなくて、Cの流儀で書く事に抵抗があるのならラッパーを書くしかないじゃないか。

232 名前:デフォルトの名無しさん :04/08/13 18:37
そんなあなたに
http://www.cs.wustl.edu/~schmidt/ACE.html
http://www.boost.org/

233 名前:デフォルトの名無しさん :04/08/13 19:08
ソケットがオブジェクト化されててもあんまりうれしくないぞ。
所詮通信路でしかないんだから、そこはそれで割り切って、
オブジェクトのシリアライズ経路のひとつとして考えたほうがいいと思う

234 名前:デフォルトの名無しさん :04/08/13 19:11
poller
http://www.kegel.com/dkftpbench/doc/Poller.html

235 名前:デフォルトの名無しさん :04/08/13 22:13
>>231-234
レスありがとうございます。
ACEってのは気になるますね。
サイトの方に文章が大量にあるので、いまから読んでみます。
本も出てるみたいですね。

一方で無理にオブジェクト化すると標準入出力と同列に扱えなかったり
するんですよね。

>>232, 234さんらはやはりその手のライブラリを使うのでしょうか?
いろいろ考えてるとソケット自体をオブジェクトにするのでは無くて、
もっと上位のクラスを作って、その中で生のソケットを扱うのが良いのかなぁ、と。
例えばHTTPServerやFTPClientのようなクラスを用意して、その中で
プロトコルとソケットを管理するような感じ。
結局Socketクラスを作っても
Socket sock;
sock.setsockopt(HOGEHOGE);
sock.bind(Foobar);
みたいなことをやり始めると結局やってることはC流とは変わらないし。

236 名前:230 :04/08/13 22:14
最後、文章おかしいけど勘弁(意味は伝わるでしょう)。

237 名前:デフォルトの名無しさん :04/08/13 22:15
でもSocketクラスのデストラクタが有効に使えるでしょ

238 名前:230 :04/08/13 22:30
>>237
デストラクタでソケットを閉じるということですか?
ソケットを閉じるときって結構デリケートな処理が必要になったりしますよね。
相手の為にできるだけ早く閉じたかったりすることも。

あ、そういうことをクラス内に隠蔽すると嬉しいという話か。
非同期IOなんかも隠蔽出来るとうれしいかな。

その場合select/poll等の関数は誰が保持しますか?
>>234のような専用クラス? 

239 名前:デフォルトの名無しさん :04/08/14 00:44
>>230-238
環境依存にしてスレ違い。
専用スレ逝ってください。

ネットワークプログラミング相談室 Port10
ttp://pc5.2ch.net/test/read.cgi/tech/1090385857/

240 名前:デフォルトの名無しさん :04/08/14 10:17
>>239
黙れ。ここはCスレじゃないんだからそんなことにこだわるな。

241 名前:デフォルトの名無しさん :04/08/14 10:31
ソケットをストリームに組み込むとだいぶ変わる。

242 名前:デフォルトの名無しさん :04/08/14 12:39
>>240
いやいや、そうでもない。
特にサーバアプリの場合、完全に環境依存。
ちょっとやそっとのことで汎用的なラップをできるものじゃない。

243 名前:242 :04/08/14 12:50
ヒントをいうと、あまりカプセル化しすぎないこと。
メンバ変数に直接アクセス出来るようにしておく事をお奨めする。
デストラクタ機能はあくまでオマケ感覚のつもりで。

244 名前:デフォルトの名無しさん :04/08/14 12:56
>>243
死んどけや

245 名前:デフォルトの名無しさん :04/08/14 13:03
Javaのsocketが大失敗こいてるからなあ・・・

246 名前:デフォルトの名無しさん :04/08/14 13:35
>>245
そうか?
プラットフォーム、実装が複数ある中では異例の成功だと思うけども。


247 名前:242 :04/08/14 14:22
>>244
なぜに死すべしや?


ついでに書くと、ソケットハンドルをいつでもAttach/Detachできるようにしないとかなりツライ。
デストラクタ処理がかえって邪魔になる事もあるからね。

248 名前:デフォルトの名無しさん :04/08/14 14:28
newしろや

249 名前:デフォルトの名無しさん :04/08/14 14:29
>>246
まさか。あんなのtoy programでしか使わないよ

250 名前:デフォルトの名無しさん :04/08/14 15:05
>>248はC/C++の開発から永久追放。


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