C++相談室 part16
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v
NGNGただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。
過去スレ、関連スレ、関連リンクなどはこちら>>2-15
0002v(^・^)v
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/
規格書の重箱の隅的な話題などが読めます。
[C/C++ Users Journal]
http://www.cuj.com/
[Object Management Group]
http://www.omg.org/
[Association of C & C++ Users]
http://www.accu.org/
[news]
news:comp.lang.c++
news:comp.lang.c++.moderated
[ML]
cppll(日本語) http://www.trickpalace.net/cppll/
メインページにC++に関する良質なC++日本語リンク集があります。
0003v(^・^)v
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/
news news:gmare.comp.lib.boost.devel
0004v(^・^)v
NGNGamazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/(翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/(翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/(翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/(翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/(翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/(翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/(翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/(翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
0005v(^・^)v
NGNG[GCC]
http://gcc.gnu.org/
(Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
1.0 http://www.microsoft.com/japan/msdn/netframework/downloads/sdk.asp
1.1βhttp://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/MSDN-FILES/027/002/056/msdncompositedoc.xml
[MSVC] コンパイラ以外のツール、ドキュメントです。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
(一括ダウンロードの時は上のURLに続けてこちらを入力してください
default.htm?p=/msdownload/platformsdk/sdkupdate/psdk-full.htm)
なお上記三者を組み合わせたプログラミングにおいてはこちらが分かりやすいです。
http://www.geocities.com/Tokyo/Ginza/5432/documents/winprog/index.html
[DigitalMars]
http://www.digitalmars.com/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm
0006v(^・^)v
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
0007v(^・^)v
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://pc2.2ch.net/test/read.cgi/tech/1041328679/l50
part15 http://pc2.2ch.net/test/read.cgi/tech/1043605481/l50
■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc2.2ch.net/test/read.cgi/tech/1037795348/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
STLスレッド
part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html
0008デフォルトの名無しさん
NGNG0009v(^・^)v
NGNG[GCC]
GCCについて http://pc2.2ch.net/test/read.cgi/tech/1007731543/l50
祝・GCC 3.0リリース http://pc.2ch.net/test/read.cgi/unix/992942337/l50
[Digital Mars]
Code of the Nerds" Digital Mars C/C++
http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[Borland]
C++Builder相談室
part1 http://piza2.2ch.net/tech/kako/969/969458279.html
part2 http://pc.2ch.net/tech/kako/997/997074601.html
part3 http://pc3.2ch.net/tech/kako/1016/10160/1016065855.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1035596146/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1045542179/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1030493157/l50
[VisualC++]
VisualC++相談室
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc2.2ch.net/test/read.cgi/tech/1036897197/l50
0010v(^・^)v
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1039607377/l50
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
COM の世界を斬る!
http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
ATL 相談室
http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
managed C++ やろうぜ!!
http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50
>>8 連続6回までしか書けないみたい。thanks
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0018デフォルトの名無しさん
NGNGすげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0020デフォルトの名無しさん
NGNGするんだよな。
0021デフォルトの名無しさん
NGNG次に実際のプロジェクトの設計やコードを見て勉強したいと考えています。
VC++のオープンソースプロジェクトでソースや設計が比較的綺麗なものってありませんか?
0022デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNGいや、本当なんだってば(汗。
-vi オプションを付けるとインライン展開を使ってくれるが、
それでもファイルサイズは膨れあがったりしないよ。
ちなみに -D_RTL_DLL を外して -vi オプションを付けた時と
付けない時でファイルサイズを比較しても、そんなに大きな
差はない。
0025デフォルトの名無しさん
NGNG> ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。
この部分がよくわかりません。DLLを使えば、元々スタティックリンクされる
はずだったコードがDLLに追い出されるので、その分ファイルサイズが
小さくなるという意味で書いたのですが。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGSTLはDLLに追い出せてないと思います。何せテンプレートで、コンパイル時
にしかわからないものばかりのはずですから。
ただ、インライン展開を抑制しても有効にしても、STLを使った時と使わない時
でファイルサイズが10倍も違ったりはしません。
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG物凄い気持ちいいオナニ。
辞められなくなってサルになるよ。
そして実際の子作りは永遠に遠のいた夢となります。
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG何度も言っているが、
「Visual C++はC++ではない。」
誤解無きよう。
0036デフォルトの名無しさん
NGNGハァ?
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGお分かりか?
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG解決努力の有無が重要だよな。
0044デフォルトの名無しさん
NGNGならないと思うんだけどな。
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGライブラリをビルドして.lib作って普通に別のプログラムで
ヘッダだけインクルードしてそのスタティックライブラリを
リンカに読ませてビルドできるんだけど、OKなんだよね?
0048デフォルトの名無しさん
NGNGアフォですか
004947
NGNG実体化してない状況でlibはおっけー?という話なんだが
その辺を聞きたい。
0050デフォルトの名無しさん
NGNG実体はお前がincludeしたヘッダの中にあるだろうが。
0051デフォルトの名無しさん
NGNG前者ならコードのサイズはゼロだからlib,a,dllは作れない。
(staticの実装は別)で後者ならもうそれは立派なクラスだから
libでも、aでも、dllでも、oでも好きにするがいい。
0052デフォルトの名無しさん
NGNG最適化で f==gになるんだろうか?
0053デフォルトの名無しさん
NGNGVC6だとテンプレートの展開結果については
まとめてくれることがあるみたい。
.mapファイル吐かせたら、複数のシンボルが同じアドレスになってた。
0054デフォルトの名無しさん
NGNG取得して表示させたいんだが どんな感じで書けばいいんだろう。
初心者な質問でごめんなさい・・・
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNGclass A
{
int hoge_a[10];
char hoge_b[20];
:
:
public:
A(){memset( this , 0 , sizeof(A));}
:
};
このような使い方は有りでしょうか?
さらにメンバにvirtual関数があった場合も使用しても問題ないのでしょうか?
0057デフォルトの名無しさん
NGNGアァ・・・ (; ´Д`)
0058デフォルトの名無しさん
NGNGついでに言うと、Cのお馬鹿な文化はC++には持ち込むなと。
0059デフォルトの名無しさん
NGNGオブジェクトインスタンスを生成時に0で埋めるのはまともなOOPLでは常識なわけだが。
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGsizeof(A)は本当にクラス内の変数の大きさだけを返すのだろうか。
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNGでも、ここ1年ぐらい生の配列メンバに持ったクラスなんか書いてないな。
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGvirtual関数があるとsizeof(A)は正確な値を返さなかったね、たしか
0069デフォルトの名無しさん
NGNGC++では無理。
>>62
そりゃそうだ普通は言語レベルで勝手に0で埋めるからね。
この動作はもちろんオーバーヘッドが大きいのは間違いないけど
つまらないバグの発生を抑えてくれる。
ヒープやローカル変数の未初期化領域を参照できてしまうなんてあってはならないことだ。
0070デフォルトの名無しさん
NGNGchar buf[10];
public:
virtual void func() {}
};
たとえばこれで sizeof(A) が 10 を返す処理系は少ないだろう。
memset(&a, 0, sizeof(A)); なんてしたら、とっても嫌〜なヨカン。
0071デフォルトの名無しさん
NGNGハァ?
0072デフォルトの名無しさん
NGNGおまえが( ゚Д゚)ハァ?
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNGすると余計なバグが増えそうだな
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG基本型以外はその型のコンストラクタで初期化されてるはず。
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNGobj *a,*b;
b->x = 1;
*a=*b;
としたとき、a->x = 1
となるのは当然として
a=b となってポインタも同じところを
指すようになりますか?
0081デフォルトの名無しさん
NGNGvtbl へのポインタを隠しメンバに持ってたりするからね。
0で埋めたらエライことに。
0082デフォルトの名無しさん
NGNGなりません
0083デフォルトの名無しさん
NGNGいやそれは分かるんだが、>>56の使い方をしてバグなんかの問題は
ないかって事に関しての答えはどうなん?
008480
NGNGどうしても、そうなっちゃうんだけど・・・。
>>80の続きで
メンバ関数が
func()
{x=2;}
として
a->func();
とするとa->x=2となってしかも
b->x=2となっちゃうんだけど、何で?
0085デフォルトの名無しさん
NGNG急にCコンパイラのみの環境に放り込まれたときに陥る罠を列挙してください。
とりあえず、スコープの途中で変数定義してエラーになるのは思い出した。
0086デフォルトの名無しさん
NGNG同じインスタンスを指してるからだろ。
0087デフォルトの名無しさん
NGNGnewとコンストラクタがなくてメンバを初期化できず鬱。
0088デフォルトの名無しさん
NGNGvoid*の恐怖が蘇る。
008980
NGNG*a=*b
でポインタも同じところを指すようになるってこと?
0090デフォルトの名無しさん
NGNGつい struct キーワードを忘れてしまう
0091デフォルトの名無しさん
NGNGなりません。
struct A {
int x;
A() { x = 2; }
};
int main()
{
A* a = new A;
A* b = new A;
*b = *a;
a->x = 3;
std::cout << b->x << std::endl;
delete a; delete b;
}
0092デフォルトの名無しさん
NGNG//でコメントを書く、ってのはC99だと罠にならないか…
とりあえず、sizeof('a') == 2
0093デフォルトの名無しさん
NGNGスマートポインタが無くてリソースの解放し忘れ多数。
009480
NGNG確かにならんな〜。
何で俺のはなるんだ?
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG短いソースなら貼り付けてみれ。
0097デフォルトの名無しさん
NGNGSTLが無くて、基本的なアルゴリズムを思い出せずに鬱
0098デフォルトの名無しさん
NGNG*b = *a;
a->x = 3;
を
a->x = 3;
*b = *a;
にしたらどうなるかな?
009980
NGNGvoid main( )
{
one_image *in_image = new one_image;
one_image *noise_image;
one_image *median_image = new one_image;
in_image->load_image_data();
noise_image = in_image;
noise_image->make_noise();
*median_image = *noise_image;
int code = median_image->median();
}
最後の行をやっても*noise_imageに影響ないはずなんだけど
一緒に変わってしまう。何で?
0100デフォルトの名無しさん
NGNGそりゃ変わるっしょ。当たり前。
0101デフォルトの名無しさん
NGNG多分コピーコンストラクタが書かれてないからだと思う。
メンバにポインタとか持ってないか?
010280
NGNGクラスの定義は下だけど、*imageに問題があるってこと?
class one_image
{
protected:
int x_size, y_size;
unsigned char *image;
public:
one_image();
one_image(int HSize, int VSize);
one_image(struct base_image *base);
virtual ~one_image();
void load_image_data();
void save_image_data();
void set_imagedata(struct base_image *base);
void make_noise();
int median();
};
010398
NGNGoperator=
・・・だとおもう
0104デフォルトの名無しさん
NGNGその通りです。デフォルトのコピーコンストラクタは単なる
ビットのコピーなので、ポインタは考慮してくれません。
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNGstruct A {
int* x;
A() { x = new int(0); }
void func() { *x = 2; }
};
int main()
{
A* a = new A;
A* b = new A;
*b = *a;
a->func();
std::cout << *a->x << std::endl;
std::cout << *b->x << std::endl;
delete a;
delete b;
}
0109デフォルトの名無しさん
NGNGstruct A {
int* x;
A() { x = new int(0); }
void func() { *x = 2; }
int operator=(const A& a) {
return *x = *a.x;
}
};
int main()
{
A* a = new A;
A* b = new A;
*b = *a;
a->func();
std::cout << *a->x << std::endl;
std::cout << *b->x << std::endl;
delete a;
delete b;
}
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG全部の要素について operator= でしょう?
0112デフォルトの名無しさん
NGNGスマソ。コピーコンストラクタは関係ないわ。
011398
NGNGa,b って作ったら b,a って消したくなる
0114デフォルトの名無しさん
NGNGコピーコンストラクタがoperator=ですって?
0115デフォルトの名無しさん
NGNGその方が何かメリットあればそうする。何かあったっけ。
0116デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG依存性があろうがなかろうがいちいち考えるのが面倒なのでデフォルトでそうしてる。
0120デフォルトの名無しさん
NGNGそしたらaがbに依存してたらやっぱりaを先に消すわけだね。
0121デフォルトの名無しさん
NGNGA a;
A b(a); // コピーコンストラクタが呼ばれている
0122デフォルトの名無しさん
NGNGその場合b, aの順に生成するだろ。
いつも依存性と生成順序ばらばらにしてるの?
0123デフォルトの名無しさん
NGNGそうではない。俺は出てきた順にdeleteしている、ただそれだけだよん。
0125デフォルトの名無しさん
NGNGコピーコンストラクタを書こう。でよろしいか?
0126デフォルトの名無しさん
NGNG> void set_imagedata(struct base_image *base);
こんなのがあるなら、本当は浅いコピーがやりたい可能性も十分ある。
0127デフォルトの名無しさん
NGNGstruct A {
int* x;
A() { x = new int(0); }
void func() { *x = 2; }
A& operator=(const A& a) {
*x = *a.x;
return *this;
}
};
int main()
{
A* a = new A;
A* b = new A;
*b = *a;
a->func();
std::cout << *a->x << std::endl;
std::cout << *b->x << std::endl;
delete b;
delete a;
}
0128デフォルトの名無しさん
NGNG0129デフォルトの名無しさん
NGNG配列メンバも operator= なのかと小一時間
0131デフォルトの名無しさん
NGNGEffective C++の15項に、operator=の返り値はconstにしない方が
良いという内容があるよ。
0132デフォルトの名無しさん
NGNGconstの意味わかってる?
何でわざわざ禁止にするのか
その上でもう一回読んでみて
0133デフォルトの名無しさん
NGNGA a, b, c;
(a = b) = c;
というコードが通らないようにconstをつけ人がいるらしいけど、
int i, j, k;
(i = j) = k;
は通るので、組み込み型との互換性を無くさないように、
operator=の返り値はconstにしないのだと書いてある。
0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNGそこが慣れるとたまらなく快感になる。
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNGそうかもしれないが、Effective C++の著者は相当パラノイアだな(w
0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNG役には立たんだろ。ただ意図しないエラーが出なくなる、それだけの
ような気が。
0142バク転キッカー ◆O1dBMUxvmo
NGNGま さ に 本 末 転 倒
0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNG少なくともVC++の場合、Cとしてコンパイルすると
>error C2106: '=' : 左のオペランドが、左辺値になっていません。
となるが。
0145デフォルトの名無しさん
NGNGVC++はANSI-Cにすら準拠してないのです。
ご愁傷様。
0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNGvoid set_str( const CString& s ) {
(m_str=s).TrimLeft()TrimRight().MakeLower();
}
とか、代入演算子に限らず自分を書き換えるだけのメソッドは全て
自分への参照を返すように決めておくと何かと便利。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNGIDがC++
カコイイ
0153デフォルトの名無しさん
NGNGアダルトビデオについて質問のある方大募集!!
料金は無料!!
TEL 046-239-1539
0154デフォルトの名無しさん
NGNG俺は使う場面がよくわからないので使ってないのですが。
0155デフォルトの名無しさん
NGNGなくなってしまうような気がするのですが・・・・・俺だけ?
struct Base {
virtual void who() = 0;
};
struct Derived : public Base {
void who() {}
};
void Base::who() {
std::cout << "純粋仮想関数のメンバ関数だよん" << std::endl;
}
int main()
{
Derived d;
d.Base::who();
}
0156デフォルトの名無しさん
NGNGBaseのインスタンスは作成できないから意味がある。
0157デフォルトの名無しさん
NGNGロケールの関係で数字を読み込むとカンマが桁区切り記号と誤認されてしまい読み込みに失敗してしまいます。
STLのコードを見た限りではoperator>>は問答無用で桁区切りを読み込むようになっており、
動作を変更するオプションは見当たりませんでした。
,を読み込まない関数を書くのは簡単ですが毎回それではスマートさに欠けます。
何か標準で用意されている方法はあるでしょうか?
0158デフォルトの名無しさん
NGNG継承したいメンバを制限する時。
単独ではあまり役に立たないが、アクセス宣言と共に使うと
必要なメンバだけ引っ張り出せる。
0159デフォルトの名無しさん
NGNGこんなのは?
int main()
{
std::ifstream ifs("comma.txt");
while (true) {
char buf[128];
ifs.getline(buf, sizeof(buf), ',');
if (!ifs) break;
std::cout << std::atoi(buf) << std::endl;
}
}
0160デフォルトの名無しさん
NGNG例えば次のような事ができる。意味論的にどうなるのかは知らないが。
struct Base {
int i;
int j;
int k;
};
class Derived : private Base {
using Base::i;
protected:
using Base::j;
public:
using Base::k;
};
0161デフォルトの名無しさん
NGNGこの場合 using Base::i; は冗長だね。
ただ次のような事をすると usingがないとエラーが出る。
struct Base {
int i;
int j;
int k;
};
class Derived : private Base {
// using Base::i;
protected:
using Base::j;
public:
using Base::k;
Derived(int ii) : i(ii) {} // エラー
Derived() { i = 1; }
};
0162デフォルトの名無しさん
NGNGusing std::endl;
...
みたいな感じでソースの半分以上が using文なんですが、素直に
using namespace std;
使うべきなんですかねぇ。
0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNGtry{
run();
}finally{
done();
}
ってC++でどうやって書くの?
0166デフォルトの名無しさん
NGNGclass Hoge {
Hoge() { init(); }
~Hoge() { done(); }
};
Hoge a;
run();
0167デフォルトの名無しさん
NGNGHoge() { init(); }
~Hoge() { done(); }
};
Hoge a;
run();
ってCでどうやって書くの?
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGそれって処理の内容毎にfinally用のクラスを興さないといけないって事?
0170デフォルトの名無しさん
NGNGそう。
むしろオブジェクト側に隠蔽できて便利ってこと。
0171デフォルトの名無しさん
NGNG処理系依存でも良ければ、__finallyキーワードを使え。
なかったら諦めろ。
0172デフォルトの名無しさん
NGNGclass at_exit{
public:
typedef void (*finalizer_type)();
at_exit(finalizer_type f) : finalizer(f){}
at_exit(at_exit& a){ finalizer = a.finalizer; a.finalizer = 0; }
~at_exit(){ if(finalizer != 0) finalizer(); }
protected:
finalizer_type finalizer;
};
main{
init();
trye{
at_exit(done);
run();
}catch(...){
std::cerr << "exception!" << std::endl;
}
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNGScopeGuard
http://www.cuj.com/experts/1812/alexandr.htm?topic=experts
http://www.kmonos.net/alang/klx/
を使うとかいう手はある。けど、「auto_ptrみたいな汎用ルーチンに
切り出せないようなfinally処理」が発生する設計を考え直すのが先のような。
0175デフォルトの名無しさん
NGNGダイヤログのエディットボックスにカーソルがあるときに、
enterないし特定のキーを押すとイベントが起こるようにしたいんですがどうしたらいいですかねえ
0176デフォルトの名無しさん
NGNGの&って変数のアドレスを取り出すときのやつと考えて良い?
0177デフォルトの名無しさん
NGNG参照(reference)です。参照演算子とは異なります。
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNGスレタイを良く嫁。
0181デフォルトの名無しさん
NGNGなるべくfreeの奴紹介してください。お願いします。
0182デフォルトの名無しさん
NGNG読め>>5
0183デフォルトの名無しさん
NGNGおまえがWindowsで貧乏人で
MFCとか完璧Unixエミュレーションとか多くを望まないなら、
cygwin別名poor man's Unixを薦める。
今ならgcc-2.95あたりがついてくる。
at your own riskで、ソースからgcc-3.xを作ることもできるはずだ。
emacsは動かんぞ。xemacsなら動くかも知らん。vi(vim)を使え。
漏れはWindowsでVMwareでLinuxだが、cygwinも重宝している。
0184デフォルトの名無しさん
NGNGcygwin の gcc も 3.x になったぞ。
emacs 互換エディタには、あとxyzzyってのがある。
0185181
NGNGヒジョーに難しそう・・・・。ガン狩ります
0186デフォルトの名無しさん
NGNG何故Borlandではない?
0187デフォルトの名無しさん
NGNGあれはC++に対する冒涜だから
0188184
NGNGたんだけど、何を入力すればいいんですか?
0189デフォルトの名無しさん
NGNGそれを言うならVC++もC++に対する冒涜。
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG価格
0193デフォルトの名無しさん
NGNG標準C++に対する準拠度はほどほどに良いと思うが。
もちろんg++にはかないようがないが。
0194デフォルトの名無しさん
NGNGg++って準拠度に関してはそんなにいいの??
最適化はいまいちらしいけど。
Intelはどう?
0195デフォルトの名無しさん
NGNGIntelは準拠度に関しては糞。
0196デフォルトの名無しさん
NGNGじゃあ準拠度ならg++,bccで、最適化ならiccやVC++か。
0197デフォルトの名無しさん
NGNGどれだけ通るか試してみればよい。
Comeauでさえ通らないものがあるからね。
0198デフォルトの名無しさん
NGNG初学者はおかしな癖を覚えないよう、最適化の性能よりも準拠度の高い
コンパイラで学習するといいかも。
0199デフォルトの名無しさん
NGNGカーネルもLinuxの2.0系だし(涙
2.7.2が出た当時の仕様に沿って書けばOKなんだろうけど。
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG2.7.2・・・・俺が初めてC++をやり始めた時は既に2.95.2だった。
0202デフォルトの名無しさん
NGNG渡すにはどうすればいいでしょうか?
次のようにするとコンパイルできません。
void func(std::ifstream ifs);
int main()
{
std::ifstream ifs("ifstream_open.cpp");
std::string str;
func(ifs);
ifs >> str;
std::cout << str;
}
void func(std::ifstream ifs)
{
std::string str;
ifs >> str;
std::cout << str;
}
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGどうすればいいのでしょうか?
Cの場合だと FILE ** のようにして切り抜けていましたが。
std::ifstream * としてポインタで渡すのがいいのでしょうか。
0205デフォルトの名無しさん
NGNGでいいんじゃん
0206デフォルトの名無しさん
NGNG参照か!その手がありました。
しかしその場合、関数からの返りに勝手にデストラクタが呼ばれて
ストリームがクローズしてしまうような事はありませんか?
0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNGどういう場合にデストラクタが呼ばれるのかよくわからないのです。
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNGなので、ちょっと怖いのです。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG参照で渡した場合はそのインスタンスに関してコンストラクタも
デストラクタも呼ばれないから安心しろ。
0214デフォルトの名無しさん
NGNG実体そのものではない。
0215デフォルトの名無しさん
NGNGそうなると、参照はポインタと同じとまではいかなくても、ポインタと似た
ような考え方でよいのですね。
ありがとうございます。今までどうやってストリームを他の関数
に渡していいのかずっと悩んでいました。
入門書にはそのような例が出てなかったのです。
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNGええと、手元にあるだけを列挙すると・・・・
・「独習C++/標準講座C++」(ハーバート・シルト著)
・「C++Primer 改訂3版」
・「詳説C++」(大城正典著)
こんなもんです。
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNGコンパイルすると、「iosのコピーコンストラクタを生成できません」という
エラーが出ました。
0220デフォルトの名無しさん
NGNG:/mingw/include/c++/3.2.2/bits/ios_base.h: In copy constructor
`std::basic_ios<char, std::char_traits<char> >::basic_ios(const
std::basic_ios<char, std::char_traits<char> >&)':
C:/mingw/include/c++/3.2.2/bits/ios_base.h:424: `std::ios_base::ios_base(const
std::ios_base&)' is private
C:/MinGW/Learn/Learn2/ifstream_open.cpp:12: within this context
C:/mingw/include/c++/3.2.2/streambuf: In copy constructor
`std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const
std::basic_filebuf<char, std::char_traits<char> >&)':
C:/mingw/include/c++/3.2.2/streambuf:479: `std::basic_streambuf<_CharT,
_Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&)
[with _CharT = char, _Traits = std::char_traits<char>]' is private
C:/MinGW/Learn/Learn2/ifstream_open.cpp:12: within this context
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNGもしできたとしても、破棄時にデストラクタが呼ばれてストリームが
クローズしてしまうでしょうから使い物にならないでしょう。
0223デフォルトの名無しさん
NGNG頭で理解したつもりになってて実際には使えなかっただけだろう。
0224デフォルトの名無しさん
NGNGそうなのです。基本型に関しては参照は理解したつもりでいまし
たが、それをライブラリと共に使う方法を知りませんでした。
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGありがとうございます。2chにはこんな親切な人が大勢いたのですね。
なるほど、こういう事もできるから参照は便利ですね。
もうポインタからはそろそろ卒業しなければ。
void func(std::ifstream& ifs);
int main()
{
std::ifstream ifs;
std::string str;
func(ifs);
ifs >> str;
std::cout << str;
}
void func(std::ifstream& ifs)
{
std::string str;
ifs.open("ifstream_open.cpp");
ifs >> str;
std::cout << str;
}
0227デフォルトの名無しさん
NGNG0228184
NGNG誰か使ってる人、詳しく教えてください・・・
0229デフォルトの名無しさん
NGNGCygwin使っている人いますか? part7
http://pc.2ch.net/test/read.cgi/unix/1039449446/
0230184
NGNG0231デフォルトの名無しさん
NGNGポインタも参照も使えるなら、迷わず参照を使え。
参照は、ポインタと違って、インクリメント/デクリメントや添え字参照が
できない分、意図が明確になる。
漏れとしては、歴史的な理由によるが、thisが参照じゃないのが嫌。
OfficeのCOMは、アプリケーションによって、パラメータがポインタ
だったり山椒だったりして反吐。その差を変換演算子かなんか使って
隠そうとしているので余計反吐。
0233デフォルトの名無しさん
NGNG> OfficeのCOMは、アプリケーションによって、パラメータがポインタ
> だったり山椒だったりして反吐。その差を変換演算子かなんか使って
> 隠そうとしているので余計反吐。
COMは言語に依存しないというのを分かってますか?
0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG高くて買えないよ(T_T)
0238デフォルトの名無しさん
NGNGスレ違い。
0239デフォルトの名無しさん
NGNG新しいものもおいてあるしね
C++ならば20冊ぐらいあった
貸し出しされているものもあるだろうから
もっと沢山蔵書があるだろうけど
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGできません。
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGやった事無いから知らんが。
0244デフォルトの名無しさん
NGNGCOM用に拡張されたコンパイラに依存している。
0245デフォルトの名無しさん
NGNGはつみみです
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGなんの話をしているんだ?
0248デフォルトの名無しさん
NGNGstd::bad_alloc例外をチェックすれば十分じゃないの?
0249デフォルトの名無しさん
NGNGVC++6なんか窓から投げ捨てろ。
0250デフォルトの名無しさん
NGNG確かnewに失敗したらNULLを返すんだっけ。
標準C++でも new(nothrow) とすれば互換の動作にはなるが。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
(゚Д゚)ハァ?
(゚Д゚)ハァ?
(゚Д゚)ハァ?
(゚Д゚)ハァ?
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGなんか使うな。
new
を使え。
0255デフォルトの名無しさん
NGNGstring str("abc");
みたいな書き方してあるけど、これをそのまま
関数に渡したりとかしたらオーバーヘッド
すごそうだけどやはり
string *str = new string("abc");
でポインタを関数に渡すべき?
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG要するに、文字列をそのまま値渡しとか
していいものか、と聞きたかったわけ。
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNG受ける関数側で func(std::string& str) のように参照で受ければ?
そうすればコピーコンストラクタは発動しないからかなり速くなる。
今からベンチマークやるからちょっと待ってて。
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGfunc1(string with copy constructor) = 515085
func2(string with pointer) = 8990
func3(string with reference) = 8985
予想通り、std::stringをそのまま渡すとコピーコンストラクタが
発動してすごいオーバーヘッドが生じた。
ポインタと参照はほとんど差がない。
0263デフォルトの名無しさん
NGNG>>255の大ボケは無視して答えると、一般にはユーザ定義型を
渡す場合は値渡しではなくconst referenceを使用するようにすべきだろう。
もっともstringに関しては参照カウントとcopy on writeを用いて
実装されていることが多いはずなので、思ったほどの負荷は無いと思われ。
# そのお陰で
# string s("abc");
# string t(s);
# s[0] = '!';
# で t まで書き変わっちゃう実装とかが多いみたいだけどね。
ていうか、そのレベルの疑問は「Effective C++」辺りを読めば
あっさり解決する代物なので、読んでおくことを勧める。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGんなこたぁーない。
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNGFILE *fp=fopen("test","r");
std::ifstream ifs(_fileno(fp));
std::cout << ifs.rdbuf();
などとできるようだが
0268デフォルトの名無しさん
NGNG>俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して
このBorland-C++5.6.2ってCマガジンに付いてくるのと
違うものなの?
-D_RTLDLL オプションってCマガジンに付いてくるのでも
有効なの?というかそもそもこのオプションは何ですか?
0270デフォルトの名無しさん
NGNG多分#define _RTLDLLと同じ。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNGBorland-C++ 5.6.x は、C++Builder6の付属品です。
-D_RTLDLL オプションが有効なのも、それに対してです。
_RTLDLLを有効にすると、stlp45.dllなどの共有DLLを使ってくれる
ようになるので、実行ファイルのサイズが減少します。
0274デフォルトの名無しさん
NGNG#include <iostream>
って何の意味があるの?
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNGそれh
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG0280268
NGNG> Borland-C++ 5.6.x は、C++Builder6の付属品です。
> -D_RTLDLL オプションが有効なのも、それに対してです。
そうですか、わかりました
どうもありがとうございました
0281デフォルトの名無しさん
NGNGいらないよ。coutとか使う時にいる。
0282デフォルトの名無しさん
NGNGそこからC++の世界の一部を展望できるが、それ以上先に進む事は出来ない。
本当の入り口はもっと別な場所にある。
0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNG参考書で部分的な知識は知ったけど、実際にどういう局面でソレを使ったらいいかピンとこない状態です。
生Cだったら出てくるんですが。
公開ソースといえばunix由来のものが多いのですが、unix系だとまだ生Cが多いし、C++使ってたとしてもQt/KDEとかmozillaとか、コンパイラ/ライブラリの標準準拠度がいまいちのころ作られた代替ライブラリを使ってる。
Win系だとやはりMFCやVCLべったりなのはともかく、呼び出しだけしょーがなくC++にしてるけど本体は実は生Cとかわらん、というのも多いし。
0285デフォルトの名無しさん
NGNGそんだけ分かってれば十分なのでは?
0286姑
NGNGSTL のソースを眺める。
さらに、VC なら ATL WTL を眺める。
0287デフォルトの名無しさん
NGNGC++の勉強は一通りしました。
次は、VC++.NETの勉強をするか、BCB6の勉強をするか迷ってます。
どちらの方が良いでしょうか?
スレ立てるまでも・・・スレがなかったので、ここで質問させていただきます。
本気で迷ってたりするので、よろしくお願いします!
0288デフォルトの名無しさん
NGNG>>4の書籍は全部読んだ?
0289287
NGNGいや・・・そんなに本は読んでないんですが・・・
まぁ、大体が分った程度でしょうか・・・
そろそろ次のステップへと考えてます。
マジで悩んでるんで、ネタナシでお願いしたいのです・・・
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG仕事するんだったらVC++.NET、趣味で使うならBCB6。以上。
0292デフォルトの名無しさん
NGNGDelphi
目的もなしにどの道具がいいと言われてもなぁ
勉強目的なら両方やっとけ、GCCモナー
というのが率直なところ
C/C++以外にも多言語やると視野が広がるよ
0293284
NGNGbasic_stringからながめてみますた
gcc(3.2)はリファレンスカウント。iterator!=pointer
stlportはフツーに確保。NUL terminated.
vcもフツーに確保。
bccはリファレンスカウント
こんなかんじか。
0294デフォルトの名無しさん
NGNG次の段階は何か実際にプログラムを作ってみることだ。
そうすれば自分にどんな知識がかけているか分かる。
0295デフォルトの名無しさん
NGNGできればマジレスをお願いします。
0296デフォルトの名無しさん
NGNGできればどんな場合に自分に欠けているものがあるかわかるのか
具体例をお願いします。
0297デフォルトの名無しさん
NGNG日本語喋れ。
0298デフォルトの名無しさん
NGNGそれが実行する場合、何、欠けるいくらかのいくらかがあるか
どうか判明するかどうか知らせてください。
0299デフォルトの名無しさん
NGNG荒らしウザイ
0300287
NGNG何をしたいか・・・。
とりあえず、ゲームを作ってみたいと思ってます。
それと、アーカイバとかも自作したいなぁ〜と思ってます。
プログラムを仕事としたいとは、今の所思ってないので・・・
それじゃ、BCB6が最適でしょうか?
お金貯めないと・・・高いっすね。BCB6・・・
ありがとうございました。
0301299
NGNG0302デフォルトの名無しさん
NGNGロシア語喋れ。
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNGサイズは自動的に変更されますか。
それがmallocを使用しなくても、システムは領域を自由に安全にしますか。
0305デフォルトの名無しさん
NGNG翻訳ソフトで訳したような文は気持ち悪いからやめろ。
0306デフォルトの名無しさん
NGNGNoahのソースでも見てクローン作れ。
0308デフォルトの名無しさん
NGNGSince a sentence which was translated with translation software is unpleasant, stop.
0309デフォルトの名無しさん
NGNG日本語がよく見つからなかったので、それは自動翻訳へ当てはまり
翻訳しました。意味は通過しませんか。非常に、親切な人々はここに
います。私は評価します。
0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNGstd::cout<<311
//(↑ストリームで質問を流し込み中)
<<"Metrowerks CodeWarrior ver.8の規格準拠の程度はいかほど?"
<< std::endl
0312デフォルトの名無しさん
NGNG↑忘れた…鬱
0314デフォルトの名無しさん
NGNGよくこういう質問する人がいるけど、必要性がわからないなら
使わなければいいだけのような気がするんだよね。
もしよかったら何で知りたいのか教えてください。
0315デフォルトの名無しさん
NGNG単純に基礎知識として知りたいだけじゃないかなぁ。
>>310
値をポンポン放り込むだけで、重複無し&&ソート済みの状態に
なってて欲しい時にset、後者の願望だけの時にmultisetとか・・・。
0316デフォルトの名無しさん
NGNGC++のクラスをDLLにして、VBから使えるようにすることはできますか?
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNGよろしければ.NETは無しの場合をお願いします。
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGari TT
0322デフォルトの名無しさん
NGNGどうやればいいんですか?
0323デフォルトの名無しさん
NGNG>>55
0324デフォルトの名無しさん
NGNGレスサンクスです。
〜略〜のところが・・・
0325デフォルトの名無しさん
NGNGまず取得したい文字の先頭でマウスの右ボタンを押す。
そしてそのまま指を離さずに取得したい文字の一番最後まで持っていき指を離す。
すると文字が選択状態になるので編集メニューからコピーを選択する。
0326デフォルトの名無しさん
NGNGマウス操作の基本だな。(w
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG>>322 右ボタンじゃなくて左ボタンだからな!
0330デフォルトの名無しさん
NGNG1. コントロールパネルからマウスのプロパティを開いて「左きき用」を選択
0331デフォルトの名無しさん
NGNG行きません。どこがおかしいのでしょうか。
struct A {
void func1() { std::cout << "func1()" << std::endl; }
void func2() { std::cout << "func2()" << std::endl; }
};
void (A::*func[2])() = {
&A::func1,
&A::func2,
};
int main()
{
A *a = new A;
a->func[0]();
delete a;
}
0332デフォルトの名無しさん
NGNGint main()
{
A *a = new A;
(a->*func[0])();
(a->*func[1])();
delete a;
}
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG0340244
NGNG0341デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>337
0342338
NGNGchar a[30]; として abcd とだけ入力したとき この4と言う数は
どうやったら分かるんですか?
0343デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNG{
if (!*p) return 0;
return 1 + len(p + 1);
}
0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNGCFukuroの中にボールクラスの配列をつくりたいんですけど、
袋に入れるボールの数をあとからintを引数としたメソッドで決めたいのですが
どうやってやればいいのでしょうか?
0347デフォルトの名無しさん
NGNG0348デフォルトの名無しさん
NGNGstrlen(a);
0349デフォルトの名無しさん
NGNG袋クラスの中にボールクラスCBallのポインタをコンポジションで持ち、
後からメンバ関数内でnewする。
0350デフォルトの名無しさん
NGNGclass CBall{
};
class CFukuro{
CBall *balls;
}
void CFukuro::SetBalls(int num){
balls = new CBall[num];
}
って感じですか?
0351デフォルトの名無しさん
NGNG{
vector<CBall*> bag;
}
void CFukuro::SetBall(CBall* ball)
{
bag.push_back(ball);
}
とか
0352デフォルトの名無しさん
NGNGできるだけ、配列でやりたいんですよね。ゲームつくるもんで。
あと、個数を設定したいのです。
0353デフォルトの名無しさん
NGNG>balls = new CBall[num];
>}
delete[] balls; を挟んでおかないとリークしそうな悪寒。
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNGまあそういう感じ。
CFukuroのデストラクタにCBallのdeleteを入れといた方がいい。
0356デフォルトの名無しさん
NGNG袋にボールを入れないでデストラクタが呼び出された時のために。
0357デフォルトの名無しさん
NGNGただ、クラスへのポインタを持った場合、Cのrealloc()に相当する
処理が面倒なので、後から袋にボールを追加するような場合は
std::vector()の方が相当使いやすいと思われる。
0358デフォルトの名無しさん
NGNGclass A {
std::vector<int> v;
};
のようになっていたとして、このstd::vectorのメンバ v はAのインスタンス
を作った時にきちんと初期化され、インスタンスが破棄される時にstd::vector
の後始末もきちんとしてくれるものなんですか?
0359デフォルトの名無しさん
NGNG当然。メンバにクラス変数を持っている場合は、そのクラス自体の
コンストラクタより先にメンバのコンストラクタが呼ばれる。
解体の時は逆にクラスのデストラクタが呼ばれた後、メンバの
デストラクタが呼ばれる。
クラス変数のメンバを明示的に初期化したい場合は、クラスの
コンストラクタの初期化部分に並べて書く。
0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGバイナリデータとしての書き込みって
このようにしかできないのですか?
//以下ソース
struct record
{
//hoge
};
int main()
{
ofstream giko("giko.dat", ios_base::out | ios_base::binary);
record data;
//hogehoge
genka.write((char*)&data, sizeof(data));
return 0;
}
0362デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNGUML図を書けて、それの簡単なテンプレコード(もちろんC++で)が
吐けるようなフリーソフトってありますでしょうか?
0364デフォルトの名無しさん
NGNGgtpl
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNGそれが嫌だったらfopen()とfwrite()を使うしかない。
0367デフォルトの名無しさん
NGNG>>342からして338は「配列の要素数」を勘違いしている。
0368デフォルトの名無しさん
NGNG自分もこれと一緒な感じでプログラムしてる
ところでfstream以外はios_base::binaryっていらないですよね?
0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNGtemplate< typename T, size_t N >
size_t length_of( T const (&)[N] ){ return N; } とかある
0371デフォルトの名無しさん
NGNG俺が言っているのは>>343>>344のこと。
0372370
NGNG個人的には、>>343 にあったような char_traits<char>::length がお勧め。
char_traits<TCHAR>::length( str ) とかやると、Winでは少し幸せになれるし。
0373363
NGNGレスありがとうございます。既にございますか…。
ただ申し訳ございません、よろしければもう少し情報をいただないでしょうか。
どうもそれらしきものが引っかからなくて…。
gplではないですよね…ってあれはライセンスか…うーん。
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNG>>343のどこが意地悪だ?
0376デフォルトの名無しさん
NGNGC++スレだから?とも聞いているんだけど。
0377376
NGNG0378デフォルトの名無しさん
NGNGあるから積極的に使ったらどうって話なのでは。
0379デフォルトの名無しさん
NGNGなるほど。安全か。
確かにCの関数は丁寧に扱わないと危険だな。
ありがとう。
0380デフォルトの名無しさん
NGNG上手い。だが、VC++ 6.0は
: error C2265: '<Unknown>' : サイズが 0 の配列への参照は不正です。
: error C2266: '<Unknown>' : 非定数の大きさの配列への参照は、不正です。
とか、とんまなこと言いやがる。
0381デフォルトの名無しさん
NGNGtraitsで使うで初?
0382373
NGNGどなたか、gtplについてご存じの方は、いらっしゃいませんでしょうか。
0383デフォルトの名無しさん
NGNG単なるデータ構造のばあいはstruct。つーか全てのメンバがpublicならstruct。
標準ライブラリでも、pair<>やnumeric_limits<>はstructである場合が多かろう。
ま、ぶっちゃけstructだろうがclassだろうが関係ないんだが。
0384デフォルトの名無しさん
NGNGやったことないので困っています。
0385デフォルトの名無しさん
NGNG邪魔なんですよ!
0386デフォルトの名無しさん
NGNGんなもんない。
>>384
cl
0387386
NGNG0388デフォルトの名無しさん
NGNGあんたは何も教わらずに生まれてきたときから知ってたのかよ?
偶然思いついたのかよ?こんなくだらない決まり事知ってるくらいで偉そうにすんな
0389デフォルトの名無しさん
NGNGコピーコンストラクタと代入演算子は最低いるよ。
0390385
NGNG生まれたときから無敵だったよ、俺は。
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNGプログラムを実行すると、コマンド入れた後に即座に終了するんですが。
なんでですか?
0398デフォルトの名無しさん
NGNG何も言わずにmainの最後にgetchar();
0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG#include <cstdio>
int main()
{
/*
いろいろ
*/
getchar();
return 0;
}
0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNGDOS窓開いてそこから実行すれば閉じない。
0403デフォルトの名無しさん
NGNGusing namespace std;
ってあるんだけど、これはいらないの?
0404デフォルトの名無しさん
NGNGそれを忘れるようでは立派なプロフェッショナルにはなれないぞ。
つかその本古杉。新しいの買え。
0405デフォルトの名無しさん
NGNG標準ライブラリを使わなければいらないでしょ。
Cの標準ライブラリもC++ではstd名前空間にあるんだっけ?
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNG最近の流行は
using namespace System;
なわけだが。
0409デフォルトの名無しさん
NGNG俺の場合それでやると認識されてないって言われるんです。
0410デフォルトの名無しさん
NGNGバイブルなんか1998年だぜ
0411デフォルトの名無しさん
NGNGヘッダでそれを書くのは望ましくない。
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNG#include <cstdio>ってしてあるならstd名前空間にある
#include <stdio.h>ってしたならstd名前空間に無い
だからstd::getchar()が正しい。
けどコンパイラによっては正しくないから不思議
0414デフォルトの名無しさん
NGNGまるで標準ライブラリが既に時代遅れだと言っているようだな。
0415デフォルトの名無しさん
NGNGusingしないと
std::cout << "hello,world" << std::endl;
のように見るに耐えないコードになってしまう。
0416デフォルトの名無しさん
NGNGその代表がVC++6.0だっけ?
0417デフォルトの名無しさん
NGNGエラー。くそぉー・・・・たすけて。
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG#include <cstdio>
std::getchar();
0420デフォルトの名無しさん
NGNGstd"だけ"はusingした方がいいと思う。
0421デフォルトの名無しさん
NGNG衝突してから明治すればいいじゃん
ふつークラス名が衝突するなんてありえねー
0422デフォルトの名無しさん
NGNGしかし、1回目は終わらなかったけど2回目はだめですた。
もうだめ?
0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG見苦しくなるから。
ちなみに標準ライブラリと同じクラス名のクラスをつくるなんて阿呆だ。
0426デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG人の名前を常にフルネームで呼ぶんだよな?
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGC++相談室の426さん。
2番受付までお越しください。
0431デフォルトの名無しさん
NGNG0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNGいや?
現にcoutはクラスじゃないでしょ?
0434433
NGNG0435デフォルトの名無しさん
NGNGstd::size_tの立場はどうなるのですか
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNGもしかしてスタンダード?
0439デフォルトの名無しさん
NGNG全言語のページからcout -std::coutを検索しました。 約206,000件中1 - 10件目 ・検索にかかった時間0.23秒
0440デフォルトの名無しさん
NGNGstd::書いてるよ。それが当然だと思ってるから。
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGcoutやendlで面倒だと思わない??
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNGしかし、そういうケースはほとんど無い。
0445デフォルトの名無しさん
NGNGnamespace std{
int cout;
}
error C2371: 'cout' : 再定義されています。異なる基本型です。
0446デフォルトの名無しさん
NGNG#define DIVISIONS 5
int x, y;
x = (x + DIVISIONS) % DIVISIONS;
y = (y + DIVISIONS) % DIVISIONS;
これって
x = x % DIVISIONS;
y = y % DIVISIONS;
と等価じゃないですか?
どうでせう?
なんで、わざわざ加算してるんだろ。
0447デフォルトの名無しさん
NGNGつーか、windows.hをincludeしてるとminやmaxがマクロと
被って死ぬほうがよっぽど……
0448デフォルトの名無しさん
NGNG俺は一度もないぞ。妄想で物言うなよ。
0449デフォルトの名無しさん
NGNG俺も無い・・が
それは他人のライブラリをちゃんと活用してないだけなのかもしれない罠
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNG#define endl std::endl
これでいいじゃん(^-^)v
0452デフォルトの名無しさん
NGNGxやyが-DIVISIONSの値になる時があるなら意味があるかも。
0453デフォルトの名無しさん
NGNG符号の問題かね?
0454デフォルトの名無しさん
NGNG最悪の解決方法発見!!
0455デフォルトの名無しさん
NGNGコンパイルエラーが出たら修正すればいいだけだろ。
アンチは費用対効果をもう一度考えてみろ。
0456デフォルトの名無しさん
NGNGうるせー!!
確かに問答無用で置き換えてしまうけどよ・・・
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG#pragma once
というのは、積極的に使っていっていいものなんでしょうか?
それとも
#define _FUNC_H_
#ifdef _FUNC_H_
というかんじにdefineを使って2重インクルードを防止したほうがいいのでしょうか?
0460デフォルトの名無しさん
NGNGじゃあ今まで衝突したのが何回でusingしても衝突しないのが何回かカウントしてその比率を出してみろ。
0461デフォルトの名無しさん
NGNG断然後者でしょ。
ちなみに
#ifndef FUNC_H_
#define FUNC_H_
だよ・・・
0462デフォルトの名無しさん
NGNG両方書けばいい
#ifdef HAS_PRAGMA_ONCE
#pragma once
#endif
とやってコンパイラによってHAS_PRAGMA_ONCEを定義すればいい
0463デフォルトの名無しさん
NGNGなるほど。
即効での回答ありがとうございます。
ifdefを使っていこうと思います。
0465デフォルトの名無しさん
NGNG0466デフォルトの名無しさん
NGNGそんなバカな事言ってないで、ちゃんと名前空間を指定しなさい。
それでも面倒くさくて using namespace を使いたかったら、関数内とか限られた場所に
しなさい。グローバルでこれを書くのは止めなさい。
貴方が良くても他のプログラマが迷惑を被ります。
快適な開発環境作りに皆様のご理解とご協力をお願い致します。
0467デフォルトの名無しさん
NGNGひとつのファイルは一人で書かないかい?そこまで細かくモジュール化しない?
まさかヘッダーファイル内でusing namespaceなんて馬鹿なことはしないだろうし。
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNGそしたらそもそもC++使うのが間違いだよな(藁
0470デフォルトの名無しさん
NGNGちゃんと対策とってるかよ
死滅対策をよ
死滅後の行動とってるかよ
くっ謎のコンパイルエラーが・・・
ん?
おお!
nが足りなかったのね
またまた助かりました
0472デフォルトの名無しさん
NGNGまあ結論としては標準ライブラリは使うなということだな。
0473デフォルトの名無しさん
NGNGちゃんと対策とってるかよ
死滅対策をよ
死滅後の行動とってるかよ
別に放っておいてもいいか
0475デフォルトの名無しさん
NGNGちゃんと対策とってるかよ
死滅対策をよ
死滅後の行動とってるかよ
別に放っておいてもいいか
0476デフォルトの名無しさん
NGNG> まさかヘッダーファイル内でusing namespaceなんて馬鹿なことはしないだろうし。
俺は傍観者だが、てっきりこのケースも込みで話してるんだとばかり。
0477デフォルトの名無しさん
NGNGusing std::cout
using std::endl
にしとけ。
0478デフォルトの名無しさん
NGNGusing std::cout;
using std::endl;
0479デフォルトの名無しさん
NGNG説得するに足りる理由をまだ出してないな。
0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNG???
0487デフォルトの名無しさん
NGNGというやつがいるからusing namespace std;しないのだが
実際理由がわからん。ひょっとしておまえも?
0488デフォルトの名無しさん
NGNGさらしてしまうからでは。
0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNG重複が発生したら書き換えれば良いてのは無しね。そんなブサイクなソース見たくないから。
0492デフォルトの名無しさん
NGNGで、その不細工なソースの実害は?ということをアンチは一言も説明していないのだね。
0493デフォルトの名無しさん
NGNG未然に回避しようという試みだろう名前空間の導入は。何も
自分が書いたソースだけじゃなく他人が書いたライブラリを
利用するときも衝突は起こる可能性はあるだろ。
0494デフォルトの名無しさん
NGNGnamespace my_ns
{
using namespace std;
void print()
{ cout<<"pu"<<endl; }
}
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNGint foo(int x)
{
int n;
...
}
たとえば上のコードでローカル変数nを宣言し忘れた場合誤動作してしまう。
それを未然に防ぐためにはすべての変数名の重複をなくせば良いわけだが
それをしないのはどうしてだ?
0497デフォルトの名無しさん
NGNGstd::〜を何回も書くブサイクなソースが嫌だからusing使うんじゃなかったのか
0498デフォルトの名無しさん
NGNGすべてに毎回書くのは明らかに「非効率」だからusingを使うんだよ。
重複箇所を括りだすのは当たり前だろう。
0499474
NGNGboost::shared_ptr とか書いてたのを std::shared_ptr って書き直すのってけっこう大変。
using してると 一行書きかえるだけで対応できる。
移植は滅多にないかもしれないけれど、
std → stlport ( __STLPORT_NAMESPACE ? ) はやった事がある人結構居るんじゃない?
面倒だったでしょ?
つまり、自作名前空間や支持されていないライブラリの名前空間は
using しないのが良いのではないだろうか。
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNGboost::shared_ptrを一括置換したらいかんのか
0502デフォルトの名無しさん
NGNGもちろんthis->を省略したりはしないんだよな?
0503デフォルトの名無しさん
NGNG論点がちがうよう
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNGんで、しばらくして「釣りでした」とか言い訳して
もっといじめられるのな(藁
0507
NGNGdouble d;
f=100/3;
d=100/3;
cout << setprecision(15) << f << endl;
cout << setprecision(15) << d << endl;
では、33と33。
f=100.0/3;
d=100.0/3;
では、少数以下も表示されます。
左辺の型に合わせて、右辺もキャストされるんじゃなかったっけ?
0508502
NGNGthis->を省略しないことで未然に防げる不具合が現実のコードの中に現れることがある。
いや、実際には誤動作ないしはビルドエラーが出てからthis->を明示することが多い。
でもわざわざ毎回は書かない。それは面倒だし上の問題は比較的容易に発見・修正できるから。
つまりやらなかった場合のメリットとデメリットとやった場合のメリットとデメリットを比較して
やらないほうが賢明であると(半ば無意識に)判断したから。
このことと上で議論されているnamespaceの問題との類似性に全く気がつかないとしたら
ちょっとプログラミングの適正に問題があるんじゃないのとか思ってしまうよ。
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNGthisを省略しないことで防げる不具合とは?
引数とかグローバル変数とかぶっちゃうってこと?
そんなあなたにはグローバル変数にg_と付けたりメンバ変数の末尾に_をつけることをお勧めします
0513
NGNGそうやったね。
5ヶ月ぶりにプログラムやったもんだから・・・。
もしかしてほかにもいろいろと忘れてしまってるかも・・・。
やべーなこりゃ。
0514デフォルトの名無しさん
NGNGそりゃthis->を書かなきゃならないところで書かないおまえが悪いって話だろ。
明示的にthis->しなきゃならない場所がわからずプログラミング
してる方がよっぽど問題ある奴だと思うが。
0515デフォルトの名無しさん
NGNG呼び出す時以外にあったっけ?
0516デフォルトの名無しさん
NGNGstd:: についてもしかり。
>>515
ネタですか?
0517デフォルトの名無しさん
NGNGというか、this->を書かなきゃならないところはどこっ?
わからん、教えて、変数名がかぶることじゃないの?
0518502
NGNGたくさん釣れましたな(藁
0519デフォルトの名無しさん
NGNGそんなわけで、インライン関数やテンプレート関数の定義をヘッダに書く場合に、
名前空間の指定は、ローカルスコープでusing(namespace)することになるわけよ。
で、「ヘッダでなければ、usingを関数外に置いてよい」なんてことにすると、
ヘッダかそうでないかでコーディングスタイルを分けなきゃいけなくなるだろ。
インラインにするかしないか迷ってるときなんか、悩ましい話だな。
めんどくさいから関数外でusingするのはやめとけって結論に、ならないか?
0520デフォルトの名無しさん
NGNGならないだろ。もちっと文法のおさらいが必要だな。
0521デフォルトの名無しさん
NGNGだからつけなきゃいけないところでつけるのは当たり前じゃん。
今そんな話じゃないだろ。
0522デフォルトの名無しさん
NGNG省略可能なところは省略すべきって事で意見の一致を見たという話だよな。
0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGこれからはヘッダにバシバシusing namespaceしろよ。
0525デフォルトの名無しさん
NGNG0526デフォルトの名無しさん
NGNG>>508は単に省略不可能なところで省略したって話。
本人は省略不可能だと気づかなかっただけ。
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG0529519
NGNG0530デフォルトの名無しさん
NGNGC++といえどもグローバルは実質存在しないんだから
ローカルもまたその言葉の意味を失うだろ。
0531デフォルトの名無しさん
NGNG意味わかんねーよ。
0532デフォルトの名無しさん
NGNGローカル変数、グローバル変数くらい聞いたことあるだろ。
0533デフォルトの名無しさん
NGNGどうしてこんなに重要で根本的な所を理解していないんだろう?
0534479
NGNG説得するに足りる理由をまだ出してないな。
0535デフォルトの名無しさん
NGNGありませんが何か?
private, protected, publicと何か関係がありますか?
0536デフォルトの名無しさん
NGNGそれをヘッダに移動しても何も変わらないと思うよ。
0537デフォルトの名無しさん
NGNGそれでキムタクになったつもりか
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNG>>523
0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGと ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>542
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0548デフォルトの名無しさん
NGNGnamespace MyLib
{
using namespace std;
...
}
ってやればMyLib.hをインクルードしてもstdで汚染されないって話だろ。
0549デフォルトの名無しさん
NGNGつーか、標準でそろっているものに名前空間なんて要らないと思うんだけど、
何でそれを 「汚染」 と呼ぶんだろう。
0550デフォルトの名無しさん
NGNG途中でいじってはいけないというか、
どんなコードを吐かれも文句を
いえないことになっているよね?
こんなの。
f(x, ++x);
それでは、キャストはどうなの?
g(lparam, reinterpret_cast<HWND>(lparam));
こういうのは?
0551デフォルトの名無しさん
NGNG副作用のあるものと無いものを比べてどうしようというのだ?
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNGじってはいけないんじゃなくて、参照している変数の内容が変わるような事を
してはいけないという話。
キャストは、++ 演算子と違って変数の値を変更するわけではないので OK。
副作用完了点で調べてくれ。
0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNGとは違うと思うな。
引数の評価順が決められていないので ++x が先に評価されるか
後に評価されるかで結果が違ってくるという話だと思う。
0557デフォルトの名無しさん
NGNG引数の解釈順序は処理系依存じゃなかったっけ?
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNGtypedef SmartPtr< A > A_ptr;したら、
typedef SmartPtr< const A > const_A_ptr;もしないとキビしいと思うけど、
こういうことしてる人いる?
0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNGnamespace TempHoge = Hoge1::Hoge2::Hoge3::Hoge4;
TempHoge::〜;
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNGに、個人、また静止のメンバー変数からそれを単に呼ぶべきであるか?糞?
0566デフォルトの名無しさん
NGNGそれはシングルトンのクラスを作るが、これはコンストラクタをセットします、
に、private、またstaticのメンバー変数からそれを単に呼ぶべきである?
0567デフォルトの名無しさん
NGNGそれをシングルトンのデザインパターンにするために、
コンストラクタはprivateのことへの第1のセットです。
次に、必要なことはprivateのメンバー関数からコンストラクタにちょうど電話することです。
0568デフォルトの名無しさん
NGNG分かりやすく説明してください。
0569デフォルトの名無しさん
NGNG0570デフォルトの名無しさん
NGNGusingを十分に使用して使用しない人々は、単に怠惰であると考えられます。
役立たない所有は、C++が多くの問題で準備したメカニズムを利用しません。
0571デフォルトの名無しさん
NGNGusing std::cout;
using std::endl;
using std::vector;
(略)
これで妥協。
0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNG0575550
NGNGみなさん、ありがとね。
やっぱり大丈夫ですか
0576デフォルトの名無しさん
NGNGclass B{
virtual void f() = 0;
};
class X : public B{
const B* b;
public:
X(const B* c):b(c){}
virtual ~X(){
delete const_cast<B*>(b);
}
void f(){}
};
C/C++ UserJournalにあったコードを簡単化したものです。
疑問は、
1 ~Xのconst_castに何か意味があるか?
2 なんでBに仮想デストラクタを置かないか?
です。どうも変なコードなんですが、CUJの記事だし。
と悩んでます。
0577デフォルトの名無しさん
NGNGなんてタイトルの記事?
0578デフォルトの名無しさん
NGNGそれコンパイルできないでしょ。Xのデフォルトコンストラクタがない。
0579デフォルトの名無しさん
NGNGf(x,x++)はまずいが、f(x,y++)なら問題ない。
だから++を使ってはならないというわけじゃない。
0580デフォルトの名無しさん
NGNGX(const B* C) にBへのポインタを渡そうにも、Bは抽象クラスだから
インスタンス作れないし、どこか移し間違えてない?
0581デフォルトの名無しさん
NGNG0582576
NGNG記事はテンプレートを使ってコンパイル時に計算を済まそうってやつで、
俺がひっかかったのは、テンプレートを使わない、普通のコードの方。
も一度思い出して、コンパイルできるのをウプしま。
0583デフォルトの名無しさん
NGNGその場合でも、Bから派生したクラスがデフォルトコンストラクタを
持つと、Xにもデフォルトコンストラクタが必要だと言われる。
卵が先か鶏が先かみたいな問題になってる。
0584デフォルトの名無しさん
NGNGああごめん、X は Bから派生してたのか。
何か変だな。
0585デフォルトの名無しさん
NGNG0586576
NGNGこんな感じです。
class B{
public:
virtual void f() = 0;
};
class D : public B{
public:
void f(){}
};
class X : public B{
const B *b1, *b2;
public:
X(const B* c1, const B* c2):b1(c1), b2(c2){}
~X(){
delete const_cast<B*>(b1);
delete const_cast<B*>(b2);
}
};
class Y : public X{
public:
Y(const B* c1, const B* c2):X(c1, c2){}
void f(){}
};
0587576
NGNGDがリーフでYがコンポジットですね。
でも、>>576のような疑問がわくのです。
メインのコードでないので手を抜いたのかとも思うのですが、
なんか、ものすごくいやな感じがするんです。
0588576
NGNGMarch号のC++ Expression Templates
です。記事そのものにはあんまり興味ないんですが。
0589デフォルトの名無しさん
NGNGdeleteはvoid *を受け取るconst void *じゃない
>2 なんでBに仮想デストラクタを置かないか?
bug
0591デフォルトの名無しさん
NGNGconst_castそのものは*b1と*b2のconst性を取り除くものだろうが、
delete時にはconst性を取り除く必要はないので冗長だね。
Xが仮想デストラクタを持っていないのは、すぐにでも問題になりそうだ。
class B{
public:
virtual void f() = 0;
};
class D : public B{
public:
void f() { }
};
class X : public B{
const B *b1, *b2;
public:
X(const B* c1, const B* c2):b1(c1), b2(c2) {}
~X(){
delete const_cast<B*>(b1);
delete const_cast<B*>(b2);
std::cout << "~X()" << std::endl;
}
void f() {}
};
0592デフォルトの名無しさん
NGNGB* b;
public:
Y(const B* c1, const B* c2) : X(c1, c2) { b = new X(0, 0); }
void f() {}
};
int main()
{
D d1, d2;
X* xp = new Y(&d1, &d2);
delete xp;
}
0593デフォルトの名無しさん
NGNGコンパイラがあぼ〜んするね。具体的にはリンカ起動してくれない
のでexeができない。
0594デフォルトの名無しさん
NGNG>X* xp = new Y(&d1, &d2);
X *xp=new Y(new D,new D);
0595576
NGNG>deleteはvoid *を受け取るconst void *じゃない
たしかにそうですね。でも、>>591さんが言うように、必要あるのか
わからんのです。
コンパイラが警告すら出さないので。
しかし、constを簡単にはずせるのも不思議でつ。
Bに仮想デストラクタがないのは、バグということで、よさそうですね。
>>586には、
int main()
{
Y y(new D, new D);
}
つけて、BC5.6でコンパイルできます。
人と話して、少し気がすみました。
みなさま、ありがとうです。
0596595
NGNGキャストしなくても、警告を出さないという意味です。
ためしたのは、BC5.6っす。
0597デフォルトの名無しさん
NGNGスマソです。コンパイラがあぼ〜んしていたように見えたのは、いつのまにか
コンパイラオプションに-Sがついてアセンブリ出力していたせいでした。
取ったらちゃんと無事コンパイルできました。
g++もいいが、日本語でエラーを出してくれるBCCはやはり手放せない。
0598デフォルトの名無しさん
NGNGこれでおいらも設計厨とばかりに、意気込んでみたのですが…。
いざ設計とやらを初めてみると、WndProcに縛られたり、
ライブラリの関係で理想通り出来なかったりと、色々参っています。
そもそも独学のせいか、どうも設計の方法って言うのが良く分からなくて…。
ここからもう一歩踏み出すには、どんな努力が必要でしょうか…。
自分でも曖昧な上、お馬鹿な質問だとは思うのですが、結構真剣でして…よろしくお願いします。
0599デフォルトの名無しさん
NGNG富士の樹海を歩いてみるとか。人生違ってくるかも。
0600デフォルトの名無しさん
NGNG0601598
NGNG設計が上手い方って言うのは、どうやって腕を上げたんだろう…。
やはりこのまま、数をこなすしかないのかな…スレ汚し失礼しました。
>>600
どうもです…
0602デフォルトの名無しさん
NGNGガンバレ!
0603デフォルトの名無しさん
NGNGJava や Python でしばらく遊んでみてから C++ に戻ってみたら?
0604デフォルトの名無しさん
NGNG0605仕様書無しさん
NGNG( ´∀`)< サランサップ
0606デフォルトの名無しさん
NGNGと ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ >>605
(_フ彡 /
0607デフォルトの名無しさん
NGNG同士よ。ともに頑張ろうぞ。
0608名無しさん
NGNG( ´∀`)< 「ぬるぽ」と言ってみるテスト
0609デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ >>608
(_フ彡 /
0610デフォルトの名無しさん
NGNG一方のスレッドが要素をpushしていき
他方のスレッドが要素をpopしていくとした時、
要素の数が3以上の時はスレッドセーフであり
3未満の時はpush()/pop()内の処理を
mutexなどで保護しなければならない。
なお、要素数のインクリメント・デクリメントのタイミングは
push()では処理の最初、pop()では処理の最後とする。
これであってる?(厳密にはpushは3,popは2と安全な数は変わってくるけど
とりあえず両方安全な数を調べたい)
図解
A→B→C→
←A←B←C
要素Aはpush専用スレッドからのみアクセスされる
要素Cはpop専用スレッドからのみアクセスされる
要素Bは両方のスレッドからアクセスされる可能性がある。
0611デフォルトの名無しさん
NGNG個の処理は
0612610
NGNGべきとかいわれても困るんだけど。
実際の運用時にはqueueはだいぶ長くなるはずだから(短ければ暇だろうし)
実質mutexなしで動くんじゃないかと期待してる。
0613デフォルトの名無しさん
NGNGソフトの名前を言って下さい。買いませんから。
0614デフォルトの名無しさん
NGNG知識、経験、センス、バランス感覚、といった要素のどれが欠けても
良い設計者にはなれない。ので、
> やはりこのまま、数をこなすしかないのかな…
が正しいと思われ。
ただ、意識してそれをやり、いろいろな観点から評価する、それを
反復的に繰り返す、ということが大事だと思う。
0615デフォルトの名無しさん
NGNG現在要素数5個->push処理に入る->競合を防がないpush処理を始めようとしたその時!
pop->pop->pop->pop->pop
さあ、push処理の続きだ->どかん!
と俺の脳内で実行されたけどどうですか?
0616デフォルトの名無しさん
NGNG危険があり、atomicにしたければそれをcritical sectionに
しなければならないという当たり前の話だよな。
まあ「性能最優先」であって「たまに落ちてもよい」んであれば
「どかん!」がめったに発生しないのであればかまわん気もするが
後で保守担当者が泣きそうな予感。
0617610
NGNGそりゃまずい・・・
ではこれを追加したらよいかな?
volatile bool entering_push;
void push()
{
entering_push = true;
...
entering_push = false;
}
void *pop()
{
if(entering_push && size() < 3)
return 0;
...
}
0618デフォルトの名無しさん
NGNG610「何が言いたいの?パフォーマンス最優先なんで
あやしいなんていわれても困るんだけど。」
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGゼロで戻ったときは永久ループかい。
0621デフォルトの名無しさん
NGNGpop->pop->pop->pop->popの途中で
さあ、push処理の続きだ->どかん!
0622デフォルトの名無しさん
NGNG0623610
NGNGpushに失敗するのが笑えるけど実際には
OSのタイムスライスはpush/popより十分大きいから最悪のケースは発生しなさそうだ。
volatile bool entering_push;
volatile bool entering_pop;
bool push()
{
entering_push = true;
if(entering_pop && size() < 2)
return false;
...
entering_push = false;
}
void *pop()
{
entering_pop = true;
if(entering_push && size() < 3)
return 0;
...
entering_pop = false;
}
0624デフォルトの名無しさん
NGNGif(entering_pop の直後に entering_pop = true; が実行されたら?
会費操作にアトミックなコードを書けない限り、mutex のたぐいを使うしかない。
mutex を使う事の何がイヤなんだ?
0625デフォルトの名無しさん
NGNGこれ何だかイヤだ・・・
0626デフォルトの名無しさん
NGNGフラグの変更はクラスでラップしてコンストラクタ・デストラクタ内で行え。
そしたら例外が発生しても大丈夫だから。
0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNG0630598
NGNGがんばります、がんばりましょう(´Д⊂
>>603
話を聞くとJavaは随分素直みたいですねぇ。元々興味ありましたし…。
早速SDKを落としてみました。この際なんでもやってみたいと思います。アドバイス感謝です。
>>614
真摯なご忠告ありがとうございます。思ってた以上に困難な道のりなんですねぇ…。
仰るとおり自省を忘れずに、こなしていきたいと思います。なんだか絵の上達法に似てますねぇ。
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNG以下に示すPetersonのアルゴリズムが使えるはず。
# TanenbaumのModern Operating Systemsなどに載っている。
だが、本当にこんなことをやる必要が有るのか測定してからに
したほうがよいと思われ。
volatile int turn;
volatile int interested[2];
/* which is 0 or 1, indicating the caller thread */
void EnterCriticalSection(int which)
{
int other = 1 - which;
interested[which] = 1;
turn = which;
while (turn == which && interested[other] == 1)
/* busy wait */;
}
void LeaveCriticalSection(int which)
{
interested[which] = 0;
}
0633デフォルトの名無しさん
NGNGクラスでラップしても下手なコード組まなきゃパフォーマンスは一切落ちんぞ。
0634デフォルトの名無しさん
NGNG0635デフォルトの名無しさん
NGNG激しく同意。
0636デフォルトの名無しさん
NGNGなぜメンバ変数よりもその場で定義した変数(ローカル変数とでも言うのかな?)の方が早いのですか?
解説には
>「ループ内で書き込んでいるバッファ中に、参照しているメンバ変数が存在しているかもしれない」
>つまり、「ループ内の書き込みにより、メンバ変数の値が書き換えられ、ループの条件が変わるかもしれない」
>ことをコンパイラは考慮しているのである
とありますが、いったん代入しても同じだと思うのと、
forのカウンタにメンバ変数を使わないのはセオリーだとわかっていますが、
なぜメンバ変数を使うと速度が遅くなるのでしょうか?
まったく理由がわかりません。ご存知でしたら教えてください。
0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNGさせる物作れと言われたが、わけわかめです。。。
DirectShow自体わからんのに。。。
どなたか見本を作ってください。。。
0639デフォルトの名無しさん
NGNG勘違いしないでね、メンバ変数が×なのではないのよ。
改悪例をみてね。
0640デフォルトの名無しさん
NGNG直接の理由は、最適化が難しくなるから。
難しくなるだけであって、遅くなるかどうかは別問題。
constでないメンバ変数はthis経由でいつでも書き換えられる可能性があるので、
これを最適化時に完全に把握するのは困難あるいは不可能。
ローカル変数は生死のスコープが極めて短く、ポインタ経由で参照される
ことが少ないので、安全な最適化が実用的な時間で行えることが期待できる。
要するに、最適化時に値の変化を把握できるかできねえか、という話。
完全に把握できれば、たとえばレジスタに載せることができる。
環境依存なネタとしては、ローカル変数が取られるであろうスタック
はキャッシュに乗ってる可能性が高い、というのもあるけど・・・
そんな低レベルな話じゃないよね。
0641636
NGNG>constでないメンバ変数はthis経由でいつでも書き換えられる可能性がある
ここがよくわからないのです。
マルチスレッドでもあるまいし、forループ中に書き換えられるってことはあるのですか?
0642デフォルトの名無しさん
NGNG{
int m;
void foo()
{
for(int i=0; i<m; i++)
bar();//メンバ関数の中でメンバ変数mが変わるよね
//この関数がインラインなら最適化できるかもしれないけど
}
void bar();
};
void Test::bar()
{
m--;
}
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNGと ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>643
0645string勉強中
NGNG文字列はstringを使うとします。
この場合、いったん仮のバッファで文字列を取得してstringオブジェクトに代入するしかないんでしょうか?
0646デフォルトの名無しさん
NGNGそりゃそうです。
0647デフォルトの名無しさん
NGNGそのコンテクストにおいてマルチスレッドであるかないかを判定できるくらい上等なCコンパイラって少ないと思います。
0648デフォルトの名無しさん
NGNG無いのかYO!
なっかりだ
0649デフォルトの名無しさん
NGNG川o・-・)ノ <先生!こんなのがありました!
__/ / /
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
0650小西プロデューサー
NGNG0651デフォルトの名無しさん
NGNGstd::strstream使えば、ほとんど事足りるでしょ。
sprintf()からはおさらばしよう。
0652デフォルトの名無しさん
NGNGスマソstd::stringstreamね。
いまだにtypoする。
0653デフォルトの名無しさん
NGNGたぶん問題を勘違いしてるとおもふ…
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG読み込んだら?って俺も勘違い?
0656デフォルトの名無しさん
NGNG言ってもらわないと答えにくい。
0657デフォルトの名無しさん
NGNGみたいなCの関数の結果をstringに格納する方法についてだろ?
0658645
NGNG例えば
void WINAPI ListView_GetItemText(
HWND hwnd,
int iItem,
int iSubItem,
LPSTR pszText, <-- これ!
int cchTextMax
);
>>654 みたいにワンクッション入れるしかないんでしょうか?
わたしの脳内ではstringから書き込み可能なポインタがサックリ
とれたりするんですが。
0659デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG0662デフォルトの名無しさん
NGNG0663デフォルトの名無しさん
NGNG当事者はいたってまじめだから倍笑えるよね(藁藁
0664デフォルトの名無しさん
NGNGまぁ、確かにそういう面はあるわな。
やたらめったら何重にもラップしたがるし。
0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNG0667665
NGNG0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNGtemplate <class F>
void AAA(const std::string& s, const std::string& d, F f)
{
while(...略...){
...
f(s.substr(...略...));
}
}
とした時、
void Print(std::string& s)
{
cout << s;
}
で、
AAA(s, d, &Print);
はできるのですが、
class CCC
{
public:
Print(std::string& s){cout << s;}
}
で、
AAA(s, d, std::mem_fun_ref(&CCC::Print));
とやってみましがC2784でコンパイルがとおりません.(vc6です)
色々調べて見たのですが何が間違っているのがさっぱりわかりません.
何か根本的に間違っているのでしょうか?
0670デフォルトの名無しさん
NGNGclass CCC
{
public:
Print(std::string& s){cout << s;}
do{AAA(s, d, std::mem_fun_ref(&CCC::Print)); }
}
の
AAA(s, d, std::mem_fun_ref(&CCC::Print));
でエラーが出ます
0671デフォルトの名無しさん
NGNGとりあえず、ここは
Print(const std::string& s){cout << s;}
こうしなさい
0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG書き間違えました.メンバ関数です
do(){AAA(s, d, std::mem_fun_ref(&CCC::Print)); }
0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNG#include <iostream>
#include <functional>
#pragma argsused
template <class F>
void AAA(const std::string& s, const std::string& d, F f)
{
;
}
void Print(std::string& s)
{
std::cout << s;
}
class CCC {
public:
void Print(std::string& s) { std::cout << s;}
void hoge() { AAA("hoge0", "hoge1", std::mem_fun_ref(&CCC::Print)); }
};
int main()
{
return 0;
}
0678デフォルトの名無しさん
NGNGは第一引数にCCCの参照を受け取る関数オブジェクトを作ります
一方グローバルのほうのPrintは引数を受け取らない関数です
引数がいる関数といらない関数をそれぞれ渡しているわけで
関数AAA内でf()と呼ばれていたらだめだよね
というか、俺の説明がだめか・・・後はよろしく
0679デフォルトの名無しさん
NGNG[data2 : 外側のクラスのメンバは型名、スタティック、または列挙子ではありません。]
が発生します。struct中の宣言を一つだけにすればコンパイルは通るのですが、
二つにしたとたんエラーが出ます。これは私が悪いのでしょうか?
コンパイラが悪いのでしょうか?
class C
{
static const intwidth=64;
static const intheight=64;
struct
{
float data1[width][height];
int data2[width][height]; //ここでエラー
}S;
};
・補足
struct{ //これでコンパイルは通ります
float data1[width][height];
//int data2[width][height];
}S;
struct{ //これでも通ります
//float data1[width][height];
int data2[width][height];
}S;
struct{ //これでもなぜか通ります
int data2[width][height];
float data1[width][height];
}S;
0680679
NGNG再現するための最小のコードを訂正として乗せます。
class C
{
public:
static const intwidth=64;
static const intheight=64;
struct S
{
float height[C::height][C::width];//この行と下の行の順番を入れ替えるとなぜかコンパイルできる
intdata[C::height][C::width];//
}
};
heightの名前がかぶっているのが直接の原因だと思いますが、
別の名前空間に存在するはずなんです・・・
私が悪いのか、コンパイラが悪いのか。教えてください。
0681デフォルトの名無しさん
NGNG使えなかったような気が。
class C
{
public:
enum { width=64, height=64 };
struct S
{
float height[C::height][C::width];//この行と下の行の順番を入れ替えるとなぜかコンパイルできる
intdata[C::height][C::width];//
}
};
0682デフォルトの名無しさん
NGNGあのう、intwidth、intheightというのがいけないのだと思いますが。
VC++7.0で下記のコードちゃんと通りましたよ。
>>681
static constなデータメンバに限って、クラスボディで初期化していれば
配列のサイズを指定するのに使えるよ。
class C
{
static const int width = 64;
static const int height = 64;
struct {
float data1[width][height];
int data2[width][height];
} S;
};
int main()
{
C c;
}
0683681
NGNGあれそうなの?VC++の独自拡張とかでなくて規格でも許されてるのかな。
0684デフォルトの名無しさん
NGNGC++Primerには書いてあった。ちょっと待って、refman.pdfの
該当部分探してみるから。
0685デフォルトの名無しさん
NGNGあった。規格書pdfのP158の項目4。
選択してコピペする事はpdfビューアではできないらしいので場所だけ
書いておくね。
0686デフォルトの名無しさん
NGNGそのdata1という変数名をheightにしたら…
という話では。そのためにC::をつけてるんだろうし。
0687デフォルトの名無しさん
NGNGそうか?俺はてっきり int height と書くべき所を intheight と
くっつけて書いてるせいだと思ってたが・・・・・
0688デフォルトの名無しさん
NGNGintdataにもなってるし、順番かえるとコンパイル通るって言ってるし。
0689679
NGNG>>687
すんません、その間にはtabが入っていて、コピペで削除されてしまいました。
class C
{
public:
static const int width=64;
static const int height=64;
struct S
{
float height[C::height][C::width];//この行と下の行の順番を入れ替えるとなぜかコンパイルできる
int data[C::height][C::width];
}
};
>>682さん、このコードでコンパイルが通るかもう一度確かめていただけないでしょうか?
>>685さんによればこのコードは大丈夫なはずなんですが・・・
これはVC++ 7.0のバグということでよろしいんでしょうか?
回避策はenumを使うことでしょうかね?
0691デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNG本当だね。C::とクラス名を限定しなければエラーにならないが、
C::heightとかと書くと、順番を入れ替えないとエラーになる。
0694デフォルトの名無しさん
NGNGやってみました。確かにVC++7.0では通りません。バグっぽいですね。
Updateを待つか、.NET2003を待ちましょう。取り敢えずMicrosoftには
フィードバックしておきましょう。
0695デフォルトの名無しさん
NGNGどのくらい違いますか?
6.0使っていれば、そのまま.NETもすんなり使えるでしょうか?
バージョンアップしようかどうしようか迷っています。
0696デフォルトの名無しさん
NGNGstd::fstream でファイルを開いたとき、
そのファイルはロックされますか?
0697デフォルトの名無しさん
NGNG操作面だけの話しですが、
細かいところけっこう違うけど、カンでいけます。
(最初、プロジェクトプロパティが見つからなくて悩んだ)
MSDNが統合されて、俺的には便利です。
あと、クソ6.0ように何の理由もなく落ちたりしてません。今のところ俺の環境では。
ところでWinSock関連のスレないですかねぇ?
0698デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1040220302/
0699デフォルトの名無しさん
NGNGただしクラスウィザードが無くなるので
そのあたり激しく使い勝手悪い所感。
0700デフォルトの名無しさん
NGNG自分の環境ではコード補間などの機能をオンにしておくと
突然コンソールが立ち上がって、落ちます
込み入ったテンプレートを書いてるときによくなりました
0701名無しさん
NGNG/´  ̄`ヽ,
/ 〃 _,ァ---‐一ヘヽ
i /´ リ}
| 〉. -‐ '''ー {!
| | ‐ー くー |
ヤヽリ ´゚ ,r "_,,>、 ゚'} < ぬるぽマンセー!
ヽ_」 ト‐=‐ァ' !
ゝ i、 ` `二´' 丿
r|、` '' ー--‐f
_/ | \ /|\
/ ̄/ | /`又´\| |  ̄\
0702デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >
_/し' //. V
(_フ彡/´ ̄ ̄  ̄`ヽ,
/ 〃 _,ァ---‐一ヘヽ
i /´ リ}
| 〉. -‐ '''ー {!
| | \ / |
ヤヽリ ´゚ ,r "_,,>、 ゚'}
ヽ_」 ト‐=‐ァ' ! ∩∩∩
ゝ i、 ` `二´' 丿 │ │
r|、` '' ー--‐f │ /
_/ | \ /|\ │ │
/ ̄/ | /`又´\| |  ̄\ / /
0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNGvector<X*> v;
v.push_back(new X);
ってやると警告がでます。
何がいけないんでしょう?
それともコンパイラが悪いの?
BC5.5です。
0705デフォルトの名無しさん
NGNGBCC5.6.4ですが警告出ません。
確か5.6.2の時までは警告が出てたように記憶しています。
0706デフォルトの名無しさん
NGNGやっぱWordですか?MSのオフィス系なら使った事があるのですが・・・
あと初心者にお勧めの本を教えてください。
0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGメモ帳とプログラミング言語C++第3版
0709704
NGNGありがとうございます。私はフリー版使ってますので。
>>707
すみません。今、別のマシンからなので、正確には再現できません。
xがどうしたとかいう不思議な警告です。
もちろん、xなんて変数は使っていません。
(>>704ではクラス名にXを使いましたが、実際は別の名前です。
それでも、xがなんたらとでるのです。)
結論は、BC5.5の問題ですね。
0710デフォルトの名無しさん
NGNGstd::vectorのために一時変数を使用するとかいう警告が出てた。
push_backがconstでない参照型で受けていたからのような記憶が。
0711デフォルトの名無しさん
NGNGhttp://www2.justnet.ne.jp/~tyche/bcbbugs/bcc32-option.html
の 8028から8038当たりの警告オプション見て、警告を抑制しる。
それしかない。
0712709
NGNG>>711
ありがとうございます。
たしかに、参照型がどうのだったと思います。
push_backの受け取る型がconst参照なんですよね。
しかし、それなら、問題ないはずですよね。
void func(const A& a){
なんちゃら
}
にたいして、
func(A());
みたいなことしてもよいはずなので。
違うでしょうか?
警告が出ても、間違いがないなら、別にかまわないのです。
0713デフォルトの名無しさん
NGNG逆、逆。const「でない」参照で受けていたように思う。
0714デフォルトの名無しさん
NGNGえーと。それだとコンパイラ通らないような。
言葉遣いの問題かな。push_backの宣言は、
void push_back(const T& x);
でわ?
0715デフォルトの名無しさん
NGNGだとすれば、それで警告でるならBCCのバグ。
gccやVC++では出ない。
0716デフォルトの名無しさん
NGNGありがとうございます。
>だとすれば、それで警告でるならBCCのバグ。
そんな気がします。
0717デフォルトの名無しさん
NGNGconst X* へのポインタを受け取るのだから、
X* tmp = new X
v.push_back(&tmp);
みたいな一時変数を用意しますよという旨の警告じゃないのかな。
0718デフォルトの名無しさん
NGNGどんなコンパイラもだいたいそうしてそう。
void push_back(const X** x) よりも void push_back(const X*& x)
のような気もするが。
それは良いとして、それを警告として出すか出さないかの違いだけだ
ろう。BCCは細かすぎたので5.6.4からこの警告を消してしまったのでは?
0719デフォルトの名無しさん
NGNG処理系依存という事でどう?
0720デフォルトの名無しさん
NGNGしかし、もうどうでもよいことではあるな。
0721デフォルトの名無しさん
NGNG何も言われないと不安になる
0722 ◆mx1DoE6qEk
NGNGこのダイアログからデータを取るメソッドを作るとしたら、
std::string CMyDialog::GetDialogData()
とするべきか、それとも
void CMyDialog::GetDialogData(std::string& outString)
とするべきかどっちでしょうか。
参照で受けても、どうせ文字列をコピーするんだったら、式の中に組み込める
上のタイプの方が便利な気がするんですが、今後もしかしたらダイアログに
アイテムが増えるかもしれません。先のことを見越して下のタイプにする方が
いいのでしょうかどうなんですか
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNGそれは結構あるでしょ。
無限ループで警告を出したり、if(a=func())こんな構文でも警告を出したりするし(ただし警告レベルを高く設定した場合)。
0725 ◆mx1DoE6qEk
NGNG正直めんどくさいです
0727デフォルトの名無しさん
NGNG0728 ◆mx1DoE6qEk
NGNG正直よく意味がわかりません
0729デフォルトの名無しさん
NGNGでしょ普通は。
0730デフォルトの名無しさん
NGNGconst std::string& CMyDialog::GetDialogData()
0731 ◆mx1DoE6qEk
NGNGメンバを返すわけじゃないので、参照は返せないんです。
というより、引き数で返すか返り値で返すかDOTCHが良いんでしょうか
0732デフォルトの名無しさん
NGNG返り値で返すってえと、関数内部のstaticな変数でも返すのか。
0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNG0735 ◆mx1DoE6qEk
NGNGだから、たとえば
std::string CMyDialog::GetDialogData()
{
return ((CEditBox*)GetItemByID())->GetString();
}
みたいなのと
void CMydialog::GetDialogData(std::string& outString)
{
outString = ((CEditBox*)GetItemByID())->GetString();
}
みたいなのとドッチがいいのかって事です
あとアイテムが増えた場合、アクセッサ関数を増やすのか、GetDialogDataの引き数を増やすのかも
どっちがいいのかわかりません。
0736デフォルトの名無しさん
NGNG否の場合は例外を投げる方が良かれ。
0737デフォルトの名無しさん
NGNGだから、>>727 のようにダイアログデータを構造体かクラスにして単一のアクセサで
やり取りして、成否を BOOL で返せばええんちゃうかと。
0738デフォルトの名無しさん
NGNGおれもそんなことで悩んだことがあるが、これに正解は無い、どっちもある意味いい
マジで悩むぐらいだったら面倒でも2つ用意したら?
0739デフォルトの名無しさん
NGNGbool hoge(std::string& buffer);
inline std::string hoge()
{
std::string buffer;
hoge(buffer);
return buffer;
}
的なことをしたりするが。
0740 ◆mx1DoE6qEk
NGNGそれも手だと思いますが、例えばGetじゃなくてSetの場合、このやり方だと
特定アイテムだけセットするのがメンドイとか、あとダイアログごとに構造体
作ってたらメンドクサイなーとか思ってしまいます
>>738
二つ用意ってのはなんだか嫌な感じです。EffectiveC++には、最小で十分な
インターフェースを持たせろとか書いてありますが、なんか重複してる時点で
嫌な気分になります。あとアイテムが増えたときの解決方法はどうしたらいいですか
0741デフォルトの名無しさん
NGNGそれが決まってないならイイもワルイも無いっしょ
0742デフォルトの名無しさん
NGNGじゃあ引数から取るほうにしれ。
アイテムが増えたときのためにアイテムIDとstd::stringを引数にしる。
0743 ◆mx1DoE6qEk
NGNGダイアログはちょっと例が悪かったかもしれないです。
ダイアログに限らず、アクセッサはどういう場合に値をreturnする事が許されるのか?
アクセスしたいデータごとにアクセッサメソッドを付けるのが正しいのか?
引き数をたくさん持ったメソッド一つを付けるのがいいのか、あるいは構造体でゴソッと
やるのがいいのか?
なんというか、アクセッサメソッドの設計自体に関する疑問といいますか・・・
>>742
増えたアイテムがstring系のアイテムじゃなかった場合はどうすればいいですか。
0744デフォルトの名無しさん
NGNG文字列と関係ないのであればそれ用のメソッドを用意しる。
0745 ◆mx1DoE6qEk
NGNGごめんなさい、ダイアログを引き合いに出したのはマズかったです。
アイテムIDとかが使えない場合を考えてください。例えば
class CPerson
{
protected:
std::string name;
std::string address;
int age;
};
とあった場合、アクセッサは
std::string GetName();
std::string GetAddress();
int GetAge;
とするのか
void GetPersonData(std::string& name, std::string& address, int& age);
とした方がいいのか、どう思いますか
0746デフォルトの名無しさん
NGNGstd::string GetAddress();
int GetAge;
ふつうこっちだろ
0747デフォルトの名無しさん
NGNGvoid GetPersonData(std::string& name, std::string& address, int& age);
は明らかにおかしい。
せめて
void GetPersonData(const std::string& name, const std::string& address, int age);
だろ。
0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNG0750デフォルトの名無しさん
NGNGJavaのBeanだと、アクセッサは決められた命名規則に従って定義して、
操作はアクセッサメソッドを直截呼んでもいいが、より汎用的に
取り扱いたい場合はReflectionを用いることが出来る。
HashMapに保持しているkey=value形式のデータと相互変換したい場合など
だな。
C++でどうするのが「美しい」かは知らないが、少なくともReflectionは
使えないので、利便性を重視するなら、多少直交性を欠く設計になっても
やむを得ないと思われ。
利便性と直交性は対立することが多いし、mx1DoE6qEkはその両方を
求めている気がするが、それは無いものねだりだろう。
0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNGboost::tuple<std::string, std::string, int> GetPersonData()
0753 ◆mx1DoE6qEk
NGNGstd::string GetPersonName();
も式の中に組み込めるから便利だし、
void GetPersonData(struct PERSONDATA& outData);
これもデータが一発で取れて便利
ドッチを使うかは一概には言えんと
0754デフォルトの名無しさん
NGNG0755 ◆mx1DoE6qEk
NGNG0756デフォルトの名無しさん
NGNG緊急大募集 http://kgy999.net/yhst/st.php
0757デフォルトの名無しさん
NGNGclass CPerson {
public:
struct PERSONDATA {
std::string name;
std::address;
int age;
};
private:
PERSONDATA persondata;
public:
const PERSONDATA* GetPersonData() const { return &persondata; }
};
0758デフォルトの名無しさん
NGNGなんだこれ(w
std::string address;
0759デフォルトの名無しさん
NGNGいつでも使えるわけじゃないが、それはそれで面白いな・・・
0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNGC4786だろ。デバッグモードで出る。
#pragma warning( disable : 4786 ) 入れとけ。
0762デフォルトの名無しさん
NGNGそれはもう止めてます.
その他に
デバッグモードで4100 4511 4512 4663 4018 4511 4146 4245 4244 4071
リリースモードでは、800個以上出て調べる気も起きません.
いくら動くとはいえ、これじゃあんまりだと思いまして・・・
0763デフォルトの名無しさん
NGNG4710: ・・・・・はインライン関数ではありません
4702: 制御が渡らないコードです。
でした.
0764デフォルトの名無しさん
NGNGちなみに
4702: 制御が渡らないコードです。
はthrowを書いた行で7個ずつ出ています
0765デフォルトの名無しさん
NGNGついさっき知った方法。
#pragma warning(push,3)
VisualC++.NETのSTLはこれで警告を止めてある。
0766デフォルトの名無しさん
NGNG関数を作る時、
仮引数でその値を変更する必要が無い時は、
constをつけますよね。
こんなかんじで abc(const int a){ return a };
このconstをつけるとどんな得なことおきるんですか
0767デフォルトの名無しさん
NGNG関数 abc 内において、a の変更を禁止する。
a への代入はできず、a へのポインタを非 const のポインタ変数に代入することも
できない。
得なのかどうかは場合によるけど、a を変更してはいけないということを関数 abc()
のコーダーやメンテの中の人に伝える事ができる。
0768デフォルトの名無しさん
NGNG> コーダーやメンテの中の人に伝える事ができる
とりあえずこれはわかりやすい利点だよね。
0769デフォルトの名無しさん
NGNG&がついてないけど…
引数ってコピーだろ?
なにかの本で「まぎらわしいから
const付けるな」といっている人も
いたが…
いちおう区別がついているつもりの
私はconstをつけれるときはつけるが…
0770デフォルトの名無しさん
NGNGコピーだからこそ変更できないようにする
という意味もある
参照だと思っていた変数が実はコピーだったなんて状況を防ぐためにね
案外見つかりにくいもんだよ、こういうバグは
0771デフォルトの名無しさん
NGNGその点constを廃止して変更可のout/refを導入したC#は合理的。
0772デフォルトの名無しさん
NGNG思うんだけど。
0773デフォルトの名無しさん
NGNGいちいちローカル変数にコピーするなんてばかげてるよ。
0774デフォルトの名無しさん
NGNGvoid foo(int* const p);
の違いが判ってればいいんじゃないでしょーか
0775デフォルトの名無しさん
NGNG上・・・ポインタは変更不可、ポインタが指すアドレスの内容は変更可。
下・・・ポインタは変更可、ポインタが指すアドレスの内容は変更不可。
ということでいいのですか?
0776デフォルトの名無しさん
NGNGぎゃく
0777デフォルトの名無しさん
NGNGコンストイントを指すポインタ
イントを指すコンストポインタ
0778デフォルトの名無しさん
NGNG関数定義に律儀にconstつけて回ってたらほとんどconstになってしまいますよね?
値を返す引数は参照渡しにする、constは即値のみに使うというのは邪道ですか?
0779デフォルトの名無しさん
NGNG> 関数定義に律儀にconstつけて回ってたらほとんどconstになってしまいますよね?
?????????
0780デフォルトの名無しさん
NGNGなんと表現したらいいんだろう?
・・・というもやもやをはっきりさせるためにconstがあったりして。
0781デフォルトの名無しさん
NGNGこれ、俺がconst覚えた時によくやった
参照やポインタでも無いのにconstつけたりして
関数を使う側から見ると、このconstにはまるで意味が無いから
しないほうがいいと思う。混乱の元
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNG0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNG起こりやすいね。
0787デフォルトの名無しさん
NGNG内の会社でもC上がり先輩にそういわれた
でも、参照で渡されたやつはほぼNULLじゃ無いので
NULLチェックが要らないという利点があるんだよなー
まあ、先輩に従ってますが
0788デフォルトの名無しさん
NGNGint main(const int argc, const char* const* const argv)
0789デフォルトの名無しさん
NGNGif(n) n = 0;
これをサポートすればC++から90%のポインタを削減できるだろうな。
0790783
NGNG明確になるから。こういうのはNULLチェックしない。受け取る
関数にNULL渡す方が悪い(w
0791デフォルトの名無しさん
NGNGやっぱりそれしかないんですか・・・・
しかたがないからデバックモードで自分の書いたヘッダ、ソースで出ている警告を取り終わったら
#pragma warning(push,3)
するようにします.
0792デフォルトの名無しさん
NGNGせめてassertくらいはいれといてよ。
C/C++でassert使ってる人って意外と少なくない?
俺の周りでは一人しかいなかったよ。
0793デフォルトの名無しさん
NGNGそんなこと言ったら
俺の近くにはSTLを使ってる人すら少ない
0794デフォルトの名無しさん
NGNG今いるところは try ... catch 禁止だ。(w
0795デフォルトの名無しさん
NGNG0796デフォルトの名無しさん
NGNGtry-catch禁止なら例外スルーするライブラリなど使うなってことか。
for禁止に至ってはまったくもって意図不明。
0797デフォルトの名無しさん
NGNG例外スルーって何?
0798デフォルトの名無しさん
NGNG全言語のページから例外スローを検索しました。約44件中1 - 10件目
0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNG趣味だと好き勝手できるから、もうすっかり
テンプレート無しには生きられない体だよ。
0802デフォルトの名無しさん
NGNGCを使って不自由しましょう。
0803デフォルトの名無しさん
NGNGSTLはtemplateの知識を基本的に必要としないし。
STL拡張するなら別だけど。
実務で直接template使ったことはまだないな。
0804デフォルトの名無しさん
NGNG0805804
NGNG0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNG> 個人的には"値を返す引数"には参照渡しよりポインタ渡しを使いたい。
渡す側もポインタであることを明示するし、
受けた側もポインタ経由での代入操作になるから、
(参照ならconstが付くはず)
値を操作するという意図が明確に伝わるんだよね。
ついこないだもこういう指導をしてさしあげたが、イマイチ理解して
もらえなかったようだ。俺はC/C++どっちも使うんだが、片方しか使わ
ない人と話すと苦労するよ・・・
0809デフォルトの名無しさん
NGNGおれも前までそうだった・・・
就職してあまりに理不尽なこと言われて頭がクラクラした
それはおまえの勉強不足の認識違いだろと、何度も思った
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNGそのwhile、ひょっとしてwhile (true)じゃなくて、while (TRUE)か?
0813デフォルトの名無しさん
NGNGbool b = B;
ってあり?
0814デフォルトの名無しさん
NGNG>整数は暗黙のうちに bool値に変換できる。0以外の整数は true、
>0は falseに変換される。
0815デフォルトの名無しさん
NGNGmain.exe : pro1.obj pro2.obj;
link pro1.obj pro2.obj
pro1obj : pro1.cpp pro1.h;
cl pro1pp
pro2obj : pro2.cpp pro2.h;
cl pro2.cpp
としたときpro2.objができないのですがどこがいけないのでしょう?
0816デフォルトの名無しさん
NGNG変にならないように導入されただけのものだからなぁ。
0817デフォルトの名無しさん
NGNG-c オプション。
0818デフォルトの名無しさん
NGNGclなら/cつけないといろいろうるさいし。
0819デフォルトの名無しさん
NGNGで、受け取った例外が何かを調べる方法はありますか?
0820デフォルトの名無しさん
NGNG0821815
NGNG−cオプションってHELP見てもよく分からないんだけど。
どうすればいいの?
0822デフォルトの名無しさん
NGNGcl -c -o main.obj main.cpp
これでmain.cppがコンパイルされてmain.objができるんじゃない?
0823デフォルトの名無しさん
NGNGエラーになります。
何かこれに変わるような方法はないでしょうか。
j = fcn[i]();
のように使いたいのです。
0824デフォルトの名無しさん
NGNGBorland C++の__closureが便利だが標準C++にはない。
0825デフォルトの名無しさん
NGNGstruct A {
virtual void func1() { std::cout << "A::func1()" << std::endl; }
virtual void func2() { std::cout << "A::func2()" << std::endl; }
};
struct B : public A {
void func1() { std::cout << "B::func1()" << std::endl; }
void func2() { std::cout << "B::func2()" << std::endl; }
void func3() { std::cout << "B::func3()" << std::endl; }
void (*func4[3])();
};
void (A::*func[])() = {
&A::func1,
&A::func2,
};
void (B::*func2[])() = {
&B::func1,
&B::func2,
&B::func3,
};
void (B::*func4[])() = {
&B::func1,
&B::func2,
&B::func3,
};
0826デフォルトの名無しさん
NGNG{
A *a = new B;
B *b = new B;
(a->*func[0])();
(a->*func[1])();
(b->*func2[0])();
(b->*func2[1])();
(b->*func2[2])();
int i = 2;
(b->*func2[i])();
(b->*func4[1])();
std::cout << sizeof(func[0]) << std::endl;
std::cout << sizeof(func2[0]) << std::endl;
delete b;
delete a;
}
0827デフォルトの名無しさん
NGNG>>822さんがほとんど答えてくれたけど、-cオプションというのは、
コンパイラに *.obj または *.o を生成した時点でストップせよと
いう指令。
0828初心者
NGNG#include<iostream.h>
void sub(char *[]);
int main()
{
char *G[] ={"あけぼの","わかのはな"};
sub(&*G);
cout<<G[0]<<endl;
return 0;
}
void sub(char *g[])
{
g[0] = "たかのはな";
return;
}
一応「たかのはな」が表示されるのですが、
sub関数内ではgはポインターに見えないです。タブーなんでしょうか?
ダメな場合、どうするのがベターなんでしょうか?
よろしくおねがいいたします。
0829デフォルトの名無しさん
NGNG0830初心者
NGNG・・(汗
そうですね。
ポインターがうまくいかないので、
*やら&やらいろいろつけてたらこうなりました。
他は問題はないのでしょうか?
0831デフォルトの名無しさん
NGNG> sub関数内ではgはポインターに見えないです。
どうしてそういう結論に至ったの?
ポインタになっているはずだけど。
0832初心者
NGNGtp://www.kumei.ne.jp/c_lang/cpp/cpp_06.htm
エイリアスとポインターの部分があったんですが、
*がついてないのは「かんちがいするからダメ」
みたいに読めたので、
てっきりこれじゃダメなのかと思ったんです。
0833デフォルトの名無しさん
NGNG即レス有難うございます。まだわからないところがあるので質問させてください。
そのコードにある、
void (A::*func[])()
というのは、Aのメンバ関数へのポインタの配列、という宣言でしょうか。 だとすると、
(a->*func[0])();
を
(a->(*func[0]))();
とするとエラーになるのはなぜですか? また、
void (A::*func[])();
void (B::*func2[])();
void (B::*func4[])();
これらはグローバル変数なのでしょうか。
0834デフォルトの名無しさん
NGNG->* で一つの演算子だから、 -> と * に分けるとエラーになる。
また、
void (A::*func[])();
void (B::*func2[])();
はグローバル変数だが、もしメンバ関数が private とか protected で
宣言されてたら
void (B::*func4[])();
のようにメンバでポインタを持つしかない。
0835デフォルトの名無しさん
NGNGそれってプログラマがきちんと関数の引数の型を把握しておかないと、値渡しなのか参照渡しなのか区別がつかないってことじゃないの?
void func1(int a,int b)という関数とvoid func2(int &a,int &b)という関数があり、呼び出し側にint x,yという変数があるとする。
それらを引数にfunc1,func2を呼び出した場合はどちらも引数リストが(x,y)になるでしょ。
0836デフォルトの名無しさん
NGNGもう少し具体的に書くと、メンバ関数へのポインタというのは、純粋な
意味での関数へのポインタとは違う。
static なメンバ関数へのポインタ以外は、必ず this がないと
呼び出せない特殊なオフセットのようなものだと考えてくれ。
static なメンバ関数なら this 無しで呼び出せる。これはシングルトン
デザインを実現するのによく使われる。
0837835
NGNG呼び出すときの引数リストは(&x,&y)になるから区別がつくってこと。
0838初心者
NGNGたぶんおっしゃる通りなんだと思います。
参照というのがまだ良く分かってないので、
半分ぐらいしか理解できてませんが(汗
ちゃんと理解できるように、続きやってみます。
答えていただいてありがとうございました。
0839デフォルトの名無しさん
NGNG> ->* で一つの演算子だから、 -> と * に分けるとエラーになる。
よくわかりました。有難うございました。
ですが、Bを class として宣言すると
void (B::*func4[])();
が、Bの private メンバにアクセスできないと言われるのですが。
0840デフォルトの名無しさん
NGNGスマソ。俺が勘違いしてたようだ。
void (B::*func4[])();
もグローバル変数変数だ。
今試してるからしばらく待ってくだされ。
0841デフォルトの名無しさん
NGNG俺は今まで勘違いしてたようだ。どうもクラス内部にメンバ関数への
ポインタを持つことはできないらしい。
0842839=823
NGNG今調べて来ました。
public: static void (B::*func4[3])(); /* 宣言 */
void (B::*B::func4[])().... /* 定義 */
(b->*B::func4[1])(); /* 実行 */
とすればよいようです。
丁寧にお答えいただき、どうもありがとうございました。
0843デフォルトの名無しさん
NGNGそうか、staticなメンバならメンバ関数へのポインタを保持する
事ができるのか。初めて知った。
勉強になりました。
0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNG0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNGそこら辺はやり方しだい。Cのラッパークラスでは二通りの方法がある。
class Wrapper
{
static Wrapper *This;
static Callback(void *p)
{
This->bar = This->foo();
とか
Wrapper *self = (Wrapper*)p;
}
}
0848デフォルトの名無しさん
NGNGとエラーが出るのは何ででしょうか?
0849デフォルトの名無しさん
NGNG0850848
NGNGfor(j=0; j<=base1->y; j++){
for(i=0; i<=base1->x; i++){
k1 = j*base1->x + i;
h[k1] = base1->sh[k1];
}
}
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNGclass FusaGiko : public Giko {};
Giko g;
FusaGiko fg;
で、fg = g; みたいなのをやりたい場合の
一般的なやりかたをおながいします。
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNGこれだけでは、base1、h、i、j、k1 の正体さらしてくれないとわからん。
どの行がエラーになったんだよ。
つーか変数名に全角使うな。
849 の前者の方を実行してみたか?
0855848
NGNGエラー行はh[k1] = base1->sh[k1];
変数定義はint i,j,k1; base1は構造体baseの変数。
struct base
{
int x, y;
unsigned char *sh;
};
class c
{
protected:
unsigned char *h;
}
helpを見たら次が出てきたけど、どうすればいいのやら。
class C
{
public:
C(); // int を引数にとるコンストラクタはありません
} c;
class D
{
public:
D( int );
D();
} d;
void main()
{
c = 10; // エラー
d = 10; // OK
}
0856デフォルトの名無しさん
NGNG0857デフォルトの名無しさん
NGNG> d = 10; // OK
当たり前じゃん。何を訴えたいの?
0858デフォルトの名無しさん
NGNG確保するにはどうすればいいんでしょうか?
-2 0 -2 0 0 -7 :-x^5の係数は2, x^4の係数は0, x^3の係数は-2, x^2の係数は0,
xの係数は-7
0859852
NGNG>>852 だと、FusaGiko の中で Giko の部分だけをファイルに保存するとか。
fwrite( &Giko , 1 , sizeof(Giko) , fp );
みたいな感じで。
0860デフォルトの名無しさん
NGNG結論を言おう。
850 が class c のメンバ関数の一部なら、850 のコードできコンパイルエラーは出ない。
0861デフォルトの名無しさん
NGNGinline関数は、通常の関数と違って呼び出される位置より前に関数の
定義がないといけないということがPrimerに書いてあったのですが、
べつにプロトタイプ宣言がされていれば、コンパイルエラーはでません。
なぜでしょうか?これってちゃんとinline展開されてる
のでしょうか?
0862デフォルトの名無しさん
NGNGコンパイラによるんじゃない?
0863デフォルトの名無しさん
NGNGプロトタイプ宣言に inline と書いてあったとしても、定義部分が実際に
呼び出す部分より後にあったらまず100%インライン展開はされない。
0864デフォルトの名無しさん
NGNGid[15]とかそういうのがあって
int j=2;
int point = id [ j & 1];
とかいう記述が出てきたのですが、このj & 1というのは何を表すのですか?
論理式とかのたぐいですか?
0865デフォルトの名無しさん
NGNGコンパイラによるんじゃない?
VC7はリンク時にinline展開することもできるし。
0866デフォルトの名無しさん
NGNG呼び出す部分より後にあったらまず100%インライン展開はされないという
動作をコンパイラがしたら、それは単にソースの先読みとかコンパイル順の
やりくりができないショボイ実装だからだと思われ。
0867デフォルトの名無しさん
NGNGj が奇数だったら id[1] 、偶数だったら id[0] をアクセスするだけだろ。
0868861
NGNGコンパイルがOKだということは、ちゃんと展開されていると
解釈していいのですか?
展開されない処理系ならエラーや警告を出してくれれば問題無いの
ですが・・・。
0869デフォルトの名無しさん
NGNG0870861
NGNGコンパイラから知らされるのですか?
0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNGそうなんですか。ありがとうございます。
0873デフォルトの名無しさん
NGNGプロトタイプ宣言をして、関数本体を呼び出した後で定義したら、
ちゃんとインライン展開されていた。
0874デフォルトの名無しさん
NGNGスタンダード版で?
0875デフォルトの名無しさん
NGNGこのくらいでは根を上げないだろう。
0876デフォルトの名無しさん
NGNGちがう。Pro版。
0877デフォルトの名無しさん
NGNG0878デフォルトの名無しさん
NGNG>>877
コンパイル通りません。
0880デフォルトの名無しさん
NGNG間違いないという考えでやったほうがいいのかなぁ・・・。
0881デフォルトの名無しさん
NGNG0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNGしとかないとオーバーヘッドもバカにならんでしょ。
inlineにこだわるべきかは、作るモノによるんだろうけどね。
だからこだわる時はこだわらなきゃいけないんだから、
そういうのは、はっきりさせておいたほうがいいと思うけど。
0885デフォルトの名無しさん
NGNGというのは半ば常識かと思ってたが、いまだに>>884みたいなのが
いるんだねえ。
0886デフォルトの名無しさん
NGNG長いのはソースに書いてアウトライン
0887デフォルトの名無しさん
NGNG意味不明。後回しっていずれやんじゃねぇか。
コンパイラによる差もあるのに。
0888デフォルトの名無しさん
NGNG>>885は正しくない。
後回しじゃなくて、やる必要がない、だ。
0889デフォルトの名無しさん
NGNGコンパイラオプションを弄って仕事してるフリをすべきだと思う。
0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNGその通りだが、inline ぐらいは始めから意識しとけ。
0892デフォルトの名無しさん
NGNGもしSTLがinline化されなかったら誰も使わんし
0893デフォルトの名無しさん
NGNGそんなことないよ。
0894デフォルトの名無しさん
NGNG( i == 0 || data[i-1] == hoge )
で i == 0 の部分で真が確定した場合は
data[i-1]は評価されないことが保障されているのでしょうか?
0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNG0897894
NGNG0898デフォルトの名無しさん
NGNG蛇足だが、|| 演算子をオーバーロードしたら短絡評価は再現できない
ので両方とも評価してしまう。だからEffective C++には || 、 &&、, は
オーバーロードしないようにしようと書いてある。
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNGまー俺は演算子なんて=とかしかオーバーロードしないですが、
こーゆー細かい情報知らないとハマるんだよなぁ。
0901デフォルトの名無しさん
NGNGC++ではJAVAのようにパッケージングすることができないので
関連あるクラス同士を整理しやすいようにするには頭文字を
そろえるなどとするしかないのかなと思っています。
実際にはパッケージングのかわりにdll化をするのが正しいのでしょうか?
0902デフォルトの名無しさん
NGNGnamespaceを使うのも手。
0903デフォルトの名無しさん
NGNGそうなんですか
namespaceについてはあまりよくわからないので調べてみます。
どうもありがとうございました。
0904デフォルトの名無しさん
NGNGstring str()//こんな関数があったとして
const string &s=str();//これが正しいことを!!
最近知りました
0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNGだうと!って言いそうになっちまうんだけど、正しいんだよなぁ。
便利な機能ではあるんだけど、どうにも紛らわしい。
0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNGconst string &str();
この関数を
string str();
にこっそり置き換えても安全なんですよね?
メンバ変数で持っていたけど 将来的にはそうじゃなくなる場合よくあるので
0909デフォルトの名無しさん
NGNGそれはまた違う話だろ。
0910デフォルトの名無しさん
NGNGそれをさらに他のconstに代入して使うこともできる。
const std::string& s = func();
const std::string& t = s;
こういう芸当ができるのはconstのリファレンスだけだ。
0911デフォルトの名無しさん
NGNGいや、普通に使ってたけど・・・
>>905-906
そんなに特殊なことなの?
0912デフォルトの名無しさん
NGNG0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNGとかなんとか知ったかぶっちゃって大恥じかきました
0916デフォルトの名無しさん
NGNGこの規則があまりに特殊であるが為に人から説明を受けても
すぐには信じることができなくて、大恥をかく羽目になりやすいんだろうな。(w
0917デフォルトの名無しさん
NGNGそのとおり
関数内のローカル変数を参照で返したらだめなのと理由一緒だろ?と言ってしまった
これにこりて、もう二度と知ったかぶらないようにしようと自戒
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG6.0使っていれば、.NETもすぐ慣れますか?
0920デフォルトの名無しさん
NGNGガイシュツ
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNG関数から返される(本来なら無名のはずの)一時変数に名前を付けるから、
と考えると、分かりやすいかも。
でも、おそらくコンパイルされたコードは、
const string s = str();
と同じになりそうな気がする。
0923デフォルトの名無しさん
NGNG例外を参照でうけるようなものだろうか…?
0924デフォルトの名無しさん
NGNGメトリクス測定ツールとかってどんなのがありますか。
できればフリーのもので。
Java用なら腐るほど見つかるんだけどなあ…
0925デフォルトの名無しさん
NGNGリファクタリングツールは Eclipse/CDT がもう少し動くようになれば。
メトリクスは製品なら割とあるけど。
cppll で調べて/訊ねてみると良いかも。
http://www.tietew.jp/cppll/
0926デフォルトの名無しさん
NGNGconst リファレンスでオブジェクトの延命をしようなんて馬鹿げてる。
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNGcatch(MyException &e)
{
}
// ここでeのインスタンスを参照したい。
0929デフォルトの名無しさん
NGNG悪いことはいわないから、自分が何をしようとしているのか良く考えなさい。
0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNGIS 12.2 の 5項に一時オブジェクトの寿命について記述されているように
関数のリファレンス引数にバインドされた一時オブジェクトは、関数呼びだしを含む
式が完了(complete)するまで存続することになっている。
それ以上に長生きさせることはできないのだよ。
A temporary bound to a reference parameter in a function call (5.2.2) persists
until the completion of the full expression containing the call.
0932デフォルトの名無しさん
NGNG同じIS12.2の5項には、こうも書いてある。
コンストラクタの初期化子でリファレンスメンバ(変数)にバインドされた一時オブジェクトは
そのコンストラクタが終了するまで存続する。
A temporay bound to a reference member in a constructor's ctor-initializer(12.6.2)
persists until the constructor exits.
0933デフォルトの名無しさん
NGNGcppll方面におばかなことを考えているやつがいるらしい。
0934デフォルトの名無しさん
NGNGこんなトリッキーなコード書かずに済むようにしてほしい。
0935デフォルトの名無しさん
NGNG参照じゃなくてコピーを取るんでは駄目なの?
0936デフォルトの名無しさん
NGNGどうやって?
例外クラスすべてにコピー用のメソッド書いて回るの?
0937デフォルトの名無しさん
NGNGC#のException.InnerException てのがどんなのなのか分からない
ので勘違いならスマソ。
0938デフォルトの名無しさん
NGNGこんな感じでeをe2の補助的な情報として取っておきたいんだよね。
なので最上位クラスExceptionへのコピーでは情報が欠落してしまう。
try{
try{
...
}catch(MyLibException &e){
throw MyAppException("アプリの例外として再throw。eも取っておく", e);
}
}catch(MyAppException &e2){
cout << "例外の直接の原因は" << e.InnerException().ClassName() << "である" << endl;
}
実行結果
例外の直接の原因はMyLibExceptionである
0939デフォルトの名無しさん
NGNG(throw したインスタンス) のコピーかもしれんし。
0940916
NGNGおー、サンクス。12 Special member functions のとこかよ。
やっぱり、そういう仕様ってことなのね。
んー、やっぱ人伝いに聞いた仕様は気をつけんとな。
0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNG{
char buff[256];
mprintf(buff, "%d"m_intValue);
return std::string(buff);
}
こういうのってやっても大丈夫なんですか。
0943デフォルトの名無しさん
NGNG0944デフォルトの名無しさん
NGNGコピー返しするよりも効率が良いと。
じゃあこれは?
const std::string& CNumber::GetValueAsString()
{
std::string ret;
char buff[256];
mprintf(buff, "%d"m_intValue);
ret = buff;
return ret;
}
あと、constにしないとダメなん
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNG駄目ってどっちが?
ローカルオブジェクトを返すのが駄目か、constでないと駄目なのか
0947デフォルトの名無しさん
NGNG>>944
両方駄目
定数参照されることで一時変数が生成された式を越えて有効性を保証されるだけで
ローカル変数がスコープを越えて生存できるわけではない
0948デフォルトの名無しさん
NGNGGetValueAsStringよりも寿命が長いやつを返すか、>942みたいにその場で
作ってreturnするしか無いって事?
アクセッサとして値を返すのに使うんだったら、>>942みたいな事が出来ない
ケースもあるわけ?
例えばstd::strinにstring(const char*)みたいなコンストラクタが無い時とか。
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNGアクセッサとかでこれやると、後で中の仕様が変わったときにインターフェースまで
変わっちゃうからイヤだ
0951デフォルトの名無しさん
NGNG{
char buff[256];
sprintf(buff, "%d", m_intValue);
ret = buff;
return ret;
}
0952デフォルトの名無しさん
NGNG0953デフォルトの名無しさん
NGNG奇蹄目
馬犬目
0954デフォルトの名無しさん
NGNGお前まさか、デフォルト引数のオブジェクトが
呼び出される側のスコープに含まれるとでも
思ってんのか?
0955デフォルトの名無しさん
NGNGお前まさか、>>951のソースがコンパイルできるとでも
思ってんのか?
0956デフォルトの名無しさん
NGNGコンパイルできますが、なにか?
0957デフォルトの名無しさん
NGNG貴様、MSVCだな!
0958デフォルトの名無しさん
NGNGQuick-C です。
0959デフォルトの名無しさん
NGNGg++ だとエラーになんね。
VC でも動くかどうか知らんけど、g++ なら
const std::string& CNumber::GetValueAsString(std::string &ret = demi<std::string>())
とかって、やればOKだべ。
demi に関しては cppll を漁ってくれ。
0960デフォルトの名無しさん
NGNG覚えたてor見慣れない機能を好んで使う悪い例だな。
あれだ、えーと、Write only codeってやつだろ。
人に見せるコードなら、こんなんになるかの。
std::string CNumber::GetValueAsString();
void CNumber::GetValueInto(std::string& storage);
0961デフォルトの名無しさん
NGNG┌─┐
|も.|
|う |
│来│
│ね│
│え .|
│よ .|
ヌルポ . ゴルァ │ !!.│
└─┤ プンプン
ヽ(`Д´)ノ ヽ(`Д´)ノ (`Д´)ノ ( `Д)
| ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄ . ̄◎ ̄  ̄◎ ̄ ◎−>┘◎
0962デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>961
0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNGそれすらネックになってしまい、やむを得ずstaticなダウンキャストに切り替えた所、
実行速度が全体で20倍近く速まりました。
…は、いいのですが、これいうダウンキャストは合法なんでしょうか?
型チェックは一応問題ないと思います。
0965デフォルトの名無しさん
NGNG内部で閉じた処理に使うならダウンキャストもOKと思われ
理より速度を選んだってことだよ
行儀良くないけどなー
やむをえないって、コメントは入れとこう
0966デフォルトの名無しさん
NGNGありがとうございます。おかげで、びくびくしてたとこへオーソライズされた気分です。
禿本貸し出し中で、処理系依存かなぁとか、その辺も心配だったので…。
目立つコメントいれておきます。レス感謝です。
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG普通void*にキャストする場合static_castじゃないの?
0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGvoid*から元のクラスに戻すにはreinterpret_castが必要。
0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
NGNGやっぱ共通ベースクラスをつくって dynamic_cast かなぁ。
0975デフォルトの名無しさん
NGNGポインタをdynamic_castしても例外を投げてくれませんよね。
リファレンスの場合だけです。
0976デフォルトの名無しさん
NGNGusing namespace std;
int main()
{
cout << "abc";
return 0;
}
error LINK 2019 未解決の外部シンボル
fatal error LINK 1120 外部参照が未解決です。
と出て本文にはフォーカスがかからないのですが、どういうエラーなのでしょうか?
0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNGostringstream s; s << i; s.str();
これもっと短くかけませんか。
0979デフォルトの名無しさん
NGNGint i=30;ostringstream s;s<<i;s.str();
0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG0982v(^・^)v
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1047560042/
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNGまたのお越しをお待ちしておりまつ。
0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNGぬるぽ?
0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997仕様書無しさん
NGNG| ̄ ̄ ̄|___
| ヌノ|
|______|
∧∧ ||
( ゚д゚)||
/ づΦ
0998仕様書無しさん
NGNG|___ |
|レポ |
|_____|
|| ∧∧
||(゚д゚,,)
Φ⊂ ヽ
0999仕様書無しさん
NGNG| ̄ ̄ ̄|___ |
| ヌノ|レポ |
|______|_____|
∧∧ || || ∧∧
( ゚д゚)|| ||(゚д゚,,)
/ づΦ Φ⊂ ヽ
1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。