C++相談室 part10
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGあなたにぴったりの言語、C++。
(´∀`).。o(関連URLは>>2-5の辺り)
0002森の妖精
NGNG0003デフォルトの名無しさん
NGNGhttp://www.kuzbass.ru/docs/isocpp/
Boost
http://www.boost.org/
STLport
http://www.stlport.org/
Loki
http://www.moderncppdesign.com/
0004デフォルトの名無しさん
NGNGPart1
http://piza.2ch.net/tech/kako/980/980175292.html
Part2
http://pc.2ch.net/tech/kako/996/996640937.html
Part3
http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4
http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5
http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6
http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7
http://pc.2ch.net/test/read.cgi/tech/1021787032/
Part8
http://pc3.2ch.net/test/read.cgi/tech/1025010364/
Part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/
0005デフォルトの名無しさん
NGNGhttp://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
■関連スレ■
VisualC++相談室 3
http://piza2.2ch.net/tech/kako/993/993186053.html
VisualC++相談室 4
http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
VisualC++相談室 5
http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
VisualC++相談室 6
http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
VisualC++相談室 【7】
http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
VisualC相談室 【8】
http://pc.2ch.net/test/read.cgi/tech/1022499000/
C++Builder相談室
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=969458279
新C++Builder相談室(C++Builder相談室 Part2)
http://pc.2ch.net/test/read.cgi/tech/997074601/
C Builder相談室 Part3
http://pc3.2ch.net/test/read.cgi/tech/1016065855/
0006デフォルトの名無しさん
NGNGお疲れ様です
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGhttp://www.geocities.com/rani_sharoni/LokiPort.html
0009デフォルトの名無しさん
NGNGクラスBとクラスCで、using宣言を行っていますが、これは一見protected属性
の関数print()をpublicなアクセス属性に変換しているように見えるのですが、
そのように考えてよいのでしょうか。
#include <iostream>
using namespace std;
class A {
int i;
protected:
void print() const { cout << i << endl; }
public:
A() { i = 111; }
};
class B : protected A {
public:
using A::print; // void print() const { A::print(); }
};
class C : protected B {
public:
using B::print; // void print() const { A::print(); }
};
int main()
{
B b;
C c;
b.print();
c.print();
}
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG変換という言葉は適当ではないかな。
関数などのデフォルト引数のように、継承先で何もされて無いんだったら、
継承元のアクセス制御が適用されるだけという話だと思う。
説明が下手でスマソ。
0012デフォルトの名無しさん
NGNGレスありがとうございます。
privateやprotected継承を行っても、using宣言によりメンバをpublic
なスコープに引き出すことにより、継承の本来の意味を変えられる
だけでなく、元々のアクセス属性まで変化させられるので、注意して
使う必要がありそうですね。
0013デフォルトの名無しさん
NGNGもともと基底でpublicやprotectedなのだから
特に注意はいらないと思うのだが…
0014デフォルトの名無しさん
NGNGそういう風に考える手もありますね。要するにより細かくアクセス制御
したい時に使うと。
0015デフォルトの名無しさん
NGNGこの文字列クラスを使ってる人がいましたら、使い勝手などを
教えてくださいー。
0016デフォルトの名無しさん
NGNG使ったらええやんけ。
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGってエラーがでる。
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGちなみにこんなの
class AAA{};
AAA operator=(AAA a){return a;}
/**************************************************************/
void main(void)
{
}
0023デフォルトの名無しさん
NGNG> 通常のクラスのメンバーではない関数にもなりますが,
> 以下の演算子は必ずクラスのメンバーでなければなりません。
>
> = 演算子
> -> 演算子
> ( ) 演算子
> 型変換
だと。
0024デフォルトの名無しさん
NGNGさんくすデス。出直してきます
0025デフォルトの名無しさん
NGNG定義と宣言を分けたいって話なら、そりゃ可能だが。
0026モナ吉
NGNG0027デフォルトの名無しさん
NGNGどうでもいいが、例が面白すぎる。
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG静的オブジェクトと動的オブジェクトを混同できるの?
0030デフォルトの名無しさん
NGNGCHoga hoga=new CHoga("hogehoge");
の違いの事なのですが。
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNGCHoga hoga=new CHoga("hogehoge");
じゃなくて
CHoga* hoga=new CHoga("hogehoge");
じゃないの。
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGそうそう、最近全然C++のコードを書かないでJavaの本ばっか
読みまくってたら、オブジェクト生成の書き方がわからなくなってて
焦ったよ^^;
0035デフォルトの名無しさん
NGNG前者を「静的オブジェクト」とは呼ばんと思うが。
多態前提の OO 設計で出てきたオブジェクトは必然的に後者。値指向の
オブジェクト(複素数やら何やら)だけ例外的に前者。
0036デフォルトの名無しさん
NGNGnewしますがC++の場合は静的、動的両方生成される。この場合動的オブジェクトは
どんな場合に利用されるのでしょうか?例えばオブジェクトをリストに連結して
実行時に変化があるような場合にのみ利用されるのですか?それとも全てのクラス
のインスタンスはnewするのですか?
動的なオブジェクトと静的なオブジェクトのクラスの設計の違いはどのような
特徴なのでしょうか?特に区別はしないのでしょうか?
0037デフォルトの名無しさん
NGNGだからその意味不明な動的/静的って言葉使うのやめれ。
「Class class;」という形で確保されるオブジェクトには2通りありうる。
1.グローバル、スタティック変数、クラスの静的メンバ。
この場合、オブジェクトの実体は静的なメモリ領域に確保される。
これは普通やらない。理由はコンストラクタ/デストラクタのタイミング。
2.関数内でスタック上に確保される場合。
この場合、「Class class;」とかかれた場所に処理が到達した時点でコンストラクタが実行され、
そこを含むスコープを処理が抜ける瞬間にデストラクタが実行される。
スマートポインタの類は必然的にこの形式で使用される(newで確保すると意味がない)し、
同期オブジェクトなんかのラッパクラスもこういった形で使うものがある。
こういったクラスはスコープを抜ける瞬間に確実に破棄されるという性質を利用してるわけだ。
余りでかいオブジェクトをスタック上に確保しようとするとスタックが足りなくなるのと、
スコープの終わりで破棄される以上一時的なオブジェクトしか作れない点に留意すれば
あとは好きにやればいいと思うが。
0038デフォルトの名無しさん
NGNG確かに参照を使えば自動変数でも多態できないこともないが…
0039デフォルトの名無しさん
NGNGVS.netのC++でDLLとMFCでのGUI開発を行っています。
1.2MBほどの2つ項目があるタブ区切りテキスト
yoshida<TAB>吉田<TAB> 12
yoshimura<TAB>吉村<TAB> 20
.
.
をクラス
class WordFromDic{
string Roma;
vector<string> Kana;
vector<int> Freq;
};
に読み込む処理を行っています
読み込む関数は以下のとおりです
MYDLL_API void ReadWordDictionary(char *dic){
::ifstream WordDic(dic);
char buf[256];
while(WordDic.getline(buf,sizeof(buf))){
char *p1 = strtok(buf,"\t");
char *p2 = strtok(NULL,"\t");
char *p3 = strtok(NULL,"\t");
if (!HashDic[p1]){
WordFromDic *temp = new WordFromDic(p1,p2,p3);
HashDic[p1] = temp;
}
else {
HashDic[p1]->AddWord(p1,p2,p3);
}
}
}
ところがこれが偉く時間がかかってしまうのです。だいたい軌道までに30秒くらいを要する感じです
clock()でこの処理の時間をはかってみたところ95600という数値が出ました。
これをもっと早くする方法はないでしょうか?
MFCでSTLを使うのはあまりよくないのかなーとも思ったのですが。
さらにメモリの開放時にもやたら時間がかかってしまいます(10秒くらい)
MYDLL_API void DeleteWordDictionary(){
for(map<string, class WordFromDic*,less<string> >::iterator i=HashDic.begin();
i!=HashDic.end();i++)
{
delete i->second;
}
}
この問題についてどなたかアドバイスをいただければと思います
0040デフォルトの名無しさん
NGNGiostreamは使ってあるが、どこにSTL使ってあるよ?
004139
NGNGええとstringクラスとvectorクラスを使ってます
string Roma;
vector<string> Kana;
vector<int> Freq;
0043デフォルトの名無しさん
NGNGまずはプロファイルを採って、どこで時間を食ってるのか調べてみれば?
0044デフォルトの名無しさん
NGNGintの配列型の返り値を持たせるには、
関数はどのような型にすればいいでしょうか。
0045デフォルトの名無しさん
NGNGvoid func(std::vector<int>&);
返値を使わずに、引数に参照を渡して、そこに書き込む。
0046コギャルとHな出会い
NGNG朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNG004947
NGNG0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGできるけど、コピー処理が重いから避けたいところだ。
0053デフォルトの名無しさん
NGNGこんな関数を追加します。
xxx& operator << ( xxx )
{
// 引数に何かの処理を加える
// ここで基本クラスの他のストリーム演算子を呼び出すにはどうすればいいでしょうか?
}
this << xxxx
こんな風にすればいいと思ったんですが無理でした。
0054デフォルトの名無しさん
NGNGはどうか
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG多分スレ違い
0057デフォルトの名無しさん
NGNGありがとうございます。コンパイル通りました。
0058デフォルトの名無しさん
NGNGvectorのコピーコンストラクタが例外を投げたら、処理自体が
成功してるのに返り値が失われるから、auto_ptrかboost::shared_ptr
に入れてから返すのが正解。
0059デフォルトの名無しさん
NGNG↑
すみません、この書き込みの意味が分からないんですが、
修行不足でしょうか?
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGの両方定義することができて、return のときはコピー先
オブジェクトの vector::vector() throw() が自動的に
呼び出されて欲しいっていうことなのかな。
006239
NGNGすみませんプロファイルとはどういう概念のものなのでしょうか?
ひととおり調べたらVC6.0でプロファイルを取得する方法が出ておりましたが
.NETの場合は良くわかりませんでした。
0063デフォルトの名無しさん
NGNG> すみませんプロファイルとはどういう概念のものなのでしょうか?
実際にプログラムを走らせて、関数や行単位で、実行時間・メモリ消費量などを
計測する。
問題の箇所を特定して、それから原因を潰そうってアプローチを採る場合に
有効な道具。
0064デフォルトの名無しさん
NGNG006559を書いた本人
NGNGいや、単に例外を投げないだけじゃなく、あたかもコピー元のデストラクタ
が呼ばれたかのように振舞う、ということ。auto_ptrと同じ発想。
実体をコピーするのはオブジェクト本体だけで、オブジェクトが参照して
いるポインタの向こうは、丸ごとコピーしないで、ポインタだけコピーする。
そうすれば、自然にthrow()にできるし、逆にコピー元は無効になってしまう
から、throw()でないと困る。
0066デフォルトの名無しさん
NGNG: _M_start(src._M_start), _M_finish(src._M_finish),
_M_end_of_strage(src._M_end_of_strage) {}
で、これがコピーコンストラクタ部分でしょうか
厨な質問で悪いんですが…
0067デフォルトの名無しさん
NGNGそのつもり。変数名はSGI STLのマネ。
0068デフォルトの名無しさん
NGNG全てのクラスにmemcpy相当のコピーとゼロクリアを行う
フレンド関数を作っておけば良いんじゃない?
んで、stlの代わりも自分で書く。
つーかそうゆうの遊びで書いてみたことあるけど
確かにstlより相当はやくなるよ。
0069デフォルトの名無しさん
NGNGcopy-on-writeになっているだろ。
実体のコピーは使ってないよ。
0070デフォルトの名無しさん
NGNGstring は copy-on-write が多いが vector で copy-on-write は珍しい気が。
っつか、あるのか?
0071デフォルトの名無しさん
NGNG検索エンジンでは探せませんでした。
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGやっぱり無理ですか…
どうもありがとうございます。
0074名無しさん@Emacs
NGNG何に必要なのか分からんが、typeid()じゃダメかい?
#include <iostream>
// for typeid()
#include <typeinfo>
using namespace std;
int main(int argc, char **argv) {
Hoge tmp;
cout << typeid(tmp).name() << endl;
return 0; // EXIT_SUCCESS
}
ってやると、Hogeって表示されると思う。型名知るだけならこれで可能。
0075デフォルトの名無しさん
NGNG0076名無しさん@Emacs
NGNG0077デフォルトの名無しさん
NGNG0078Hikky!
NGNG0079デフォルトの名無しさん
NGNGそれまで力がついているかな(((( ;゚Д゚))))ガクガクブルブル
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGうちjava〜。継承とかろくに教えず終了。いいのかそれで。。。
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG専門です。情報科学部です。本当に良いのかそれで・・・。
0084デフォルトの名無しさん
NGNGjavaなんかどうせ使うかわかりゃしないんだからやっても無駄。
必要になってからでも全然遅くないよ。つーかもっと理論を勉強なされ。
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG最近は、もっといい選択肢があるだろうに・・・。
0087デフォルトの名無しさん
NGNGなんですか?
008886
NGNGお前の要求も知らずに答えたところで、「じつはそうじゃなくて」とか言われるくらいだ。
何がしたいのか、要求を明らかにしつつ、こちらへどうぞ↓
http://pc3.2ch.net/test/read.cgi/tech/1029377510/l50
0089デフォルトの名無しさん
NGNGQ1 C++の悪いところって何ですか?
Q2 C++の弱点って何ですか?
Q3 それでもC++は最強ですか?その理由は?
0090デフォルトの名無しさん
NGNGQ1 度重なる改造手術で非常に不細工な言語仕様に
Q2 クラス多用するとサイズ増加、実行速度低下などを招く。まぁ、ほかのOOPLにも言えること。
Q3 デファクトスタンダード恐るべし。
0091デフォルトの名無しさん
NGNGクラス多用って一体……
非仮想関数であれば呼び出しは一般の (C 言語の) 関数と同等のペナルティだし、
仮想継承を使わなければメンバ変数へのアクセスも構造体に触るのと変わらん
よな。
0092デフォルトの名無しさん
NGNGいいよ, 自分で試した事ない奴はほっとけ. 非難するだけなら誰でもできる.
0093デフォルトの名無しさん
NGNGあるファイルの関数外でグローバルに宣言されているクラスを
別のファイルでも使えるようにするにはどうすれば良いでしょうか?
変数の場合、グローバル変数を別のファイルでexternと宣言すれば
できると思うのですが、クラスの場合はどうすればよいのかわかりません。
良かったら教えてください。
0094デフォルトの名無しさん
NGNGクラスの宣言を Classname.h に、実装をClassname.cpp に書いて、
そのクラスを利用するファイルでは Classname.h を#includeする
っていうのが一般的だと思うが。
要は、クラス宣言が書かれていればよい。
宣言っていうのは
class Classname
{
public:
Classname();
...
};
って奴のことね。
.
009593
NGNG言いたかったのは、あるファイルの中で使われているクラスの実体?を
そのまま別のクラスで使う方法は無いかって言うことなんです。
ファイル間グローバル変数のように、あるファイルの中で変更された
メンバ変数を別のファイルで参照できないかと思いまして。
0096デフォルトの名無しさん
NGNGQ1 C++の悪いところって何ですか?
文法に不自然な点が多い。
delegate がない。
Q2 C++の弱点って何ですか?
コンパイルに時間が掛かる。
クラス定義が変わると、
全てのモデュールを再コンパイルする必要がある場合がある。
Q3 それでもC++は最強ですか?その理由は?
プログラムの動作を厳密に制御できる。
実行時のオーバーヘッドが殆ど無い。
0097デフォルトの名無しさん
NGNGんーっと。
>そのまま別のクラスで使う方法は
>別のファイルで
別の(クラス|ファイル)どっち?
009896
NGNGああ、読み直してみるとなんとなくわかったかも。
グローバルなオブジェクトを使いたいってことですか?
それだったら普通の変数と同じく、どこか1カ所で変数宣言しといて
他のモジュールからは extern すればよい。
ただし、グローバルなオブジェクトはコンストラクタがいつ実行されるか
不透明なのであまりお薦めできない。
0099デフォルトの名無しさん
NGNG名前欄は96→97の間違い。スマソ。
0100デフォルトの名無しさん
NGNGそれオブジェクト指向(のカプセル化)の概念、完全に無視してるような…
とりあえず構造体にすれば…?
010193
NGNG「そのオブジェクトは既に定義されています見たいなエラーが出て、
変数とは違うのかなって思ったんですが
リビルドしたらできました(汗
>>97さん本当にありがとうございました。
0102デフォルトの名無しさん
NGNGそうか?
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGそりゃあよかったねぇ。>>102
0105デフォルトの名無しさん
NGNGgoto並みにタブーなイメージだけど
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG詳しく説明してるサイトとかないですか?探したんですけど見つからなくて・・・
0108デフォルトの名無しさん
NGNG単なる定数じゃないの、あれ?
と思ったら違ったわ。
VC7のファイルを検索
grep endl *.*
ostream.h:inline _CRTIMP ostream& __cdecl endl(ostream& _outs) { return _outs << '\n' << flush; }
0109デフォルトの名無しさん
NGNGうーん・・・なんかうまくいかないです。
もしかして、endlとかって何かのクラスのメンバ関数じゃないんですか?
0110デフォルトの名無しさん
NGNG本当に改行してるだけだったか・・・。
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGostream& ostream::operator<<(ostream& (*pfn)(ostream&))
{ (*pfn)(*this); return *this; }
こんな感じのメンバがあるんじゃないのかな。
0113デフォルトの名無しさん
NGNGありがとうございます。今からやってみます。
0114booooooooooooooooooooooooost
NGNGhttp://www-scc.tokyo.jst.go.jp/riyou/users/users_guide/ucoma/FJcompiler/C++/stdlib/stdref/classref.htm
既出かも知れないけど。
0115デフォルトの名無しさん
NGNG<<flushの方は?
0116デフォルトの名無しさん
NGNGバッファに貯めとかないですぐに書き出せってことでしょ。
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNGなるほど。勘違いスマソ。
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGと思ったがそういうこと書いてる間に自分でgrep。
…ostream.h中にはなかったのでランタイムライブラリのソースコードを
引っ張り出してみた。VC7でつ。
ostream& ostream::flush()
{
lock();
lockbuf();
if (bp->sync()==EOF)
state |= ios::failbit;
unlockbuf();
unlock();
return(*this);
}
0121デフォルトの名無しさん
NGNGΣ(´Д`;)
grepって正規表現でファイル指定できたのか・・・・
知らなかった師のう(-_-)
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNGgrep : global REGULAR EXPRESSION print
使えなきゃおかしいんだけどね。
でも、正規表現対応grepはegrepだったり。
謎。
0124デフォルトの名無しさん
NGNG今手元にC++環境無かったんだ。ごめんよ!
0125デフォルトの名無しさん
NGNGegrep は拡張正規表現対応ってことで。
0126デフォルトの名無しさん
NGNGbasic_ostream<charT, traits>::flush() {
if(this->rdbuf()) {
#ifdef _RWSTD_MULTI_THREAD
_RWSTDGuard guard(this->rdbuf()->buffer_mutex_);
#endif
if(this->rdbuf()->pubsync() == -1)
this->setstate(ios_base::badbit);
}
return *this;
}
0127デフォルトの名無しさん
NGNGFreeBSD4.4,gcc2.95.3
ostream& ostream::flush()
{
if (_strbuf->sync())
set(ios::badbit);
return *this;
}
0128デフォルトの名無しさん
NGNG一番簡単で(・∀・)イイ!! (w
0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNGあの人の名前が出てくるあたりがC++スレだな(w
0131デフォルトの名無しさん
NGNG簡単すぎて逆に不安になる(w
0132デフォルトの名無しさん
NGNGうむ。BCCのが複雑になってるのはマルチスレッド時の排他制御を考慮
してるからだしな。それにしてもBCCのは見にくいが。
0133デフォルトの名無しさん
NGNGsyncの中は排他制御でマクロだらけという罠
0134デフォルトの名無しさん
NGNG下の使い方はあってますでしょうか?
#include<string>
template <typename T> void aa(const T *a)
{
std::basic_string<T> s = a;
}
class Data
{
char *m_ts;
wchar_t *m_tsw;
public:
Data(){}
Data(char* c,wchar_t* w)
{
m_ts = c;
m_tsw= w;
}
~Data(){}
inline operator char* () const
{
return m_ts;
}
inline operator wchar_t* () const
{
return m_tsw;
}
};
int main()
{
Data data("1234567890",L"1234567890");
aa<wchar_t>((wchar_t*)data);
aa<char>((char*)data);
}
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNGaa<wchar_t>(data);
aa<char>(data);
の方が好ましいかと。
0137134
NGNGData data("1234567890",L"1234567890");
aa<wchar_t>((wchar_t*)data);
aa<char>((char*)data);
}
同じブロックスコープ内で
上記の文字列"1234567890"のポインタを参照した場合、
その実体がまだ存在していることは保証されているのでしょうか?
0138デフォルトの名無しさん
NGNG0139補足
NGNGchar ts[] = "1234567890";
wchar_t tsw[] = L"1234567890";
Data data(ts,tsw);
aa<wchar_t>(data);
aa<char>(data);
}
137のようでなく、このように書くべきなのでしょうか。
0140デフォルトの名無しさん
NGNG貴様、もしかしてそれは、要するに、
const char* aa() { return "1234567890"; }
const char* bb() { char ts[] = "1234567890"; return ts; }
での戻り値は有効か、とかいう話ではないですか?
template も C++ も関係ないような・・・。
文字配列のインスタンスはスコープで死ぬが、文字列リテラルはstatic。
↑の bb がダメで aa は大丈夫。
0141134
NGNGありがとうございました。
勉強して出直してきます。
0142デフォルトの名無しさん
NGNGはじめたいのですが、解説してあるサイトがなかなか見つかりません。
よいサイトがありましたら教えてください。
0143デフォルトの名無しさん
NGNG無いので教えられません。
0144デフォルトの名無しさん
NGNG猫でもわかるプログラミング
0145デフォルトの名無しさん
NGNGつぅか本買え。
0146デフォルトの名無しさん
NGNGRuby
0147デフォルトの名無しさん
NGNG猫でも分かるは VC++ を使っているようなのですが
もしかしたらコンパイルできるのかもしれないと思って
bcc32 -tW sample01.cpp
としたのですが
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
win1.cpp:
エラー E2034 win1.cpp 22: 'void *' 型は 'HBRUSH__ *' 型に変換できない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 win1.cpp 46: パラメータ 'lpszCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
*** 1 errors in Compile ***
というエラーがでてコンパイルできませんでした。
22 行目をコメントアウトしたらコンパイル実行できましたけど、これから学習するに当たって
これは無視していい程度のことなんですか。
OS が Win98SE だからこんなエラーが出るんでしょうか。( 2000とかだと出ない?)
0148デフォルトの名無しさん
NGNGもうちょっと低いレベルで学習すべきではないかと。
0149デフォルトの名無しさん
NGNG(HBRUSH) GetStockObject(〜);
もしくは
reinterpret_cast<HBRUSH>(GetStockObject(〜));
0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNGttp://java.sun.com/products/jdk/1.2/ja/docs/ja/api/index.html
によく似たページのアドレスを忘れてしまったので、知っている方いましたら教えてください。
Microsoftかどっか(個人のページではなく)だったと思うのですが、探したけれど見つからないので・・・。
0152デフォルトの名無しさん
NGNG?
0153デフォルトの名無しさん
NGNGキャストすればよかったんですね。
というわけで「猫でも分かる」でも勉強できそうなので、
ここでしばらく頑張ってみようと思います。ありがとうございました。
0154151
NGNGそれっぽいところを発見したのですが、なぜか表示がバグっててみれません・・・
サイトがハッキングされたのか、それとも自分のIEの設定が悪いのか・・・
ttp://www.microsoft.com/japan/msdn/library/
0155デフォルトの名無しさん
NGNG>サイトがハッキングされたのか
これ以上しゃべんなよ。頼むから。
0156151
NGNG0157デフォルトの名無しさん
NGNG/・ 。・\ <まぁ、いいんだけどね。)
0158デフォルトの名無しさん
NGNGMozillaだとだめぽ。IEでもダメなの?
つーかMozilla使ってそうには思えないがナー(w
0159デフォルトの名無しさん
NGNGなぜreinterpret?
static_castじゃいけない理由を教えてください^^;
0160(・∀・)
NGNG次スレは
http://pc3.2ch.net/test/read.cgi/tech/1029922472/
です。
0161デフォルトの名無しさん
NGNGえぇ!?
もう終了したのかYO!
0162149
NGNGstatic_cast にすべきですよね。失礼しました。
いつも reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);
とやってたのでその勢いで書いてしまった・・。
0163デフォルトの名無しさん
NGNG> static_cast にすべきですよね。
この場合は、別に reinterpret_cast でも良いと思うが。
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG...? ifが関数だと思ってる?
0166デフォルトの名無しさん
NGNGgcc なら gcc/c-parse.y かなぁ?
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNGマイクロソフトに聞け!
# 「聞け!」を2ch語にできないかなあ「する」→「しる」みたく。
マイクロソフトに聞き! …うーん
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGしる!は形が似てるから間違えたんでしょ、ってことで
聞は!
はどうですか?
0172デフォルトの名無しさん
NGNG最も低レベルだから気軽に使うなと…((((゚д゚))))ガクガクブルブル
int n = 12345;
int *p = &n;
int n_addr = reinterpret_cast<int>(p); // n_addrにはpのアドレスが整数値として入る
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNGっていうか
×「する」→「しる」
○「しろ」→「しる」
2典でも読んでくだちいってことで。
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGポインタ同士の変換もreinterpret_castでしょ
0178デフォルトの名無しさん
NGNGポインタによる
0179デフォルトの名無しさん
NGNGサブスレッドで発生した例外を、メインスレッドに上手く伝播させる方法ってありますか?
0180デフォルトの名無しさん
NGNG無理な拡張ばっかりしてるからそんなことになるんだよ。
0181デフォルトの名無しさん
NGNG・・・分かってないね。
0182デフォルトの名無しさん
NGNGGCがなくてポインタが使えてデフォルトで無効なキャストが出来てしまうせい。
0183デフォルトの名無しさん
NGNGネタは無視しる。
0184デフォルトの名無しさん
NGNGおい。勝手にネタにすんなよ。
C++だけだろこんなにキャストの仕方があって
いちいちプログラマが使い分けなきゃならんの。
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG煽りはいいからちゃんと説明しろよ。
0187デフォルトの名無しさん
NGNG( Hoge ) hoge;
Hoge ( hoge );
reinterpret_cast< Hoge >( hoge );
という形式の話なのか、それともC++スタイルの4種のキャストの話なのか。
それとも全部ひっくるめての話なのか。
boostあたりの偽キャストtemlateあたりになるとさすがにどうかとは思うが。
紛らわしい。
0188デフォルトの名無しさん
NGNGそれかreinterpretだけ使ってればいいじゃん。
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG全部の話だ。ある型から他の型に変えるときそこで使用されるキャストすべてだ。
だいたいキャストごときでテンプレート使っているのが気に食わん。
>>188
自分一人で勝手に作れるのならそうする。
もっとも勝手にやれるならキャストを使い分ける方を選ぶがな。
0191デフォルトの名無しさん
NGNG前にも解説したような覚えがあるんだが。とりあえず前スレ読んでみ?
0192デフォルトの名無しさん
NGNGキャストの違いなら一応わかっているつもり。
俺が知りたいのは何故こんなにキャストの仕方があるかという理由だ。
0193デフォルトの名無しさん
NGNGC形式のキャストが残ってるのは単なる過去の負の遺産。
0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG意図を明示した複数の長いキャスト指令に分割することで
意図以外のキャストをしてしまうミスを減らすものでんな。
また、C style castは危険なのだがソース中で埋もれてしまうので、
reinterpret_castという同等の固有指令を作って危険な文を発見しやすくしたって感じ?
どうせなら移行促進のためにC style castに警告ぐらい出してくれればいいのにな。
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG/∴∵∴ヽ
|∵∴∞ヽ| _______________
|∴/= ♀=| <dynamic_cast以外使ったことねー!
\| ▽/  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG違いが分かっていれば、理由は明白なはずだが……。実は「分かってるつもり」
なだけ?
とりあえず C スタイルキャストと static_cast, dynamic_cast, reinterpret_cast の
違いについて書いてみ。
>>197
お前は Win32 プログラミングをやったことがないのかと…。lParam, wParam を
キャストするときに dynamic_cast はあり得んだろ。
0200デフォルトの名無しさん
NGNGたぶん新しい(新しくもないが)形のキャストの話でしょ
0201デフォルトの名無しさん
NGNG199の設問だと意図が掴みにくいだろうから、もっと端的に。
「ポインタ同士の変換でstatic_castとreinterpret_castがどう異なるか説明せよ。」
0202デフォルトの名無しさん
NGNGキャストがバグの原因だったことあるか?俺はない
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGよかったな。論破できたぞ。
0205デフォルトの名無しさん
NGNGそれもC++になって型変換が厳しくなってからはそれもない。
(その代わりにコンパイラがエラーをげろげろはく)
明示的キャストではCでもバグったことはない。
C++でキャストが沢山あるのは主にその機能の必要性からであって
(バグ対策の)開発支援のためではないだろう。
そしてそれぞれの機能のキャストを選択的に使えなければならない。
これがC形式のキャストでは出来ないことだ。もう一度言おう、
危険かどうかが問題なのではない。機能の違いが問題なのだ。
私は主に(ポインタではない)値のキャストにC形式を用い、
(これは式の記述の簡便さにもよるし曖昧さがないことにもよる)
OOに関するものにC++の長ったらしいキャストを用いている。
その必要があるからだ。
(static_castとreinterpret_castでさえ保証されている内容は全く違う。
Cタイプのキャストではどちらが適用されるか一見して分かるわけではない)
ご静聴ありがとう
0206デフォルトの名無しさん
NGNGvirtualキーワード使わなければさほど意識する必要はないでしょ。
int を enum へ キャストする時 static_cast は重宝した。
0207デフォルトの名無しさん
NGNGreinterpret_cast かに切り換わるの?
0208デフォルトの名無しさん
NGNG規格では
const_cast
static_cast
const_cast+static_cast
reinterpret_cast
const_cast+reinterpret_cast
のどれかが適用されることになっている
0209デフォルトの名無しさん
NGNGありがとうございました。>>208
0210デフォルトの名無しさん
NGNG>「ポインタ同士の変換でstatic_castとreinterpret_castがどう異なるか説明せよ。」
について説明してくれ・・・・dynamic_castとCスタイルのキャスト以外知らないので気になる・・・・
0211デフォルトの名無しさん
NGNG激しく同意。
解説しる!……いや、してください…。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG多重継承してるときに、オフセットの調整するかどうかじゃないの?
class B1 { int b1; };
class B2 { int b2; };
class D : public B1, public B2 {};
D* pd = new D;
B2* pb = bd;
こうすると pd と pb は、それぞれ「D オブジェクトの先頭 (= B1 オブジェクトの先頭)」
「D オブジェクト中にある B2 オブジェクトの先頭」を指すよね。
pd-> +------------
| int b1;
pb-> +------------
| int b2;
+------------
当然、アドレス値としては pd != pb になる。このときに
1. static_cast<D*>(pb) するとオフセット分だけ差し引いて pd と同じアドレスが返ってくる
2. reinterpret_cast<D*>(pb) すると pb のアドレスが、そのまま返ってくる
(規格上は実装依存だけど、たいていの処理系だとこうなる)
と、結果が違ってくる。
0214デフォルトの名無しさん
NGNGreinterpret_cast がビットパターンを変化させずに型変換するのに対して
static_cast はそのポインタ型にとって適切なビットパターンに変換してくれる
ということではないのかな。
0217デフォルトの名無しさん
NGNG派生型への変換を目的としているならそれは正しくない使い方
static_castを使う。ちょっと違う部分(ほとんど全て)を適当に訳してみた
reinterpret_cast
・他の型への変換における値の互換性は実装依存。
・ポインタ型は十分なサイズの整数型に変換できる。
・整数型と列挙形はポインタ型に変換でき、ポインタ型から変換された整数は
同じポインタ型への変換によって正しくもとのポインタに戻る。
・関数ポインタを他の型の関数ポインタに変換できる。
それを使った呼び出し結果は未定義。ある型への変換の後もとの型への変換によって
正しくもとの値に戻る。それ以外の動作は不定。
・オブジェクトへのポインタを他の型のオブジェクトへのポインタに変換できる。
その動作は上と同様。
・メンバオブジェクト、メンバ関数それぞれのポインタを
他のオブジェクトの他の型のメンバポインタに変換できる。動作は上と同様
・ある型のポインタから他の型のポインタへのreinterpret_castを適用できるときに限り、
その型の左辺値を他の型の参照に変換できる。一切の一時オブジェクトの生成、コピーの生成
コンストラクタや変換関数の呼び出しは行われない。
static_cast
・ある値を他の型の変換コンストラクタが適用できるときに限りその値に変換できる。
・任意の値をvoid型に変換できる。その結果、式は値を放棄する。
・派生型のポインタから基底型のポインタに変換する標準変換があるときに限り、
基底型の左辺値を派生型の参照に変換できる。基底は仮想基底であってはならない。
値が派生型の部分値(要はアップキャスト)でないときに動作は未定義。
・各種標準変換の逆変換ができる
・整数型を列挙型に変換できる
・標準変換が存在するときに限り基底型のポインタを派生型のポインタに変換できる。
基底型は仮想基底であってはならない。動作は参照のときと同様。
・基底型にあるメンバがあり、基底型のメンバポインタから派生型のメンバポインタへの
標準変換があるときに限り、派生型のメンバポインタを基底型のメンバポインタに変換できる。
・オブジェクト型のポインタとvoid型のポインタの相互変換ができる。
もとのオブジェクト型への変換により正しくもとの値に戻る
0218デフォルトの名無しさん
NGNGconst_cast
static_cast
const_cast+static_cast
reinterpret_cast
const_cast+reinterpret_cast
が順に適用されるのに加えて、
公開されていない基底に正しくキャストすることができる。
これはreinterpret_castにもない機能
(static_castではそもそも不可能)
0219218
NGNGreinterpret_castはポインタをほかの型に変換してもどす以外には
役立たずで不必要に見えるが、ほかの型に変換した結果が
不定(未定義ではない!!)というのがみそでwindowsの例だけども
BITMAPINFO bmpi ;
reinterpret_cast<BITMAPINFOHEADER*>(&bmpi) ;
のような記述を許容している。互換性のためには必要なわけだ。
static_castを二回(一回void*にする)使えばできるかもしれないが
規格に全く書かれていないstatic_castの使い方になってしまう。
0220デフォルトの名無しさん
NGNG| |
| |
∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < 先生!わざわざ訳してくれてありがとうございmす!
/ / \
/ /| /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
__| | .| |
\  ̄ ̄ ̄ ̄ ̄ ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
0222デフォルトの名無しさん
NGNGfloatの文字列になっているみたいなのですが、
doubleの文字列にするにはどうしたらいいのでしょうか?
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
stringstream oss;
string mystr;
double d = 1234.567890;
oss << d;
mystr=oss.str();
cout << mystr; //1234.57
return 0;
}
0223デフォルトの名無しさん
NGNG0224222
NGNGthanks
<< double するときは setprecisionが必要なのか...。
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
stringstream oss;
string mystr;
double d = 1234.567890123456,d2;
oss << setprecision(16) << d;
mystr=oss.str();
cout << mystr << endl;
oss << mystr.c_str();
oss >> d2;
cout << setprecision(16) << d2 << endl;
return 0;
}
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGあまり C++ とは、関係のない話題なので申し訳ないのですが、
bcc5.5.1 で Windows DLL の作成・利用の仕方についての質問です。
以下のソースで試しているのですがどうにもうまくいきません。
DLL の作成には成功するのですが、DLL から関数のポインタを取得
するのに失敗してします。
宜しければ、間違いがどこにあるかご指摘いただけないでしょうか?
または、参考になる URL でも構いません。
bcc32 -O2 -WD testdll.cpp // DLL 作成時のコンパイラオプション
bcc32 -O2 test.cpp // EXE 作成時のコンパイラオプション
-- testdll.h --
int __declspec(dllexport) __stdcall MyFunction(int);
-- testdll.cpp --
#include "testdll.h"
int __stdcall MyFunction(int x)
{
return x+100;
}
-- test.cpp --
#include <windows.h>
#include <cstdio>
using namespace std;
typedef int (*TFUNC)(int);
int main() {
HINSTANCE hInstDLL;
TFUNC DllFunction;
if((hInstDLL=LoadLibrary("testdll.dll"))==NULL) { std::printf("オープン失敗"); exit(1); }
if (DllFunction=(TFUNC)GetProcAddress(hInstDLL,"MyFunction")) std::printf("%d\n\n",DllFunction(1));
else std::printf("しっぱい\n");
if(!FreeLibrary(hInstDLL)) { std::printf("クローズ失敗"); exit(1); }
return 0;
}
-- 実行結果 --
C:\SLLTEST>test
しっぱい
よろしくお願い致します。
0227デフォルトの名無しさん
NGNGそれを知っててなんでこのスレに書くんだよ。extern "C"
0228デフォルトの名無しさん
NGNGclass Aに Allocate(a,b)という関数があり
class Bには Allocate(a) という関数があります。
class AのAllocate(a,b)を置換したくて
#define Allocate(a,b) AllocateEx(a,b,__FILE__,__LINE__)
とすると、class Bの Allocate(a)まで対象となってしまい
しかも引数の数が合わないとコンパイラに怒られます。
なんとかclass AのAllocateだけを置換対象とする事はできないでしょうか?
それとも別の解があれば、教えてください。
0229デフォルトの名無しさん
NGNGエディタで置換してくれ。
0230デフォルトの名無しさん
NGNG同意。マクロなんて、どこで影響出るか分からんから使うな。
いちおう回避策はあって、たとえ Allocate という引数付きマクロが定義されて
いたとしても (Allocate) と書くとマクロ展開を抑制できる。
0231デフォルトの名無しさん
NGNGinline使え、って言ってもらいたいんだろ?
0232226
NGNG失礼致しました。
もう少し勉強してきます。
0233デフォルトの名無しさん
NGNGinline使うと、どうなるんですか?
置換対象のソースが膨大で、できればマクロで済ませたいのです。
0234デフォルトの名無しさん
NGNG意味が分からん
0235デフォルトの名無しさん
NGNGAllocateは関数なんだろ?
だったらその内部でAllocateExを呼べばイーんじゃねーの?
0236デフォルトの名無しさん
NGNG__FILE__ とか __LINE__ とか書いてあるところから察するに、デバッグビルド用に
切り分けたいんじゃないかと。
0237デフォルトの名無しさん
NGNGマクロに不都合があるなら、関数内部でデバッグルーチン組んでもいいかと思う。
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGちゃんと覚えとけ。
0240デフォルトの名無しさん
NGNGなんでBが愛撫でAがキスなんですか? Cはセックスですか?
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNGthis
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG二度とバカなこと言わんようにな。と言うところ。
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG渡すしかねーだろ。ウインドウメッセージとかさ、メインスレッドが
サブスレッドの例外状況をポーリングするとかさ。
0248デフォルトの名無しさん
NGNG記念すべき最初のプログラムでした。
これからよろしくお願いします。
0249デフォルトの名無しさん
NGNG>ハロワルできました。
通ぶるなら来るなよ。
0251デフォルトの名無しさん
NGNGそれって通ぶってるか?
0252デフォルトの名無しさん
NGNG健全なスキルアップは健全な用語からだ。ってことじゃないの?
0253デフォルトの名無しさん
NGNGそれはD?
C++では無理かやっぱり
0254デフォルトの名無しさん
NGNGなぜコンストラクタじゃないと駄目なの?
0255デフォルトの名無しさん
NGNGクラス指向でないオブジェクト指向でエレガントに記述してみたかっただけ
C++では機能が少なすぎるな
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNGpragmatic、の略。
http://www.dictionary.com/search?q=pragma&db=*
0258デフォルトの名無しさん
NGNGnew、delete オーバーロードして自前で関数を呼び出すとか。
0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNG上に関連して教えて下さい.
コンパイル単位が複数あるときに,あるコンパイル単位中のグローバルオブジェクト
やグローバル変数を一番最初に初期化する方法ってありますか?main()関数内でこれ
らを初期化する関数を最初に呼び出せば良いでしょうけど,できればこの関数の呼び
出しをmain()関数内で明示的に呼び出すのではなく,裏側でこそっと呼び出したいの
ですが.
0261デフォルトの名無しさん
NGNGグローバルオブジェクトを初期化する関数をmain()関数内で最初に呼べばok
かどうかも妖しくなってきた.
0262デフォルトの名無しさん
NGNGrealmainをつくれ
0263デフォルトの名無しさん
NGNGどうもです.
realmainの補足説明をもう少しいただければありがたいのですが.
〜を調べろとか,〜のサイトを見ろとか.
0264デフォルトの名無しさん
NGNGint realmain()
{
/* main のかわり */
return 0;
}
int main()
{
初期化();
return realmain();
}
0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNGint *a;
と
int* a;
って何が違うんでしょうか?
0267デフォルトの名無しさん
NGNGint * a;って書くやつもいる。
0268デフォルトの名無しさん
NGNGありがとうございます.コードをじっと見てるうちにその意味が
少しだけわかってきました.勉強させてもらいます.
0269デフォルトの名無しさん
NGNG書き方だけの違いだったのか。
了解しました。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNGオブジェクト指向な俺は
インテジャーポインタという型だと主張したいから
int* a;と書く方針。
他人には強制しないがint *a;派のやつからはいろいろ文句言われる。
0273266
NGNGポインタ型として宣言するか、
宣言したものがポインタであるのか。
結局同じ事なのか・・・
もう一つ質問です。
int* a;がなんでオブジェクト指向なんすか?
0274272
NGNG>int* a;がなんでオブジェクト指向なんすか?
それ自体はオブジェクト指向でもなんでもないけど、
ポインタなんていう概念をできるだけ隠蔽したいという意志の現れだから。
0275デフォルトの名無しさん
NGNG以下のように、一時変数をリストに挿入した場合、スコープを抜けた後も、
リストに挿入したtemp_msのデータは保持されるのでしょうか?
list<MyStruct> list_ms;
func(){
MyStruct temp_ms;
list_ms.push_back( temp_ms );
}
main(){
func();
}
0276デフォルトの名無しさん
NGNGコンテナと同じ寿命を持ちえる
0277デフォルトの名無しさん
NGNG本当? push_back関数が値コピーして要素追加するならいいが
void push_back(const T& x)となってる.
ローカルオブジェクトは関数から抜けると破棄されるから危ないのでは?
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG参照型のコンテナはそもそも許されないはず
0280デフォルトの名無しさん
NGNG>本当? push_back関数が値コピーして要素追加するならいいが
>void push_back(const T& x)となってる.
TがMyStructでMyStruct temp_msとあるから
listのスコープが終わればその要素も破棄されるよ。
ただしMyStructのデストラクタをちゃんと書いてなければ
MyStruct内で定義されたデータは破棄されないことに注意。
>ローカルオブジェクトは関数から抜けると破棄されるから危ないのでは
この文章をみると知識だけあって理解してない厨房に見えるけど。
0281226
NGNG>227 様のヒントのおかげでどうにか解決できました!
ありがとうございました。
おかげでバックグラウンドの重めの処理を C++ で作成、 GUI は別の言語で
作りこむっていうステキなことが出来るようになりました。
原因
以前のが上手くいかなかったのは、C++だとなにやら「マングル」という卑猥な単語
が激しく関係する為だったようです。
回避策
関数郡を extern "C" してあげればそれが回避できるようです。
bcc32 -O2 -WD dll.cpp // DLL 作成時のコンパイラオプション
bcc32 -O2 test.cpp // EXE 作成時のコンパイラオプション
-- dll.h --
#ifndef __DLL_H__
# define __DLL_H__
#include <windows.h>
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) int __stdcall MyFunction(int);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // __DLL_H__
-- dll.cpp --
#define __MAKE_DLL__
#include "dll.h"
namespace mydll{
__PORT int __stdcall MyFunction(int x)
{
return x+100;
}
}
-- test.cpp --
#include <windows.h>
#include <cstdio>
using namespace std;
typedef int __stdcall (*TFUNC)(int);
int main() {
HINSTANCE hInstDLL;
TFUNC DllFunction;
if((hInstDLL=LoadLibrary("dll.dll"))==NULL) { printf("オープン失敗"); exit(1); }
if (DllFunction=(TFUNC)GetProcAddress(hInstDLL,"MyFunction")) printf("%d\n\n",DllFunction(1));
else printf("しっぱい\n");
if(!FreeLibrary(hInstDLL)) { printf("クローズ失敗"); exit(1); }
return 0;
}
-- 実行結果 --
C:\SLLTEST>test
101
ありがとうございました。
0282SITNAM
NGNG俺って天才だよな。
0283デフォルトの名無しさん
NGNG0284226
NGNGdll.cpp にいらぬものが入ってました。
訂正。
-- dll.cpp --
#include "dll.h"
__declspec(dllexport) int __stdcall MyFunction(int x)
{
return x+100;
}
板汚し、すんまそん。
0285デフォルトの名無しさん
NGNG勘違い! void push_back(const T& x)は値コピーで要素追加だった.
コピーコンストラクタの引数も const T& x だし.
>この文章をみると知識だけあって理解してない厨房に見えるけど。
ああ永遠の厨房よ.
0286デフォルトの名無しさん
NGNGC++3rdの135頁に詳しくかいてある
0287デフォルトの名無しさん
NGNGそっとしておいてやるべきか、いやはっきり逝ってやるのがいい。
(・∀・)カエレ
0288275
NGNGお礼が遅くなってすいません。今まで下さったレスの意味を
必死で考えていました。
listが内部で自動的にnew、deleteか何かをしてくれていて、
リスト追加は、ポインタ(参照)リストとかでない限り、値コピーで渡される。
clear()した場合はデストラクタが呼ばれる。…ということですよね
まだC++始めたばかりで、本当に助かりました。
レス有り難うございました。
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG他人を信じることが間違い
0294デフォルトの名無しさん
NGNGclass Test
{
public:
Test(void)
{
cout << "コンストラクタ" << endl;
}
void operator () (void)
{
cout << "オペレーター" << endl;
}
};
というクラスがありまして、
Test a;
とやるとコンストラクタが呼ばれるんですが、
Test a();
とやると、コンストラクタが呼ばれないんですが、
これは仕様ですかね?それとも違う(隠れた?)コンストラクタ呼んでるんですかね?
0295デフォルトの名無しさん
NGNGってTestを返す関数aの宣言では?
0296294
NGNGなるほど!!
スコープ内でも宣言ができるとはしらなんだ。
どうもありがとうございました。
0297デフォルトの名無しさん
NGNG・・・罠?
0298デフォルトの名無しさん
NGNGC++ では、「宣言とみなせるところは宣言と解釈する」というのが
ルールのようですから。
0299デフォルトの名無しさん
NGNG一般には、ない。ただし処理系によってはリンカのオプションで指定できる
ケースもある。
良く使う workaround は「ローカル static オブジェクト」を使うことだね。こんな
感じ。
CFoo& GetGlobalCFoo() {
static CFoo foo;
return foo;
}
#define g_foo GetGlobalCFoo()
ローカル static オブジェクトに関しては、最初に参照されたタイミングで
初期化されることが決まってるから。
0300デフォルトの名無しさん
NGNGWindowsのコールバックでなくて、もっと一般的な意味で
コールバックを使った簡単なコードを誰か貼り付けてもらえませんか?
ちなみに私はコールバックを使ったことが一度もありませんが、
特に困ったことはありませんでした(多分)。
0301デフォルトの名無しさん
NGNGその質問、何度も見た。
0302デフォルトの名無しさん
NGNGC++ だと関数オブジェクトや仮想関数が使えるからな…。
素の C だと、たとえば qsort() で比較に用いる関数を指定するのに使ったり
するわな。
0303デフォルトの名無しさん
NGNG常にvirtual宣言せよって書いてあるんだけど、実際そうなんですか?
0304デフォルトの名無しさん
NGNG本の名前と原文をうpしてくださいw
0305303
NGNG「憂鬱なプログラマのためのオブジェクト指向開発講座」
Tucker!著 です。
その本の151ページに、
「メンバ関数はどれも将来オーバーライドされる可能性があり・・・(中略)
メンバ関数は基本的にすべて仮想関数として実装しておいたほうがいいでしょう」
と書いてあったのです。
0306デフォルトの名無しさん
NGNGDLLを作ったことがない人にはわかりません。
0307303
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/4881356194/ref=sr_aps_b_12/250-6712356-7321008
0308デフォルトの名無しさん
NGNG発想が貧困だね。
0309デフォルトの名無しさん
NGNG>>300
コールバック(というより関数ポインタ?)使うのは
関数ポインタでテーブル作ってswitchの代用にしたり、
STLとかの関数オブジェクトにしたり、
あとはUIの応答のときとか
シグナルや入出力を待つときとかに使うくらい、
0310デフォルトの名無しさん
NGNG他人や将来の自分にオーバーライドしてほしくない関数は基本的に仮想関数にしないよね。
0311300
NGNG逆に言うと、DLLを作らないならコールバックはまったく使わなくて
いいということでしょうか?
0312デフォルトの名無しさん
NGNGあなたがコールバックを使うレベルになるまで、使う必要はありません。
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG再利用の可能性がまったくない、他人に弄ってもらっては困る関数など。
ってゆうかDLLのみでソースがないときに
オーバーライドしたいけどできねーってことがないようにvirtualにしておくことはおすすめだけど、
、
そういう用途でなければ通常は後からvirtualキーワードを書き足せばいいわけで。
まあ実用的なプログラムつくるようになればわかるよ。
0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNG> 他人や将来の自分にオーバーライドしてほしくない関数は基本的に仮想関数にしないよね。
まぁ、あの本は OO の入門書だから。
>>313
OO 分析の過程で出てきたメソッドではないもの。
例えば Generic Programming の流儀から出てくる operator() とか、実装の都合で
「処理が長くなるから関数に分けるか」ってな感じで作った private メソッドなど。
個人的には、実装の都合で出てきたメソッドに関しては pimpl イディオム使って
隠蔽した方が良いと思うけど。
0322319
NGNGちと言葉足らずだったね。
C++ ってパラダイムごった煮の言語で、「憂鬱本」が解説してるような OO 流儀で
書くことも出来れば、STL のような Generic Programming 流儀で書くこともできる。
伝統的な C 言語のように、データ抽象 + 手続き指向も可という懐が広い言語。
OO 流儀でプログラミングする場合には
1 まず問題を OO で分析して
2 それを元に OO でクラス階層を設計して
3 最後に実装する
という手順を踏むから、必然的に 2 で出てくるクラスのメソッドは、原則として
virtual になる。
ただ純粋な OO 以外の設計・分析も入ってくると、必ずしも継承前提のクラス
ばかりではなくなるから(継承しない以上)virtual も不要になる。たとえば STL
コンテナは Generic Programming という OO とは別の流儀を採用してるから、
メソッドは全て non virtual だよね。
とりあえず「憂鬱本」は OO の入門書で、OO で分析・設計した成果をコードに
落とす道具として C++ を使っている。ただ C++ では他の流儀も使えるよ、って
ことだけ頭の隅に置いておけば良い。
(憂鬱本を読み終えたら、次に CODE COMPLETE とか Generic Programming
とか読んでみると良いかも)
0323303
NGNG親切なレスにめちゃくちゃ感謝してます。
まずは、ありがとうございます。
最近まで、はじめてのC++的な本で勉強していて、一通り理解したので、
他のスレで紹介されていた憂鬱本を読み始めたんです。
UMLとか全く知らなかった自分にとって、この本に書いてある事は
かなり衝撃的で面白く読めました。
是非、次は教えて頂いた本を読んでみようと思います。
0324デフォルトの名無しさん
NGNGvirtualは情報隠蔽の原則を破壊する、この欠点は大きいということが
最近になって強く認識され出した。
JavaでデフォルトがvirtualになったがC#の時代になると、デフォルトが
finalに戻った。
0325デフォルトの名無しさん
NGNGアドバイス,ありがとうございます.
0326勉強中@C++ ◆lawMy/JQ
NGNGだったようです。鬱
マルチポストになって申し訳ありませんが、改めてここで質問させてください。
以下コピペ
>はじめまして。オブジェクト指向を勉強中のものです。
>最近、ミックスインクラスとロールプレイングクラスの存在を知りました。
>私は複数(かなり多い)の問屋を相手にするオンラインシステムを開発・メンテしている
>のですが、問屋毎にいわゆる「特別処理」が多く、手を焼いています。
>そこで、ロールプレイングクラスを使うとこの「特別処理」をすっきり実装できるのでは?
>と考えているのですが、似たような案件を扱った方がいらっしゃれば、ご意見をお聞かせ
>いただけませんでしょうか?よろしくお願いいたします。
0327デフォルトの名無しさん
NGNG先生、何故virtualが情報隠蔽を壊すのでしょうか?
継承が壊すというのは分かります。
0328デフォルトの名無しさん
NGNGcout ではどうするんでしたっけ?
C だとこんな感じのやつ
printf("%d", ch); // ch はchar型
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNGまぁ、厳密にはそうだね。virtualだと継承した時に内部の実装を
知る必要が出てくる事が多いし壊しやすいと言うこと。
0332デフォルトの名無しさん
NGNGint(ch)
0333デフォルトの名無しさん
NGNGこれってint型の一時オブジェクトを生成して左辺に代入ってことですか?
0334デフォルトの名無しさん
NGNG左辺ないだろうに。intでキャストしているだけ。
0335デフォルトの名無しさん
NGNGISO+IEC+14882-1998.pdf
とか見れ。
0336デフォルトの名無しさん
NGNGLSI C-86 v3.30c試食版を使ってコンパイルしようと思うのですが、
書いてあるとおりやってからプロンプトで「lcc ****.c」 と入力すると、
「lccは操作可能な・・・ではありません」とか出てきてしまって、コンパイルできません。
一体どうしたらできるようになれるのでしょうか。。。
0337デフォルトの名無しさん
NGNGProcessorPackを入れると最適化できるようになるって
本当ですか?
0338SITNAM
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1027347982/1000/
ほれ、みろ!すごいだろ!
0339デフォルトの名無しさん
NGNGネタ?
0340デフォルトの名無しさん
NGNGパス通した?
っていうかLSI-CよりBCCを使えと(略)
0341339
NGNGこの辺読めばわかるだろ。
http://www.forest.impress.co.jp/article/2000/07/05/sundayprog1.html
0342デフォルトの名無しさん
NGNGunix系を扱ったことがあるなら、こっちもおすすめ
0343デフォルトの名無しさん
NGNGメソッドテンプレートだけじゃなかったんだね。
template<class T> class Outer {
class Inner_ {
T t;
private:
Inner(const T& ref) : t(ref) { }
} Inner;
public:
Outer(const T& ref) : Inner(ref) { }
};
これが通らなくて鬱ですた。
0344デフォルトの名無しさん
NGNGなにがしたいの?
0345デフォルトの名無しさん
NGNG> virtualだと継承した時に内部の実装を知る必要が出てくる事が多いし
それは仮想関数ではなく、実装継承のデメリットを語ってるように聞こえるが…。
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNG教えてください。
0348デフォルトの名無しさん
NGNGそれは、親クラスがいい加減な実装をしているか、
子クラスの実装が親クラスの仕様を無視しているだけ。
0349デフォルトの名無しさん
NGNG継承によるコード再利用は諸刃の剣。素人にはおすすめできない。
0353デフォルトの名無しさん
NGNG様々な変数を宣言します。
int iText;
BOOL bText;
char cText;
さて、TCHAR型なら
なんという変数名ならみなさん見やすいですか?
0354デフォルトの名無しさん
NGNG0355353
NGNGえっもしかして、現時点で私狂ってます?
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNGTCHAR tText;
0358デフォルトの名無しさん
NGNGbool型のテキストってなんかいやん。
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNG0362353
NGNGbTest
のつもりでした。
間違えてテキスト、とタイプしていたようです。
申し訳ない。
tTest
ということでよろしいでしょうか?
0363デフォルトの名無しさん
NGNG型情報を変数名に付加しなければいけないほど
プログラムが汚いってことですか?
0364デフォルトの名無しさん
NGNGC++ではどのように実装するのが一般的でしょうか?
class EventHandler
{
public:
void Execute(); virtual;
}
のようなクラスインスタンスを仲介役に
使うことくらいしか思いつきません・・・
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG外に出す。
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNGclass Class{
Class(int i) : n(i){}
private:
int n;
};
main(){
Class a(0);
Class b(1);
b = a; //b.n = 0;
}
privateなメンバ変数に対して、これが出来てしまうのが腑に落ちなくて…。
デフォルトoperator=は、自動的にfriendになってしまうのでしょうか?
0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG代入を禁止したいのなら、operator=()でもprivateにしたら?
0372デフォルトの名無しさん
NGNGレスありがとうございます。非staticメンバ関数で非friendなんですね。
むはーん、しかしでは何でこんな嫌なことができてしまうのでしょう(;´Д`)
自分でoperator=を定義したときは、friendにするかget系関数を用意しない限り、
privateメンバ変数を参照するのは無理ですよね…。
デフォルトoperator=は特別という解釈で宜しいのでしょうか?
0373デフォルトの名無しさん
NGNGと、書いているうちにすいません。
ありがとうございます。禁止するときはそうします。
0374デフォルトの名無しさん
NGNG>privateメンバ変数を参照するのは無理ですよね…。
そんなことない。
0375デフォルトの名無しさん
NGNGんなこたーない。
0376デフォルトの名無しさん
NGNGんなこたぁない
0377375
NGNG0378デフォルトの名無しさん
NGNG0379372
NGNGぐぁ、本当だ。皆さんすいません。operator==になってたのと、
インテリセンスで引数相手のメンバ変数が出てなかったのに惑わされました…。
うーん、もう何がなにやら…情報のカプセル化って、
オブジェクトごとではなくて、クラスごとなんでしょうか…。勉強し直してきます。
0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG就職する
0385デフォルトの名無しさん
NGNG転職というか、まだ学生なのですが
就職先で教えこまれるのですか?
0386デフォルトの名無しさん
NGNG2チャンネルでの書きこみは直ちにやめて下さい。
私はここに書き込んだために、アドレス帖の中身を覗き見られました。
これは嫌がらせではありません。
[警告・危険]
0387デフォルトの名無しさん
NGNGともだりすくないのれ。
0388デフォルトの名無しさん
NGNGごめん、就職って書いてあったな。
眼科いってきます。
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG....................................................................................................(゚Д゚)ハァ?
0392デフォルトの名無しさん
NGNGboost::function とか Loki::Function とか。
0393デフォルトの名無しさん
NGNGクラスの宣言で、例えば
class A{
public:
void a1();
void a2();
}
というクラスを継承して
class B : public A{
};
というクラスBを作ったとします。
このクラスBのオブジェクトからは関数a1にはアクセスできるけど
関数a2にはアクセスできないようにしたいのですが、
どのようにすればよいでしょうか?
なんだかprivateやらprotectedやらすこし混乱しています。
どうか教えてください。
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG基底で公開しているものをパブリック継承先で
非公開にするのは無理だし(出来たとしても)すべきではない。
実装継承するならprivate継承も一つの手だが
0396デフォルトの名無しさん
NGNG>非公開にするのは無理だし(出来たとしても)すべきではない。
>実装継承するならprivate継承も一つの手だが
基底では使えるけど継承先で使えない関数を作るのは
無理って言うことなんでしょうか。
いまいち継承の種類も良くわからないのですが・・
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNGa1,a2が公開メンバであるのに
継承先で非公開にしたいのはなぜ
0400デフォルトの名無しさん
NGNGprivate: using a2;ってやってできない?
0401デフォルトの名無しさん
NGNG393の文は基底で非公開にしたいように見えるが
0402デフォルトの名無しさん
NGNGなぜかというと、a1の関数の中でやっている処理はそのままクラスBでも
行ないたいのですが、a2の関数の処理は行ないたくないからです。
まあ呼ばなければいいんですが、間違って呼んでしまうことも
有るかもしれないので、Bの変数からは呼ぶことができないように
できればいいなと思ったんです。
0403デフォルトの名無しさん
NGNG「クラスの変数から関数を呼びたいけど継承はしたくない」
っていうことです。
説明が下手ですみません。
0404デフォルトの名無しさん
NGNGclass A{
public:
void a1();
void a2();
}
A a;
のような,宣言されたaのことです。
0405デフォルトの名無しさん
NGNGclass A{
public:
void a1();
void a2();
}
class B {
private:
A a_;
public:
void a1() {
a_.a1();
}
}
あ、Aのprivateにアクセスしたかったらfriendにしたらいいのね。
0406デフォルトの名無しさん
NGNGありがとうございます。
なんとか思い通りに動作するようになりました。
皆さんありがとうございました。
0407デフォルトの名無しさん
NGNG間違い防止なら、これで十分だろ。
class B: public A {private: void a2() {A::a2();}};
0408デフォルトの名無しさん
NGNG自作アプリケーションが雑誌に乗るぐらいプログラムやってきたけど
一度たりともクラスを作った事がない、がはは(涙
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNG遅レスですが、gtkmm 等で使われてる libsigc++ なんかどうですか?
http://libsigc.sourceforge.net/
0411デフォルトの名無しさん
NGNGガンパレ
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNG| |
| |
∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < 先生!C++の仕様書の日本語版はありますか?
/ / \
/ /| /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
__| | .| |
\  ̄ ̄ ̄ ̄ ̄ ̄ ̄\
||\ \ モシ モッテル ヒトイタラ ヒヒョウモ オナガイシマス
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
0414デフォルトの名無しさん
NGNGプログラマや趣味でやってる人はともかく、注坊は使っちゃいけない気がしてきた。
(言語仕様が複雑すぎ)
0415デフォルトの名無しさん
NGNGリア注でも使おうと思えば使える。DQNは知らんが。
一般にクラスは大規模プログラムに適しているが、小規模プログラムには適していない。
(稀に小規模でもクラス使ったほうが良い場合もある)
だからクラスを使うかどうかは考えた方が良い。
ただクラスを使わなくてもC++を使う価値は充分にある。
オーバーロード、新しいキャスト、名前空間…
少なくともCを使うよりは同じプログラムをC++で書いたほうが良いとも思う。(型チェックが厳しいから)
>(言語仕様が複雑すぎ)
頭に叩き込め。それしかない。
個人でする分にはリファレンス片手でも何とかならんでも無いが。
0416デフォルトの名無しさん
NGNG中学生ならふつー。
0417デフォルトの名無しさん
NGNG> 一般にクラスは大規模プログラムに適しているが、小規模プログラムには適していない。
おいおい…
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG最近ちょっと脳が衰えてきた。
OOの弊害だ
0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNGVC++6でスタティックリンクライブラリを作っています。
グローバル変数のコンストラクタを使ってライブラリの初期化を
自動的に走らようとしているのですが、上手くいきません。
どうも、グローバル変数の初期化単位が、ファイル毎のようで
ファイルにアクセス行かないとコンストラクタが実行されないのです。
コレなんとかならないでしょうか?
========== ライブラリコード ===========
--- a.cpp ---
struct A{ A(){ std::cout<<"A"<<endl; } } g_ob;
void test_a(){}
--- b.cpp ---
struct B{ B(){ std::cout<<"B"<<endl; } } g_ob;
void test_b(){}
========== クライアントコード ===========
void test_a();
void test(){ test_a(); }
main(){}
これで "A" は表示されるのですが "B" が表示されません。
なにか良い方法はありませんか?
0422デフォルトの名無しさん
NGNGクラス定義はヘッダーファイルに書いてインクルードしないとまずいんで
ないかい?
0423デフォルトの名無しさん
NGNGつーかグローバル変数の初期化タイミングは未定義なので
あてにすんのが間違い。
0424デフォルトの名無しさん
NGNGクライアントコードからb.cppへの参照が無いから、
最適化で落とされちゃってるんじゃないの
0425デフォルトの名無しさん
NGNGビルドの設定で.mapファイルを吐かせてみるとよいよ
0426デフォルトの名無しさん
NGNGiosクラスのメンバを含むクラスをグローバル領域で定義すると、実行時エラー
になるのはなぜでしょうか。コンパイラはBCC5.5.1です。
#include <iostream>
class C {
C() { std::cout << "C()" << std::endl; }
} cc;
int main()
{
}
これを実行すると、一般保護違反が出て止まります。
0427デフォルトの名無しさん
NGNGグローバル変数の初期化の順番は未定義だから。
その例なら、cc のコンストラクタより先に std::cout の
コンストラクタが呼ばれてる保証がない。
0428デフォルトの名無しさん
NGNGchar ch;
ifstream in(argv[1], ios::in | ios::binary);
in.get(ch);
とすると、読み出したいファイル中に2byte文字が存在するとget()は2byte文字を一気に読み込んでしまうのです。
in.read((char*) &ch, 1);
としても1文字づつしか読み込んでくれませんでした。
なにか良い方法あありますか?
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNG0431428
NGNGifsreamをいまいち理解できてないのですが、とりあえず2byte文字でも1文字として
読み取るようなので・・
>>430
ifstream in(argv[1], ios::in | ios::binary);
で自分的にはバイナリオープンしたつもりだったんですがほかの方法があるのでしょうか?
0432デフォルトの名無しさん
NGNGしまうということ?
0433デフォルトの名無しさん
NGNGありがとうございます。目から鱗が落ちるような思いです。
これを友達に見せて、悩ませてみようかと思います。
0434デフォルトの名無しさん
NGNGCygwin +gcc 2.95.3 および bcc32 で試したが、
ちゃんと1バイトずつで読み込んでいる。
0435428
NGNG申し訳ありません。勘違いだったようです。
ちゃん2byte文字部分も2byte目も読み込まれていました。
ただ、単純に
in.get(ch);
cout << (int)ch;
とやると、「A」ならば41と表示されるのに、「あ」ならffffff82(1byteめ)/ffffff82(2バイト目)
となっていました。
お騒がせしました。
0436421
NGNG直接、呼び出しているわけではないので多分平気です。
念のため、宣言だけ抜き出してクライアントに
インクルードさせてみましたが、結果は変わりませんでした。
>>423
未定義なのは翻訳単位での初期化順だと思っていたのですが。
mainが呼ばれる前にcpp_init?で初期化されるんですよね。
CPP_UNITでテストの登録とかもグローバル変数のコンストラクタで
やってたと思ったけど、違ったっけ?
>>424
>>425
一度.libに落ちているのですが、それでも削除されてしまうようですね。
未参照グローバル変数の削除は規約上、正当な最適化なのでしょうか。
コンストラクタで何をやっているか分からない以上、リンカで削るのは
無理な気がするのですが。
ライブラリ側のオプションで最適化の抑止は無理っぽいし、
皆さんなら.libファイルの初期化はどのようにやらせますか。
COMみたく明示的に呼び出させるのが楽は楽なんだけど。
0437デフォルトの名無しさん
NGNG.objをリンクするときに勝手に削除しちゃまずいだろうが、
.libの場合、必要な物を引っ張り出してきてくっつける(リンクする)わけだから、
判断できないんじゃないの?
賢いリンカなら出来るかも知れないけど、オバカなリンカだと
.libすべてをリンクする羽目になるよね。
0438デフォルトの名無しさん
NGNG>>436
> 未参照グローバル変数の削除は規約上、正当な最適化なのでしょうか。
リンカは参照されないシンボルを削除するんじゃなくて、
参照しているシンボルを再帰的に辿ってオブジェクトを集めるのが仕事
だと思うが、どうか。
>>436
>.objをリンクするときに勝手に削除しちゃまずいだろうが、
.objと.libってリンカの入力として区別されたっけ?
0439デフォルトの名無しさん
NGNG普通は区別される。
objをリンク指定したばあい、シンボルが参照されていなくてもリンクされるはず。
0440デフォルトの名無しさん
NGNGとりあえずやるほうほう。うまいかどうかはさておき。
(1)Cっぽいが安全
XXX_init() と XXX_end() を用意して、利用者に呼ばせる。
コンストラクタの呼ばれる順番に依存しないため、
それに起因するバグに悩む必要がなくなる。精神衛生上よろしい。
(2)C++にこだわる
初期化ルーチンをLIB_Initクラスのinit()メソッドに突っ込む。
LIB_Initクラスのインスタンス(init_obj)をグローバル変数として持たせる。
そのライブラリの関数全てが、最初にinit_obj.init()を呼ぶようにする。
(ライブラリを使う限り、このインスタンスはリンクされる)
LIB_Initクラスのデストラクタは、ライブラリの終了処理をする。
(2')init()を遅らせる必要がないなら、LIB_Initのコンストラクタで
初期化し、Lib_Init::check()で初期化の成否を返すようにし、
check()をライブラリの各関数が最初に呼ぶようにすればよい。
2,2'ともに、そのライブラリが全く呼ばれなければ
init_objが生成されない。よって気前よくリンクできる。
ただし、同じやり方をする複数のライブラリが相互に参照する場合は
大変面倒なことになったりするので(1)に回帰することもしばしば。
0441デフォルトの名無しさん
NGNGそれは C 言語の時代から有名な、符号拡張の罠です。0xff でマスクするか
unsigned char 使って下さい。
0442デフォルトの名無しさん
NGNGなるほど。ありがとうございます。
素直に0xffでマスクしてみます。
0443デフォルトの名無しさん
NGNGif(ch>=0xa0)とかいうような
0444436
NGNG>>437-439
私のリンカに対する理解が、間違っていたようです。
今まで、グローバル変数が削除されるなんて、思っても見なかったので
今回の件は、かなりショッキングでした。
私も、まだまだ勉強不足のようです。
参考になるレス、ありがとうございました。
>>440
> (1)Cっぽいが安全
やっぱりコレですか。
でも、初期化しなくても死ぬわけではない罠にかかりそうですね。
> (2)C++にこだわる
こっちも考えたんですが、どうせ自分のやることだから
仕様拡張したときに、呼ぶの忘れるだろうと考え直しました。
アドバイスどうもありがとうございました。
うーん、lib_mainが欲しい。
0445デフォルトの名無しさん
NGNG名前空間についてなんですが
あるファイルの中で定義されている名前空間を
2つ以上の別のファイルの中で使いたいのですが、どうすればよいのでしょうか。
ヘッダファイルの中に名前空間のメンバを記述して、
使いたいファイルの中でincludeすると、
すべてのメンバに「再定義されています」というエラーが出てしまいます。
レベルの低い質問だと思うのですが、良かったら教えてください。
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNGありがとうございます。
解決しました。
本当にありがとうございました。
0448デフォルトの名無しさん
NGNG最終手段としてCOMにするというのがあるが一般人にはおすすめできない
0449デフォルトの名無しさん
NGNGVBのSendkeysに相当する命令はC++には無いと思うのですが、
同じようなこと(ウィンドウにキーを送信)をさせるには
どうすれば良いのでしょうか?
現在C++をSDKから勉強中で、
できれば、MFCを使わずにできる方法があれば教えていただきたいのです。
よろしくお願いします。
0450デフォルトの名無しさん
NGNGSendMessageでWM_KEYDOWNとWM_KEYUPを送信しちゃどうだい
あと、これはC++というより、VC++とかWIN32APIとかのスレの方がいいな
0451デフォルトの名無しさん
NGNG0452sage
NGNG勘違いしてるぞ
0453デフォルトの名無しさん
NGNGいや、別に勘違いしているつもりはないがSendKeysは漢字を送れるんだよ。
SendKeysと全く同じ物を作るにはどうすればいいのかなと。
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNGkeybd_eventなら漢字を送れるということ?
0456450
NGNGWCHAR test[]=L"逝って良し";
for (int i = 0;i < 5;i++)
SendMessage (hWnd,WM_CHAR,test[i],1);
↑で送れると思うよ。
0457449
NGNGところでSendMessageでBackSpaceを送るにはどうすれば良いですか?
または、Alt+Cとか?
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNGスレ違いだから、↓とかで聞いて
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGオブジェクト指向:塊
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNGこいつを
BigNum a;
a = 10;
cout << a.ToInteger() << endl;
というような感じでやったんですが、ToInteger()を2回以上呼び出すとおかしな値になります。
ずいぶん悩んだんですが、原因がわかりません。
ちなみにVC++6.0です。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGoperator=などが一時オブジェクトを生成
↓
デフォルトコピーコンストラクタが呼ばれる
↓
一時オブジェクト消滅
↓
一時オブジェクトのデストラクタが呼ばれる。
↓
Num配列あぼーん
↓
もとのオブジェクトがNum配列参照
↓
プログラムあぼーん
0469465
NGNGなんとなく感じ分かりました。ありがとう御座います。
0470デフォルトの名無しさん
NGNG最低な言語だな。
0471デフォルトの名無しさん
NGNGそだね。return *this の時にコピーコンストラクタが呼ばれるのが原因だね。
なんちゅうややこしい言語なんだ。
0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNGEffective C++の11項「メモリを動的に割り当てるクラスでは、コピーコンストラクタ
と代入演算子を宣言しよう」当たりを参照。
0475デフォルトの名無しさん
NGNG結構複雑になりますが何か。
0476デフォルトの名無しさん
NGNGテンプレート使うのがそんな大そうな事か。つかコーディング楽になるもんだろ。
0477デフォルトの名無しさん
NGNG>>472
shareしたりauto_ptrで破壊したりしちゃったらダメだと思ふ…
0478デフォルトの名無しさん
NGNG(´Д`;)ヾ 473はこれからtemplateやSTL覚える人なんでかんべんしてください。
∨)
((
0479デフォルトの名無しさん
NGNG>>465の問題は他の言語では何もしなくてもコーディングが楽ですがなにか?
0480デフォルトの名無しさん
NGNGまさかtemplateやSTLは上級レベルとか言わないよね。
0481デフォルトの名無しさん
NGNG>>465の問題なんかどうでもよくて
テンプレートのことについて話してるんですが何か?
0482デフォルトの名無しさん
NGNG465の問題についてはって事。
0483デフォルトの名無しさん
NGNG俺は>>465の問題について話してる。これについては否定はしないようだね。
テンプレート自体は「テンプレートは何のためにあるか?」の答え通りに
使えば便利なのは良く分かっている。
0484デフォルトの名無しさん
NGNG(´Д`;)ヾ すいません
∨) 他の言語は>>465みたいなオブジェクトのコピーはどう行われるのか
(( このC++厨に教えてください
0485デフォルトの名無しさん
NGNG俺も vector 使うに一票だが auto_ptr 使うのは、コピーコンストラクタをきちんと
書くという条件の下では、問題ないと思うぞ。shared_ptr も参照カウントをチェック
して copy-on-write できるし。
>>479
楽な分だけ、代償は支払ってるけどな。
0486デフォルトの名無しさん
NGNG他の言語が何をさすかわからんがJavaやC#等はポインタ(参照)はshared_ptrとか適当なことを言ってみるテスト。
0487質問君
NGNGconst CTimeEx& operator=(time_t t);
のようになっている場合があるかと思うのですが、
この最初のconstってどういうことなのでしょうか?
戻り値のCTimeExの参照についてconst指定するって
いうのは、thisがconst?などと考えてしまうのですが
いかがでしょう?
無知ですみませんが、気になって仕方ないので...
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNGVC使ってれば使わない罠
0492C++初心者
NGNGプログラムを書き換えてもう一度実行しようとすると
書き込みモードで Debug/Sample1.exe を開けません
ってエラーが出るんですが原因として考えられるのはどんなことがあるんでしょうか?
0493質問君
NGNG戻り値または、*thisが変更不可能ということは、
定義内で、*thisに代入とかはできないことになるのですか?
それとも、戻り値が返された後、代入されたくないときに
指定するということですか?
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNGconstになるのはreturnを受けた側の話
0496デフォルトの名無しさん
NGNG>定義内で、*thisに代入とかはできないことになるのですか?
ではなく、単純に返却値を定数扱いするということ。
0497質問君
NGNGでも、returnを受けてそれに代入不可能
とかしたいということがあるんでしょうか?
具体的にはa=b=cとかしたくないってことですか?
というか、const指定するのが一般的なんでしょうか?
0498デフォルトの名無しさん
NGNG1 + 2 = 1 だめ
a + b = c いい(const無し)
a + b = c だめ(constあり)
0499デフォルトの名無しさん
NGNGことを保証するため。a=b=c で c と a の値が違ってたら困る。
0500デフォルトの名無しさん
NGNG0501質問君
NGNGありがとうございました。
日々精進します(^^;
0502デフォルトの名無しさん
NGNG実行したのを終了しなきゃね。
0503デフォルトの名無しさん
NGNGa=b=cには無関係。
0504デフォルトの名無しさん
NGNGauto_ptrわ?
0505デフォルトの名無しさん
NGNGそれより
operator =() の戻りが、参照になってないから、一時オブジェクトがつくられちゃうってだけでしょ。
0506デフォルトの名無しさん
NGNGfoo(a = b);
という場合、const A &operator=()ならエラーになるけど、
A &operator=()なら通る。あと、intの場合(i = 0) = 1
は正当だから、i = 0は左辺値になる。だから、constは
この場合付けない方がいい。
0507デフォルトの名無しさん
NGNG理由はEffectiveC++読むこと
0508デフォルトの名無しさん
NGNG>(i = 0) = 1
これは不定じゃないか?
0509デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNG702って何だろう?801みたいなもんか?072の間違い???
0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNGありません
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNG0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG貴様は本当に計ってみたのかと小一時間・・
0519デフォルトの名無しさん
NGNGそういう用途ならauto_ptrでも使っとけ。
ローカル変数やメンバ変数にするなら、重いはずは無い。
処理系によっては、むしろ型の情報を使った最適化が行われていて、
速くなるかも知れない。
何か理由があって、vectorを使えないなら、生のメモリが欲しいのか、
コンストラクト済のメモリが欲しいのかによってやり方は変わる。
前者なら直接malloc/realloc呼ぶのが正解。後者なら、もう1つ配列を
new[]して地道にコピーするのが正解。
malloc->construct->reallocでも良さそうだけど、reallocは
コピーコンストラクタを呼ばないで、単にメモリコピーをしてしまうから、
正しい挙動にするには、malloc->construct->malloc->construct->free
という手順を踏まなければならない。つまり、reallocみたいにコピーを
省略するのは無理。それならnew[]の方がまし。
0520デフォルトの名無しさん
NGNG必ずある時点でAborted(core dumped)
となって止まってしまいます。
通常のデバグの方法ではなかなか原因が検出できなくいきづまってしまいました
そこでcygnin上で動かしているgccが吐く
***.exe.stackdumpを調べれば原因がわかるかもと思っているのですが、
ちょっと読み方がわかりません。
これの便利な使い方ってどうやるのですか?
ちなみに簡単なアセンブラやレジスタの仕組みなどはわかります。
0521デフォルトの名無しさん
NGNGどうせスレ違い厨には分からないだろ。
0522デフォルトの名無しさん
NGNGgdbだ. ヒントだけあげるから自分で調べて.
0523デフォルトの名無しさん
NGNGAddAccessAllowedAceEx関数を使用し継承を設定したのですが、設定したフォルダの中に新しいフォルダを作成すると「継承元なし」のフォルダが出来てしまいます。
継承元を親フォルダに設定するにはどうしたらよいでしょうか?
OSはWindowsXPで、VC++のバージョンは6.0です。
0524デフォルトの名無しさん
NGNGスレ違いだボケ
win32apiスレに行け
0525デフォルトの名無しさん
NGNGint a;
int b;
void show() { printf("a:%d b:%d", a, b); }
};
上のようなクラスがあり、そのインスタンスを複数作った場合、
show()のためのメモリも複数確保されるのでしょうか?
厨な質問ですみません。
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGshow()自身により消費されるメモリはそのコード本体のみ。
インスタンスを作ろうが作るまいが関係ない。
0528デフォルトの名無しさん
NGNGクラス内に関数を定義するとinline宣言だから違うかもよ?
もっともクラス毎ではなくて、呼び出し毎になるが。
0529デフォルトの名無しさん
NGNGユークリッドの互除法か?それが何か?
0530デフォルトの名無しさん
NGNGinlineされたとしても、コード本体のみ
という表現に間違いはないと思いますが...
0531デフォルトの名無しさん
NGNGんだね。スマソ。
0532デフォルトの名無しさん
NGNGclass A{
public: A(){m_a=3;}
protected: int m_a;
};
class B{
public:int func(){
class fl_A: public A{
public:
void operator=(const A &in_A){
A *a_A = this;
*a_A = in_A;//ダメポ… }
int Get_m_a(){//B::m_A::aにアクセスしたいけど、friend関数は使いたくない。
return m_a;
}
};
fl_A a_flA = m_A;
return a_flA.Get_m_a();
}
private: A m_A;
};
int main(){
B a_B;
std::cout<< a_B.func()<<std::endl;;
return 0;
}
クラスBのメンバのインスタンスAのprotectedなメンバにアクセスしたいのですが、
friend関数を使わずに無理やり実装したのですが、
多分、処理系依存とかだと思うのですが、どういう風にコンパイラは解釈するのでしょうか…
おとなしくfriend使って実装するつもりですが、気になったので教えてください。
0533532
NGNGfl_A a_flA = m_A;
↓
fl_A a_flA;
aflA = m_A;
初期化と代入を間違えました。
0534デフォルトの名無しさん
NGNGint func()内の、fl_A a_flA = m_A; だけど、これはコピーコンストラクタがないと
コンパイルできないよ。
fl_A a_flA;
a_flA = m_A;
と二行に分けたら?
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNG処理系依存と書きながら処理系を指定しないのはどうして?
0537デフォルトの名無しさん
NGNGと言うか、文法上?の誤りを指定して欲しかったのかな…
この書き方だとコンパイラーがこういう風に解釈しても構わないから、
こう言う風になってバグが発生するみたいな…
一応コンパイラーはMS Visual C++ Professional 6.0 sp5を使っています。
0538デフォルトの名無しさん
NGNG自由に変えてよいから、fl_A a_flAとA m_Aの順序が入れ替わるかも
しれない、というのはダメ?
0539デフォルトの名無しさん
NGNG良いです!
つうかそんな卑怯な仕様があったのですか(笑)
なるほど
それなら確かに駄目ですね。
しかし、c++って深いですね…
0540デフォルトの名無しさん
NGNG今ソース探してるから、信じるのは後にしてね。
0541デフォルトの名無しさん
NGNG各々のデータメンバをまとめることがあるから、データメンバの並び方に
依存したプログラムを書いてはいけない、という文を。
0542デフォルトの名無しさん
NGNGでも本当っぽいですね…
自分も少し探してみましたが見つかりませんでした。
0543デフォルトの名無しさん
NGNGplacement new?
0544520
NGNGありがとうございますgdbを使用して
だいたいの原因を切り分けられるようになりました。
しかし今度は実行時にsignal6エラーを吐いて失敗するようになりました。
このエラーはなんなのでしょうか?検索エンジンで調べても不思議なほど
情報が少ないですね。
別に珍しいエラーではないと思っているのですが・・
0545デフォルトの名無しさん
NGNG> fl_A a_flAとA m_Aの順序が入れ替わる
って、 a_flA はローカル変数で m_A は B のメンバですよね?
ローカル変数に public も private も関係ないし、
入れ替わるってどういうこと?
0546デフォルトの名無しさん
NGNGhttp://www.google.com/search?q=signal+6+gdb&ie=euc-jp&hl=ja&lr=lang_ja&btnG=Search
腐る程当たりますが何か?
0547デフォルトの名無しさん
NGNG受けるというのと混同してるのでは。
0548デフォルトの名無しさん
NGNG指してる先は>>544じゃないのか?
というわけで>>546はポインタのミスに気を付けよう:)
0549デフォルトの名無しさん
NGNGして
myClass *myclass = new myClass("test");
vec.push_back(vec);
したばあい
vec.clear()で廃棄おっけーですか?
それともdelete vec[0]が必要なのでしょうか?
これだと結局vectorの要素一つ一つを回していかないといけませんよね?
0550デフォルトの名無しさん
NGNGいやならスマートポインタ使え。イジョ。
0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG「タイシタコトナイヨネ」
0553デフォルトの名無しさん
NGNGたいしたことある答えが必要なら、たいしたことある質問してください。
0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG・・・・・
え?
0556デフォルトの名無しさん
NGNGvec.push_back(vec);
0557デフォルトの名無しさん
NGNGstruct charactor{
public:
float posX,posY;
};
class CLeft{
public:
charactor *C;
void SetP(charactor *Chara){C=Chara;}
float GetP(){return C->posX;}
};
class CRight{
public:
charactor Own;
CRight(CLeft cl,float px){Own.posX=px;cl.SetP(&Own);}
};
int main(){
CLeft cl;
CRight cr(cl,1.0f);
cout << cl.GetP() ;
return 0;
}
コンパイルは通るのですが、これを実行すると、エラーが出てしまいます。
構造体のポインタを宣言したところがまずいようなのですが、何が悪いのか
自分ではわかりません。アドバイスお願いします。
0558デフォルトの名無しさん
NGNGCRight(CLeft& cl,float px){Own.posX=px;cl.SetP(&Own);}
~~
0559デフォルトの名無しさん
NGNGしかし、なぜこの状況でアドレスで引数を宣言しないといけない理由が
わかりません。もっと精進して参ります。
0560デフォルトの名無しさん
NGNGプリプロセッサ命令は一行に複数書くなよ。変だよ。すごく変だよ。
0561デフォルトの名無しさん
NGNG値渡しだとCRightのコンストラクタを呼び出す際に、CLeft型の一時変数が
作られ、それが渡される。
そしてSetPはこの一時変数のアドレスをcharacter *Cに代入するため、コン
ストラクタの実行が終わった時点で一時変数は消去され、*Cはダングリング
ポインタとなる。
このポインタに対しGetP()を起動すれば何が起きてもおかしくない。
0562デフォルトの名無しさん
NGNGと思ったが、微妙に違ってた。
cl本体の*Cには何も代入されてない状態でGetPを呼び出しているのでした。
だから何が起きてもおかしくない、と言い換えます。
0563デフォルトの名無しさん
NGNG関係ないですが、#include <iostream>は使えないのですか?
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNGvoid main()
{
ifstream ud;
ud.open("test.dat");
if(ud.bad()){
cerr<<"can't open file\n";
}
ud.close();
}
を作成・実行すると、"test.dat"なるファイルが存在しないにもかかわらず、なぜかサイズ0の
ファイル"test.dat"を勝手に作成して、 if(ud.bad()){} を素通りしてしまいます。
どうすればファイルを勝手に作らないように出来るでしょうか?
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGud.open("test.dat",ios::nocreate);
if(ud.fail()){…}
0568デフォルトの名無しさん
NGNGCでいろいろ関数を書いて、DLLにしておけば
VBなどで呼べますよね
なら、C++でクラスを用いてライブラリを書いたとき
COMを使わずにVBから呼べるDLLって作れるんですか?
0569デフォルトの名無しさん
NGNG1件につき最大10.000円の高額収入。月収100万円以上も可能。
■画期的なビジネス!
インターネットを利用したこれまでにない斬新で画期的なビジネスです。
■誰でも出来ます!
インターネットができる環境の方なら誰でも参加可能です。
インターネットを利用したビジネスですので、自宅や会社で好きなときにで
きるビジネスです。
■専門的な知識は一切不要!
ビジネスに必要なツールは全て当社で用意いたします。
また、サポートも万全です。
■詳細は今すぐこちらから
http://www.bea.hi-ho.ne.jp/paisen/
0570デフォルトの名無しさん
NGNGvoid main() 気持ち悪い
0571デフォルトの名無しさん
NGNGint main(int argc, char **argv)だろうがと小一時間(略
// int main(int argc, char **argv, char **env) ってのもあるね。
0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNG0575デフォルトの名無しさん
NGNGVC++6.0のヘルプから抜粋。
0576デフォルトの名無しさん
NGNG>>575
それが本当に void main() と書くヤツがいる「原因」なのか?
0577デフォルトの名無しさん
NGNGA *a;
があって
((AA)(a[i])).foo (); はダメで
((AA*)(a))[i].foo (); はOKなのは何故でしょうか?
0578デフォルトの名無しさん
NGNGAからAAへの変換コンストラクタが必要
>((AA*)(a))[i].foo ();
A*からAA*にstatic_castされる。
コンパイルできるからといってOKとは限らない
0579デフォルトの名無しさん
NGNGだって、小規模なテストするには楽なんだもん…
0580デフォルトの名無しさん
NGNG多分ああいう教師のせいだと思います。
もちろん私はdouble main()にしていますが。
0581デフォルトの名無しさん
NGNGvoid main()よりもint main()の方が短くていいじゃん。
mainのreturnは省略してもいいんだし。
0582デフォルトの名無しさん
NGNGvoid main() でもエラーでないんだし
0583デフォルトの名無しさん
NGNGVC6なら警告も出ないね(/W4)
0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNGint main(int, char **)
int main(int, char **, char **)
これら以外は main() と認められず。
0586デフォルトの名無しさん
NGNGいつコンストラクタが呼ばれるか不定という話がありましたが
グローバルなクラスのポインタ(Class* ctest;)を用意して
mainでインスタンス生成(Class c;)→ポインタコピー(ctest = &c;)
extern Class* ctest;で別モジュールから弄ったりしたら
怒りますか?
0587デフォルトの名無しさん
NGNGC++ではint main(int, char **, char **);も認められたのか?
0588デフォルトの名無しさん
NGNG「main に入った時後、最初に使う瞬間」にならどのグローバルインスタンスも
初期化されていることは保証されてように読めるので、それは
あまり意味がないのではなかろうか。
> [3.6.2]
> It is implementation-defined whether the dynamic initialization
> ...(略)... is done before the first statement of main or deferred to
> any point in time after the first statement of main but before the
> first use of a function or object defined in the same translation unit.
0589デフォルトの名無しさん
NGNGmain以前にctestを使わなければ問題ないのでは?
でも、もしそうなら別に実体でも構わないと思うけど・・・
0590デフォルトの名無しさん
NGNGEmbedded C++/C99ではvoidも認められてはずですが何か?
0591デフォルトの名無しさん
NGNGCやその他のライブラリ関数を使わないなら問題ない
0592586
NGNG実は、初期化とか面倒なウィンドウの生成と
DirectDrawをひとまとめにしちゃって
他のモジュールからはDirectDrawオブジェクトのインスタンスしか
見えないようにしたいナァという話なのです
0593デフォルトの名無しさん
NGNGfreestanding まで視野に入れて議論するのは無意味だろ。そもそも組み込み系
だと「終了してはいけない = main から return した瞬間にハングアップ」とか「エン
トリポイントが main じゃない」とかもアリアリだから。
hosted environment では C99 でも main は int のみ。以下、規格書から抜粋。
> 5.1.2.2.1 Program startup
> 1 The function called at program startup is named main. The implementation declares no
> prototype for this function. It shall be defined with a return type of int and with no
> parameters:
>
> int main(void) { /* ... */ }
>
> or with two parameters (referred to here as argc and argv, though any names may be
> used, as they are local to the function in which they are declared):
>
> int main(int argc, char *argv[]) { /* ... */ }
>
> or equivalent; or in some other implementation-defined manner.
0594デフォルトの名無しさん
NGNG組み込み系まで視野に入れて議論するのは無意味だろ。
0595593
NGNG俺に言うなよ。void main() が OK っつーのは freestanding の話で、即ち
組み込みなんかも視野に入れての意見なんだから >>590 に言ってくれ。
0596デフォルトの名無しさん
NGNG無難な方法を使うってことができないのか?
0597デフォルトの名無しさん
NGNG自分を捨てたプログラミングなんて、やってらんない。
だから俺はいつでも void main(void)。
没個性プログラマーは、社会の歯車になって埋もれてしまえばいいよ。
0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNG創造性がない奴に限って、どうでも良いところで差別化を図りたがる(w
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNG単なる独りよがり。別名ワガママ。
0602デフォルトの名無しさん
NGNGらしいよ。注目だね。
0603デフォルトの名無しさん
NGNGそろそろ「釣れた」と書いて逃げる頃合でしょうか?(^^)
0604デフォルトの名無しさん
NGNGマイクロソフトのC++でアプリの作製方法等を詳しく解説した
HPありませんか?
なかなか見つからないので、お願いいたします。
0605デフォルトの名無しさん
NGNG0607597
NGNG0608デフォルトの名無しさん
NGNG仕方なしにマルチしますすいません。
あっちでは間違っているといわれたけど、どのあたりがおかしいんでしょうか?
0609デフォルトの名無しさん
NGNGオブジェクトの作成ではなくオブジェクト用のメモリ確保と初期化って事か?
0610608
NGNG0611デフォルトの名無しさん
NGNGあってるから安心しろ。強いて言えば>>609だが。
0612608
NGNG0613デフォルトの名無しさん
NGNGから便利だね。mallocだと明示的にコンストラクタ呼び出さないといけ
ない。
0614デフォルトの名無しさん
NGNGこれが俺のPolicy!
0615614
NGNG0616デフォルトの名無しさん
NGNGなんか意味あんの?
0617デフォルトの名無しさん
NGNG有効なテクだろうが、delete NULL; の必要性がわからない。
0618デフォルトの名無しさん
NGNG::Sleep(0)(あるいは1)なら分かるけど
0619デフォルトの名無しさん
NGNGは型がわからないからコンパイル通らないと思った
0620デフォルトの名無しさん
NGNGのでこちらに投稿させていただきます.
C++で数値計算のプログラムを書いてます.ある変数(double型)を
volatileをつけて宣言した場合と,そうしなかった場合で,計算結
果が異なってしまいました.コンパイラによる最適化が問題かと思
い,最適化しないようにオプション(-O0)をつけてコンパイルしたの
ですが,結果は変わりません.これはコンパイラのバグでしょうか?
あるいは,C++の仕様の範囲内でしょうか?コンパイラはg++を使用し
ております.
0621デフォルトの名無しさん
NGNG0622デフォルトの名無しさん
NGNGなぜvolatileをつける必要がある?
0623デフォルトの名無しさん
NGNGvolatile をつけた時と、つけない時でどっちの結果が正しいの ?
また、マルチスレッドは使ってるの ?
0624デフォルトの名無しさん
NGNG>>620
volatileは本来の変数の値には影響しない。g++のバージョンとCPUの組
み合わせによるバグかもしれない。
0625620
NGNG>>622
元々,同じ計算を実行する(と私が思っている)ソースが2つあるのですが
2つの計算結果が違ってしまったんですよ.いろいろ検証してみた結果,
問題の変数が,一方ではグローバル変数,もう一方ではメンバ変数になっ
ているのが原因らしいということがわかりました.で,メンバ変数の方を
volatileつけて宣言するか,定数に置きかえれば,2つの計算結果が完全
に一致したわけです.私としては,最適化の副作用かなと思って,-O0と
してみたわけですが,これは効果なしでした.
>>623
どちらが,正しい結果かはわかりません.また,マルチスレッドでは
ありません.コンパイルして,ターミナル上から 普通に(?)実行して
います.解いているのは微分方程式です.非線形項が入っているとは
いえ,同じ計算機で,みため同じソースなので,同じ計算結果が出ない
とおかしいと思うのですが.レジスタに割り当てられる際に値が変更
されることも考えにくいし,丸め方か何かが影響しているのでしょうか.
0626620
NGNGgccの2.96とPentium3で主に実行していました.CPUのバグも
疑って,Pentium2,Pentium4で実行してみましたが,改善され
ませんでした.gccをバージョンアップした方が良いのでしょうか.
0627デフォルトの名無しさん
NGNGただいま戦闘中!!!
嫌いな人はこちらへ漏れなく串つき
http://live.2ch.net/test/read.cgi/festival/1029826982/l30
0628デフォルトの名無しさん
NGNG2.96でそんなバグは聞いたことがないけどなあ。Pentium3ならなおさら
バグはないでしょう。
3.2が出ているからバージョンアップしてみるのも手です。
0629デフォルトの名無しさん
NGNGその違いって、誤差レベルなの ? だったら、計算順序による丸め誤差の
影響はありえる。(丸め誤差については、C++ の仕様の範囲外。)
0630デフォルトの名無しさん
NGNGtemplate<class A, class B>
class C
{
...;
};
template<class T>
class C<int, T>
{
...;
};
と言う感じで
0631622
NGNG文面から見る限りではvolatileで何かが変わるとは思えないし、コンパイラのバグもそうそうあるものじゃない。
ソースを見ないとなんともいえないけど、ステップ数はどのくらい?
どっかに上げれば暇だからみてもいいよ。
0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNGVC++6.0にて配列を作るのに、一次元ならば
double *test;
test = new double[2];
…
delete[] test;
test=NULL;
で実現できるのですが、二次元以上になるとエラーが出てきて実現できません。
一体どのように解決すれば宜しいのでしょうか?よろしくお願いします。
0634デフォルトの名無しさん
NGNGちょっと勉強になった.
0635デフォルトの名無しさん
NGNG二次元以上は自分で確保する
char **pStr = new char[5];
pStr[0] = new char[100];
.
.
.
0636620
NGNGありがとうございます.試してみます.
>>629
差は時刻とともに爆発的に増大します.系の性質から,微小誤差が指数
関数的に拡大することは承知しています.ですが,表面上同じコードが
volatileをつけるかつけないかで,違う結果を出すといったことがある
と,コンパイラのちょっとしたさじ加減で,異なる計算結果が得られて
しまうかも〜と不安になりまして.
計算順序はソースレベルでは同一です.丸め誤差がC++の仕様の範囲外
ということは,丸めに関しては,コンパイラあるいはCPUに依存すると
いうことでしょうか.
0637デフォルトの名無しさん
NGNG体が満たされないってこういうことを言うのね(涙
0638デフォルトの名無しさん
NGNG> 計算順序はソースレベルでは同一です.
かなり注意深く書いてないと、ソースレベルで計算順序なんてわからない
ぞ。
> 丸めに関しては,コンパイラあるいはCPUに依存するということでしょ
> うか.
あたり。
とりあえず、gcc なら long double とかが使えるらしいので、試してみ
たら ?
0639デフォルトの名無しさん
NGNGレス有難う御座います。が、やはりできません。
double **test = new double[i];
はもちろんのこと
double **test = new *double[i];
もエラーで弾かれてしまいます…
0640デフォルトの名無しさん
NGNG0641デフォルトの名無しさん
NGNG#include <fstream>
int main()
{
double d = 1.000001, dd = d;
volatile double e = 1.000001, ee = e;
std::ofstream of("test.txt");
for (int i = 0; i < 1000000; i++) {
of << d << ' ' << e << ' ' << d - e << std::endl;
d *= dd;
e *= ee;
}
}
0642デフォルトの名無しさん
NGNGおおおぉ〜!いけました。哀れな初心者に親切なご指導を有難う御座いました!
0643620
NGNGありがとうございます.ですが,ソースは,見せると素性がばれ
ますのでお見せできませんm(__)m.ステップ数というのは「ステ
ップ」の意味を存知ませんので,いくつかわかりませんが,ソース
の中では,微分方程式を解く際の刻み幅500個分の計算を行っています.
250個めまでは,ほぼ一致しますが,以後は全く解の軌跡が異なります.
お返事頂いた皆様に感謝します(わざわざプログラムまで書いて頂きまして).
皆様のお返事を見ていると,問題は,丸め誤差であって,volatileをつ
けて計算結果が一致したのは,副次的な作用に過ぎないようですね.
そもそも,このような計算が,私の目的に沿って必要なことかどうかと
いうこと自体を,改めて考えなおす必要もありそうです.
というわけで,今日は(勝手ながら)ここらで収束させて頂きます.
また,何かありましたら,お願いいたします.
0644デフォルトの名無しさん
NGNGステップ数はおおざっぱに言えば、ソースプログラムの行数のこと
0645デフォルトの名無しさん
NGNGだなあ。特に難しい事はしてなかったように思うんだけど。
0646デフォルトの名無しさん
NGNG俺ならアセンブラコードを出力させて、差を追ってみるけどな。
0647デフォルトの名無しさん
NGNG吐き出しました。
movl%ebx, -320(%ebp)
movl%esi, -316(%ebp)
fldl-320(%ebp)
movl-300(%ebp), %eax
addl$16, %esp
fmullLC0
incl%eax
movl%eax, -300(%ebp)
fstpl-320(%ebp)
fldl-32(%ebp)
fldl-40(%ebp)
movl-320(%ebp), %ebx
movl-316(%ebp), %esi
fmulp%st, %st(1)
fstpl-32(%ebp)
jmpL42
0648デフォルトの名無しさん
NGNGC++には、デストラクタの呼び出し方法は存在するけど、コンストラクタのそれは存在しないだろ
0649デフォルトの名無しさん
NGNGmovl%ebx, -304(%ebp)
movl%esi, -300(%ebp)
fldl-304(%ebp)
movl-284(%ebp), %eax
addl$16, %esp
fmullLC0
incl%eax
movl%eax, -284(%ebp)
fstpl-304(%ebp)
movl-304(%ebp), %ebx
movl-300(%ebp), %esi
そしてこちらがvolatileの計算部分です
fldl-32(%ebp)
fldl-40(%ebp)
addl$16, %esp
incl%ebx
fmulp%st, %st(1)
fstpl-32(%ebp)
jmpL42
volatileと指定すると一度FPUにデータを読みとった後mulを実行している
ように見えます。
0650デフォルトの名無しさん
NGNGLC0:
.long208632331
.long1072693249
volatileではこのような不変の値をも変数として扱うようにするようです。
0651デフォルトの名無しさん
NGNG確かにそうですね。やるとすればコンストラクタと同じ中身を持つ関数を
定義しておいて、それを後から呼び出すしかないですね。
0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNGnew( p ) T( ... );
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNGnaru
0656デフォルトの名無しさん
NGNGA* a;
a->A::A();
0657デフォルトの名無しさん
NGNGC++標準ならできるが、Visual C++ならできない。
この場合はインナークラスで代用することはできる。はず(笑)
template<class A, class B>
class C
{
template <typename T> class sub {
public:
B func(T a) { ... }
...;
};
template<> class sub<int> {
public:
B func(int a) { ... }
...;
};
sub<A> impl;
public:
B func(A a) { return impl.func(a); }
};
0659630
NGNG感謝感激です。
0660デフォルトの名無しさん
NGNG何これ。
0661デフォルトの名無しさん
NGNG#include <iostream>
#include <cstdlib>
#include <cstring>
class A {
char* ptr;
public:
explicit A(char* str) { ptr = static_cast<char *>(std::malloc(strlen(str) + 1)); }
operator char*() const { return ptr; }
~A() { std::free(ptr); }
};
int main()
{
A* ap = static_cast<A*>(std::malloc(sizeof(A)));
ap->A("string");
std::cout << *ap << std::endl;
ap->~A();
free(ap);
}
0662デフォルトの名無しさん
NGNGnew(ap)("string")だろ。
0663デフォルトの名無しさん
NGNG#include <iostream>
#include <cstdlib>
#include <cstring>
class A {
char* ptr;
public:
explicit A(char* str)
{
ptr = static_cast<char *>(malloc(strlen(str) + 1));
strcpy( ptr, str );
}
const char* c_str() const { return ptr; }
~A() { free(ptr); }
};
int main()
{
A* ap = static_cast<A*>(malloc(sizeof(A)));
ap->A::A("string");
std::cout << ap->c_str() << std::endl;
ap->A::~A();
free(ap);
return 0;
}
つーか、素直にoperator new オーバーロードしようぜ
0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNGコンパイラが volatile を正しく処理しているようにしか見えないが
0666デフォルトの名無しさん
NGNG殆どの CPU では、処理のわずかな違いで計算結果が変わってしまう。
なお、大抵のコンパイラでは、計算精度を一定に保つオプションがある。
0667デフォルトの名無しさん
NGNG疑ったけど、-O0すると必ずメモリにストアするから違うねえ・・・
0668デフォルトの名無しさん
NGNGx87 って、確か浮動小数点レジスタの精度は 80bit (double の 64bit より長い)
あったよね。
64bit の即値とかけ算する fmull と、80bit レジスタ動詞でかけざんする fmulp
で精度に狂いが出てるんじゃないの?
0669デフォルトの名無しさん
NGNGそれから-O0やvolatileだったら、計算するたびにメモリにストアするから
その都度64bitになってる筈
0670デフォルトの名無しさん
NGNGダウト
ANSI C++ の規格書から抜粋。
> 12.1 Constructors
> 1 Constructors do not have names. ...
> 2 ... Because constructors do not have names, they are never found during name lookup; ...
クラス A のコンストラクタは A() という名前では呼べません。
0671デフォルトの名無しさん
NGNG嫌ならこういう関数でも書くか?
template< typenameT >
inline T* CallConstructor(T& instance)
{ return new( &instance ) T; }
0672デフォルトの名無しさん
NGNGFactory だな、そりゃ。
0673デフォルトの名無しさん
NGNGinstance を最初期化であぼーんだな、そりゃ。
0674デフォルトの名無しさん
NGNG下記のような事がしたいです。(擬似コード)
template<class T, const_value V>
class hoge
{
public:
static T s = V;
static T getClassValue()
{
return s;
}
};
よろしくお願いします。
0675デフォルトの名無しさん
NGNGテンプレにしなくても、コンストラクタにでも渡すようにしたら?
0676デフォルトの名無しさん
NGNGintなら渡せるはず。
0677デフォルトの名無しさん
NGNGtemplate<class T, T V> でどう?
T にclass型は渡せないけど。
渡せるのは、組み込み型ならいけるんだったかのぅ。
ポインタ型のときはその値は外部リンケージが要る。
0678デフォルトの名無しさん
NGNGA a = 初期値;
と
A a(初期値);
って同じ物だと思っていましたが、もしかして動作がちがうのですか?
0679674
NGNGみなさんレスありがとうございます。
実は渡したいのは関数ポインタ、それもメンバ関数ポインタなのです。
「プロパティ」みたいなテンプレートクラスを作りたいのですが…。
0680デフォルトの名無しさん
NGNGexplicitを付けてコンストラクタを定義すると、前者の形は使えなくなる。
0681674
NGNG現在は >>675 さんの案のようにコンストラクタで渡す方式(動的バインド)で
試しているのですがこれも現状うまくいっていません。
クラスの宣言の中では、そのクラス名ってテンプレート引数に渡せないのでしょうか?
VC6 だと
error C2027: 認識できない型 'ClassName' が使われています。
のようなエラーが出てしまいます。
下記は試している途中のコードです。
template <class Subject, class MemberFunc> class MemberFuncCaller
{
private: Subject& subject_;
private: MemberFunc operation_;
public: MemberFuncCaller(Subject& subject, MemberFunc operation)
: subject_(subject), operation_(operation){}
public: void Do(){ (subject_.*operation_)(); }
};
class User
{
typedef void (User:: *UserFunc)();
public: inline void MemFunc(){ printf("Do it, ok!\n"); }
// ここでコンパイルエラー
MemberFuncCaller<User, User::UserFunc> DoObject(user, &User::MemFunc);
};
解決策をご存知の方よろしくおねがいします。
0683デフォルトの名無しさん
NGNGこんな感じか?bcc5なら通った。
あと、VC6でtemplateを使いまくるのはかなりキッツイので覚悟した方がいいぞ。
template
<
typename Value,
typename Class,
Value (Class::*Getter)(),
void (Class::*Setter)(Value)
>
class property { ... };
//property<std::string, SomeClass, &getName, &setName> name;
0684デフォルトの名無しさん
NGNGその通り。
>A a = 初期値;
コピーコンストタクタが呼ばれる
>A a(初期値);
直接初期化 A::A(初期値)が呼ばれる
ただし、RVOによりコピーコンストラクタは省略されることもある。
explicitは初期値がA型なら問題ない筈
0685デフォルトの名無しさん
NGNG#include <iostream>
class A {
int x;
public:
explicit A(int i) { x = i; }
void print() const { std::cout << x << std::endl; }
};
int main()
{
A a(1);
//A b = 2; //エラー
A b = A(2);
a.print();
b.print();
}
0687デフォルトの名無しさん
NGNGプロパティということは、メンバ関数をオーバーロード
している?
たしか、多重定義されているメンバ関数のポインタは、
テンプレートの引数として使えないはず。
0688674
NGNGVC6 だと property のインスタンスの宣言時に「特殊化」のエラーが出ます。
メンバ関数へのポインタから通常の関数へのポインタへの変換ができない
という内容みたいです。
特殊化も、メンバ関数ポインタから通常の関数ポインタへの変換もしてないのですが…。
>>687
いえ、メンバ関数は一個です。
現状の悩みは >>681 でも書きましたが、
このクラスを利用したいはずの、利用側クラスの内部に宣言が書けない事です。
相変わらず 認識できない型 'ClassName' が使われています が出てしまいます。
0689674
NGNGメンバ関数ポインタから関数ポインタへの変換ができないというエラーは出ません。
でるのは
error C2973: 'property' : テンプレートの仮引数 'Getter' が無効です。
でした。
さっきのエラーは Value (Class::*Getter)() を書き間違えて
Value (*Getter)()
とした為にでていました。
0690bloom
NGNGhttp://www.leverage.jp/bloom/start/
0691デフォルトの名無しさん
NGNG> // ここでコンパイルエラー
> MemberFuncCaller<User, User::UserFunc> DoObject(user, &User::MemFunc);
これって typo?
MemberFuncCaller<User, User::UserFunc> DoObject(User, User::UserFunc);
ではなくて?
0692683
NGNGちゅーかよく見たらあーた、クラス定義の中で
コンストラクタは呼び出せないよ、そりゃ。
× MemberFuncCaller<User, User::UserFunc> DoObject(user, &User::MemFunc);
○ MemberFuncCaller<User, UserFunc> DoObject;
○ User() : DoObject(*this, &User::MemFunc) {}
0693620
NGNG>>668 などで指摘されている通り,double型(64ビット)の変数がレジスタ
(80ビット)に割り当てられた際に,余分な桁がまぎれこみ,計算結果に
違いが出たようです.
私が思いついたのは次の2つで,結局,2を選択しました.
1. g++のコンパイルの際に-ffloat-storeオプションをつける.
これにより,double型(64ビット)変数のレジスタ(80ビット)への割り
当てを抑制できました.
2. double型の変数をlong double型で宣言しなおす.
もともとlong double型は80ビットですので,レジスタに割り当てても
不要な桁が入りこまないようになります.
ちなみに,計算速度は,1,2で,大きな差はありませんでした.
0694674
NGNG???? テンプレートじゃない普通の引数に型名ですか?よくわかりません。
>>692
しまった。この間仕事で Java とか使ってたので宣言時に初期化できるような気になってました。
これを適切に直しても VC6 だと利用側のクラス名を判別できないエラーが出ます。
bcc ならできるとの事なので、いまインストールしてみたのですが、たしかにコンパイルできますね。
ところで、この場合、Getter と Setter はどうやって使えばいいのでしょうか?
template <typename Type, class ClassName, Type (ClassName::*Getter)(), Type (ClassName::*Setter)(Type)>
class property
{
private: Type m_Value;
public: ClassName x;
public: Type& operator= (const Type& rhs){ return (x.*Setter)(rhs); }
public: operator Type() { return (x.*Getter)(); }
};
class User
{
private: int v_;
public: int Get(){ return v_; }
public: int Set(int v){ v_ = v; }
property<int, User, &User::Get, &User::Set> ValueProperty;
public: User() : ValueProperty(){}
};
としてmainとかで
User user;
user.ValueProperty = 50;
printf("%d", user.ValueProperty);
こうすると、未定義の構造体 'User' というエラーが出てしまいます。
なぜでしょうか?
0695デフォルトの名無しさん
NGNGうーん、そうだとしても、-O0で、volatileとそうでないものに違いがでる
というのは納得行かんなあ・・・
まあ解決して何よりなんだけど・・・
0696デフォルトの名無しさん
NGNGDoObject(…) ってのはメンバ変数定義(のつもり)かよ…。関数宣言かと思った。
0697674
NGNGよく Java や C# とごっちゃになるんです。
まんま Java/C# 式のまちがいをした時は
「へんてこな純粋仮想関数の宣言です!」とか怒られるんですよ。
今日はもう寝ます。みなさんありがとうございました。
質問者が寝てしまっても、次にきた時の参考になるように
アドバイスを残してくださる優しい方がいた時のためにあらかじめ
書いておきます。
ありがとうございます!
0698デフォルトの名無しさん
NGNGそれともprivateから書く?
0699デフォルトの名無しさん
NGNG見た目効率〜とかいうスレがあったと思うからそっち逝け。
0700デフォルトの名無しさん
NGNGpublic -> protected -> private
全部pからはじまるのがむかつく。・・・・なんとなく。
0701デフォルトの名無しさん
NGNGpublic フィールド
protected フィールド
private フィールド
public メソッド
protected メソッド
private メソッド
0702デフォルトの名無しさん
NGNGすまぬ。
>>700
今、僕もそうしています
>>701
フィールドとメソッドで分けるの?
結構、private (先頭無指定)から 書いてあるソースを見かけることが多いので、
ほかの人はどうしているのかと思い、質問してしまいました。おじゃましました。
0703620
NGNG確かに,-O0で最適化を抑制しているのにvolatileの有無で結果が違
うのは,変数がレジスタに割りつけられている可能性が出てきておか
しいと思います.もう少し検証して何か出たら,また報告します.
0704デフォルトの名無しさん
NGNGそりゃスコープ省略すると勝手にprivateになるからだろw
0705701 ◆k/Ubp.Kg
NGNG分ける。理由は特にない(藁。つか、フィールドとメソッドが一緒だと読みにくいのよね、俺的に。
まぁ趣味だから、どう書くかよりも統一されてるコトの方が重要だと思ってる。
>>704
そうだね。俺、あれが好きじゃないからpublicを頭に回してprivateを明示的に書くようにしてまふ。
これもやっぱし趣味だな。
0706704
NGNG利用者がスグに知りたいパブリックメンバを前に、
プライベートなメンバは後ろ〜の方に書いてます
そもそも外から見られたく(いじられたく)なくてプライベートにしてるのに
真っ先に書いてあるのは不自然じゃないか、と
0707683
NGNG> public: ClassName x;
これだとUserの中にproperty<..User..>の中にUserの中にproperty<..User..の中に…
の無限入れ子になってしまう。C++はJavaじゃないので参照なりポインタなりは
そのむねちゃんと書かんといかんよ。
template <typename Type, class ClassName, Type (ClassName::*Getter)(), void (ClassName::*Setter)(Type)>
class property
{
private: Type m_Value;
public: ClassName& x;
public: property& operator= (Type rhs){ (x.*Setter)(rhs); return *this; }
public: operator Type() { return (x.*Getter)(); }
public: property(ClassName& owner) :x(owner){}
};
class User
{
private: int v_;
public: int Get(){ return v_; }
public: void Set(int v){ v_ = v; }
property<int, User, &User::Get, &User::Set> ValueProperty;
public: User() : ValueProperty(*this){}
};
0708683
NGNGあとこれは要らんな。
0709デフォルトの名無しさん
NGNGproperty < int, ...> Value;
Constructor() : Value(this, 初期値) {}
Get(int& value);
Set(int& value, int& new_value);
0710デフォルトの名無しさん
NGNGファイルのパスを格納しているクラス CFilePathがあります。
パスにならってファイルを開く関数 CFilepath::open() を定義して、
CFileをなんらかの形で返したいのですが、どのように返したらいいのでしょうか?
最近CからC++に移ってきたんですが、Cみたいにポインタで返さなくても
メモリの大量コピーとかはおこらないんでしょうか?
0711デフォルトの名無しさん
NGNGなんのためにあるの?
むしろ、CFile に getpath() みたいなメンバの方が自然な気が。
0712デフォルトの名無しさん
NGNG>最近CからC++に移ってきたんですが、Cみたいにポインタで返さなくても
>メモリの大量コピーとかはおこらないんでしょうか?
戻り値の話なら、値で戻せばコピーが起きるのは CもC++も同じ。
てーか、そもそも、Cで何らかのオーバヘッドが発生する局面で、
C++だとそれが起きないなんて状況は、まずないね、逆はよくあるけど。
0713710
NGNGCFilePathのコンストラクタで
{"/usr/share/hoge","/usr/local/share/hoge"}みたいなのが読み込まれて、
CFilePath.open("fuga.dat")
で/usr/share/hoge/fuga.dat,/usr/local/share/hoge/fuga.datの順に存在した物を開くと
いうものを作成したいのです。
0714デフォルトの名無しさん
NGNGCFile を継承して、コンストラクタと open() を定義すれば良いと思うが...。
0716デフォルトの名無しさん
NGNG毎回読む、グローバルに保存しておく、staticメンバに保存しておく、お好きなように。
0717710
NGNGstaticメンバってのはわからないので、調べてみます。
あと、一応、クラスを返すときはどういうように返すのが一般的かを
教えてください。
0718674
NGNG>>707
そういえばそうでした、ありがとうございます。
ところで、このプロパティの中身をオブジェクトにして
int val = someObject.Property.memberVariable;
のように書いたときに、 someObject が int に変換できないという趣旨の
エラーが起こるのですが、この時は何が起こっているのでしょうか?
冷静に考えると、プロパティの実体のメンバにアクセスするための
ドット演算子が未定義である為に起こる症状な気がするのですが、
operator. ってオーバーロード出来ないんでしたでしょうか?
こういう場合に自然な振る舞い(C#などのプロパティのような振る舞い)に
する方法は何かありますか?
どなたかよろしくお願いします。
>>709
分けないと、アクセス制限の線引きが曖昧になりませんか?
インスタンスのプロパティなのに、そのインスタンスが受けるアクセス制限が
外と同じというのはちょっと…と思うのですが。
0719デフォルトの名無しさん
NGNG. :: .* ?はオーバーロードできん。
0720デフォルトの名無しさん
NGNGCFileに参照回数計測を実装すれば、ポインタ1つのコピー+αくらいで逝けるヨン。
他の場面で多少のオーバーヘッドは出るけど、
CFileみたいなクラスはそんなに速度は要求されないだろうしネ。
0721720
NGNGstaticメンバわからんやつに参照回数計測はまだ無理かな。
0722デフォルトの名無しさん
NGNGもしくは CFile::open(const CFilePath&) を作るか。
0723デフォルトの名無しさん
NGNGstaticメンバだと、pathリストパターンjが複数存在する場合に困るような...
今回の場合、複数ないかも知れんけどね。
0724683
NGNGproperty<int, OwnerClass, &OwnerClass::GetLength, _> length;
int OwnerClass::GetLength() const {
return strlen( m_string_data );
}
のが便利なとこだと思ってるので、常にメンバ変数とペアになってる
ことを仮定したpropertyテンプレートって好かんのだが…。
>>718
class property [with T=SomeValue&] {
T operator()() const { return (x.*Get)(); }
};
と謎の()を定義して、その時だけプロパティらしからぬ
int val = someObject.Property().memberVariable;
で使うか、operator. の代わりに operator-> のオーバーロードで
我慢するしかないような気がする。
0725デフォルトの名無しさん
NGNGメンバー関数にするのとフレンド関数にするのとどちらが良いのでしょうか?
それぞれのメリット・デメリットにはどんなことがあるのでしょうか?
いろんな立場からのご意見をお聞かせ下さい。
0726デフォルトの名無しさん
NGNGみなさんはC++を使う場合のGUIまわりはどうしてます?
Winだと、BCBかMFCというところでしょうか?
.NETの方がきれいなGUIになっていったらどうします?
0727デフォルトの名無しさん
NGNGWin32コンソール用アプリケーションで、ユーザに1ラインに複数の言葉を入れてもらい、
それを個々のstringとして認識するにはどうしたらいいのでしょうか?
例としては、ユーザがcinに
"apple banana orange grape"
と入力した場合に、スペースを認識して"apple"というstring、"banana"というstring、
という具合に個別のstringに分けたいのです。
cin >> a >> b >> c; という様な手を使おうと思ったのですが、ユーザが入力する言葉の数は一定してないので、
言葉が3つ以下の時にキチンと作動しません。
お願いします。
0728727
NGNG0729デフォルトの名無しさん
NGNGstrtok()などのループ
0730デフォルトの名無しさん
NGNG配列も使えよ。
0731727
NGNGありがとうございます。m(_ _)m
0732デフォルトの名無しさん
NGNG場合によっては、strtok_r を使うこと。
0733デフォルトの名無しさん
NGNGそれは、すでに語られ尽くしてる気がするな…。
0734734
NGNG過去ログの
(http://pc.2ch.net/tech/kako/1009/10090/1009071535.html)
265番目あたりの対処方法は、皆さんなら、どのように
しますか?
VC++,BulderC++で作成したsetをGNU g++でも動作させようと
しているのですが、iteratorがconstなので、エラーになります。
やはり、erase,insertをするしかないのでしょうか?
gcc-3.2を使わない。2.95.x使うの止めた方がイイよ。
0736デフォルトの名無しさん
NGNG立場がどうの、っつーほどのもんではない。
2項オペレータの左項に当該クラス以外のオブジェクトが来る場合を
許容しようとしたら、必然的に非メンバ関数として定義してやる
しかない、というだけの話。
0737デフォルトの名無しさん
NGNGせっかく std::string をつかってるなら、文字列を char配列にコピー
してからでないと使えない strtok よりも、string のメソッドになってる
find、find_first_not_of、substr あたりを組み合わせて使ったほうが
よいんでは。
0739デフォルトの名無しさん
NGNGプログラムに埋め込んで使えるようなデータベースライブラリーって
ないですか?Oracleとかだと、別途インストールしたりサーバの設定とか
面倒なので。
今まではSTLのmapとvector使ってやってたんだけど、そろそろ面倒で限界。鬱になる。
0740デフォルトの名無しさん
NGNG探す暇があったら自分でつくれよ低能。
0741デフォルトの名無しさん
NGNG煽る暇があったら働けよ低能。
0742デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNGVC++スレできけばぁ?
SQLiteはどうよ
Perlからしか使ったこと無いけど
http://www.hwaci.com/sw/sqlite/
0747デフォルトの名無しさん
NGNGちょいと弄れば使えると思う(BCC5.5用だが)
http://www.fuel.co.jp/~bull/odbc/
0748デフォルトの名無しさん
NGNGべつにいんじゃない?
0749デフォルトの名無しさん
NGNGDAOとかのMFCにあるやつ
0750電子メール アドレス :
NGNG[email protected]
ジャンジャンメールクレーーーーなんでもOK!!
0751デフォルトの名無しさん
NGNGそれ、パフォーマンス悪い
0752デフォルトの名無しさん
NGNG目的を明確に。
データベースといってもいろいろなんだが、何をしたいんだ? リレーショナル
データベースを使いたいのか、オブジェクトのシリアライズをしたいだけなのか、
そのあたりを詰めると話がまったく違ってくる。
0753デフォルトの名無しさん
NGNGデータベースなんてあるの?
0754デフォルトの名無しさん
NGNGlist に差し替える方法ってある?
イメージ的には template <class T> typedef std::vector array;
みたいな。
0755デフォルトの名無しさん
NGNGあるらしい。昔、エピステーメーが書いてた本で読んだ覚えがある。
(その本、捨てちゃったけど)
>>754
明らかにムダなので、ないと思われ。
0756デフォルトの名無しさん
NGNG0757755
NGNGvector と list 差し替えるって話はムダだが、template を typedef したいっつー
のはあり得る話か。
ちなみに、それは無い。ただし template パラメタに template を渡す、たとえば
template <template <typename T> class Prod>
class Order {
Prod<int> prod_;
...
};
みたいな書き方は出来るから、目的は達成できると思う。
0758デフォルトの名無しさん
NGNGg++ とかなら、
template< template<class> class C, class T > void foo( const C<T>& array ) {
for ( typename C<T>::const_iterator i = array.begin(); i != array.end(); ++i ) {
cout << *i << endl;
}
}
vector<int> v;
foo(v);
list<float> l;
foo(l);
みたいな書き方はできるけど。
0759デフォルトの名無しさん
NGNGtemplate template parameter ね。ただ typedef template は、なぜか ANSI C++
の規格には存在しない。
(次期 ANSI C++ の規格に入る最右翼だとは思うけど)
0760デフォルトの名無しさん
NGNGそういうのをOODBという。
0761デフォルトの名無しさん
NGNG0762739
NGNGシリアライズできるデータベースがあるなんて知りませんでした。
今回探しているものは、リレーショナルのほうですが
そちらにも興味があります。
よろしければ名前など教えてください。
0763一週間ぶり
NGNG0764デフォルトの名無しさん
NGNGenum { AHYA, UHYA }; みたいなの...
0765デフォルトの名無しさん
NGNG個人的には大文字を打つのがめんどくさい
0766デフォルトの名無しさん
NGNG定数であることを明記するため、俺は大文字にしてるけどな。
#define AHYA 0
これと enum { AHYA = 0 }; は同じようなもんだろ?
>>764
良いエディタを使え。
0767デフォルトの名無しさん
NGNG0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNGエディタで解決できる問題か?
0770デフォルトの名無しさん
NGNG引き篭もりが首吊るくらい残念。。。
0771デフォルトの名無しさん
NGNGおそレスだがstrstremとか使っちゃダメなのかい?
0772771
NGNGstring s("apple banana orange grape");
istrstream ss(s.c_str());
string tmp;
while (ss >> tmp) {
cout << "data = " << tmp << endl;
}
0773デフォルトの名無しさん
NGNGと
enum { AHO=0 };
が同じなんですね。
0774デフォルトの名無しさん
NGNGint GetValue() { return a; }
と
const int& GetValue() { return a; }
って同じ事ですか?
肥大化しちゃった(std::vectorとかの)オブジェクトを参照したい時に
下の方が良いかなーとか思ったのですが、実際の所どうなんでしょう?
上のやり方だとオブジェクトの実体をまるごとコピーしてるように思えるんですけど
認識間違っていますか?
0775デフォルトの名無しさん
NGNG0776774
NGNGなるほどありがとうございます
ということは、追加で質問なのですが
class cA {
public:
const std::string& GetSTR() { return str; }
private:
std::string str;
}
int main() {
cA a;
std::string b;
b = a.GetSTR();
b.append("test");
return 0;
}
というのは安全なコードでしょうか?
0777774
NGNG0778デフォルトの名無しさん
NGNGb = a.GetSTR();
でbにコピーされるんじゃ?ちなみに、
a.GetSTR().append("test");
は通らない(はず)。
0779デフォルトの名無しさん
NGNGコピーされなきゃまずいだろ。
constにはappendできないのだから。
0780774
NGNGstd::string* b;
b = a.GetSTR();
b->append("test");
かな・・・
すみません、混乱してます
0781デフォルトの名無しさん
NGNGGetSTR()はconstであるべきだが、それ以外は別にいいんじゃないの。
0782774
NGNGappendじゃなくて、例えばfindとかの話でした。
プライベートに持ってるstd::mapのキーを
std::setに列挙して返すような場合です。
0783デフォルトの名無しさん
NGNGそれなら、直に〜.find(a.GetSTR())してもいいし、
const std::string& b = a.GetSTR();
〜.find (b)
としてもいい。
0784デフォルトの名無しさん
NGNG落ち着いて考えてみそ。
0785774
NGNG修正版コード
class cA {
public:
const std::map<string, int>& GetMap() { return mymap; }
private:
std::map<string, int> mymap;
}
int main() {
cA a;
const map<string, int>& b;
b = a.GetMap();
if (b.find("test"))
cout << "OK" << endl;
return 0;
}
こんな感じです
>783氏からちょっとヒントを得ました
が、ここまで書いてふと気が付いたんですが
こんな実装必要ないみたいでした・・・
長々と失礼しました
0786デフォルトの名無しさん
NGNGb = a.GetMap();
これは許されないぞ
0787774
NGNGごめんなさい。
0788デフォルトの名無しさん
NGNG(´-`)。o ( ……これだけを見ると、ぜんぜん違うと突っ込みたくなるなぁ……)
0789デフォルトの名無しさん
NGNGこれって、constじゃなきゃいいの?
「&」ってやってるのがまずい?
漏れならcAのメンバ関数にint find(string )って入れて済ますけど
嫉妬期待。
0790デフォルトの名無しさん
NGNG参照は宣言時に初期化されなければならない。
0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNG問題は無い。例えば
class Bar;
class Foo {
Bar *m_ptr;
public:
explicit Foo(Bar *ptr) : m_ptr(ptr) {}
};
class Bar {
Foo m_foo;
public:
Bar() : m_foo(this) {},
};
はOKだけど、Foo(Bar *)がptr->xxを含んでいたらアウト。
ただし、Barの基底クラスの非仮想関数を呼ぶ場合は、少なくとも普通の
処理系なら正常に動くはず。
0793デフォルトの名無しさん
NGNGレスありがとう。
ルール上はアウトなんですね。
0794デフォルトの名無しさん
NGNGVC6だと
警告 Bar() : m_foo(this) {}
OK Bar() { m_foo = this;}
となるんですが、上の書き方は言語規約上OKなのでしょうか。
auto_ptr<Foo>とかで、オーナーポインタ渡すだけの為に
auto_ptrのディフォルトコンストラクタが走るのは気持ち悪いっす。
0795デフォルトの名無しさん
NGNG0796794
NGNGwarning C4355: 'this' : ベース メンバ初期化リストで使用されました。
非静的メンバ関数の中でのみ有効な this ポインタが基本クラスの
初期化リストで使用されました。
Microsoft の拡張機能を有効にするオプション (/Ze) を付けて
コンパイルした場合はレベル 1、それ以外ではレベル 4 の警告となります。
よく考えたら、この構文通らないと、オブジェクトを直持ちした場合
構築できないじゃん。
そんなんでいいのか C++
0797デフォルトの名無しさん
NGNGそのthisの中身にアクセスしなければ合法だって言ってるじゃん
0798デフォルトの名無しさん
NGNGというか、直持ちした上で他のオブジェクトに依存するような設計が悪い。
0799デフォルトの名無しさん
NGNG浮動小数点数のscientific表記(0.02e+12とか)が何を意味しているか
わかりません。解説ページご存知でしたら教えてください。
0800800get
NGNGワラタ
0801デフォルトの名無しさん
NGNG0803800
NGNGすまぬ、勘違いしてた
仮数部・指数部
0.02e+12
だと、仮数部 0.02、指数部 12 = 200000000 ぐらいか?(0適当)
勘違いは、仮数部・指数部が逆だと思ってた
(´-`).。oO(800ゲットにうかれてたんだろうな…)
0804800
NGNGん、2.0e+10 か? 処理系によるのか?
0805デフォルトの名無しさん
NGNG0.02e+12なる表記が出てくることってあるの?
そもそも、こういう表記って表記の定義としては正しいの?
0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNG2e10 って書いても同じ
0808799
NGNGわかんないから聞いたのに・゚・(ノД`)・゚・
0809デフォルトの名無しさん
NGNG0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNGあと、5.2e+10 と 4.8e+11 を比べるより 0.052e+12 と 0.480e+12
のほうが解りやすいとか。
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNGC++のcoutでfloatなんかの数字を表示するとき、
4.8e-3 みたいな表示を禁止して、常に
0.0048…みたいな表示にするのにはどうしたらよいのでしょうか?
あと表示の有効桁数を指定することも出来るのでしょうか?
0816デフォルトの名無しさん
NGNG指数表示をやめる・・・・・fixed
有効桁数・・・・・precision(n)
0817デフォルトの名無しさん
NGNGThanx!できましたよ。
0818デフォルトの名無しさん
NGNGcout.setf(ios::fixed);
cout.precision(8);
みたいに変更した後、設定をデフォルトに戻したい場合はどうすれば宜しいのですか?
0819デフォルトの名無しさん
NGNGcout.unsetf(ios::fixed | ios::scientific);
cout.precision(6);
precisionは返り値として元の精度を返すので、それを保存しておいて
あとでprecisionに与えてもよい。
0820デフォルトの名無しさん
NGNGstudents.push_back( Student(no, ma, en));
}
こういうコードよく見るけど(マ板からの引用)、
たとえば、noの入力が失敗した場合、
続く「cin >>ma >> en」(ただし、cinはfailになってる)は
問題ないの?
俺のg++では、どこで入力に失敗しても、
変な動作を引き起こさずにすんなりwhileを抜けてくれるんだけど、
それは標準で保証されてることなのかな?
誰か知ってたら教えて。
0821デフォルトの名無しさん
NGNGcin >> no >> ma >> en は
((cin.operator>>(no)).operator>>(ma)).operator>>(en)と同じに
なると思うから、cinが失敗した所でoperator>>が働かなくなる
ようにされているのでは?
0822820
NGNGレスありがとうございます。
そうですね。それで、疑問なのは、
cinがすでにfailになっている場合、
cin >> x;
は、「何もせずにcinを戻す」のか、
何かするのか、あるいは、本当は
未定義なのかということなのです。
すみません。
0823デフォルトの名無しさん
NGNGThanx!早速試してみたいと思います。
0824デフォルトの名無しさん
NGNGcin.fail()がtrueの時、cin.clear()を行うまで、ストリームの処理を行わないこと
が保証されているようです(C++標準ライブラリP573)
0825デフォルトの名無しさん
NGNG#include <iostream>
int main()
{
int i;
std::cin.setstate(std::ios::failbit);
std::cin >> i;
}
0826デフォルトの名無しさん
NGNG例外を投げて欲しければ
iostate exceptions(iostate except);
でマスク外さないと。
0827デフォルトの名無しさん
NGNG単に>>824の確認してるだけでしょ?
0828デフォルトの名無しさん
NGNGVC5.0ではじかれますた
こんなかんじ
class foo{
・・・
foo* pParent;
vector<foo*> pChild;
・・・
};
できないのでfoo** pChildにしますたが・・・
(メモリ管理自力(泣めんどくさい怒))
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNGそれに何の問題が??
参考までに、
#include <vector>
using namespace std;
class foo{
foo* pParent;
vector<foo*> pChild;
};
int main(){ return 0; }
は、VC6、BCCで通りますた。
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNGそれは何故か知らんが、VC6だったら
vector<foo> pChild;
で通るかと。
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNG意味が変わってる
0836デフォルトの名無しさん
NGNGを何も指定されていない状態に戻すには?
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNGusing namespace hoge;
// 有効
}
// 無効
0839デフォルトの名無しさん
NGNG{
protected:
type obj;
foo* p;
public:
hoge(){p->obj=something;}<−−−−−−*
};
*って外部からobjを操作してることになるんですか?
VC5.0だと通りますたが・・・ちょっと不安
0840デフォルトの名無しさん
NGNG0841839
NGNGobj:何らかの型のオブジェクトです
hoge()の呼び出し元インスタンスと違うインスタンスのpを介して
protectedにアクセスできるのか?ということです
この日本語だと外部アクセスな気がしますが・・・
んで、VC5.0だと通っちゃうんですよ(動作も意図したとおり)
0842デフォルトの名無しさん
NGNGアクセス保護はクラス間の約束でしかない。
以上。
0844デフォルトの名無しさん
NGNG何かいい方法はないでしょうか?volatile をつけても駄目でした。
コンストラクタで OS からリソースを確保するクラスは
static メンバ変数にしては駄目なのでしょうか?
以下は確かめに使ったソースです。
#include <iostream>
class A{
public: A(){std::cout << "A()\n";}
public: ~A(){std::cout << "~A()\n";}
};
class B{
public: static A ainst;
};
A B::ainst; //<- コンストラクタだけでデストラクタが呼ばれない
void fun(){
static A a; //<- これはちゃんと呼ばれる
}
void main(){
fun();
}
よろしくお願いします。
0845デフォルトの名無しさん
NGNGA B::ainst;
じゃない
0846デフォルトの名無しさん
NGNG同じクラスのインスタンスのprivateメンバに触れないんじゃ
コピーコンストラクタなんて書くとき困っちゃうよね。
0847845
NGNGグローバルでやってるね
これでいいはずだと思ったけど・・・
0848デフォルトの名無しさん
NGNGcout が生きてるかどうかも分からないし。
0849デフォルトの名無しさん
NGNG処理系依存っておちはない?
0850844
NGNG>>845
ちなみにただのグローバル変数にした時も同じになります。
>>848
c関数 atexit() で、出来る限り最後までやってみたのですが、
main() のはじめに atexit() した関数が呼ばれたのが
上記例の fun() 内部の a のデストラクタ呼出し後で、
ここまでは確認できたのですが…
もしスタートアップルーチンが、コンストラクトとデストラクトを
逆の順番にやってくれているとすれば(希望的観測)、
コンストラクタでは std::cout が生きていて
デストラクタで生きていないっていう事は無いような気がするのですが…
0851デフォルトの名無しさん
NGNG試してみては。
0852844
NGNGstd::cout が破壊された後でした。
printf で同じ事を書いたら、ちゃんと呼ばれている事が確認できました。
お騒がせしました。ありがとうございあした。
0853849
NGNG終わった後に解放するの?プロセスレジスタ(?名前忘れた)は
main()の前からプログラムに入ってるって事?
0855849
NGNG0857849
NGNG調べてきまつ
0858849
NGNGグローバルポインタの初期化
ROM to RAM コピールーチン
data 領域のコピー
bss 領域のゼロクリア
main 関数へのジャンプ
よーなことやってるんですか初めて知りましつ
0859デフォルトの名無しさん
NGNG要はウィンドウプロシージャがうまくクラス内に収まらないという話なのですが
staticで修飾しちゃうとメンバにアクセスできないし
CALLBACKじゃなくしてパブリックメンバにして、CALLBACKの方から呼んでやるっていうのも
ラッパークラス自体グローバルにしなきゃいけないし、そもそも隠蔽しきれてないし・・・
何かウマイ方法は無いもんでしょうか?
0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNG0863デフォルトの名無しさん
NGNG0864デフォルトの名無しさん
NGNG別のクラスのポインタが無効になったら自滅するように出来ますか?
例えばこんな風にして
class A {
};
class B {
A* child;
public:
B(A* a) { child = a; }
};
A* testA = new A;
B* testB = new B(testA);
Aのデストラクタが呼ばれたらBも一緒に死んでいくような・・・
0865デフォルトの名無しさん
NGNGできない。Observer/Obsavable パターン使え。
0866デフォルトの名無しさん
NGNGA::Releaseをよびだして、そこでフラグをたて、RefCountをへらして、
Bの方では適当にフラグをポーリングすればええんでないかい?
0867デフォルトの名無しさん
NGNGstd::ostream& operator<< (std::ostream& lhs, const myClass& rhs)
を定義した時、これが呼ばれてほしくない場面で呼ばれてしまいます。
通常は
myClass myClassInstance;
std::cout << myClassInstance;
を想定していて、これはうまく動くのですが、インスタンスの存在するアドレスを確認したくて
std::cout << &myClassInstance;
と書いた場合まで、上の演算子が呼ばれます。
operator& () はオーバーライドしてないし、したくありません。
これは operator<<(std::ostream& lhs, myClass rhs);
にする以外でうまく解決する方法はあるでしょうか?
0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNGstd::ostream& operator<< (std::ostream& lhs, const myClass* rhs)
を作るとか。
0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNGincludeとかlibみたいな環境変数がコンフリクトしてマズーなことになったりしない?
っていうか今時そんな環境変数でディレクトリ与えるのはもしかして主流じゃない?
0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNGBCCは-Iとかでディレクトリを与えてたな。gccはどうなってるの?
0874デフォルトの名無しさん
NGNGbccもgccも設定用ファイルがあるよ
0875デフォルトの名無しさん
NGNG0876無能
NGNG0877デフォルトの名無しさん
NGNG引数で -I, -L を使って渡すか specs という設定ファイルに書いておく。
bcc で使ってる bcc32.cfg の高機能版みたいなもんだ。
0878デフォルトの名無しさん
NGNGサンクスです。
じゃ、VC++/bcc/gccの混在も十分可能なのか。どうしよっかな〜。
0879デフォルトの名無しさん
NGNGiniファイルみたいな3層構造([section]->key->value)を
うまく管理するにはどうしたらいいんでしょうか?
stlのmapにmap持たせようとしたり、色々やってみたんですが
僕の脳味噌じゃちょっと無理みたいです...
要件としては、iniファイルの内容を何らかのカタチでメモリ上に保持して
「[section]->key」でアクセスすると「value」が返ってくる様なモノです
もっと言っちゃうとVCLのTIniFileみたいなモノです
皆さんのお知恵をお借りしたいです
(「BCB買え」とかは無しでお願いします...)
0880デフォルトの名無しさん
NGNGmap に map 持たせろ。
0881879
NGNGうー...頑張ります
ところでこれはCの質問だと思うんですが、ついでにお願いします
char temp[] = "aaaa\0bbbb\0cccc\0dddd\0\0";
という文字列があったとして、aaaaから順番に取り出していきたい場合
std::map< std::string, std::string > mymap;
while( 0 < strlen( temp ) ) { // \0\0 が 0 であることを期待して
mymap[temp].insert("test"); // std::stringが\0までを文字列と扱ってくれると期待して
temp = strchr(temp, '\0') + 1; // 最初の\0までを削除したい
}
で期待通りの動作をしてくれるでしょうか?
ちょっとwhileが絡んでくると、怖くてテストランできない...
0882デフォルトの名無しさん
NGNGCOMPOSITE にすれば?
ini ファイルというよりレジストリになるからちょっとオーバースペックか?
直前の話題とかぶるけど、なんで MS は VC の設定にレジストリ使わないんだろう?
レジストリは階層構造つきの環境変数的な意味合いじゃなかったんだろうか?
他社への嫌がらせなのかな?
0883879
NGNGそれってデザインパターンですよね
日曜PGなので理解が浅いですが、実装できるか頑張ってみます
そりゃそうと>881じゃコンパイル通らないですね...
ちょっと長いですけど実コードから抜粋
メンバ変数 std::map< std::string, std::map< std::string, std::string > > Entry;
に、Entry[section][key] = value の形でデータを収めたい
コードは次レス(入りきらなかった...)
パッと見ておかしなところがあったら教えて下さい
よろしくお願いします
0884879
NGNGDWORD hRetSec = GetPrivateProfileSectionNames(SecTemp, sizeof(SecTemp), FilePath.c_str());
if (hRetSec > 0) {
char* KeyTemp = (char*)calloc(sizeof(char), 2048);
while(0 < strlen(SecTemp)) {
DWORD hRetKey = GetPrivateProfileSection(SecTemp, KeyTemp, sizeof(KeyTemp), FilePath.c_str());
if (hRetKey > 0) {
char* key = (char*)calloc(sizeof(char), 128);
char* value = (char*)calloc(sizeof(char), 128);
while (0 < strlen(KeyTemp)) {
strncpy(key, KeyTemp, strcspn(KeyTemp, "=")); // "AA=aa\0BB=bb\0CC=..."の"AA"にあたる部分を取り出す
KeyTemp = (strchr(KeyTemp, '=')+1); // "AA="の部分を削除(前詰め)
strcpy(value, KeyTemp); // "aa\0BB=bb\0CC=..."の"aa"にあたる部分を取り出す
Entry[SecTemp][key] = value;
KeyTemp = (strchr(KeyTemp, '\0')+1); // 最初の\0までを削除(前詰め)
}
free(key);
free(value);
}
SecTemp = (strchr(SecTemp, '\0')+1); // 最初の\0までを削除(前詰め)
}
free(KeyTemp);
}
free(SecTemp);
0885デフォルトの名無しさん
NGNG3行目以降見てないけど…
> char* SecTemp = (char*)calloc(sizeof(char), 2048);
> DWORD hRetSec = GetPrivateProfileSectionNames(SecTemp, sizeof(SecTemp),
sizeof はいやん。
0886デフォルトの名無しさん
NGNG0887879
NGNGは
DWORD hRetSec = GetPrivateProfileSectionNames(SecTemp, sizeof(*SecTemp),
~~
でした...
(char*)calloc(sizeof(char), 2048); はマズイですか?
callocって「バイト数*長さ」で領域確保するんだと思ってましたがどうなんでしょう?
0888879
NGNGGetPrivateProfileSectionNames関数にstd::string渡せないし
実体渡ししたとして、その挙動(ポイント先の確からしさ)は保証されてないし
0889879
NGNG× 実体渡し
○ 直アクセスでポインタ渡し
0890デフォルトの名無しさん
NGNGsizeof(SecTemp) -> 4
sizeof(*SecTemp) -> 1
0891879
NGNGsizeof(**SecTemp)か......な?
全然理解が足りてないですね僕...
0892デフォルトの名無しさん
NGNGそういうときはフツーstd::vector<char>を使う。
0893デフォルトの名無しさん
NGNGchar *pなら、pの型はchar*, (*p)の型はchar、 (**p)はエラー。
sizeofで要素数が分かるのは配列(と構造体)のときだけ。
ポインタの要素数はsizeofではわからない。
0894879
NGNG理解しました...
では
char* SecTemp = (char*)calloc(sizeof(char), 2048);
なら
(sizeof(char)*2048);
が正解ですか?
>892
でもstlのコンテナ群って、自分のインターフェース以外が内容を書き換えちゃった場合
その後の挙動は保証されてないですよね?
0895デフォルトの名無しさん
NGNG(普通、はdefineとか使うんだろうが。笑い)
0896デフォルトの名無しさん
NGNGvector<T> (T != bool) の内部データはTの配列として使えることが保証されてる。
> (sizeof(char)*2048);
正解。…だが、 sizeof(char) は常に1なので単に2048でも可。
あと意味的には calloc( 2048, sizeof(char) ); が正しいのではなかろうか。
0897879
NGNGありがとう
0898デフォルトの名無しさん
NGNGこれからBCBでGUIなんかやりたいのですが、
よい参考書を教えていただけないでしょうか。
0899デフォルトの名無しさん
NGNGDelphiの参考書ならなんでも可。
Object Pascal->C++の手動コンバートはなかなか面白いよ。
0900デフォルトの名無しさん
NGNG> vector<T> (T != bool) の内部データはTの配列として使えることが保証されてる。
ソースきぼん。以前、別所でその問題について議論されてたのを
思い出した。
0901896
NGNG> This was fixed in 2001 as part of Technical Corrigendum #1 to
> the C++ standard, which now requires that the contents of
> a vector are stored contiguously, just like an array
とな。いや、俺もTC1の現物は見たこと無いんだけど。
0902デフォルトの名無しさん
NGNGEffective STL に書いてある。
ANSI C++ の規格書には記述がないんだが、後で採択された amendament に
書いてあるそうだ。(俺は確認してない)
0903デフォルトの名無しさん
NGNG(INFなら無限大なのは知っています)
よろしくお願い致します
0905デフォルトの名無しさん
NGNG不定値(#IND)
0906デフォルトの名無しさん
NGNGインド人(#IND)
0907デフォルトの名無しさん
NGNG899です。
俺もDelphiは全くやる気はないけど、何せBCBのいい参考書が全然ない
ですからね。VCL部分は全くと言っていいほど共通なので、必ず役に立ち
ますよ。
ただ、C++には独自の関数を多数備えているので、VCLでできる事でも
C++でやった方が良い場合もいくつかあります。
Object PascalとC++間のコンバートには一種の規則のようなものがあり
ますが、それをうまくまとめたHPをまだ知りません。実際に試してみられ
るのが一番の近道です。
俺はここでよく質問しています。
「C Builder相談室 Part3」
http://pc3.2ch.net/test/read.cgi/tech/1016065855/
0908デフォルトの名無しさん
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999486538&res=7
0909デフォルトの名無しさん
NGNGインスタンス生成時に1回だけしか呼んで欲しくない処理を実装したいんですけど
何かウマイ方法はないですか?
それとも複数回呼ばれた場合の処理を盛り込んだ方が賢いですか?
0910デフォルトの名無しさん
NGNG何故?
それがインスタンス生成に絶対欠かせない関数呼び出しなら、
失敗して例外を投げた時はコンストラクタも失敗とするべきだし、
上手く呼び出せなくても何とかなる関数なら、コンストラクタの中で
try - catch で適切に対処すればよいだけ。
0911デフォルトの名無しさん
NGNGもし例外が起こりうる関数より下でnewとかしてた場合
デストラクタで無効なdeleteしちゃったり
最悪デストラクタが呼ばれない(コンストラクタが完走していないので)
とかいう事になっちゃいませんか?
0912デフォルトの名無しさん
NGNGEffective C++ とか読んだ方が良いかもしれんな。コンストラクタ中で例外が
発生した場合には、対応するデストラクタは呼ばれないことが保証されている。
したがって、コンストラクタ中で後始末が必要な操作をする場合には
1. コンストラクタ内に try - catch を書いて後始末
catch した後で throw; で例外をさらに外に投げる
2. メンバ変数やローカル変数としてスマートポインタを使う
いずれかで攻める。
0913909
NGNGありがとうございました
0915デフォルトの名無しさん
NGNGBCBが不人気というよりも、Delphiの出来が良すぎて皆そちらに流れて
しまうからでしょう。
もしくはC++使いはVisual C++(.NET)に流れてしまいます。結果として
BCBユーザーは少なくなってしまっているのかもしれません。
VCLはObject Pascalで書かれているので、C++との相性に今一つ難が
あるような気がします。しかし、それでも無理矢理にでも他言語に介入
できるのはC++の大きな強みだと思います。
BCBに慣れたら、Visual C++(.NET)への移行もできます。でもVCLが
便利なので、MFCが嫌になるでしょうけど。
0916デフォルトの名無しさん
NGNG俺は半分趣味のMFCプログラマ(全然人気のないシェアとか書いてる)
なんだけど、.NETになって迷ってる。(プロじゃないのに質問すまん。)
MFCのサポートは打ち切りらしいし、マネジッドでC#もどきをするなら、
いっそC#の方がいいのかとも思うし。
でも、C++は好きで(なじんでて)捨てるつもり気にはなれない。
結局、Builderに行こうかなあとも思うんだけど、いまいちマイナー感が。
やっぱり、参考書籍の少なさや、Delのおまけって感じが少し不安。
でも>>915なんか見ると、やっぱ、BCBでいいのかとも思うし。
VC++/MFC屋の人は、どうするつもり?
0917デフォルトの名無しさん
NGNG> MFCのサポートは打ち切りらしいし、
VC++.net には新バージョンの MFC 入ってるけど。
0918デフォルトの名無しさん
NGNGC#も結構イイよ。
0919デフォルトの名無しさん
NGNGつけたりしている.hファイルをほぼ全ての.cppでインクルードするのは
何かまずいことがありますか?
あ、他の.hファイルでインクルードする時は
#define HOGE
#include "hoge_def.h"
#undef HOGE
で"hoge_def.h"側でHOGEが定義されてたらexternを避けるとしてます
0920デフォルトの名無しさん
NGNG逆でしょ
共通ヘッダファイルに
#ifndef ___hoge_def
#define ___hoge_def
(内容を適当に)
#endif // ___hoge_def
としておけば、多重定義にならない
0921デフォルトの名無しさん
NGNG「ほぼ全ての.cppでインクルード」っては、ヤだな。
機能ごとに別ファイルに分類して、必要なものだけを
インクルードすべきじゃないのか。
0922デフォルトの名無しさん
NGNG3600の内、1〜15を当たりにすると1/240に収束するのに
7200の内、1〜30を当たりにすると1/280に収束します。なぜ?
0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNG好みのテーブルを作れ
つか、均等に(等間隔で)出てきたらそれはすでに乱数ではない
0925デフォルトの名無しさん
NGNG3600で割った余りは1〜367が選ばれやすいから
均等でなくなるってことですか?
0926デフォルトの名無しさん
NGNGそう。単純にはその余りの部分が出たら捨てるといい。
0927デフォルトの名無しさん
NGNGちゃんと1/240に収束するようになりました。
もっとスマートな解決法があればよかったのですが・・・
なにぶん初心者なもので。
0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNGただ、整数で演算を行うと誤差が出てくる。
0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNG剰余は乱数の性質を変化させるけど、
除算は乱数の性質を変化させない。
除算後に表現できる数値の範囲で精度が保たれる。
0932デフォルトの名無しさん
NGNG乱数ジェネレータの種類によるけどね。
普通の実装は剰余法だから、普通は931の言うことは正しい。
0933デフォルトの名無しさん
NGNG"inline"キーワードは宣言と実装のどっちに書くのが正しいんですか?
どっちに書いてもVCとBCCではOKみたいだけど、ちょっと気になるので。
0934デフォルトの名無しさん
NGNG0935デフォルトの名無しさん
NGNGためしてみたが偏ったよ。
0936932
NGNG0937デフォルトの名無しさん
NGNG試したソースを出せ。
何か勘違いしてるだろおまえ
0938デフォルトの名無しさん
NGNGどっちに書いてもOKじゃなくて、
どっちに書いても無視される。
0939デフォルトの名無しさん
NGNG漏れは実装側に inline を書きます。inline の無い実装が
ヘッダにあると気持ち悪いので。
0940デフォルトの名無しさん
NGNG偏るのは当然だと思うが
0941デフォルトの名無しさん
NGNG実装にinlineを書くと同じコンパイル単位にある関数にしか展開されないはず
0942デフォルトの名無しさん
NGNGわかってる人(プ)書いてみてよ
0943デフォルトの名無しさん
NGNGコンパイラから見えないと、展開できなかったと思ふ
アクセサなんかは .h に入れないと意味ナイト
0944デフォルトの名無しさん
NGNGinline を宣言側と実装側に書いた場合とで振る舞いが変わってくるという
ことでなのしょうか。どちらの場合でも実装は .h ファイルに書きますよね。
0945デフォルトの名無しさん
NGNGバーカ。お前なんかに見せてやんねーよ!
素人は除算で十分。
0946デフォルトの名無しさん
NGNGrand() / (RAND_MAX / double(max));
rand() * (1.0 / RAND_MAX) * max;
普通に↑じゃないのか?
>>945
その除算を知りたがっているのでは
と、マジレスしてみるテスト。
0947943
NGNG>>944
いや、>>941さんは .cpp で inline 宣言するケースを言ってるのだと
.h で宣言とは別に inline にするのならばどちらも一緒
0948939
NGNGの補足ですが、ヘッダファイルで
class T { inline void foo(); };
void T::foo() {}
が気持ち悪いので
class T { void foo(); };
inline void T::foo() {}
としているという意味です。
0949943
NGNG.h ---------------------------------------------
class T {
int get0() { return 0; } // インライン展開される
int get1();
inline int get2();
int get3();
};
inline int get1() { return 1; } // インライン展開される
int get2() { return 2; } // インライン展開される
.cpp ------------------------------------------------
inline T::get3() { return 2; } // このファイル内だけでインライン展開される
で、get1かget2かって話?
0950デフォルトの名無しさん
NGNG本題から外れるが、_ から始まる識別子は処理系が使うから避けた方が良い。
以前に、それでハマったことがある。
(それ以降は UUID 入れるようにした)
0951デフォルトの名無しさん
NGNG処理系が予約してるのって「__〜」(アンダスコア2個)までじゃなかったでしたっけ?
だからあえて3個にしてるんですけど、実際どうなんでしょう
0952デフォルトの名無しさん
NGNG使うために予約されている」 とある。
あと、「__ を含む名前、または _[A-Z] で始まる名前は、任意の用途で
使うために予約されている」とも書いてある。
0953デフォルトの名無しさん
NGNG_から始まる名前(2つ、3つ連続している物も含む)はC言語の頃から予約されてた
んで、C++になって明示的に_2つが予約されて、C言語用のキーワードと差別化が
計られた。
_3つ以上が予約されているのは現在も変わらず。
0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNG漏れも昔よくやってた。Pentium/120MHzのノートでな(w
0956teset
NGNG__asm {
movq d, mm0
emms
}
cout<<d<<endl;
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNGboost::any とか。c++なので当たり前だがキャストが
色々要ってVariantよりは面倒だけど。
0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNGでvoidオブジェクトはどのようにして扱う?
0965デフォルトの名無しさん
NGNG柏原正三「標準C++の基礎知識」(ASCII)
っつー本で俺は学んだが。ちょうどC++を学びたいCプログラマ向け。
0966デフォルトの名無しさん
NGNGということにしたいのですね :-)
…はともかく、void じゃなくて void* だよな。
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGpublish()メソッドで本を出版します
0971デフォルトの名無しさん
NGNGでややすれ違いを指摘されたので、、こちらで。
>374 名前:デフォルトの名無しさん sage 投稿日:2002/09/18(水) 03:03
>オブジェクトを直接宣言する場合と、
> CTest oObj(Hoge);
>一旦ポインタの形で宣言しnewする場合は、
> CTest* pObj;
> pObj = new CTest(Hoge);
>どのように使い分ければいいのでしょうか?
>
>375 名前:デフォルトの名無しさん sage 投稿日:2002/09/18(水) 03:10
>スコープを外れても残したい時はnew。
>きっとここよりC++スレ向きの質問。
staticのようなイメージで捕らえればよいでしょうか?
0972デフォルトの名無しさん
NGNGmalooc(int *p=malloc(10*sizeof(int));)を使うべきかは
割と簡単に分かるとおもう。ぶっちゃけると、前者が
CTest oObj(Hoge)で、後者がnew CTest(Hoge)。
0973デフォルトの名無しさん
NGNGおおよそのイメージがつかめました。
これからMDIのソースを見て勉強します。
どうも有り難う。
0974デフォルトの名無しさん
NGNGあれでわかるなんてすごいな。
> Cで、autoな配列(int hoge[10]を使うべきか、
> malooc(int *p=malloc(10*sizeof(int));)を使うべきかは
> 割と簡単に分かるとおもう。ぶっちゃけると、前者が
割と簡単にわかるというけど、これ難しいと思うんだけど。
0975デフォルトの名無しさん
NGNGスタックに置かれるか、ヒープに置かれるか、
その辺の違いだと判断しました。
0976972
NGNG今では危ない仮定なのかな?
0977デフォルトの名無しさん
NGNGテンプレート関数なキャスト演算子を定義したテンプレートクラスの実体を使ったとき、
VC6だとコンパイルは通るのですが、実行時にプログラム自身が落ちてしまいます。
BCC だとちゃんと対応する型に変換できるのですが、
これは VC が馬鹿なのか、BCC が融通を利かせすぎなのか、私の書き方が間違っているのか
どれなのかわかりません。この動作は標準では許容されるのでしょうか?
template<typename T>
class TemplateClassX{
private: T val_;
public: template <class U>operator U(){
std::cout << typeid(U).name();
return val_;
}
};
void main(){
TemplateClassX<int> i = 10; // ここはそういうコンストラクタがあると思ってください。
long l = i; // vc6 だとプログラムが落ちます、bcc ではちゃんとキャスト演算子が展開されるようです。
}
0978デフォルトの名無しさん
NGNG特におかしい所があるとは思えん。
コンストラクタが間違っているのか、あるいは
VCのtypeid(long)が壊れているか、だろうな。
0980デフォルトの名無しさん
NGNG> std::cout << typeid(U).name();
この行を削っても落ちるね。
VC はメンバ関数テンプレートの展開が甘いんじゃないかな。
0981デフォルトの名無しさん
NGNG差分「だけ」というが、C++ - C >>>> C という罠
0982デフォルトの名無しさん
NGNGvoid*はvoidのポインタではない罠
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG「voidを指す」の意味がわかりません。
0985デフォルトの名無しさん
NGNGなどの警告を回避する目的以外にどんな場合で使われるんだろう。
0986デフォルトの名無しさん
NGNG煽りじゃないが,一応void型じゃなくてvoid*型な。
0987デフォルトの名無しさん
NGNG?
0988デフォルトの名無しさん
NGNG(void)printf()?
0989デフォルトの名無しさん
NGNGprintf() を void キャストするとどうなるんですか?
0990デフォルトの名無しさん
NGNGlint の警告(戻り値が捨てられている)が出なくなる。
0991でぃふぉるとは名無しさん
NGNG・I/O error処理なしの糞Cプログラムに。
・そういうことにしたいのですね:)
0992でぃふぉるとは名無しさん
NGNG・compilerが"pop"する確信を持てるようになる。
を忘れた(w
0993デフォルトの名無しさん
NGNGlint 対策ですか。関数の戻り値までチェックしてるんですね。
ありがとうございました。
0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997997!
NGNG0998v(^・^)v
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1032345774/
スレ立ててから続きを書こうと思ったらOSが落ちゃったよ。
0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。