C++相談室 part15
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNGelegantなソースを目指してね。 関連URL>>2-10
v(^・^)v
0002デフォルトの名無しさん
NGNG[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/
仕様書の重箱の隅的な話題などが読めます。
[Association of C & C++ Users]
http://www.accu.org/
[C/C++ Users Journal]
http://www.cuj.com/
[Object Management Group]
http://www.omg.org/
[news]
news:comp.lang.c++
news:comp.lang.c++.moderated
0003デフォルトの名無しさん
NGNGC++FAQ Lite http://www.parashift.com/c++-faq-lite/
C++FAQ(日本語) http://www.bohyoh.com/CandCPP/FAQ/
Cとその仕様を比較しながらの解説なので分かりやすい。
[STL]
STL Programmer's Guide http://www.sgi.com/tech/stl/
日本語としてはおそらくここ。ただしリファレンス的内容。
http://www.wakhok.ac.jp/~sumi/stl/
[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~g940455/wp/
YahooBBS http://groups.yahoo.com/group/boost/
news news:gmare.comp.lib.boost.devel
amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
0004デフォルトの名無しさん
NGNG[GCC]
http://gcc.gnu.org/
(branch list http://gcc.gnu.org/cvs.html とくにcp-parser-branch!)
(Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
http://www.borland.co.jp/cppbuilder/freecompiler/
[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
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm
0005デフォルトの名無しさん
NGNGBoost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
LokiPort
MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
MSVC6.0 SP5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
ACE/TAO http://www.cs.wustl.edu/~schmidt/
Network、Thread、ORBなどのポータブルなライブラリ
Blitz++ http://www.oonumerics.org/blitz/
数値計算ライブラリとして人気がある、らしい
spirit http://spirit.sourceforge.net/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ
他ライブラリリンク集
http://www.trumphurst.com/cpplibs/cpplibs.phtml
0006デフォルトの名無しさん
NGNGPart1 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://pc3.2ch.net/test/read.cgi/tech/1007731543/
0007デフォルトの名無しさん
NGNG【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc3.2ch.net/test/read.cgi/tech/1037795348/
【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/
STLスレッド
part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html
0008デフォルトの名無しさん
NGNGGCCについて http://pc3.2ch.net/test/read.cgi/tech/1007731543/
C++Builder相談室 http://piza2.2ch.net/tech/kako/969/969458279.html
新C++Builder相談室 http://pc.2ch.net/tech/kako/997/997074601.html
C Builder相談室 Part3 http://pc3.2ch.net/test/read.cgi/tech/1016065855/
C++Builder相談室 Part4 http://pc3.2ch.net/test/read.cgi/tech/1035596146/
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc3.2ch.net/test/read.cgi/tech/1030493157/
VisualC++相談室 3 http://piza2.2ch.net/tech/kako/993/993186053.html
VisualC++相談室 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
VisualC++相談室 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
VisualC++相談室 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
VisualC++相談室【7】 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
VisualC++相談室【8】 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
VisualC++相談室【9】 http://pc3.2ch.net/test/read.cgi/tech/1036897197/
0009デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1039607377/
Windows Programing for C/C++(Not MFC)
http://pc3.2ch.net/test/read.cgi/tech/1018239290/
COM の世界を斬る!
http://pc3.2ch.net/test/read.cgi/tech/981823340/
ATL 相談室
http://pc3.2ch.net/test/read.cgi/tech/1029029882/
managed C++ やろうぜ!!
http://pc3.2ch.net/test/read.cgi/tech/1014486422/
0010レゴ
NGNG聞きたい事は、山程在るんですが、
理解してなさ過ぎなので、力付けたいと思います。
0011デフォルトの名無しさん
NGNG律儀なのはいいけど、ここは馴れ合いのスレじゃないので挨拶せんでもいいです。
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNGtemplate<class T> inline void foo(void){}
上の書き方では、インライン展開はされないんですか?
それとも両方同じ意味?
0014デフォルトの名無しさん
NGNG上下で意味が違う。上が普通。下がinline指定付き。
0015デフォルトの名無しさん
NGNG答えになってないだろ。
「普通」 ってどういう事だよ。
まあ結局は、最適化の方法によると思うけど・・・。
場合によっては inline も無視されるし。
0017デフォルトの名無しさん
NGNGそんな事は一目瞭然だろ。
13 は、実際にどうなるかが知りたいんだろうに。
0019デフォルトの名無しさん
NGNG15=17 ですが何か?
どうして言えないと思うんだ?
「インライン展開はされないんですか?」 が実際にどうなるかという話で無いと
したら何だというんだ?
inline を指定した事になるのか、という質問には見えない。
0020デフォルトの名無しさん
NGNG>>1 乙。
002114
NGNGえ、だって、「それとも両方同じ意味?」とかゆってるし・・・。
インライン展開されるかどうかはinline指定の規則に従うってことで済ませとかないと
コンパイラからコンパイルオプションから聞き出さない限り意味のある答えはでないだろ。
>13が環境を示さない限り「実際にどうなるか」って話は意味無い。
ってなわけで、「実際にどうなるか」の話なんて漏れにはできん。
>>19よ、見本でもみせてやってください。
0022デフォルトの名無しさん
NGNGどちらでもほとんどの処理系でインライン展開はされると思うが、リンケージが異なる
かな。C++ だと inline 関数のデフォルトリンケージは static なんで、オブジェクトに
特殊化したテンプレート関数を格納したい場合(ライブラリ作る場合)は前者でコンパ
イルしないと、まずいと思う。
0023デフォルトの名無しさん
NGNGこれほんと?
ドラフトの中にこんなんあるけど。
[Footnote: The inline keyword has no effect on the linkage of a function. --- end foonote]
0024デフォルトの名無しさん
NGNGまだC++をはじめたんですけどなかなか覚えれなくて
みなさんどんな感じでC++を覚えたのでしょうか?
0025デフォルトの名無しさん
NGNGすみません下げ忘れてました。
0026デフォルトの名無しさん
NGNG俺はC++3rdを頑張って読破した。(Cは多少わかってる状態で)
とりあえずC++3rdを買って読む。あとは>>1が頑張ってくれたテンプレ集とか、cppll ML(最近質が落ちてるけど)とかわからなくても漁ってみるべし。
わからなくなったら周りのC++に詳しい人とか、このスレで聞くといい(叩かれるかもしれんが…)。
cppll ML
http://www.trickpalace.net/cppll/
で、>>1 乙カレー
002726
NGNG中学〜高校のときだったしなぁ…。
仕事で今すぐ必要というならアドバイスできませぬ。なにせ趣味グラマなもんで。
0028デフォルトの名無しさん
NGNGこれむかつく!
>>1 お疲れ
0029MlQ38syL
NGNGこんにちはMlQ38syLです。
ボクのくだらん遊びに付き合ってくれてありがとうございます。
仕事でなかなか良いアイデアが浮かばなくってイライラしてました。
おかげ様で良い気分転換が出来ました。
仕事に戻ります。サンキュ♥
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGいまcppllはtietewによる新人いじめの真っ最中なので不適かと。
#あれじゃ「身内」以外は投稿しにくいよなぁ。
0032デフォルトの名無しさん
NGNGスレ立て乙ー。
0033デフォルトの名無しさん
NGNGレス乙カレー(プ
003413
NGNG>>13 上の書き方では、インライン展開はされないんですか?
この意味は、「実際に展開されるかどうかではなく、inlineを付けなくても
inline指定したことになるのか?」っていう意味でした。
テンプレートは、コンパイル時に定義が見えなくてはいけないのでinlineを付けなくても同じかなと。
>>22 ちょっと状況が想像できません。調べてみます。
0035デフォルトの名無しさん
NGNGinlineを付けなくてもinline指定した事になるのは、クラス宣言部内で
メンバ関数を定義した時だけでは?それ以外の時は明示的にinline
と指定する必要がある。
0036デフォルトの名無しさん
NGNGvector<int> v;
vector<int>::iterator i = v.begin();
++i; //これは未定義ですか?不定?それとも安全?
0037デフォルトの名無しさん
NGNGv.begin → v.end
ということです。
0038デフォルトの名無しさん
NGNGvector<T>::iteratorの型は大体の処理系でT*だから、++iをする分には問題ないけど、
それを操作するとマズいことになると思われ。
仕様がどうなってるかは仕様書を見てくれ。
0039デフォルトの名無しさん
NGNGそーゆー認識ってマズーだと思う。
0040デフォルトの名無しさん
NGNGテンプレート関数はヘッダに書けるけど、inline指定しなくてもいいんだよね。
じゃ、普通の関数をヘッダに書きたいけどinline付けたくない!ってとき、
template<int dummy> void hoge_imp(void){ //普通の関数のつもり}
#define hoge hoge_imp<0>
main(){ hoge(); }
って書けばよさげじゃない?
#defineが汚いけど。
0041デフォルトの名無しさん
NGNG> 普通の関数をヘッダに書きたいけどinline付けたくない!ってとき
どういう場合にそんなことがしたくなりますか?
0042デフォルトの名無しさん
NGNGこの場合、begin()でもend()でも未定義です。
*iが出来ないイテレータについて++i;はできない規格です。
規格書に「未定義」と定義してあるところは見つけられなかったけど...。
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGならんっつーに。
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGdelete[]
0048デフォルトの名無しさん
NGNGってエラーメッセージが出るんだけど、何がわるいのでしょうか?
0049デフォルトの名無しさん
NGNG0 除算やメモリアクセス違反などを疑え。
0050デフォルトの名無しさん
NGNGするということはできるのですか?
kouzoutai.kouzoutai2.youso見たいに書くと思うのですが。
一般にやっぱりあまり使われませんよね?
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGAPI絡むとごく普通に使われてると思うが。
005350
NGNG今構造体をある構造体の中に組み込んで
kouzoutai[i].kouzoutai[j].yousoという風に使いたかったので。
どうやらごく普通に使っているならそのまま使ってみたいと思います
0054デフォルトの名無しさん
NGNGクラスを他のクラスの中に入れるとコンポジションとなって少し意味が
変わるかもしれん。
005550
NGNG0056デフォルトの名無しさん
NGNGメンバ関数を含む構造体を他の構造体に入れると、オブジェクトの再利用の
観点から特別な意味合いを含むようになる。
005750
NGNG質問ばかりですいません
0058デフォルトの名無しさん
NGNGstd::vector<T>::iteratorはランダムアクセスイテレータです。
ランダムアクセスイテレータに対してoperator++()を適用するには、
適用前に参照はがしが可能、適用後に参照はがしが可能または
最後を過ぎた状態でなければなりません。(仕様書参照)
この場合、vは空であり、v.begin()にしろv.end()にしろ、
v.end()を返し、これは参照はがしが出来ません。よってこれは
operator++()が適用前に必要な条件を満たしていませんので、
結果は未定義です。
0059デフォルトの名無しさん
NGNG構造体がメンバ関数を含んでいなければ別に気にする必要はない。
含んでいても、だからある特別な使い方をする必要があるという意味で
はない。特別な使い方を意識すればバグが出にくくなる、それだけ。
006050
NGNG0061デフォルトの名無しさん
NGNG規格書の事を仕様書仕様書って言うなよ・・・
0062デフォルトの名無しさん
NGNG規格書じゃなくて>>58の持ってる環境の仕様書なのでは?
0063デフォルトの名無しさん
NGNGそんなものを 「参照」 と言われても・・・
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG0067シリアル
NGNGポートに接続できなくなるのですがなぜですか?
0068デフォルトの名無しさん
NGNGすみません。C++とどういう関係があるんでしょうか?
0069デフォルトの名無しさん
NGNGWin32 API で行われているようなかんじで、登録されたデータを
ハンドルで管理したいと思います。
ハンドルの生成/開放を行う、一般的な方法はありませんか?
単純だし、自作できるとは思うのですが標準で用意されてるなら
そっちを使ったほうがいいかと思いまして。
0070デフォルトの名無しさん
NGNGオブジェクトのポインタで充分ではない理由があったら聞かせてくれ。
0071デフォルトの名無しさん
NGNGスマートポインタ?
0072デフォルトの名無しさん
NGNG> 特にメンバ変数を含んでないので。がんばります
^^^^
どうがんばる気だ ?
0073デフォルトの名無しさん
NGNGでも、例えば
void SetCurRecord(const CRecord *curRecord);
みたいなやつがあったとして、これを参照で渡すようにしてしまうと、わざとNULLを与えてデータをクリアするという事が出来なくなってしまいます。
他にも
void GetProperty(short *prop1, short *prop2 = NULL, short *prop3 = NULL);
こういう風にして欲しいデータだけ取り出したいようなインターフェースが作れなくなってしまう気がします。
参照とポインタの使い分けテクを教えてください。
0074デフォルトの名無しさん
NGNGC++って不便だな。
0075デフォルトの名無しさん
NGNGなんで?
0076デフォルトの名無しさん
NGNGあと、うかつに delete されたりするのがいやなら、デストラクタを
protected/private にして、public な release メソッドでも作る。
0077デフォルトの名無しさん
NGNG見せてしまえばいいんでは?
0078デフォルトの名無しさん
NGNGポインタ不要論
http://www.tomozo.ne.jp/yamazaki/download/doc_without_pointer.htm
最近コレを読んだもので。
>>76
スマートポインタって扱いが独特じゃない?所有権とかいう仕組みがあったり。
そもそもヘンなところ指されるのが嫌な訳で…
0079デフォルトの名無しさん
NGNGリンク先読んだが、どうも筆者がコンテナやstd::stringを痛く気に入っている
という事は理解できたが、だからと言って「ポインタ不要」とばっさり言い切って
しまっている点がいただけない。
ポインタはC++でも必要な場面はいっぱいある。コンテナが使いやすい事は
認めるが、効率が最高かと言えばそうでもなかろう。
0080デフォルトの名無しさん
NGNG正: 甚く
・・・だと思っていたんだが、↓ 見ると両方書いてあるのな。
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=%BF%D3%A4%AF&sw=2
0081デフォルトの名無しさん
NGNGお疲れさまです。
オッチャンも全くそう思うんですが、使い分けの基準がハッキリしないのが気に入らないのです。
さっきの引数の話でもそうですが、「なるべく参照を使うようにして、無理なところはポインタ」っていうのでいいんでしょうか。曖昧だなあ…。それならもう最初から全部ポインタでも良いような…。
0082デフォルトの名無しさん
NGNGあなたが、そこに例の挙がっているようなミスを犯さなければ、ポインタを避ける
理由は何も無いのだが。
それにポインタが無いと、C++ のうまみである多態がコードで表現できない。
人の論を参考にするのはいいが、鵜呑みにはするなよ。
0083デフォルトの名無しさん
NGNG>あなたが、そこに例の挙がっているようなミスを犯さなければ、ポインタを避ける
まあそうですが、間違いが起こりにくくなるならそれに越したことは無いかなあと思うわけでして・・・。
>それにポインタが無いと、C++ のうまみである多態がコードで表現できない。
や、とりあえず関数の引数についてだけでいいです。
>人の論を参考にするのはいいが、鵜呑みにはするなよ。
肝に銘じます。こうもっともらしく書かれると信じてしまいがちですからなぁぁあ
0084デフォルトの名無しさん
NGNGあくまで漏れの意見ね。参考程度に。
> void SetCurRecord(const CRecord *curRecord);
これは、Recordset のようなオブジェクトを作って、カレントはインデックスで
管理した方がいいと思う。
> void GetProperty(short *prop1, short *prop2 = NULL, short *prop3 = NULL);
どんな時にこれが必要になるのかわからない。
Property prop1;
prop1.get();
とかのが好き。
0085デフォルトの名無しさん
NGNGどうもです。
>これは、Recordset のようなオブジェクトを作って、カレントはインデックスで
ああ・・ちょっと上手く伝わらなかったでしょうか
例えばプレビューウィンドウにSetImage(const CBitmap *image);とやるところをSetImage(NULL);ってやったら表示してた絵が消えるとか
他にも色々あると思うんですよ、NULLを渡したい時が
>どんな時にこれが必要になるのかわからない。
何が言いたかったのかといいますと、デフォルト引数にNULLが使えると色々便利だと思ったのです。
他にもWin32APIでもデータへのポインタorNULLを引数に取るやつが色々あります。
その場合、引数には参照しか使わないというルールをゴリ押しすると、何か空(デフォルト)のオブジェクトを作って引数に渡すという無駄な事が発生するので嫌だなあ、と。
0086デフォルトの名無しさん
NGNG途中まで読んだけど何やねんコレ…
char * abc_str = "aBC" ;
abc_str[0] = 'A' ; /* 'a'->'A'に上書き */
0087デフォルトの名無しさん
NGNG>バグその1「ポインタの構文や概念は理解しにくい」
こういう間違いが起こり得ると言う事が言いたいのでは
0088デフォルトの名無しさん
NGNG実際そうだし。でも78のはちとズレてるな。
0089デフォルトの名無しさん
NGNGこんな事書いたら例えポインタを本当に理解してても
筆者がポインタを理解してないだけってオチで落ち着くと思うけど
0090デフォルトの名無しさん
NGNGchar abc_str[] = "aBC";
だよなぁ。
0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG> 洗練されたC++プログラムからはポインタが消え失せるというのは判る。
OO で設計する限り、ポインタ自体は消えないだろう。ただ寿命管理に関して、
手作業で delete する機会は、ほぼなくなるが。
>>91
NULL がありえるならポインタ。なければ参照。
その場で値を作って渡したいなら const 参照。
0093デフォルトの名無しさん
NGNGなるほど。保存しますた。
このページ面白いっすよ。ほかにもデータ指向
http://member.nifty.ne.jp/yamazaki/doc_data01.html
http://member.nifty.ne.jp/yamazaki/doc_data02.html
とかある。
0094デフォルトの名無しさん
NGNGそういうコンストラクタがある場合だよな
0095デフォルトの名無しさん
NGNG> OO で設計する限り、ポインタ自体は消えないだろう。ただ寿命管理に関して、
C++で設計する限りの間違い。
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG別に間違いじゃないだろ?
97ゲットオォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0098デフォルトの名無しさん
NGNGYes
そもそも「その場で値を作って渡す」という使い方をするのは、string や complex
のような値指向のクラスがほとんど。仮想関数無し、代入・コピーありってヤツね。
0099デフォルトの名無しさん
NGNGヒープに作ったオブジェクトをdeleteしてくれるだけで十分なのに。
どういう使い方するんだこれ
0100デフォルトの名無しさん
NGNGユーザーコードからはポインタ減ったな。
内部的には増えたわけですが。
0101デフォルトの名無しさん
NGNGどのスマートポインタについて言ってるんだ?
0102デフォルトの名無しさん
NGNGSTLのauto_ptrとか
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGドーユー事?もっとアホにも分かるように言ってくれ
0105デフォルトの名無しさん
NGNG所有権移転の使い道が分からんわけか。これは、例外安全絡みで必要になる。
例えば、この辺参照。
http://www.gotw.ca/publications/xc++-auto_ptr.htm
0106デフォルトの名無しさん
NGNGvoid aho(const std::string& aho);
aho(std::string("aho"));
0107デフォルトの名無しさん
NGNGヒープに作ったオブジェクトを「誰が」deleteしてくれるのか
を決めるのに、所有権の概念が必要。例えば
typedef char* char_ptr;
char_ptr hogehoge() { return new char[100]; }
char_ptr q = hogehoge();
のchar_ptrをスマートポインタ化することを考えると、hogehogeの返値の
テンポラリオブジェクトが破棄される瞬間(2行目の文が終わる瞬間)に
deleteされちまったら困る…(この文の後でqを使えないのでは無意味)。
だから例えばstd::auto_ptrの場合、テンポラリからqにポインタがコピーされたら、
その時点でqに「所有権」を移して、q以外のオブジェクトは勝手にdeleteしないようにする。
なので、俺はスマートポインタのコピーなんかしねぇぞ! という人には
auto_ptr は確かに不要だと思う。そんな貴方には boost::scoped_ptr をオススメする。
だけど普通、「いろいろ複雑にポインタを渡しまくるけど、確実にどこかで
deleteはせねばならん」 という厄介な問題を自動的に解決するために
スマートポインタを使うもんだと思うので、所有権付きのは無いと結構
困ると思うがどうか。
0108107
NGNG> char_ptr hogehoge() { return new char[100]; }
こんなもんauto_ptrでは解放できんので、
> char_ptr hogehoge() { return new char('a'); }
とかで一つよろしく。
0109デフォルトの名無しさん
NGNG#include<iostream.h>
class test1
{public: int t1;};
class test2
{private: test1 *ts1l;
public:
void ts2(test1&);
void setlink(test1&); //関連をつなげる関数
void test();};
void test2 :: ts2(test1 &tst1)
{ cout<<"ts2 :"<<tst1.t1<<endl;}
void test2 :: setlink(test1 &tst1)
{ *ts1l=tst1;}
void test2 :: test()
{ cout<<"test:"<<ts1l->t1<<endl;}
void main(void)
{
test1 *tt1; test2 *tt2;
tt1 = new test1; tt2 = new test2;
tt2->setlink(*tt1);
tt1->t1=11;
tt2->ts2(*tt1);
tt2->test();
delete tt1,tt2;
}
を実行すると、test2::test()の方の挙動がおかしくなります。tt1->t1が変化しても動的に変化してくれません。
何故でしょうか?
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG> 「いろいろ複雑にポインタを渡しまくるけど、確実にどこかで
> deleteはせねばならん」 という厄介な問題を自動的に解決するために
> スマートポインタを使うもんだと思うので
その場合は auto_ptr も使い物になりませんがな。shared_ptr か、もしくは
侵入型ポインタを使う必要がある。
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG0114C++厨@void
NGNGひょ準入力からの一文字取得なら
int i = cin.get();
とか(最後はEOFが返るはず)
>>113
ostringstream ostr;
ostr<<"manko: "<<999<<endl;
string s = ostr.str(); //(*´∀`)
0115デフォルトの名無しさん
NGNGありがとうございます!
もうひとつ質問があるのですが、conio.h の getch()
みたいなキーを押したらすぐ返るようなものはないでしょうか。
0116デフォルトの名無しさん
NGNGなぜかファイルを上書きしてくれません。どの辺りがおかしいのでしょうか。
コンパイラはborlandです。
using namespace std;
int main()
{
fstream file("foo.txt",ios::in | ios::out);
string tmp;
vector<string> buf;
while(getline(file,tmp)){
buf.push_back(tmp);
}
file.seekg(0);
for(unsigned int i = 0; i != buf.size(); i++){
中略
file << buf[i] << endl;
}
file.close();
return 0;
}
0117デフォルトの名無しさん
NGNGfile.seekp(0);
0118デフォルトの名無しさん
NGNG移植中のあるソースで使いまくってて、、
struct hoge {
int Length;
char Data[0];
int exSize;
char ExData[0];
}
みたいなんです。
ここの Data や ExData に、Length もしくは exSize長のデータを
割り当てたい場合はどうすればいいんでしょうか?
0123118
NGNG012469
NGNG>オブジェクトのポインタで充分ではない理由があったら聞かせてくれ。
ポインタを使いたくないから、ハンドルを使いたいんです。
ライブラリ利用者に、ライブラリ内部のメモリに直接アクセスされたり、
ポインタを保持されたりしたくないんですよ。
というか、現在は参照のみでポインタは一切使ってません。
できるだけポインタ使わないのが当然かと思ってたのですが
ここの板を見ると業界的にはそうでも無いようですね。
いや、べつに煽りでもなんでもないですよ。
0125デフォルトの名無しさん
NGNG何の用があって内部のメモリを指すようなハンドルが必要なんだ?
全部クラス内に隠蔽して処理すればいい。
0126デフォルトの名無しさん
NGNG普通はポインタにするんではなかろうか?
structの中の配列はどうやったって固定長だ
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNGnew したオブジェクトはほぼ全ての場所でスマートポインタを使うことが望ましい。
コードが例外を throw した時、プログラムは delete をすっ飛ばして呼び出し元に飛んでく可能性があるので、その場合も正しくオブジェクトを破棄するために使用する。
実際最も一般的なのは、単一のオブジェクトを複数の場所で参照している場合、どのタイミングで削除するべきかをカプセル化したい場合など。
またC/C++では、単体オブジェクトと配列でdeleteとdelete[]を使い分けなければいけないが、一度ポインタに格納してしまうと区別がつかなくなる。
スマートポインタでこの問題を解消できる。
他にもNULLポインタにアクセスしようとした時にアクセス違反ではなく独自の例外を throw したり、新しくオブジェクトを作成することで何事もなかったかのようにプログラムを続けたり。
delete できないようにしたり、あるいは delete されてもまた必要になったら自動的に new しなおしたり。
ログを取ったり。
など、いくらでも考えられると。
0129118
NGNGvoid *aaa;
struct hoge *hogehoge;
aaa = malloc( 100 );
hogehoge = aaa;
memcpy( hogehoge->Data, moe, 80 );
みたいに使ってますわ。
memcpy( ((struct hoge*)hogehoge)+1, moe, 80 );
と同じ意味になるようですな
0130デフォルトの名無しさん
NGNGclassの中にpublicで、
LPBYTE bDat
LPBITMAPINFO bInfo というのがあって、
それらをGlobalAlloc()で領域を確保してます。
これで画像を表示したいんですが、表示されません。
classのメンバをGlobalAlloc()で確保してはいけないんでしょうか。
コードはプロシージャ内に記述していたときは動作しました。
クラスメンバ関数ではない関数で、上記二つの変数を渡した時は動きませんでした。
・・・何がいけないのか検討がつきません。お願いします・・・
0131デフォルトの名無しさん
NGNG> classのメンバをGlobalAlloc()で確保してはいけないんでしょうか。
そんなことはない。
0132デフォルトの名無しさん
NGNGなるほど。う〜ん、、、、便利なような気がする
0133デフォルトの名無しさん
NGNG> ・・・何がいけないのか検討がつきません。お願いします・・・
質問する場所さえ判断を間違えている事。
0134デフォルトの名無しさん
NGNG(・∀・)ニヤニヤ
0135デフォルトの名無しさん
NGNGC ではよく使うテクニックだけど、C++ でこれをやるのはアホ。
あと、118の構造体の定義は破綻してると思うが。
0136デフォルトの名無しさん
NGNG要素数 0 配列って、どう考えても末尾に 1 つだけだよな…
0137135
NGNGすまん、アホとまでは言い切れないな。可変長のパケットデータなんかを扱う
ときはああいう構造体はたしかに便利だ。
ただヘッダー部とデータが連続している必要がないところでは、ヘッダー部に
データへのポインタを持たせて、コンストラクタで new してやるのが普通だろう。
0138デフォルトの名無しさん
NGNG?
0139デフォルトの名無しさん
NGNG引き数の型にはconst char*型を指定するのが良いのかと思いますが、
このプログラムの中ではstd::stringばっかり使われており、
受け取った側でもstd::stringにして使いたいと思っています。
それなら最初からconst std::string&とかを受け取るようにしても良いのでしょうか。
オシエテよ!
0140デフォルトの名無しさん
NGNGまぁどちらにせよstd::stringを使うのがC++としては普通だわな。
戻り値のstd::stringはオーバーヘッドが大きいから気を付けな。
0141140
NGNG受け取った側ってのはそのメソッドのことか、
じゃぁ何も考えずにstd::string const&でいいんでない?
呼び出し元もstd::stringを使ってるならオーバーヘッドはないし。
0142デフォルトの名無しさん
NGNGどうもです。やっぱりそれでイイんですか。
MFCとかだとconst CString&じゃなくてLPCTSTRを受け取るやつばっかりですよね。
だから何か意味があるのかと思ってたんですが。あれって何でですかね。
0143デフォルトの名無しさん
NGNGMFC だと、たいてい const CString& 取る関数も定義されてるけど。
たとえば…
CSize GetTextExtent(const CString& str) const;
int DrawText(const CString& str, LPRECT lpRect, UINT nFormat);
0144デフォルトの名無しさん
NGNGどうだっけな・・・
MFC の CString は内部で参照カウンタを使うことでインスタンス生成時のオーバーヘッドを軽減していたと思うから、CString const& で受け取ってもあんまり代わらないんじゃなかったかと思うけど。
まぁ忘れた。もしかしたら↓と同じ理由かも。
std::string の場合、
char const* -> std::string の変換はかなり重い。
逆は大抵最適化で消滅するほど軽い。
だから引数を std::string const& で受け取ると。
Method( "text" );
のように呼び出すたびにかなりのタイムロスを引き起こす。
char const* で受け取っていれば。
Method( some_string.c_str() );
としてもほとんどロスはない。
0145デフォルトの名無しさん
NGNGそうだったんですか
じゃあMFC使ってコード書くときにconst std::string&を受け取るメソッドばっかり作っても笑われないすかね
CStringと両方作るべきですか どうなんでしょう
0146デフォルトの名無しさん
NGNGレスどうもです。
>char const* で受け取っていれば。
>Method( some_string.c_str() );
>としてもほとんどロスはない。
ええ、僕もそう思ったんです。けど、Method()の中でまたstd::stringにして使うんです。
それなら全部const std::string&で統一して、const char*を全廃しようかと思う訳です。
#でもMFC使ってアプリ組むならconst CString&で統一ってのもアリかと思うんですが、これはマズイですか。
0147デフォルトの名無しさん
NGNGMFC使うならCStringで統一した方が効率的。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNG例えばファイル名を受け取って画像を読むような関数ならstd::string使いたいですよ。
何か別のMFC使わないアプリ(もしかしたらMac用とか)作るときに再利用するかもしれないですし。
そういう時のためにMFCのCStringとかCListとかCMapとかそういったモノで汚染されたコードは
作りたくないです!!
0150デフォルトの名無しさん
NGNGそれを言うならCStringとstd::stringが混在してるコードの方がよっぽど作りたくないが・・・。
0151デフォルトの名無しさん
NGNG自分でCString型つくっときゃ済む話しだろ。
ペアで使うようにすりゃいいじゃん。
0152デフォルトの名無しさん
NGNGホンダラどないせぇっちゅうんじゃゴラアアアア!
ライブラリとして切り離せそうなクラスはstd::stringで統一/MFCに近い部分はCStringにするとかエエと思うんですが。
>>151
それはCStringに相当するものを自分で作れと言うことですか
ちょっとよくわからないんdすが
0153デフォルトの名無しさん
NGNGそうだよ、作れよ、そのぐらい。
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG逆切れは勘弁してくれ。
MFC使ってアプリ組むならっつーからCString使えっつってるだけじゃんよ。
そのライブラリが一番近い環境に合わせればいいじゃん。
画像を読み込む時にWin32APIを使うならLPCTSTRを使えば良いし、
CBitmapを使うんならCStringを使えば良いし、
STLを使うんならstd::stringを使えば良いし、
全部自前でやるんならchar const*を使えば良いだけの話だろ。
0156デフォルトの名無しさん
NGNG> そんな事言ったってなるべく標準のものが使いたいじゃないですか気分的に。
そもそも MFC 使ってる時点で「標準」に拘る意味はない。本気でマルチプラットホーム
対応にするなら Mozilla のように MFC 捨て捨てで、もっと下のレイヤーから作り込ま
ないと。
0157デフォルトの名無しさん
NGNG下の階層から作ると依存性が高くなると思うが。
0158デフォルトの名無しさん
NGNGそれは一番よくないと思います!STLの本の冒頭に「貴方は既に他人が作ったコードを自分で作り直して云々、車輪の再発明云々」
ってかいてありましたよ
>>154
イヤッハハ、まあそうおっしゃらずに・・・
でも画像読み込み関数なんて絶対MFCと分離したいと思いませんか
>>155
>MFC使ってアプリ組むならっつーからCString使えっつってるだけじゃんよ。
たしかにそんな気もします。MFC使ってるんだからMFCの流儀にあわせてコーディングする。
これはコレで正しいと思います。MFCがCString用意してるのに無理してstd::stringを
使うというのもヘンかもしれないですね
>>156
それはどうなんでしょうか。。。確かに幸せな世界が来るかも知れません。。
でも凄いマイワールド展開しまくりな上に、凄い手間がかかりそうです。そこまではできないので、
出来る範囲で汎用的なコードを書きたいのです
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGchar *を渡すのを躊躇ってしまう。同様にしてstd::stringも。
で結局、TCHARかCString・・・
0161デフォルトの名無しさん
NGNG#ifdef _UNICODE で std::string, std::wstring 切り替えれば? 俺は WTL::CString
使うけど。
0162デフォルトの名無しさん
NGNGそしてVC++付属のSTLのバグに悩まされたり、STLPortのコンパイルオプションの違いに翻弄されたりするんだ。
それでも何も考えずに++itrで次の文字に移れるのはめちゃくちゃ幸せだ・・・
0163デフォルトの名無しさん
NGNGpublic:
CFileData(char *filePath);
virtual ~CFileData();
protected:
BYTE *m_pBuff;
:
:
こういうクラスを作っています。コンストラクタでデータファイルを開き、
m_pBuffに格納する仕組みです。
そこで質問なのですが、コンストラクタでデータの読み込みに失敗した場合、
失敗したかどうかはどうやって判定すればいいのでしょうか?
後で、bool IsSuccess()みたいな関数を呼んでやら無いといけないでしょうか?
それとも、コンストラクタでデータを読むという仕様自体が間違っているでしょうか?
アドバイスください。
0164デフォルトの名無しさん
NGNGお前は贅沢だ、贅沢は許さん
0165デフォルトの名無しさん
NGNG例外を飛ばしたり operator bool を定義する
0166デフォルトの名無しさん
NGNG素直に
class CFileData{
public:
CFileData();
virtual ~CFileData();
bool Read(char *filePath);
とでもしておけば?
0168デフォルトの名無しさん
NGNGなにかスマートでいい方法ないですかね
stringにいれてsubstr()でとっていくとか
istreamのget()かgetline()でdelimiterを’,’にして
よんでいくとか方法はいろいろあるんですけど
なかなかうまい方法みつからなくて
0169デフォルトの名無しさん
NGNGやはりWinsockを使用するのでしょうか?
0170デフォルトの名無しさん
NGNGWindows 系のスレに逝って。
0172デフォルトの名無しさん
NGNG{ enum { E = 1 }; }
struct X
{ enum { E = 2 }; };
int f(){ return X::E; }
「あいまいです」とか言われそうなもんなんですが、
エラーも警告もなんにもでないんです。
同じ名前の名前空間とクラスが :: で指定されたとき、
どのように振舞うような仕様なのでしょうか?
ちなみに、gcc3.2 では、 f()==2 になります。
0173デフォルトの名無しさん
NGNGBCC 5.5.1 では
エラー E2238 TestCon.cpp 6: 'X' の宣言が複数見つかった
0175デフォルトの名無しさん
NGNGキーワード struct が省略可能ってことは、やっぱり普通のグローバルになる
のかな。
だとすれば gcc は間違ってると思うけど・・・規格博士降臨キボンヌ。
0176デフォルトの名無しさん
NGNGa namespace name or a class template name must be unique int its declarative region.
3.3.7
A class name or enumeration name can be hidden by the name of an object, function, or enumerator declared in the scape.
7.3.2 -4
A namespace-name 〜 not 〜 same declaretive region.
つまり、クラス名と列挙名はオブジェクトや関数に隠されるけど、ネームスペース名と
テンプレートクラス名は、宣言空間でユニークじゃなくちゃいけないってか。
gccの負け?
0177176
NGNGclass A{}A,B; //OK.
class C{};
C C; //OK.
C D; //Error.
0178デフォルトの名無しさん
NGNGmainが終了すると勝手に解放されますか?
0179デフォルトの名無しさん
NGNG勝手には解放されません。deleteすれ。
new[]で確保したものはdelete[]で。
それがいやなら、スマートポインタでも使ってくれ。
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGまともなOSだったら解放される。しかし、delete しないということは
デストラクタも呼ばないわけ? それだとまずいことが多々おきそう。
>>180
これくらいなら環境依存というほどでもないっしょ。
0182デフォルトの名無しさん
NGNG呼ばれた後は、何が起こるか未定義だな。
0183デフォルトの名無しさん
NGNGC++でJavaみたいにWebアプリケーションの開発って出来ます?
仮にできるとしたら、Javaに勝っていますか?
本当にどうしようもない質問でごめん。。。
0184デフォルトの名無しさん
NGNGしょうもないので却下。
0185デフォルトの名無しさん
NGNG「Javaみたいに」とはどんな特徴のことだ?
C++でできるか否かはそれに因る
0186デフォルトの名無しさん
NGNGCGIをWebアプリと呼べるのならできる。
もしくは、JavaをC++で作ってやるとか
JavaのコードをC++で生成するとか(以下略)。
>勝っていますか?
しょうもないので却下。
0187デフォルトの名無しさん
NGNGttp://www.s34.co.jp/cpptechdoc/article/xml/csv2xml/index.html
0188デフォルトの名無しさん
NGNGclass CData;
class CDocument {
CData *m_data;
・・・
こういう風にしてCDocumentのコンストラクタでm_data = new CData;やってます。
でもこれだとdelete忘れたり色々鬱陶しいので、できることなら
#include "CData.h"
class CDocument {
CData m_data;
・・・
こんな風にしたいと思っています。何かいい手はないでしょうか。
0189デフォルトの名無しさん
NGNGそんなあなたにauto_ptr
0190デフォルトの名無しさん
NGNGポインタになってるのがそもそも嫌なんです。deleteできちゃうっていう状況が嫌です。
でも依存関係は減らしたいのです。
例えば標準のstringが気に入らなくて、自分で作ったCMyStringがあるとします。
もうこれはアプリの中にあっちこっちで使われてる上に、今後UNICODEをエンコードしたり、
色々な機能を追加させる予定だとします。
こういう場合どうしたらいいですか。
0191デフォルトの名無しさん
NGNGそんなあなたにconst auto_ptr
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNGなにを聞きたいかがまったく分からん。
CMyString(char *str) {
this->str = charToUnicode(str);
}
って書いてchar型で渡されたらUnicodeに変換して、内部でUnicodeで管理すればいーじゃん。
外部からはどっちで渡されてもOKにしといて。
0194デフォルトの名無しさん
NGNGCharsetの変換とかもできるようになってるんだけどな、C++は。
0196デフォルトの名無しさん
NGNG>>189 >>191
boost::scoped_ptr でも良いぞ。
0197デフォルトの名無しさん
NGNGしかしコンストラクタでnewしたくないめんどくさがり屋にはお勧めできない。
さらに依存関係をほとんど無くすのにJavaが有名だ、
しかしこちらは全てのオブジェクトをnewする必要があるのでますますお勧めできない。
依存関係とめんどくささはトレードオフの関係にあるようだ。
0198デフォルトの名無しさん
NGNGていうか、そういうのって一般的なんですか。あんまりそういうのやってるって聞いたこと無いんですが。
メンバのオブジェクトというオブジェクトを全部scoped_ptrとかで持ったりしたら、
人に見せたときに「うわーなんだこのプログラム!バカがいるYO!」とか言われないですか。
0199デフォルトの名無しさん
NGNG>依存関係を減らすのにpImplイディオムが有名だ、
それは名前から察するにEffective-C++でも紹介されていた、実装クラスとインターフェースクラスを
分離するっていうテクですか。
>しかしコンストラクタでnewしたくないめんどくさがり屋にはお勧めできない。
それもそうですけど、これでもインターフェースクラスに変更があったら再コンパイルですよね。。。
それならauto_ptr使うほうがまだ良い気がします。ファイルの増殖を防げますし。
>さらに依存関係をほとんど無くすのにJavaが有名だ、
ああ、なんかありますよね、、、ゲーム作りたいのでJAVAだと速度が心配です。
>依存関係とめんどくささはトレードオフの関係にあるようだ。
了解しますた。
0200デフォルトの名無しさん
NGNGscoped_ptrのソースを持ってきて、そのコンストラクタを書き換えて自動的にnewするようにすれば君のやりたい事が実現できる。
毎回newを書かなくても、その独自のscoped_ptrを使えば自動的にインスタンスが作られる。
それを馬鹿だと言うやつには経緯を説明して、それでも理解できなければそいつがバカだと笑ってやるがいいよ。
0201デフォルトの名無しさん
NGNGふつーはメンバのオブジェクトを個々に scoped_ptr で持たずに pimpl イディオム
使うけどな。Effective C++ じゃなくて Exceptional C++ ね。
> それもそうですけど、これでもインターフェースクラスに変更があったら再コンパイルですよね。。。
それは仕方ない。
ただ、影響を最小限に留める方法としては、
1. 純粋仮想関数だけからなるインターフェースクラスを分離
2. 実装側は、そのインターフェースを継承して vtbl を埋める
3. クライアントはインターフェースだけを見る
って手がある。
インターフェースを拡張する場合、既存のインターフェースには手を加えず、別のイン
ターフェースを定義して、それを実装側に継承させる。(インターフェースの多重継承
というヤツやね。COM でも良く使われてる)
0202デフォルトの名無しさん
NGNGうわっ、本当だ、画期的だ。それってスゴくないですか!!??
心配なんですが、scoped_ptrみたいなクラスのテンプレート引き数って、includeしてないやつでもOKですよね!?
うーむ。これは新しい。。。演算子オーバーロードしてポインタに見えなくするとか、色々出来そうですね
0203デフォルトの名無しさん
NGNG>インターフェースを拡張する場合、既存のインターフェースには手を加えず、別のイン
>ターフェースを定義して、それを実装側に継承させる。
ははぁ、、、なるほど、、、色んなワザがあるんですねえ。こんな感じでいいんですか。
class CImpClass : public CInterfaceVer1, public CInterfaceVer2 ...
{
};
うーむ
0204デフォルトの名無しさん
NGNGやってみましたけど、テンプレートクラスの中で目当てのオブジェクトをnewできないじゃないですか!
作りたいクラスの名前しか分からないからnew出来ない、そりゃそうか、、、
0205デフォルトの名無しさん
NGNGtemplate< typename T > class ptr_container
{
public:
ptr_container(void) : m_ptr( new T() ){}
~ptr_container(void){ delete m_ptr; }
private:
T* m_ptr;
};
ってできないっけ?
0206デフォルトの名無しさん
NGNGこういうのは無理みたいです
#include "ptr_container.h"
class CData;
class CDocument {
ptr_container<CData> m_data;
};
コンパイルエラーになります。CData.hをインクルードしたらいけますけど、
それだと最初の目的が達成できないです。
0207デフォルトの名無しさん
NGNG俺はできたよ。
普通にポインタ使うときと同じように、しかし初期化する必要なく。
CDocumentの実装ファイルには当然CData.hをインクルードするよ。
0208デフォルトの名無しさん
NGNG無理。new する時点で、そのクラスの定義が見えないと NG なんで。
別のクラスにインスタンス構築を押しつけるって手はある。
template <calss T, class TFactory>
class ptr_container
{
public:
ptr_container() : m_ptr(TFactory::Create());
~ptr_container() : { delete m_ptr; }
private:
T* m_ptr;
};
struct FooFactory
{
static Foo* Create();
};
0209デフォルトの名無しさん
NGNG> CDocumentの実装ファイルには当然CData.hをインクルードするよ。
……スレの流れを読め。
0210デフォルトの名無しさん
NGNG俺はスレの流れを正しく把握してるって
188を読むからに206はCDocumentの実装ファイルにCData.hをインクルードする事はかまわないと言っている。
0211デフォルトの名無しさん
NGNGと書かれて一つのメンバ変数が指されるんですけど
どういうこと?
0212デフォルトの名無しさん
NGNGスマン
0213デフォルトの名無しさん
NGNGごめんなさい、いけました。includeする順番間違ってました。
これマジ凄いですよ、みんな使いましょうよ。
今時これくらいならオーバヘッドだってあんまり気にならないでしょう。
ところでちょっと謎な現象なんですが、
CDocument.cppの中でCData.hを正しい順番でインクルードしないとエラーになるというのは分かります。
で、ためしにCHoge.cppってのを作って、その中ならCDocument.h単体でインクルードしてもエラーにならないのは
どういう事なんでしょうか。なんか勘違いしてますか僕
>>210
はい、CDocument.cppの中でCData.hをインクルードするのはOKです。
でないとCDataを触れないですからね。
0214あ
NGNGc++でXMLを扱おうとしてxerces-cを使っているのですが、
サンプルをコンパイル時に
fatal error C1083: インクルード ファイルがオープンできません。'xercesc/util/PlatformUtils.hpp': No such file or directory
とエラーが発生しました。
設定的な問題だと思うのですがどう対処すればいいのでしょうか?
0215213
NGNGえ〜と混乱してしまいましたけど、
CDocument.cppでCDocument.hをインクルードする時にCData.hもインクルードする必要があるのは、
CDocument.cpp内にCDocumentのコンストラクタの実装があるから。
CHoge.cppでCDocument.hを単体でインクルードしても、CDataを触ったりしない限りCData.hをインクルードしなくてもコンパイルとおる。
という理解で良いでしょうか。
ていうかこれって凄いアイディアじゃないですか。STLに入れて貰えそうじゃないですか
0216デフォルトの名無しさん
NGNGおけ。
でもデフォルトコンストラクタが無いと動かないので208のように使うのが一般的かと。
しかしコンストラクタを省略するのはものぐさなのでC++向きじゃない気も。
LokiのSmartPtrにはそういうポリシーを受け入れる用意があるけど、各自勝手に実装しろってスタンスだし。
0217デフォルトの名無しさん
NGNGptr_containerが「.」をm_ptr->に、「&」をm_ptrに置き換えてくれたりしたら最高なんだけど、そういうのは無理なのかね。
0218デフォルトの名無しさん
NGNG0219172
NGNGgcc がバグってるということで。
http://gcc.gnu.org/cgi-bin/gnatsweb.pl
view #6734
0220デフォルトの名無しさん
NGNG'<Unknown>' にありません。
とかいうエラーメッセージが出るのですけど、
どういうことなんでしょう?
0221デフォルトの名無しさん
NGNGcell computingとは、ブロードバンドに接続された家庭内
や企業内のPCの余剰CPUパワーを統合し、
仮想的なスーパーコンピュータとしての利用を実現する
技術を用いたSI、ネットワークサービスです。
バイオ、物理計算、設計、金融工学、CGレンダリング
などの分野のお客様へ、安価に仮想スーパー
コンピュータパワーを提供することを目的としております。
なお、将来的には収益にあわせてCPUパワーを提供し
てくださる参加者へポイントシステムやデジタルコンテンツ
による利益還元を考えております。
http://www2.cellcomputing.jp/
2ちゃんねるのチームあります。【挑戦しる】
http://members.cellcomputing.jp/services/teams/team.htm?id=ABBE425B-CE11-4DA4-8591-C68DF67DA41A
0222デフォルトの名無しさん
NGNGscoped_ptr 的に使うならptr_container自体に関するコンストラクタとかは
全部不要だろうから、
template< typename T > class ptr_container
{
public:
ptr_container() : m_ptr( new T() ){}
template<typename T1>
ptr_container(const T1& t1) : m_ptr( new T(t1) ){}
template<typename T1, typename T2>
ptr_container(const T1& t1, const T2& t2) : m_ptr( new T(t1,t2) ){}
template<typename T1, typename T2, typename T3>
ptr_container(const T1& t1, const T2& t2, const T3& t3) : m_ptr( new T(t1,t2,t3) ){}
...
と10個くらい並べとくとかいう手がある。constじゃない参照をとる
コンストラクタに対応しようとするといささか美しくない方法が必要だが。
0223デフォルトの名無しさん
NGNG継承しないただのコンポジションと違うところありますか?
派生クラスのメンバオブジェクトのコンストラクタの仕方とか。
0224デフォルトの名無しさん
NGNGよく状況がわからんからコードで示せ
0225233
NGNGclass class0{
public:
int val0;
}
// class0のコンストラクタ
class0::class0(int x){
val0 = x;
}
class class1:public class0{
// メンバオブジェクト
public:
class0 obj0_0,obj0_1;
int val1;
f1();
}
としたときclass1のコンストラクタは
class1::class1(int x1, int x0_0, int x0_1)
:obj0_0(x0_0), obj0_1(x_1){
val1 = x1;
}
とう具合で良いでしょうか?
0226デフォルトの名無しさん
NGNGへえー。それでもコンパイル通るんだね。
>コンストラクタに対応しようとするといささか美しくない方法が必要だが。
ドーやんの、オスィエテよ!
このやり方ってオーバーヘッドが若干ある&初期化が独特って事以外デメリット無いよね?
0227デフォルトの名無しさん
NGNGファイルにするときのリンクの仕方は何か特別のことする必要あるでしょうか?
0228227
NGNGたぶんそのリンクができてないからエラーが出てるのだと思いますが、
どうすれば良いでしょう?
0229デフォルトの名無しさん
NGNGclass1のコンストラクタで、継承元のclass0の初期化子が呼ばれてないから
それだとエラーになるんちゃうか。
0230デフォルトの名無しさん
NGNGしかし趣味でC++を勉強していて、とりあえず
「新C++言語入門<ビギナー編>林晴比古 著」
の内容は一通り理解しているつもり。
こんな俺は、C++を使ってのソフトウェア開発で通用しますか?
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNGせめて、ビギナー編じゃないほうの、上下巻のほうを読んだと言おうや。
0233230
NGNG陰で馬鹿にされている可能性が非常に高いとも言えますね。。。
0234デフォルトの名無しさん
NGNGそこからステップアップしてくつもりなら何も問題ないのでは。
0235デフォルトの名無しさん
NGNGC++Primer読んでたけどこれなかなかよかったよ。
下らない本を何冊も買うより、これ一冊で
基礎をちゃんとやるのがいいかも。
0236デフォルトの名無しさん
NGNGとりあえず、晴比古本はやめとけ。
0237デフォルトの名無しさん
NGNG内容はいいけど、でかすぎて重すぎて読みづらい(涙
0238230
NGNGスレ違いスマソ。
0239次回メルチェは23時
NGNGな粗品ファイルをあげるから、おしえてください。
回答と粗品の請求は↓へお願い。
l*ol*im*an*10@ho*tm*ai*l.*c*om
forループで重い処理をしていても、WndProc()が
機能するような方法をおしえてください。
次のソースで描画の処理はできましたが、例えば、
WM_MOVE はできていません。
LRESULT CALLBACK WndProc(の、
switch (msg) {
case WM_RBUTTONDOWN:
func(hWnd);で↓が起動
0240次回メルチェは23時
NGNGMSG msg;
char str[50];
for (int i = 0; i <= 100; i++) {
for (int j = 0; j <= 100; j++) {
wsprintf(str, "%3d,%3d", i, j);
SetWindowText(hWnd, str);
while (PeekMessage(&msg, hWnd, WM_MOVE, WM_MOVE, PM_REMOVE)) {
SendMessage(hWnd, WM_MOVE, msg.wParam, msg.lParam);//ここ失敗
}
if (PeekMessage(&msg, hWnd, WM_PAINT, WM_PAINT, PM_REMOVE)) {
SendMessage(hWnd, WM_PAINT, msg.wParam, msg.lParam);//これ成功
}
}
}
}
0241Q
NGNG空のWIN32アプリを作ってダイアログを表示させたは良いんですが
他のDOS(みたいなの)の画面上でチャットするソースとくっ付けたら
ダイアログが表示されなくなりました。ありそうな原因を教えてください。
お願いします
0242デフォルトの名無しさん
NGNG0243Q
NGNG何でダイアログが表示されなくなったのか分からない(泣
ネットも そんな馬鹿なQ&Aないし。。
0244デフォルトの名無しさん
NGNGプログラムが終了してもdeleteしないと残っているんでしょうか?
0245デフォルトの名無しさん
NGNGstaticで宣言してたら残る。
自動変数なら消滅。
基本です〜。
0246デフォルトの名無しさん
NGNGUNIXではプロセスごとに確保したスタック、ヒープは
プロセスが終了した時点ですべて開放されます。
Windowsは知りません。
0247245
NGNGmainが終わればstaticでも消滅ですた。。。
0248デフォルトの名無しさん
NGNG0249248
NGNG0250デフォルトの名無しさん
NGNGデストラクタのこと?
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG正確には main が終わった後、プログラムの実装終了前、だな。
0253デフォルトの名無しさん
NGNG>>178
0254デフォルトの名無しさん
NGNG2^0=1
2^1=2
2^2=4
2^3=8
2^4=16
...
となるように記述するにはどうすれば宜しいでしょうか?
『^』だと変な結果になるもので…
例:
int k;
for(i=0;i<5;i++){
k=2^i;
cout<<k<<",";
}
結果:
2,3,0,1,6,
0255デフォルトの名無しさん
NGNG超既出質問
cmathインクルードしてpow
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG>プログラムの実装終了前
すまん・・・もう少し詳しくきぼん
0258デフォルトの名無しさん
NGNG実装→実行の typo と思われ
1 プログラム実行開始
2 非 local static 変数のコンストラクト
3 main 実行開始
4 …
5 main 実行終了
6 非 local static 変数のデストラクト
7 プログラム実行終了
0259デフォルトの名無しさん
NGNGThanks�d
0260デフォルトの名無しさん
NGNGたいていの場合はmain終わった後にデストラクタが呼ばれるのかと思ってますた。
0261デフォルトの名無しさん
NGNG呼ばれる順番によっては悲惨なことに・・・
0262デフォルトの名無しさん
NGNGいや new で確保したオブジェクトに関しては、delete しないとデストラクタ呼ばれんよ。
0263デフォルトの名無しさん
NGNGスマソ
0264デフォルトの名無しさん
NGNG日本語文字コード変換などといったようなことをしてくれるostreamフィルタクラスを
作るにはbasic_streambufを継承させたクラスが必要なんでしょうか。
basic_streambufクラスは大きいので矛盾なく子クラスをつくるのは大変なんですが。
javaではかなり簡単に入出力フィルタクラスを作れるんですが。
0265プログラム中に新しい顔文字発見
NGNG0266デフォルトの名無しさん
NGNGttp://www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/manuals/stdlib/user_guide/loc_io/booktoc.htm
0267デフォルトの名無しさん
NGNG> 作るにはbasic_streambufを継承させたクラスが必要なんでしょうか。
Yes.
> basic_streambufクラスは大きいので矛盾なく子クラスをつくるのは大変なんですが。
そうか?streambufって、そう簡単に矛盾出来る設計になってたっけ。
> javaではかなり簡単に入出力フィルタクラスを作れるんですが。
http://village.infoweb.ne.jp/~fwhk9290/gimite/cppmess.htm
のsimple_streambufとかをお薦めする。
0268デフォルトの名無しさん
NGNGおお、このフィルタクラスは便利そう。参考になりますな。
0269デフォルトの名無しさん
NGNGstring from, to;
...
ifstream is( from.c_str() );
istream_iterator<string> ii( is );
istream_iterator<string> eos;
vector<string> b(ii, eos); ← ここでエラー
メッセージは
「この変換を実行可能な
ユーザー定義変換演算子がないか、
または演算子を呼び出せません」
なにが悪いのかさっぱり。
だれかー。
0270デフォルトの名無しさん
NGNGコンパイラ何?
BCC5.6ではオッケーよ。
0271269
NGNG恥ずかしながら
vc6 sp5
0272デフォルトの名無しさん
NGNGなにが悪いかといえばVC++のSTL関係の実装が標準に準拠しきれていない点。
ちなみにSTLportつかえば通った気がするが。
0273デフォルトの名無しさん
NGNGVC6はちょっとなあ。
VC.NETでやったら通ったよ。
0274デフォルトの名無しさん
NGNG0275269
NGNGthanx.
別のSTL使えばOKになるんだろうけども、
そのSTLの何が悪かったのかわからずじまい
になってしまう。
どうしよう...
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG仕事ならVS.net買ってもらえ。
0280デフォルトの名無しさん
NGNG0281269
NGNGvs.netかぁ。ママ買ってくれるかなぁ。
0282269
NGNGコンストラクタを選択できないとこまでは解った。
んで、copy()使って見たらなんとかうまくいった。
//vector<string> b(ii, eos);
vector<string> b(100);
copy( ii, eos, b.begin() );
サイズ100で初期化はまずいので、
このbへコピーされるサイズをあらかじめ
知るにはどうしたらいいんだろう。。。
0283デフォルトの名無しさん
NGNG0284269
NGNGint i = static_cast<int>(distance( ii, eos ));
vector<string> b( i );
copy( ii, eos, b.begin() );
でも、なんか期待通り動かない。。。
なんでだろう。。。
028511歳
NGNG何でしょうか?
0286デフォルトの名無しさん
NGNGスレ違い。
Windows とか Win32API とかすれ立てるまでもないとかその辺り。
028711歳
NGNG0288デフォルトの名無しさん
NGNGVC++スレ逝って
028911歳
NGNGどこがスレ違い?勘違いしたの?
0290デフォルトの名無しさん
NGNGone_image::one_image(unsigned char *R, unsigned char *G, unsigned char *B,
int size_x, int size_y, int b_x, int b_y)
{
HSize = size_x;
VSize = size_y;
}
としたら、
error C2144: 構文エラー : ')' が型 'unsigned char' の前に必要です。
error C2059: 構文エラー : ')'
構文エラー : ';' が '{' の前に必要です。
とかエラーが出て、おまけに
error C2065: 'size_x' : 定義されていない識別子です。
と、定義されてないことになっちゃいます。
どういうことか、さっぱり分かりません。
どうしたらいいでしょう?
0291290
NGNGoneimage::one_image();
のオーバーロードと関係があるんでしょうか?
0292デフォルトの名無しさん
NGNGクラス定義の最後のカンマを忘れてそうな気がする。
class one_image {
// ...
};←これね。
違ってたらスマソ
0293290
NGNGありがとうございます。解決しました。
そんな事にもきずかないなんて僕は本当に馬鹿でした。
くだらない質問であなたの大切な時間を無駄にして本当に済みませんでした。
僕のようなゴミの質問を真剣に考えてくださって心から感謝します。
0294デフォルトの名無しさん
NGNG0295デフォルトの名無しさん
NGNG大仁田さんは。ときにはその半分の500万円を持って行ってしまします。
大仁田さんはどこの興行に出ても。「客が入ったのは俺のおかげじゃ!」と言い。
毎回20〜30万のギャラを持ってゆくのです。
前項でポーゴさんのギャラが破格だったと書きましたが。それでも1試合8万円です。
私たち程度の団体ではまったく考えられない金額でした。★故荒井氏著「倒産FMW」より抜粋
□自殺についての詳細はこちら
http://www.yomiuri.co.jp/hochi/battle/may/o20020516_40.htm
http://www.nikkansports.com/jinji/2002/seikyo020517_2.html
http://www.zakzak.co.jp/top/t-2002_05/2t2002051704.html
荒井元FMWプロレス団体社長を自殺に追い込んだ
大仁田議員に清き一票おながいします!
http://kenji03.hp.infoseek.co.jp/cgi-bin/kage/votec.cgi
0296デフォルトの名無しさん
NGNG珍しくもなんともない。
0297デフォルトの名無しさん
NGNG板違い。
0298デフォルトの名無しさん
NGNGVC++でWindowsプログラミングをしている人はまずVC++スレに行きましょう。
おそらくあなたの質問はC++の問題ではなくVC++/Windows特有の問題です。
とか書いておきたいね。
0299デフォルトの名無しさん
NGNG↑
こn記号の意味は?
厨房でごめんちゃい。
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNGわからない。
大抵は、>>300 で合ってると思うが、C++ は演算子を定義できるから、他の意味に定義されているかもしれない。
0302デフォルトの名無しさん
NGNG:-P
0303C++厨
NGNG0304デフォルトの名無しさん
NGNG->ってオーバーロードできたっけ?
0305デフォルトの名無しさん
NGNG0306304
NGNGできるか。
0307デフォルトの名無しさん
NGNGポインタを勉強して理解をしたつもりでしたが、次に「クラス」
を勉強していてポインタと言うものを実は理解していないのでは?という
不安にかられています。
と言いますのも、ポインタでは変数の「アドレス」を変えたり出来たのですが、
これはイメージ的に掴む事が出来ました。変数の値を置いてある番地のことが「アドレス」
であり、ポインタとはそのアドレスを保有する事のできる「変数」と。
ところがクラスのポインタというものが出てきて面食らっています。
あるクラスの置かれている番地=そのクラスのアドレスというのがピントきません。
変数に比べてクラスは色んな情報を持っているため・・・。
変数、クラスもひっくるめて、全ての「オブジェクト」にアドレスがあるのでしょうか?
よろしかったら、「アドレス」というものを初心者にもわかるように説明をお願いしたいのですが。
よろしくお願いします。
0308デフォルトの名無しさん
NGNG配列のポインタが判るなら構造体のポインタもわかるだろう。
なら構造体のポインタが判ればクラスのポインタもわかるってもんだ。
0309デフォルトの名無しさん
NGNGC++ になったら、あまりアドレスには拘らずに、オブジェクトを指すものだと
思っておいた方が。
(特に多重継承や仮想継承が絡むと、内部でオフセット調整とか入るし、
仮想関数へのポインタとかになるとアドレスそのものではないし)
> 変数、クラスもひっくるめて、全ての「オブジェクト」にアドレスがあるのでしょうか?
「クラス」ではなく「インスタンス」あるいは「オブジェクト」な。クラスといったら構造体や
int と同様、型のこと。
アドレスがあるかって話だけど、原則として Yes。例外は register 指定した変数と
this ポインタ、あと仮想関数へのポインタかな。詳しく知りたければ、書籍
Inside the C++ Object Model を読むと良い。
0310デフォルトの名無しさん
NGNG列全体をコピーする関数にはどんなのがあるでしょうか?
char dist[32];
char *src;
strcpy(dist,src);//文字列のコピー。
ってのはありでしょうか 御教授お願いします
0311デフォルトの名無しさん
NGNG整数型の変数 m, n の値を受けて、動的に二次元配列を作りたいのですが、
int **h;
for(i=0;i<m;i++){
h[i] = new int[n]
}
とかすると、強制終了してしまいます。
どのようにすれば実現できるでしょうか?
0312デフォルトの名無しさん
NGNGCの質問なのでそっちへ逝け。
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNGm は変数なわけで。
0316デフォルトの名無しさん
NGNG試しましたが、mは定数ではないのでコンパイルエラーとなります。
h = new int*[m];
for(i=0;i<m;i++){
h[i] = new int[n];
}
これもダメでした…
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNGh=(int **)malloc(m*sizeof(int));
for(int i=0;i<m;i++){
h[i]=(int *)malloc(n*sizeof(int));
}
0323デフォルトの名無しさん
NGNGThanx�d
>h=(int **)malloc(m*sizeof(int));
がなんとなく気持ち悪いけど、いけました!
new使う方法は無理なんでしょうか?
0325デフォルトの名無しさん
NGNGまぁその通りなんですが、
変な挙動を示した事があるのであんまり初心者向きではないかと。
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGそのn文字目を指したいときどのようにすればいいのでしょうか…?
(wchar.hをインクルード)
wchar_t s[256];
gets(s);
として"abc亜意宇"をキーボードから入力して
'亜'の一文字を出力するために
putwchar(s[3]);
としてみたんですがうまくいかなくて・・・
0328デフォルトの名無しさん
NGNGusing namespace std;
ってコードを入れると、
それまで動いていた特定のコードが動かなくなるという現象です。
VisualC++6.0で起きていました。
0329デフォルトの名無しさん
NGNGfree(h[i]);
}
free(h);
0330デフォルトの名無しさん
NGNG>>h=(int **)malloc(m*sizeof(int));
>がなんとなく気持ち悪いけど、
どのへんが?
0331デフォルトの名無しさん
NGNGusing namespace しなきゃいいのでは?
0332デフォルトの名無しさん
NGNGsizeof(int)のところ。
>331
そのままでvector使えるのですか?
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNGstd::vectorってネームスペースを指定すれば使えるジャン。
0335デフォルトの名無しさん
NGNGあ、これコンパイルできたのですか…
>334
不勉強なもので…
参考文献スレのお世話になってきます…
0336デフォルトの名無しさん
NGNGそりゃお前の環境がたまたまsizeof(int) == sizeof(int*)だっただけだ。
もっとも違っててもコンパイルエラーにはならんで実行時に死ぬだけだが。
0337デフォルトの名無しさん
NGNGどうしてでしょうか?
int main(int argc, char* argv[])
{
std::string s;
std::getline(std::cin, s);
return 0;
}
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNGあー、VC++6だろ?
STLportにしたら直る税。
0340327
NGNG0341デフォルトの名無しさん
NGNGwcinでも使っとけ。ここはC++スレ
0343デフォルトの名無しさん
NGNGcin >> str >> "end" みたいな感じに簡単には書けないんですか?
0344デフォルトの名無しさん
NGNGofstream str(filename);
str<<"end";
とかで(・総て・)イイ!!んじゃねーの?
0345デフォルトの名無しさん
NGNGオイラはダミー一個作っといて
cin >> str >> dummy;
みたいにしてるけど・・・なんかもっといい案無いのかなぁとも思う。
0346C++厨
NGNG0347デフォルトの名無しさん
NGNG0348デフォルトの名無しさん
NGNGってのはどう?
引数付きのマニピュレーターってどうやって作るのかしらないけど。
0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNGそれってstringコピーする分、無駄が出ると思うんだが。
0351デフォルトの名無しさん
NGNGあとは istream& operator>>(istream&, T) とかで
0352デフォルトの名無しさん
NGNGfriend 関数に テンプレート関数は使えないのですか?
クラス自体はテンプレートではないです。
0353デフォルトの名無しさん
NGNG使えるよ。クラスでテンプレート宣言しておけば。
template <typename T>
friend ostream& operator << <>(ostream& str, T t);
みたいな感じで。gcc3.2.1では通るがBCC5.5.1ではだめだった。
0354デフォルトの名無しさん
NGNGList *m_next;
List *m_prev;
CString m_text;
public:
List() {};
List(const CString&text) : m_text(text) {};
void link(List *next)
{
m_next = next;
next->m_prev = this;
};
};
双方向リストの構造体なんですが、
List() {};
List(const CString&text) : m_text(text) {};
の部分が何をやってるか分かりません。
詳しく解説してもらえないでしょうか?
List() {};は、コンストラクタで、各メンバを0かNULLで初期化してると思うのですが。
List(const CString&text) : m_text(text) {};の「&」とか「:」が何を意味してるのかも
よく分かりません・・・。
0355デフォルトの名無しさん
NGNGいや、何も初期化してないんだと思うんだが
0356233
NGNG0357デフォルトの名無しさん
NGNGとあるstatic変数をもったクラスを、いくつかのオブジェクトが継承してるとしますね。
こういう場合・・・
1:このstatic変数は1個しかなくて、継承したオブジェクト達はこの1個しかないstatic変数を
参照する。
2:このstatic変数のコピー的なものが、継承したオブジェクト達にそれぞれ存在して、
どこかのオブジェクトのstatic変数が変更されると、ほかのオブジェクトの同じstatic変数
も変更される。
のどちらですか?
0358デフォルトの名無しさん
NGNGどちらでもないよ
0359名無しさん
NGNGC++ってここらへんでつまずく人が多いような気が・・・
List(const CString &text) : m_text(text) {} ;
'&'は参照,":"はListのメンバであることの明示。
この行では,Listのメンバm_textをtextに代入している。
0361デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNGコンストラクタと同じシンタックスにしてるところから
考えてやっぱり初期化と呼ぶのが正しいんじゃない?
0364デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG> >>362 は 359=360 ではありません。
それはたぶん皆わかってるが、代入と初期化って
全く別物だから、間違えない方がいいぞよ。
0367生兵法
NGNGCString m_text(text);
こんなふうに メンバ変数を
コンストラクタで初期化する場合には
>>354みたいな文法を使う。
代入っていうのは
CString m_text; //デフォルトコンストラクタで初期化
m_text = text; //operater=で代入。
っていう流れ。 いっぺん空のオブジェクト作ってからそこに
放り込むので、初期化が途方も無く重たい場合なんかはロスがでると。
漏れはこんな認識だけど、問題あったら教えてー。
0368354
NGNGえ?そうなんですか?
じゃあ一体これはどんな意味があるんでしょうか?
C++の構造体って、コンストラクタが使えたりしてよく分かりません。
Cしか経験が無いので。
>>359
なるほど、&は参照の&でしたか。
元にしたソースに空白無しでくっついて表記されてたので、気付きませんでした。
「:」はメンバにアクセスするときに使うんですか。
メンバにアクセスするには「.」か「->」だと思ってました。
C++の「:」は継承に使うものだとばかり思ってました。
0369デフォルトの名無しさん
NGNG> 「:」はメンバにアクセスするときに使うんですか。
それは
コンストラクタで
メンバ変数の初期化 or 明示的に親クラスのコンストラクタを呼び出す
ときだけ。
基本が抜けすぎてるから、とりあえず「プログラミング言語 C++」を買ってきて
読んだ方が良いと思うぞ。
0371デフォルトの名無しさん
NGNGCString str = "test";
で躓く罠。
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG新しく作った構造体をメンバ変数として定義しますよね。
struct kouzoutai aa;
というふうに。
それをメンバ関数での引き数として使うことはできるのでしょうか?
というのは、メンバ関数内にそのままaaとして書けばいいのですが、
メンバ変数にbbもあってそれもメンバ関数に使いたかったらaaと書いては
できないですよね。だから引数として渡すしかないと思いまして・・・
0374デフォルトの名無しさん
NGNG何を言ってるかサッパリ分からんので、サンプルコードを書いてみてくれ。
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNGまず、メンバ変数として
struct kouzoutai aa, bb;
と宣言します。
そしてあるメンバ関数の引数として
void function(int Val, kouzoutai cc)
というようにすることはよくあるのでしょうか
aaやbbをfunctionで使いたいのですが、aaやbbはメンバ変数だから
別に引数として使わなくても使うことはできますよね?でもあるときは
aa,あるときはbbを使いたいからfunctionに引数として使いたいわけで。
すいません、また意味不明っぽくて
0377デフォルトの名無しさん
NGNG普通はややこしいから、メンバとパラメータは違う名前にする。
どうしてもやりたければ、aaでパラメータ、this->aaでメンバにアクセスできる。
0378デフォルトの名無しさん
NGNG構造体だけにしてしまえばいい。
0379デフォルトの名無しさん
NGNG( ゚Д゚)
0380デフォルトの名無しさん
NGNGそういうのは放置しようや
0381デフォルトの名無しさん
NGNGどのヘッダをいんくるーどすればいいのかって
というのはどうやって知るんですか・・・
googleっていうのはなしで・・・・
教えてたも〜
0382デフォルトの名無しさん
NGNG(゚д゚)
0383デフォルトの名無しさん
NGNG雰囲気で分かる。
0384デフォルトの名無しさん
NGNG確かに意外と正しいよな(w
0385デフォルトの名無しさん
NGNG( ゚Д゚)
0386デフォルトの名無しさん
NGNGmanを見れば書いてありますが。
http://www.linux.or.jp/JM/
とか。
0387デフォルトの名無しさん
NGNGmanって・・・・
gccとかじゃなくて、
bcc使ってるまろは
どうしたらいいんでおじゃるか・・・
0388デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNGまともなヘルプなら大抵書いてあると思うが。
ヘルプがなければ適当にインクルードしとけばいい。
どれかに当たりがあるだろう。
それが嫌ならインクルードファイルが置いてあるところにいって
検索すればいい。
慣れれば雰囲気で分かるんだけど。
0390デフォルトの名無しさん
NGNG構造体のメンバは?
0391デフォルトの名無しさん
NGNGきっと整数型とかも構造体として扱うんだよ。
値は関数を使って取得して、
その内部構造は言語的に隠蔽されてるんだよ。きっと。
0392デフォルトの名無しさん
NGNGそれは大変だな。
0393デフォルトの名無しさん
NGNG#include<iostream>
struct CStrin
{
CStrin(char a){//explicitは使いたくない}
};
void test( CStrin s )
{
std::cout << "test(CS)";
}
void test(float a)
{
std::cout << "test(float)";
}
template <typename T> struct A
{
void operator() (T a){}
};
int main()
{
test('a');//test(float)
A<const char>()('a');//関数オブジェクトを使うしか...
}
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGswitch文の中で、宣言して代入ってできないんでしょうか?
// エラー
UINT j = DT_TABSTOP | 0x00002F00;
DrawText(hdc, str, -1, &rect, j);
d:\temp\winapitest001\winapitest001.cpp(92) : error C2360: 'j' の初期化が 'case' ラベルによって行われませんでした。
d:\temp\winapitest001\winapitest001.cpp(85) : 'j' の宣言を確認してください。
//これだとOK
UINT j;
j = DT_TABSTOP | 0x00002F00;
DrawText(hdc, str, -1, &rect, j);
どうして前者だとエラーになるのでしょう?
文法的には問題なさそうなんですが。
0397デフォルトの名無しさん
NGNGコンパイラ エラー C2360
'identifier' の初期化が 'case' ラベルによってスキップされました。
指定された識別子の初期化は switch ステートメント内では行われない場合があります。
初期化を伴う宣言は、閉じたブロック内で行われない限り、スキップすることはできません。
初期化された変数のスコープは、switch ステートメント内の閉じたブロックの中で宣言されていない限り、switch ステートメントの最後まで続きます。
次にこのエラーの例を示します。
void func( void )
{
int x;
switch ( x )
{
case 0 :
int i = 1; // エラー, case 1 によってスキップされます
{ int j = 1; } // OK, 閉じたブロック内で初期化されています
case 1 :
int k = 1; // OK, 初期化はスキップされません
}
}
0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNGどうもです。なるほど、仕様なんですね。
>>3988
もちろん、そうできるのは分かるんですが、デバッグで確認するために
敢えて一旦代入してみました。
0400デフォルトの名無しさん
NGNGdefine に対する undef みたいなの。
0401デフォルトの名無しさん
NGNGヘッダーファイルでは
std::string s ;
のようにして cpp で using namespace 使うのが一般的なのかな
0402デフォルトの名無しさん
NGNGないが、一時的に using したいなら anonymous namespace 使うのは手かも。
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNG0405デフォルトの名無しさん
NGNGtemplate<typename T> struct nise {
T t;
nise(T t) : t(t) {}
operator T() const { return t; }
};
//------------------------------------------
void test(nise<float> a)
{
std::cout << "test(float)";
}
とすると標準変換よりは優先度が下がるので、
test(CStrin) と test(float) が曖昧です、くらいにはなる。
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNGVC++6 で通っちゃうんですけど・・・。
#include <iostream>
namespace
{
using std::cout;
using std::endl;
}
int main()
{
cout << "hello, world" << endl;
return 0;
}
0408名無し~3.EXE
NGNG↑って何?これが本当なら面白いね。
2.1Mになっちゃう単純なHello Worldって何?
0409デフォルトの名無しさん
NGNG散々ガイシュツ
0410デフォルトの名無しさん
NGNG無名ネームスペースじゃだめな気が
あれはstaticの改良だよね?
そのファイルからしか見えなくなるという
0411名無し~3.EXE
NGNG過去ログのどのあたりでやってたかわかります?
結論は?下らんジョークって落ちか。
元ネタは何なんだろう。。。
0412デフォルトの名無しさん
NGNG0413C++厨
NGNGStroustrup FAQを読め
0414デフォルトの名無しさん
NGNGinputとoutputが同じファイルを指すストリームであるとして
書き込みプログラムで
int a = 0;
output.write((char*)&a, sizeof(int));
読み込みプログラムで
while (!input.eof())
{
input.read((char*)&b, sizeof(int));
cout << b << endl;
}
とすると
0
0
と二回結果が返ってきます。
一回しか書き込んでないのになぜ?
0415デフォルトの名無しさん
NGNG{
cout << b << endl;
}
0416デフォルトの名無しさん
NGNGなるほど。
実際にはいろんな型の複数のデータを扱っているので
構造体にでもまとめてその手法を使ってみます。
ありがと。
0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG「手法」じゃねーよ。>414が間違ってるだけ。
ちゃんと理解してから先に進みやがれってんだ。
0419デフォルトの名無しさん
NGNG0420414
NGNGごめん、精進します。
0421デフォルトの名無しさん
NGNG最後のデータより後ろを読んだ時にeofbitがセットされる。
正しくデータが読み込めている限り、eofbitはセットされない。
>>419
それなら>>415でも治らないだろ。
0422デフォルトの名無しさん
NGNGinput.eof()がtrueになるのは、一度読み込んでみてからでないと
判断できない。
だから
while (true)
{
input.read((char*)&b, sizeof(int));
if (input.eof()) break;
cout << b << endl;
}
ではないかと思うのだが。
希望としては大量に短時間で送信できることです!
システムの内容としては
ttp://www.arelax.net/pc/amailer/index.htm
このような機能は最低限欲しいです。
とにかく1時間で何万件も送れるメール送信ソフトが欲しいです!
興味にある方はメールください。
作成費用は交渉致します♪
0424419 != 414
NGNG>>421 >>422の言うこともわかる。
しかし、>>414で、2度目の0の出力が不思議だ。
あ、2度目の読み込みでは、データは読めず、前の0がbに残ってるからかな。
0425デフォルトの名無しさん
NGNGくさい飯でも食いたいのか?
0426デフォルトの名無しさん
NGNG「>>421 >>422の言うこともわかる。」なら、
「前の0がbに残ってるから」のほかに何があるってんだ?
0427424
NGNG>>414の設定で、
int b, c = 100;
ifs.read((char*)&b, sizeof(int));
cout << b << endl;
ifs.read((char*)&c, sizeof(int));
cout << c << endl;
としたら、
0
100
と出力された。
今晩は勉強になりますた。
サンキューです。 >>421 >>422 あんど >>414
0429デフォルトの名無しさん
NGNGお前馬鹿だろ?
0430269
NGNGifstream is( from.c_str() );
istream_iterator<string> ii( is );
istream_iterator<string> eos;
int i = static_cast<int>(distance( ii, eos ));
vector<string> b( i );
copy( ii, eos, b.begin() );
なんかうまくcopyされてないみたい。。。
この ii の値はdistanceの後変わってしまう?
あとeosってここではどんな意味が?
0431デフォルトの名無しさん
NGNGistream_iteratorにdistance?
eosはend_of_streamだな。
distanceした時点で読み込みが完了するものとおもわれ。
入力が完了するまで要素数はわからないので、あらかじめ確保するのはムリ。
back_inserter使え。
0432デフォルトの名無しさん
NGNGeosってのはstd::istream_iterator()という引数なしの
コンストラクタだから、EOFを示している。
distance()でeosまでの距離を取ったら、ストリームを一度最後
まで読むから、値がおかしくなるんじゃない?
std::copy(ii, eos. std::back_inserter(b)); ではどうか。
0433431
NGNG0434デフォルトの名無しさん
NGNG0435デフォルトの名無しさん
NGNGifstream is( from.c_str() );
istream_iterator<string> ii( is );
istream_iterator<string> eos;
int i = static_cast<int>(distance( ii, eos ));
vector<string> b( i );
ii.clear();
ii.seekg(0, std::ios::beg);
copy( ii, eos, b.begin() );
こうやったらどう?
0436デフォルトの名無しさん
NGNGちなみに、何がしたいかわかんないけど、フツー
ifstream is( from.c_str() );
istream_iterator<string> ii( is );
istream_iterator<string> eos;
vector<string> b(ii, eos);
でない?
0437デフォルトの名無しさん
NGNG漏まえは>>269まで戻れ。
0438デフォルトの名無しさん
NGNGポリモーフィズムを扱いたい場合には
explicit counted_ptr(T* p = 0) : ptr_(p), count_(new long(1)) { }
template <typename U>
explicit counted_ptr(U* p = 0) : ptr_(p), count_(new long(1)) { }
という二つのコピーコンストラクタを作るのかなぁと思ったのですが、
良く良く見ると後者は前者を包含してるように思えます。
という事は前者はいらないのでしょうか?
ちょっとこの辺り(型の自動変換の問題とか?)にイマイチ自信が無いのですが、
後者だけでは何か問題があったら教えて頂けますでしょうか。
0439438
NGNG前者で explicit を取ればいいような気もするんですが、それには
何か潜在的な危険は無いんでしょうか?なんか参照カウントならいいよう
な気がしなくもないんですが、boost::shared_ptr は後者のみみたいで、
その辺が良く分かっていなくて混乱しているのですが・・・
0440デフォルトの名無しさん
NGNGexplicitは、単にT*が暗黙にcounted_ptr<T>に変換されるのを防ぐ
ためだからちと違うんでない?
前者でも counted_ptr<Base> ptr(new Derived()); は書ける。
後者は前者を包含するけども、↑を書く時点では前方参照でもOK
らしい、ちゅうところが違うみたい。
#同じコンパイル単位に定義は必要だが。
#include "counted_ptr.h"
class Base; class Derived;
void func(Derived *p) { counted_ptr<Base> ptr(p); } // 前方参照のみ
class Base {}; class Derived : public Base {};
g++3.2では、前者はNG、後者ならOKでした。
テンプレートにマッチすることで、型のチェックが遅延するのかな?
0441440
NGNG後者は前者を包含するし潜在的な危険もないので、後者だけでいいんじゃない?
と答えるところだったのか。
explicitの有無については>>440 になるんでないかの。
また、細かい話だがそれはコピーコンストラクタとは言わんと思う。
コピーコンストラクタっつたら、これ↓じゃない?
template <typename U> counted_ptr(const counted_ptr<U> &);
0442デフォルトの名無しさん
NGNGだから両方必要なはず。
ExceptionalC++に書いてあったと思う。
0443デフォルトの名無しさん
NGNG言ってることがよくわからんけど、テンプレートでもコピーコンストラクタできるんじゃない?
やってみたらできたよ。
0444443
NGNG0445デフォルトの名無しさん
NGNG0446438
NGNGありがとうございます。とりあえず後者のみで良さそうって感じですかね。
boost::shared_ptr もそうなってるっぽいですし、まぁそうかなぁとは思ったので
すが、なんか前者が無いとイマイチ根拠の無い不安があるんですよね(苦笑
# たしかにコピーコンストラクタとは違いますね。スミマセン。
>>442,443
うー、ExceptionalC++持ってないから分からないのですが、とりあえず
後者だけでもg++3.2.1なら通るんですよね。僕の環境でも。ただ、g++も標準に準拠している
のかどーなのかまだ完全じゃないっぽいんで、判断が難しいんですよね・・・
# VC++で通らないと「きっとVCの準拠度の低さのせいだな」と結論付けちゃうんですけど(w
あと、boost::shared_ptr を見てて思った事。
operator=(T* p) じゃなくって reset(T* p) っていうのは、やはり
a = b = c = ...
とかっていう時にポインタと shared_ptr が混ざってると混乱するから
なんでしょうかねぇ?個人的には operator= でいいような気もするんですが・・・
0447デフォルトの名無しさん
NGNG胃が悪かったんだ。
0449デフォルトの名無しさん
NGNG嘘を言ったように見える。
↓のコード、実行前に予想した結果と、実際に実行した結果が同じになるか?
#include <iostream>
struct X
{
  X(){}
  template<typename T>
  X(const T&){ std::cout << "template constructor" << std::endl; }
};
main()
{
  const X x;
  X copied(x);
};
0450448 == 443
NGNG予想:Xにはコピーコンストラクタが暗黙で生成されるので、実行してもX(const T&)は呼ばれない。
結果:その通りだった。
しかし、その前に、>>449のコードは、なんだか尋常でないものを感じる。
もう少しフツーのコーディングを覚えた方がいいんじゃないの?
コピーコンストラクタって言葉遣いもまちがってそうだし。
0451デフォルトの名無しさん
NGNG>>449は、X(const T&)から、X(const X&)が生成されるかもと思って、
そうでなかったので、それを「テンプレートからコピーコンストラクタが
暗黙に生成されることはない」と言ったんだね。
そりゃあ、用語がめちゃめちゃやん。
もう寝る。
0452デフォルトの名無しさん
NGNGうむ、mainの終わりにセミコロンがついてるのは尋常じゃぁない。
>>451
なにがめちゃめちゃになってるのかわからん。
起きたらまとめてくれ。
0453デフォルトの名無しさん
NGNG生成されないみたいだね。
で、テンプレートを使った一見コピーコンストラクタに見える定義
だけど、受け側と送り側が同じでない場合があるからという理由
で、コピーコンストラクタになる事を拒絶するようだ。
例え同じ型でも。
0454デフォルトの名無しさん
NGNG呼んでくれないのはなぜ?(T_T)
#include <iostream>
template <typename T>
struct X {
X() {}
X(const T&) {
std::cout << "template constructor" << std::endl;
}
};
int main()
{
const X<int> x;
X<int> copied(x);
X<int> copied2;
copied2 = copied;
}
0455デフォルトの名無しさん
NGNGなにがいいたいのかよくわかりません。
0456デフォルトの名無しさん
NGNGどこが明らかなんだ?
X(const X&) 書く以外に、同じ型であることが明らかである場合があるのか?
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNGやっぱりだめか・・・・
基本的にテンプレートはコピーコンストラクタは全くだめなんですね。
0459デフォルトの名無しさん
NGNGX<int> copied(x); において
const T& は const int& になるのであって、
const X<int>& にはなりません。
X< X<int> > copied(x); が正解です。
0460デフォルトの名無しさん
NGNG本当だサンクス!
型が合えばテンプレートでもコピーコンストラクタを生成してくれました!
0461デフォルトの名無しさん
NGNG確認しておくが、テンプレートからコピーコンストラクタは生成されんぞ。
0462デフォルトの名無しさん
NGNGクラステンプレートではなくてメンバテンプレートでという意味ですか?
0463461
NGNG0464デフォルトの名無しさん
NGNGでもこれだとメンバテンプレートだけどコピーコンストラクタを生成
してくれたよ。
template <typename T>
struct X {
X() {}
template <typename U>
X(const U&) {
std::cout << "template constructor" << std::endl;
}
};
int main()
{
const X<int> x;
X<X<int> > copied(x);
}
0465デフォルトの名無しさん
NGNG「コピーコンストラクタを生成してくれた」とは、
そのソースの実行結果がどうなることを言うんだ?
コピーコンストラクタの意味わかってる?
0466デフォルトの名無しさん
NGNGT==Uの時、X(const U&)を呼んでくれたという事なんですけど・・・・
これはコピーコンストラクタと呼ばずに別の呼び方をするべきでしょうか?
0467デフォルトの名無しさん
NGNGT==Uでも、X<T>::X<U>(const U&)はコピーコンストラクタじゃぁねぇ。
X<T>のコピーコンストラクタは、X<T>::X(const X<T>&)
0468デフォルトの名無しさん
NGNGよくわかりました。
ありがとうございました。
0469デフォルトの名無しさん
NGNGstruct S_Base{public:float x,y;virtual ~S_Base(){;}};
class C_Child_S_Base:public S_Base{public:virtual ~C_Child_S_Base(){;}};
class C_GrandChild_S_Base:public C_Child_S_Base{public:~C_GrandChild_S_Base(){;}};
class C_Base{public:float x,y;virtual ~C_Base(){;}};
class C_Child_C_Base:public C_Base{public:virtual ~C_Child_C_Base(){;}};
class C_GrandChild_C_Base:public C_Child_C_Base{public:~C_GrandChild_C_Base(){;}};
int main(int argc, char* argv[]){
S_Base *p_SB=(S_Base *)new C_GrandChild_S_Base; delete p_SB;
C_Base *p_CB=(C_Base *)new C_GrandChild_C_Base; delete p_CB;
return 0;
}
structを継承する時に基底structでデフォルトデストラクタを使ってる例
をよく見かけますが、仮想デストラクタでないためかVC++.Netだと
ASERT落ちします(当然ながらclassも同じです)何故でしょう?
今までふつーに使って平気だと思ってたのですが・・・
上のソースのベースのデストラクタをコメントアウトして実行してみてください
0470デフォルトの名無しさん
NGNGASSERT 外せば?
0471デフォルトの名無しさん
NGNGstructのデフォルトデストラクタはvirtualでないというのは
C++の仕様ですか?それともMSだけですか?あとclassもそうなんですか?
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
で落ちます
0472デフォルトの名無しさん
NGNGおちつけ。まずは仕様書…とは言わんが、せめて「プログラミング言語 C++」と
MSDN Library 読んでからな。
0473デフォルトの名無しさん
NGNG手元の本はEffectiveC++しかありません
MSDN見てみます
0474デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGclass A {
public:
~A() { cout << "~A" << endl; }
void foo() { cout << "A" << endl; }
};
class B : public A {
public:
virtual ~B() { cout << "~B" << endl; }
virtual void foo() { cout << "B" << endl; }
};
class C : public B{
public:
virtual ~C() { cout << "~C" << endl; }
virtual void foo() { cout << "C" << endl; }
};
main() {
A* a = new C; // 危険
a->foo();
delete a;
B* b = new C;
b->foo();
delete b;
}
さて、何がどう呼ばれるでしょう?
0477469
NGNG#include <stdlib.h>
#include <crtdbg.h>
MSDNで関係ありそうなのは、VC++6.0のメモリリーク検知の記述だけでした
上の順番で入れるといいらしいのですが、うちの環境では結局同じ所で
落ちました
structもclassも派生させるんならデフォルトデストラクタを使うな
ということですか?誰か教えてください
でも、DirectX関係でもstructから派生させてデフォルトデストラクタを使ってる
ような気がしますが・・・???
0479469
NGNG当然class Aは仮想デストラクタでないのですから~Aで止まりますが、
私が分からないのは「デフォルト」デストラクタは仮想かそうでないのかが分からないのです
特にstructから派生させる時は、「デフォルト」デストラクタを使う場合が多いのでは?
0480デフォルトの名無しさん
NGNGまず、classとstructでの差は無い。
基底クラスが無い場合、デフォルトではvirtualにはならない。
基底クラスがある場合、デフォルトでは、基底クラスのデストラクタと同じになる。
0481469
NGNGありがとうございます。それが知りたかったのです。
巷にある、structから派生させているのにも拘らず「デフォルト」
デストラクタを使っているサンプルは誤りということですね。
0482デフォルトの名無しさん
NGNG仮想関数を1つも宣言しない場合は、誤りであるとは言えない。
0485デフォルトの名無しさん
NGNGまぁまずはここでも読めや。
ttp://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.5
「とりあえずデストラクタvirtualにしとけ」ってのだけはやめとけ。
仮想関数を作るコストはゼロじゃぁないんでな、ちゃんと考えて判断するもんだ。
0486469
NGNG情報ありがとう
へっぽこ英語力でななめ読みですが、
ええと、仮想デストラクタにしない場合というのは
親族クラスのその階層以下でそれ以上「動的確保しない」場合のみですか?
それなら分かるのですが、階層以下で「動的確保してる」場合は
メモリリークですよね。意訳間違ってますか?
コストはあまり考えずに仮想ばっかやっていましたが・・・
サンプルを元に派生クラスを作る場合はサンプルのデストラクタの属性に
気をつけろということですね
0487デフォルトの名無しさん
NGNG破門。C++以外の言語に乗り換えれ
0488デフォルトの名無しさん
NGNG#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <stdlib.h>
0489デフォルトの名無しさん
NGNG破門。Cでもやれ。
0490469
NGNG>破門。C++以外の言語に乗り換えれ
そんなぁ
デストラクタは主に動的確保の開放で使いますよね
それを途中で切ればコストは稼げますが、リソースの方が重要じゃないですか
安全に切る為にはその階層以下がNULLデストラクタってことですよね
NULLデストラクタだとあまりコストが稼げない気もしますが・・・???
0492デフォルトの名無しさん
NGNG「クラス階層以下で動的確保」「デストラクタを途中で切る」「NULLデストラクタ」
デムパがびゅんびゅん飛び出してる。
自分にしかわからん造語をあたりまえみたいに書き散らすなボケ。
そりゃぁ破門したくもなるぜ。
0493469
NGNGはい、すみませんデムパ説明します
「デストラクタを途中で切る」
継承クラスで非仮想デストラクタを宣言する
「クラス階層以下で動的確保」
上(デストラクタを途中で切る)のクラスから継承されたクラスで
newなどの確保をする
「NULLデストラクタ」
NULL命令(これは造語ではありません)しかないデストラクタ
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNGすまん。これで最後にさせてくれ。
>>493
破 門 確 定 。
理由を聞かれても答えんからな。
0496デフォルトの名無しさん
NGNGNULL命令?ぬるぽ?
0497デフォルトの名無しさん
NGNGぬるぽ!
0498デフォルトの名無しさん
NGNG|___ミ ギビシッ
.|| ヾ ミ 、 グシャッ
∩_∧/ヾヽ
| ,| ゚∀゚). .| |;, ゲシッ
/ ⌒二⊃=| |∵.
.O ノ %`ー‐'⊂⌒ヽ ゴショッ>>493
) ) ) )~ ̄ ̄()__ )>>496
ヽ,lヽ) (;;;;;;;;;;;;;;;;;)(_(>>497
0499千
NGNG0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNGそのクラスを継承したクラス(Bとしよう)のデストラクタは必ずvirtualになる。
Bのデストラクタに対しvirtualキーワードを付けるかどうかに依存しない。
これはメンバ関数についても当てはまる。
0503デフォルトの名無しさん
NGNGvirtual void func() const {}
};
class B : public A {
nullpo void func() const {}
};
Bのfunc()をvirtualで無くす方法。ぬるぽ。
0504502
NGNG502の事柄はstructにも当てはまる。
0505デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG「デストラクタを途中で切る」
>>502 の言う通り。
「クラス階層以下で動的確保」
やっぱり意味が分からない。
多分 >>502 を踏まえれば意味の無くなる言葉なのだろう。
「NULLデストラクタ」
デストラクタは暗黙に
メンバ変数と基底クラスのデストラクタを呼ぶという後処理を含むので、
完全に無くなるというのはメンバ変数にデストラクタを呼ぶクラスがなく、
かつ基底クラスも同条件である場合のみ。
「NULL命令」
いわゆる NOP のことか?
上記の様に完全に消え去る場合は関数が呼ばれすらしないし、
それ以外でも NOP などは入らない。
関数と関数の間の詰め物として NOP を使うことがあるが、それは100%別の話だ。
それとも ((void*)0)(); という類のものか?
これは上の完全に消え去るということと同義なわけだが、
その条件は上の通り非常に厳しいものだ。
0508デフォルトの名無しさん
NGNG途中まで読んでみたが理解できなかった
0509デフォルトの名無しさん
NGNGもしかして空文のことか?
0510デフォルトの名無しさん
NGNGどっかの誰かが書いたテンプレ
プログラム板の名物スレですな。こうでもしなけりゃ心が落ち着かない人が多いのです。
■ NullPointerExceptionを「ぬるぽ」と呼ぶスレ
http://pc.2ch.net/prog/kako/1024/10245/1024553352.html
■ NullPointerExceptionを「ぬるぽ」と呼ぶスレ2
http://pc.2ch.net/test/read.cgi/prog/1039481980/l50
<<関連スレ>>
■ ぬるぽ
http://pc.2ch.net/test/read.cgi/prog/1042017145/l50
■ (ム板)NullPointerExceptionを「ぬるぽ」と呼ぶスレ
http://pc2.2ch.net/test/read.cgi/tech/1043623143/l50
■ (モナ板)NullPointerExceptionを「ぬるぽ」と呼ぶスレ
http://pc2.2ch.net/test/read.cgi/tech/1043623143/l50
0511デフォルトの名無しさん
NGNGあーそういうことか、ありがとう。
0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNGhttp://aa.2ch.net/test/read.cgi/mona/1044358791/l50
0514デフォルトの名無しさん
NGNG"A Good Thing"と"Yuck"が訳せん…
特に後者。ひょっとして笑うところ?(んなわけないか)
0515デフォルトの名無しさん
NGNGhttp://www2.alc.co.jp/ejr/index.php?word_in=yuck
>>485のリンク先読んでないからなんともいえないけど、
A Good Thing って言ったら、「それはいいことだ」とかそういうの。
0516デフォルトの名無しさん
NGNG笑うところでしょ(笑)
0517デフォルトの名無しさん
NGNG質問です。
↓のような op= の定義は、C++的にアリですか?
std::wstring& operator=( std::wstring& lhs, std::string& rhs )
{
if( !s.empty() )
{
std::vector< wchar_t > buff( rhs.size()+1 );
if( std::mbstowcs( &buff[0], rhs.c_str(), rhs.size() ) == -1 )
throw charactertype_convert_exception();
lhs = &buff[0];
}
return( lhs = L"" );
}
0518517
NGNG…つーか グローバルな op= ってコンパイル通らないや。
ごめん、op<<=に変更 VC++7.0 で動作確認。
std::wstring& operator<<=( std::wstring& lhs, const std::string& rhs )
{
if( !rhs.empty() )
{
std::vector< wchar_t > buff( rhs.size()+1 );
if( std::mbstowcs( &buff[0], rhs.c_str(), rhs.size() ) == -1 )
throw std::runtime_error("bad chartype convert");
lhs = &buff[0];
returnlhs;
}
return( lhs = L"" );
}
アリですか、ナシですか?
0519デフォルトの名無しさん
NGNGちゃんと動くんならアリだと思うけど、<<=はあんまり見慣れないから、
ソースが読みづらくなりそうだと思いました。
0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNGcerr<<"Is this undefined?"<<endl;
0522デフォルトの名無しさん
NGNGstd::wstring& operator<<=( std::wstring& lhs, const std::string& rhs )
{
if( rhs.empty() )
return( lhs = L"" );
std::vector< wchar_t > buff( rhs.size()+1 );
if( std::mbstowcs( &buff[0], rhs.c_str(), rhs.size() ) == -1 )
throw std::runtime_error("bad chartype convert");
lhs = &buff[0];
returnlhs;
}
0523デフォルトの名無しさん
NGNG0524517
NGNGstd::string& operator <<= ( std::string& lhs, std::string& rhs );
std::string& operator <<= ( std::string& lhs, std::wstring& rhs );
std::wstring& operator <<= ( std::wstring& lhs, std::string& rhs );
std::wstring& operator <<= ( std::wstring& lhs, std::wstring& rhs );
...
std::wstring& operator <<= ( std::wstring& lhs, int rhs );
int& operator <<= ( int lhs, tstring& rhs );
などとそれぞれ作っておけば、型や方向を気にすることなく、
target <<= source; とか、
str <<= 123;
と何でも変換機みたく書けるなぁ…と考えたからです。
lexical_cast みたいにターゲットの型を明記する必要もないし。
ただ、>>519 のいうように、ソースみて混乱するかも…
つーか、書いてて無用の混乱を生み出しそうな気がしてきたな…
まぁ、忘れてください。
0525デフォルトの名無しさん
NGNGにそれぞれ operator<< を定義するっちゅーのはまぁいいと思うんだが。
0526デフォルトの名無しさん
NGNGUNICODE対応とトークン対応すりゃいいんだが。
(doubleもspecializeする必要あるが...)
(でも、すべてのコンパイラでUNICODE使えるかわからん)
cout << lexical_cast<string>("あい aうえ",L"う"); //あい a
な感じで
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG「何でも変換」って時点で最悪。
キャストとかも explicit にすべきなのに、
代入演算子で暗黙の型変換なんかされた日にはもう。
0530デフォルトの名無しさん
NGNGsetlocale( LC_ALL,"”);
のかわりにしたいなら
locale::global(locale(""));
ってやっときゃいいの?
0531C++厨
NGNG0532デフォルトの名無しさん
NGNG#include<iostream.h>
int main()
{
cout<<rand()<<endl;
}
とやると、何度やっても答えが130になります。が、
int main()
{
cout<<rand()<<endl;cout<<rand()<<endl;cout<<rand()<<endl;
}
とやると、130、10982、1090となります。
数字を実行毎に変化させる事は出来ないのでしょうか?
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNGアリガ�d
ところで、gmtimeってなんの略でしょう?
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNGすると、残りのimeってなんの略ですか?
0542デフォルトの名無しさん
NGNGMeidonomiyageni
Ehimemikan
0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNGg m time だYO!
0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGお前らいい仕事してはりますな
0548
NGNGint* p = NULL;
int& i = *p;
i = 100;
ここで3行目のように i を使うと segmentation fault を起こします。
(int*)NULL にアクセスすることになるのだから当然ですね。
また (&i == NULL) という式の値は真(非零)となります。
少なくとも僕の環境 Debian GNU/Linux 3.0r1 (gcc 2.95.1) ではそうなります。
で、お聞きしたいのは、ANSI C++ や Stroustrup の C++ の
言語仕様的には次のいずれなのでしょうか?
1) 2行目の宣言が不可能でその結果が未定義
2) 3行目の式の評価が不可能でその結果が未定義
0549デフォルトの名無しさん
NGNG> *p;
null pointer の dereference が未定義。
0550
NGNG実装もあり得ると言うことでしょうか?
0551デフォルトの名無しさん
NGNGReturn 0;
って何ですか?例えばこんなん。
#include <stdio.h>
main()
{
printf("name: ");
return 0; //←これ。
}
0552548
NGNG多くの処理系(というか OS)では
main 関数の戻り値が 0 であった場合に
プログラムが正常終了したと見なします。
なので、特に main 関数の中で問題が発生しなかったときには
return 0 などとしているわけです。
でも 0 が正常終了を表さないような処理系もあるので、
次のように書く方が移植性が高いでしょう。
#include <stdlib.h>
int main (void)
{
// your main code here
return EXIT_SUCCESS;
}
0553デフォルトの名無しさん
NGNGネタでつか
0554デフォルトの名無しさん
NGNGなるほど。ありがとうございます。
何故かほとんどの記事がコレには触れないんです^-^;
bcc32ではreturn 0; 無くてもコンパイル・実行共に通ったので、
悩んでました。
0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNGうむ。例えばCINTはそこで落ちるね。
0557548
NGNGうちの環境で #include <iostream.h> やって、
cout << *(int*)NULL << endl;
なんて実行すると (nil) って表示されたんで、
「ん? lisp みたいに nil を返すなんてこともトリッキーながらできたりして。」
って思ったわけです。
0558548
NGNG意味のある値を返すことができない場合は
次の二つの方法があると思います。
1) あり得ない値を返す。
たとえば年齢として負の値を返すとか。
2) 戻り値とは異なる経路でエラーを伝達する。
3) 例外を発生させる。
で、lisp で言うところの nil みたいなものを扱う方法が C++ にあれば
1) をやる場合に便利だなぁと思ったわけで・・・
まぁ浮動小数点における NAN みたいなものでしょうか。
いや、 int をそのまま使わずに Java の Integer 型みたいに
クラスにくるんでしまえばなんとでもなるのはわかっているんですけど、
それも大げさだなぁ、と思った次第でして。
0559デフォルトの名無しさん
NGNGdos の batkey とかは、リターンコードで情報を返したりするよ。
0560デフォルトの名無しさん
NGNGだからどうした?
0561デフォルトの名無しさん
NGNGうん ? >>553 に対して、ネタじゃないよと言うだけのことだけど。
0562デフォルトの名無しさん
NGNGへぇ・・・。
0563デフォルトの名無しさん
NGNGそうだけど、それがどうかしたか ?
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNGdos と言うものを知らんアフォが絡んできただけのことか...。
0567549
NGNG> cout << *(int*)NULL << endl;
> なんて実行すると (nil) って表示されたんで、
ふおぉ。そんな風になってる処理系もあるのか。面白い。
「意味のない値」を返す話なら、boost::optional
http://www.kmonos.net/alang/boost/classes/optional.html
なんかを覗いてみると良いかと。
0568デフォルトの名無しさん
NGNG実行して終了したのと同じ意味になるので、0が正常終了を表さない
処理系では標準C++は使えないね。
0569デフォルトの名無しさん
NGNGmain 関数の返す値とプログラムの返す値が同じである必要は無い。
0570デフォルトの名無しさん
NGNG同じ動作をする仕様となっております。
0571デフォルトの名無しさん
NGNGダウト。
0572548
NGNGいま boost の class optional のコードを読んでみました。
結局のところ、
class optional
{
いろいろ
省略
private:
bool m_initialized;
storage_type m_storage;
}
となっていて、そのオブジェクトが有効か無効かを記憶しているだけですね。
0573デフォルトの名無しさん
NGNG0 が正常終了を表さないような処理系もある
と言う事と
リターンコードで情報を返したりする
事は全く別の問題だろ
0574デフォルトの名無しさん
NGNGこういうのを全部publicにしちゃうのはC++的にどうですか?
ちなみにゲームのプログラムです。
0575デフォルトの名無しさん
NGNG安全上必要なときだけ書く。
面倒なだけじゃなく、コードが増えて可読性落ちる、保守性落ちる。
折れのまわりには、必ずアクセサ書く香具師いる。
いろいろ理由言ってるけど、最後は趣味の問題。
0576デフォルトの名無しさん
NGNGOO厨の召喚ですか?
0577デフォルトの名無しさん
NGNGアクセサにしとかんと、インターフェースと実装を分離できないやん。
>>574
> ちなみにゲームのプログラムです。
俺は本職のゲームプログラマだけど、性能が要求される部分なんて、全体から
見たらほんの一部だよ。
たとえばアクションゲームでプレイヤーの制御する部分なんか、しょせん 1/60s
に一階しか呼ばれないから、そこで間接ジャンプが 100 回ぐらい入っても誤差
誤差。
0578デフォルトの名無しさん
NGNGC++なら、アクセサ無しでもテンプレつかって分離という手もあるぞ、まあお勧めはせんけど。
0579デフォルトの名無しさん
NGNGテンプレートはコンパイル時にシグネチャに基づいて結合させるから、プレイヤーの
状態遷移の制御なんかにゃ使えんでしょ。(あっちは実行してみないと状態が確定
しないわけで)
0580デフォルトの名無しさん
NGNGかかってるの?
0583デフォルトの名無しさん
NGNGvoid f(){ cout<<"f()"<<endl; }
f(f()); //error. why?
0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNGメンバ変数は当然privateとして。
そんなら、普通のことだが。
もし、メンバ変数をpublicにしるということなら。。。
ガクガクブルブル
0586548
NGNG使いたくないけど、どうしても必要なら friend ですかね。
でも漏れは今まで演算しオーバーロード以外で使ったこと無いですけど。
メンバ変数を public にするならむしろ明示的に class じゃなくて
struct って書いた方がいいかも。
0587デフォルトの名無しさん
NGNGvirtualじゃないなら書いてもコンパイルが遅くなるだけでアプリのスピードは変わらん。
0588574
NGNG>>577san
そろそろ全体の負荷を把握しときたいなとプロファイラを導入したのが事の発端でした
0589デフォルトの名無しさん
NGNGてきとーなこといってんじゃねぇよ。
得意げな顔してなにが「 fiend ですかね。」だ。
お前は本当に、以下略。
0590デフォルトの名無しさん
NGNG> もし、メンバ変数をpublicにしるということなら。。。
> ガクガクブルブル
なんでメンバ変数をpublicにしたらいけんのか小一時間
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNGデータメンバをpublicにするなら、classの中に置いてある意味が無くなるだろ。
0593デフォルトの名無しさん
NGNGデータメンバをpublicにするなら、classに置くのもグローバルにするのも
同じと言いたいのですか?
0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNG君は、
1.ただのばか
2.いろんな可能性でうんちくを述べたいばか
のどちらかだろうから、とりあえず、息の根を止めてよかよ。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG0598583
NGNG内側のf()は何も返さないのだからOKになるのが普通じゃないですか?
ハッ?漏れは >>583 にだまされているのか?
0600デフォルトの名無しさん
NGNGメンバ変数をパブリックにしてもいい場合もあると思うが。
メンバを勝手に変更しても、問題ない場合とか。
class RectDrawer
{
...
public:
Point begin;
Point end;
};
他にも、Point とか、Rect とか、Matrix みたいなのは、その典型。
0601デフォルトの名無しさん
NGNG構文として間違っているのでは。
0602デフォルトの名無しさん
NGNGC の構造体に、操作に便利なメソッドを幾つか追加したってタイプのデータ構造な。
個人的には struct にするけど。
0603デフォルトの名無しさん
NGNGC++ にもプロパティーが欲しい今日この頃。
0604デフォルトの名無しさん
NGNG↓
(゚д゚)ウマ-
0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNGoperator=もメンバだが?
0607デフォルトの名無しさん
NGNGって普通かも。
0608デフォルトの名無しさん
NGNGそれはね、使ってみると分るよメッチャ便利だから。
特にテンプレートと組み合わさったら無敵になると想像。
0609デフォルトの名無しさん
NGNGVECTOR や MATRIX みたいな、値指向の型だとそれもありだろう。OOP でいうところ
のオブジェクトではなく、むしろプログラミングのネジ・クギにあたる具象クラスってヤツ
な。
プログラミング言語 C++ でも散々解説されてるけど。
0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNGどんと買っとけ
0613デフォルトの名無しさん
NGNGプロ現C++よりさらに分厚くて、見て笑ってしまう。
0614デフォルトの名無しさん
NGNG0616
NGNG{
//いろいろとかく
};
typedef B A;
これって、エラーになりますよね。
単純な型以外で typedef のようなことはできないものでしょうか?
class B : A {}
と継承しても良さそうなものですが、
オーバーロード演算子は継承されませんよね。
0617
NGNG0618デフォルトの名無しさん
NGNGじゃないのか?
で、よくソースみてみたら
typedef A : B;
ってやってたよ!
何で真ん中にコロンなんて入れちゃったんだろう。
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG殿,どうかご助力を。
#include <stdio.h>
aisatsu()
{
printf("hello");
return 0;
}
main()
{
int ans;
int loop;
ans = 0;
printf("処理を選択してください\n");
printf("1.aisatsu 2.aisatsu");
scanf("%d",ans);
if (ans == 1)
aisatsu();
else
aisatsu();
}
0622デフォルトの名無しさん
NGNG0623622
NGNG0624デフォルトの名無しさん
NGNGΣ( ̄ロ ̄;
実行できました。かたじけのうござる。
どうして &をつけるとうまくいくのでござろうか。
0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNG0628C++厨
NGNG0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG0632 ◆8x8z91r9YM
NGNG又はスキルがある方安く作成して頂けませんか?
ttp://popup6.tok2.com/home2/DMmaster/
0633デフォルトの名無しさん
NGNGそういうのを使う用事のある人に対して反感を持っています。
無作為にor不特定多数にメールを投げるのはやめなさい。
もっとまっとうな商売をしなさい。
0634デフォルトの名無しさん
NGNG前もどっかのスレで作ってくれって言ってたよ。
0635デフォルトの名無しさん
NGNG0636
NGNGいつも悩むのが 「ああ、コンストラクタが失敗してたらどうしよう・・・ 」
もちろんこういうことは例外で処理するのがスマートなのだとは思いますが、
例外処理を使いたくない場合は皆さんどうしておられるのでしょうか?
1) クラスの中に、コンストラクト成功・失敗のフラグを用意する。
で、アクセス関数として int IsAvail(void) みたいなのを用意する。
2) コンストラクタの引数に成功・失敗を返すための変数への参照を取る。
MyClass::MyClass ( int & flag)
でも引数なしのデフォルトコンストラクタだとどうしようもない。
これ以外に何か方法あります?
#グローバル変数使ったりするのは即却下。
0637デフォルトの名無しさん
NGNG0638
NGNGどうしてもコンストラクタが必要になるケース以外では。
1) 引数なしのデフォルトコンストラクタが自動的に呼び出される場合。
2) 型変換のためにコンストラクタが自動的に呼び出される場合。
「自動的」って言い方はよくないかなぁ。
「暗黙に」といった方がいいのかもしれないですが。
0639デフォルトの名無しさん
NGNG(・∀・)カエレ!
0640デフォルトの名無しさん
NGNGAceとかいうのを使ってナニする奴かい?
漏れも一瞬迷ったけど、変な物使うぐらいならと思ってWinSock2.0の本を買って帰ったよ。
0641デフォルトの名無しさん
NGNG例外処理を有効にしてコンパイルするときに、
例外処理のオーバーヘッドを最小限に抑えるためのアプローチって、
なにか一般的なものはありませんか?
0642デフォルトの名無しさん
NGNG0643
NGNG例外処理によるオーバーヘッドは仕方ないものだと思います。
#実行時型情報もオーバーヘッドありますね。
0644デフォルトの名無しさん
NGNGそれ以外は Scheme とかで書きたいなぁ、なんて思う今日この頃。
いや、10分ほど前から libguile のマニュアル読み出したところなんだけど。
0646641
NGNG最小限に抑えるようなアプローチは結構一般的なものがあると思ってるけど、
例外処理については>>643のように「仕方ないもの」で
済ませてしまっているようで、もうちょっとなんとかならんものか、と。
手当たり次第に throw() を付けていくってのは効果的なんでしょか?
0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNG0650デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG姿は見えなくても、いつも漏まえのそばにぬるぽ。
0653デフォルトの名無しさん
NGNGstatic_cast<>の場合って普通の型キャストとおなじなので実行時型情報はいらないですよね?
0654デフォルトの名無しさん
NGNGこれはたしかにそうだが、
> コンパイラに実行時型情報を要求される
これの意味がわからん。
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG>手当たり次第に throw() を付けていくってのは効果的なんでしょか?
throw() があると、例外の有無をチェックするコードが挿入されるので、
逆に効率が悪くなる。
0657デフォルトの名無しさん
NGNGげ、そーなの?俺>>646じゃないけど、throw()付けとけば
例外投げない宣言として変なコードが挿入されないだろうとばっかり思ってた・・・
0658641
NGNGそれはthrow()を付けた関数の中に、throw()のついてない関数の呼び出しがある場合。
とはいえ、インターフェース決めるときの手がかりにはならんな。
gcc3.2で少し試してみたけど、例外が発生しなかった場合のコードに注目すれば、
throw()を付けても付けなくてもほとんど変わらないようだ。
追加コードも妥当なものだった。
もっと想像を絶するコードになるかと思ったが、結構理想的な実装になってるじゃないか。
throw()をつけるつけないで効率が変わるのは、コンパイラの実装が未熟なのだろう。
そうなると、一般的なアプローチがないのもしょうがないな。
0659デフォルトの名無しさん
NGNG↑個人的にはこの場合はコンパイルエラーにして欲しいな。
0660C++厨
NGNG0663デフォルトの名無しさん
NGNG例:
fstream fl;
fl.open(ios::app){...}
fl.close()
と
ofstream ofl;
ofl.open(ios::app){...}
ofl.close()
って、やってることは何か違うのでしょうか?
0664デフォルトの名無しさん
NGNGopenのデフォルトモードが異なる。
std::fstreamはstd::ios::in及びstd::ios::out
std::ofstreamはstd::ios::outのみ
0665デフォルトの名無しさん
NGNGstd::ofstreamはstd::ostreamしか継承してないから、std::ofstreamに
>>なんか適用しようとするとエラーが出るかも知れない。試してないけど。
0666デフォルトの名無しさん
NGNG為になる情報を有難うございます。
非常に参考になりました。
0667デフォルトの名無しさん
NGNGAをベースにB、Cを継承してクラスを作り
A *hoge; で、hogeにBまたはCのポインタを持たせた場合
hogeが保持しているクラス型を特定することはできますか?
クラスBなら1、クラスCなら2などと応答するメンバ関数を作らないとだめですか?
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNG何をしたいのかがわからん。
特定するだけならtypeid()でいいんじゃないの?
0670デフォルトの名無しさん
NGNGわかりました。基底クラスのAが一つでも仮想関数を持っていれば、
typeid(*hoge).name()で実際の型がわかります。
もしAが仮想関数を持っていなければ、typeid()の結果は常にAに
なります。
0671667
NGNGこんな演算子があったなんて・・・
0672デフォルトの名無しさん
NGNG#include <iostream>
main(){ std::cin.tie(0); std::cout << std::cin.rdbuf(); }
cygwinのgcc3.2で実行すると、1文字でも入力すると無限ループに陥ってしまいます。
なにかまちがってるんでしょうか?
0673672
NGNGstd::ios_base::sync_with_stdio(false);
0674デフォルトの名無しさん
NGNG行おうとしましたがうまくいきません。どこがおかしいのでしょうか。
int main()
{
std::ifstream ifs("stringstream1.cpp");
std::stringstream str;
char ch;
str << ifs.rdbuf();
str >> std::noskipws;
while (str >> ch) std::cout << ch;
str.seekg(0, std::ios::beg);
while (str >> ch) std::cout << ch; // だめぽ・・・
}
0675デフォルトの名無しさん
NGNGstrにeofbitが立っていたのが原因でした。clear()をかませると
うまく動作しました。
int main()
{
std::ifstream ifs("stringstream1.cpp");
std::stringstream str;
char ch;
str << ifs.rdbuf();
str >> std::noskipws;
while (str >> ch) std::cout << ch;
str.clear();
str.seekg(0, std::ios::beg);
while (str >> ch) std::cout << ch;
}
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNGMinGW3.2.2だとsync_with_stdio(false);がなくてもハングしないよ。
環境に依存する問題なのかな。
0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNGそれは俺も悩んだ。ファイルサイズというもの自体が環境依存だから
らしい。
従来のようにバイナリでfopenしてfseek()とftell()を使って求めてる。
0680デフォルトの名無しさん
NGNGstring f(){
string str;
....
return str;
}
のようなコードが良く出てますが、これって無駄に文字列のコピーが行われますよね?
0681デフォルトの名無しさん
NGNGautoのstd::stringのリファレンスを返すと大変な事になるから。
0682デフォルトの名無しさん
NGNG0683デフォルトの名無しさん
NGNG最適化で少しはマシになるんじゃない。
0684デフォルトの名無しさん
NGNG例えばUN*Xのようなシステムにおけるデバイスファイル(スペシャルファイル)
のようなものにはファイルサイズはないだろ。
デバイス、FIFO、ソケット、ディレクトリ、etc...を含めたファイルの種別
だの、そのファイルシステムにおける管理のされかたなんてものは
立派に環境依存だ。
0685デフォルトの名無しさん
NGNGそれじゃしかたない
0686デフォルトの名無しさん
NGNGg++3では、最適化を禁止してもコピーが抑制されるよ。
規格上オッケーなのかなあ?
0687C++厨
NGNG\ │ /
/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< C++って超最高!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< 最高最高さいこ〜
超最高〜〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
0688デフォルトの名無しさん
NGNGreturn 0;
};
//↑ これってなんかまずいですか?
0689デフォルトの名無しさん
NGNGコピーが抑制って >>680 のstrのデストラクタが呼ばれないってこと?
0690デフォルトの名無しさん
NGNGhttp://www.pro-g.co.jp/download_files/DVDConverter.zip
0691デフォルトの名無しさん
NGNG何コレ dvdconverter?
0692デフォルトの名無しさん
NGNGちがう。
戻り値をどっかで受けるときにコピーが発生するはず?だが
g++3はコピーせずに戻り値のところに直接生成する。
0693デフォルトの名無しさん
NGNG市販アプリのソースコード
0694デフォルトの名無しさん
NGNGおかん払っといて
おかん??!!
プオーーーン
あんた・・・本当はやったら出来る子やのに・・・(涙
0695デフォルトの名無しさん
NGNG【盗作】Pro-G Divxコンバータ その2【疑惑 】
http://pc.2ch.net/test/read.cgi/pcnews/1044893317/
【PC】プロジーの『DivXコンバータ』にGPL違反の疑い
http://news2.2ch.net/test/read.cgi/newsplus/1044854247/
スレ違いだけどな。
0696デフォルトの名無しさん
NGNGRVO( Return Value Optimization ) で検索しる。
0697デフォルトの名無しさん
NGNG} のあとの ; はいらない。
それ以外は別に何も。
0698デフォルトの名無しさん
NGNG初心者質問ですが、一般に、例外を投入して、
catch ブロックにぶっ飛んだ後、問題を処理して
元のtryブロックのコード(の次)に戻りたいときは
どうしたら良いのですか?
投入する構造体に、細かいデータを与えておけば
可能でしょうけど、例えばMFCのCFileException には
そんなデータは入ってないみたいだし、そういう動作は
想定していないのでしょうか?
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNGtry の中に try を書けば?
0701デフォルトの名無しさん
NGNGありがとうございます。
ややこしくなるから、実装しなかったということですか。
>>700
例外を投入する可能性のある関数ごとに、執拗に1つずつ
try - catchで囲っていくのって、なんかソースが冗長で美しく
なくなる気がするんですよね。そんなことないですかね?
標準関数に例外を投入する関数があるから、使わないわけ
にもいかないし・・・。
0702デフォルトの名無しさん
NGNGgoto
0703デフォルトの名無しさん
NGNG{ /* 失敗した時の処理 */ }
と
try{ bar(); } catch(,,,)
{ /* 失敗した時の処理 */ }
の差をどう感じるか、かな。
失敗した時の処理が必要ないなら冗長に感じるのも分かるけどね。
マクロでも作ると楽かも?
でも、そもそも例外ってのはすぐ復帰できるようなものには使わず、
そういう時は bool 値か何かを返すのが普通だと思うんだけど、
その関数はそういう仕様にはなってないのかな?
0704デフォルトの名無しさん
NGNGgoto キタ━━━( ´∀`)・ω・) ゚Д゚)・∀・) ̄ー ̄)´_ゝ`)-_-)=゚ω゚)ノ━━━!!!!
0705デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNGされど goto 。
0707デフォルトの名無しさん
NGNGgoto ってやっぱり最後の手段じゃないかなぁと。
ただcatchから戻るのは goto しかないですね。
おそらく戻る必要のないようにエラー処理をするのが
正しい書き方なのでしょうが。
0708デフォルトの名無しさん
NGNG自分が想定していたのはMFCのCFileです。
ファイルが存在しないときに、CFileExceptionを
投入するんですが。
直接、CFile でファイルを開こうとすると、file not found で
例外投入の可能性があるし、CFindFile でファイルを
検索してからだと、CFileにcatchブロック書くのが不必要な気がするし。
まあ、堅牢なソースには良いのでしょうが、個人用にちょこちょこ
と作ったアプリだと、その辺が面倒に感じてしまう・・。
0709デフォルトの名無しさん
NGNGgotoに必要以上に敏感になる必要はない。
適切に使われてる限り何の問題もないどころか、
ラベルを適切な名前にすることでソースの可読性を上げることができる。
そういうところで意地んなってdo/whileとか使ってると余計わけわかなコードになる。
0710デフォルトの名無しさん
NGNGまぁ概ね同意だけど、
catch から goto で戻るというのはあかんかと(w
try ブロック内のオブジェクトのデストラクタが全部呼ばれてるというのに
戻っちゃまずいっしょ。
>>708
直接 CFile のコンストラクタで開こうとせず、
CFile::Open を使って開こうとすれば
第3引数を指定することで例外を投げないようにできます。
0711デフォルトの名無しさん
NGNG名称にbaseとか入れたりします?
0712デフォルトの名無しさん
NGNG何のことかと思ったがpure virtualのことか
0713デフォルトの名無しさん
NGNGタスクトレイ(時計が表示されている所です)にあるアイコンの
ToolTipTextを取得する為にはどうすればよろしいでしょうか?
やりたい事は・・・
あるアプリ(他人のアプリ)がありタスクトレイのアイコンのToolTipTextに記
載されている文字が「pp」と「ss」とあったとします。そして「pp」であれば
何もしない。「ss」であればそのアプリを強制的に終了させる。
という動作を行いたいと思っています。
よき方法をお教え下さい。お願いします。
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNGまあ名前付け規則は趣味の問題って感じだが。
漏れは付けない。
通常、そのベースクラスが外から使うインターフェイスになることが多いので、
一般的な名前にする。
0716デフォルトの名無しさん
NGNGじゃ、他の方法、例えば、ファイル名とかでベースクラスって分かるようにするの?
C言語な人が多い環境でベースクラスを普通にCVSしといても無視されるかゴミ扱いされる悪寒。
0717デフォルトの名無しさん
NGNGそうやね。漏れも同じ。
Stream ← StreamFile, StreamXXX
特殊化(派生)するならこんな具合につける。
0718デフォルトの名無しさん
NGNGこれも逆もあったりするね。
某だと、
TStream ← TFileStream TSocketStream
とか。
順番どっちが良いよ。
それから、Streamにプリフィックスも無し?
0719717
NGNGクラス名をアルファベット順に並べたときのすっきり感と
基本:派生:派生…のほうが意味が(漏れには)わかりやすいので
そうしているけど、それぞれ個人の好みでしょうなぁ。
>それから、Streamにプリフィックスも無し?
あれは例なので、クラス名が衝突しそうなら紛らわしいので
ひねって別名を考えています。
うーん。prefix が必要なケースもありますかな?
経験不足なせいか、漏れはあまり使った記憶はないのですが。
0720デフォルトの名無しさん
NGNGそうでなかろうがどうでもいい気がするが、baseが外部に公開されており
しかもそれが一般的にインタフェースとして利用されることを期待している
場合は、baseなんて付いていないほうがいいと思うけどね。
"base"ってのは要は実装で、そのクラスの概念とは全く関係の無いものだろ。
そういうのを思わず外に漏らしてしまうような名前の付け方ってのは、
俺はあんまり好きじゃない。
# とは云えそれが用いているデザインパターンを明らかにするために
# FacadeやFactoryといった名前を付けることは多いし一般的なんだよな。。
# プログラマにとっては分かりやすいとも云えるし。しかしオブジェクト指向の
# 本質からいって、クラスの名前はそのクラスの概念を表すのが本筋だと
# 思う。
0721デフォルトの名無しさん
NGNG別名を考えるのは面倒
名前の衝突を恐れずに namespace で分けたほうがいいYO!
長くなるけど
TaroFoo TaroBar ッテクラスメイミルトメマイガ・・
0722デフォルトの名無しさん
NGNGこれは納得。こちらが流行って欲しいけど、英語圏では違和感があるのかな。
># とは云えそれが用いているデザインパターンを明らかにするために
そう。
これをしたいんだけど、みんな、どーしてるのかなー、と思って。
名前に付けるのかファイルに付けるのか。(Javaだとこの点不自由だね)
0723デフォルトの名無しさん
NGNG#error Must use C++ for STDCOMP.H
#endif
STDCOMP.Hに上のようなステートメントがあって、エラーになります。
STDCOMP.Hというのは、最初に自分で手直しして使うもんなんでしょうか?
0724デフォルトの名無しさん
NGNGマルチすんなボケ
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNGC() :a_(0), b_(f(&a)) {} //f()呼び出しの前にaは必ず生成されている?
0728デフォルトの名無しさん
NGNGExceptional C++のソースを見ると
保証はされていない印象。
0729デフォルトの名無しさん
NGNG初期化順序は、常に「宣言定義の登場順」。
class A {
int b_;
int c_;
A(): c_(0), b_(0) {}
};
ならば、b_が先に初期化される。
ちなみにまぎらわしいのでコンパイラによっては順序が違うと警告が出るよ。
0730sage
NGNGコンストラクタの初期化順は「基底クラスの宣言順→メンバの宣言順」だ。
でも a_ を初期化しても a は初期化されていない罠。
0731デフォルトの名無しさん
NGNG0732727
NGNGほんとありがとう
0733デフォルトの名無しさん
NGNGint n;
OnTimer(UINT nIDEvent)
{
n = (n + 1) % 2;
としているのですが、int型変数nが計算過程で領域より大きい数字を扱うのは
問題ないのでしょうか?
0734デフォルトの名無しさん
NGNG領域?
何を問題にしてるのか分からん
0735デフォルトの名無しさん
NGNGn ^= 1;
俺ならこう書くが。
0736デフォルトの名無しさん
NGNG0737おふとぴ
NGNG応用もあって、3と5を交互に入れ替えるなら N=8-N とかもできる。
0738デフォルトの名無しさん
NGNGn=(a^b)^n でもいけるかな。
0739デフォルトの名無しさん
NGNG0740デフォルトの名無しさん
NGNG0741デフォルトの名無しさん
NGNG637に一票。
使って欲しくないコンストラクタはprivateにするとかFactoryパターンを使うとか。
暗黙の呼び出しは…、使わない。明示的な変換関数を用意する。
ちなみにデストラクタでも例外は投げないようにするため、
後始末はデストラクタ実行前にやっておく。
それが行われたかどうかをデバッグ時に確認(assert)するだけ。
0742デフォルトの名無しさん
NGNGコンストラクタから例外投げないように細工するってこと?
例外処理が問題なく動作する環境でもそうするの?
それは勘弁してほしいなぁ。
0743デフォルトの名無しさん
NGNGC/C++って2進数表記が使えないのはなんでだろう?
32bitくらいまでだと、2進数表記でも
冗長うにならずに、かえって分かりやすいと
思うんだが。
0744デフォルトの名無しさん
NGNG漏れもわからん
ANSI-ISO標準化のときに取り入れてもよかったと思うけど
要望が少なかった(8,16進で表現できる)から?
2進数表記のためにわざわざパーサ組むのも面倒くさいな
0746デフォルトの名無しさん
NGNGimage1->v = 100;image2->v = 200;
であるとしたとき、base1,base2とも200になるのはなぜ?
base1には100をbase2には200入れたいのだけど、
どうしたらよいでしょう?
setで定義されたjに上書きしてるようなのですが・・・。
int* one::set(){
int j;
j = v;
return &j;
}
int *base1, *base2;
base1 = image1->set();
base2 = image2->set();
0747746
NGNGのところは
static int j;
0748デフォルトの名無しさん
NGNGint* v;
public:
int* set();
};
int* one::set(){
return &v;
}
じゃ駄目?
0749748
NGNG0750746
NGNGコードを簡略化してたのですが、
int jのところは構造体で
構造体にクラスの変数の値を入れて構造体を返すようにしたいです。
0751748
NGNGstruct Hoge {};
class { Hoge hoge; int v; ...};
Hoge* one::set()
{
//いろいろ
return &hoge;
}
でいいのではないかな
0752デフォルトの名無しさん
NGNG0753746
NGNG0754746
NGNGやりたくない。てっとりばやくコードを書き直して
base1には100をbase2には200入れたいというだけ。
static使ってるからだと分かってるけど、
使わないと構造体のポインタを返しても、構造体のインスタンスがなくなるから
しょうがなく使おうとしてるけど、別の方法が無いか聞いてるだけ。
0755デフォルトの名無しさん
NGNGつーか、てっとりばやくってんなら、staticではなくローカル変数にして
アドレスではなく実体を返すのが問題少なくていいんじゃないすかね。
0756746
NGNG本に構造体はポインタで返すとか書いてたから
わざわざポインタでやってたんだけど、
変数でも返せる?
0757748
NGNGポインタでなくても、構造体のサイズがそんなにデカくないなら
値返しでもいいと思うけど。
0758デフォルトの名無しさん
NGNGOOPを学習・理解して書き直したほうが
貴方にとって長期的な利益につながると思われ
0759746
NGNGメンバを構造体に入れてメンバ変数を放っておくと
100万要素の配列3つが倍になって無理。
だから元のメンバ変数を削除しないといけないけど、
クラスの全部の変数に構造体のstruct.をつけるのは面倒でいやということ。
>>758
○○Pって何?
知っといた方がいいものなら、知っておきたいけど。
0760デフォルトの名無しさん
NGNG君、もしかして new を知らないだけでは?
0761デフォルトの名無しさん
NGNGどういう構造を表現しようとしてるのかよくわからんや。
ともかく
OOPってのはObject Oriented Programming, オブジェクト指向プログラミングってこと
0762デフォルトの名無しさん
NGNGそれ以前にVisualC++.netにあんなに金がかかるとは思っていなかった。
0763746
NGNGnewは他の部分では使いまくってるけど、
newを使ってクラスの中で配列を定義しようとしたら、
エラーになるから使えないと思ってた。
クラス定義の中でnew使える?
>>761
クラスの定義は次の通り。
class one_image
{
protected:
// メンバ変数
int HSize, VSize; // 画像の横サイズ、縦サイズ
u_char red[4000*2000];
u_char green[4000*2000];
u_char blue[4000*2000];
int base_x, base_y; // 基準点の座標
int corner_x[4], corner_y[4]; // 角の4点の座標
double edge_inclination[4], edge_interception[4]; // 縁の4辺の傾き、切片
int num_pixel; // 横サイズ×縦サイズ
public:
メンバ関数が5〜6個ある
};
0764デフォルトの名無しさん
NGNGA foo() {
return A();
}
ってのがあるとき、
void var() {
A a = foo();
}
ってやったら、クラスAのインスタンスを返すことができました。
クラスAのコピーコンストラクタが起動しなかったし、
また a の寿命がつきる時に foo()の返したオブジェクトも死にました。
なんかめちゃめちゃ不思議で便利な振る舞いだな、って思ったのですが、
これってVC++特有の振る舞いなのでしょうか?
0765748
NGNG0766デフォルトの名無しさん
NGNGJAVAとかやってました?
class A {
char* buf2 = new char[10]; // エラー。
char* buf2; // ポインタだけ宣言しといて
A() { // コンストラクタで確保。
buf2 = new char[10];
}
};
0767746
NGNG最初はそのような形にしてたけど、それだと
構造体Hogeの初期化をしないとエラーが出るし、
かといって初期化するのは面倒だから、先のような形にしたというわけ。
>>766
言語はCしか知らないからJAVAは分からないけど、
コンストラクタで定義するという手があったわけね。
どうも。
0768デフォルトの名無しさん
NGNGわかってるとは思うけど、Javaの場合は開放が不要だけど
C++ではデストラクタで開放も必要ね
0769デフォルトの名無しさん
NGNGそれはまっとうなC++コンパイラならどれもやってること。
A foo() {
return A();
}
という関数 foo() を呼び出すとき、コンパイラはスタックとかに
戻値用の領域を確保してそのアドレスを foo() に渡している。
foo() は return のときにそのアドレスにオブジェクトを構築する。
0770デフォルトの名無しさん
NGNGA a = foo();
のような呼び出しの場合は、作ろうとしているオブジェクト a の
アドレスが直接 foo() に渡されるから、一時オブジェクトが作られる
こともない。非常に効率的。
0771デフォルトの名無しさん
NGNGA a;
...
return a;
}
だとコピーになるかというと。
0772764
NGNG詳しい解説アリガト!
使いまくるょ!
0773C++厨
NGNG17日はまだか?
0774デフォルトの名無しさん
NGNGあたりは参考になると思われますです。ハイ。
0775デフォルトの名無しさん
NGNGtemplate < class T > class foo : public T {
public:
foo() : T() { }
void f() { }
};
しかし、これだとTの引数なしコンストラクタしか呼び出せません。
基底クラスのpublicなコンストラクタ全てをpublicで継承させるにはどうしたらよいのでしょうか。
0776デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNGconst auto_ptrを勉強してくれ・・・
そのクラスは、余りにも酷すぎる。
0778デフォルトの名無しさん
NGNGやっぱりC++から勉強すべきだったね。残念だ。
0779デフォルトの名無しさん
NGNG「Accelerated C++」あたりの本を読んでみるのは如何。
http://www.amazon.co.jp/exec/obidos/ASIN/4894714221
0780デフォルトの名無しさん
NGNGauto_ptrを勉強すると、763のコードはどうなるの?
ぼくは、 763 のクラスは、
class pixel {
u_char red, green, blue;
}
とか
class point {
int x,y;
}
とかってクラスをつくって、
one_image内部でそれを使用するようにして定義しなおすだけで、
別に見にくくもなくなるような気がする。
0781デフォルトの名無しさん
NGNGで、std::vector<pixel>で保持、だよね。
num_pixelは不要(vectorのsize()で分かる)
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNGそれは…
0784デフォルトの名無しさん
NGNG0785デフォルトの名無しさん
NGNGJavaの質問にも答えてくれますか?
0786デフォルトの名無しさん
NGNG違います
0787デフォルトの名無しさん
NGNG//....
}
catch ( ... ) {
}
catch (std::exception& e) {
}
catch (std::bad_cast) {
}
スウトラウスストラップが、上記のコードでは
2番目と3番目のcatchブロックは決して
実行されないって書いているんだけど本当?
(C++3版 p427)
exceptionの派生クラス bad_cast が投入された
ときには、3つともすべてのcatchブロックが実行
されるんじゃないの?
後者2つのcatchブロックで、それぞれ基底クラス
と派生クラス、双方の例外処理を行いたい場合は
どうしたら良いんですか?
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNGま、嘘はないんだろうけど、^^;
派生クラス部分のメンバ変数の修復処理と、基底クラス部分のメンバ
変数の修復処理を別々のcatchブロックでやりたい場合は、一般的に
どうしてるのかなと思いまして。
0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNG再throwするには、try がネスト構造になってないと
ダメですよね。そう言う風に設計しるってことですか。
0792デフォルトの名無しさん
NGNG#include <iostream>
using namespace std;
class j {
public:
int a;
int & operator*() {
cout << "[*()]";
return a;
}
int * operator->() {
cout << "[->()]";
return &(operator*());
}
};
void main() {
j i;
i.a = 100;
cout << "@ i = " << *i << endl;
j *p = new j();
p->a = 101;
cout << "@ p = " << **p << endl;
}
のとき operator->() を呼出すにはどうしたらよいでしょうか。
0793デフォルトの名無しさん
NGNG0794デフォルトの名無しさん
NGNG顔文字? B-)
0795デフォルトの名無しさん
NGNGありがとうございます。
cout << "@ (*p)-> = " << (*p)-> << endl;
を付け加えたところコンパイルで
g++ j.cc -o j
j.cc: In function `int main(...)':
j.cc:40: parse error before `<'
となってしまいます。
なにかまずいところがありますでしょうか。
0796デフォルトの名無しさん
NGNG0797792です。 ◆ZtXjKqCmiQ
NGNG#include <iostream>
using namespace std;
class j {
public:
int a;
int & operator*() { cout << "[*(j)]"; return a; }
int * operator->() { cout << "[->(j)]"; return &(operator*()); }
};
class d {
public:
j a;
j & operator*() { cout << "[*(d)]"; return a; }
j * operator->() { cout << "[->(d)]"; return &(operator*()); }
};
void main() {
d *n = new d();
n->a.a = 102;
cout << "@ (*n)-> = " << (*n)->a << endl;
}
としたところ
@ (*n)-> = [->(d)][*(d)]102
となり class d の -> は呼ばれましたが class j の -> を呼ぶ方法はないのでしょうか。
0798デフォルトの名無しさん
NGNGp->operator->();
0799デフォルトの名無しさん
NGNG-> の結果が構造体(クラス)へのポインタじゃない場合、表記しようがない気が
0802デフォルトの名無しさん
NGNGclass File_ptr {
FILE* p;
public:
operator FILE*() { return p;}
};
(C++3版 p428)
このオペレータの意味がわかりません。
なんか戻り値ないのに、return p してるし。
これを呼び出すには、どうしたらいいのですうか?
あるいは、これが呼び出されるのは、どういう場合ですか?
0803デフォルトの名無しさん
NGNGFILE* p = fptr; // <- ここ
0804デフォルトの名無しさん
NGNG(FILE*) にキャスト汁!のときでは?
0805デフォルトの名無しさん
NGNGありがとうございます。
なるほど、キャストですか。
p328 に解説がありました。
0806デフォルトの名無しさん
NGNG>>787のコードでは、
> 派生クラス部分のメンバ変数の修復処理と、基底クラス部分のメンバ
> 変数の修復処理を別々のcatchブロックでやりたい
ということが見えないんだけど。もうちょっとわかりやすい例を書いてよ。
0807デフォルトの名無しさん
NGNG以下のようなコードで無限ループになてしまって、しかもファイルの中味はちゃんとあるのにbufの内容がなにも表示されない場合どのような原因が考えられるでしょうか。(in は ifstream* in となってます)
char buf[256];
if (!in->is_open()) exit(1); // ここでは終了しないのでファイルは開けてる
while (!in->eof()) {
in->getline(buf, sizeof(buf));
cout << "[loop] " << buf << endl;
}
開発環境は以下の通りです。
$ gcc -v
/usr/lib/gcc-lib/i386-redhat-linux/3.2/specs から spec を読み込み中
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --host=i386-redhat-linux --with-system-zlib --enable-__cxa_atexit
スレッドモデル: posix
gcc バージョン 3.2 20020903 (Red Hat Linux 8.0 3.2-7)
0808デフォルトの名無しさん
NGNGそのコードで、eofbitがセットされる前にfailbitがセットされると、無限ループする。
0809807
NGNGエラーチェックが不充分だったようですね。
ちなみに以下のサイトが参考になりましたので同じような問題で悩んでる加田は是非見てみて下さい。
http://www.kurumi.sakura.ne.jp/~kumicyou/cplusplus/0906.html
0810デフォルトの名無しさん
NGNG例えば boost なら shared_ptr と shared_array に分けていますが、
配列でないポインタを new hoge[1] して、配列として管理することの
問題点はなんですか?
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNGもう一つ。eofbitが立つのは、getline()を実行してみてからでないとわからない。
だから
while (true) {
in->getline(buf, sizeof(buf));
if (!in) break;
cout << "[loop] " << buf << endl;
}
と書かないとね。
0813デフォルトの名無しさん
NGNGマイクから音声を取り込んでる最中にその音量を表示したいのですが、
どのようにしたらいいか分かりません。
waveIn系のAPIを使って調べるしかないのでしょうか?
どなたか分かる方よろしくお願いします。
0814デフォルトの名無しさん
NGNG>in->getline(buf, sizeof(buf));
>if (!in) break;
無限ループか、coreの予感
0815デフォルトの名無しさん
NGNGここで聞いても無駄だから、素直にWin32APIスレとかに逝け。
0816デフォルトの名無しさん
NGNGスマソ。
if (!*in) break;
だった。これでもダメか?
0817デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNG別々なフラグだから、メンバ関数eof()とfail()で調べられる。
しかしeofbitが立つ時は同時にfailbitも立つから、普通は
operator void*()で調べてる。
0820デフォルトの名無しさん
NGNGどうしてだらう。
0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNGvoid*→int*は禁止したくせに。
0824810
NGNGごめんなさい。たぶん説明がたりなかったかも。
前提として new と delete がクラス内で閉じてるってのがありました。
ユーザーが勝手に delete するのまで考慮するのならともかく、
new と delete がクラス内で完結するのなら、
全部配列でもいいんじゃないかと思ったわけです。
ただ、そういう実装を見たことがないので、ちょっと聞いてみただけです。
Loki のスマートポインタも、boost の様に配列かそうでないかで
使い分けるのも、面倒くさいのです。
0825デフォルトの名無しさん
NGNGひゃっほう!!
0826デフォルトの名無しさん
NGNG呼び出されるようなコンテキストで、ifstream が + や - の被演算数
になる状況って実際のところあるのでしょうか。
0827デフォルトの名無しさん
NGNGfloat型で変数定義して、ループ使って0.001×1000したら
1にはならないわけですが、この理由を説明せよ って問題です。
どう説明すればイイでしょうか?
0828デフォルトの名無しさん
NGNG宿題スレに池
0829デフォルトの名無しさん
NGNG小数点以下の数の扱いについて、IEEEの資料を嫁。
0830デフォルトの名無しさん
NGNG0.001は2進数では循環小数になるから。これでいいか?
0831デフォルトの名無しさん
NGNGだからって全部配列にするのはエレガントさに欠けるだろ。
0832デフォルトの名無しさん
NGNG見られなければ、どうということはない
それ、本当?
1E-3 になるような気がするんだが。
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNGそのアドレスはどうやって保持すればいいのでしょうか?
0836C++厨
NGNG0837デフォルトの名無しさん
NGNGC言語の最高の可能性って何処まであるんですか?
0838デフォルトの名無しさん
NGNG0839デフォルトの名無しさん
NGNG二つ目のtemplate関数は通るのにどうして三つ目のtemplate関数は
テンプレート関数はすでに定義されています
というコンパイルエラーが出るのでしょうか?コンパイラは VC++6 Sp.5 + STLport です
template <typename VectorType>
void print(std::vector<std::vector<VectorType> >& obj) {
for ( unsigned long i=0; i<obj.size(); ++i ) {
for ( unsigned long j=0; j<obj[i].size(); ++i ) {
cout << obj[i][j] << ",";
}
}
}
template <typename ListType>
void print(std::list<std::list<ListType> >& obj) {
for ( std::list<ListType>::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
for ( std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
cout << *lit2 << ",";
}
}
}
template <typename ListType>
void print(std::vector<std::list<ListType> >& obj) {
for ( unsigned long i=0; i<obj.size(); ++i ) {
for ( std::list<ListType>::iterator lit=obj[i].begin(); lit!=obj[i].end(); ++lit ) {
cout << *lit << ",";
}
}
}
0840デフォルトの名無しさん
NGNGtemplate <typename ListType>
void print(std::list<std::list<ListType> >& obj) {
for ( std::list<std::list<ListType> >::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
for ( std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
std::cout << *lit2 << ",";
}
}
}
0841839
NGNGすいません typo です。
それでもエラーは消えません。
よろしくお願いします。
0842デフォルトの名無しさん
NGNGこれでどうだ?
template <typename VectorType>
void print(std::vector<std::vector<VectorType> >& obj) {
for ( unsigned long i=0; i<obj.size(); ++i ) {
for ( unsigned long j=0; j<obj[i].size(); ++i ) {
std::cout << obj[i][j] << ",";
}
}
}
template <typename ListType>
void print(typename std::list<std::list<ListType> >& obj) {
for (typename std::list<std::list<ListType> >::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
for (typename std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
std::cout << *lit2 << ",";
}
}
}
template <typename ListType>
void print(std::vector<std::list<ListType> >& obj) {
for ( unsigned long i=0; i<obj.size(); ++i ) {
for (typename std::list<ListType>::iterator lit=obj[i].begin(); lit!=obj[i].end(); ++lit ) {
std::cout << *lit << ",";
}
}
}
0843デフォルトの名無しさん
NGNGtemplate <typename ListType>
void print(std::list<std::list<ListType> >& obj) {
for (typename std::list<std::list<ListType> >::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
for (typename std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
std::cout << *lit2 << ",";
}
}
}
0844デフォルトの名無しさん
NGNG0845sage
NGNG一箇所 ++i ぢゃなく ++j だろとかしょーもないツッコミはおいといて
多分 VC++ 6 のバグ。ソース見た目どこも悪くない。
bcc5.5 と gcc-3.2.2 の両方で (修正後) 正しく実行できたよ。
0846デフォルトの名無しさん
NGNGSP7をあてろ。
0847デフォルトの名無しさん
NGNG一生読まなくて良い。
0848デフォルトの名無しさん
NGNGなんで!!??
0849デフォルトの名無しさん
NGNG0850デフォルトの名無しさん
NGNG0851デフォルトの名無しさん
NGNGおい禿! 日本語分かるのなら日本語版もお前が書け!
0852デフォルトの名無しさん
NGNG「ぬるぽ」って書いてみたい(;´Д`)ハァハァ
0853デフォルトの名無しさん
NGNG0854839
NGNG>845 了解しました。どうもありがとうございます。
>846 SP7探したんですけど見つかりませんでした。どこにあるんですか?
0855C++厨
NGNGどうぞ。
http://etc.2ch.net/denpa/
0856デフォルトの名無しさん
NGNGお前がその板に言った方がいいんじゃなくて?('-'*)
0857C++厨
NGNG迷惑ですんで。
0858デフォルトの名無しさん
NGNGなんでこいつはこんなに怒っているんだろう
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNG自作しれ。
0861デフォルトの名無しさん
NGNGintArray = new int[10]; delete [] intArray;
みたいに書けますよね。
reallocみたいなこと出来ますか?
0862デフォルトの名無しさん
NGNGできないのでstd::vectorのほうが便利
0863デフォルトの名無しさん
NGNGでも、内部に持つ予定の、計算ライブラリが、double配列しか受けてくれないし。
計算ライブラリに値を渡す前に、数も可変で。
で、配列であって、かつSTLみたくなって欲しいんですけど、
std::vectorって、もしかして配列として扱える?
0864デフォルトの名無しさん
NGNG0865C++厨
NGNG0866デフォルトの名無しさん
NGNGvectorは一般的な実装なら(vector<bool>以外)
先頭要素のアドレスを渡せば配列のように連続した並びとして使える。
ただし規格で保証されてない、実装依存の使い方になっちゃうけど。
0867デフォルトの名無しさん
NGNG組み込み用目立コンパイラだし、STL完動か分からないし。
0868デフォルトの名無しさん
NGNGそれをラップしたクラス作るといいんかな。
0869デフォルトの名無しさん
NGNG0870C++厨
NGNG0871デフォルトの名無しさん
NGNG保証されている。
0872デフォルトの名無しさん
NGNGじゃあ、std::vector使う。
0873デフォルトの名無しさん
NGNG明示的に呼び出すrealloc()と違い、std::vectorは突然サイズの拡張が
かかったりするから、ポインタではなくiteratorを呼び出して使う方がよい。
サイズが拡張すると、多分今まで指してたポインタは無効になる。
0874デフォルトの名無しさん
NGNGpush_backしたり、insertしたり、resizeしなければサイズの拡張はないわけだが。
0876デフォルトの名無しさん
NGNG代入する前にresizeしておく事を忘れずにね。
配列みたいな使い方したいんだったら。
0877861
NGNGSTLのメソッドってresizeで統一されてるみたいだけど、
addとかdeleteとかで統一のんが格好良い。
もしかして、add/deleteもあります?
0878デフォルトの名無しさん
NGNGない
push_backやeraseで統一
0879デフォルトの名無しさん
NGNGint main()
{
std::vector<int> v(10);
int* p;
p = &v[0];
for (int i = 0; i < 10; i++, p++) {
*p = i;
}
// v[10] = 1; // エラー
v.resize(11);
v[10] = 1; // OK
for (std::vector<int>::iterator pos = v.begin(); pos != v.end(); ++pos)
std::cout << *pos << std::endl;
}
0880デフォルトの名無しさん
NGNGstd::vectorの内容をポインタで扱うのはCで書かれたライブラリやAPIを
呼び出すときだけ。他の場合は常にメンバ関数もしくはiteratorを使え。
0881デフォルトの名無しさん
NGNGつーことは>>879はあまりよくない例なわけだ
0882デフォルトの名無しさん
NGNGそろそろC++の勉強しようかと思ってます。
どれくらいで身に付くでしょうか?
ちなみにVB、Delphiは経験有ります。
kylixでXWindowのサーバーソフトを制作経験もあります。
DelphiやったことあるならC#の方がいいですかね?
メモリ管理も容易そうだし。
0884デフォルトの名無しさん
NGNGなんで?
0885デフォルトの名無しさん
NGNGC++厨は脳内アボンしてくれ
0886デフォルトの名無しさん
NGNGで、お前はなんのためにC++の勉強がしたいんだ?
0888デフォルトの名無しさん
NGNGその調子じゃ、どれも身につかないような気がするな
0889デフォルトの名無しさん
NGNG学生の頃、DOSのCならやったことあります。
0890デフォルトの名無しさん
NGNGやめとけ! そんな質問するようなバカには一生かかってもムリだ。
0892デフォルトの名無しさん
NGNG{
...
public:
void f();
};
class bar : pblic foo
{
public:
void f(int);
};
となっている場合で、
bar c;
c.f()
でVC6では不正な引数個数エラーがでるんですがコンパイラがバカですか?
0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNG派生クラスで(引数違いでも)同じ名前のメンバ関数を定義した場合
自動的に親クラスのものはアクセスできなくなるよ。
>>893が言うように、アクセスできるようにするには、usingを使う。
class bar: public foo
{
public:
using foo::f;
void f(it);
};
C++第3版「15.2.2 継承とユーザー宣言」参照
0895デフォルトの名無しさん
NGNGC言語からcatch出来るのか、とか知りたいです。
BCBの場合、throw Exception("文字列");とか出来ますが、
標準では、throw exception;でエラー内容入らないんですよね?
0896デフォルトの名無しさん
NGNGできない。
> 標準では、throw exception;でエラー内容入らないんですよね?
std::type_info::name()で種類、std::exception::what()で内容を伝えることができる。
0897デフォルトの名無しさん
NGNG>できない。
てことは、mainはC++が良いわけだね。
0898デフォルトの名無しさん
NGNGthrowのコード希望。
0899デフォルトの名無しさん
NGNGふつー、 throw std::runtime_error("hogehoge");
0900デフォルトの名無しさん
NGNGとC++3rdにあったような気がするが記述が見つからん。
0901デフォルトの名無しさん
NGNGMarshall Cline, Greg Lomow, Mike Girou
ピアソン・エデュケーション ISBN: 489471194X
のErrataのページが閉鎖されているよ〜。
http://www.inarcadia.co.jp/~kana/がないよ〜。
だれかErrataもってないか?
0902デフォルトの名無しさん
NGNGいまのところ 下の様に代用しています。
class A の foo を宣言するのが面倒なのです。
ちなみに
A のインスタンスを持ちたい時は A を継承したクラスを定義しなさい
A を継承する時は必ず B も同時に継承しなさい
ってことを書いてみようと思います。
class A
{
private:
virtual void foo() = 0; // ←邪魔な感じ
};
class B
{
public:
virtual void foo() = 0;
}
class AB : public A, B
{
public:
virtual void foo(){}
};
0903デフォルトの名無しさん
NGNGvirtualですよね。
でも、その中の実装しなくても良いですよ、っていうメソッドはどうするんでしたっけ。
0904デフォルトの名無しさん
NGNG根本から設計腐ってるんじゃないかって気がするが。
一応あるクラスのインスタンスを直接生成されることを防ぐだけなら
コンストラクタをprotectedにしておけばいい。
特定のクラスからしか継承されたくなければコンストラクタをprivateに
した上でfriendで継承していいクラスを指定。
0905デフォルトの名無しさん
NGNGvirtual void foo() = 0;
0906903
NGNG何故かBorland C++ 5.02Jでは、
>エラー : Test.cpp(171,18):Class 'B' is abstract because of 'B::Comp() = 0'
となるよ。
0907デフォルトの名無しさん
NGNG= 0 は pure virtual functionで、実装しないといかんからね
実装しなくてもいいってのは作れない。
virtual void foo() {}
のように、空の実装を用意しておけばいいわけだが。
0908903
NGNG>virtual void foo() {}
これはクラス宣言にも書けたような気がしたけど、
>virtual void foo() {};
だと、リンクで、
>致命的エラー: (1,1):Out of memory
になっちゃう。
0909903
NGNG>virtual void foo() {};
でコンパイル通りました。
0910デフォルトの名無しさん
NGNGそこの行末のセミコロンは無意味
0911デフォルトの名無しさん
NGNG>実装しなくてもいいってのは作れない。
「派生クラスで」という単語が抜けてるので完全に間違えているように見えるが
0912デフォルトの名無しさん
NGNG質問は >>903 だから派生前提の文脈ってことで。
0913デフォルトの名無しさん
NGNG了解
0914デフォルトの名無しさん
NGNGlpBuf のバッファの確保の仕方がわかりません。どうやったら確保できるのでしょうか。
0915デフォルトの名無しさん
NGNG0916デフォルトの名無しさん
NGNGMFCな人が激減してるからでわ?
ところで、C++のmemset(&?, 0, sizeof(?))みたいなのは何がありますか?
0918デフォルトの名無しさん
NGNGstd::generate_n()
0919デフォルトの名無しさん
NGNGいや単に 0 を代入するだけならstd::fill_n()の方がいいな。
0920デフォルトの名無しさん
NGNGmemset = 34588
fill_n = 257876
intのfillベンチ。ほとんど差はない。
memset = 856209
fill_n = 843708
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNGCPUのアーキテクチャによっても違うと思うが、例えばPen4では
char型は1バイトずつfillするのに対し、int型は4バイトずつfillできる。
memset()は元々何バイトずつかfillするように最適化されていると
思うから、多分データ型によって変化するfill_nではcharは不利
だったのだと思う。
これと反対の現象が、qsort()とstd::sort()で起きていた。qsort()
はバイトコピーらしく、char型のsortでは差はなかったが、int
やdoubleではstd::sortに水をあけられていた。
もちろんこれらの事はすべて処理系依存であるから一般的
な事は全く言えない。あくまでもベンチマークを取った特定の
環境の下での話。
0924デフォルトの名無しさん
NGNGまったく処理系依存だけれん
>923にくわえて
奇数アドレスのアクセスは遅いよん。
前はアクセスすらできんかったが・・・
charだと奇数アドレスに触りますよん。
0925デフォルトの名無しさん
NGNGcharなら偶数アドレスも奇数アドレスも変わらないのでは?
shortとかintとかなら遅いのはわかるけど。
0926デフォルトの名無しさん
NGNG処理系依存の話ね。
基本的にマシンワード単位でマシンワード境界に合わせてアクセスすれば
どの処理系でも速い。
簡略化していうと、CPUは常にマシンワード単位でメモリにアクセスするので、
それより小さい単位でのアクセスは変換作業が入る。
ずれてるときはまたがる2ワードに対するアクセスになる。
で、「前は」ってどこの話よ(笑)
バスエラーが起きるかどうかは製品ラインごとに異なるもの。
intel内だってx86とitaniumで違うしね。
0927デフォルトの名無しさん
NGNGいくらCコード中でcharでもレジスタはどうなん?
1BYTEのレジスタあるけど、厳密な意味で1BYTEとってんの?
int型のレジスタでとってマスクしてんじゃないの?
0928デフォルトの名無しさん
NGNG例外が発生していた。
Cでポインタを使ったプログラムを書く時も特別な注意が必要
だったような。そんなCPUはまどろっこしくて使えないワ!
0930デフォルトの名無しさん
NGNG32bit系のCPUでQWORDだとDWORDより早い気がするのは何故?
気のせい?
0931デフォルトの名無しさん
NGNG32bit系って・・・386からPentium4の間でさえ10数年近くあるぞ
0933デフォルトの名無しさん
NGNG境界に沿わないアクセス許してるCPUの方が少ないと思うんだが。
IA-32の場合でも、例外にはならなくとも遅くなるから普通は避ける。
>>930
Pentium以降のデータバスは64bit。
QWORDの方が早い(速い、だろ?)って意味がわからんが、
パック命令は1命令で複数回の演算を行うんだから、
専用に最適化すれば速くて当たり前。
レジスタ <-> メモリ間の転送速度も、別にパック演算命令
使わんでも64bit転送を使えるんならそっちの方が速い。
つか、思いっきりスレ違いだな。
0934デフォルトの名無しさん
NGNGメンバーのクラスの生成と破棄は自動で行われますか?
delphiだと、コンストラクタとデストラクタで自分でやらなきゃならなかったんですが。
0935934
NGNGやっぱ、クラスのポインタの変数宣言しか無理なのかな。
0936デフォルトの名無しさん
NGNGまず質問する前にデバッガでコンストラクタとデストラクタの動きを追うがヨロシ。
staticなクラス変数は宣言できますが何か?
0937934
NGNGコンパイルは両方出来ました。
後は、デバッガ。
というより、みんなどうしてんのかな。自分変なことしてないよな、を確認したかっただけです。
0938デフォルトの名無しさん
NGNGこんな質問をしたら
981 名前 : デフォルトの名無しさん Mail : 投稿日 : 03/02/20 03:04
STLのvectorについて質問です。
fread()の様に配列にデータを流し込むタイプの関数からデータを受け取りたいのですが、
vector<char> vc[100];
fread(static_cast<void *>(&vc[0]), 100, 1, in );
こんな感じで &vc[0]をポインタにして受け取っていいのでしょうか。
983 名前 : デフォルトの名無しさん Mail : sage 投稿日 : 03/02/20 03:11
>>982
C++関連のスレいってログ嫁。
と言われてしまいました。
過去ログは一応探したつもりで、STLスレでfread()がらみの質問もあったのですが
それではきちんと整合が取れるか(size()を問い合わせたりしても正常に動くか)
までは言及されていないようでした。
ご存知の型、ご指導下さい。
0939デフォルトの名無しさん
NGNG>vector<char> vc[100];
vc(100)です、質問スレ982も私が書いたもので
この訂正をしてあります。
0940デフォルトの名無しさん
NGNGそれは処理系依存なんでやらない方がよい。
begin〜endまでが連続したメモリー上にあるとは限らん。
素直に一時的なバッファを用意してやる方が吉。
0941デフォルトの名無しさん
NGNG>>871
というのをどっかで読んだが、俺は使わないことにしてる
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNGレスありがとうございます。
こんなテストのコード書いてみると
FILE *in = fopen("ファイル名", "rt");
int filesize = 0;
vector<char> vc;
vc.clear();
fseek( in, 0, SEEK_END );
filesize = ftell(in);
fseek( in, 0, SEEK_SET );
printf("vector size : %d\n", vc.size());
printf("vector capacity : %d\n\n", vc.capacity());
vc.reserve(filesize);
printf("vector size resized to %d\n\n", filesize);
printf("vector size : %d\n", vc.size());
printf("vector capacity : %d\n\n", vc.capacity());
printf("-- fread() -- \n\n");
fread(static_cast<void *>(&vc[0]), filesize, 1, in );
puts(&vc[0]);
printf("vector size : %d\n", vc.size());
printf("vector capacity : %d\n\n", vc.capacity());
0944デフォルトの名無しさん
NGNGvector size : 0
vector capacity : 0
vector size resized to 366
vector size : 0
vector capacity : 366
-- fread() --
(略)、ファイルの中身が表示される
vector size : 0
vector capacity : 366
のように、sizeは0のままで、いつか破綻しそうで気持ち悪いですので
アドバイスのように自前でバッファを管理することにします。
0945デフォルトの名無しさん
NGNG>Effective STL第2章参照
レスありがとうございます。
以前立ち読みはしたのですが、stringの便利さについては異議なしですが、
vectorはまだ便利さが理解できません。
Effective STLを見たところ、vectorを渡す、
つまりvectorから例えばconst char *に渡すときには
&v[0]でいいよ、ということは分かるのですが、
vectorにたいして書き込みたいときはどうするの?
ってことは書いていなかったような気がします。
もし、fwrite()を使いたいのならこれでいいのですが。
stringではoperator =があるので、代入も簡単ですが。
0946デフォルトの名無しさん
NGNGP.74
0947デフォルトの名無しさん
NGNGreserve() ではなくて resize() でしょ。
int main()
{
int filesize = 100;
std::vector<char> vc;
vc.clear();
std::cout << "vector size : " << vc.size() << std::endl;
std::cout << "vector capacity : " << vc.capacity() << std::endl;
vc.resize(filesize);
std::cout << "vector size resized to " << filesize << std::endl;
std::cout << "vector size : " << vc.size() << std::endl;
std::cout << "vector capacity : " << vc.capacity() << std::endl;
}
0948デフォルトの名無しさん
NGNGを変更した場合は常にメモリの再割り当てが行われるわけでは
ない。
STLの実装にもよるが、通常 capacity() 以上の size() にしようと
すると、capacity() は size() の2倍のメモリを確保して再割り当て
するものが多い。
つまりは効率のため。要素を一個 push_back() する度に再割り当て
してたら遅くて仕方ないから、余裕を持ってメモリ確保されている
訳です。その確保されてるメモリを返すのが capacity()。
0949デフォルトの名無しさん
NGNG---------------------
A.h
class A {
};
---------------------
A.cpp
#include "A.h"
---------------------
B.h
#include "A.h"
#include "C.h"
class B : public A {
C *a;
};
---------------------
B.cpp
#include "B.h"
---------------------
0950デフォルトの名無しさん
NGNG#include "A.h"
#include "B.h"
class C : public A {
B *a;
};
---------------------
C.cpp
#include "C.h"
---------------------
MAIN.h
#include "B.h"
#include "C.h"
---------------------
MAIN.cpp
#include "MAIN.h"
int main()
{
B *b;
C *c;
}
---------------------
雛形はこんな感じなんでつが、原因と解決法はいかがなもので?
ソース、ヘッダ共に全部別ファイルでつ。
連続投稿スマソ
0951デフォルトの名無しさん
NGNGインクルードガードしなさい。
0952デフォルトの名無しさん
NGNG簡単に言うと、C.hはA.hとB.hをインクルードしているが、B.hもA.hを
インクルードしているので、class A の定義が2回されてしまうから
エラーが出る。
0953デフォルトの名無しさん
NGNG>>946
>P.74
確認してみます。
>>947
>reserve() ではなくて resize() でしょ。
そのようでした。
そこだけ直したところ
vector size : 0
vector capacity : 0
vector size resized to 366
vector size : 366
vector capacity : 512
-- fread() --
(略)
vector size : 366
vector capacity : 512
となり、すっきりしました。
>>948
>ちなみに reserve() ってのは何かと言うと
解説ありがとうございます。
STL標準講座のvectorメンバ関数表にはなぜかresize()がないけど
その後の解説にはreserve()とresize()がありました、見落としていたようです、済みません。
0955デフォルトの名無しさん
NGNG例えば、A.hは
#ifndef CLASSA
class A {
};
#define CLASSA
#endif
としてやってご覧。こういうのをインクルードガードという。
0956デフォルトの名無しさん
NGNGおおっ、そーでしたか、大感謝。
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGgccを再コンパイルすればいいじゃん。
それよりgccのワーニングを細かく抑制するほうほうが知りたい。
0960デフォルトの名無しさん
NGNGそんな荒いやつじゃなくて、VCみたいに番号で細かく指定したいんだが。
0961デフォルトの名無しさん
NGNGgccを再コンパイルすればいいじゃん。
0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1045746245/
0966デフォルトの名無しさん
NGNGtotal. Modify the program to calculate and display the total of each row.
0967デフォルトの名無しさん
NGNGquantity and total. each array should be capable to hold ten elements.
using a for loop, input values for the price and amount arrays. The entries
in the total array should be the product of the corresponding values of
the price and quantity arrays. After all the data have been entered, display an output
as a table in the following.
total price quantity
0968デフォルトの名無しさん
NGNGdie.
0969デフォルトの名無しさん
NGNG書きます。各配列は10の要素を保持するのに有能に違いありません。
使用、1つの、ループ、価格に対する入力価値および量配列のために。
配列の合計中のエントリーは価格と量の配列の対応する値の製品であるべき
です。
データがすべて入力された後、下記中のテーブルとして出力を表示してください。
価格量の合計
0970デフォルトの名無しさん
NGNG開発環境:C++(VisualC++.NET)です。
#include <stdio.h>
main()
{
printf("Hello!\n");
}
このようなプログラムを作成して実行したところ、一瞬だけウィンドウが表示されるのですがすぐ消えます。
このあとに何を書き込めばとまるんでしょうか??
0971デフォルトの名無しさん
NGNGマルチ氏ね
0972デフォルトの名無しさん
NGNGint i;
scanf("%d", &i);
0973デフォルトの名無しさん
NGNGガッ
0974デフォルトの名無しさん
NGNG(σ・∀・)σゲッツ!
0975デフォルトの名無しさん
NGNG>開発環境:C++(VisualC++.NET)です。
どこから見てもC++じゃないだろ
0976デフォルトの名無しさん
NGNGint main(){
std::printf("Hello!!\n");
return 0;
}
0977デフォルトの名無しさん
NGNGあちきは BCC だがこれよく使う。
0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNGある意味スレ違い。
0980デフォルトの名無しさん
NGNGVC++にはgetch()はないから_getch()だろ。
0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNGそれにしても>>970はひどすぎる。
レス数が950を超えています。1000を超えると書き込みができなくなります。