トップページ⇒tech
1001コメント288KB

C++相談室 part35

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)vNGNG
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0002v(^・^)vNGNG
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0003v(^・^)vNGNG
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
0004v(^・^)vNGNG
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

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

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
0005v(^・^)vNGNG
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
0006v(^・^)vNGNG
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
 (日本語) http://www.kmonos.net/alang/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html
0007v(^・^)vNGNG
■関連スレ■
【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/
C/C++の宿題を片づけ作戦指令 30代目
http://pc5.2ch.net/test/read.cgi/tech/1091954342/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL 相談室
http://pc5.2ch.net/test/read.cgi/tech/1029029882/
COM の世界を斬る!
http://pc5.2ch.net/test/read.cgi/tech/981823340/
WTLお勉強スレッド
http://pc5.2ch.net/test/read.cgi/tech/1078150663/
0008デフォルトの名無しさんNGNG
■コンパイラスレ■
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/(html化待ち)
GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/
0009デフォルトの名無しさんNGNG
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part13
http://pc5.2ch.net/test/read.cgi/tech/1089011118/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
C++Builder相談室 Part10
http://pc5.2ch.net/test/read.cgi/tech/1089299158/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/

↓以下、お決まりのアレどうぞ。
0010デフォルトの名無しさんNGNG
続きはろうか
0011v(^・^)vNGNG
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part14
http://pc5.2ch.net/test/read.cgi/tech/1093672937/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
C++Builder相談室 Part10
http://pc5.2ch.net/test/read.cgi/tech/1089299158/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
0012v(^・^)vNGNG
STLつかうと一気に実行ファイルサイズが10倍に?!
00131,11NGNG
遅れた_| ̄|○
0014v(^・^)vNGNG
>>12
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0015v(^・^)vNGNG
>>14
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0016デフォルトの名無しさんNGNG
スマン。最新のスレじゃなかった。_| ̄|○

カコログカラ ソノママ モッテキチャッタヨ…
0017v(^・^)vNGNG
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
0018v(^・^)vNGNG
>>17
#include <stdafx.h>

後死ね。
0019デフォルトの名無しさんNGNG
>>18
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0020デフォルトの名無しさんNGNG
完了だな
0021デフォルトの名無しさんNGNG
>>20
つまり

     ∧∧     _ ドスッ
     (   ,,)┌─┴┴─┐
    /   つ.  終  了 │
  〜′ /´ └─┬┬─┘
   ∪ ∪      ││ 
            ゛゛'゛'゛
                   ということだな?
0022デフォルトの名無しさんNGNG
どっちが本家?
0023デフォルトの名無しさんNGNG
行列計算用のライブラリで計算速度が速く使いやすいおすすめのものがあれば
紹介していただけないでしょうか?
0024前スレよりNGNG
996 名前: デフォルトの名無しさん [sage] 投稿日: 04/08/31 20:08
 namespaceってウンコだよね。
 ライブラリ作ってる香具師がバカだとglobal namespaceになんでも詰め込みやがるから、
 こっちで
 namespace UnkoLib
 {
  #include <library.h>
 }
 とかやってもうまく動かないし。


1000 名前: デフォルトの名無しさん [sage] 投稿日: 04/08/31 21:05
 >>996
 その場合ライブラリ作ってる香具師がウンコだよ。
0025デフォルトの名無しさんNGNG
>>23
これも新しい地鎮祭の儀式?
0026名無しさん@ピンキーNGNG
>>23
boost::ublas
Blitz++
lapack
0027名無しさん@ピンキーNGNG
あれ?もしかして俺思いっきり釣られた?
0028デフォルトの名無しさんNGNG
つーかなんでハンドルがピンキーになってるんだよ?ゾヌのバグか?
0029デフォルトの名無しさんNGNG
漏れは、未だかつて名前衝突を経験したことがない。
名前重複する関数がヘッダーにソースごと貼ってあったら、
それをコピペして関数名変えて使ってしまうし。

名前空間が入り乱れた状態を経験した人って、
さぞや大きなプロジェクトに携わってるんだろうなぁ。
是非、そのエピソードを披露して頂きたいものだ。
0030デフォルトの名無しさんNGNG
std::pairってよく使いますか?
たとえば、ストリームから整形しながら文字列を読むメソッドを作って、
文字列と読み込んだバイト数をpairでパックして返してるんですが、
mapの内部用クラスだから、直接使うべきじゃないとか言われたんですよ。

オブジェクトと付加情報を返したいときって、やっぱり汚くても引数で返すのがいいんでしょか?
0031デフォルトの名無しさんNGNG
>>30
そんな事ない。
本当に内部用クラスなら公開されてないし。
むしろ、std::pair使用時の一時オブジェクトのコピーコンストラクタの冗長性の有無を気にした方がいい。
0032デフォルトの名無しさんNGNG
あるfloat値x、y、zがあって、これらが-1.0f〜1.0fの値域にあるかないか判定したいとします。
普通に組むとこうなると思うんですが、
if( x <= -1.0f && x >= 1.0f &&
y <= -1.0f && y >= 1.0f &&
z <= -1.0f && z >= 1.0f)
bHit = true;

野生の勘ですが、もっと最適化出来るような気がしてなりません。
どうでしょうか?
003332NGNG
不等号が逆でした、失礼しました。
0034デフォルトの名無しさんNGNG
>>32
最適化じゃないけど、普通こう書くんじゃないかなぁ。

bHit |= ( x <= -1.0f && x >= 1.0f &&
y <= -1.0f && y >= 1.0f &&
z <= -1.0f && z >= 1.0f);
0035デフォルトの名無しさんNGNG
x*x <= 1.0f && y*y <= 1.0f && z*z <= 1.0f
0036デフォルトの名無しさんNGNG
#define FABS(x) ( *(int32_t*)&x & ~(1<<31) )
if (FABS(x) < 1.0f && FABS(y) < 1.0f && FABS(z) < 1.0f)
 bHit = true;
0037デフォルトの名無しさんNGNG
C99ならfabsfがあるだろ
0038デフォルトの名無しさんNGNG
&&より&のほうが速くなるんじゃないかとおもいます
0039デフォルトの名無しさんNGNG
>>37
最適化っつーんで、あえて最上位ビット反転を明示させるために書いてみただけ。
0040デフォルトの名無しさんNGNG
【テスト内容】
double x, y, z;
for(x=1.1, y=1.1, z=1.1;x<10000000.0; x+=0.01){
 if( 条件式 ){
  cout << "OK" << endl;
 }
}
上記コードで、>>32,>>35,>>36を試した。>>36はcmathのfabs()を用いた。
使用環境はVC6.0。

【結果】
[単位=秒]
   1回目  2回目
>>32 2.156  2.14
>>35 2.125  2.141
>>36 8.375  8.484

【評価】
>>35は条件の範囲が正負で違う場合に修正が面倒。
>>36のfabs()は論外。素直に>>32を使ってよいかと。
0041デフォルトの名無しさんNGNG
>>40
なんでfabs()使うの?
004240NGNG
>>41
ご要望に答えて>>36のマクロでやってみた。但し、以下のようにintを使った。
#define FABS(x) ( *(int*)&x & ~(1<<31) )

【結果】
>>32 2.14
>>35 2.141
>>36(fabs) 8.5
>>36(FABS) 8.031

【評価】
>>36のFABS(x)はfabsより若干速い。
あいかわらず>>32最強かと。
0043デフォルトの名無しさんNGNG
たぶん何も考えずに書いたコードの方がコンパイラも最適化しやすいのだろう。
0044デフォルトの名無しさんNGNG
そんな結果になるわきゃないと思うけどな…
004536NGNG
>>42
確かに遅くなった。
FPUとALUのレジスタが違うから、メモリアクセスが頻発してるんだね。
0046デフォルトの名無しさんNGNG
>>40
CPUによっても違うんじゃないか?
P4系の浮動小数点ユニットはやたらとストールするからなぁ。
0047デフォルトの名無しさんNGNG
ちゅうか>>40のテスト内容ってどういうこと?
0048デフォルトの名無しさんNGNG
Athlon64とかでやってくれない誰か?Intelは一次キャッシュのポートが一つ
しかなく同時に読み書きできないしFPUは貧弱だしで公平な比較ができん。
と言ってもデファクト・スタンダードがIntelというなら構わんけど。
0049デフォルトの名無しさんNGNG
>>47
少し変だよね
005040,42NGNG
>>44、>>46
当方の環境は、WinXP Pen4-3.0GHz HTオン。
VC6.0なので>>46の指摘が、気になるちゃぁ気になる。
VC++Toolkitあるけど、やる気なし。スマソ。
005132NGNG
お答えありがとうございます!
>>32が最強なんて意外です。つーか超勉強になりました。

>>40
fabsは確か組み込み関数の最適化フラグがありましたよね、
また&&と&の違いも気になりますね。
0052デフォルトの名無しさんNGNG
>>48
x86系+VC6が条件なら変わらないだろ
0053デフォルトの名無しさんNGNG
こういう簡単な比較が一番CPUのアーキテクチャによる差が出るんだよな。
俺もP4とAthlon系で随分と傾向が違うのを嫌ほど見てきた。
005440,42NGNG
>>49
感謝されてなんですが、>>47の指摘を受けて、ループを変えました。

for(x=1.1, y=1.1, z=1.1;x<10000000.0; x+=0.01){
↓
for(x=1.1, y=1.1, z=1.1;x<1000000.0; x+=0.01, y+=0.01, z+=0.01){

結果が激変したわけで・・・・。
>>32     0.89
>>35     0.828
>>36fabs  0.813
>>36FABS 0.812

なんか、FABSマクロの挙動が可笑しい(x,y,z=1.25)。調べる気ゼロ。
間違ってるとかない?

【結果】
>>32は最下位転落。残念。
005540,42NGNG
&&連結なので、xだけ判定して、残りy,zを判定せずに処理したことが原因でしょう。
>>52さん、ぬか喜びさせてすみませんでした。藁って許してね。
0056デフォルトの名無しさんNGNG
>>54
君の環境で最下位だからといって(ry
005755NGNG
>>52じゃなくて>>51さんへのレスでした。やばい、漏れテンパッてる。
でもテストは真っ当なものです。信じてちょ。
0058デフォルトの名無しさんNGNG
> なんか、FABSマクロの挙動が可笑しい(x,y,z=1.25)

doubleのままあのマクロを使ってたりして
0059デフォルトの名無しさんNGNG
x, y, zがどれぐらいの割合で、-1〜1の範囲に収まるかによっても結果が違うよね。
最初のx >= -1の条件でほとんどはじかれるようなら、>>32が最速だろうし
ほとんど最後の条件まで判定するようなら他のだろうし。

x, y, zがよっぽど偏ってない限り、小細工はいらないと思うけどね…。
006040,42NGNG
>>58
もちろん、doubleのまま。やっぱ駄目かね。薄々気付いてたけど。
sizeof(double)=8 sizeof(float)=4 sizeof(int)=4 だね、Win32。

んじゃ、doubleをfloatにして試してみるか・・・。ループ変更
for(x=1.1f, y=1.1f, z=1.1f;x<250000.0f; x+=0.01f, y+=0.01f, z+=0.01f){
でやってみた。


【結果】
0.218
0.188
0.172
0.187

【評価】
cmath のfabsが最強ですた。
FABSマクロも正常稼動。
もう勘弁して下さい。(涙
006140,42NGNG
今度こそ、ファイナル!
>>59の指摘をうけて、ちゃんと条件領域を通過するようにした。

#define LIMITER2.0f
#define DELTA0.0000001f
#define LOOP()for(x=-LIMITER, y=-LIMITER, z=-LIMITER;x<LIMITER; x+=DELTA, y+=DELTA, z+=DELTA)
で、実際のコードは以下のような使い回し。

float x,y,z;
LOOP(){
 if( 条件式 ){
 // なんらかの処理(低負荷)
 }
}

【結果】
0.391
0.312
0.297
0.141

【評価】
FABSマクロが最強。
自分のことさえ信じられない。もう勘弁。
0062デフォルトの名無しさんNGNG
Cスレ逝ってやれYO
006340,42NGNG
>>62
もう止めたから安心してくれ。>>59がFAかな。
006432NGNG
>>40
自分もやってみました!

【式】
timer.Start();
for( x=-10000.0 , y=-10000.0, z=-10000.0; x<=10000.0; x+=0.01, y+=0.01, z+=0.01)
{
if( なんらかの式)bHit = true;
}
timer.Stop();
stream << "なんらかの式 : " << timer.GetLatestSecond() << endl;

【結果】
x <= -1.0 && x >= 1.0 && y <= -1.0 && y >= 1.0 && z <= -1.0 && z >= 1.0 : 0.000994819
x <= -1.0 & x >= 1.0 & y <= -1.0 & y >= 1.0 & z <= -1.0 & z >= 1.0 : 0.00571274
x * x <= 1.0 && y * y <= 1.0 && z * z <= 1.0 : 0.00557529
fabs(x) < 1.0f && fabs(y) < 1.0f && fabs(z) < 1.0f : 0.00560937
FABS(x) < 1.0f && FABS(y) < 1.0f && FABS(z) < 1.0f : 0.00557557
x <= -1.0 && x >= 1.0 && y <= -1.0 && y >= 1.0 && z <= -1.0 && z >= 1.0 : 0.00567754
x <= -1.0 & x >= 1.0 & y <= -1.0 & y >= 1.0 & z <= -1.0 & z >= 1.0 : 0.00583258
x * x <= 1.0 && y * y <= 1.0 && z * z <= 1.0 : 0.00557613
fabs(x) < 1.0f && fabs(y) < 1.0f && fabs(z) < 1.0f : 0.00577951
FABS(x) < 1.0f && FABS(y) < 1.0f && FABS(z) < 1.0f : 0.00604825

【評価】
自分の結果だと>>32がダントツでトップになりました。残りは誤差程度の差に収まってしまいました。
&&と&ですが、これは&&の方が早いようです。理由は>>59さんの指摘によるものだと思います。
&& : 0.000994819
& : 0.00571274
0065あっちの住人NGNG
>>62
死ね
0066デフォルトの名無しさんNGNG
相変わらず不等号が逆だな
006732NGNG
>>64は間違ってます・・信用しないで下さい・・
逝ってきます失礼しました・・
006840,42NGNG
無駄に疲れた。
このアフォな労力は一体・・・。

>>65
漏れは、素直に>>62に謝りたい。関係ない人には不快だったかも。

>>66
漏れは、不等号をちゃんと修正してやってますた。
0069デフォルトの名無しさんNGNG
>>65
お前が氏ね
0070あっちの住人NGNG
Cスレに誘導するなという意味なんだが。
0071デフォルトの名無しさんNGNG
FABSが最強に遅いです。なんか定説が覆された感じです。
0072デフォルトの名無しさんNGNG
メモリアクセスが発生するから
0073デフォルトの名無しさんNGNG
*(int32_t*)&x
0074デフォルトの名無しさんNGNG
遅レス失礼

>>30
>mapの内部用クラスだから、直接使うべきじゃないとか言われたんですよ。
std::pairはちゃんと公開されています.対応するヘッダは<utility>になります.
0075デフォルトの名無しさんNGNG
みなさん、処理速度について質問する時は、
質問前に自分で計時測定しましょう。論より証拠です。
0076デフォルトの名無しさんNGNG
age
0077デフォルトの名無しさんNGNG
>>75
最低でもOSとハードウェア構成は暗黙の内に初めから書いて欲しい。
そうでないとベンチマークテストなんて何の意味がある?
0078デフォルトの名無しさんNGNG
コンパイラもね
0079デフォルトの名無しさんNGNG
リンカは?
0080デフォルトの名無しさんNGNG
コンパイルオプションは?

↓っじゃ次の質問どぞ。
0081デフォルトの名無しさんNGNG
あるfloat値xがあって、これらが0.0f〜1.0fの値域にクランプしたいのですが。
普通に組むとこうなると思うんですが、
if(x<0)x=0;
else if(x>1)x=1;

野生の勘ですが、もっと最適化出来るような気がしてなりません。
どうでしょうか?
0082デフォルトの名無しさんNGNG
>>81
x<0になる頻度とx>0になる頻度のどちらが多いかで順番を決める…くらい?
0083デフォルトの名無しさんNGNG
>>81
君の野生の勘は、残念ながら大した事ないようだね。

終了
0084デフォルトの名無しさんNGNG
やっぱお前らには思いつかないか
0085デフォルトの名無しさんNGNG
浮動小数点にCMOVccみたいのはないのか。
アセンブラスレ向けのネタだな。
0086デフォルトの名無しさんNGNG
Hacker's delightになんか書いてなかった?
漏れはfloating使わないからその章は飛ばしちゃった。
0087デフォルトの名無しさんNGNG
そもそもC++ネタじゃないし。
0088デフォルトの名無しさんNGNG
アセンブラなら分岐なしで書けるYO!
0089デフォルトの名無しさんNGNG
コンストラクタを書いたクラスを配列で動的に確保したいので,
思いつきで次のように書いたのですが
newのところでコンパイラに弾かれてしまいます.
これもダメなのでしょうか?

HogeClass *myhoge;
myhoge = (HogeClass *)malloc(sizeof(HogeClass) * 10);
myhoge[0] = new HogeClass(hikisu);
myhoge[1] = new HogeClass(hikisu);
・・・

環境はBCB6.0です.


0090デフォルトの名無しさんNGNG
vector<HogeClass*> に入れれ
0091デフォルトの名無しさんNGNG
HogeClass** myhoge = new HogeClass*[10];
myhoge[0] = new HogeClass(hikisu);
myhoge[1] = new HogeClass(hikisu);
・・・
0092デフォルトの名無しさんNGNG
>>89
エラーメッセージ読め。
それでわかんなかったらエラーメッセージ貼れ。
009389NGNG
>>91さんの方法で動きましたが,
>>90さんの方法も後で試してみたいと思います.
ありがとうございました.
009490NGNG
>>93

どうしてスマートな方法を採用しないんだろう
0095デフォルトの名無しさんNGNG
>>94
まずコピペして試すからだろう。
↓これなら採用されたかもな。

#include <vector>

std::vector<HogeClass*> myhoge(10);
myhoge[0] = new HogeClass(hikisu);
0096デフォルトの名無しさんNGNG
関数(への参照)を引数にして関数を呼び出すときに関する質問です。
ソースは↓です。

#include <iostream>

void g(double &a, double b, double (&f)(double d) ) { a=f(b); }

double k(double p) { return 5.0*p; }

class C
{
public:
C(double y): x(y) {}
double m(double p) { return x*p; }
private:
double x;
};


int main()
{
C c(10.0);
double z;
g(z, 3.0, k); // (#1a)
cout << z << endl ; // (#1b)
// g(z, 3.0, c.m); // (#2a)
// cout << z << endl; // (#2b)
return 0;
}
009796NGNG
>>96 のプログラムでは (#1a) のように関数を引数として計算し、
(#1b) では 30.0 という望みの出力が得られます。

これをクラス中の関数にも適用できるようにしたいのですが、
単純に (#2a) のようにやったのでは
not maches converting function 'm' to type 'double (&)(double)'
というエラーが出ます。
これをクラス内で定義された関数を引数としても動くようにする方法をご教授ください。

なお、コンパイラは g++ 2.95 です。
009896NGNG
失礼、(#1b) で得られる出力は 15.0 です。
(#2b) で得たい出力が 30.0 です。
すみません。
0099デフォルトの名無しさんNGNG
>>97
あなたのいう「クラスの中の関数」をC++ではメンバ関数と言う。
まず、メンバ関数への参照という型は存在しない。
でもメンバ関数へのポインタという型がある。
で、メンバ関数へのポインタは非メンバ関数へのポインタとはだいぶ扱いが違う。
ttp://www.google.co.jp/search?q=%E3%83%A1%E3%83%B3%E3%83%90%E9%96%A2%E6%95%B0+%E9%96%A2%E6%95%B0%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
010096NGNG
>>99 さん、ありがとうございます。

メンバ関数版をテンプレートで作り、非メンバ関数版をオーバーロードしました。

template<typename T>
void g(double &a, double b, T t, double (T::*f)(double d) ) { a=(t.*f)(b); }

g(z, 3.0, c, C::m); // (#2a)

という感じです。
ひとまずこれで動くようになりました。


インスタンス c とメンバ関数 C::m を別々の引数で与える仕様にしましたが、
これを単一の引数で与えることは不可能でしょうか?
0101デフォルトの名無しさんNGNG
>>100
boost::functionを使うと,
typedef boost::function <double (double)> Functor;
void g(double &a, double b, Functor f ) { a=f(b); }
g(z, 3.0, Functor (k)); // (#1a)
g(z, 3.0, boost::bind (&C::m, &c, _1)); // (#2a)

Loki::Functorを使うと,
typedef Loki::Functor <double, TYPELIST_1 (double)> Functor;
void g(double &a, double b, Functor f ) { a=f(b); }
g(z, 3.0, Functor (k)); // (#1a)
g(z, 3.0, Functor (&c, &C::m)); // (#2a)

みたいには書けます.
あと100は
g(z, 3.0, c, &C::m); // (#2a)
じゃないんでしたっけ? g++ 2.95は通るとしても.
010296NGNG
>>101
御教授ありがとうございます。
結局のところ、 c と C::m bフ両方をどこかbノ書かなくてはb「けないという涛_では
似bスようなものでbキね。

ご指摘のように、& を付けた &C::m が適切です。
& が無いとコンパイラが文句を言います。
書き写すときに付け忘れました。
0103デフォルトの名無しさんNGNG
シリアル通信で16進数コードを送受信するプログラムを作成しています。
そこで質問なのですが

char hexcode[] = {0x00,0x06,0x10};

というデータが入っているときにコンソールに

0x00 0x06 0x10

と表示させたくて

for(int i = 0;i<3;i++) cout<<"0x"<<hex<<hexcode[i]<<" ";

としたのですがうまくいきません(空白が出力される)。16進コードをそのまま
出力させるにはどのようにすればいいのでしょうか?
0104デフォルトの名無しさんNGNG
static_cast<int>(hexcode[i]) こう?
0105103NGNG
>>104
即レスどうもです。今は帰宅してプログラム出来る環境にないので
明日さっそく試してみます。
0106デフォルトの名無しさんNGNG
>>104
intだと0x80とかが0xffffff80みたいにされなかったっけ?
0107デフォルトの名無しさんNGNG
つまり
for(int i = 0;i<3;i++) cout<<"0x"<<hex<<(hexcode[i]&0xFF)<<" ";
にしろってことだな。
0108104NGNG
そうでしたね。iomanip で出力幅を調整するとか
してみてください>>103
0109デフォルトの名無しさんNGNG
STL専用の別スレってどこですか。
自己定義のallocatorについて質問してもいい?
0110デフォルトの名無しさんNGNG
ここかな
【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/
0111103NGNG
>>104-108
皆さん、有難う御座います。自分なりにそこそこ勉強したつもり
だったんですが基本的な部分の知識が欠落してました。出力
出力マニュピュレータにつて詳しく勉強してみます。
0112デフォルトの名無しさんNGNG
C++のcharは文字っぽい
0113103NGNG
昨日は有難う御座いました。本日試したところ無事に16進コードを
表示させる事が出来ました。当初の問題は解決したのですが、また
疑問が出来たので質問させて下さい。

char hexcode[] = {0x00,0x06,0x10};

というデータがある時

for(int i = 0;i<3;i++) cout<<"0x"<<hex<<(hexcode[i]&0xFF)<<" ";

だと正常に出力出来て

for(int i = 0;i<3;i++) cout<<"0x"<<hex<<hexcode[i]<<" ";

だとうまくいかないのはナゼでしょう?charは8ビットなので0xFFで
わざわざビットを取り出さなくても良い気がするのですが?
0114デフォルトの名無しさんNGNG
hexcode[i] <-これは char
hexcode[i]&0xFF) <- これは int
0115デフォルトの名無しさんNGNG
>>113
for(int i = 0;i<3;i++) cout<<"0x"<<hex<<static_cast <int> (hexcode[i])<<" ";
0116デフォルトの名無しさんNGNG
C++の質問です。
オブジェクト自体をファイルに保存することってできるんでしょうか?
0117デフォルトの名無しさんNGNG
>>116
バイナリイメージをそのまま保存するようなことは、普通はやらないね。
0118デフォルトの名無しさんNGNG
では、オブジェクトに入ってるデータ?っていいしか思いつかないのですが、そういったデータはファイルに一つずつ書き込んでいくんですか?
0119デフォルトの名無しさんNGNG
>>118
そうだよ。
0120デフォルトの名無しさんNGNG
オブジェクトのシリアライズ。
0121デフォルトの名無しさんNGNG
>118
「シリアライズ」や「直列化」と呼ばれる処理だね。ググってみるヨロシ。
いろいろ工夫する部分 (しなきゃいけない部分) があって面白い分野だ。
0122デフォルトの名無しさんNGNG
boost1.32にSerialization加わるから楽しみだ
0123デフォルトの名無しさんNGNG
>>113
>for(int i = 0;i<3;i++) cout<<"0x"<<hex<<(hexcode[i]&0xFF)<<" ";
>だと正常に出力出来て

整数の昇格とか汎整数拡張とか、インテグラルプロモーションとか
その辺をキーワードに調べてみると分かると思うんですが、要するに
式の中では int よりサイズの小さい型をもつ変数は、暗黙のうちに
int に変換されて、式の値も int になるんです。この性質を上手く
利用しているんでしょう。

そういうことなので、hexcode[i] & 0xFF という式の中では
hexcode[i] が char から int へ変換されますが、>>106氏が指摘
したように hexcode[i] == 0x80 のような場合だと int に拡張
されたとき 0xFFFFFF80 になってしまうんで、0xFF でマスクを
取る必要があるわけです。

>for(int i = 0;i<3;i++) cout<<"0x"<<hex<<hexcode[i]<<" ";
>だとうまくいかないのはナゼでしょう?

hexcode[i] が char のままなので文字出力用の operator<<() が
呼び出されてしまうからです。
0124 NGNG
>>121
ありがとうございました!!
勉強になりました
0125デフォルトの名無しさんNGNG
ビットマップの画素を扱う構造体としてRGBQUADというBYTEデータが4つのデータ型を定義します。
しかし構造体なので画素の加算などRGB別に3行コーディングしなければなりません。

そこでクラスにしてオペレーターを定義しました。
ところがこのクラス、リリース版でも遅いのです。約1.3倍ぐらい時間がかかります。
オペレーターの記述はごく普通のものです。開発環境は最新のVisualStudioですが、こんなに
はっきり遅くなるものなのでしょうか?
0126デフォルトの名無しさんNGNG
>>125
インライン関数にしてみたら?
0127デフォルトの名無しさんNGNG
プログラムが指定した数字以外は入力できないようにする(数字以外も)にはどうすれば良いでしょうか?
0128デフォルトの名無しさんNGNG
>>127
数字以外かどうかチェックすればいいと思います。
0129デフォルトの名無しさんNGNG
>>127
「入力できないい」の意味があいまいなので、誰も答えられないと思う。
少なくとも日本語(英語とかでもいいけど)で要求仕様を書けないようだと、
解決方法も得られない。
0130デフォルトの名無しさんNGNG
>>127
入力して欲しくないキーの上に画鋲を張っておくとか。
0131デフォルトの名無しさんNGNG
>>127
どういう状況で数字入力を禁止したいのか分かりませんが、
GUIなら特定のキー以外のイベントを無視するとか、
コンソールで対話的な動作なら、Enterキー入力後に再入力を求めるとか。
0132デフォルトの名無しさんNGNG
>>127
あ、そもそもC++の話題じゃないのかな?
0133デフォルトの名無しさんNGNG
>>130
そんなことされたら余計押したくなるだろ
0134デフォルトの名無しさんNGNG
>>127
入力して欲しくないキーを押したらハードディスクのフォーマットを開始すると
明示しておき、押されたら実際にフォーマットを開始すればよい。
0135デフォルトの名無しさんNGNG
>>123
式の値は常にintになるわけじゃないけどな。まあ、細かい話だが。
この例ではintになると考えていいだろう。
0136デフォルトの名無しさんNGNG
オーバーロードでcharを受け取る演算子が定義されていても無条件に
プロモートが行われてintになってしまったら困るわけだが。

そもそも<<でchar型の単文字を表示できなくなって困るじゃないか。
0137デフォルトの名無しさんNGNG
>>127
押されたくないキーを1兆回くらい押して壊しておく。
0138デフォルトの名無しさんNGNG
Part34のほうで質問したほうがいいみたいですね。
0139デフォルトの名無しさんNGNG
>>138
どっちみち回答者は同じだ罠。
0140デフォルトの名無しさんNGNG
にもかかわらず
場所を変えると流れも変わるのが不思議なところ
0141デフォルトの名無しさんNGNG
int型で1−10までの数字だけ入力でき、それ以外の数や文字では、「不正な数が入力された」
と表示されるようにしたいんですけど
0142デフォルトの名無しさんNGNG
そういう質問をするとCスレ誘導厨がわくからやめて。
0143デフォルトの名無しさんNGNG
>>141
if文の使い方わかってれば出来るだろう
0144デフォルトの名無しさんNGNG
printf( "1−10までの数字以外をいれたら自爆する" );
0145デフォルトの名無しさんNGNG
C++ スレに書いたって事は、そういうクラスの作り方を知りたいってことか?
0146デフォルトの名無しさんNGNG
>>141
ここでもお読みなさい。
http://www.kumei.ne.jp/c_lang/cpp/cpp_66.htm
0147デフォルトの名無しさんNGNG
何はともあれ、>>133は勇者
0148デフォルトの名無しさんNGNG
>>89
HogeClass *myhoge;
↓
HogeClass **myhoge;
0149デフォルトの名無しさんNGNG
C++をはじめようと思って、ボーランドのフリーのコンパイラを
インストールしたのですが、うまくコンパイルできません。

コマンドプロンプトで bcc32 hello.cpp(hello.cppはコンパイルしたいファイル名)
と入力すると、'bcc32'は、内部コマンドまたは〜〜として認識されていません。
というエラーがでます。

コンパイラをマイドキュメントにフォルダを作ってそこにインストールしたのですが
それがダメだったんでしょうか?
ソースファイルもマイドキュメントに別フォルダを作ってそこに入れています。

アドバイスお願いします。
0150デフォルトの名無しさんNGNG
>>149
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
0151498NGNG
板違いでしたか・・・・

向こうで聞いてきますね。
失礼しました。
0152デフォルトの名無しさんNGNG
つーかパス通ってねーだけだろ…
0153デフォルトの名無しさんNGNG
パスは通っています!!
勝手に決め付けないでください!
0154デフォルトの名無しさんNGNG
俺はパス。
0155デフォルトの名無しさんNGNG
↓お前はパンパース
0156デフォルトの名無しさんNGNG
│↑
└┘
 ∩∧∧
 ヽ(゚Д゚ )
   \⊂\
    O-、 )〜
      ∪
0157デフォルトの名無しさんNGNG
質問ス

class A {
public:
 A(int v) {};
private:
 A(const A&) {
  puts("コピーコンストラクタ禁止");
 }
};

とやると

{
 A a = A(1);
}

が"privateだから呼べない"コンパイルエラーになります。
ところが、privateをpublicにすると、コンパイルはとおりますが、
実行してもputs()が呼び出されるわけではありません。

どう解釈したらよいんでしょうか。
0158デフォルトの名無しさんNGNG
>A a = A(1);
これは意味論上はコピーコンストラクタを呼び出しているが、
コンパイラは呼び出しを省略しても良いことになっている。
このほかにこういうことが起こるのは「戻り値の最適化」と呼ばれる場合。
この二つ以外なら確実にコピーコンストラクタが呼ばれる。
0159デフォルトの名無しさんNGNG
前方参照宣言ってコンパイル時のリソース消費量を軽くする以外になんか
意味があるんでしょうか?関数のプロトタイプ宣言なら、
型チェックの意味もあったりして便利だとは思うけど。
class CLASS;
0160デフォルトの名無しさんNGNG
>>159
意味はクラス型の宣言。それだけ。
コンパイル時のリソース〜はただそういう使い方ができるというだけ。
class CLASS; のあとに namespace CLASS とかできなくなる効果もあると言えるかもしれない。
0161デフォルトの名無しさんNGNG
>>159
前方宣言しないと、相互にポインタを持ち合うようなクラスが作れない。

struct B;
struct A { B* b; };
struct B { A* a; };

あとコンパイル速度は重要だと思うぞ。前方宣言せずにヘッダファイル中で
#include しまくると、すぐにヘッダファイルの依存関係が深くなる。一つの
ヘッダ書き換えただけで大量の再コンパイルが必要になって、生産性に
かなりの悪影響が出る。
0162デフォルトの名無しさんNGNG
>>158
なるほど、意味論上のチェックでもって弾かれるけど、
実際には呼び出されないということですね。
うーんややこしい。
ありがとうございました。
0163デフォルトの名無しさんNGNG
>>160-161
なるほど・・・
0164デフォルトの名無しさんNGNG
>>160-161
なるほど・・・
0165デフォルトの名無しさんNGNG
>>163-164
・・・ザ・ワールド
0166デフォルトの名無しさんNGNG
寒
0167デフォルトの名無しさんNGNG
そして時は動き出す
0168デフォルトの名無しさんNGNG
ある共通関数にarray stringというパラメタがあったのですが、
これは具体的にはどうのようなもんでっしょうか?

stringはたぶんSTLで、arrayって????
0169デフォルトの名無しさんNGNG
>>168
具体的にっていう質問は、具体的なコード出してから言うもんだ。
0170デフォルトの名無しさんNGNG
int aaa(array string str)
{

}

こんなかんじ
0171デフォルトの名無しさんNGNG
>>170
少なくとも標準ライブラリの範疇ではないので、ここで聞いても回答
得られんぞ。手元のコードからarray の定義を探してくれ。
0172デフォルトの名無しさんNGNG
>>170
そんなのコンパイル通るの?
#define array
だったら通るだろうけど。
ついでに
#define string int
だったらおもしろいのに。
0173デフォルトの名無しさんNGNG
STLのアルゴリズムに渡す関数、
テンプレートの具象化したモノのtypedefなんかは大域で
使えちゃうと気持ち悪いので名無しのnamespaceにぶち込むようにしている。
こんなnamespaceの使い方はアリなんだろうか。
まぁ関数だけならstatic宣言してもいいんだろうけど。
0174デフォルトの名無しさんNGNG
そりゃ立派な用途だと思うけど・・・
0175デフォルトの名無しさんNGNG
>>173
俺も同じコトやってる。*.cpp ローカルにしか使わない構造体とかは、基本的に
無名名前空間行き。特定クラスに強く結びついてるモノは nested class にする
けど。

C++ だと非グローバルスコープの構造体・クラスはテンプレート引数に渡せないっつー
制約があるから、他のソースコードとの名前重複を無視したければ無名名前空間に
入れるのが安全だよね。
0176173NGNG
なるほどね。
グローバルスコープを持つように見せかけつつ
名前重複を避けたい時に特に有効なのか。
ありがトン。
0177デフォルトの名無しさんNGNG
Cのモジュールローカルなstaticと同じように無名名前空間を使うのは常識でしょ
0178デフォルトの名無しさんNGNG
>>177
前スレ795-の話が少し気になる。
気にしてもしょうがないんだろうけど。
0179デフォルトの名無しさんNGNG
>>175
構造体やtypedefを無名名前空間に入れても意味無くないか?

これらは関数と違って名前が外部に出ないだろ?
0180デフォルトの名無しさんNGNG
void hoge()
{
int i = 0; // <----(a)
{
int i = 1;
// ここで(a)のiにアクセスしたい
}
}

内側のスコープで::iと書くとグローバルのiを探しに行ってしまいます。
上記のようなことは出来ないのでしょうか?
0181デフォルトの名無しさんNGNG
つまんねー釣りだなおい
0182デフォルトの名無しさんNGNG
こういうあまりにくだらないのは放置しましょうねみなさん。
0183180NGNG
>>181-182
真面目に訊いているのですが…
C++始めたばかりなのですが、変な質問なのでしょうか?
0184デフォルトの名無しさんNGNG
日本語書けてる奴がこんな知障がするような質問するかよ
0185デフォルトの名無しさんNGNG
グローバル・・・・
0186180NGNG
>>181-182
なんとなく言いたいことがわかりました。
変数名を変えればいいじゃん、ってことですかね?
そうではなく>>180のような状況でも何かアクセスする手段があるのかなと疑問に思ったのです。
0187デフォルトの名無しさんNGNG
こいつよりチンパンジーがC++習った方が上達早そうだな
0188デフォルトの名無しさんNGNG
>>186
基礎からやり直した方が速いよ。もうこのスレに来んな。
0189デフォルトの名無しさんNGNG
こういう構ってチャンは放置が一番有効なんだよ
0190180NGNG
真面目に答えてくれる方がいないようなので他のところで訊いてみます…
0191デフォルトの名無しさんNGNG
>>190
どこで聞いても同じだと思うが。
0192180NGNG
>>191
そうですか…
自分は何を勘違いしてるのでしょうか?
それすらわかりません…
0193デフォルトの名無しさんNGNG
180は悪くないな。答えてるやつがたまたまドキュソなだけ。
結論から言うと、180が求めてるような機能はC++にはないな。
0194デフォルトの名無しさんNGNG
>>192
>>180の内容を100回声に出して読んでみな。
0195デフォルトの名無しさんNGNG
>>193
君も勘違いしてる。
0196デフォルトの名無しさんNGNG
スタックのないマシンのコンパイラだったら自動変数もヒープに確保するでしょ。
コンパイラの拡張機能でiにアクセスできるかもよ。
0197デフォルトの名無しさんNGNG
>>196
君も勘違いしてる。
0198デフォルトの名無しさんNGNG
何が勘違いなんだか。180も変なの絡まれて運が悪かったな。
まあ答えは一言、「残念ながらそんな機能はありません」で終わりなのは確かだが。
0199180NGNG
>>193
そうですか。無いとわかったのですっきりしました。
無いからといって困るわけではありませんが、気になって仕方が無かったので質問しました。
ありがとうございました。
0200デフォルトの名無しさんNGNG
>>197
どう勘違いなの?
0201デフォルトの名無しさんNGNG
自動変数とはhoge、もしくはそこからコールされた関数に
制御があるあいだだけ存続するというのは、仕様ですか?
0202デフォルトの名無しさんNGNG
>>201
仕様です。
0203デフォルトの名無しさんNGNG
勘違い言うぐらいなら言語の厳密な仕様ぐらいわかってるんだよな。
はよ、教えれ。
0204デフォルトの名無しさんNGNG
スレの流れが速いと思ったら、知障が沸いてたのか
0205デフォルトの名無しさんNGNG
>>202
どこに書いてあんの?
0206デフォルトの名無しさんNGNG
だから*問題通りの*プログラム書いて質問しろよ。
0207デフォルトの名無しさんNGNG
いっとくが変数領域の存続期間と言語機能としてのスコープは別だからな
0208デフォルトの名無しさんNGNG
>>205
どこって、もちろん仕様書に書いてあるはずと思うぞ。
0209デフォルトの名無しさんNGNG
どうでもいいけど180の問題は解決しただろ。
これ以上何がやりたいんだ?
180を非難したいのか?
0210デフォルトの名無しさんNGNG
>>208
だから、あれは仕様書じゃないってば。
0211デフォルトの名無しさんNGNG
>>210
いや、「あれ」って言われてもな・・・
なんやら話が良くわからんから退散するわ。あしからず。
0212デフォルトの名無しさんNGNG
>>199
グローバルならアクセス可能だよ

#include <stdio.h>

int i = 111; //これがグローバル

int main(){
 int i = 333; //ローカル
 {
  int i = 777; //ローカル
  printf( "%d, %d", ::i, i );
 }
 return 0;
}

//実行結果
//111, 777
0213212NGNG
ってごめん俺も良く読んでなかった、ちゃんと分かってるね
それじゃ煽ってる奴は、どこに突っかかってるんだ…
0214デフォルトの名無しさんNGNG
180の頭の悪さ
0215デフォルトの名無しさんNGNG
>>212
あーあネタばらしちゃった。まあいいや。
ところでローカル変数とグローバル変数を区別したければ、グローバル変数を
名前空間に入れておけばよい。
0216デフォルトの名無しさんNGNG
頭の良さ
180>>>>>>つっかかってるやつ>215
0217デフォルトの名無しさんNGNG
>>216
もうええっちゅーのに。
0218デフォルトの名無しさんNGNG
↓流れを変える一言
0219デフォルトの名無しさんNGNG
ぬるぽ
0220デフォルトの名無しさんNGNG
↓気を取り直してもう一言
0221デフォルトの名無しさんNGNG
>>215
ローカル変数は同名の変数によって完全に隠蔽されてしまうから
それは無理。
0222デフォルトの名無しさんNGNG
↓>>221はスルーの方向でもう一言
0223デフォルトの名無しさんNGNG
えんがちょ
0224デフォルトの名無しさんNGNG
      ,,、-'''"´ ̄    ̄`"''-、
    /              \
   /                 ヽ
   |  (●)        (●)  |、
 / | :::::    \___/    ::: | \
(_/ヽ         \/        /ヽ_)
    \              /    
       -、、,,,,,__,,,,,、、- 
       ( __)   (__ _)
0225デフォルトの名無しさんNGNG
ところで喪前ら switch で case ラベルごとにブロックで囲ってる?
例えばこんな感じで

switch( null )
{
    case p:
    {
        break;
    }
    case o:
    {
        break;
    }
}
0226デフォルトの名無しさんNGNG
>>225
変数使うときだけ囲ってる。

switch( null )
{
case p:
{
    char ga[] = "ガッ";
break;
}
case o:
break;
}
0227デフォルトの名無しさんNGNG
>>199
ノセラレテじゃじゃじゃじゃ〜ん
void hoge()
{
 struct{
  int i;
 }my;
 my.i = 10;
 {
  int i=100;
  cout<<i<<' '<<my.i<<endl;
 }
}
0228デフォルトの名無しさんNGNG
例えば構造体
ABC
っていうのがあって
この型の変数を定義する場合
ABC gABC;
ABC new gABC;
とnewをつける場合とつけない場合って
どういう違いがあるのでしょうか?
0229デフォルトの名無しさんNGNG
>>228
コンパイル通らねえだろソレ
0230デフォルトの名無しさんNGNG
メンバ変数に _ をサフィクスに使ってる人ってグローバルは何使ってます?
やっぱり g_ のプリフィクス?
0231デフォルトの名無しさんNGNG
プリフィックスとサフィックスなら,互いに干渉しないじゃん。
0232デフォルトの名無しさんNGNG
>>231
漏れはメンバ変数には prefix に _ を使っています。
グローバル変数は使ったことありません。
定数なら全部大文字にしてるけど。

それより、クラス変数 (っていうんだっけ?) には
何を使えばいいんですか?(static Class::xxx)
0233デフォルトの名無しさんNGNG
自分で決めろ
0234デフォルトの名無しさんNGNG
>>232
m_*****
を使うのが普通では?
0235デフォルトの名無しさんNGNG
_をprefixにするのは良くないらしいよ。システムが予約してるんだそうな。
まあ、GoFがこれやっちゃってる悪しき例なんだが。
0236デフォルトの名無しさんNGNG
>>230
globalは全部globalネームスペースに詰め込んで
global::
でアクセスします
0237デフォルトの名無しさんNGNG
#include <iostream>
using namespace std;

int main() {
bool b1 = true , b2 = false , b3 = 0;
if (b1 && (b2 || ++b3)) cout << "Kitty on your lap";
cout << b1 << b2 << b3 << b1 && (b2 || ++b3) << endl;
return 0;
}

このコンテキストではオーバーロード'endl'が曖昧というエラーがでます。
<< endl を省くとコンパイルできるのですが
なぜ endl がダメなのか、わかりません。

コンパイラはBorland C++5.5.1です。
よろしくお願いします。
0238デフォルトの名無しさんNGNG
>>237
曖昧でないと言えるのか?

ごちゃごちゃ書いてあるけど、問題はこういうことだろ。
cout << b1 && b2 << endl;
0239デフォルトの名無しさんNGNG
TLSって必須じゃないですか?
何故C++はTLSをサポートしないのですか?
0240デフォルトの名無しさんNGNG
ギャルゲーはギャルゲー板で
0241240NGNG
で、thread local storageのことだとすると、
threadはC++の範囲外だからサポートも糞もないのよ。
そんだけ。
0242デフォルトの名無しさんNGNG
でもほとんどのコンパイラが独自拡張していますが、
それでも範囲外ですか?
0243デフォルトの名無しさんNGNG
標準であるべきと思うなら、規格を決めてる人たちに提案してみたら?
0244デフォルトの名無しさんNGNG
boost::threadがあるので次期標準になるかも
0245デフォルトの名無しさんNGNG
移植性ってそんなに重要じゃないですよね?
Windowsで動けば充分ですよね?
0246デフォルトの名無しさんNGNG
主語がないよ
0247デフォルトの名無しさんNGNG
ソフトウエア(ソースコード)の移植性です。
よろしくお願いします。
0248デフォルトの名無しさんNGNG
依頼主に聞けよ・・・
0249デフォルトの名無しさんNGNG
>>239
>TLSって必須じゃないですか?

マルチスレッドのアプリいくつか作ったけど
TLS使ったことないよ
必須なの…?
0250デフォルトの名無しさんNGNG
Cのtime.hみたいな腐れた設計のライブラリでも使わない限りTLSなんか必要ないだろ。
0251デフォルトの名無しさんNGNG
>>249
隠れていて気が付かないだけでは?
0252デフォルトの名無しさんNGNG
istream::readでバイナリデータを読み書きするときにエンディアンを考慮して並べ替えないとだめですよね
これは自前で並べ替えるのが常なんでしょうか?
read( void*, size, ios::big_endian )みたいなのはないのかな?
用意されているのに自分で作るのもなんあので
0253デフォルトの名無しさんNGNG
エンディアンを理解してない質問に
見えるのは気のせい?
0254デフォルトの名無しさんNGNG
>>252
253に同意だが、とりあえず答えてやる。
「ない」
0255デフォルトの名無しさんNGNG
MFCでコーディングしているとどうしてもドキュメントクラスに処理が集中してしまうのだが
どうしたらいいのだろうか。処理の意味的にビュークラスやアプリクラスには入れられない。
こういうものなのだろうか?
0256デフォルトの名無しさんNGNG
>>253,254
家のインテルマシンでリトルエンディアン仕様のファイルを読み込もうとしたのです。
上位桁から順番に並んでるデータを。
バイト列を読み込んでそのままキャストしたらだめなんですよね?
あれ?どういうふうに理解していないと思われたのでしょうか?

>「ない」
どうもです
0257デフォルトの名無しさんNGNG
リトルとビッグが逆でした↑
0258252=256=257NGNG
ios::big_endian がおかしいということか
ios::endian_irekaete にしときます
0259デフォルトの名無しさんNGNG
あ、もしかして
int a;
short b;
char c;
stream.read(&a,sizeof(a),ios::big_endian);
stream.read(&b,sizeof(b),ios::big_endian);
stream.read(&c,sizeof(c),ios::big_endian);
みたいな使い方をするという意味?
ただ、そのインターフェースはいまいちな気がするなぁ。
(iostream自体がいまいちだという突っ込みは無しの方向で)

read( int & ret, ios::big_endian );
read( short & ret, ios::big_endian );
read( char & ret, ios::big_endian );
の方が自然かと。

いずれにしても無いけど。
0260252NGNG
>>259
テンプレート使ってそんな感じにしておきました。どうも
0261デフォルトの名無しさんNGNG
例えば
char型の変数を定義する場合
char* pszABC = new char[10];
char szDEF[10];
とnewをつける場合とつけない場合って
どういう違いがあるのでしょうか?
0262デフォルトの名無しさんNGNG
>>261
解放されるタイミングと型
0263デフォルトの名無しさんNGNG
>>261
下のサイズは常数のみ
0264デフォルトの名無しさんNGNG
>>262
そこらへん、もうちょっと詳しくお願いします。
char* pszABC = new char[10];
と宣言したpszABCは
delete pszABC;
しないとメモリーリークを起こしてしまいますよね?
char szDEF[10];
と宣言したszDEFは、特にメモリー解放しなくてもいいですよね。
なんで?
どちらも、メモリー上にchar型10桁分の領域は確保してはいるんですよね?
0265デフォルトの名無しさんNGNG
>>264
キーワード
スタック ヒープ
0266デフォルトの名無しさんNGNG
遅レス失礼

>235
>_をprefixにするのは良くないらしいよ。システムが予約してるんだそうな。
これは半分本当で半分間違い.予約されてる名前の規則は実はちょっと複雑.

>まあ、GoFがこれやっちゃってる悪しき例なんだが。
GoFの名前の付け方は規格には違反してないと思います.
0267デフォルトの名無しさんNGNG
それを覚えるのが面倒だから_のプリフィクスを避けるべきなのでは?
0268デフォルトの名無しさんNGNG
>267
ですね.細かいことにこだわりすぎました.失礼.
0269デフォルトの名無しさんNGNG
>>252
炎ディ案が問題になるならバイナリで読み書きすることが間違い。
0270デフォルトの名無しさんNGNG
>>264
キーワードは規格に出てくる言葉にしたほうがいいかも。
自動変数 動的確保
0271デフォルトの名無しさんNGNG
>>235
先頭の_は、非グローバルでその次に大文字がこなければ使っても良い。
__と2連続で_が出てくる名前は使用不可。
0272デフォルトの名無しさんNGNG
>>270
既存のファイルフォーマットでエンディアン指定されたバイナリのフォーマットって沢山あるし・・・
そういうの読みたいときもあるじゃん。
0273272NGNG
>>269 の間違いでしたゴメンナサイ!!
0274デフォルトの名無しさんNGNG
>>271
なんと、その程度なんだ

使っていこうかなぁ…m_は好かないので
何も付けずにやってたけど、評判悪いし
0275デフォルトの名無しさんNGNG
>>264
char* pszABC = new char[10];と宣言したpszABCはdelete pszABC;
とすると未定義の振る舞い。delete[] pszABC;とせねば何が起きるか
分からない。
0276デフォルトの名無しさんNGNG
後ろにつければそんな事を知らない人でも自由に使える
前につけるのは混乱を呼ばないか?
0277デフォルトの名無しさんNGNG
>>276
禿に文句いえYO
0278デフォルトの名無しさんNGNG
class A {
int _value; // OK
int _Value; // NG
int other_value; // OK
int other__value; // NG
};

int _value; // NG
int _Value; // NG

こんな感じかな?
0279デフォルトの名無しさんNGNG
前につけるのはOKかもしれないけど、とりあえず批判の対象となるので、
お勧めしない。
現にExceptional C++ではくそみそに非難されてた。
0280デフォルトの名無しさんNGNG
糞味噌って程じゃあ…
まあ、漏れも_のprefixには反対だが
0281デフォルトの名無しさんNGNG
前につけることが禁止されてなければこれほど名前付けで楽できる事は無いのに。
0282デフォルトの名無しさんNGNG
ちなみに、#defineで_valueとかが使われる可能性があるので、クラスのメンバと言えども、OKではないです。
0283デフォルトの名無しさんNGNG
後ろにつければ?
0284デフォルトの名無しさんNGNG
>>282 この流れでいいかげんなこと言っちゃいけない。
0285デフォルトの名無しさんNGNG
>>282
プリプロセッサ用の予約名は大文字で始まるから問題ないんだよ。
0286デフォルトの名無しさんNGNG
いや、実際に>>282みたいな実装があるらしい。
Exceptional C++に書いてある。
0287デフォルトの名無しさんNGNG
プログラミング言語C++ 116ページより

先頭がアンダースコアになっている名前は、実装や実行時の環境の特別な機能のために
予約されているので、アプリケーションプログラムではそのような名前を定義しないように
するべきである
0288デフォルトの名無しさんNGNG
>>286
うん、だからといってそれはC++でコードを書くときに使ってはいけない理由にならない。
標準以外のマクロや関数を提供してる処理系なんていくらでもあるんだし。

たとえば、VC++でmin/maxというマクロが設定されてるんだけど、
その名前を絶対に使うなってのは無茶ってものだ。
0289デフォルトの名無しさんNGNG
VC++ の min/max って何で inline にしないの?
せめて ifdef __cplusplus で囲って欲しいのだが
0290デフォルトの名無しさんNGNG
理由の一つにはなるよ。
min/maxだって使わないのがいいだろうね。
0291デフォルトの名無しさんNGNG
アホか
0292デフォルトの名無しさんNGNG
>>287 FDIS 17.4.3.12 より
[Each name that contains a double underscore (__)]
or
[begins with an underscore followed by an upper-case letter]
is reserved implementation for any use

[Each name that begins with an underscore]
is reserved to the implementation for use as a name in the
*global namespace.*
0293デフォルトの名無しさんNGNG
>>290
VCじゃmin/maxつかわないほーがいいだろうけど、他の処理系使うときにまでそんな事言わないだろ。
282みたいな実装の処理系があるからと言って、関係ないところでそれを制限するのは筋違いだ。
0294デフォルトの名無しさんNGNG
>>292
そこは標準*ライブラリ*のページだね。
C++のページには予約語の説明ないのかな?
0295デフォルトの名無しさんNGNG
>>293
でも移植性はなくなる。
筋違いとは思わない。
0296デフォルトの名無しさんNGNG
C++の「言語」で予約してる名前はkeywordsにあるものだけ。
0297デフォルトの名無しさんNGNG
defineなんざundefすればokさ。
0298デフォルトの名無しさんNGNG
そうそう。
boostの中身はundefの嵐さ
0299デフォルトの名無しさんNGNG
話が複雑で良くわからないのだけど、

・アンダースコアで始まる名前はグローバルのみで予約されている
・プログラミング言語C++は間違い
・それにもかかわらず、#defineで使っている処理系がある

でいいの?
0300デフォルトの名無しさんNGNG
アンダースコア+upper-case letterはどこでも。
0301デフォルトの名無しさんNGNG
つまり要約すると使うなってことだ。
0302デフォルトの名無しさんNGNG
それを普通は思考停止と言う
0303デフォルトの名無しさんNGNG
じゃあ、勝手に思考停止しないで使って批判されててくれ。w
俺は止めないから。
0304デフォルトの名無しさんNGNG
批判する奴がバカなんだしどうでもええよ。
0305デフォルトの名無しさんNGNG
そう思ってるならお前がバカだ。
0306デフォルトの名無しさんNGNG
そう思ってるならお前がバカだ。そう思ってるならお前がバカだ。
0307デフォルトの名無しさんNGNG
批判する奴は正当なのを不当だと難癖つけるんだろ?バカじゃん。
0308デフォルトの名無しさんNGNG
この場合、言語規格によって、予約されているされていないはあんまり問題ではないと思うよ。
実際に#defineで使っている処理系がある以上、移植性がなくなるし
面倒に巻き込まれる可能性が出て来るのであれば、避けるべき。
思考停止できるということは、聞こえは悪いが、この場合に限っては利点だよ。
0309デフォルトの名無しさんNGNG
>>307
やっぱお前バカだ。
正当とか関係なく避けたほうがいいことはある。
0310デフォルトの名無しさんNGNG
そう思ってるならお前がバカだ。
0311デフォルトの名無しさんNGNG
プログラミング言語C++に書いてある(間違えてる?)ぐらいだしね。
どの処理系が#defineで使っているかまでは知らないけど、使わない方が
良いことは確かだね。
0312デフォルトの名無しさんNGNG
オレは使ってみるかなぁ、移植なんかしないし
なんか魅力的なんだよな、_メンバ
魅力あるから話題になるんだろうし
0313デフォルトの名無しさんNGNG
お前様方ちょいと質問です。

template<typename _Type> static inline void endian(_Type & val) {
std::reverse(reinterpret_cast<char *>(& val), reinterpret_cast<char *>(& val + 1));
}
って定義があって、構造体のメンバに対して例えば
struct Foo {
double bar;
int baz;
} foo;
endian(foo.bar);
endian(foo.baz);
ってな感じで使ってるコードがあるんですが、endian()の中で一体全体何が起きているのか
教えちゃあ貰えないでしょうかね。
0314デフォルトの名無しさんNGNG
ビッグエンディアンとリトルエンディアンを変換してるだけだろ。
0315デフォルトの名無しさんNGNG
>>308
>#defineで使っている処理系がある以上

そのシンボルだけ避ければ良い話じゃないか?
#defineで使われている可能性を論じるのなら
C++で認識可能なあらゆるシンボルが使えなくなってしまうし。
0316313NGNG
>>314
いやさ、そいつは判らない訳じゃあないんですが、どんな仕掛けになってるのかって処がよく判らないんでさ。
普通にCで書くならポインタとサイズを渡さないといけないわけで、それを巧いことやっつけてるってぇことは想像つくんですがね。
0317デフォルトの名無しさんNGNG
サイズの変わりに終了位置を渡してるじゃん
0318デフォルトの名無しさんNGNG
>>315
そうやっていちいち避けるのが面倒だから使わないようにするという話だろ。
実際問題、それ以外であまりに迷惑な#defineのされ方はしない。
>>316
val + 1でサイズ分移動するだろ。
0319313NGNG
>317の話でピンと来たんで調べてみたら、reinterpret_castってぇのはCのキャストと考えてもよさそうだってことですな。
つまりendian()の中身は
reverse((char *) &val, (char *) (&val + 1));
って感じだと。これで終了位置がわたるってぇことは、この場合のtemplateは<>で括らなくてもきちんと型情報が伝わってるってことですかい。
なにやら巧い仕組みですなぁ。
いやほんとにC++は面白いもんですな。てめぇで書くのはちょっとばっかし難儀しそうですがね。

>>314、>>317、>>318
いやぁ、忝い。
0320デフォルトの名無しさんNGNG
ん?別にC++じゃなくたって、何の型のポインタかわかっていれば、
val+1でポインタのアドレスはサイズ分移動するだろ。

templateは<>でくくらなくてもってのは意味不明。
templateで型情報がコンパイル時に伝わってるというのは
ある意味正しいかもしれないが。
0321デフォルトの名無しさんNGNG
ま、この流れを見てもまだアンダースコアから始まる変数名つける奴は、
ぶっちゃけ「揉め事を起こしたい」だけだな。
よっぽどの使用価値を提示できない限りは。
0322デフォルトの名無しさんNGNG
ところで「名前_ 」派の人は構造体のフィールドも
「名前_ 」としますか。
0323デフォルトの名無しさんNGNG
俺はしない。
0324313NGNG
>>320
いやほら、vectorなんてぇのは<>で型を括るじゃあないですか。
なんとなくそんなイメージがあったんで、endian(foo.bar)だけで型が判るのかと思ったわけですよ。
0325デフォルトの名無しさんNGNG
>>321
関数名は?

そういやシンボル名といえば、昔 end ってシンボルを定義してハマったことがあるな。
その処理系だと、リンカが end ってシンボル予約してやがって、特定のタイミングで
メモリを壊すプログラムになってしまったという。(後で _end に変わってたけど)
0326デフォルトの名無しさんNGNG
>>324
クラステンプレートは型必須、関数テンプレートは引数から推測可能なら
型は省略できる。
0327デフォルトの名無しさんNGNG
>>324
まあそんな感じ。
コンパイラはendian(foo.bar)が使われているのを見ると、double用のendianが
使われているのがわかるから、double用のendianのコードを生成できる。
これ以上情報要らないだろ?
0328デフォルトの名無しさんNGNG
>>326
おっと合点承知の介。重ね重ね痛み入ります。
0329313NGNG
おっと、>>327さんもだ。遅れて申し訳ない。
では夜も更けてきたのでこれにて御免。
0330デフォルトの名無しさんNGNG
いずれ廃止する予定の変数などはorz_をprefixに使っている。
0331デフォルトの名無しさんNGNG
【法則】
廃止する予定の変数・関数はいつまで経っても廃止されない。
0332デフォルトの名無しさんNGNG
はいしどうどう はいどうどう
0333デフォルトの名無しさんNGNG
typedef void (Hoge::*HOGEP)();
const HOGEP[10] = { Hoge::A, Hoge::B, ・・・};

というのを一気に

const void (Hoge::*HOGEP[10])() = { Hoge::A, Hoge::B, ・・・};

としたらvoidからconst voidに変換できないとコンパイラに言われました
で行き当たりばったりにいろいろ試してみると

void (Hoge::*const HOGEP[10])() = { Hoge::A, Hoge::B, ・・・};

でコンパイルが通ったのですが意味的におなじでしょうか?
0334デフォルトの名無しさんNGNG
>>333
おなじです。
(でもたぶん上のコードはコンパイルできない)
0335デフォルトの名無しさんNGNG
>>333
> const void (Hoge::*HOGEP[10])()
HOGEP は
 Hoge クラスのメンバ関数へのポインタの配列で、
 ポインタが指すメンバ関数の型は引数無し・戻り値 const void 型
 (const は戻り値にかかってしまい HOGEP[0], HOGEP[1], ... は const ではない)

> void (Hoge::*const HOGEP[10])() = { Hoge::A, Hoge::B, ・・・};
 Hoge クラスのメンバ関数への書き換え不可能なポインタの配列で
 ポインタが指すメンバ関数の型は引数無し・戻り値 void 型

typedef で定義してるのと後者は同じ意味になる。前者は全然違う。
C/C++ の型定義は微妙に分かりづらいので、悩んだら素直に typedef
しとくのが吉だよ。
0336デフォルトの名無しさんNGNG
>>334
変数名を書き忘れていました
ただしくは
const HOGEP hogep[10] = { Hoge::A, Hoge::B, ・・・};
でした
レスありがとうございmす
0337デフォルトの名無しさんNGNG
>>335
さらに詳しくありがとうございます
0338デフォルトの名無しさんNGNG
マウスポインターの座標と押されたマウスボタンを検出するにはどうしたらいいのでしょうか
ご教授おねがいします
0339デフォルトの名無しさんNGNG
int get_mouse_button_status(unsigned int* status)
{
/* 環境依存なので好きなコードを */
}

int get_mouse_cursor_position(int* x, int* y);
{
/* 環境依存なのでお望みのコードを */
}

unsigned int status;
get_mouse_button_status(&status);

int x, y;
get_mouse_cursor_position(&x, &y);
0340デフォルトの名無しさんNGNG
>>157に似た質問になるんすけど
operator=も省略の対象になるんでしょうか?
自分は全てのクラスにコピーコンストラクタとoperator=を入れるようにしているので
コピーコンストラクタと違って省略されないようだとパフォーマンスに無駄が出ますよね。
0341デフォルトの名無しさんNGNG
>>340
A a;
a = 1;

素直に考えると、 a = 1 が a.operator=(A(1)) になるわけだけど、
このうちのどこが「省略」できる?無理じゃない?
0342340NGNG
>>341
operator=の中身は普通に代入のみで
コピーコンストラクタと同様なのですが
コンパイラにそれはわかりませんよね。
やっぱり省略はされないんですね。

struct A
{
int a;
void A( const A& other) : a(other.a){}
A& operator=( const A& other){ a = other.a}
};

また、COMの関係上operator=が必要なクラスがあるのですが
その派生クラスにはoperator=のオーバーライドは必要になるのでしょうか?

struct B : public A
{
B& operator=( const B& other){ return A::operator=( other);} // 必要か?
};

0343デフォルトの名無しさんNGNG
>>342
> また、COMの関係上operator=が必要なクラスがあるのですが
> その派生クラスにはoperator=のオーバーライドは必要になるのでしょうか?

意味はわからないが、コードを見る限り要らない。
代入演算子の宣言が無く、基底クラスと各メンバの代入演算子が有効な場合は
それらを使ってデフォルトの代入演算子が定義される。
0344340NGNG
>>343
了解しました。
いろいろありがとうございました。
0345デフォルトの名無しさんNGNG
クラス関連の質問なのですが、コンストラクタの宣言に戻り値の型が含まれているとなり、コンパイルをすることができません。
書籍に載っているコードで、正誤表を確かめたのですが正誤表には載っておらず困っています。
使用しているソフトはVC++6.0です。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_32/code.txt
0346デフォルトの名無しさんNGNG
>>345
class Myrectangle1 : public Rectangle
{
public:
    Myrectangle1();

} ←セミコロンが抜けてる。Myrectangle2も同様。
0347デフォルトの名無しさんNGNG
>>339
レスありがとうございます
VC++.netなんですがマウスポインターの座標と押されたマウスボタンを検出する
命令にはどんなのがあるんでしょうか?
0348デフォルトの名無しさんNGNG
クラスAのメンバ変数をクラスAでnewしてクラスBにポインタを渡す。
クラスB内でそのポインタをdeleteしても大丈夫なんでしょうか。
0349デフォルトの名無しさんNGNG
>>346
う。。。よくみたら抜けてますね。。。お恥ずかしい。。
ありがとうございました(泣
0350デフォルトの名無しさんNGNG
>>348
その後のクラス A からの間接参照や delete 等がなけりゃだいじょうぶっちゃあだいじょうぶだが
オブジェクト指向の流儀に反するんで一般的にはやらないほうがいい。
A が builder とか B の補助クラスとかなら別だけど。
0351デフォルトの名無しさんNGNG
>>347
Win32API質問箱 Build22
http://pc5.2ch.net/test/read.cgi/tech/1092524669/
 ↑
こっちで訊いた方がいいよ。ちなみに当該 API は、
現在の状態なら GetCursorPos, GetAsyncKeyState、
現在処理中のウィンドウメッセージが発生した時点の状態なら GetMessagePos, GetKeyState
0352デフォルトの名無しさんNGNG
>>351
レスありがとうございます
GetCursorPos, GetAsyncKeyStateについて調べてみます
0353345NGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_33/code.txt
上のコードのメインのfor文でなぜか画面に文字が表示されず困っています。
コンパイルは通るもの、どこが間違っているのか教えていただけないでしょうか。
0354デフォルトの名無しさんNGNG
>>353
forの条件式をよく見ろ。
0355345NGNG
>>354
気づきました。。
久しくforをつかってなかったのでこんなミスもわからなかった・・orz
スンマセン
0356デフォルトの名無しさんNGNG
>>355
質問には関係ないことだけど、コメントの書き方が良くない。
インデントもおかしいし。const int& にする意図も良く分からない。
0357デフォルトの名無しさんNGNG
int = 64bit
pointer = 32bit
環境でパフォーマンスの問題が出にくいようにするためだろう。
逆のケースの方が多いけど
0358新米C++グラマーの独り言NGNG
やーまいったまいった。

昨日は動的にメモリを確保しているクラスに
自前 operator= を定義していなかったせいで
プログラムが変なところで止まって6時間悩んだし、
今日は外部から渡されたインスタンスを
リファレンスで保持していたせいで
たまたま生成元のインスタンスが
自分より逝ってしまう状況になった途端
プログラムが止まっちゃって3時間悩みました。

明日は何事もなければいいなぁ。。。

そうだ、今ならまだ _ を prefix から suffix にできる
チャンスかも知れない。来週前半に置き換えよっと。
0359デフォルトの名無しさんNGNG
正規表現使えばすぐ出来るような気が。
0360デフォルトの名無しさんNGNG
絶対余計なものまで壊す
0361本日の藁NGNG
main()
{
int a;
int* b;
int& c = *b;
b = &a;
a = 69;
std::cout << a << std::endl;
std::cout << *b << std::endl;
std::cout << c << std::endl;
}
しばらく考え込んでしまった・・・
0362マイク ◆yrBrqfF1Ew NGNG
mainにintが無い。
0363デフォルトの名無しさんNGNG
最初の*bは当然不定だし…うーん、笑い所が分からない
0364デフォルトの名無しさんNGNG
普通のことだと思うんだが…。俺も笑い所が分からない。
0365デフォルトの名無しさんNGNG
俺も笑いが止まらない。
0366デフォルトの名無しさんNGNG
C++つかうと一気に知力が10倍に?!
0367デフォルトの名無しさんNGNG
void main(void)にしろ
0368デフォルトの名無しさんNGNG
>>366
使い方によるだろ。
俺は拡張子に .c を指定して、極力 class や template を使用しないようにしているが、
例えば inline を使っても使わない時と比べてもほとんど知力は変わらない。
0369デフォルトの名無しさんNGNG
すげえ。オブジェクト指向設計もしないで知力が増えないとかいってるよ。この人。
0370デフォルトの名無しさんNGNG
delete this;
これは何か問題になることがありますか?
0371デフォルトの名無しさんNGNG
クライアントがオブジェクトの削除されたタイミングを把握しづらいだけ 
0372デフォルトの名無しさんNGNG
では、放任主義なら問題ありませんね。
どうもありがとうございました。
0373デフォルトの名無しさんNGNG
ローカル変数にしてもいいの?
0374デフォルトの名無しさんNGNG
いいわけない
0375デフォルトの名無しさんNGNG
>>373
ローカル変数ならdelete出来ないと思いますが。
newした後ポインタを保持しないサンプルソースは見たことがあります。
当然delete thisしています。
0376デフォルトの名無しさんNGNG
質問なんですが、
strdupという関数を使って、
char* a = strdup(name) nameは文字列
と、
char* a = new char[strlen(name) + 1]
strcpy(a, name)は、
同じ働きなんですか?
0377デフォルトの名無しさんNGNG
>>370
知ってるかもしらんけど、デストラクタをprotectedやprivateにすると吉かも。

>>376
非標準な関数だから一概には言えんけど、newじゃなくてmallocでなかろうか。
0378デフォルトの名無しさんNGNG
>>377
そうなんですか〜 mallocっていう関数はまだ使った事がないんですよね。
文字列のコピーは今までnewして、strcpyでやってたもので・・・。
たまたま、今勉強しているところで、strdupっていうのが出てきて、
今まで通りのやり方でも出来るんじゃないか??って疑問に思ったんですよ。
ありがとうございました!
0379デフォルトの名無しさんNGNG
>>377
なるほど、勉強になります。
0380デフォルトの名無しさんNGNG
>>376
ふつうはstrcpyじゃなくてmemcpyを使う。
0381デフォルトの名無しさんNGNG
//テキストの表示
HDC hdc;
  LPTSTR lptStr = TEXT("111");
hdc = GetDC(hWnd);
  TextOut(hdc , 0 , 0 , lptStr , lstrlen(lptStr));
  ReleaseDC(hWnd , hdc);

これだと111が表示されるのですが

変数Aの内容を表示させたい時はどうすればいいのでしょうか?
0382デフォルトの名無しさんNGNG
スレ違い警報
0383デフォルトの名無しさんNGNG
>>381
sprintfと言いたいが_stprintfかwsprintfの方がいいだろうか。
0384デフォルトの名無しさんNGNG
配列を大きい順に並べ替えたいのですが

どうすればいいですか?
0385デフォルトの名無しさんNGNG
意味がわからない(というか不明瞭)。
0386デフォルトの名無しさんNGNG
>>384
int array[100];
//hogehoge
std::sort(array, array + 100, std::greater<int>());
0387デフォルトの名無しさんNGNG
10万近いオブジェクトをnew-deleteしなきゃなのですが、
こういうのってそのままやっちゃって良いんですかねぇ。

フラグメンテーションが気になる、元ゲーム系…。
0388デフォルトの名無しさんNGNG
実際にやってみて問題があるならプールなり考えればよかろう
0389デフォルトの名無しさんNGNG
>>387
そう思うならプールしろよ。
0390デフォルトの名無しさんNGNG
operator=()を下みたいに呼ぶときに、呼ばれた時点で相手のクラスのデストラクタが呼ばれていてエラーがでるのを
うまく回避するにはどうすればいいですか? operator+()などでは自分自身を変えたくないので自動変数を使っています。
static A cNewA; みたいにすれば出来るには出来ましたが、再起処理の中で使うと収集つかなくなりそうです。

DWORD g_dwIndex=0;
class A{
public:
    DWORD m_dwID;
    char *m_pcBuff;
    A(){ m_pcBuff=new char[1000]; m_dwID=g_dwIndex++; }
    A(LPCTSTR pStr){ m_pcBuff=new char[1000]; strcpy(m_pcBuff, pStr); m_dwID=g_dwIndex++; }
    void SetString(LPCTSTR pStr){ strcpy(m_pcBuff, pStr); }
    ~A(){ delete [] m_pcBuff; TRACE("*******(%u)のデストラクタ*******\n", m_dwID); }
    void Add(LPCTSTR pStr){ strcat(m_pcBuff, pStr); }

    A& operator=(A& cTarget){         //(2)ここで引数内のバッファが消滅されてる
        strcpy(m_pcBuff, cTarget.m_pcBuff);
        return *this;
    }
    A& operator+(A& cTarget){
        A cNewA(m_pcBuff);
        cNewA.Add(cTarget.m_pcBuff);
        return cNewA;        //(1)ここまでは正常"ABC"+"DEF"→"ABCDEF"@cNewA
    }
    void Disp(){ TRACE("%s\n", m_pcBuff); };    
};
0391デフォルトの名無しさんNGNG
つづき

int main(){
    A cA("ABC"), cB("DEF"), cC;
    cA.Disp();
    cB.Disp();
    cC=cA+cB;         //ここでエラー
    cC.Disp();
    
}
0392デフォルトの名無しさんNGNG
>>390-391
DWORDとかLPCTSTRみたいなWin32な定数を全部C++標準で表現できる
基本型に直してから出直せ。
0393デフォルトの名無しさんNGNG
なにローカル変数の参照返してんだ
0394デフォルトの名無しさんNGNG
>>392
プッ
0395デフォルトの名無しさんNGNG
>>390
>(2)ここで引数内のバッファが消滅されてる
                      ~~~~~~~~~
まともな日本語が話せるようになってからうpちまちょうね〜坊や( ´,_ゝ`)プッ
0396デフォルトの名無しさんNGNG
あ〜なんか窓達ムカついてきた
0397390NGNG
あっ、main()でreturn 0;するの忘れてる・・・


>>392
再度長々と書き込むのもあれなんでunsigned longとconst char *に読み替えてください

>>393
出来るのなら左辺側の参照かポインタでも得たいものですが、operator()でそういう手段ありました?
0398デフォルトの名無しさんNGNG
>>397
Effective C++ 23項
「オブジェクトを返さなければならないときに、リファレンスを返そうとがんばるのはやめよう」

A& operator+(A& cTarget)
      ↓
A operator+(A& cTarget)

この項には君が悩んでいる問題とほとんど同じ内容が書かれている。
0399デフォルトの名無しさんNGNG
もう一個。
Effective C++ 31項
「関数は、ローカルオブジェクトへのリファレンスや関数の中でnewで初期化したポインタの参照先
を返してはならない」

基本中の基本です。>>393さんが実はさらりと答えてくれてるけど。
0400デフォルトの名無しさんNGNG
operator+(const A& cTarget) constじゃないと。
0401デフォルトの名無しさんNGNG
コピーコンストラクタも忘れんなYO!
0402デフォルトの名無しさんNGNG
>>398
>>399
>>400
A operator+(A& cTarget) もやってみて駄目だったのですが、何でだろうと
悩んでいたところひょっとして自分と同じ方の参照を引数としたコンストラクタが
必要なのでは!?と下の行を追加してみました。
    //追加したコンストラクタ
    A(A& cTarget){ m_pcBuff=new char[1000]; strcpy(m_pcBuff, cTarget.m_pcBuff); }

ビルドして実行してみたところ無事に実行できました。やっとこれで目的のクラスで演算子の
オーバーロードを搭載出来る目処が立ちました。どうもお世話になりました。

あとよくよく考えたらoperator=は戻り値必要ないですね
0403デフォルトの名無しさんNGNG
constを意識しろって
0404デフォルトの名無しさんNGNG
>>401
まさにそれですた orz
0405デフォルトの名無しさんNGNG
>>402
>あとよくよく考えたらoperator=は戻り値必要ないですね

cA = cB = cC; みたいな事をしないならばな。
0406デフォルトの名無しさんNGNG
>>405
それだけではない。度々済まないが
Effective C++ 15項
「operator=を書くときは、*thisへのリファレンスを返そう」

(a = b) = c; のような、実用上意味がなさそうだが文法に違反していない文を
正しく実行できるようにするためだとか。

>>403
そうなんだが一度に言うと混乱しそうだったから。
0407390NGNG
operator=()は参照返しでいいんですか。それなら戻り値付けた方がいいですね。

const ですが、ずいぶん前にconstをつけようとしていた時期がありましたが
メソッドを呼び出せなくなってそれ以来constを付けるのを控えていたのですが
宣言の末尾に付ければ呼び出せることを今更ながら知ったので、これからはconstを
付けていくことが出来そうです
0408デフォルトの名無しさんNGNG
>>407
じゃなくて〜。const付けたのと付けないのの両方が厳密に言えば必要なのよ。
でも今の質問の流れから行ってそこまで説明する必要はないと思ったわけよ。
それと mutable についてもついでに調べておいてね。
0409デフォルトの名無しさんNGNG
>>407よ、↓ここで修行してこい。

【C++】 const だけでメシが3杯食えちゃうスレ
http://pc5.2ch.net/test/read.cgi/tech/1078193971/
0410デフォルトの名無しさんNGNG
operator=のconstは普通戻り値だけだ。
mutableは関係ない。
0411マイク ◆yrBrqfF1Ew NGNG
>A(A& cTarget){ m_pcBuff=new char[1000]; strcpy(m_pcBuff, cTarget.m_pcBuff); }

boundary-checkはどうした?
0412デフォルトの名無しさんNGNG
>>390
関係ないけど
#define UNICODE
されるとやばいんじゃないか
0413381NGNG
>>382
>>383
すれ違いみたいなので他で聞いてきます
ありがとうございました
0414デフォルトの名無しさんNGNG
質問なんですが、自分はwindowsXPで、VC++を使って勉強しているのですが、
DOS画面って言うんだったかな?ビルドしたときの黒い画面なんですが、
漢字を使う事ができず、アルファベットだけしか使えません。
どうにかして使える方法はありませんか?
0415デフォルトの名無しさんNGNG
>>414
[Alt] + [半角/全角] でカナ漢字変換モードになると思うけど。
0416デフォルトの名無しさんNGNG
>>415
ありがとうございました!
そんな方法があったんですね☆
それも簡単に!
0417新米C++グラマー今日の疑問NGNG
class HogeHogeClass {
 static Boolean fetchValue(
  const HogeInstance & instance,
  const String & key,
  String & value);
};

とまあこんな関数があるとして、他のクラスからいちいち

HogeHogeClass::fetchValue(instance, key, value);

とクラス名を付けなくても呼び出せるようにするだけの目的で
そのクラスに HogeHogeClass を private 継承させるのは
DQN でしょうか? 他に何かうまい方法がありますか?
0418新米C++グラマー今日の疑問NGNG
あ、ちなみに HogeHogeClass には static 関数しか入ってません。
0419デフォルトの名無しさんNGNG
staticメンバ関数しかないならclassにするな阿呆。
0420新米C++グラマー今日の疑問NGNG
>>419
えー、普通の手法だと思ってたんですけど。
C++ではそういうことはしないんですか。。。

ほんじゃあクラスから出して代わりに
独自のnamespaceに入れるってのが
C++流の正しい解法なのでしょうか。

使いたいファイルでは using HogeHoge とすると。
0421デフォルトの名無しさんNGNG
>>417
間違いなくDQN。継承じゃなく包含を使え。

>>419
標準にもstaticしかメンバがないstd::numeric_limits<>という
classがあるわけだが。
0422デフォルトの名無しさんNGNG
>>421
たぶんstd::numeric_limits<>は引数としてやりとりできるようにclassになっているんだと思う。
0423デフォルトの名無しさんNGNG
>>419
char_traits
0424デフォルトの名無しさんNGNG
それテンプレートクラスじゃん
0425デフォルトの名無しさんNGNG
>>424
テンプレートクラスがクラスでないと言うなら419の主張と符合するが・・・
0426デフォルトの名無しさんNGNG
>>422 はぁ?
0427デフォルトの名無しさんNGNG
テンプレートクラスじゃなくて、クラステンプレート
0428デフォルトの名無しさんNGNG
クラステンプレートの具現
0429新米C++グラマー今日の疑問NGNG
皆さんご回答ありがとうございます。

>>421
>間違いなくDQN。継承じゃなく包含を使え。
包含っていうのは今回の場合はどういうことを指すのか
よく分からないのですが、

UhiClass {
// コンストラクタ等省略

 static fetchValue((
  const HogeInstance & instance,
  const String & key,
  String & value)
 {
  HogeHogeClass::fetchValue(instance, key, value);
 }
};

としろ、ということでしょうか? 勘違いしていたらごめんなさい。
0430デフォルトの名無しさんNGNG
>>429
instance.fetchValue(key, val);
ってことじゃね?
0431デフォルトの名無しさんNGNG
基本的なことですが、メモリの解放で
分からないことがあるのでお教えください
int *i,*j;
i=new int[100];
j=i;
delete [] j;
↑この場合はi=new int[100]
で確保したメモリは解放されるのでしょうか?
0432デフォルトの名無しさんNGNG
>>431 解放されますよ。
0433431NGNG
>>432
どうもありがとうございます。
もうひとつよろしいでしょうか。
jは確保したメモリの先頭のアドレスだけ指しているのに、
100個連続して確保しているという情報はどこにあるのですか?
0434デフォルトの名無しさんNGNG
確保したメモリの先頭のアドレスの手前
0435431NGNG
>>434
長年の謎が解けました。ありがとうございます。
0436デフォルトの名無しさんNGNG
operator new[]やoperator delete[]をオーバーロードして
使ってる好例ってないでしょうか?
今の自分の知識では「触らぬ神に祟りなし」という感じがして使えていないので。
0437デフォルトの名無しさんNGNG
>>434-435
おいおい…
0438433=431NGNG
>>437
あれ、違うのですか?
0439デフォルトの名無しさんNGNG
>>438
14882:2003(1998でも良いが)のどこにそんな事が書いてある?
0440433=431NGNG
それでは、私が抱いていた疑問の答えはどうなるのでしょうか?
0441デフォルトの名無しさんNGNG
>>436
あれは、テンプレートコンテナ開発者のためのデバッグインターフェイスにすぎない。
コンテナを「使う」側の人間が触る必要はない。
0442デフォルトの名無しさんNGNG
>>440
知るかヴォケェ、が正解。処理系作る人間でない限り知ったこっちゃないし、そうなら好きにすればいい
0443デフォルトの名無しさんNGNG
>>440
確保した順にサイズをスタックへ突っ込んで突っ込んで突っ込みまくる。
0444440NGNG
>>442
分かりました、とりあえずメモリの解放は
暗黙のうちにできてしまうと言うことですね。

>>443
順番に突っ込んで行ったら順不同でメモリ解放するとき
どうなってしまうのでしょうか。
0445デフォルトの名無しさんNGNG
実装に依存する
実装の一例として>>434の様なものもあり
だがそれに依存するコードを書くのはお勧めしない
0446440NGNG
>>445
それではとりあえずイメージとして
>>434のように考えておけば安心できそうなので、
自分の中ではそれで納得してみます。
あくまでイメージなので
それに依存するようなことはしませんが。
0447デフォルトの名無しさんNGNG
>>446
ほんの一例だが
#include <iostream>

int main()
{
 char* p = new char[100000];
 std::cout << *reinterpret_cast<size_t*>(p - sizeof(size_t)) << std::endl;
 delete p;
}

BCC5.6.4
100000
VC7.1
1574657
gcc3.4.1(MinGW)
524545

BCC5.6.4は>>446さんのイメージ通りの結果かもしれないが、VCやMinGWでは
どうも他の手段でサイズをストアしているようだ。これだけからは何とも言えないが、
少なくともこの機能に依存したプログラムは移植性がない事だけはわかる。
0448デフォルトの名無しさんNGNG
あ、悪い
×delete p;
○delete[] p;
0449デフォルトの名無しさんNGNG
そのサイズって実行時にわかる必要なくない?
むしろ、BCCのように実行時にまで値をストアしてる処理系があったことの方が驚き。
0450デフォルトの名無しさんNGNG
まぁこのコードの場合は必要無いかもしれん。
0451440=446=431NGNG
int i,*p;
std::cin>>i;
p=new int[i];
のようにしたときは実行時にも
どこかに確保したサイズ情報があることになると思うのですが。
それがどこにあるか分かれば、
メモリ解放するとき半分だけ解放のような
奇妙なことができるわけですか?
0452デフォルトの名無しさんNGNG
早速試す。
#include <iostream>

int main()
{
 int i;
 std::cin >> i;
 char* p = new char[i];
 std::cout << *reinterpret_cast<size_t*>(p - sizeof(size_t)) << std::endl;
 delete[] p;
}

で、100000を入力。

BCC5.6.4
100000
VC7.1
1574657
gcc3.4.1(MinGW)
524545

結果は変化ありませんですた。
0453デフォルトの名無しさんNGNG
std::stringstreamに整数出力すると
どうしても桁区切り文字がでちゃうんだけど
出さないようにするにはどうすればいい?
0454デフォルトの名無しさんNGNG
>>453
面白い処理系だな。それともロケールの問題か?
0455デフォルトの名無しさんNGNG
std::use_facetでctype_base::punctをマスクするとか。
0456デフォルトの名無しさんNGNG
>>454
なるほどーとか思って
std::locale::global( std::locale("") );
したらとりあえず消えました。thx
処理系はVC6+STLportなんだけど...
どっかでロケール変更されてるのかしら

>>455
はははイミワカンネorz
勉強してきまふ
0457デフォルトの名無しさんNGNG
>>456
STLportだと

std::cout.imbue(std::locale("En_US"));

でカンマが付くようになるな。どっかで指定されてない?それともデフォルトの
ロケールがおかしくなっているの鴨。
0458デフォルトの名無しさんNGNG
C++オブジェクトのマーシャリングってチマチマやるしかないんでしょうか?
0459デフォルトの名無しさんNGNG
>>458
ない。

特定のフレームワークに依存して良いなら、もう少し楽できることもある。
MFC 使うとか。

環境絞り込んで書いてみ?
0460387NGNG
>>388-389
遅くなったがレスサンクス
やっぱりこの苦行はしなきゃなのね

でもboost::poolとか使えば楽なのかな…
0461デフォルトの名無しさんNGNG
素人な質問ですいません、
ifstream i;
char c[51];
i.open("test.txt")

while(!(i.eof())){
i.getline(c,50);
}
でtest.txtに50字以上の行が含まれていると強制終了
してしまうようなんですがこれは仕様なんでしょうか?

前にどこかのサイトでこの場合50字だけ読み込んでくれる仕様だと
勉強した記憶があるのですがそのサイトがどこだったか忘れてしまい
自分の記憶にも自信がありませんで、ここに頼らせてもらうことにしてしまいました。

すいませんがよろしくお願いします。
0462デフォルトの名無しさんNGNG
std::stringとstd::getlineを使え。
0463デフォルトの名無しさんNGNG
>>461
getlineは指定した長さ以上のバッファには書き込まない。
0464デフォルトの名無しさんNGNG
>>461
それだとgetlineが読み込むのは49字。
そして行末に達する前に限度まで読み込むと i.fail()==true;になる。

これ以上は自分で調べなさい。
というか、ちゃんとした入門書なりリファレンスなりを手元においとかな
勉強にならんだろ。
0465461NGNG
すいません、やっぱりケチらずに本を買うことにします
どうもありがとうございました。。
0466デフォルトの名無しさんNGNG
標準C++のstream周りはなぜあんなに複雑になってしまったのだろうか。
0467デフォルトの名無しさんNGNG
>>466
きっと作った本人たちも「や、やっちまった」と、後悔してると思います。
0468デフォルトの名無しさんNGNG
>>467
どうかね? あれを作ること自体が C++ の試運転であって、目的は果たせたんじゃないか?
良い結果も悪い結果もすべて C++ の仕様について検討するためのデータになればいいんであって、
その残りかすそのまま ISO 標準にされたのは禿にとってゴミを拾った奴らに勝手に献上されて恥をかいたって図式だと思うぞ。
俺に言わせれば言語仕様とライブラリが同一の規格になっていることこそ( ゚д゚)ハァ?な状況だ。
0469デフォルトの名無しさんNGNG
演算子のオーバーロードでこんなに凄い事が出来る事を示したかったが
失敗した。
0470デフォルトの名無しさんNGNG
そこでlexcal_castですよ
0471名無しさん@Vim%ChaliceNGNG
spirit か xpressive じゃね?
0472458NGNG
>>459
サンクス、なんかオープンなフレームワークあればな〜と思ったんですが、ちまちまやります。
0473デフォルトの名無しさんNGNG
struct A {
 int a;
 A() : a(0) {}
 A(const A& ref) { a = ref.a; }
};
struct B : public A {
 int b;
 B() : b(0) {}
 B(const B& ref) { a = ref.a; b = ref.b; }
};
B b1;b1.a=1;b1.b=2;
B* b2 = new B();
A* a = b2;
*a = b1;

こんなことやりたいのですが、当然オブジェクトのスライシングがおきますよね。
コピーコンストラクタをvirtualにできるわけも無いですし、cloneメソッドを実装するしかないんですか?
0474デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1094971899&res=1

すみません。助けてください。
今、ハッシュでデータを管理して、それを二分探索木で検索するようなプログラムを作っているのですが、
削除する名前を検索して削除するっていうのをやりたいんですが、
それがなかなかうまくいきません。コメントアウトしているところが問題のところです。
エラー内容が
D:\TEST PROGRAM\基礎のプログラム\ハッシュ法\ハッシュ法(クラス).cpp(222) : error C2664: 'Node_smallest' : 2 番目の引数を 'const char *' から 'char *' に変換できません。 (新しい機能 ; ヘルプを参照)
変換で修飾子が失われます。
D:\TEST PROGRAM\基礎のプログラム\ハッシュ法\ハッシュ法(クラス).cpp(233) : error C2440: '=' : 'const char *' から 'char' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。

というやつです。考えは、削除したい所をpNext[1]の方の最小値を全て入れ替えて、削除するっていうやり方を
しようと思いました。他に良い方法があったら、その方法も教えていただければ嬉しいです。
若輩者ですが、ご指導お願いします。
0475デフォルトの名無しさんNGNG
>>474
エラーメッセージを読め。

それから、「コメントアウト」というのはコードの一部をコメントにすることだ。
0476デフォルトの名無しさんNGNG
>>474
- const char* pName;
+ char* pName;

- *pName = pNode->pName;
+ pName = pNode->pName;

0477474NGNG
すみません。考えてみたんですが、わかりませんでした。。。
どうしたらいいのか、教えてもらえないでしょうか?
0478デフォルトの名無しさんNGNG
>>477
エラーメッセージ見てわかんないなら入門書から読み直しが必要だな。
0479474NGNG
はい。そうします。
0480デフォルトの名無しさんNGNG
>>473
その場合コピーコンストラクタじゃなくて、代入演算子をvirtualじゃまいか
0481デフォルトの名無しさんNGNG
C++についてなのですが、ofstreamでcinでユーザーがタイプした文字列を
テキストファイルに出力して、そのファイルをもう一度読み込み別の
テキストファイルに出力するにはどうしたらよいでしょうか?
0482デフォルトの名無しさんNGNG
>>481
#include<iostream>
#include <fstream>

int main()
{
    typedef std::istreambuf_iterator<char> isbi;
    typedef std::ostreambuf_iterator<char> osbi;
    std::fstream f1("file1", std::ios::in | std::ios::out | std::ios::trunc);
    std::copy(isbi(std::cin), isbi(), osbi(f1));
    std::ofstream f2("file2");
    f1.seekg(0);
    f1.clear();
    std::copy(isbi(f1), isbi(), osbi(f2));
}
0483デフォルトの名無しさんNGNG
>>482
f1.clear()って必要あったっけ?
EOFまで読むとエラーフラグ立ちっぱなしになるのは知っているが・・・
0484デフォルトの名無しさんNGNG
>>483
いらなかったな。rewind()の感覚で書いてるもんでつい…
0485デフォルトの名無しさんNGNG
>>482
アドバイスありがとうございます。
私はC++始めたばかりなので難しすぎてよくわかりません。。
もう少し具体的に説明しますと

void Display_contact()
{

char cTemp[80], GivenName[20], FamilyName[20], Address[40], Phone[15],
EmailAddress[25], DateofBirth[20], TypeofContact[3];

ifstream ContactBook;
ContactBook.open("contact.txt",ios::beg);
clrscr();
cin.seekg(0);
cin.clear();
cout << "\t\t\tCONTACT MAINTENANCE SYSTEM\n" << endl;
cout << "\t\t\tALL CONTACTS\n" << endl;

if (!ContactBook)
{
cout << "cannot open file";
getche();
}
0486デフォルトの名無しさんNGNG
続き


while( !ContactBook.eof() )
{

ContactBook.getline(GivenName,20);

ContactBook.getline(FamilyName,20);

ContactBook.getline(Address,40);

ContactBook.getline(Phone,15);

ContactBook.getline(EmailAddress,25);

ContactBook.getline(DateofBirth,20);

ContactBook.getline(TypeofContact,3);


0487デフォルトの名無しさんNGNG
続き

cout << GivenName << " " << FamilyName << "\t\t\t";
cout << EmailAddress<< "\t\t\t";
cout << TypeofContact<< "\t\t";
cout << Address << "\t\t";
cout << Phone << "\t";
cout << DateofBirth << "\n\n\n";

↑のファンクションはすでに入力されたテキストファイルを読み込んでディスプレイするのですが
こんな感じでcontact.txtを読み込んで下のcoutみたいに形を整えてもう一度別なファイル名で出力したいんです。
申し訳ないのですがもう一度アドバイスお願いできますか?

0488デフォルトの名無しさんNGNG
>>487
ofstream out("ファイル名");
として、coutの代わりにoutを使えば良い。
0489デフォルトの名無しさんNGNG
>>482
#include <iterator> が抜けてる。
copy + streambuf_iterator より、 operator<< + rdbuf() のほうがよくない?
0490デフォルトの名無しさんNGNG
>>488
その場合ofstream out("ファイル名");は出力ですよね?読み込みはどうすればよいのですか?
contact.txt から report.txtというファイルに出力したいのですが、その場合読み込みはどこら辺に
どうやって書けばいいですか?度々質問して申し訳ないですがお願いします。
0491デフォルトの名無しさんNGNG
>>489
確かにそうだ。

>>490
>>485-487の出力部分だけcoutからofstreamに書き換えればいいだろ。
0492デフォルトの名無しさんNGNG
>>491
一応動いたのですがテキストファイルが空っぽなんです。。

ofstream out("report.txt");

out << GivenName << " " << FamilyName << "\t\t\t";
out << EmailAddress<< "\t\t\t";
out << TypeofContact<< "\t\t";
out << Address << "\t\t";
out << Phone << "\t";
out << DateofBirth << "\n\n\n";
}

ContactBook.close();
}
これであってますか?
0493デフォルトの名無しさんNGNG
先ほど、ちょっとお世話になった>>474なんですが、
エラーの原因が構造体のconstってのはわかって、コンパイルできたんですけど、
ビルトすると、途中でエラー終了してしまいます。
あの、今回はマジで教えてもらえないでしょうか?
0494492NGNG
すでにあったcontact.txtを削除したら動きました!!
>>482 >>483 >>484 >>488 >>489 >>490
アドバイス本当に感謝です!!
あと一回に表示する件数を4件にしたいのですが
どうやったらいいでしょう?
0495492NGNG
訂正
>>485-487の一覧をディスプレイするプログラムです。
出力する方ではないです。
0496デフォルトの名無しさんNGNG
>>493
無理です。
0497デフォルトの名無しさんNGNG
えっと、それなら諦めます。
質問なんですが、ハッシュ法で、二分探索木を使うよりも、双方向リストで挿入法を使うほうが早いですか?
それとも、遅いですか?
0498デフォルトの名無しさんNGNG
>>497
だから挿入のほうが気持ちいいから!

終了!
0499デフォルトの名無しさんNGNG
挿入してからがあんまり早いとダメだな
0500デフォルトの名無しさんNGNG
挿入はすんなり、挿入してからはゆっくり。
0501デフォルトの名無しさんNGNG
VC++なんですが、販売終了しています。
どうやって学習したらいいのでしょうか?
0502デフォルトの名無しさんNGNG
>>501
VC++.Net 2003買え。VC++バージョン7相当だ。
0503デフォルトの名無しさんNGNG
>>501
Visual C++ Toolkit 2003使え。タダでVC++.NET2003Pro以上だ
0504デフォルトの名無しさんNGNG
newやmallocで確保した領域ってabortで強制終了された場合でもプログラム終了と同時に解放されるんでしょうか?
0505デフォルトの名無しさんNGNG
>>504
OSによる。
0506デフォルトの名無しさんNGNG
メモリ保護機能のないOSなんてッ!!
0507デフォルトの名無しさんNGNG
>>505
Win32 とか UNIX 使ってれば間違いないやね。

ただしデストラクタは呼ばれないから、共有メモリとか一時ファイルの類は
消えない可能性アリ。注意。
0508デフォルトの名無しさんNGNG
>>506-507
スレ違い
0509デフォルトの名無しさんNGNG
びっくりするほどリソースリーク
びっくりするほどリソースリーク
0510デフォルトの名無しさんNGNG
あっとおどろくギャロップダイナ
0511虎夫NGNG
現在作っているプログラムで、
割り込みによって一定時間ごとにデータを取得しております。

このとき割り込みの周波数を100[Hz]に設定すると、
プログラムは0.01秒毎にタスクを行います。
(PCのCPUが十分であると考えて)
たとえばタスクA,B,Cを割り込みの1周期に1度行うとすれば、
Aのタスクは0.01秒ごとに遂行されます。

しかし、もしBというタスクが常に2秒かかるタスクだとすれば、
それぞれのタスクは2.01秒に1回しか遂行されません。
これはあれ程度しかたありません。

現在私の悩んでいる問題は、
A,Cというタスク(1回に1msもかからない)を0.01秒ごとに
遂行して、ある条件の時にBというタスクを行いたいとすると、
今のままでは、A,Cは普段0.01秒に1度タスクが遂行されますが、
Bが遂行されるときにはタスクが2秒(Bの遂行時間)待ちが生じます。
こんなとき、BをA,Cとは並列に遂行させ、
常にA,Cを0.01秒ごとに遂行させるにはどうすればよいでしょうか?
(ここで、Bが遂行中に次のBの命令がくることはないとします。)
0512虎夫NGNG
現在作っているプログラムで、
割り込みによって一定時間ごとにデータを取得しております。

このとき割り込みの周波数を100[Hz]に設定すると、
プログラムは0.01秒毎にタスクを行います。
(PCのCPUが十分であると考えて)
たとえばタスクA,B,Cを割り込みの1周期に1度行うとすれば、
Aのタスクは0.01秒ごとに遂行されます。

しかし、もしBというタスクが常に2秒かかるタスクだとすれば、
それぞれのタスクは2.01秒に1回しか遂行されません。
これはあれ程度しかたありません。

現在私の悩んでいる問題は、
A,Cというタスク(1回に1msもかからない)を0.01秒ごとに
遂行して、ある条件の時にBというタスクを行いたいとすると、
今のままでは、A,Cは普段0.01秒に1度タスクが遂行されますが、
Bが遂行されるときにはタスクが2秒(Bの遂行時間)待ちが生じます。
こんなとき、BをA,Cとは並列に遂行させ、
常にA,Cを0.01秒ごとに遂行させるにはどうすればよいでしょうか?
(ここで、Bが遂行中に次のBの命令がくることはないとします。)
0513虎夫NGNG
すいません、2重になっちゃいました。
0514デフォルトの名無しさんNGNG
その質問はC++と関係ない
0515虎夫NGNG
ヴィジュアルCつかってます。
書き忘れてました。
0516デフォルトの名無しさんNGNG
>>515
>>514
0517デフォルトの名無しさんNGNG
boost/preprocessor/stringize.hppを見てて疑問に思ったのですが

#

と先頭に#だけの行があります。
コメントみたいになにも効果はないみたいですが
コンパイラにはどう解釈されているのでしょうか?
0518デフォルトの名無しさんNGNG
>>515
割り込み?ドライバ作ってるんなら
http://pc5.2ch.net/test/read.cgi/tech/1063453024/l50
あたりで、アプリケーションでやろうとしているのなら
http://pc5.2ch.net/test/read.cgi/tech/1037636153/l50
あたりでどうぞ。
0519デフォルトの名無しさんNGNG
>>517
#の次にnew-line文字が来ていればその行は読み飛ばされる。
0520517NGNG
>>519
遅くなりましたがありがとう。
0521521NGNG
今やっているプロジェクト用にXML ファイルから C++ ファイルを
自動生成するツールを作りたいと思っています。

A.xml を読み込んで、A_Handler.cpp, A_Handler.h, A_Instance.cpp
A_Instance.h, A_Test.cpp を生成するようなツールです。
ちなみに複雑な定義の場合はA_Handler_add.cpp といったファイルに
記述することにして、XML の中ではそのelementに対応する定義を
自動生成しないよう設定するなどして、あまり難しい処理はせずに
一発で自動生成できるようにします。

以前に別プロジェクトで A.xml を読み込んで A.cpp, A.h を
生成するツールを作ったので、それをリファクタリングして
抽象クラス等を抜き出して再利用したいと思っています。

しかし、なかなか難しいもので、どう設計すればいいか
悩んでいるところです。
(以下4レスほど続きます。)
0522521NGNG
現状のプログラム (OldGenCodeとします) は以下のような構成になっています。

<GRAMMAR> -> OldDataGrammar, <ELEMENT> -> OldDataElement,
<TYPE> -> OldDataType といった具合に、一種類のタグにつき
一つのクラスを定義し、OldMain.cpp から以下のように呼び出しています。

OldDataGrammar grammar;
grammar.load(xmlparser);
grammar.printHeader(ostream_h);
grammar.printCpp(ostream_cpp);

DataGrammar の中では以下のようなメンバ関数を作っています。

void printHeader(ostream & os) const
{
 printCopyrightNotice(os);
 printIncludeGuardBegin(os);
 printHeaderIncludeFiles(os);
 printUsingNamespaces(os);
 printNamespaceBegin(os);
 printClassDeclaration(os);
 printClassInlineDefinition(os);
 printNamespaceEnd(os);
 printIncludeGuardEnd(os);
}
0523デフォルトの名無しさんNGNG

       ヽ(・ω・)/   今だ!ヨガテレポート!!
      \(.\ ノ
      ,,、
0524521NGNG
内部ではさらに
void OldDataGrammar::printClassDeclaration(ostream & os) const
{
 ... (略) ...
 for (int i = 0, n = elements_.size(); i < n; i++) {
  elements_[i].printGetterMethodDeclaration(os);
 }
 ... (略) ...
}
のように下位クラスを呼び出しています。呼び出された側ではこんな感じ。
void OldDataElement::printGetterMethodDeclaration(ostream & os) const
{
 if (! needPrintGetterMethodDeclaration()) {
  return;
 } // endif
 ... (略) ...
 output << " const " << getTypeName() << " & get" << getMethodName() << "(void) const;" << endl;
}

現状では Header と Cpp の二種類しか考えておらず、
Data* クラスの各階層に print* が山ほど散らばっています。
これを単純に五種類に増やせば破綻するのは目に見えています。
Data 部分と Print 部分を分ければいいのではと思うのですが、
どういう風に分ければいいのかあまりいいアイディアが浮かびません。
0525521NGNG
とりあえず Main から以下のように呼び出せる構造を考えてみました。
NewDataGrammar grammar;
grammar.load(xmlparser);
NewHandlerHeader handler_h(grammar);
handler_h.print(ostream_handler_h);
NewHandlerCpp handler_cpp(grammar);
handler_cpp.print(ostream_handler_cpp);
.... (略) ...

この場合、これまでどおり一種類のXMLエレメントに対応する仕事は
一つのクラスに任せることにすると、
NewDataGrammar, NewDataElement, NewDataType...
NewHandlerHeaderGrammar, NewHandlerHeaderElement...
NewHandlerCppGrammar, NewHandlerCppElement...
といった大量のクラスを作らなければいけなくなります。
うまく抽象化できているならそれでも構わないのですが、
その抽象化もなかなか難しいところです。

Header、Cpp それぞれで共通の構造を抜き出すことは多少は可能でしょうが、
DataElement::printGetterMethodDeclaration() // for Header
DataElement::printGetterMethodDefinition() // for Cpp
DataElement::printInlineGetterMethodDefinition() // for Header
のようにCppとHeader、あるいはHandlerとInstanceでは操作や構造が異なります。

このあたりうまく抽象化、パターンの適用等はできないか考えているのですが、
なかなか解決できません。皆さんならどうされますか?
アイディアや適用できるパターン等をご教示ください。よろしくお願いします。
0526デフォルトの名無しさんNGNG
漏れなら生成ルールを記述する適当な中間言語を用いるけど。
あるいは XSLT で C 寄りの文法の XML に直して、そこから C へ、と2段階で。
0527デフォルトの名無しさんNGNG
>>521
cppll にでも逝ってみれ。
あそこの管理人がむしゃぶりつきそうなネタだ。

ひょっとして、ネタ的に >>521 自身があそこの管理人か?
0528521NGNG
ご回答ありがとうございます。

>>526
>生成ルールを記述する適当な中間言語
といいますと、たとえば……?
何かキーワードをいただければ調べてみます。

>XSLT で C 寄りの文法の XML に直して、そこから C へ、と2段階で
あまり汎用的になりすぎてしまっても時間的に厳しいような気がします。
現段階ではXMLで定義するのはデータが中心なので
比較的簡単にあらかじめ決めた枠内のC++コードに落とせるのですが。。
それとももしかしてそういう汎用ツールがどこかに転がっていたりしますか?

>>527
情報ありがとうございます。
GoogleしてMLの紹介ページを見てきたのですが、
ライブラリ関係のMLみたいでしたが。。。
επιστημηさんの名前は聞いたことはあります。
0529デフォルトの名無しさんNGNG
>>528
あのMLはスタンス的にはこのスレとほぼ同一だから、あそこで聞いてみれ。
ネタ的にほぼ確実にあそこ管理人が相談にのってくれるから。
0530521NGNG
>>529
MLなんて三年くらい参加してないし、恥ずかしいなぁ。。。
でも、これからメールアドレスを取得してML入会してきます。
あちらで質問することを決心したらここに書きますので、
それまでの間に何かアドバイスやアイディア等ありましたら
こちらへレスをいただければ幸いです。よろしくお願いします。
0531521NGNG
おし、それでは勇気を出して
http://www.freeml.com/ctrl/html/MLInfoForm/[email protected]
で質問してきます。皆様、ありがとうございました。
0532デフォルトの名無しさんNGNG
>>531
たまにはこっちにも帰ってくるんだよ。
0533デフォルトの名無しさんNGNG
コンストラクタの初期化子でnewしてもいいんですか?
0534デフォルトの名無しさんNGNG
>>533
いいよ。
0535デフォルトの名無しさんNGNG
ええかー ええのんかー
0536533NGNG
>>534
thx!
0537デフォルトの名無しさんNGNG
>>535
まずいの?
0538デフォルトの名無しさんNGNG

class Test
{
public:

Test(void) : test_(new Test) {};

virtual ~Test(void) {};

private:

Test * test_;
}
0539533NGNG
>>538
???
普通にintとかをnewするのならOKですよね?
例外うんぬんはおいておいて
0540デフォルトの名無しさんNGNG
DOS攻撃だ!!!
0541デフォルトの名無しさんNGNG
>>538
おもしろいですねぇ〜。

#include <iostream>

class foo
{
 public:
  foo() : pF(new foo){}
 private:
  foo *pF;
};


int main()
{
 try{
  // ↓例外が起きる
  //foo *fF = new foo;
  
  // 例外が起きない
  foo x;
 }
 catch(...)
 {
  std::cout << "例外" << std::endl;
 }
}
0542533NGNG
>>541
なぜ?
foo x;でも結局 new foo が呼ばれて同じことじゃないの?
0543533NGNG
VC6で試したらどっちも例外おきましたよ???
0544デフォルトの名無しさんNGNG
コンストラクタに失敗したときのクリーンアップを安全に行いたいなら
スマートポインタにしたほうが良い。
0545デフォルトの名無しさんNGNG
class A {
private:
 Obj* p;
public:
 A() try :
  p(new Obj) // ←例外が起きる
 { }
 catch(...) {} // ←握りつぶす
}
0546デフォルトの名無しさんNGNG
>>545
握りつぶした後、そのAのインスタンスはもはや生存期間を
過ぎていることに注意しなければならない。だから、一切
触ってはいけない。一応書いておくが。
0547デフォルトの名無しさんNGNG
×catch(...) {} // ←握りつぶす
○catch(...) {} // ←握りつぶせない(暗黙のthrowが末尾につく)
0548デフォルトの名無しさんNGNG
>>545
コンパイル通らん
0549デフォルトの名無しさんNGNG
>>548
VC6使うな
0550デフォルトの名無しさんNGNG
>>549
BCC5.5.1なんですけど・・・・
0551デフォルトの名無しさんNGNG
>>548
gcc3.4.1なら通るね。>>545ってC++の文法に準拠しているのか?
0552デフォルトの名無しさんNGNG
準拠してるよ。
VC7.1だと通るよ。
BCCはショボイから通らないかもね。
0553デフォルトの名無しさんNGNG
>>552
ああ確かにVC7.1だと通った。switch文のcaseをまたぐブロックを入れるような感覚か。
ちなみにBCC5.6.4でも通らん。糞だなBCCは。
0554521NGNG
例のML、返事が来始めましたが……

むずいよう(;;)
0555デフォルトの名無しさんNGNG
warota

あそこはオナニーMLだから、
C++の構文やいろんなライブラリを駆使した難解な答えがいくつも返ってくる。
その中から自分にあったものを拾うのがいいよ。
0556デフォルトの名無しさんNGNG
>>542
VC7.1でやったけど、例外起きませんでしたけどねぇ…。。。
ひょっとして最適化が働いたかな?

>>554
''例のML'' はレベル高いですからねぇー。
0557デフォルトの名無しさんNGNG
>>556
自分で自分を作る無限連鎖って最適化で消されるもんなの?
0558デフォルトの名無しさんNGNG
>>550
さっさとBCCなんて捨ててvctk拾ってこいよ
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
0559デフォルトの名無しさんNGNG
>>558
無理です。BCB6使ってますから。
でもVC7.1もあるので文法はVC7.1もしくはgcc3.4.1(MinGW)で試しまつ。
#MinGW早くgcc3.4.2出してくれ〜。
0560デフォルトの名無しさんNGNG
bcb6のbcc32は5.5.1じゃなくて5.6.xだろ?
5.5.1なんていうからフリーのBCC使ってると思ったんだよ
0561デフォルトの名無しさんNGNG
3.4系のgccなんてバグだらけのモノよく使えるな。
0562デフォルトの名無しさんNGNG
ここは標準スレですコンパイラ比較スレではありませんコンパイラの比較は
【初心者歓迎】C/C++室 Ver.9【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1094494997/
でどうぞ
0563デフォルトの名無しさんNGNG
関数tryブロックは標準の話です、コンパイラ依存の機能ではありません
0564デフォルトの名無しさんNGNG
>>560
5.5.1にBCPad組み合わせたものとBCC5.6.4(BCB6)の両方使ってます。
BCB6を立ち上げるのが面倒だったのでBCC5.5.1使いました。でも
BCC5.6.4使っても全く同じ結果でした。
>>561
まあそうですがgccは仕事には使ってないので。
>>562>>563
スマソ。本当に文法に違反していると勘違いしたもので。私が悪かったです。
0565デフォルトの名無しさんNGNG
そんなにコンパイラに依存する文法なら代替コードを考えたほうがいいのではないだろうか。
0566デフォルトの名無しさんNGNG
>>565
俺は素直にauto_ptr使ってる。
0567デフォルトの名無しさんNGNG
std::list<Hoge*> hoge;
を
voif foo( const std::list<const Hoge*> & );
な関数にそのまま渡すことはできないのでしょうか?
fooではHogeのconst付きの関数しか呼べないようにしたいのですが。
0568デフォルトの名無しさんNGNG
>>567はスルーでよろ。
自環境での結果をろくに書かないのはただの荒らし。
0569デフォルトの名無しさんNGNG
そういう"解説"が必要であると判断する程度には
「ただの荒らしではない」と考えているわけですね? :-P
0570デフォルトの名無しさんNGNG
>>567
型が違うからできないな。
どうせコンパイラもそう言ってるだろ。

解決策は、あまり簡単なのは思いつかないなぁ。
reinterpret_cast で動くんだろうけど、それじゃダメだろうし。
0571デフォルトの名無しさんNGNG
>>569
ただの荒らしだと考えてるからこそスルーを要請したわけだが。
const付で呼びたい?なら勝手に呼べ。ってこった。
0572デフォルトの名無しさんNGNG
std::list<Hoge*>::const_iteratorを使って呼ぶべきだなこの場合
0573デフォルトの名無しさんNGNG
>>571
> ただの荒らしだと考えてる
本当にそう思っているなら、何も書かずにいればいいわけです。
要請などと言いつつ、いきなり自分自身が「スルーできてない人」になる必要は
まったく無い :-P

つまり、荒らしだと考えたというより、自分の美学(くすくす)に反する内容だったので
「これを皆が荒らしと見なす流れが欲しかった」だけでしょう。
でも実際のところは荒らしというほどではないので、放っておいたら
他の人はそう考えない。ちゃんと回答してしまう可能性が高い。それは嫌だ。
だからわざわざ「こういう風に荒らしなんですよ」と、蛇足感丸出しな"解説"なんぞをして、
「自分に乗っかる人を募った」わけですね。全然ダメだったようですが ;-)
0574デフォルトの名無しさんNGNG
デバッグ時にassertを使うのはよくやりますが、これだとassertが埋め込まれた
個所の呼び出し元までは特定できませんよね。
それでassertを呼ぶ代わりに例外を発生させるようにしてデバッグしてるのですが
これはやらないほうがいいんでしょうか?

後に本当に発生すべき例外だと分かって、かつ戻り値の変更が難しい場合は
正規のコードとして残す事も考えてます。
0575デフォルトの名無しさんNGNG
>>574
環境依存だけどVCなら_ASSERTでファイル名と行番号が出る。
0576デフォルトの名無しさんNGNG
自動変数よりstatic変数の方が速いの?
0577マイク ◆yrBrqfF1Ew NGNG
早いよ。
0578デフォルトの名無しさんNGNG
嫌、遅い。
自動変数はほぼ確実にキャッシュに載ることが期待できるし。
0579 ◆FIcNi4f8js NGNG
>>575
そういう話じゃなくて、呼び出し元を知りたいんだから
スタックトレースとかしなきゃ駄目でしょ?
0580デフォルトの名無しさんNGNG
>>575
assertを上書きして、お望みの機能を付ければよろしい。
0581デフォルトの名無しさんNGNG
>>579
(VC のように) __FILE__ とか __LINE__ を使ったマクロで実装すればよい、ということでは?
0582デフォルトの名無しさんNGNG
インクルードの順番を気にせずヘッダファイルを
インクルードする方法ってありませんか?

何度インクルードしてもいいように
#ifndef _DATA_H_
#define _DATA_H_

#endif //_DATA_H_
で囲む方法は知っていますが。
0583デフォルトの名無しさんNGNG
インクルードの順番を気にすることなんてあるの?
0584デフォルトの名無しさんNGNG
[open.h]
{

[close.h]
}

[main.cpp]
int main()
#include "open.h"
return 0;
#include "close.h"
0585デフォルトの名無しさんNGNG
先生!
newで作ったクラスのインスタンスを、自滅させた場合(delete this)、
後に外の関数で解放されたことを知るには、どのようにすればいいのでしょうか?
教えてください。。
0586デフォルトの名無しさんNGNG
>>585
デストラクタの最後の行でthis=NULL;
0587デフォルトの名無しさんNGNG
開放されたと言う情報を外に伝えるだけ
0588585NGNG
む、思ってたより単純な事みたいですね。
ありがとございまーす。
0589デフォルトの名無しさんNGNG
>>586
thisってconstじゃなかったか。
釣り?
0590デフォルトの名無しさんNGNG
そもそも破棄されたオブジェクトにアクセスする可能性のあるような
プログラムではdelete this;をするべきじゃないと思うんだけど。
起動したらあとはなにも知らないで良いような自立したオブジェクトだけ
delete this;するべきじゃないの?
0591デフォルトの名無しさんNGNG
するべきなのか
0592デフォルトの名無しさんNGNG
>>591
delete this; の前に自殺予告が出せるオブジェならありうるべ。
0593デフォルトの名無しさんNGNG
delete this;するべき状況は思い付かないな
0594デフォルトの名無しさんNGNG
windoze
0595デフォルトの名無しさんNGNG
WindowsのMFCやWTLなら使うこたぁある。
0596デフォルトの名無しさんNGNG
>>593
侵入型参照カウント
0597デフォルトの名無しさんNGNG
delete this;する関数名もほぼお決まりだな
void desroy();
0598デフォルトの名無しさんNGNG
デスローイ!
0599デフォルトの名無しさんNGNG
pimplとかcloneとかselfとか、最初から決まってる方が
分かりやすくて名前考えなくて済むから楽でいいよね
0600デフォルトの名無しさんNGNG
News 2004-09-15: C++ Standard Core Language Issues List (Revision 31) is available
ttp://www.open-std.org/jtc1/sc22/wg21/
0601デフォルトの名無しさんNGNG
>>572
それじゃ Hoge に const 付かないだろ。
0602デフォルトの名無しさんNGNG
お前ら、デストロイをすぐに入力できるかね?
漏れはなぜか、「destory」。何度やってもこうなってしまう。
destroyと入力できない。同じクセがあるヤシいる?
0603デフォルトの名無しさんNGNG
デストーリ?w
0604デフォルトの名無しさんNGNG
destroy
0605デフォルトの名無しさんNGNG
>>602
おれもなるよ
0606デフォルトの名無しさんNGNG
clientがclinetになってしまうのに似てる。
ただ、clientはしょっちゅう使うスペルなので慣れてしまうけど、
destroyはあまり使わないのでいつまでたっても変なまま。
0607デフォルトの名無しさんNGNG
   ∧_∧  デストローイ!!  
 |\ΦДΦ)   /|
 ○ <  ζ) <  ○                  人人
 | >  旦  > |              <   ∧∧  キュワアアアアア!!!
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|             ヽ(゚Д゚ )ノ
  | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |               (  へ)
  |              |                く
0608デフォルトの名無しさんNGNG
おまえら何くだらねーこと言ってんだ。

俺もよくやる。
0609デフォルトの名無しさんNGNG
constがcosntってなる・・・
0610デフォルトの名無しさんNGNG
itn。。。
0611デフォルトの名無しさんNGNG
receiveとrecieve
0612デフォルトの名無しさんNGNG
コンストラクタへのポインタって使えますか?
数種類のクラスからランダムで1つを選ぶってので、ポインタをテーブルにいれといてそこから呼び出したいんですが
0613デフォルトの名無しさんNGNG
そういうときこそdestroyの逆でよく使われる、
createですよ。
詳しくはabstract factoryデザインパターンをごらんあれ。
0614デフォルトの名無しさんNGNG
>>612
オブジェクトを生成するstatic関数を定義すればOK。
で、生成用のstatic関数でオブジェクトの生成方法を選択する。
複数のクラスを生成するならば、基底クラスで生成メソッドを定義し、
そいつをキャストして返してやる。

あとは、そのポインタをdynamic_castなりしてやれば問題なし。
GoFで言えば、Builderになるのかな?
0615614NGNG
>>612,613
かぶった…
abstract factoryか勘違いスマソ
0616デフォルトの名無しさんNGNG
>>613>>614
なるほど、それ忘れてました
0617デフォルトの名無しさんNGNG
>>602
自分も昔「destory」ってよくやってしまてたよ。

同様に
true→ture
label→lable
もよく間違ってったよ…
0618デフォルトの名無しさんNGNG
retrunを忘れるな。
0619デフォルトの名無しさんNGNG
>>613-615
factory methodだろ
0620デフォルトの名無しさんNGNG
pritnf
0621デフォルトの名無しさんNGNG
Drwa
0622デフォルトの名無しさんNGNG
>>612
コンストラクタのアドレスは取得できない
0623デフォルトの名無しさんNGNG
>>622
コンストラクタも静的にすれば……。
0624デフォルトの名無しさんNGNG
>>623
俺がつっこむ必要なさそうだなw
0625デフォルトの名無しさんNGNG
falseを「フェイルス」って発音する上司がいるんですけど、
どうしたら良いでしょう?
それ聞くと噴出しそうになるので。
0626デフォルトの名無しさんNGNG
>>625
fail と混同してるんだろうなぁ・・・。

とりあず、2択だな。
1. ちゃんと正してあげる
2. 慣れる・自分も使う
0627デフォルトの名無しさんNGNG
fail→連続する母音は前の母音が二重母音化
false→eで終わる単語はその前の母音が二重母音化<alはallの如き発音に
case→eで終わる単語はその前の母音が二重母音化

なまじ単語の知識がある人こそ填まりかねない罠。
0628デフォルトの名無しさんNGNG
>>625
warningを「ワーニング」って発音するやつが身の回りに20%くらいいるけどもう慣れたよ。
人前で話す機会には訂正してあげてる。
0629デフォルトの名無しさんNGNG
ウォーニン
0630デフォルトの名無しさんNGNG
英語なんて日本人がどんなに正確であろうと思われる発音しても
nativeから見ればップって感じだからどうでもよくね?
0631デフォルトの名無しさんNGNG
マックスストア
0632デフォルトの名無しさんNGNG
Make your dream come false;
0633デフォルトの名無しさんNGNG
>>628
ワーニングであってるよ。厳密には、(ゥ)ワニング。
ウォーニングと発音するのは厨房。
Doom3でしょっちゅう聞いたよ、ワーニング。
0634デフォルトの名無しさんNGNG
ほれ。goo辞書の発音。
http://dictionary.goo.ne.jp/voice/w/00090699.wav
0635デフォルトの名無しさんNGNG
活きた英語じゃなくて受験英語を目指すあたりが厨。
英語試験担当者(生粋の日本人)が喜んでとりあげそうなネタだ。
でも実態は違うというオチ。アメリカなら、ワーニングでいいよ。
お利巧さんは、イギリスにでも逝ってろってこった。
0636デフォルトの名無しさんNGNG
ウォーニングだろうが、ワーニングだろうがどっちにしろ
日本語発音なんだからどうでもいい。
0637デフォルトの名無しさんNGNG
>>628が元凶
0638デフォルトの名無しさんNGNG
>>632
ワラタ
0639デフォルトの名無しさんNGNG
hong kong
king kong
0640デフォルトの名無しさんNGNG
>>632の笑い所がわからん
0641デフォルトの名無しさんNGNG
>>640
中学英語からやり直してこい
0642デフォルトの名無しさんNGNG
あなたの夢を喜劇にしなさい。
0643デフォルトの名無しさんNGNG
falseの発音は「フォルス」でいいの?
0644デフォルトの名無しさんNGNG
「厳密には」とか言いながらカタカナ表記で、
しかも最後が「グ」なんて書く
頭の悪い人が後を勃たない。
0645デフォルトの名無しさんNGNG
厳密には、
頭の悪い人ではなく、バカが悪い人と書く。
0646デフォルトの名無しさんNGNG
true = トルエ
false = ファルセ
0647デフォルトの名無しさんNGNG
ファールス
0648デフォルトの名無しさんNGNG
int=あいえぬてぃー
double=だぶる
char=きゃら
float=ふろーと
long=ろんぐ
unsigned=あんさいんど
true=とぅるー
false=ふぁーるす
class=くらす
struct=すとらくと
template=てんぷれーと
stdio=えすてぃーでぃーあいおー
stdlib=えすてぃーでぃーりぶ
iostream=あいおーすとりーむ
fstream=えふすとりーむ
vector=べくたー
deque=できゅー
0649デフォルトの名無しさんNGNG
cout=しーあうと
cin=しーいん
cerr=しーえらー
0650デフォルトの名無しさんNGNG
string=すとりんぐ
wstring=だぶるすとりんぐ
boost=ぶーすと
stlport=えすてぃーえるぽーと
0651デフォルトの名無しさんNGNG
reinterpret_cast=れいんたーぷりときゃすと
0652デフォルトの名無しさんNGNG
operator=おぺれーた
0653デフォルトの名無しさんNGNG
cinco=チンコ
0654デフォルトの名無しさんNGNG
queue=きゅー
find=ふぁいんど
find_if=ふぁいんどいふ
lower_bound=ろうあーばうんど
upper_bound=あっぱーばうんど
equal_range=いこーるれんじ
remove=りむーぶ
for_each=ふぉーいーち
partition=ぱーてぃしょん
nth_element=えぬてぃーえいちえれめんと
iterator=いてれーた
const=こんすと
0655デフォルトの名無しさんNGNG
int=いんと
double=どうぶる
char=ちゃー
float=ふろーぁと
long=ろんぐ
unsigned=あんさいねど
operator=おぺらーとぁ
while=わいる
0656デフォルトの名無しさんNGNG
while=ほわいる
0657デフォルトの名無しさんNGNG
regex=れじぇっくす
C++=しーぷらすぷらす
0658デフォルトの名無しさんNGNG
operator=おぺらとーる
0659デフォルトの名無しさんNGNG
>>648
int イントでは?
0660デフォルトの名無しさんNGNG
.cppファイルと.hファイルの違いって何なんでしょう。
cppファイルが複数あった場合、コンパイル時どういう順で展開されるんでしょうか
0661デフォルトの名無しさんNGNG
別にあいえぬてぃーでも問題無いんじゃない?
doubleをでぃーおーゆーびーえるいーとか読まれたら引くけど
0662デフォルトの名無しさんNGNG
>>660
こんぱいらにおくったじゅん
0663デフォルトの名無しさんNGNG
4ヶ月ぶりぐらいにC++をやったら、プログラムを実行できなくなりました。
原因は全くわかりません。初心者丸出しの質問ですが、どなたか何が
原因と思われるかわかりませんか?
0664デフォルトの名無しさんNGNG
>>663
あなたが4ヶ月ぶりくらいにC++をやったこと
0665デフォルトの名無しさんNGNG
>>660
hファイルはコンパイル前にcppファイルに取り込まれる。
cppファイルは取り込んだhファイルごとコンパイラにかけられてオブジェクトファイルになる。
0666デフォルトの名無しさんNGNG
>>663
どんなプログラムでどんなエラーが吐き出されたとか
詳細を書かなければ誰も答えてくれませんよ

とマジレスしましたがネタですかね(?)
0667デフォルトの名無しさんNGNG
int = いんてじゃー
0668デフォルトの名無しさんNGNG
>>664
原因が何だか本当にわかりません。
ビルドの結果はエラーなしなのですが、実行すると、「プログラムを実行できません」と出ます。
マジで困ってます・・・OTL
0669デフォルトの名無しさんNGNG
1000 2000=せんにせん
2000 4000=にせんよんせん
5200=ごんに
3900=ざんく
1000=せんてん
7700=なななな
0670デフォルトの名無しさんNGNG
家のパソコンが夜な夜な勝手に動きまわるんです。
たすけてください
0671663NGNG
>>668は僕です。
>>666 
ネタじゃないです・・・。エラーは出てないんですが、実行ができません。
0672デフォルトの名無しさんNGNG
>>667
そこiいんてじゃーねとかいうとintegerって書かれるぞ
0673デフォルトの名無しさんNGNG
>>671
板違い
0674663NGNG
>>673
板違いなんですか・・・?確かにプログラム以前の問題だとは思いますが・・誰もわかりませんかね?
0675デフォルトの名無しさんNGNG
>>674
開発環境に沿ったスレで質問した方がきちんと答えてくれる人が
いると思われ。
そこでもう少し詳細を述べましょ
0676663NGNG
>>675
そうですか・・わかりました。ありがとうございます。
0677デフォルトの名無しさんNGNG
>>648
stdio=スタンダードアイオー
stdlib=スタンダードリブ
って言わないの?
俺だけ?
0678デフォルトの名無しさんNGNG
GUI=じーゆーあい
CUI=しーゆーあい
stdio=すとでぃお
0679デフォルトの名無しさんNGNG
GNU=ぐにゅ かっこつけるとき ぬー
0680デフォルトの名無しさんNGNG
GUI=ぐい
CUI=くい
GNU=じーえぬゆー
0681デフォルトの名無しさんNGNG
>>665
cppファイル1つに付き、オブジェクトファイル1つ作られるのでしょうか。それから、リンクってこと。??
0682デフォルトの名無しさんNGNG
GNUはグニューと決まっている。て言うかC++の話題マダ〜?
0683デフォルトの名無しさんNGNG
>>654なんて完全にC++の話題ジャン
0684デフォルトの名無しさんNGNG
GUI=ぎゅい
CUI=きゅい
GNU=ぐぬぅ
0685デフォルトの名無しさんNGNG
ここはとても低レベルなインターネッツですね。
0686デフォルトの名無しさんNGNG
万個スレが削除された途端
こっちがネタスレになっちゃったな。
0687デフォルトの名無しさんNGNG
endl=えんどえる
std=えすてぃーでぃー

それはそうと
cout << "Hello World" << endl;
の
<<
の読み方がわからん。
逆の>>も。
0688デフォルトの名無しさんNGNG
左!左!
0689デフォルトの名無しさんNGNG
NILはなんて読んだらいいの?
0690デフォルトの名無しさんNGNG
NULL=ぬる
(void*)0=ぬるぽ
0691デフォルトの名無しさんNGNG
>>690
#define NULL (void*)0ならどうなるよ?
0692デフォルトの名無しさんNGNG
#define NULL (void*)0=しゃーぷでふぁいん ぬる ぬるぽ
0693デフォルトの名無しさんNGNG
こんにちは。わたくし、ぬるぬるぽと申します。
0694デフォルトの名無しさんNGNG
やけにスレが伸びてると思ったら。
0695デフォルトの名無しさんNGNG
>>693
のび太みたいだな。
0696デフォルトの名無しさんNGNG
大切な重複スレがゴミ箱に捨てられてしまった。
0697デフォルトの名無しさんNGNG
ゴミ箱って書けないんだっけ
0698デフォルトの名無しさんNGNG
質問です。
いまあるクラス用意します。たとえばこのクラスはファイルアクセスに関する単純な処理を提供します。
1バイトアクセスのReadByte、WriteByteがあるとします。このクラスをCBaseFileとします。
次にこれを使って用途がより限定的なクラスを作ります。
つまりCBaseFileでは処理が汎用的でコーディング量を節約できないためです。
そこでCMyFileを作成し、ReadLine、WriteLine(行;\r\nまでの単位を扱う)を提供したいとおもいます。
このときこのCMyFileはCBaseFileから継承したほうが良いのか、メンバに持つべきなのか、です。
Is AなのかHas Aなのかどっちにしたほうが良いのですか?
0699デフォルトの名無しさんNGNG
どっちでも好きなほうでいいんでない?
0700デフォルトの名無しさんNGNG
>>698
委譲で出来る事は全部委譲でやる。
委譲で出来なくてprivate継承で出来る事は全部private継承でやる。
それでもできなければprotected継承で。
それで無理なら考え直せ。
0701698NGNG
委譲って言葉をはじめて知りました。
メンバにもってその機能を使い、もう少し便利な形にして外に見せる、見たいな事でしょうか。
とりあえずメンバに持つやり方にします。
ありがとうございました。
0702デフォルトの名無しさんNGNG
>>698
iostreamの設計を見つめてください
0703デフォルトの名無しさんNGNG
自分の事は自分でやる...か。意味深な
0704デフォルトの名無しさんNGNG
すごい複雑でつね。こんな設計見習うべきか躊躇しまふ。
0705デフォルトの名無しさんNGNG
質問させて下さいな。
3桁毎に区切りが入った 2,234,713 のような10進文字列の取得は
皆さんどうやって実現してるんでしょうか?
0706デフォルトの名無しさんNGNG
,を全部無視するだけじゃないの?
0707デフォルトの名無しさんNGNG
sscanf(buff, "%d %d %d", &a,&b,&c); これは無理か?
0708デフォルトの名無しさんNGNG
>>706
std::string s = "70,145,123";
s.erase(std::remove(s.begin(), s.end(), ','), s.end());
int result = atoi(s.c_str());
0709デフォルトの名無しさんNGNG
無理だ。
int a,b,c;
char buff[]="10 20 30";
sscanf(buff, "%d,%d,%d",&a,&b,&c);
これでできたよ。。うちは
0710デフォルトの名無しさんNGNG
C++だた...
0711705NGNG
質問の仕方が悪かったみたいです。
やりたい事は、int → char*です。
snprintf()とか_itoa()とかでは実現できないみたいなので質問しました。
一時は自力でやるべきかと思いましたが、ロケール毎で区切り文字などが違うらしいので、
なにか良い方法はないものかと思いまして・・・。
0712デフォルトの名無しさんNGNG
>>711
>>708をちょっと変えて
!isdigitでremove_ifすればいいじゃない?
区切りが数字なんて無いでしょ?
0713デフォルトの名無しさんNGNG
>>712は勘違いしますた
0714デフォルトの名無しさんNGNG
>>713はそれを指摘しますた
0715デフォルトの名無しさんNGNG
1,000,000  これが100万てことか。
例えば"1,000,000"ていう文字列を10進数に
直すって意味ではないのか。質問の意味が分からない。
0716705NGNG
>>715
ちょうど逆です。
1000000を"1,000,000"に変換したいのです。
なにか汎用的な方法とかあるんでしょうか?
0717デフォルトの名無しさんNGNG
あります
0718705NGNG
>>717
是非ご教示下さい。
0719デフォルトの名無しさんNGNG
自作
AddComma( moneyStr, ',', 10000 )
void AddComma(char *str, char chr, int money);
力不足でごめん。
0720デフォルトの名無しさんNGNG
>>719はただのバカですが、ちゃんとできます。
0721デフォルトの名無しさんNGNG
#include <iostream>
#include <string>
using namespace std;

string insert_comma (string str) {
 int pos = (int)str.length() - 3;
 while (pos >= 1) {
  str.insert(pos, 1, ',');
  pos -= 3;
 }
 return str;
}

int main (int argc, char *argv[]) {
 cout << insert_comma("10") << endl;
 cout << insert_comma("100") << endl;
 cout << insert_comma("1000") << endl;
 cout << insert_comma("100000") << endl;
 cout << insert_comma("10000000000") << endl;
 return 0;
}
0722デフォルトの名無しさんNGNG
>>721も分かってないみたいですが出来ます
0723デフォルトの名無しさんNGNG
メモリのプール化について説明してるサイトないですか?
0724721NGNG
>722
はあ?分かってないって何だよ。面白くねーなクソが。

あんた>717か?汎用的な方法ってやつの事か?
マニピュレータでも定義するんなら、とっととコード書くなりヒント与えるなりしたらどうだ。
# 確か標準マニピュレータの中にはコンマを付加するやつは無かったと思うけどさ。
# あるんなら早くポインタ示してやれよ。
0725デフォルトの名無しさんNGNG
printf("%03d,%03d,%03d",(x%1000000000)/1000000,(x%1000000)/1000,(x%1000));
0726705NGNG
>>721
ご教示有難うございました。自作版ですね。


例えばWindowsでは、コントロールパネルの「地域と言語のオプション」から
各国毎の数値の表記方法が確認できるのですが、
アイスランド語やアゼルバイジャン語(50音順に並ぶ最初の2つの言語)は、
日本語の数値表記と違うみたいです。むしろ、日本と違う国がたくさんあるようです。
こういうのって、boostにあってもよさそうに思うのですが。
0727デフォルトの名無しさんNGNG
boostなんか使わなくてもちゃんとロケールが定義されてる環境なら標準C++でできます。
>>724
gccみたいなお馬鹿なコンパイラでは無理ですよ
0728デフォルトの名無しさんNGNG
ちなみにVC++7.1みたいな標準準拠度の高いコンパイラならOKです。
0729デフォルトの名無しさんNGNG
文法の質問?なのですが、

Class TestClass{
  
  struct TestClass{
    int a,b,c;
    char c,d,e;
};
};

これって使えますか?
つまり、クラスのメンバの構造体の名前が、クラス名と同じという書き方はできるんでしょうか?
0730デフォルトの名無しさんNGNG
他に誰も知らないみたいなのでそろそろ答えを出します。

#include <locale>
#include <iostream>

int main()
{
using namespace std;

int i = 1500000;
cout.imbue(locale(""));
cout << i << endl;
}

文字列に格納したければcoutの代わりにstringstreamを使えばOKです。
locale("")で使用環境のネイティブロケールを指定した事になります。
0731デフォルトの名無しさんNGNG
ちなみにさっき書き間違えましたが、
お馬鹿なのはlibstdc++でgccではないかもしれません。
0732デフォルトの名無しさんNGNG
>>724
無知をさらけ出さない方がイイですよ
0733705NGNG
>>730
早速、試してみました。有難うございました。
locale("")というのは、関数じゃなくてクラスのインスタンスなんですね。

標準C++は奥が深いなぁ。ちょっと目からウロコ。
0734721NGNG
>732
そうやって俺をイラつかせて、何をしたいんだ。
俺に恨みでもあるのか。それとも人をからかうのが好きなのか。
どちらにしても、お前は悪意をもって人を傷つけようとした。
こういう事はこれで最後にしろ。
0735デフォルトの名無しさんNGNG
>ロケール毎で区切り文字などが違うらしい
だってこの質問文も読まないでカンマに固定してんだもん。
0736デフォルトの名無しさんNGNG
>735
は?>705では3桁区切りとしか書いてねーじゃん。
だから俺も3桁で区切るコード書いたんだよ。

で、何だ。俺が>711を読んだ上で>721のコードを書いてしまったとして
お前はそれを「無知」つって笑うのか。これ、「無知」つーのか。
「不注意」じゃなくて。
0737デフォルトの名無しさんNGNG
そろそろウザい。2人とも消えろ。な?

↓何事もなかったかのように質問ドゾー
0738デフォルトの名無しさんNGNG
>>736
localeも知ってたんなら無知じゃなくて不注意でもいいけど、
locale自体知らなかったなら無知だろ。つーかどうでもいいよ。しつこいし。
0739デフォルトの名無しさんNGNG
>>737
もう質問有るから何事もなかったように
>>723とか>>729とかに答えてやれよ
0740デフォルトの名無しさんNGNG
>>723 boost::pool
>>729 やってみれ
0741デフォルトの名無しさんNGNG
News 2004-09-18: The C++ Standard Library Issues List (Revision 32) is available
ttp://www.open-std.org/jtc1/sc22/wg21/
0742デフォルトの名無しさんNGNG
自分の弁護に必死になるのは見苦しい。
相手が自分より良い方法を示してきたら素直に受け容れろ。
0743デフォルトの名無しさんNGNG
一言多い人って子供っぽい
0744デフォルトの名無しさんNGNG
はぁ
0745デフォルトの名無しさんNGNG
>>743 いい例ですね
0746デフォルトの名無しさんNGNG
そもそも>>721が中途半端な知識をひけらかすから悪い。
知らないなら黙っていればよかったのに。
しかもいつまでも粘着するし。
0747デフォルトの名無しさんNGNG
以下のように動的に確保した2次元配列に関する質問です。
double** array2D(int imax,int jmax){
int i;
double *Mi,**M;
Mi=new double[imax*jmax];
M=new double*[imax];
for(i=0; i<imax; i++){
M[i]=Mi+i*jmax;
}
return M;
}

これを
int main(void){
double **c;
int i,j;
c= array2D(2,4);

for(i=0;i<2;i++){
for(j=0;j<4;j++){
c[i][j] = j+ 4*i;
print_pointer2D( c+i );
}
}
}
の様に用います。ここでprint_pointer2D関数は
void print_pointer2D(double **c){
printf("%f \n", c[0][0]);
}
という風に、渡されたアドレスの先頭をprintするだけの関数です。
質問は、print_pointer2D(c+i)とすればc[0][0]の値やc[1][0]の値をprintすることはできるのですが、
c[1][1]やc[0][2]等も渡すようにするにはprint_pointer2D関数の引数をどのようにすればよいでしょうか?
0748デフォルトの名無しさんNGNG
いちいち相手して721の神経逆なでする事も無いじゃん
0749デフォルトの名無しさんNGNG
>>747
普通にこうしたらだめ?
void print_pointer2D(double c) {
printf("%f \n", c);
}
0750デフォルトの名無しさんNGNG
747は何か根本的にパーだから放置しる
0751デフォルトの名無しさんNGNG
>>730
>>721
クスクス・・・
0752デフォルトの名無しさんNGNG
レスのやり取りをみてると、721は何も悪くない。
730の方がスゲー感じ悪いよ。
0753デフォルトの名無しさんNGNG
>>749
いや、それでもいいのですが、それだと今までに作ったプログラムを結構書き換えなければ
ならないんですね。うーむ、うまい方法はないものでしょうか。
0754デフォルトの名無しさんNGNG
>>753
ならdouble**版とdouble版をオーバーロードしたらどうだ。
ただし周りを混乱させる諸刃の剣。

そういやvoid print_pointer2D(double c);なんて関数名と引数が合っていないな。
ますます混乱させる度合いが上がるぞ。
0755デフォルトの名無しさんNGNG
やっぱそれしかないですか。。
根性で今までのプログラム書き換えます。
どうもありがとうございました。
0756デフォルトの名無しさんNGNG
こういうのってリファクタリングツール使えば簡単に直せるんじゃないの?
C++用ノリファクタリングツールがあるかどうかはしらんが。
0757デフォルトの名無しさんNGNG
>>731
これ,うちではうまく動きますよ.
環境はgccが3.3.4で,libstdc++はそれについてきてるやつかな?
Debian GNU/Linuxなもので,
gccとlibstdc++は別にパッケージしてあります.
パッケージのバージョン(リビジョン)は,
g++-3.3 3.3.4-6sarge1.2
libstdc++5 3.3.4-6sarge1.2
です.

gccでうまく動かないとおっしゃる731さんはどんな環境なのですか?
0758デフォルトの名無しさんNGNG
別方向から食いついてるな
0759デフォルトの名無しさんNGNG
>>757
とりあえずcygwinだと動かないよ。
でもcygwinはnewlibだったかな?
newlibはmingwか。
0760デフォルトの名無しさんNGNG
ここは標準スレですコンパイラ比較スレではありませんコンパイラの比較は
【初心者歓迎】C/C++室 Ver.9【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1094494997/
でどうぞ
0761デフォルトの名無しさんNGNG
Rubydeすべてかいけつ。」
留byさいきょうげんご
るびーーーーーーーーーーーー
0762デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_35/code.txt


配列とポインタがらみの質問なのですが
int hairetu[10]; int* point = hairetu; とするとpointにはhairetu[0]のアドレスが入るんですよね?
さらに*(point+9)とするとhairetu[9](最後尾)の内容を表すと思うのですが、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_35/code.txt 
↑このコードのtmpint.array+10というのはarray[0]から10個先のarray[11]を指しているように見えるのですが・・・
0763デフォルトの名無しさんNGNG
間違えました、array[10]を指しているように見えるのですが、arrayは[10]で定義されているので最後尾が[9]までだと思うんです。
これって配列の最後尾より大きいところを指しているように見えるのですが。。
0764デフォルトの名無しさんNGNG
>>763
[ first, last )
0765763NGNG
書き忘れました、何度もすみません。
このコードを実際に動かしてみるとしっかりとarray[9]を指していることが分かるのですが
最初に書いた例で行くと、point+1はhairetu[1]のアドレスを意味するのになぜこの場合はtmpint.array+10でarray[9]を意味するのでしょうか?
0766デフォルトの名無しさんNGNG
>>765 意味しないよ
0767デフォルトの名無しさんNGNG
>>765
>この場合はtmpint.array+10でarray[9]を意味する
ここの理解が違います。tmpint.array+10はarray[10]のアドレスを指してます。
STLアルゴリズムの範囲の指定の仕方を調べて下さい。(答えは764。)
0768デフォルトの名無しさんNGNG
終了条件
0769デフォルトの名無しさんNGNG
質問の直後に出てる答えをスルーする質問者って多いな。
0770デフォルトの名無しさんNGNG
[ first, last )
これは高校数学を習ってないと分からないからな
0771デフォルトの名無しさんNGNG
>>770
高校数学じゃないって。大学の教養課程だ。
0772デフォルトの名無しさんNGNG
>>771
極限は数�V
0773デフォルトの名無しさんNGNG
CSVファイルみたなテキストファイルからデータを読みたい時とか、
Cの標準ライブラリの場合はfgets()とsscanf()を使います。

C++の標準ライブラリの場合は行の読み込みではgetline()を使えますが
string型の文字列をカンマ単位で分けたい時なんかは
何か関数が用意されていたりしますでしょうか?
やっぱりsscanf()がよく使われているのでしょうか?

それとも1行の文字列からstringstreamを作り、get()で1文字ずつ読み込んで
区切り文字でないかどうか判定するループを組む処理のが一般に行われているのでしょうか?
例えばこのページの「文字列切り分け」のところのように。
http://cham.ne.jp/piro/p_cp.html
0774デフォルトの名無しさんNGNG
fscanfで正規表現のようなものが使えます
ぐぐってみて
0775デフォルトの名無しさんNGNG
boost::tokenizer
0776デフォルトの名無しさんNGNG
BCB使ってるんでboostは使えません
0777デフォルトの名無しさんNGNG
777
0778デフォルトの名無しさんNGNG
>>776
boost::tokenizerは別に使えるようだが。
0779763NGNG
レス遅れてすみません。
教えていただいた内容で調べてみることにします。
ありがとうございました。
0780763NGNG
すみません、最後にどうしても気になったのでひとつ。
>>tmpint.array+10はarray[10]のアドレスを指してます
配列の最大を超える見たいですが、これに問題はないのでしょうか?
もし問題がなければ配列の大きさなんて関係なしに[1]とか適当にやっておいて後から[2]とか適当に足していくことができるんですか?
0781デフォルトの名無しさんNGNG
>>780
> 配列の最大を超える見たいですが、これに問題はないのでしょうか?
int a[10]; と定義したら、読み書きして良いのは a[0] から a[9] まで。

ただし例外として &a[10]; (有効なアドレスの次のアドレス) は取得して OK。
もちろん a[10] を読み書きしたらアウト。
0782デフォルトの名無しさんNGNG
別にアドレスの取得自体は何を取得しても問題ないべ
0783763NGNG
>>781
なるほど、そんな例外があったんですね。。
入門書をいろいろ読んできたのですが一度もそんな内容を見ていなかったのでわかりませんでした・・
となると、sortなどは1番目の引数に配列の先頭のアドレス、2番目に配列の最大より一つ大きいところのアドレスを指定する必要があるんですね。
0784デフォルトの名無しさんNGNG
boost の勉強にオススメな本って何かありますか?
0785デフォルトの名無しさんNGNG
>>782
規格上は &a[11] とかは未定義だよ。

ま、ふつーは問題ないけど 32bit アーキテクチャで &a[2ギガ] とかやると、
ポインタがオーバーフローして別の有効な変数のアドレスに一致したり
NULL と一致したりして泣くかも知れず。
0786デフォルトの名無しさんNGNG
>>772
は?

高校数学では、括弧に意味付けする記述は使わんだろ。
0787デフォルトの名無しさんNGNG
そうなの?私立だったから習ったのかな?
0788デフォルトの名無しさんNGNG
教科書には
[, ] (, ) の説明はちゃんとしてある
0789デフォルトの名無しさんNGNG
>>788
何時ごろの教科書?
最近?
0790デフォルトの名無しさんNGNG
>>789
超最近
0791デフォルトの名無しさんNGNG
高校では、「界」を抽象的には扱わんだろ。
わざわざ括弧での記述を教える意味がない。
扱うものが1次元の数値だけなので不等号で十分でしょが。

高校の教科書にホントに出てるの?
あやしい。
0792デフォルトの名無しさんNGNG
>>791
あなたもしつこい人ですね
出てるったら出てるんです
0793デフォルトの名無しさんNGNG
数学の話は数学板でどうぞ
0794デフォルトの名無しさんNGNG
>>792
(・∀・)ニヤニヤ

嘘くさ・・・(w
0795デフォルトの名無しさんNGNG
>>773
getlineではデリミタが指定できるんだが。
0796デフォルトの名無しさんNGNG
[]と()は開区間と閉区間の説明で、高校の教科書に出てくる。
ただ、説明だけが出てきてまったく使わないだけのこと。
少なくとも4年前には出てた。
0797773NGNG
お答えありがとうございました。
getlineでデリミタ指定できるのは知りませんでした。
boostのtokenizerも知りませんでした。
0798デフォルトの名無しさんNGNG
>>794は中卒だから知らないんだよw
0799デフォルトの名無しさんNGNG
C++相談室なのにCの話題書いてくる香具師大杉
生配列とか生charに関する質問はCスレでやれと言いたい
0800デフォルトの名無しさんNGNG
ちょっとお聞きしたいのですが…

クラス x と、その派生クラス y があるとします。
また、これらのクラスを扱う DLL が 3 つあるとします。

ある DLL_A が、別の DLL_B に実装してある、y を new し x* で返す関数を呼び出し、
そのポインタを、別の DLL_C に実装してある、x* を引数に取る関数に渡した場合、
引数を受けた DLL_C は、x* を y* に dynamic_cast できますか?

VC.NET で上記の DLL を作成したところ、うまくキャストできましたが、
違うコンパイラ/環境で作成した DLL だとまずいことになるでしょうか?

DLL_A は x のヘッダのみインクルード、
DLL_B, DLL_C は x, y の実装されたライブラリをリンクしています。
DLL_A は、実行時に LoadLibrary で DLL_B, DLL_C を動的読み込みしています。
0801デフォルトの名無しさんNGNG
>>800
ABI,vtbl,RTTI,SEHの形式や使い方が違うコンパイラだったら
当然まずいんじゃないの?
0802デフォルトの名無しさんNGNG
>>800
>>760
0803デフォルトの名無しさんNGNG
>>799
「Cの」ではなく、CでもありC++でもある領域の問題だろが
CとC++の共通項はどちらでもいいし、C特有の問題はCスレ、C++特有の問題はC++スレで何の問題があるんだ?
0804デフォルトの名無しさんNGNG
>>803
俺も同意見
0805デフォルトの名無しさんNGNG
C特有の問題でもC++的なアプローチを示せる可能性だってあるしねぇ
0806デフォルトの名無しさんNGNG
どっちでもいいじゃん
0807デフォルトの名無しさんNGNG
>>805
漏れもそう思う。
標準のC++クラスやboostを使うことにこだわるのとは意味がちがう。
C++的解決方法は他にもたくさんある。
0808デフォルトの名無しさんNGNG
template <class T>
class DynamicPtr
{
public:
T** data;
UINT nInst;
public:
DynamicPtr();
~DynamicPtr();
void Add(); //追加
};
template <class T>
void DynamicPtr<T>::Add(){
nInst++;
data = (T**)realloc( data, sizeof(T*)*nInst );
data[nInst-1] = new T;
}
DynamicPtr<MyData> dptr;
Addメソッドで一つずつ動的に確保するクラス(コンストラクタ呼び出したいが為のダブルポインタ使用)
なんですが、dataメンバを使う時、dptr.data[5]->メソッドてなるから
直接的にdptr[5]->メソッドていう風に手間を省きたい。
早く言えば、ATLの CComPtr<IDirect3DDevice> m_pd3dDevice
みたいな事が実現したいです。m_pd3dDevice.data->メソッドとはなりませんよね。
変数名(dptr)そのものがT**になって欲しいという意味です。
長文ご免。
0809デフォルトの名無しさんNGNG
車輪をつくるな!!!
0810デフォルトの名無しさんNGNG
車輪がなきゃ走れないよ
0811デフォルトの名無しさんNGNG
走る必要なんてないよ
0812デフォルトの名無しさんNGNG
他人がどうこう言うこっちゃねぇ
0813デフォルトの名無しさんNGNG
きっとT* operator[](int)を定義するんだ
0814デフォルトの名無しさんNGNG
車輪の再発明は、プラモデル感覚が楽しいのは確かだ。
ただ、プラモデルを実務に導入するのはまずい。
実際に作って構造を理解するのには役立つが、それ以上のものであってはならない。
0815デフォルトの名無しさんNGNG
>>800
(例) MetrowerksCodeWarriorPro8.3forWinReleaseNotesより抜粋
* データメンバーを使う多重継承のクラスレイアウトはMSVCと完全互換ではありま
 せん。異なるコンパイラでコンパイルされたモジュール間ではこの機能に使用し
 てデータを共用することはしないでください。
こういうことがあるから、dll間でクラスのやり取りは基本的に無理だと考えておいた
ほうがよい。
0816デフォルトの名無しさんNGNG
>>808
メンバ関数にこれを追加
operator T**() {return data;}
0817デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>> C++
0818デフォルトの名無しさんNGNG
ルビ厨が4年前からタイムスリップしてきたかのようだ。
懐かしいな。
0819デフォルトの名無しさんNGNG
boostっていつ標準C++に入るの?
もう何個かは決まってるんでしょ?
さっさとして欲しい
0820デフォルトの名無しさんNGNG
2009年くらい
0821デフォルトの名無しさんNGNG
>>820
あれは実は16進だから2015年までだったりして
0822デフォルトの名無しさんNGNG
16進だと何故2015年なんだろう…
0823デフォルトの名無しさんNGNG
0x
↓
0x○
って事じゃないの?
0824デフォルトの名無しさんNGNG
ルビ厨が暴れてたころを知らんのだがどこみればいい?
0825デフォルトの名無しさんNGNG
0x9 == 9 のような気が
0826デフォルトの名無しさんNGNG
>>825
0xF == 15
0827デフォルトの名無しさんNGNG
>>821
そもそも
0x1000
とかも出来るから何年にでも出来るんじゃないの?
0828デフォルトの名無しさんNGNG
2009ってlonghornよりも後じゃん…
0829デフォルトの名無しさんNGNG
日本語のページのみ検索するようにして次世代C++の呼び名でぐぐると
良く分かんないハングルのページばっかり引っかかるのはgoogleの嫌がらせか?
0830800NGNG
>>801
>>815
お答えいただきありがとうございました。
イベントクラスの、フレームワーク・外部モジュール間の受け渡しを考えていたんですが、
なかなか難しいようで…もうちょっと頭をひねってみます。

>>802
参考にさせていただきます。
0831デフォルトの名無しさんNGNG
>>824

http://web.archive.org/web/20000302001334/http://www.ruby-lang.org/ja/compar.html
--------------------------------------------------------------------------

C++
いろいろと有名なオブジェクト指向言語であるC++とRubyを比較すると:


C++なぞ問題外.^^;;;

--------------------------------------------------------------------------
ちなみに、英語版には記載がない(ぷ
0832デフォルトの名無しさんNGNG
>>831
thx. こりゃキッツー。勘違いルビ厨が暴れるのも分かるワ
0833デフォルトの名無しさんNGNG
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C++
ばーか。C++ユーザ死ねよ
Ruby以外の言語は糞なんだよ。そんなことも分からないの?

0834デフォルトの名無しさんNGNG
SE「これからはRubyなんだ!Rubyの案件持ってきてくれよYO!」
営業「・・・」
課長「・・・」
部長「るびーって何だね?」



営業「おい、Rubyの案件なんてなかったぞ!」
SE「ちゃんと探してんのか?ゴルァ!!」
営業「それよりこっちのC++の見積り早く出してよ」
SE「・・・」
課長「プッ」
部長「るびーって何だね?」
0835デフォルトの名無しさんNGNG
簡単なsmtpクライアントを作ろうと思ったのですが日本語エンコードの問題に
ぶち当たってしまいました。エンコード変換にはいろいろ方法があるようですが
なんとか見慣れたstream系の書式のままエンコード変換→送信する方法はないでしょうか?
コンパイラはminGW、socketのラッパーとしてgimite/socketというのを使ってます。
0836デフォルトの名無しさんNGNG
Rubydesubetekaiketu!
0837835NGNG
RubyではHTTPクライアントを作った事がありますが、
確かにC++に比べて全然簡単ですね(涙
0838デフォルトの名無しさんNGNG
>>835
そういうストリームクラス作ればいいじゃん。
0839デフォルトの名無しさんNGNG
いcおんv
0840835NGNG
iconvってcharベースじゃないですかw
コレ使って内容書き換えるstreamクラス作るしかないのかなぁ
なんかやろうとしてる事に対して大げさすぎる気が(汗
理想的にはiomanipみたいな感覚で
stream << encode("Shift_JIS");ってできたらいいのになぁ。
誰か作ってないのかなぁ・・・。
0841808NGNG
レスありがとうございました。
よければ標準ライブラリで動的確保を行うクラス列挙してもらえませんか。みなさんがよく使われるモノ知りたいです
0842デフォルトの名無しさんNGNG
>>840
バッファに直接アクセスしにくいiostream系は応用面でオ�hル。
あまり当てにしないほうがいい。
0843デフォルトの名無しさんNGNG
いbm いcう
0844808NGNG
vectorクラスっての使ってみます。調べずに聞いてごめんなさい。
0845デフォルトの名無しさんNGNG
>>835
http://tricklib.com/cxx/ex/babel/
0846835NGNG
>>845
ぬお!まさに求めていたモノに近い(嬉
不安定そうな名前といやに多いマクロが心配ですが使ってみまつ。
ありがとう。
0847デフォルトの名無しさんNGNG
そいや昔BoostのMLで「コード変換ライブラリ欲しい」「iconvがあるじゃねぇか」「iconvはライセンス的にクソ」みたいなやりとりがあった気がするな。その後どうなったのか知らんが。
0848デフォルトの名無しさんNGNG
>>846
gimite/socketの作者も利用してるみたいだから
頼めば、gimite/socket に組み込んだモノを用意してくれかもしれんよ。
0849デフォルトの名無しさんNGNG
ライセンスが面倒なのでそこらへんは自作してるなぁ。>iconv
0850デフォルトの名無しさんNGNG
純粋仮想constメンバ関数は
virtual void ConstFunction() const = 0;
でいいのですか?
0851デフォルトの名無しさんNGNG
>>850 まずコンパイラに聞け。
0852デフォルトの名無しさんNGNG
しらないならすなおにしりませんっていえよ
友達いねーだろw
0853デフォルトの名無しさんNGNG
Rubysaikyou!!!!!!!
0854デフォルトの名無しさんNGNG
ですねw
0855デフォルトの名無しさんNGNG
C++は最強──・ε・)・π・)・ι・)σ)・τ・)・η・)・μ・)・η・)──!!!
0856デフォルトの名無しさんNGNG
ですねw
0857デフォルトの名無しさんNGNG
>>855
えぴすてーめーハケーン
0858デフォルトの名無しさんNGNG
>>850
const修飾の有無はどうでもいいことなのです

> virtual void ConstFunction() const = 0;

よろしい
0859デフォルトの名無しさんNGNG
ふと気になったのだけど、
draw_lineとdrawLine、アンダースコアでセパレートするのと小文字で始め大文字区切りにするのと、
C++ではどちらを好きな人が多いのかな?
0860デフォルトの名無しさんNGNG
Ruby <>>><<<<<<<<<<<<<<<<<<JMMMMMMMMMMMPOC+++++++++
0861デフォルトの名無しさんNGNG
関数や制御構造ローカル>draw_line
それより大きいスコープ>DrawLine
3文字以下の名前>ABC
どの名前も適さない一時変数>FILE* file/POINT point/int i/float f
0862デフォルトの名無しさんNGNG
なんだか知らないけどここにウィルス置いときますね
ttp://pukapuka.s1.x-beat.com/img-box/img20040920215205.lzh
0863デフォルトの名無しさんNGNG
俺はDrawLine派
0864デフォルトの名無しさんNGNG
>>859
Win32 系のプログラムだと API に合わせて DrawLine
でも STL や Boost だと draw_line

ま、何でも良いよ。
0865デフォルトの名無しさんNGNG
Win32系でboost使う場合は?
ちなみに漏れは draw_line
この方がなんか目に優しい感じがするから
0866デフォルトの名無しさんNGNG
質問なんですが、

void main()
{

}

で、コンパイルエラーを出すのと出さないのでは何が違うのですか?

エラーを出すコンパイラ
gcc など gnu系(MinGWなど)

エラーを出さず正常にコンパイルできるコンパイラ
VisualStudio.Net 2003
Borland C++ compiler 5.5.1
0867デフォルトの名無しさんNGNG
ホントはdraw-lineと書きたい。
0868デフォルトの名無しさんNGNG
工エエェェ(´д`)ェェエエ工
0869デフォルトの名無しさんNGNG
draw_lineのほうがお肌に優しいと聞いた。
0870デフォルトの名無しさんNGNG
アンダースコアなーじっくりみないとスペースに見えてしまうんだよ。
アンダースコートならそれでいいんだけどなー。
0871デフォルトの名無しさんNGNG
>>866
mainエントリポイントの返り値にvoidが不正・・・だったはず
0872デフォルトの名無しさんNGNG
>>866
自己解決
http://www.research.att.com/~bs/bs_faq2.html#void-main
0873デフォルトの名無しさんNGNG
>>870
使ってるフォントが悪いな。
0874835NGNG
835です。
皆様のおかげでC++のstream書式で無事にsmtpクライアントを書くことができました。
babelはShift_JIS->iso-2022-jpへの直接変換ができないみたなので焦りましたがw。
また有名(?)なbare LF問題で小1時間悩んだり・・・ヘボくてすみません。

最後に質問させてください。
今ファイル添付の機能をつけようと思ってbase64変換ライブラリを探しているのですが、
gmite/socketやbabelと同様にstring or streamを操作するタイプのものを求めています。
cやPerlのものは結構見つかるのですが・・・良いのがあったら教えてください。お願いします。
0875デフォルトの名無しさんNGNG
>>874
それぐらいならその c や perl のヤツを元に自分で書き起こしてもいいんじゃない?
0876デフォルトの名無しさんNGNG
sf.net
0877デフォルトの名無しさんNGNG
boost::spirit が半端なく重いのですがどうしたらよいでしょうか
0878デフォルトの名無しさんNGNG
使わない
0879デフォルトの名無しさんNGNG
なんだか知らないけどここにもウィルス置いときますね
ttp://pukapuka.s1.x-beat.com/img-box/img20040920215205.lzh
0880デフォルトの名無しさんNGNG
・CPUを速いのに変える
・CPUを増やす
・flex/bisonでがんばる
0881デフォルトの名無しさんNGNG
>>877
詳しくよろ
0882デフォルトの名無しさんNGNG
よろも何もboost::spiritが糞重いのは常識だと思うんだが。
サンプルコンパイルしてみりゃ分かる。
実用的な物を作りたいならflexとbison使うべき。
0883デフォルトの名無しさんNGNG
spiritとflex/bisonの組み合わせを比較したって意味ですよね?
どれくらい差があったの?
若しくはどのサンプルが遅かったのか教えてください。
0884デフォルトの名無しさんNGNG
>>883
http://spirit.sourceforge.net/repository/applications/show_contents.php
とりあえずCでも動かしてみて下さいな。
grammer checkしかしてないのに何でこんなに遅いんだと思うよ。
0885デフォルトの名無しさんNGNG
生成される実行ファイルも異様にでかいよね。spiritは。
0886デフォルトの名無しさんNGNG
まあspiritはc++の中で無理矢理完結させてるんだから、
外部ツールとして中で最適化でも完全ハッシュ生成でも
何でもやりほうだいのbisonやらyaccと比べるのはどうかと思うよ。
0887デフォルトの名無しさんNGNG
flexはC++に一応対応したけどbisonはC++未対応で、
bison++が全然更新されてないからなあ…
0888デフォルトの名無しさんNGNG
とりあえずnamespaceで包んでやればいいんでないの?
0889883NGNG
とりあえずやってみました。
test_files/Moments.cで100回平均して22ms
(P3:800 VC7.1 Release)
flex/bisonだと1msで収まるって感じなのかなぁ。
0890デフォルトの名無しさんNGNG
そもそもあれはflex/bisonがやる事の一部しかやってない
0891デフォルトの名無しさんNGNG
あれは->あのサンプルは
0892デフォルトの名無しさんNGNG
あれは.operator->(あのサンプルは)
0893デフォルトの名無しさんNGNG
>>887
yayacc どうよ?
0894デフォルトの名無しさんNGNG
ややCC?
結構C++って事か?
0895デフォルトの名無しさんNGNG
どちらかというとCC
だろ
0896デフォルトの名無しさんNGNG
>>894
ちゃうちゃう。Yet Another Yacc という、C++ 使える yacc の改良版みたいなやつ。

ttp://www.gradsoft.com.ua/eng/Products/YaYacc/yayacc.html
0897デフォルトの名無しさんNGNG
>>896
何故にマジレス・・・
0898デフォルトの名無しさんNGNG
YayaCoshiya
0899デフォルトの名無しさんNGNG
cygwinのbisonをふつーにC++で使いまくってるんだが。
プレコンパイルヘッダが使えないのが微妙につらいが
それ以外でなんか困ることある?
0900デフォルトの名無しさんNGNG
>889
これ(c_grammar.cpp)subrule使ってないですからね〜.
subrule使ったときの改善度合いが知りたいですけれど・・・時間が無い.

ていうか真剣にtypeof欲しいっ!ヽ(`Д´)ノ ウワァァン!!
0901デフォルトの名無しさんNGNG
class Final
{
private:
Final();
//全てのコンストラクタをプライベートにする
};

と宣言すると、Finalを継承したクラスを作ることは
できなくなる、ということでいいんでしょうか?
0902900NGNG
書き忘れ。Final自体はfactory methodでコンストラクトできるという設定です。
0903デフォルトの名無しさんNGNG
902は900じゃなく901です。
0904デフォルトの名無しさんNGNG
なんでそうfinal使いたがるかな

仮想デストラクタを使わないだけじゃだめ?
0905デフォルトの名無しさんNGNG
違反しても文句言われない規則など意味ねーんだよ
0906デフォルトの名無しさんNGNG
それにしても継承禁止を明示する必要性ってのがわからん。
0907デフォルトの名無しさんNGNG
cppllに複雑な継承禁止パターンがあったと思う
0908デフォルトの名無しさんNGNG
>>906
 この型は継承してはいけません、って書いておいても平気で継承して、
(例えばデストラクタが動作しないとかの)トラブルを引き起こす奴とかが
いるからじゃないか?
0909デフォルトの名無しさんNGNG
C(notC++)ライブラリの関数を可能な限りinline指定つきで再実装したいんだが
許されることなんだろうか?それとも無駄?
0910デフォルトの名無しさんNGNG
>>907
つかboostにあるだろ
0911デフォルトの名無しさんNGNG
処理速度を上げたいんだったら、より上位のアルゴリズム最適化しる。
そんなことは既にやっていてプロセッサ固有命令を使いたいとかだったら
止めはしないけど、ただ単にコードをinline化するだけの小手先最適化だと
コードサイズが増えて思ったほど性能向上しないけどね。

C++がろくに普及してない頃の話だけど、アセンブラとか持ち出してこっちの
命令のほうが数サイクル短いとか、フレーム作成コストが減るとかなんとか
言ってるやついたけど、ループの中で毎回無駄にやってたメモリアロケーションを
外に出しただけで性能が飛躍的に向上した、ってのがあったな。

今でも分岐予測の失敗とかキャッシュミスとかなんとか言うやついるけど、
いまどきのOS上では複数プロセスをビシバシ切り替えながら処理をまわしてる
から、やっぱりいうほどの効果が出ないこと多いよ、ってこと、いいたいんだけどね。

まああれだ、
ほとんどの場合、小手先の最適化は捨てちゃっていいよ。
ほんとに遅い所がどこなのか計ってからチューニングをはじめような。
0912デフォルトの名無しさんNGNG
>>909
911 の人がいうようにあんまり意味無いと思います。
ちゃんとプロファイリングして、遅いところがメモリ沢山読むところなら
prefetch 入れるってくらいで十分では。
0913デフォルトの名無しさんNGNG
>>911
複数プロセスを切り替えているのは事実でも、
スライスタイム(20ms)間にどれだけの処理ができるんだろね。
0914デフォルトの名無しさんNGNG
411だけど、たしかにコンテキストスイッチの話は大げさだった。

安く見積もって1GHzでも、2000万サイクルくらいいけそうだな
Netburstだと20段パイプラインだから、分岐予測のヒット率をρとすると
処理できる命令の数は2000万/((1-ρ)*20+ρ)

P4のヒット率は大体95%だってうわさがあるから1000万命令くらい。

あとは、あれだ
メモリのキャッシュミスのコストを差し引かなきゃいけないんだが
面倒になってきたので誰か続きよろしく。
0915デフォルトの名無しさんNGNG
90%という説も..
これだと690万命令/secくらい。
0916デフォルトの名無しさんNGNG
411じゃねえ、911だ。すれ違いなんで最後
パイプラインの分岐予測に失敗した場合、17段目までが破棄されるっぽいから
失敗した場合の無駄サイクル数が1+2+3+...+17で153
2000万/((1-ρ)*153+ρ)でヒット率90〜95%だと、120万〜230万命令/スライスタイムくらい。

やっぱこれでも結構な命令数いくのな。
ごめん
0917デフォルトの名無しさんNGNG
分岐予測のヒット率命令数/タイムスライスヒット率0.9に対する命令数の数
0.900 1,234,567.90 1.00
0.905 1,295,336.79 1.05
0.910 1,362,397.82 1.10
0.915 1,436,781.61 1.16
0.920 1,519,756.84 1.23
0.925 1,612,903.23 1.31
0.930 1,718,213.06 1.39
0.935 1,838,235.29 1.49
0.940 1,976,284.58 1.60
0.945 2,136,752.14 1.73
0.950 2,325,581.40 1.88
0.955 2,551,020.41 2.07
0.960 2,824,858.76 2.29
0.965 3,164,556.96 2.56
0.970 3,597,122.30 2.91
0.975 4,166,666.67 3.38
0.980 4,950,495.05 4.01
0.985 6,097,560.98 4.94
0.990 7,936,507.94 6.43
0.995 11,363,636.36 9.20
1.000 20,000,000.00 16.20

チューニングしてないときの分岐予測ヒット率を90%とすると、
チューニングした場合95%くらいで1.9倍、
カリカリチューニングして97%くらいで2.9倍かな。
でも100%->16倍はありえないだろ。

カリカリしたその先のチューニングの重みは非常に大きい。
0918デフォルトの名無しさんNGNG
結局fainalになってるんですか?
0919デフォルトの名無しさんNGNG
×fainal
○final
0920デフォルトの名無しさんNGNG
じゃ、ここに完全版ウィルス置いときますから好きに使って下さいね^^
http://pukapuka.s1.x-beat.com/img-box/img20040922204002.lzh
0921デフォルトの名無しさんNGNG
質問です。

inline関数を定義・使用しているa.h、a.cppがあるとします。
inline void ResetData( void );
inline unsigned short GetOrg( void );
inline unsigned short GetPls( void );
こんな感じでa.hでプロトタイプ宣言してそれ以外は省略。
a.cppでの↑の関数の内容は値を返すだけの内容です。

このインライン関数をb.cppで使いたいのですがGetPls()と記述して
呼び出そうとしたのですができませんでした。
インラインをとったら使えましたがインラインをつければ使えません。

どなたか助けてください。
0922デフォルトの名無しさんNGNG
>>921
inline の定義は .h に書かなきゃダメ。
0923デフォルトの名無しさんNGNG
ヘッダファイルに実装を書いてください。
0924923NGNG
かぶり具合が秒単位でわかるからおもろいなぁ。9秒か・・・。
0925デフォルトの名無しさんNGNG
インラインの定義って
inline void ResetData( void );
inline unsigned short GetOrg( void );
inline unsigned short GetPls( void );
ですよね。
これは.hで記述しております。
その内容を.cppに書いてます。
0926デフォルトの名無しさんNGNG
inline unsigned short GetPls( void )
{
  // 内容
}

ヘッダにこう書けつーこと
0927デフォルトの名無しさんNGNG
誠にありがとうございました。
0928デフォルトの名無しさんNGNG
>>925
既に遅いけど一応書いておきますね。
そいつは定義ではなくて宣言です。定義と宣言の区別をしっかりつけておかないと
C++の高い本を買っても正しく読めません。
0929835NGNG
C++でJAVAのパッケージの機能をエミュレートするにはどうすればいいですか?
0930デフォルトの名無しさんNGNG
良く分かんないけどnamespaceじゃ駄目なの?
0931デフォルトの名無しさんNGNG
今、C++勉強してるんですが、2次元(多次元)配列の扱い方がよく分からいので質問させてください
例えば、
class Sample
{
  int x[2][3];
public:
  Sample();          // コンストラクタ (x[2][3]に初期値を代入する)
  ○○ GetSampleData(); // xへのポインタを返却する関数
};

○○ Sample::GetsampleData()
{
  return △△;        // xへのポインタを返したい
}

他のクラスでx[2][3]の値を使いたいのでGetSampleData関数を呼び出してxへのポインタを取得したいのですが、○○と△△の所をどう書いたらいいんでしょうか?
xがprivateなので無理ですか?
0932デフォルトの名無しさんNGNG
const int (*GetSampleData())[3];
0933デフォルトの名無しさんNGNG
>>931
#include <iostream>

class Sample
{
 int x[2][3];
public:
 Sample(int y = 0); // コンストラクタ (x[2][3]に初期値を代入する)
 int (*GetSampleData())[3];// xへのポインタを返却する関数
};

Sample::Sample(int y) {
 for (int i = 0; i < 2; i++)
  for (int j = 0; j < 3; j++)
   x[i][j] = y;
}

int (*Sample::GetSampleData())[3]
{
 return x; // xへのポインタを返したい
}

int main()
{
 Sample s(1);

 std::cout << s.GetSampleData()[0][0] << std::endl;
}
0934デフォルトの名無しさんNGNG
>>932
>>933
ありがとうございます。
結構難しいですね・・
何とか頑張って理解して見ます
0935デフォルトの名無しさんNGNG
C++のクラスの学習初めには、意図的にthisを書いて勉強してみるのも
いいかもしれない。

クラスでまず最初に引っかかるのはthisポインタだから。
0936デフォルトの名無しさんNGNG
>>935
初心者じゃなくても使うでしょ、this。
VC環境なら、this->を使うとインテリセンスが機能してくれるし。
同じ名前の関数がグローバルとクラスにある場合の混乱防止になるし、読みやすさが増す。
0937デフォルトの名無しさんNGNG
ここを見れ!

http://www.pahoo.org/e-soul/webtech/encode/encode01-01.shtm
0938デフォルトの名無しさんNGNG
>934
いっそのこと構造体のメンバにしてしまうとか
typedef struct
{
  int x[2][3];
} SHoge;

class CSample
{
  SHoge m_hoge;
  SHoge* GetSampleData();
};

SHoge* CSample::GetSampleData()
{
 return &m_hoge;
}
0939デフォルトの名無しさんNGNG
>>936
そーゆー理由で this を書く人のことを「初心者」と呼ぶのでは?
0940デフォルトの名無しさんNGNG
>>939
初心者じゃない>>939は絶対にthisをこの用途では使わないんだね。
初心者じゃない>>939は一生使っちゃ駄目だよ。何があっても。
0941デフォルトの名無しさんNGNG
クラス内のメンバ関数からメンバポインタを通して他のメンバ関数(非static)を呼び出すには
                ~~~~~~~~~~~~~~~~~~~~~~~
thisは省略できないっしょ。
0942デフォルトの名無しさんNGNG
>>940
小学生ですか?w
0943931NGNG
>>938
それ分かりやすいです
とりあえず今回は構造体にしてプログラム作って見ます。
0944デフォルトの名無しさんNGNG
それか int (*)[2][3] を typedef するかだね。
Cの知識があればできるはず。後は暗黙のthisポインタとクラス名の修飾(Sample::)
を忘れなければいい。
0945デフォルトの名無しさんNGNG
>>939
初心者専用だとは思わないのだが、釣りか?
保守性・明示性を犠牲にして他人の解析作業を妨害するのが上級者
という定義をもっているのであれば、正しいのかもしれないけど。
0946デフォルトの名無しさんNGNG
>同じ名前の関数がグローバルとクラスにある場合の混乱防止になるし、

これで混乱するほどの無知を棚に上げて読みやすさとかほざく居直り粘着されたチームに未来はない
0947デフォルトの名無しさんNGNG
たまに居るよな、2chで高尚な玄人ぶった無意味なこと主張する人(w

PMや同僚から煙たがられて干されたか、チームに居づらくんだろうな・・・。
>>946は、そういうタイプの典型かもしれない。

初心者の人が途中で開発に加わるかもしれないことを想定できないチームに未来はないでしょ。
プログラミングが技巧よりむしろ力仕事であり対人関係の大事な仕事だと理解できずに、美学に酔いしれる人は負け組。
改めた方が良いと思われるが、本人がいい年してるので実社会では誰も指摘しない・できない。
0948デフォルトの名無しさんNGNG
C++を始めようと思ったのですが、参考書紹介サイトの解説によると
何の知識もない状態の人向けのC++入門書は、大体わかりやすいが
所々適切でない記述があるもの
(コンパイルでエラーが出ますが問題ありませんと書いてあったり等)
や誤字・誤植がいつまでたっても訂正されないものなど
ちょっと問題がある本ばかりのようなのですが
問題なさそうな本でCから始め、Cの知識がある人用のC++本で
C++にいくのはかなり遠回りになるでしょうか?
遠回りになっても、それなりに利点があるならそうしようかと思うのですが
アドバイスをお願いします。
0949Rubyは最高言語!!!!!!!NGNG
Cやってからの方がいいと思うけどな。
つか何の知識もないのなら、オライリーの「実践Cプログラミング」でも一冊買って読んでみたら。
0950デフォルトの名無しさんNGNG
いまからC++を覚える必要はないんじゃない?
正直言ってC++は古いよ
C#にでもしとけ
0951デフォルトの名無しさんNGNG
>>947
ホープと癌の境は居直り
誰に見やすく書くのかさえ聞く耳を持たない反逆分子はもはや仲間じゃない
そんなのが稼げてない間食わせてやるなんざ論外中の論外
0952デフォルトの名無しさんNGNG
C++ Primerでいいんじゃない?
0953デフォルトの名無しさんNGNG
>>951
そうですね。同感です。気心の知れた仲間とだけ仕事してて下さい。
0954デフォルトの名無しさんNGNG
>>948
日本語能力を鍛えなおすのが近道だと思う。
0955デフォルトの名無しさんNGNG
ルールを統一するのは重要だが、初心者にあわせて作るのは何か違うだろ。
0956デフォルトの名無しさんNGNG
みなさんありがとうございます。
>>949
本屋で見てきます。
>>950
C#ですか!余計に難しそうですね…
>>952
それも本屋で見てきます。
>>954
アルェー
0957デフォルトの名無しさんNGNG
>アルェー
キモイからこっちに行ってくれ

推薦図書/必読書のためのスレッド PART 19
http://pc5.2ch.net/test/read.cgi/tech/1089492835/
0958デフォルトの名無しさんNGNG
this->を使ってはいけないというルールも
this->を使わなければいけないというルールも変。

針のメドを通すような俺様ルールを他人に押し付けるのは頂けない。
0959デフォルトの名無しさんNGNG
だから、いやなら出てけって
誰も止めないよ
0960デフォルトの名無しさんNGNG
this ってどうしてポインタなんだろう。
どうせ T* const で代入できないんだから、参照にすればよかったのに。
this->hoge より this.hoge のほうが見やすいし、
operator = とかで return this; と書けるし。
大したことじゃないと言われればそうなんだが。
0961デフォルトの名無しさんNGNG
大したことじゃない
0962デフォルトの名無しさんNGNG
>>960
そう言われればそうだ
0963デフォルトの名無しさんNGNG
>>960
確かthisが作られた頃の初期のC++にはまだ参照がなかったと思う。
0964デフォルトの名無しさんNGNG
#define this. this->
0965デフォルトの名無しさんNGNG
継承のデフォルトってどうして private なんだろう
よく使うふつうの継承が public 継承で
変わった継承をしているところこそ明示的に書くべきなのに・・・

メソッドのデフォルトってどうして非 const なんだろう
許可は意図的に狙い打ちで与えるのが OOP の作法なのに・・・
0966デフォルトの名無しさんNGNG
>よく使うふつうの継承が public 継承で
こんな事書いてるから継承厨って言われんだよ
0967デフォルトの名無しさんNGNG
>>966
じゃ勝手に private 継承しまくってろ
あ? protected 継承だったか??
どっちでもいいんだよ
ネズミがチューチュー喚いても関係ねえんだよ
失せろ汚物
0968デフォルトの名無しさんNGNG
>>958
メドって何?
0969デフォルトの名無しさんNGNG
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E9%87%9D%E3%81%AE%E3%83%A1%E3%83%89&num=50

ただし958の文脈では「針の穴」というべきであろう
0970デフォルトの名無しさんNGNG
ケツメド=けつのあな=肛門 なんだぞ。
知ってかおまえら?
0971デフォルトの名無しさんNGNG
針孔と書いてメドと読む。針の穴という意味。
針の針孔と書いてハリノメドと読む。針の針の穴という意味。
頭痛と書いてズツウと読む。頭の痛みという意味。
頭の頭痛と書いてアタマノズツウと読む。頭の頭の痛みという意味。
0972デフォルトの名無しさんNGNG
Factory Method と Abstract Factory の違いがよく分からないのですが…
0973デフォルトの名無しさんNGNG
Abstract FactoryはFactory Methodを集めたやつだ。
0974デフォルトの名無しさんNGNG
>>973
やっぱそれだけですか?
GoF本読んでて「Factory Method が増えただけ??」って思ったんで…
0975デフォルトの名無しさんNGNG
デザパタは Decorator が一番感動したなあ
0976デフォルトの名無しさんNGNG
感動と言うか
Multicastが一番好きだ。
0977デフォルトの名無しさんNGNG
デザパタなんていうやつで本当に理解できている奴はいない
0978デフォルトの名無しさんNGNG
>>977
また脊髄反射レスかよ・・・・みっともないぜ
0979デフォルトの名無しさんNGNG
いつもの流れだな
0980デフォルトの名無しさんNGNG
>>978
脊髄反射でレスできるヒトはいません (プ
0981デフォルトの名無しさんNGNG
>>981
ネタにマジレスカコワルイ
0982デフォルトの名無しさんNGNG
>>980
だった。orz
0983デフォルトの名無しさんNGNG
>>983
( ´,_ゝ`)プッ
0984デフォルトの名無しさんNGNG
>>985
だからお前は馬鹿なんだよ
0985デフォルトの名無しさんNGNG
?(゚Д゚≡゚Д゚)? エ、オレ?
0986デフォルトの名無しさんNGNG
>>986
ここは馬鹿の集まりのインターネッツですね。
0987デフォルトの名無しさんNGNG
保護部ってどういう意味なんでしょうか?
0988デフォルトの名無しさんNGNG
>>987
下半身。☜
0989デフォルトの名無しさんNGNG
STL周りは明らかにオブジェクト指向というより
関数型プログラミングの臭いがする。
そのへんのカオスつーかハイブリッド具合がC++っぽいんだろうけど。
0990デフォルトの名無しさんNGNG
カオス?
意味わかってんのかな?
多分覚えたの単語を使ってみただけだろうけど・・・
0991デフォルトの名無しさんNGNG
「勝利の方程式」みたいなもんでしょ。
0992デフォルトの名無しさんNGNG
>>990
お前にとっては、たかがカオスがずいぶん難解な単語なんだな。

ま、大方勝手に「物理学用語としてのカオス」あたりに限定しちゃってるって
とこだろうけど。
0993デフォルトの名無しさんNGNG
それ以前の問題として>>989の発言は今更スギ
0994デフォルトの名無しさんNGNG
>>989
それは意図的なものだよ。
iostream系が惨い状況になってるのがわかるだろ?
あの反省にたってると思う。
オブジェクト指向にする・しないはユーザの自由裁量。
0995デフォルトの名無しさんNGNG
>>992
カオスが物理学に出てくるのは物理現象としてではないぞ
もうちょっと勉強しろよ
0996デフォルトの名無しさんNGNG
次スレがない
0997自作ウィルス自ら実行NGNG
                  __ __ __ __ __                 __ __
                 ∠__∠__∠__∠_.∠_../ |        __∠__∠__∠l__
               ∠__∠__∠__∠__∠__/|  |        ∠__∠__∠__∠__/.|_
.                ∠__∠__∠__∠_.∠_./|  |/|       ∠__∠__∠__/   /|  |/|
.                /   /  ./   /   /  /! |/|  |     |  /  /  /| ̄ ̄|  |/|  |
              | ̄ ̄| ̄ ̄| ̄ ̄| ̄ ̄| ̄ ̄|  |/  |/|     |_| ̄ ̄| ̄ ̄|  |__|/|  |/|
        __ _|    |__|__|__|__|/| ̄ ̄|  |    ∠__|__|__l/   /|  |/|  |
.         /   / | ̄ ̄|  |_|/|    |    |  |__|/|   |    |    |    | ̄ ̄|  |/|  |/
      | ̄ ̄| ̄ .|    |/|  |  |    |__|/|    |  |   |__|__|__|__|/|  |/|
.     ___|__|__.| ̄ ̄|  |_|/      |    |  |__|/     |    |    |    |    |  |/|  |
.   /   /   /  |    |/|.         |__|/|          .|__|__|__|__|/|  |/
  | ̄ ̄| ̄ ̄| ̄ ̄| ̄ ̄|  |.         |    |  |            .|_|    |    |  |__|/
  |__|__|__|__|/        |__|/               |__|__|/
0998デフォルトの名無しさんNGNG
>>995
お前一人でなにピント外れなレス書いてるんだ?w
0999デフォルトの名無しさんNGNG
1000鳥に行きます。
1000デフォルトの名無しさんNGNG
1000ゲト
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。