C++相談室 part22
■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)v
NGNGただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。
過去スレ、関連スレ、関連リンクなどはこちら>>2-7
0153デフォルトの名無しさん
NGNG私はVC++でコンパイルするソースもgccでコンパイルするソースも
同じエディタを使ってますが。
0154デフォルトの名無しさん
NGNGつくれるぷろ�cの種類が違います
0155デフォルトの名無しさん
NGNG簡単なソースも書いた。拡張子も.cppにした。
cd使って.cppが置いてあるフォルダまで行く事も出来た。
で、コンパイルするには後なにをすれば良いんだ?
HSPはボタン一発で全部やってくれたんだが
CとかC++ってなんか小難しいのな。
0156デフォルトの名無しさん
NGNGmakefile で ググれ。
俺はVCしか使ったこと無いんで、これ以上説明できん。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG名前をしくじるのか?
0159デフォルトの名無しさん
NGNG> bbc failname
なんか失敗しそうだなw
0160デフォルトの名無しさん
NGNGhttp://www.hi-ho.ne.jp/jun_miura/bccdev.htm
あたり使え
0161デフォルトの名無しさん
NGNG徹夜明けだけど激しくwラタ
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG最初bbcとbcc試してダメだったんだが32を付けないといかんのだな。
objファイルとかtdsファイルとかわけわからん物まで出てきたがな!
お前等thx
exeファイルクリックしても一瞬で画面が消えてしまうのは、
ソースにHSPで言うwaitとかstopを入れてないからだろうか。
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGno
0170デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGthx
*
**
***
****
*****
と表示する事に成功したよ。
0173デフォルトの名無しさん
NGNG激しく邪魔なんだけど。
0174デフォルトの名無しさん
NGNGいいよ。
0175デフォルトの名無しさん
NGNG全部開発が終了したら消す。
0176デフォルトの名無しさん
NGNGかまわんが。ソースコードの管理だけはちゃんとしとけよ。
0177デフォルトの名無しさん
NGNGhttp://www.kurumi.sakura.ne.jp/~kumicyou/cplusplus/1305.html
0178デフォルトの名無しさん
NGNG>実は、explicitを使用しない場合、コンストラクタは何回でも呼べる。
> A a = 1; //a = A( 1 );
> a = 2; //a = A( 2 );
このあたりから、間違いなわけだが。
0179デフォルトの名無しさん
NGNGうへえ、コンストラクタでメモリ確保すると異常終了するだって?
むちゃくちゃですな。
'Resource Acquisition is Initialization'の前提が崩れる(笑)
それより代入演算子定義してないからメモリリーク起こしてそうだけどな。
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGこれは×
> a = 2; //a = A( 2 );
これは○
>(異なるインスタンスを作れば)コンストラクタは何回でも呼べる。
○
0182デフォルトの名無しさん
NGNGA a = 1; // A::A(1)で初期化, a.p確保
a = 2; //a = A( 2 ); これは分解すると:
// 1. 一時オブジェクト tempがA::A(2)で初期化, temp.p確保
// 2. a.operator=(temp)を実行, デフォルトなのでまるまるコピーされ
// a.pが刺していたメモリはリーク、a.pはtemp.pが指す内容になる
// 3. 一時オブジェクトtempが解体, temp.pはfree
// a.pが指している領域は開放済みになってしまう
a = 3;
a = 4;
a = 5;
この時点で、a.pには A(5)の一時オブジェクトのために確保されて
既に開放されたアドレスが入っている。
結果、returnの時点で、aの初期化のときに確保されたpのメモリがリークし、
A(5)の一時オブジェクトで確保されたpが二重解放されてるわけだな。
0183デフォルトの名無しさん
NGNGVCなら
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcmex/html/vcconmanagedtypesmfc.asp
みたいな手は使えない?
試してみたけど、MFCアプリの中でMC++できた。
0184デフォルトの名無しさん
NGNGどっち先に覚えればいいですか?
0185デフォルトの名無しさん
NGNGフツーのC++って何よ
0186デフォルトの名無しさん
NGNG少なくとも小文字と大文字の違い以上のものはあると思うぞ。
0187デフォルトの名無しさん
NGNGどちらか片方でも全て覚えることは無理。
覚えるのではなく、使えるようになればよい。
0188デフォルトの名無しさん
NGNG俺borlandのつかってるけどVCとどう違うのか良くワカラソ
しかもC++はじめたばかりの初心者ときたもんだ
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGC++ = 言語名
「VC++, BCB は、C++で開発するための環境を提供するアプリ」ってことやん。
まぁ、環境固有の言語拡張とかもあるけどさ…
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNGちなみに30分前にC言語ライフをスタートしたペーペー。
知識としてはHSPでシューティングからRPGまで一通り作った程度。
Cの知識はウンコみたいなもんです。
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNGぬるぽ と入れたら ガッ と出して欲しいね。
0196デフォルトの名無しさん
NGNG両方関数だけどtest()の中にcoutとか書かれててもそこでは実行されなくて、
main()以下でtest()が呼び出された場合に初めてtest()の中に書かれてるcoutが実行される。
プログラムはmain()以下で始まってそれ以前にある物はただの宣言(設定)みたいな物。
こういう認識で合ってますか?
0197デフォルトの名無しさん
NGNGiostreamを実装せよの部分が良くわからんけど、
何か値を入力出来る様にチャット窓みたいなの作って、
そこに何を入れられても「ぬるぽ」って出力すれば良いって事?
つまり入力する所でエンター押された時に入力された値を無視して、
関数nurupo()に飛ばしてcout << "ぬるぽ" << endl;を実行させる様にすれば良いだけか。
まぁそのチャット窓の作り方から調べないといけないわけだけれども。
0198デフォルトの名無しさん
NGNGbasic_iostreamを派生したクラスを実装しろってことでは
0199デフォルトの名無しさん
NGNGやっぱり俺の理解を超えた難しい意味だったのか。
まぁとりあえず197に書いた「何入力してもぬるぽと表示するプログラム」は出来たよ。
勝手に理解して勘違いしたが勝手に宿題もしたからこれでおk!
0200デフォルトの名無しさん
NGNGガッ
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGint と float の計算で
100 * 2.33000 が 232 になってしまいます。
コンパイラもwarning(floatからintへの変換でデータが失われている
かもしれない)といっているのですが、
こんなときどうコーディングすればいいのでしょうか?
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGintの100をfloatに型キャストすればいいんじゃないの?
(float)100*2.33000
俺は試してないからね。自分で試してみてね。
0205デフォルトの名無しさん
NGNG0206202
NGNGサンクスコです。
でもboost入ってないんです。TT
>>204
それもやってみたのですがダメです。
10000をかけると23299になりますた。
ウォッチだと2.33000ってなってるのに
なんなんでしょう。TT
どうもです。。。
0208デフォルトの名無しさん
NGNG0209202
NGNG>>208
四捨五入、あるいは切り上げはできたらしたいのですが
nWidth * fZoom のどこでしたらいいのでしょう。
初心者質問でしみません。。。
0210デフォルトの名無しさん
NGNGfloatをdoubleにキャストしても駄目みたい。
内部表現の問題だろうな。
0211202
NGNGですよね。doubleにキャストしてもダメでした。
デバッグウィンドウにも2.33000って出てるのに
タチ悪いです。VC++6.0なんですがこんななんですね。。。
0212デフォルトの名無しさん
NGNG#include <cmath>
四捨五入:
static_cast< int >( std::floor( nWidth * fZoom + 0.5f ) );
切り上げ:
static_cast< int >( std::ceil( nWidth * fZoom ) );
四捨五入のfloorはいらんかも。
0213212
NGNG0214デフォルトの名無しさん
NGNG俺が確認したのはBCCだったよ。結果は同じだった。
0215202
NGNG212さんの切り上げでみごと解決しますた。(端数の
原因はわからないので保留しますた。stdははずしたら
通りますた。)
遅くにほんとにどうもありがとう!!...(TT)...
0216デフォルトの名無しさん
NGNG根本的に無理かもしれない。もとデータがすでに2.33ではないのだから。
この場合は四捨五入で逃げられるかもしれないが、
今度は.5境界近辺で同じ問題に遭遇するので根本的解決にはならないかも。
0217デフォルトの名無しさん
NGNG0218202
NGNGだからBCCでもVCでも同じ現象なんでしょうか。
>今度は.5境界近辺で同じ問題に遭遇するので根本的解決にはならないかも。
印刷のズレ程度なのでとりあえず保留しておくことにします。
端数ってムズいですね。。。
0219デフォルトの名無しさん
NGNG最終結果を1/100なり(必要なら50足してから)するのが、一番まともな気がするけど。
利息や消費税計算とかはそうじゃないのかな?知らないけど。
0220202
NGNG>浮動小数点数の計算は数学のようにはゆかない。
つねにそれを頭に入れておかないといけないんですね。
お金がらみじゃなくてよかたー。
>>219
>こういうのって(最終的にintが必要なら)100倍とか10000倍とかで倍率を整数値で保持しておいて
なるほど...
ちらっと思ったのですが印刷部分でスピードが必要と思い、そのまま
ピクセルで持っちゃったのが悪かったかも。。。
(別のtwipとかの座標系を使うとか...)
0221デフォルトの名無しさん
NGNG昔、COBOL使ってたけど固定小数点だったな。
科学技術計算をさせるときは難儀だったけど。
0222デフォルトの名無しさん
NGNGCOBOLは給与計算とか販売管理、生産管理とかで
実績は十分証明されているもんね。
昔VBでお金からみのシステムの置き換えをやったけど
稼動後以前のシステムと1円合わないとか言われた。
例えばa * b * cでa*bですぐ端数処理するか、全部終わって
やるかの誤差らしかった。んなもん知るかとw
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG仕様出す方は、切り捨てと四捨五入とJIS丸めの違いを知らないから。
>>202
速度を重視するなら尚更floatなんて使うな。
恐らくはdoubleで充分だし、必要なら整数で実装するべき。
0226デフォルトの名無しさん
NGNG>>225
印刷関係ってことは多分実行環境は PC だし、
多分 double の方が早いだろ。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGってことはISO 31/0かな。
IEEEの番号はしらね。
0229デフォルトの名無しさん
NGNGfloatは32ビット、doubleは64ビットで
なんでdoubleのほうが早いの?
0230デフォルトの名無しさん
NGNG80x86 では内部では 80 ビットで計算してるから
どっちでもデータ変換が生じることに変わりはないので、
基本的にはどっちでも速度は一緒。
でも、標準関数では double 型が使われているので、
その関数との受け渡しにおいては
float だとデータ変換が生じて遅くなってしまう。
0231デフォルトの名無しさん
NGNGハードウェアが最初から double を想定して作られてるから。
0233デフォルトの名無しさん
NGNG同じような理由で、charの方がshortやlongより早く処理できると思ったら大間違い。
0234デフォルトの名無しさん
NGNG>>226
boost入れたいのですがHDDがあと200Mぐらいしか...
>>225-231
doubleのほうが早いんですね。知らなかた...
ところで昨日212さんに教えてもらった標準ライブラリ関数
std::ceilですが、なぜVCだとstdがついてるとコンパイル
できないのでしょうか?
VCは初心者なのですがVCにはそんなクセみたいなのが
いっぱいあるのでつか?
0235デフォルトの名無しさん
NGNGif (1990>a&&a>1925)
この二つは同じ意味だと思いますが、処理の早さに差が出たりしますか?
a+=1よりa++と書いた方が速いというのは聞いた事あるのですが、
そういう細かいところで速度をアップするテクニックって他にどんなものがありますか?
0236デフォルトの名無しさん
NGNGCPUやコンパイラに左右されるということを忘れずに。
ちなみに単精度用の関数( sinf とか sqrtf とか )が
用意されているコンパイラもある。
0237デフォルトの名無しさん
NGNG速度に差は出ない。
>a+=1よりa++と書いた方が速いというのは聞いた事あるのですが、
どこの馬鹿にそんなこと吹き込まれたか知らないけど、それは大嘘。
まぁ、演算子のオーバーロードの実装の仕方によれば変わるかもしれないけど。
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGその例なら、
if( (unsigned)( a - 1926 ) <= 1989 - 1926 )
の方がたぶんはやい。
0240デフォルトの名無しさん
NGNGやー、悪いことは言わない。今は可読性を重視した方がいいと思うよ。
マシン性能があがり、お馬鹿なコンパイラも減ってる昨今だし。
ボトルネック解消なら、別で稼ぐべきかと。
>>237
大嘘ってことは無いと思うけど
0241デフォルトの名無しさん
NGNG今時のコンパイラ(つーかC++コンパイラ)なら同じようなコードを出力するはず。
但し、古い貧弱な環境用のCコンパイラが前者は定数値との足し算、
後者をインクリメントで実装しているのも事実。
>1926云々
単純に年だけで元号を判定することは危険。
なぜならば、1989年はたったの数日しか昭和ではなかったから。
0242デフォルトの名無しさん
NGNGむしろ INC x より ADD x, 1 の方が速いって聞くけどね。
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNGでもhoge++は++hogeと書こうな。operator++のことも考えて統一した方がいい。
とか書くと「hage[hoge++]とhage{++hoge]は違うだろ」とか言い出すだろうけど
そういう時は
++hoge
hage[hoge]
か
hage[hoge]
++hoge
と書くもんだ。
0246デフォルトの名無しさん
NGNGVC6 はそうなるね。
古いから標準仕様に追いついてないだけ。
VC .NET なら大丈夫だった気が。
古いのは使うなってこった。
0247デフォルトの名無しさん
NGNGconst int unko;
public:
benkio(void) : unko(100) {}
};
うんこは定数?それともconstオブジェクト?
0248デフォルトの名無しさん
NGNG排泄物
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNGclass benki {
static const int unko=0xBAD;
};
定数になりますた
0252デフォルトの名無しさん
NGNGclass benki {
static const int unko=0xF00D;
};
定食になりますた
■ このスレッドは過去ログ倉庫に格納されています