C++相談室 part29

このエントリーをはてなブックマークに追加
1v(^・^)v ◆Manna2uCLg
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

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

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

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
4デフォルトの名無しさん:04/04/16 01:46
5v(^・^)v:04/04/16 01:47
S
7v(^・^)v:04/04/16 01:53
■関連スレ■
-【C++】template 統合スレ -- Part3
http://pc5.2ch.net/test/read.cgi/tech/1066493064/l50
- ぼるじょあがC/C++の宿題を片づけますYO! 21代目
http://pc5.2ch.net/test/read.cgi/tech/1078157730/l50
- ★初心者にVisual C++を教えるスレ★ Part11
http://pc5.2ch.net/test/read.cgi/tech/1077965179/l50
- ■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/l50
- ATL 相談室
http://pc5.2ch.net/test/read.cgi/tech/1029029882/l50
- C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/l50
- COM の世界を斬る!
http://pc5.2ch.net/test/read.cgi/tech/981823340/l50
- managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/l50
- C++Builder相談室 Part9
http://pc5.2ch.net/test/read.cgi/tech/1080541814/l50
- タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/l50
- Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50
- Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/l50
- GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/l50
-OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/l50
- タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/l50
81:04/04/16 01:59
なんか、ちょぃと失敗気味なスレ立てになっちまった…

すまぬ。
9Addicted to C++ ◆nrBjarne.g :04/04/16 02:48
乙!
10デフォルトの名無しさん:04/04/16 04:04
STL使うと(ry
>>10
環境に(ry
>>11
すげ(ry
C1010: プリ(ry
>>13
#inclu (ry
あと氏(ry
>>14
言葉が(ry
まぁヒント(ry
うむごくろ(ry
>>(ry
もまいらムダにスレを消費す(ry
MSDNにのっていなかったので...
yyy.cpp
c:\xxx\yyy.cpp(0) : fatal error C1001: 内部コンパイラ エラー
(コンパイラ ファイル 'msc1.cpp', 行 2701)
Visual C++
ヘルプ メニューで、サポート情報コマンドを選択してください。またはサポート情報 ヘルプ ファイルを参照してください。

zzz.cpp
c:\xxx\zzz.cpp(0) : fatal error C1001: 内部コンパイラ エラー
(コンパイラ ファイル 'msc1.cpp', 行 2701)
Visual C++
ヘルプ メニューで、サポート情報コマンドを選択してください。またはサポート情報 ヘルプ ファイルを参照してください。

DEBUGでビルドするとこんなエラーが出るようになりました
Releaseビルドだと問題なくビルドできます
MFCAppwizardで作成したのですがMFCもATLもオプションから外してあります
コンパイラのエラーでしょうか?
VisualStudio .net 2003です
VC6.0の頃でたことあったな…。
その時は、F7やF5でコンパイルするとダメだったけど、
「ファイルを選択→右クリック→コンパイル」
とするとなぜか通ったので、それで回避してた。

原因は面倒だったので追ってないが、プロジェクトの肥大化が
原因じゃないかと思ってる。(根拠なし)
20デフォルトの名無しさん:04/04/18 01:03
ちょいとスレ違いかもしれないけど朗報っぽいんで
Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
21デフォルトの名無しさん:04/04/18 03:16
>20
GJあげ
行列表記したいのですが、
1. std::vector< std::vector<double> >
2. boost::multi_array
3. blitz::array
だとどれが速度的にいいでしょう?
お前の環境とお前の使用するサイズでベンチマークしろ
24デフォルトの名無しさん:04/04/18 12:37
>22
遠慮なく使え

template <typename T>
struct GYOORETSUDESUUpupupu {
T _11, _12, _13, _14;
T _21, _22, _23, _24;
T _31, _32, _33, _34;
T _41, _42, _43, _44;
};
2522:04/04/18 12:43
ここはマジレス禁止スレなんですか?
マジレス禁止スレかもしれないのに
「マジレス禁止スレなんですか?」って聞くバカ発見
うそつき村を思い出すな。

というか、 >>22 は速度だけが問題なのか。保守性とか考えないのかな。
本当に速度最優先なら環境と使い方に依存する面が大きいので
>>23 の通り、実際に測って比較するしかない。
つぅか、一口に速度っても色々あるだろうに。
数値演算における"行列"なら標準ライブラリではvalarrayの担当。
>>28
std::valarrayで多次元配列同士の演算(乗算とか)は
面倒だろう。効率も悪い。
結論:double[][]が一番早い。
俺の環境なんかだとblitzは(演算にもよるんだろうが)gccの方がiccより
圧倒的に速かったりするし、ホントにコレは環境依存だと思う。
gcc でもvalarray より vector の方が速かったりするしね…。
valarrayはalias-freeなのが売りなので、alias-freeだとコンパイラに明示的に指定して
なんぼだと思っていたのですが(そしてgccはalias-freeの指定がなかったはず)。
あぁっと、sliceが使えるという利点もありますね。
いずれにせよvalarrayは時代の遺物というのが一般的な認識だと思います。
あと、boost::multi_arrayじゃなくて、せめてboost::ublasを引き合いに出してほしいです。
まぁ、上で言われているとおりまず測定するのが先でしょう。
数値計算は環境に非常に敏感な処理ですから。

ところで便乗になりますが、unrollの回数なんかをクライアントが環境に合わせて
調整できるような線形代数ライブラリはないんでしょうか?C++で。
>>32
MTLがそんな事出来たような気がしなくもないけど忘れた。勘違いかも。
100000x100000が欲しいので>>24さんそれもヨロ。

レスくれた方々有難うございます。

boost::multi_arrayのドキュメント読むとblitzからの貢献があった
となっています。
blitz::arrayはboost::multi_arrayに吸収されたと思っていいですか?
準標準と言われるものが2つもあるとどれにするか悩みますが。
>>35
で、レスされたことを実行しようとはしないわけ?>速度計測
>>24
_で始まる名前を使うなっ(とレスしてみる)
>>36 今週中にはやるから。今、暇がないし。

前もってある程度手がかりが欲しかったのよね。
39デフォルトの名無しさん:04/04/19 12:51
>>37
あ、おれよく使う。やばい?
標準ライブラリや処理系定義のライブラリと名前衝突しても文句言えん。そんだけ。
オレ、名前付けのセンスあるから多分ぶつからない。
ぶつかってもコンパイラが警告出してくれるからいいや。
24のって一応標準を読む限り安全な変数名だと思うのだが・・・漏れが標準を読み間違ってる?
boost::lambdaでもplaceholderとして同様な名前を使ってるし.

17.4.3.1.2 - Global names [lib.global.names]
-1- Certain sets of names and function signatures are always reserved to the implementation:

Each name that contains a double underscore ("__") or begins with an underscore followed by an uppercase letter (lex.key) is reserved to the implementation for any use.

Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.*
[Footnote: Such names are also reserved in namespace ::std (lib.reserved.names). --- end foonote]
44初心者:04/04/19 17:41
int nx,ny,nz;

class body
{
double *r[ny][nz];
public:
body()
{
r = new double[nx][ny][nz]
};
};
のようにメモリーを当てたときデストラクターはどのようにすればいいのでしょうか?
delete [] r としてもうまくいかず・・・・
あとこの形は

class body
{
double ***r;
public:
r = new double** [nx];
for(int i=0;i<nx;i++) r[i]= new double* [ny];
for(int i=0;i<nx;i++)
for(int j=0;j<ny;j++)
r[i][j] = new double [nz];
};
のようにメモリーを当てるのと同じ意味なんでしょうか?
長くてすいません。
Matrixのクラスライブラリを作りました。

template< typename X > class Matrix{
public:
Matrix<X>();
friend Matrix<X> operator*<X>( Matrix<X> const &, Matrix<X> const &);
};

gccではなんの問題もなくコンパイルできたのですがVS7.1だと
operator*<X>が気に入らないみたいです。どうやったらコンパイルできるんでしょう?
やりたいのはポインタの2次元配列じゃなくて
2次元配列へのポインタ
double (*r)[ny][nz];
じゃないのか?
>>44
その前にそのコードコンパイル通ったか?
>>45
意味不明。 operator* だけでいいだろ。



ひょっとして、釣りか?
>>45
operator*をtemplateとして定義しようとしていますね?
VC++7.1での一つの解決法は,operator*のtemplateの前方宣言を入れることです.
ただ,その前にさらにMatrixの前方宣言を入れる必要がありますがw

template<typename X> class Matrix;
template<typename X> Matrix<X> operator*(Matrix<X> const &, Matrix<X> const &);
template< typename X > class Matrix{
//定義
};

もう一つのやり方はfriend関数の定義をclassスコープ内に書いてしまう,
いわゆるBarton-Nackman trickを使うことです.

template<typename X> class Matrix{
...
friend Matrix<X> operator*(Matrix<X> const & lhs, Matrix<X> const & rhs){
return Multiply(lhs, rhs); //他へ委譲する
}
};

>>48
一見それでよさそうなんですが,関数templateに対してそうやると面食らう結果になりますよ.
(理由を説明すると長いんですが・・・)
ところで、>>45は、マルチなわけだが。
>>45
Matrix<X>の前にtypenameを入れたらどうか。
VC7.1は本来typenameを入れなければならない場所に入れなく
てもコンパイルが通ることがあるくせに、入れなくてもいい場所
に入れないとエラーを起こす事がある。
5245:04/04/20 00:20
>>49
確かに前方宣言でこのoperatorに関してはコンパイルが通りました。
ところが同じ関数名で引数が異なる関数の宣言部分

template< typename X > class Matrix{
public:
Matrix<X> func(void);
friend Matrix<X> func<X>( Matrix<X> &);
};

のフレンドの funcでエラーが出ます。前方参照を使っても駄目なようです。
gccは全く問題なく通るのですが、これらの余計な前方参照を要するのは
VC7.1のバグなのでしょうか?
5345:04/04/20 00:24
>>48
ストラウストラップよーく読んでね。ホント見落としそうなところに
チョコっとだけ書いてあるから。もちろん前方宣言要とは一言も書いてないけど。
>>52
friend宣言しているfuncがメンバ関数のfuncを指していると解釈されてしまっていると思います.
スコープ解決子を使って見て下さい.

friend Matrix<X> (::func<X>)(Matrix<X> &);

ちなみに関数名の周りのカッコが無いと(Matrix<X>::func)と解釈しやがりますw.

前方宣言についてですが,
friend宣言の時点で関数テンプレートの実体化を行わせるわけですけれど,
その時点で関数テンプレートの宣言は見えていないとならないですから,
私としては前方宣言は必須だと思うのです.
gccの実装ではfriend宣言の後方にまで関数テンプレートの宣言を読みに行ってくれる
ようですが,むしろこちらの方が気が利きすぎかと思います.
>>52
あと49にも書いたのですが,前方参照がわずらわしいなら,friend関数の定義を
クラススコープ内に書くのもおススメします.(49の書き方はわかりにくかったですね)

template<typename X> class Matrix{
...
friend Matrix<X> operator*(Matrix<X> const & lhs, Matrix<X> const & rhs){
//ここにoperator*の定義を書いてしまう.
}
};
>>54,55
丁寧に回答していただきありがとうございました。

>ちなみに関数名の周りのカッコが無いと(Matrix<X>::func)と解釈しやがりますw.

これはここで質問しないと絶対にわかりませんでした。本当にありがとうございました。
前方宣言もgccに甘えていたわけですね。VCのせいにして恥ずかしい限りです。

あと>>49で十分よくわかります。一段余分に関数コールするのがちょっと気になったので
できればまっとうな(?)書き方でなんとかならないかと思っていましたので・・・

親切に教えていただき感謝の気持ちでいっぱいです。
5756:04/04/20 14:24
つづきです。

template< class X > class Matrix;
template<class X> Matrix<X> & Func( Matrix<X> &);
template<class X> X FuncA( Matrix<X> &);

template<typename X> class Matrix{
Matrix<X> & FuncA(void);
friend Matrix<X> & (::FuncA<X>)( Matrix<X> &);

X FuncB(void) const;
friend X (::FuncB<X>)( Matrix<X> &);
};

FuncA はOKですが FuncBは
テンプレート'X'番目の引数の型が無効です。
関数ではありません。
と文句が出ますね。この違いは戻り値の違いでしょうか?

あと、
friend Matrix<X> (::func<X>)(Matrix<X> &);
これは、gcc ではsyntax errorではねられるみたいですね。

うーん!>>49さんの言われるトリック使わないとだめかも・・・
5856:04/04/20 18:37
icc では前方宣言+スコープ解決子できれいに通りました。
結局
gcc3.3.1: テンプレートの前方宣言なしOK, スコープ演算子使うとエラー
icc8.0: 前方宣言+スコープ演算子が要
VC7.1: 前方宣言要,スコープ演算子要,時にスコープ演算子でもエラーとなる。
って結果でした。
さて、VCはどうしよう?
C++のクラスってのが書き方がめんどくさいし、継承とか意味が分かりません
クラスって構造体に関数を加えたやつですよね
大規模な開発で関数が多くなったり、再利用するためにライブラリ化するのに
クラスを使えばいいとは思うんですが、それ以外ってややこしくなるだけですよね
小規模やライブラリ化しないのであれば、C++よりCの方が分かりやすくていいですよね

どうしてC++で作ったほうが良いのかがよく分かりません
小さいソフトでもややこしいC++で作ったほうが良いのでしょうか?
ややこしいC++なので、大きなソフトで使えばさらにややこしくなると思うんですが…
それでも使っ方が良いんでしょうか?
59はC,C言ってるけど実はFortran使いの匂いがするな…って気のせいか…
> ややこしいC++なので、大きなソフトで使えばさらにややこしくなると思うんですが…

そうはならない。
C++のややこしさを使って、大きなソフトを単純な記述で表すことが可能になったりする。
>>59
単に今のところC++から脱落していると言うだけのようですね。
がんばって理解すれば、ちょっとしたものでもC++で書きたくなります。
>>60
>>59レベルのやつにいきなり読ますなって(w
むしろ「憂プラ」の方が入りやすいんじゃ?

というか、オプジェクト指向の必要性を感じないなら無理にC++つかわんでCでいいやン。
多分、>>59氏にはそれで十分なんだよ。
>>59 の言ってる
>小規模やライブラリ化しないのであれば、C++よりCの方が分かりやすくていいですよね
は正しいと思うし、
>小さいソフトでもややこしいC++で作ったほうが良いのでしょうか?
こういう疑問を持つのは当然だと思う。ややこしいっていうのは単に文法がややこしいだけじゃなくて,
C++使っての駒組みっていうか全体構成を考えることもすごくややこしいと思うよ。デザインパターンの話じゃないんだよな。
C++を使って人様が実行速度に満足し,かつエクスキューズなしに安心して使えるクラスライブラリを提供すること
は至難の業だと思うよ。だからC#なんてのが出てきたわけだし,HDLでもC++ベースのSystemCなんてのは
ブレークするかと思った瞬間に牽引会社のSynopsysが手を引いた。これじゃ生産性があがらないと判断したと思う。
300ページぐらいなら読むけど1000ページ超えた言語解説書読破して隅々まで覚えてる奴そう多くないだろ?
別にクラスを使わなくてもC++使ってると言ってる人は、
少なくはないんじゃないかと、ふと思ったり。。。
>>66
多いよ〜。
「C++です」って注釈のついたソース読んだけど、OldCスタイルだったし。

で、「小規模」をどう判断するかでも変わるけど、
c++でcと同程度に書くことは可能だし巧く書ければ
可読性や保守性の点でcに勝ることも可能だと思う。
#問題は、それをできる技術者が少ないことだな。
単純にC++で書いたほうが必然的に頭の中が整理されるので好んで使ってる。
こんな風に思ってるオレって、もしかしてC++のことよくわかって無いのかな?
pure Cではほとんど書いてないな。// はANSI Cではコメントとして認められてたっけ?
TurboからBorlandに変わってすぐにPC-98の上でビヤーンとにらめっこ
しながらC++コード書いてたが、やってはいけないことがよくわからなかった。
Effective C++あたりはそこら辺がうまくまとめられてるんだけど、そんなの未だ出版
されてなかったから手探りで随分遠回りしたよ。
人様の作ったクラスライブラリ使わせてもらうだけならいいんだろな?多分!
禿げビヤーンとEffective Vol1,2読んでオブジェクト指向の本読んで、デザインパターンの
本読んで・・・いつになったら一人前になることやら・・・
そうこうしてるうちにC++自体あぽーんしたってか?
>>68
いきなりクラスから作り始めるわけ?
俺それできない。
ある程度Cで関数作ってみてから全体構成考えてクラス作る。
71デフォルトの名無しさん:04/04/21 03:25
ハードウェアに密着してたり、アセンブラに近い速度出したい人はCとアセンブラでギンギンにチューンしてください。
アプリ組みたい人はC#でやってね。
C++は暇な人やってください。

俺は暇なのでC++使ってる。
あと,complex標準でサポートしてる言語ってFORTRANとC++以外にあった?
>>58
あきらめてクラススコープ内に定義書いちゃいましょうw.
そっちの方が圧倒的に楽だと思います(色々実験して疲れたw).
>>70
C++でやった方が綺麗に書けることが多いよ。
データソースが、ファイルかリソースかメモリであるかを
意識しないでアクセスできるようなストリームクラスを作ってみ?
C++のありがたさが本当にわかるから。
純粋仮想関数の使い方を理解したらCには戻れないよ。
>>70
普通、データ構造とか先に考えてからじゃないと、
アルゴリズムは決まらないでしょ。
ちょっと、効率悪い作り方してるかもしれないから、
先輩とか上司に相談してみたらいいと思うよ。
趣味のプログラミングだったら、その場の思いつきの
行き当たりばったりの作り方でいいと思うけど、
仕事でそんなことやったら上司から雷落ちるなー。
設計と製造を行ったり来たりどたばたしたらマジで鉄拳飛んでくるw
プロの仕事ってそんなもんよ。
76デフォルトの名無しさん:04/04/21 05:13
>>70
そういう怪しい作り方をしないようになるためにも、
C++やったほうがいいかもよ。いやまじで。
7776:04/04/21 05:14
っていうか、いきなり作り始められるところがすごいと思う。
少なくても、作ろうと意識した瞬間、
既に頭の中には仕様書が出来ている?
>77
最初から脳内ですべてのクラス設計が出来る人間などいない

まずは作ろうとしているソフトウェアの要素となる「もの」を
リストアップして紙に書き出してみろ
そしてさらにその「もの」が内包する要素を書き出していけ

で次はそれらがどう関連しあっているかを適当でいいから図にしてみろ
最初から完璧な図を書こうとするより、とにかく思うままに関連性を
図にしていってみろ
おかしい部分に気付いたら、その時に直していけばいい

そうやっていけば、何をクラスにしていけばいいかが見えてくる
こういうことを繰り返していけば、経験則としてどういうクラス設計が
妥当かというのはいずれ身についていくよ
似たようなソフトばっかり作ってるんだから
惰性で決まるだろ
>>73
ストリームクラスを作るより、むしろ、
ストリームを引数に持つ汎用関数を作ると思うのだが。
例:
void Func1(FILE* fp);
void Func2(std::iostream& strm);

ストリームクラスの自作は、あまりに面倒ではないかい?
>>80
そんなに面倒じゃないと思うぞ
>>80
そう考えてしまうのはオブジェクト”思考”ができていないから。
例えば、Func1を利用する巨大な処理がある場合、後でファイルからではなく
メモリからアクセスするように変更しようとしたとき、全て書き換えることになる。

基底クラスStreamで純粋仮想関数Readという感じで作っておき、
派生クラスFileStream、MemoryStreamなどで、Readをオーバーライドすれば、
Streamを扱う側は、それがメモリであるかファイルであるかを考えることなく、
それらを扱えるようになる。

簡単なリードライトであれば、初心者でも一日ぐらいでストリームクラスを自作でき、
その効果が実感できると思う。
83!=80:04/04/21 12:15
>>82
Func2にstd::fstreamの代わりにstd::stringstreamを渡せば
良いだけでは?
84!=82:04/04/21 12:41
Func1を利用する処理がある場合と書いてるじゃん
>そう考えてしまうのはオブジェクト”思考”ができていないから。
アフォの一つ覚えじゃねえのか?オブジェクト指向プログラミングやりたいなら
C++がベストチョイスじゃないだろが?まっとうなオブジェクト指向でいきたけりゃ
別な言語使え。
しかもストリームクラスの自作?いったい何の必要性があってそんな無駄なこと
せにゃならんのだ?大体メモリに関しては速度低下もたらすような余計な操作を
経由することなくアクセスしたいがためにC#じゃなくC++を使ってるのに、バカ学生かお前?
8683:04/04/21 13:47
>>84
そお?82氏の言いたい事ってストリームを抽象化したクラスを
作れって言いたいのでは。
80氏がFunc1とFunc2を何でならべて書いたのかわかんないけど、
>そう考えてしまうのはオブジェクト”思考”ができていないから。
ってのはちと的外れなような・・・。
>>75
>設計と製造を行ったり来たりどたばたしたらマジで鉄拳飛んでくるw
>プロの仕事ってそんなもんよ。
君の会社暴力団かね?
例えば、ハード屋にアルゴリズムを説明したり、DSPのコーディングを外部に委託
するとき、C++で元のコード書いてるとすごく見通しが悪くなるんだなこれが。
C++はこれからも使われ続けるだろうけど、ビジネスの峠は超えたな。
Unix系は相変わらずCが多いしな。
>>78
それは>>70氏に言ってあげてください。
>>87
そうやって話の腰を折るんだよね。
プロ意識が無い香具師ほど、こんなこと言って話をそらす。
多重継承をサポートしてる言語ってC++以外にある?
で、これ禁止すれば随分すっきりするよな。
使わなければすっきりするよ。
今の会社で鉄拳制裁加えでもしたら傷害罪でやった奴は間違いなくクビ。
どころか前科者だわな。まっとうな会社でそんなことする会社あるのか?
聞いたことないな。
粘着が1人いますね。
C++で多重継承使ってる奴いる?多重継承の必要性について熱く語ってくれ!
>>93
そんなこと気にするより、自己を磨くことに専念したほうがいいよ。
そんな会社に居続けるよりやめたほうがいいよ。
>>95
使う人は使えばいいし、必要性の感じない人は使わなければいい。
無理に使おうとして苦労するのも時間の無駄だし、
多重継承だけがC++のご利益では無いから。
オレ、データのカプセル化、
ライブラリのラッパーぐらいにしか使ってないよ。。。
それでもC++がいいよ。Cよりちょっとだけコーディング楽だから。
>>97
まあ、個人の自由だな。
仕事でバタバタしたからといって殴るより、仕事中2CHにアクセスしてる奴を殴ってやりゃどうだ。有限会社ところか三ちゃん会社だろうけどよ。
>>101
まったくその通りですね。先ずはあなたから。
っていうか、殴るに異様に反応する人がいますね。
普通だったら比喩的表現ってみるだろ。
何、過剰反応してるんだか。
関係ない話ですマソ。
JavaもC#も多重継承は必要悪としてる。無くても十分と判断してるわけだな。
C++ではそれを認めてるわけだが、それが理由でC++を使ってる人居るのかい?
WTL。
必要な人は使ってるし、必要で無い人は使ってないんじゃないかな。
だから、サポートしていても使わなければいいだけの話で。
他のC++の機能の恩恵を受けている人もたくさんいるわけで。
必要、不必要と言う話なら、もうこの辺で終わりにしたら?
必要なら使う、必要でないなら使わない。以上。
>>108
だから他の機能のことはどうでもいいよ。君に無理にそれを聞いてるわけじゃないんだから,
使ってなければわざわざレスはいいよ。
こっちは多重継承にどんな実例があるのか聞きたいわけなんだから。
111デフォルトの名無しさん:04/04/21 16:07
lib_socket_init(srvName, &errNum)
ソケット通信関連の関数みたいなんですが、なんなんでしょうか?。
一般的な物ですか?。
> 一般的な物ですか?。
ググればわかるよ
>>110
「多重継承の必要性について熱く語」られても今更迷惑だし…
>>110
それこそ、本を買いあさって読むほうが早いと思うよ。
そこまでやってピンと来なければ、
そういうもんだと諦めるしかないかもね。
あと、仕事などでやってる実例はここでは言えないし。
>>114
だから言えなければレスしなくていいってば!教えてくれる気がある人だけコメントくれればそれでいい。
そんなに書き込みたいの?まともな実例載ってる本が見当たらないから、ここに相談しに来てるんだし。
>>115
cppll にでも行ってみ
11780:04/04/21 16:34
このスレは「車輪の再発明」で独り悦に入るマニアの多いスレですね(w
懐かしい話をここで聞くとはw
オレにはどういう話のつながりかわからないよ〜。
車輪の再開発。話は知ってるけど。。。
>>115
“自分が求めている答以外は許せないタチ”ですか?
いちいち反応しすぎです。

つか、iostream じゃダメ?
要は車を作るのに車輪から新規開発するメーカーはないでしょってこと。
違ったっけ?
で、どこと話がリンクするの?
リンクエラーです。。。
>>122
いや、ハイパーリンクでいいのですが。
iostream っていう実例があるのに、周期的に「多重継承の実例ない?」厨が発生するのはなぜだろう。
は、ひょっとして釣り?
車輪ってiostreamのことか。わかりましたー。
>>115は先ずiostreamをよく調べてからここに来なさいって琴田。
話はそれからでも遅くは無い。以上。
>>71
C(99)
言語仕様の一部を実現するために全体の言語仕様を決めました。
筒子の2から8を2個ずつ集めるのも車輪ですよ。それも大きな。
つまんね
132デフォルトの名無しさん:04/04/23 09:32
newで確保した領域って,
私の環境(Linux 2.4.25,g++ 3.3.3)ではzero fillされるようなんですけど,
これって規格で保証されてるものなんでしょうか?
例えば,
map <short, double> m0;
m0 [0];
cout << m0 [0] << endl;
ってやったときに,0って返ってきて欲しいのだけれど.
たまたまかなぁ.
mapの要素はデフォルトコンストラクトされるので、その場合は0が保証される。
newで生成する値については少し事情が違う。
cppll、もうやだ。
FreeMSVCって環境依存のはなしだろ!?
初心者がそういう話したら、ぺきっておるくせに。
135132:04/04/23 10:37
早速の返答,ありがとうございました.よく分かりました.
>>133
> mapの要素はデフォルトコンストラクトされるので、その場合は0が保証される。
ただ,この説明で新たに疑問が生じたのですが,
私の環境では,スタックに,
double d0;
とか取ったときにはd0が0でないことがあります.
スタックに組み込み型を取った場合は
デフォルトコンストラクトはされないんということでしょうか?

>>135
133がいってるデフォルトコンストラクトは、mapのこと。
double自体には無いです。
137132:04/04/23 10:55
>>136
> 133がいってるデフォルトコンストラクトは、mapのこと。
そうすると,133の内容が
最初の私の質問への返答として,分からなくなるのですが.

m0 [0];
した時点で要素であるdoubleがデフォルトコンストラクトされ,
それの値としては0が保証される.
って説明じゃないんですか???
>>137
0は保障されないよ。コンパイラ依存。
↑ごめん、ちょっとまって、試す
忘れて。
m0 [0];
なんで、ここでコンストラクトされるとおもってるの?
>>140
23.3.1.2 map element access
T& operator[](const key_type& x);
1. Returns (*((insert(make_pair(x, T()))).first)).second.

ということで、まあ T() でコンストラクトされたsecondを持つpairがinsertされ
そのsecond( = T()の結果 )が返ることは規格で定義されてるね。

で、ここでTはdoubleだが、組み込み型に対する明示的な引数なしコンストラクトは
0が返る。
連想コンテナのinsert()は値が存在しているときは追加されず既存の値を返すが
ここでは空コンテナからなので追加されたものが返る。
といことで0は保証。
142132:04/04/23 11:21
>>140
> m0 [0];
> なんで、ここでコンストラクトされるとおもってるの?
誤解されてるかもしれないので丁寧に書きますと,
m0のコンストラクションは,
map <short, double> m0;
で起こり,その時点でm0.size ()は0です.
その後の,
m0 [0];
で,operator []が呼ばれて,
その関数の中で,m0にはkeyが0の要素はまだ無いので,
m0.insert (make (0, double ()));が自動的に呼ばれると
思ったんですが....
ここで,要素doubleのディフォルトコンストラクタが呼ばれると.

それとも,
mapのディフォルトallocatorが使用領域をzero fillしていて,
doubleのディフォルトコンストラクタがないので,
zeroが保証されるとかですか?
m0[0]としたとこで、allocatorが動き出す。
ディフォルトのallocatorは0で埋めるから、
mapで生成される要素に関して0が保障される。
>>133

double *pd= new doubleは、0を保障しない。
double d; も0になるとは限らない。
スッタクだろうが、ヒープだろうが、同じ。
144132:04/04/23 11:24
>>141
> で、ここでTはdoubleだが、組み込み型に対する明示的な引数なしコンストラクトは
> 0が返る。
おおっ! なるほど.
ありがとうございました.
145132:04/04/23 11:26
>>143
> m0[0]としたとこで、allocatorが動き出す。
> ディフォルトのallocatorは0で埋めるから、
> mapで生成される要素に関して0が保障される。

おおっ! なるほど.
ありがとうございました.
146143:04/04/23 11:26
>>141
m(_ _)m
147143:04/04/23 11:38
スッタクってなんだぁ!
たのむ!流行らないでくれ!
148132:04/04/23 11:40
141氏,143氏
>>141
> で、ここでTはdoubleだが、組み込み型に対する明示的な引数なしコンストラクトは
> 0が返る。

>>143
> double *pd= new doubleは、0を保障しない。
> double d; も0になるとは限らない。
> スッタクだろうが、ヒープだろうが、同じ。
が矛盾していますが.どちらが正解なんでしょう?
私の環境(Linux 2.4.25,g++ 3.3.3)では,
double *pd= new doubleは,常に0です.
double d;は0になるとは限らないです.
template <typename T> T default_constuctor (T) {return T ();}
default_constuctor (double ())は,常に0です.
149143:04/04/23 11:43
double *pd= new double();
double d();
こういうことなら、非環境依存で0になるんじゃないかな。
>>149
後者は関数宣言な罠
151143:04/04/23 11:48
・・・。 ('A`)スッタク
152143:04/04/23 11:53
VC7.1で、
double *pd= new double();
*pd == 0 です。

double *pd= new double;
*pd != 0 です。
>>149
5.3.4(New)の15によると、Tが組み込み型(POD)の場合
new T() だと初期化され、 new T だと不定値になるね。
()の有無が重要なんだなあ。
154132:04/04/23 12:08
>>153
> 5.3.4(New)の15によると、Tが組み込み型(POD)の場合
> new T() だと初期化され、 new T だと不定値になるね。
> ()の有無が重要なんだなあ。
なるほど,148の疑問が分かりました.
私の環境でdouble *pd= new doubleが,常に0なのはオマケということですね.

おつき合い頂いたみなさん,どうもありがとうございました.
>>134

勝手に「メールアドレス付きの」ログをWebに晒されてるのが嫌。
spamがウザいので投稿で投稿したくない。

なので、2chにいるのだ。
cppll_noviceが上級者に荒らされてるような気がするのは俺だけ?
>>156
cppllもnoviceも万年初心者の漏れには投稿しづらいッス。
スッタクドッコイ!
ヒプー
160デフォルトの名無しさん:04/04/24 06:21
コンストラクタへの関数ポインタってどうやって宣言するの?
コンストラクタは関数じゃな〜い
ちょくちょく出てくる “cppll” って何かと思ったら、エビか…
163デフォルトの名無しさん:04/04/25 01:07
nslookupでk.vodafone.ne.jpのMXコードを調べたいんですが検索できません
何か検索する方法はないんですか?
class Cexception{
const char* str_;
public:
Cexception(const char* str) : str_(str){}
const char* what() const {return str_;}
};

こんなかんじの例外クラスを見かけたんですが、コレ大丈夫なんでしょうか
コンストラクタに渡すstr次第なんじゃね?
>>165
そのとおりだが(w
エラーメッセージが全部グローバルで用意されているのかな?
使いにくそうな例外クラスではある。
>>166
cから延々と引き継いでるプロジェクトとか、cから流れてきたプログラマとかだと
平気でやりそうな設計ですね。
std::exception派。
169160:04/04/25 14:45
コンストラクタへのテーブル作りたいのだけど困ったなぁ。。。

  Class{
  public:
    Class();
  };

のとき、

  Class& (*pfnClass)();

とかできそうなもんだが何故できない?
>>169
で、そのコンストラクタが初期化すべきオブジェクトはメモリ上のどこにあるんだ?

素直にT*を返す関数作れ。なんならtemplateで。
>>169
コンストラクタを直接呼び出すことは禁止
(領域の初期化がセットになる、つまりnew経由の必要がある)なので

Class hoge {
public:
static hoge * create() { return new hoge(); }
};
とでもすれば hoge::create()が静的なアドレスとれるが。

何がやりたいの?
172160:04/04/25 17:26
>>171
そうだ、私がやりたかったのはソレダ
ありがとう
173デフォルトの名無しさん:04/04/26 00:01
すみません、自分はjavaを主にやってるのですが
ファイルを示すクラスを作るときなどに

ファイルが存在した場合はオブジェクトを返却する関数をつくり
ファイルが存在しない場合はnullを返却するようにしています。

c++の場合ってそういう場合は実装するといいでしょう?
ファイルが存在しない場合はnullポインタを返却するとして
存在する場合にnew したとするとスコープの問題があるようなきがします

c++のえろい人だったらどうやって実現しますか
こんな感じで作るというのをアドバイスいただけると助かります。
>>173
スコープの問題とは?
>>174
即レスサンクスです

Hogeというクラスがあって

Hogeというクラスの中にcreateHoge()という関数(メンバ関数ではない)を作るとして
そのなかでHoge*を返却する場合に new Hoge()とした場合に問題はないのでしょうか?
例外投げる。
>>175
NULLじゃなくてis_openみたいにすれば
どうもサンクスです

>>176
そのケースもjavaでやったんですけど
例外キャッチするのがだるいじゃないですか

でもそのパターンも考えてみます

>>177
なるほど
コンストラクタ呼び出したあとに必ず
定められたメソッドを呼び出して判定すると

それが一番スマートですかね
file存在しない場合はNULLObject作って>>177みたいにするとか
戻り値はauto_ptrにすれば安全かな
>>175
auto_ptrを使うとか:
if (Hoge *ptemp = Hoge::createHoge()) {
std::auto_ptr<Hoge> phoge(ptemp);
// phogeを使って色々...
}
って手もあるけど、例外のほうがいいかも。
例外で処理するのが一番だよ.
でもってファイル操作は。
必要になった時点で fopen 使えばいいじゃないか。
<< なんか使うより fprintf の方が簡単でずっと良いだろ?
18256:04/04/26 22:54
>>55
いろいろやってみてわかりました。
結局 icc8.0/vc7.1/gcc 共
前方宣言に加えて、クラス内部でのfriend 関数の宣言をメンバ関数より先に行うことで、
スコープ解決子の助けなくコンパイルできることがわかりました。
因みに、(::func<X>)はgccが許可しません。
具体的に書くと次の通りです。

template< class X > class Matrix;
template<class X> Matrix<X> & Func( Matrix<X> &);

template<typename X> class Matrix{
friend Matrix<X> & (::Func<X>)( Matrix<X> &);
Matrix<X> & Func(void);
};

>>58にiccでコンパイルできたと書きましたが、Funcをコールしてないときに
コンパイルできてるだけで、Funcをコールするとリンクエラーになってました。
もちろんgcc はfriend 関数とメンバ関数の宣言順なんて関係なく通ります。
やっぱり、gccの方が歴史も古い分、出来がいいような気がしますが・・・?
18356:04/04/26 22:57
間違い間違い。すみません。

template< class X > class Matrix;
template<class X> Matrix<X> & Func( Matrix<X> &);

template<typename X> class Matrix{
friend Matrix<X> & Func<X>( Matrix<X> &);
Matrix<X> & Func(void);
};
184デフォルトの名無しさん:04/04/26 23:04
ファイル内static変数は近い将来なくなるとストラウストラップが言っていたそうですが
変わりに使えと言われる無名namespaceはファイル内staticな変数と比べて
どんな利点がありますか?
副作用など無く、ただ
「スコープを制限するためだけにある」
ってことくらいか
ハァ?何がstatic?とか思いながらタイプしなくていい。
スコープ引っ越すときにつけたりはずしたりしなくていい。
内部リンケージとか外部リンケージとか気にしなくていい。
187175:04/04/27 02:10
いろいろなパターンを教えていただき感謝です

結論からいうと
今自分で作ってるソフトの例外クラスを一つ作って
そいつにエラーコードを渡すようにしました。
でファイルが存在しない場合は例外を返すようにしますた。


>>179
NULLObjectっていうことは
必要なメンバの初期化をすっ飛ばして
isOpenとかで有効かどうかチェックするってことですねたぶん

>>180
auto_ptrってのは初めて聞きますが
stlのコンポーネントみたいですね
余裕が出てきたら調べて見ますサンクス

>>181
結局例外で処理することにしました
多謝です

>>182
自分も色々試したのですが,結論としては,テンプレート引数に依存する型を返り値とする関数
(そしてこれはまず間違いなく関数テンプレートになると思いますが)
をfriendとして宣言するときには,型の付かないスコープ解決子(::)は使えない
(使わなくて良い)ということみたいです.
で,このときはクラス内での宣言順に気をつけたほうが良い(>>182)というわけですね.
なので54の前半分で書いたことはどうやら間違いくさいです.
誤った情報を提供してしまって申し訳ないです.
自分も色々試してみて勉強になりました.(が,細かい規格に正直うんざりした面もw)
Matrix ライブラリのBlitz++ですが、もう随分前からファイルが
消えてるんですが、
http://www.oonumerics.org/blitz/download
プロジェクト自体あぽーんしたんでしょうか?
>>189
sorceforgeのミラーから普通に落とせたが?
>>189
本当だね。最終更新日も去年の7月だし。boostのuBLASにBlitz++
その他のライブラリを開発する時のノウハウを盛り込んだと書いて
あるから、もしかしたらBlitz++プロジェクトは事実上停止し、uBLAS
に開発者が移った可能性はある。

どっかにソースないかな。
>>193
本当だね。URLを全部指定しないとだめぽ・・・・
CGIからは全部削られているみたい。
195デフォルトの名無しさん:04/04/27 18:30
C++って何で、
extern "C" { }
が要るの?

これのせいで、どれだけ手間が増えてるか!
>>195
オブジェクトファイルの命名規則がCと違うから。
197196:04/04/27 18:34
性格には、
オブジェクトファイル内で使われるシンボルの命名規則が違うから。
誤解を招く表現だったな。
>>195
そんなに手間増えるか?
>>195
多分、ここにそんなレスを書き込む手間のほうがめんどいとおもう。
20056:04/04/27 19:54
最終報告です。
上でgccの出来が云々と書いたのですが、コンパイラオプション
vc/icc /O2 /arch:SSE2 /G7
gcc -O2 -march=pentium4 -mfpmath=sse -msse2
としルーチンの入り口と出口で
time_t start, end;
start = time((time_t *)0);
...
end = time((time_t *)0);
std::cerr << difftime( end,start);
としたところ,
icc 1.0e+001
gcc 2.0e+001
vc 4.4e+001
となりました。icc8.0が断トツ。icc比gcc は半分。vc7.1は1/4の速度となりました。
20156:04/04/27 20:14
上のgcc はWinXPのCygwinです。version 3.3.1 -mno-cygwin としてます。
因みに同マシン上でFreeBSD 5.2 gcc 3.3.3では 1.5e+001となりました。
FreeBSDが何でXPより遅いのか判ってませんが??
20256:04/04/27 20:17
あ!XP では20 FreeBSD 15だから速いんだ。オカルトが起こらなくてよかった。
間違いばかりでスンマセン。
>>202
レポートおつ〜。

>!XP では20 FreeBSD 15だから速いんだ
20、15ってなんでしょうか?

スッタク、ヒプー ワロタよw
>>183
> template<typename X> class Matrix{
> friend Matrix<X> & Func<X>( Matrix<X> &);
> Matrix<X> & Func(void);
> };

どうでもいい話かもしれませんが、↓のほうがよくないですか?

template<typename X> class Matrix{
friend Matrix& Func<>( Matrix&);
Matrix& Func(void);
};
difftime の結果が
Cygwin -mno-cygwinだと20sec
FreeBSD のgcc だと 15sec
も一度書き直します。
XP
icc8.0 10sec
gcc3.3.1 -mno-cygwin 20sec (因みに-mno-cygwin指定なければ 80sec)
vc7.1 44sec

FreeBSD 5.2
gcc 3.3.3 15sec
テストソースはMatrix計算を多用(カルマンフィルタ)したものです。
コマンドラインからファイルかディレクトリ名を入力してもらって、
ファイルの場合は末尾にabcと書き込んで、ディレクトリの場合にはそのディレクトリに
abc.txtというファイルを作成し、そこにabcと書き込むようなプログラムを作りたいのですが
コマンドラインから入力されたものが、ファイルかディレクトリかを識別する方法ってありますか?
>>207 bool boost::filesystem::is_directory( const boost::filesystem:path & ph );
>>208
boostを使うわけね。
実はboostって触ったことすらなくてちんぷんかんぷんなんだけど、
調べてみたら面白そう。少しやってみるよ。
ありがとうございました。
>>204
本当にどうでもいい話なら
boost::numeric::ublas::matrixを使えば終わるという説も
テンプレート引数を持つ関数のfriend宣言は何もmatrixライブラリに限った話ではない。
212C++:04/04/28 22:24
>>204
下の方が良いというか,どっちでも良いはずです.

>>210
どうでも良くなくても,普通はそうするべきですね.
214デフォルトの名無しさん:04/04/28 23:20
すいません。自然定数eを計算によって求め、結果を表示するプログラムの作り方を教えてください。
>>214
まず数値計算を勉強汁!
っつーか自然定数って何だよ。自然対数の底だろうが...ったく。
そもそもさぁ、おまえにはググって答えを見つけるぐらいの知恵はないのかよ。
216デフォルトの名無しさん:04/04/28 23:57
そう問題に書かれているからわからんのですよ
「自然定数」ってなんだかわかんなかったから、かわりに
「自然対数の底」を求めるプログラムを作りました。

って書いて提出すれば問題なし(たぶん)
218デフォルトの名無しさん:04/04/29 00:05
とりあえずそうしてみます。アドバイスありがとう
219デフォルトの名無しさん:04/04/29 00:30
自然対数の底 e = 自然定数
"+自然定数" の検索結果 約 108 件
"+自然対数" の検索結果 約 6,330 件
>>213
>どうでも良くなくても,普通はそうするべきですね.
それは違うな!そんなことはboostがISOの仕様に含まれてからいうべき。
標準仕様に含まれてないものを使うべきなどとは誰もいえない。
どうでもいいけどBoostダウンロードできるか?
http://www.boost.org
223213:04/04/29 01:26
>>221
あ,違います違います.
213は,既存のライブラリがあるなら,自分で車輪の再発明をするよりは
それを使うべきではないか?という意図の書き込みです.
boost::numeric::ublasを使うことを強制するつもりはまったく無いです.
特にmatrixは他の有力な候補もありますし.
sfのミラーから落とせないならsf.net自体の不調だろ。なんかあそこトラブル多いし。
for( double x = 0; x < 1.e6; x += 1.0 ){
double tmp = 1.0 + 1.0/x;
double ex = pow( tmp, x);
fprintf(stderr, "%e %e\n", x, ex);
}
質問してきた奴をぐちゃぐちゃ罵倒してる暇あるならわずか5行で回答
できるだろが!
>>225
#include <math.h>
#include <stdio.h>
int main(void) { printf("%f\n", pow(2, (1 / log(2)))); return 0; }
わずか3行でできるだろうが!
よく車輪の再発明が愚の骨頂のように言う人いるけど、温故知新ってことわざもあります。
boost使って楽だけど、楽して一ユーザとして過ごしてるだけじゃ、難しくて膨大な
言語仕様のC++はなかなか身につかないんじゃないすか?C++習得の教育効果という意味で
matrixのクラスライブラリの作成は有意義だと思いますが・・・
まあ確かに、演習としてはStringとかArrayとか作るわな。
>>226
>>すいません。自然定数eを計算によって求め、結果を表示するプログラムの作り方を教えてください。
出題者は収束する様子を確認させたいんだよ.
それと、自分のプログラムの中でその依存度があまりに高い場合、自前で作るのは決して悪くないと思う。
汎用目的のものをカスタマイズすると思いもかけず速度が改善したりってこともあるし。何より内容をちゃんと
理解しとくとサポートを中止されたときでも安心ってのもあるよ。
車輪を作るのは面白いし勉強になる。
しかし自分が本当にやるべきこととはズレていることが多いので注意。
再発明上等ヽ(`Д´)ノVC5じゃboostまともに使えねーんだもん
>>227
教育的効果については激しく同意します.

>>230
使いたい機能が本当に限定される場合だけですね.普通に使えるものを作ろうとすると結構大変ですし.
string, vector, matrixとかって見た目ほど中身は簡単ではないですし.
それに最近のC++のライブラリは,汎用性を維持しつつ,ユーザが要求に合わせてカスタマイズし
最大限に効率を発揮させることのできる,いわゆるpolicy_basedなものが多くなってきていますから,
「ライブラリ=汎用で遅い」という図式は必ずしも成り立たなくなってきているように感じます.
(その代償として使い方が異常に煩雑になるという欠点を負うんですが)

>>231
耳が痛いですw
この仕事長くやってると、車輪作るのウザったくない?
まあ、若いうちだけだなって感じ。
あれだよ。そんな雑魚仕事は新人研修の課題にでもすればいい。
今がちょうどいい時期。
所詮、人様の作ったライブラリの wrapper 作ってるだけのソフト屋が雑魚仕事とは片腹痛し。
初心者が「これがあれば(゚∀゚)イイ!!」
と思うようなものはすでに存在している。
複数人参加型のプロジェクトで使わない事を前提にするなら、
自作ライブラリを作るなりなんなり勝手にすればいい。
ただし自作を自慢すんな、このスレで。はずかしいぞ。
>人様の作ったライブラリの wrapper 作ってるだけ
あいたた! まさに>>237 の仕事そのもの
と、以前に自作自慢で恥をかかされた経験のある>>238が申しております。
240デフォルトの名無しさん:04/04/29 06:26
と、以前に自作自演で恥をかかされた経験のある>>238が申しております。
241デフォルトの名無しさん:04/04/29 06:29
と、顔を真っ赤にして煽りをいれる>>239-240が申しております。
と、顔を真っ赤にして煽った経験があるから
他人も同じ事するに違いないと思い込んでいる>>241が申しております。
再発明という表現にも語弊がある気がするね。
結局、誰かがもう通った道をなぞってるだけじゃん。そりゃ楽だし面白いわ。

自分だけの新大陸を見つけよう。
244210:04/04/29 07:16
>>227
matrix作るのも悪くは無いが>>228くらいにとどめておくか
貧弱な2(or多)次元配列クラスが作れた、程度でいいと思う。
matrixで学習すべきはExpression Templateじゃないかと。
てことで誰か俺にExpression Templateを学習できる出来れば日本語のサイトを教えてくれ_| ̄|○
245デフォルトの名無しさん:04/04/29 07:32
>>243
実は、コロンブスやマゼランは中国(明王朝)の探検団の作った地図を頼りに
新大陸に到達したという説が浮上している。
TBSの「世界ふしぎ発見」でやってたよ。マジレス。
ほとんどの製品開発っていうのは再発明なんだよな。再発明じゃないのは製品の規格制定段階の
ファーストランナーだけ。ところが再発明といっても全く同じプロセスじゃないから新たな発明が生まれる。
>>245
それはもしかして鄭和のことか?
日経サイエンスにコロンブス以前に新大陸について書かれた地図の真贋論争というネタが
載ってたな。というか、コロンブス以前にヴァイキングが行ってたのは間違いないらしいが。
ここは車輪の再発明ネタだけで何倍もおかわりするインターネットですね。
250245:04/04/29 12:26
>>247
そういえば、そんな名前が出てたかもしれない。

コロンブスの大陸到達時の文献に、
アメリカ原住民と明らかに肌の色が違う人々が他にいたと書かれている。
由来不明の古い灯台の遺跡が存在し、その設計寸法の最小単位が
中国で用いられていた単位と一致する。
などなど、色々番組で言ってたよ。
>>249
既に答えがわかってるもの以外人に相談しても答えられないだろ。再発明が嫌な奴はこのスレ
に来るなって琴田。
ところで、
数値計算するのに行列の演算ではなく操作というかインターフェースを提供してるだけ
のublasなんか使ってる椰子なんているのかね?実際の+/-/*以外の実際の演算は結局自分で
つくらにゃならんだろ?実数に限定するならnewmat の方がよっぽど便利
http://www.robertnz.net
車輪は車輪でも俺の車輪はレース用のスペシャル仕様
市販品ではタイムが下がりますよ?
>>252
スポンジタイヤを紙やすりで削ってますか?
シャーシは肉抜きしてますか?
タミヤの電池使ってますか?
そして結局「適材適所」に落ち着くわけか
>>236
オレの事かと思ってびっくりしたよw
パフォーマンスがどうこう言ってSTLを
否定する>>252のような痛いヤシがいたが、
また息を吹き返したようだな(w
>>256
お前は何もわかってないな
>>257
お前がな。相当に痛いよw
>>255のように謙虚になれないヤシって痛いよな。
ユーザーモードはすでにそれ自体がラッパーなのに、
それを自覚できない馬鹿のなんと多いことか。
ラッパーと非ラッパーの二種類に分ける気かよ

無茶だなー
じゃドライバとか作ってるとエライわけだな
262:04/04/29 19:39
おまえら人間ってラッパーしか作ってないじゃん
俺はトロンボーン奏者だ
俺はフルート奏者だ
yippy yo yippy yay
あれ、ここなんのスレだっけ
俺はハーモニカ走者だ。
俺は尺八掃射だ。
利用しやすいインターフェイスの構築は立派なことだと思います。
C++の数値演算ライブラリってなかなかいいのがないよ。liboctave+atlasがなかなかいいけど、
blitz風の行列の設定方法(A = 1,2,3,5,6;)が使いたいとか言い出すと結局自作せざるを得ない。
C#が出てきたことでC++はなくなるんですか?
C#でOS作れるのか?
継承は何の為にある
C++使いとしてはC#の存在が気になるんですけどね。
C#が出来たから何か良いことあるんですかね?
すまん、知らんのだが、Windows以外でも使えるの? C#。
本屋に行くとやたらとC#関係の本が並んでいるのが気になるところ。なんで?
スレ違いだけどLonghornでWinFXがネイティブAPIになるからじゃないの。
つーかGW的な流れだね。
オライリーのC#本を見たときは、妙な感慨があったな。
C#の本ぱらぱら読んだだけなのだが、継承でsealとかoverrideを明示するのはC++にはない
新しい機能。こんなのはC++でもあっていいとオモタ。
俺はポインタ大好きなんで、明示的なポインタがないのは寂しいけど
-> がないのは確かに見やすいとオモタ。
ただ条件コンパイル指定の機能が弱いのと、
結局遅くてOffice作るには使えんかったというのはホントか?
少なくともデバドラは書けんが特にWin上の統合環境でVB/C++行き来しながら
アプリ書かんでいいのは楽ということらしい。・・・でいいんかな?
まぁ数値計算メインの椰子には用はないってことで。
Winのアプリ屋がいうには最近ほとんどC/C++の仕事はなくC#がメインらしい。
でも組み込みやディジタル回路屋では全く話は別でC#のかけらもない。
まあ、C#はまさに”次世代”のためのものだな。
スペック的にVS.netが動けるマシンじゃないのに開発してていらいらしたよ。
でも、コンパイル時にちょっと重いだけで一旦走り出せばそんなには気にならない。
C++の知識があれば習得は容易だけど、いろんな面でJavaの方が近いのはなんだかな・・・
ピアソンのC++のテキストで、
「isspaceはワイド文字用のバージョーンでオーバーロードされている」というくだりがあるんだけど
確か、ctypeヘッダではisspace()は一つしか定義されてないし、それ以前に
Cの仕様のライブラリなんだから、オーバーロードされているはずないと思うんだけど・・・
誤訳かなんかと考えて宜しいでしょうか?
iswspaceのことかなあ。
C++知ってる奴には習得は容易というけど、両方いじくるはめになったら混同しそう。
monoってのが既にあるけど、adaやjavaまで手を広げたgccもサポートしそうだな。
>>281
オーバーロードというよりtemplate版だが<locale>にある。
Cライブラリ関数にオーバーロードが追加されているのは珍しくない。
strchrとか、absとか<cmath>の各関数とか。
>>284
サンクス。
やっぱ
#if〜#endif
は欲しいよ。
try、throw、catchを記述すると例外をthrowしなくても実行速度に禿しく影響しますか?
>>287
理想としてはほぼ影響ないように実装できるはず、という話になるが、
現状のコンパイラのほとんどにはそこまで期待できないので、
実測しないと答えはわからない。
>287
禿げしくてのは内容にもよるが、影響はある。
例外処理を行う以上、そのオーバーヘッドは避けられない。
>>287
むしろ関数の入り口に throw() を書くように徹底すると
速度が上がると思うよ。
>>290
BCC5.6.4じゃあ逆に遅くなっちまった。

#include <iostream>
#include <boost/progress.hpp>

void func() {}

void func2() throw() {}

int main()
{
 {
  boost::progress_timer t;
  for (int i = 0; i < 100000000; i++)
   func();
 }
 {
  boost::progress_timer t;
  for (int i = 0; i < 100000000; i++)
   func2();
 }
}
293デフォルトの名無しさん:04/05/01 13:43
>>292
普通遅くなるだろう。関数のケツでcatch(...){terminate();}するのと同じ処理が入るわけで。
ポカーン
ポカーン
296質問者:04/05/01 14:00
g++とicpcではfuncとfunc2の速度の差はほとんどありませんでした。
素人目に見ると、func()は任意の例外を搬出し、func2() throw()は例外を搬出しない事が
保障されているので、catch(...)を挿入すべきはむしろfunc()を実行するブロックだと思えるのですが
その辺どうなっているのでしょうか?
297デフォルトの名無しさん:04/05/01 14:07
>>296
規格嫁
例外を搬出しないことを保証するために、catch&terminateするんだって。
g++3でも有意の差がでるよ。throw()するほうが遅い。
298質問者:04/05/01 14:14
禿本読んで書いてなければISダウソして読んでみます。
progress_timerじゃ差が分からんですね。
299デフォルトの名無しさん:04/05/01 14:16
int*をnewしてreturnする関数としてfunc,func2を作ってみた。

・func()のg++ -S結果

.globl func()
.type func(),@function
func():
.LFB2:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
subl $20, %esp
.LCFI2:
pushl $4
.LCFI3:
call operator new(unsigned)
leave
ret
300デフォルトの名無しさん:04/05/01 14:16
・func2() throw()のg++ -S結果

func2():
.LFB4:
pushl %ebp
.LCFI4:
movl %esp, %ebp
.LCFI5:
subl $20, %esp
.LCFI6:
pushl $4
.LEHB0:
.LCFI7:
call operator new(unsigned)
.LEHE0:
leave
ret
.p2align 2,,3
.L6:
incl %edx
je .L3
subl $12, %esp
pushl %eax
.LEHB1:
call _Unwind_Resume
.p2align 2,,3
.L3:
subl $12, %esp
pushl %eax
call __cxa_call_unexpected
301デフォルトの名無しさん:04/05/01 14:27
C++のstaticなメンバ関数ってどういう意味があるの?
302デフォルトの名無しさん:04/05/01 14:30
>>301
意味がないと思うなら使わなければいい。

C言語に意味がないと思うならアセンブリ言語を使えばいいというのと同じ。
303デフォルトの名無しさん:04/05/01 14:31
>>301
オブジェクトのインスタンスを生成せずに直接使える。

Class::Method();

見たいな感じで。
304デフォルトの名無しさん:04/05/01 14:31
>>302
どういう意味があるのか聞いているのですが。
>>301
CClass::Func();
こんな使い方が出来るのでは?
306デフォルトの名無しさん:04/05/01 14:32
>>303
どういう意味があるのか聞いているのですが。
307デフォルトの名無しさん:04/05/01 14:33
>>305
どういう意味があるのか聞いているのですが。
308デフォルトの名無しさん:04/05/01 14:33
>>303
printfみたいな関数と同じようにつかえるんですね。
よくわかりました。
ありがとうございました。
















よし。
>>308
どういう意味があるのか聞いているのですが。
311デフォルトの名無しさん:04/05/01 14:51
JAVAでの

int count = 0;
while(count < 1) {
 try{
  ・・・ここで入力
 }
 catch (NumberFormatException e) {
  System.out.println("正しい入力をしてください");
  continue;
 }
 count++;
}

のようなことをBorland C++でやりたいのですが、どのようにすればよいでしょうか
int count = 0;
while(count < 1) {
 try{
  ・・・ここで入力
  ・・・入力値チェック(エラーなら例外スロー)
 }
 catch (CHogeException e) {
  puts("正しい入力をしてください");
  continue;
 }
 count++;
}
313301:04/05/01 15:02
なんか、質問した本人がいない間に、
お礼まで書き込まれて話が完了してる・・・・

>>303
ものすご端的で明快な回答どうもでした。
なるほど、インスタンス無しで使えるのは便利ですね。
やはりシングルトンにアクセスするために使うのがメインになるのかな?
314311:04/05/01 15:03
入力値チェックの方法がわかりません。
>>313
テンプレート関係のコードでは結構使う。
例えば関数テンプレートの部分特殊化の模倣に使える。
ttp://www.tietew.jp/cppll/archive/3819
>>313
>ものすご端的
日本語は正確に書きなさい。


>>314
そこまで面倒見切れない。
どういう入力を期待していて、何を入力エラーにするかも書いてないし。
>317
int型整数を期待してそれ以外と、範囲外をエラーとしたいです。
>>318
宿題スレへ(・∀・)カエレ!
320デフォルトの名無しさん:04/05/01 15:29
今319が良い事を言った
>>316
うるせーばか!
322301:04/05/01 15:45
どうも、勝手に返事をしてくれる方がいるようで。

>>315
いろいろ応用方法があるんですね。
リンク先、目を通してみます。

>>316
てへ
323315:04/05/01 15:51
>>322
> どうも、勝手に返事をしてくれる方がいるようで。
質問方法が厨すぎるから皆、煙たがってんだよ
空気嫁
空気嫁

      /,.ァ、\
     ( ノo o ) )
      )ヽ ◎/(.  
    (/.(・)(・)\
    (/| x |\)
      ( ヽノ
       ノ >ノ  ヒタヒタ
  三  しU
空気嫁キタ━━(゚Д゚;)━━( ゚Д)━━(  ゚)━━(   )━━(゚   )━━(Д゚ ;)━━(゚Д゚;)━━!!!
最近C++も始めたんですけど
C経験者ならiostreamよりstdioで実装した方が有利ですかね
あとstringもほとんど使ってないっす
>>326
何に対して有利不利なのか文章からは不明だけど、
別の言語だと思った方が最終的には幸せになれると思うけど?
>>326
C経験者はstdioの方が使いやすいだろうけど、
それじゃいつまでたってもiostream覚えられん罠。
stringは使ったほうがいいと思う。単純ミスのバグ減らせるし
>>328
stringは、変なこだわりさえ持っていなければ使うだろう。C使いからみたらかなり便利。
ま、確かに printf とかの書式付出力は結構便利だと思う。
iostream で使いたければ boost::format 使うよろし。
332326:04/05/01 19:05
了解しました

演算子のオーバーロードはなかなか面白いです
実行時のオーバーヘッドとかは気になりますけど
>>332
そう思うならガシガシ逆汗してオーバーヘッドがどんなもんか確認汁。

最近の人間はそれできない人多いから、Cしかできない爺の活躍する
場になるぞ。
> 最近の人間はそれできない人
急いで書いたら修飾がかぶった。ソマソ。
>>333
結論として、Cと比べてルーチン内に
CALL命令が沢山あるということですか
>>335
一般的な傾向としてはそうだね。ctor, dtor呼びが自動で入るわけだし。

ただ、callを出来る限り減らすことはできるし、やりようによっちゃ局所的にでCよりcall
回数を減らすことだってできる↓んだけど、そこまでできる人も解析できる人も僅かという話。

ttp://www.tietew.jp/cppll/archive/4252
ttp://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html

>>336
Cしかできない爺もアレですが・・・

C++はかじったばかりですが、もう既に
C++の汎用的すぎるライブラリは、かなり抵抗あります
あのスマートなコーディングは魅力ですが
テキスト丸写しの簡単なテストプログラムでもiostream使うと
実行ファイルのサイズが凄いですね
iostreamでコードサイズ喰ってるのはやたら高機能なlocale回りとかだった気が。
しかもほとんど使われてないという。
大抵は、出力はそのまま垂れ流すからなあ。
>>337
> C++はかじったばかりですが、もう既に
> C++の汎用的すぎるライブラリは、かなり抵抗あります
俺はゲーム関係なんで、C++でスマートに書きつつ速度も稼がないとならんのだけど、
そういう関係じゃないならその抵抗感はひとまず捨ててしまったほうが良いのでは?
コンストラクタで受け取ったポインタの内容を読み出したり変更したりするクラスを作りたいのですが
可能な場合に極力constを徹底しようとして壁に当たりました。

class A{
private:
char* ptr;
public:
A(char* p):ptr(p){}
void write(){*ptr=1;}
char read()const{return *ptr;}
};

void hoge(const char* foo)
{
char* bar = new char[10];
A normal_A(bar);
const A const_A(foo);
}

ここでnormal_Aは問題ないのですが、const_Aをread()のみ可能なように
成立させるにはどう書くべきでしょうか。
最初の初期化以外はクラスが変更されないことを保証する

A(const char* p):ptr(p)const{}

みたいなコンストラクタが書けるといいのですが。
もっとも、このようなコンストラクタが書けた所でptrがconstではないですけど。
342341:04/05/01 21:30
もしかしてtemplateでptrとコンストラクタの引数をconst char*にするのが正解?
343デフォルトの名無しさん:04/05/01 21:31
>>341
現状でもむりやりなconst_castさえしなければ無問題に思うが?
344341:04/05/01 21:41
>>343
即レスサンクス。
341のコードはconst_castしてないです。
そのままコンパイルしようとすると

const A const_A(foo);

の箇所でfooがconst char*なのに対してコンストラクタの宣言がchar*なので
エラーが出るはずです。これを

const A const_A(const_cast<char*>(foo));

と書けばエラーはねじ伏せることが出来ますが、間違えて

A const_A(const_cast<char*>(foo));

と、変数のconstを付け忘れてしまうとfooがconst char*にも関わらずwrite()出来てしまう事が問題になります。
345デフォルトの名無しさん:04/05/01 21:47
>>344
class A{
private:
char* ptr;
const char* cptr;
public:
A(char* p):ptr(p),cptr(0){}
A(const char* p):ptr(0),cptr(p){}
void write(){*ptr=1;}
char read()const{return (ptr ? *ptr : *cptr);}
};

つーかどういう文脈でこういうことがしたくなるのかわからんけど。
イテレータを自作してて、const_iteratorとiteratorを1つで
済まそうとすると、そういう羽目に陥るのではないかと予想。
347341:04/05/01 22:30
>>345
参考になります。
実際は最適化されるので微々たるものでしょうけど
readする度に分岐するのが精神衛生上良くないですね。

> つーかどういう文脈でこういうことがしたくなるのかわからんけど。
こういうことをしないとなるとコピーコンストラクタでしょうけれど
リソースも入り得る場合、リソースは普通コピーしませんよね。
一度読んだらshared_ptrかなにかにして使いまわすと思うのですが。
348デフォルトの名無しさん:04/05/01 22:39
>>347
なにをしたくてこのクラス書いてるのか教えてよ。
>>348
ビットマップのクラスです。
通常はクラスがshared_ptrを用いてメモリの生成し、自由に中身を書き換えていくわけですが
リソースにも同じクラスを使いまわそうとしています。
また、方針としてクラスをコピーした場合には
ポインタが同じメモリを指すようにしています(そのためのshared_ptrですが)。

そこでリソースは極力constで扱いたいという考えです。
>>349
>リソースにも同じクラスを使いまわそうとしています。
これをやめたほうがいいに1000clock

>>350
もしかしたら全体から見ればリソースの持ち方などの
やっていることは間違っているのかもしれませんが、
狭い範囲で見るとあるポインタを保持するクラスに
constのポインタも渡せるように出来ないか、という話でして解決の糸口が無いものかと。

静的なリソースと動的に作ったものを合成したりするわけですから
constかそうでないかだけの違いでクラスを分けてしまうのも不便ですし。
352デフォルトの名無しさん:04/05/01 23:38
教えてください。固定小数クラスをでっちあげて、

class FixedPoint {
public:
FixedPoint(int integer, int fractional = 0) : i_(integer), f_(fractional) {}
FixedPoint operator*(const FixedPoint& fp) const {
const int tmp = (i_ * 100 + f_) * (fp.i_ * 100 + fp.f_);
return FixedPoint( tmp / 10000, (tmp % 10000) / 100 );
}
const int i_;
const int f_;
};

こんな感じの計算をすると

FixedPoint f(1, 50); // 1.50
FixedPoint h = f*f*f*f;
return h.i_;

(続く)
353デフォルトの名無しさん:04/05/01 23:41
(続き)
movl $1, -8(%ebp)
movl $50, -4(%ebp) # <variable>.f_
movl $2, -16(%ebp)
movl $25, -12(%ebp) # <variable>.f_
movl $3, -24(%ebp)
movl $37, -20(%ebp) # <variable>.f_
movl $5, -32(%ebp)
movl $5, -28(%ebp) # <variable>.f_
movl $5, %eax
こういう感じの処理に展開されてしまいます。戻り値の5は
最終行でいきなり得られているんですが、その前の8行が
完全に無駄です。これ取り去る方法というか、取り去られる
ようなコードの書き方ってないでしょうか?

g++の3.3使用です。
>>353
VC6では

mov eax, 5
ret 0

になったけど。
最適化オプションつけてないんじゃないの?
>>354
うーんそうですか。サンスコ。
コンパイラによらずに5のmovだけにする方法ないですかねえ・・
templateとenumとか?(とするとスレ違いか)
357デフォルトの名無しさん:04/05/01 23:58
>>355
-O2です。-O6でも一緒ですね。
ちなみに最適化しないともっと悲惨なコードになるです。
>>357
-O3にしないとインラインの展開しなかったのでは?
>>358
いや-O3でもだめです。というか、インライン展開はされてるんですよね
call命令はひとつもないし、結果の5がimmで書かれてるから。消去され
るべき余計なコードまで出力されちゃってるってだけで。

4乗ならまだ余計なコード罹れてても許せる範囲ですけど、もっと大きな数
になるとちょっとまずいです。

boost::mpl方面?を調べるべきでしょうか。
ところで、
先頭のタブとか、インデントは &nbsp; 4つに置換しないか。
スマソ
うちのgcc version 3.3.3 (mingw special)だと

FixedPoint f(1, 50); // 1.50
return f.i_;

だけを

g++ -O9 -march=pentium4 -fomit-frame-pointer

で出しても一旦スタックに1.50を積み込んでるぞ。
やはりgccの最適化強度はその程度なのかな。
>>363
VS.NETで試したらインライン展開すらされてないように思うんだけど
なんかコンパイルオプション間違ってるんかな??
>>364
漏れはアセンブラさっぱし分からんけど
↓みたいになる模様。VS 2003

PUBLIC_main
_TEXTSEGMENT
_mainPROC NEAR
moveax, 5
ret0
_mainENDP
_TEXTENDS
END
366365:04/05/02 01:12
スマソ。タブが消えてましたな。

PUBLIC_main
_TEXT   SEGMENT
_main   PROC NEAR
   mov   eax, 5
   ret   0
_main   ENDP
_TEXT   ENDS
END
367364:04/05/02 01:21
>>366
ありがとう。やはり漏れの勘違いだったみたい。
ちなみにそういうリストってどうやって出すの?
>>367
-S付けると出てこない?
VC++なら/FAsじゃないか?
つーか、2003ならプロジェクトの設定にまんまの項目があるし、
VC++6.0ならリスティングファイルがどうたらって項目。

まあ、マニュアルのコンパイラオプションの項目嫁と。
370デフォルトの名無しさん:04/05/02 02:03
template<typename T>struct A
{
  char c;

  A(char arg): c(arg){}

  void test()
  {
    cout << c << endl;
  }
};

int main()
{
  A<int> a('1');

  A<string>* p = (A<string>*)(&a);

  p->test();
}
 
のようにクラス内でテンプレート引数を使用しないとして
テンプレート的に違う型のポインタにキャストするのって
動作は保証されてますか?
しかしoperator*の中にcout << "operator * "; と入れてVC7.1の
吐いたコードを見てワロタ。

単に "operator * "を3回出力した後いきなり 5 を出力。コンスト
ラクタもoperator* も思い切り最適化されて影も形もなくなってる。
>>371
3回出力したなら影も形もあるのでわ?
>>370
テンプレート関係はtemplate総合スレで聞いたほうが良いと思われ
>>372
それが、チョト見て下さい(隣国人風)。

FixedPoint f(1, 50); // 1.50
FixedPoint h = f * f * f * f;

00401130 mov ecx,dword ptr [__imp__STL::cout (407230h)]
00401136 push esi
00401137 mov esi,dword ptr [__imp__STL::basic_ostream<char,_STL::char_traits<char> >::_M_put_nowiden (407240h)]
0040113D push offset string "operator * " (405024h)
00401142 call esi
00401144 mov ecx,dword ptr [__imp__STL::cout (407230h)]
0040114A push offset string "operator * " (405024h)
0040114F call esi
00401151 mov ecx,dword ptr [__imp__STL::cout (407230h)]
00401157 push offset string "operator * " (405024h)
0040115C call esi
std::cout << h.i_ << std::endl;
0040115E mov ecx,dword ptr [__imp__STL::cout (407230h)]
00401164 push offset _STL::endl<char,_STL::char_traits<char> > (401019h)
00401169 push 5
0040116B call dword ptr [__imp__STL::basic_ostream<char,_STL::char_traits<char> >::operator<< (407228h)]
00401171 mov ecx,eax
00401173 call dword ptr [__imp__STL::basic_ostream<char,_STL::char_traits<char> >::operator<< (40722Ch)]
>>372
こんな感じで。クラスをバラバラに分解し、計算できる所は
計算してしまって、残った部分だけインラインで並べている感じ。
VSの最適化ってすごいね
377デフォルトの名無しさん:04/05/02 02:14
>>375
ほんとだ。
すごいな。g++にゃこれは無理だ。

378370:04/05/02 02:14
template総合スレで聞いてみることにします
>>376
恐れおののいた。ICCだともっと凄いのかな。
gccでは何とかインライン化するものの、どうしても内部の
計算はそのまま残っていた。
どうでもいいが>>337にも参考になりそうな展開だな・・・
人生の。

>>380
うん。C++のライブラリはできるだけダイナミックリンクにした
方が良さそうだ。
そうなると地鎮祭の「STLを使うと実行ファイルのサイズが
一気に10倍に!?」という言葉もまともに思えてくる。
>>379
icc for Linux ダウソしてみるわ…
>FixedPoint h = f*f*f*f;
この書き方ならスタックに順番につむだろ。
& operator *=
を定義して、
h=f;
h *=f;
以下必要分だけ繰りかえしちゃどうよ?
ヲイヲイ固定小数点程度の計算するのに乗算を再帰的に定義して、
オプティマイザの効率がどうこう言ってんじゃねぇよ。再帰的に
定義してるからスタックに積むんじゃねぇか。お前のおつむは機械以下か?アフォが。
gcc 3.3.X のコードはVC7.1より良質というのが世間の相場だろ?
386デフォルトの名無しさん:04/05/02 04:29
>>384
どこが再帰的なんだ?w
プw
>>385
ウスターじゃないソースは?
const 指定がよくないよ.
だいたいclass の i_,f_をconst指定してる忌みがよくわからん。
int i_, f_と変えただけで
int main()
{
FixedPoint f(1, 50); // 1.50
FixedPoint h = f*f*f*f;
}



main:
pushl%ebp
xorl%eax, %eax
movl%esp, %ebp
subl$56, %esp
andl$-16, %esp
call__alloca
call___main
movl%ebp, %esp
xorl%eax, %eax
popl%ebp
ret
nanananana hey yeah yeah hey
nanananana ya know a stuck on you !
>>389
これでやってみれ。
class FixedPoint {
public:
FixedPoint(int integer, int fractional = 0) : i_(integer), f_(fractional) {}
FixedPoint operator*(const FixedPoint& fp) {
std::cout << "operator * ";
int tmp = (i_ * 100 + f_) * (fp.i_ * 100 + fp.f_);
return FixedPoint( tmp / 10000, (tmp % 10000) / 100 );
}
FixedPoint& operator*=(const FixedPoint& fp) {
return *this = *this * fp;
}
int i_;
int f_;
};

int main()
{
FixedPoint f(1, 50); // 1.50
FixedPoint hh = f;
hh *= f;
hh *= f;
hh *= f;
std::cout << hh.i_ << std::endl;
}
392デフォルトの名無しさん:04/05/02 08:52
>>389
おいおい
それ __main の方に本当の処理が入ってんだろ。g++のバージョンと環境は何よ?

すくなくとも漏れの環境ではconstを取り去るとまともに最適化されないようだ

393デフォルトの名無しさん:04/05/02 08:59
>>391
全然だめポなんだけどg++ -Sするとどうなる?
>>389>>392
わろた
>>393
g++(MinGW3.3.3)の出力。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1083458467
インライン展開はされているものの、メンバ関数の内容は最適化されて
いない。もっともこのプログラムではVC7.1もあまり最適化は効かなかった。
>>391
変なプログラムだなあ。
397デフォルトの名無しさん:04/05/02 11:30
>>395
了解。最適化効いてない(コンパイル時計算になってない)わね。

>>395
g++ -S -fverbose-asm hoge.cpp したあと c++filt < hoge.s > hoge_.s で整形したほうが
ベターと思われ。あとこれ最適化何?-O2?
>>398
-O3。gccはだいたいこんなもんだよ。
400デフォルトの名無しさん:04/05/02 17:05
非MFC環境でDateTimePickerに時間を設定する方法
リソースには貼り付けれるけど、表示時間を自由に変更できません
DateTimePickerクラスが使えないし、でもシステムの時間を書き換えるのは却下で

あとスピンコントロールの使い方も
>>400
何様?氏んだら?
いきなりキレるのは馬鹿丸出しですよ(^^)

まあ、あなたじゃうまく隠して生きるのは無理そうですけど(^^)v
皆さ〜ん。
>>400>>>402は偉く居丈高なので、答える必要はありませんよ〜。
質問の仕方という基本的な事を思い知らせてやりましょう。
404デフォルトの名無しさん:04/05/02 17:23
>>403
お前みたいなのが邪魔。
>>400
ヘルプに書いてある。
402さんは丸出しですから
隠す必要無いですもんね。
メンバ変数をconst指定する意味は何?
質問の仕方以前にスレ違いだ馬鹿野郎
どういう意味があるのか聞いているのですが。
このスレは猿並の頭の持ち主しかいないから
誰も答えられないんだよ
オマエガナー
406=409で407=408だろ。
よって409の勘違い。

constにするのはメンバだろうが普通の変数だろうが同じでは?
間違えて書き換えたくない場合や変更してはいけないことを他人に明示したい場合じゃないの?
>412
×他人に
○コンパイラに
>>400ですが・・・確かに高圧的に読めますね
荒らしてしまって申し訳ありませんでした

>>404
ありがとうございます
もうちょい調べてみます
415406:04/05/02 19:17
>>412 407は別人だよ。

なるほど、コンストラクタでの初期化だけは許可されのね。
でもgccではこのconst指定をはずすとまともなコードはきますよ。
そんなにgccをようごしなくても
>>414
というか、そもそもスレ違いなので、APIスレで聞いたら?
>>4007>>402

なんだこのやろう!!!!!!!
>>400>>402
死ねば?
400 デフォルトの名無しさん 04/05/02 17:05
非MFC環境でDateTimePickerに時間を設定する方法
リソースには貼り付けれるけど、表示時間を自由に変更できません
DateTimePickerクラスが使えないし、でもシステムの時間を書き換えるのは却下で

あとスピンコントロールの使い方も
蒸し返すなよ…
402 デフォルトの名無しさん sage 04/05/02 17:09
いきなりキレるのは馬鹿丸出しですよ(^^)

まあ、あなたじゃうまく隠して生きるのは無理そうですけど(^^)v

402 デフォルトの名無しさん sage 04/05/02 17:09
いきなりキレるのは馬鹿丸出しですよ(^^)

まあ、あなたじゃうまく隠して生きるのは無理そうですけど(^^)v

402 デフォルトの名無しさん sage 04/05/02 17:09
いきなりキレるのは馬鹿丸出しですよ(^^)

まあ、あなたじゃうまく隠して生きるのは無理そうですけど(^^)v

402 デフォルトの名無しさん sage 04/05/02 17:09
いきなりキレるのは馬鹿丸出しですよ(^^)

まあ、あなたじゃうまく隠して生きるのは無理そうですけど(^^)v
初心者を餌食にするのって傍から見ててもムカつくんだよね
突然ですが。
いま「プログラミング言語C++第3版」読んでるんですけど、
§13.2(pp. 386)に書いてある
"文字列の定義は、文字をコピーをできるといったごくわずかの内容から構成されている"
ってどういう意味なんでしょう。
>>424
The definition of a string relies on the fact that acharacter can be copied, and littele else.
のこと?コピーできるとかの条件をみたすならそれはstringの要素になりうる、っていう話の
まえふりじゃないの?
426デフォルトの名無しさん:04/05/02 22:05
>>415
> でもgccではこのconst指定をはずすとまともなコードはきますよ。
だから、 誤解だって。
>>426
だから誤解じゃないよ。-Sつけて確認してみろ。
428デフォルトの名無しさん:04/05/02 22:35
>>427
> だから誤解じゃないよ。-Sつけて確認してみろ。
>>395見ろ低能。
>>427
389は嘘だよ?
>>428
糞かお前は。メンバ変数のconst削除した場合。
FixedPoint h = f*f*f*f;
がどう展開されるかは、とっくに>>389に示されてるんだよ。
>>353の何回もpush繰り返すコードとは明らかに違うだろうが。
アセンブラも読めない知障は死ねよ。
431428:04/05/02 22:58
>>430
ったく・・・・・・。
mainにreturn文がないから0を返却してる。
最適化でfとhは綺麗さっぱり消えている。
だからなにもしてないように見えるだけ。

アセンブラ読めないのは お・ま・え☆
ったく糞が。

>>430
ワロタ
433デフォルトの名無しさん:04/05/02 23:01
まさしく

「環境によるだろ」

みたいなw
まぁg++3を仮定しての話ってことで。
VC++は最強すぎるし。
それを認められない人がいるわけで
430は引き篭もったのか?
春だねえ…
439424:04/05/02 23:50
>>425
サンクスです。
よく分かりました。

私が読んでるのは訳書なんです。
日本語がひどいです。
誤)2つの補い合う16ビット整数でintを表現するマシンでは
正)16ビットの2の補数でintを表現するマシンでは
とか...
http://www.nminoru.jp/~nminoru/programming/x86-cc.html#benchmark
icc が最強 > gcc3 >= MVC
ってところだな。
>>439
何頁?
>The definition of a string relies on the fact that acharacter can be copied, and littele else.

string の定義はコピーできるってこととほんのわずかのほかのことに依存している。
little はもうちょっと否定的につかった方がいいかな?
意味はコピーできることが一番大事で、それ以外のことはささいなこと
っていうことじゃないの?
>>443
> little はもうちょっと否定的につかった方がいいかな?
もっと否定的で「ほとんど〜ない」っつーぐらいに訳すのが一般的。

 string の定義は、ほぼ (sting を構成する要素である) 文字が複製可能であるという
 事実のみに依存している。
445439:04/05/03 00:47
>>441
108ページです。

↓は正誤表のURL(訳者のWebページ)です。
ttp://www.longtail.co.jp/errata/
>事実のみに依存している。
こういう訳語に相当するのはonlyだよ。and little else を無視してるな。
「ほぼ」って書いてる
「ぼぼ」に見えた。
まんこ。
英語以前に
ほぼ文字
こういう形容の仕方より
ほぼ依存している
とするのがbetterだろ?
べっちょ
>>445
昔そこをみたとき掲示板に痛い書き込みがあったなーと思いながら
いってみたらまだあった
>>452
どれさ
>>453
非終端子
455デフォルトの名無しさん:04/05/03 04:17
>>430
> >>428
> 糞かお前は。メンバ変数のconst削除した場合。
> FixedPoint h = f*f*f*f;
> がどう展開されるかは、とっくに>>389に示されてるんだよ。
> >>353の何回もpush繰り返すコードとは明らかに違うだろうが。
> アセンブラも読めない知障は死ねよ。


>>431
> >>430
> ったく・・・・・・。
> mainにreturn文がないから0を返却してる。
> 最適化でfとhは綺麗さっぱり消えている。
> だからなにもしてないように見えるだけ。
> アセンブラ読めないのは お・ま・え☆
> ったく糞が。
gcc厨が暴れているスレはここですか?
457山本五十六:04/05/03 10:22
いい加減目を覚ませ…
C++は時代遅れなんだ、と
>>457
では逆に聞くが、時代に沿った言語とは?
まさかC#なんて言うなよ。
>>457
それからD言語というのも無しだ。
マジレス(・∀・)カコイイ
>>458
C#は時代に沿ってないの?
つまり、Windowsがなくなると思ってるってことになるけど
君は本気でそう思っているわけ?
>>461
そうは言ってない。WinFX APIを備えたLongHornが主流になれば
最先端だと言えるかもしれないが、今の段階では糞重たくてC++
より遅くて効率が悪い言語としか言えない。

そういう俺も仕事で無理矢理C#をちまちま触っているが、まだ
まだだねえ。この言語。次のバージョンに期待しよう。
双方うざい
〓〓〓〓〓〓〓〓〓〓 終了 〓〓〓〓〓〓〓〓〓〓 
チッ!Winのプログラマやってる能無しかい?
↑チッ!Winのプログラマもできない能無しかい?
Winのプログラマのほうが勝ち組。だってWinだから。
PCFX最強
>>465
プログラマやってること自体恥じろ!タクシー運転手と同じ人生の掃溜め職業ってことを自覚しろ!
469デフォルトの名無しさん:04/05/03 17:12
>>379
> >>376
> 恐れおののいた。ICCだともっと凄いのかな。
iccでやってみたけど、VC++と同様の結果だった。まぁさすがという漢字かな。
>>468
タクシー運転手に失礼
471デフォルトの名無しさん:04/05/03 17:42
class A { int a1; char a2[10]; };
class B { int b1; char b2[10]; };
class C {int c1; char c2[10]; }; (実際には同じパターンとは限らないですが。)

class All {
A a;
B b;
C c;

void init();
}

とかやって、init()に渡す引数の型によって、その型に応じてclass Allの
特定のメンバの初期化をしたいのですが、一つには、各引数を取った
時のinit()メソッドを各々書けばいいのですが、メンバの数が多くなった時
にずらーっとinit()が並んでしまうので、もっとスマートにかけないでしょうか?
472デフォルトの名無しさん:04/05/03 17:43
すみません。void init()は、publicでつ。
>>471
ABCに共通のスーパークラスを作って、そのクラスでvectorに放り込んでおくとかは?
初期化はループの中で順次にやる。
474473:04/05/03 17:51
勘違いしたかも。

引数をフラグにして、どのメンバを初期化するか選択するということ?
もしそうなら、テーブルかな・・・。
どういうことがしたいんだかわからん
A, B, Cそれぞれにinit()を持たせる。
477473:04/05/03 17:59
情報が足りないね。
どういう風に書いたら、冗長になるのか提示してみそ。
478471:04/05/03 18:00
>>474
>>475

例えば、main で

All database;

A default;
default.a1 = 0;
memset(a2,0,sizeof(a2));
とかやって、

database.init(&default);

とやると、Allクラスのdatabaseインスタンスのメンバー a の部分が指定した値で初期化されるという
感じです。
>>478
残りのフィールドは大量にメンバとしてあるけど初期化しないわけ?
>>478
memset萎えー
オーバーロードしかない
482471:04/05/03 18:06
>>479
別途コンストラクタで全体の初期化はしますが、databaseの更新途中で、
特定のメンバーだけデフォルト値に戻したいんですが。

>>476
むむ、なるほろ

>>480
memsetじゃ駄目なんでしょうか?
ABCとも、ぜんぶそれぞれのコンストラクタで0クリアしておいて、
All::init()で特定のメンバにデータをセットする、っていう仕様じゃだめなのか?
>>482
それなら、ABCそれぞれにデフォルト値を別途持たせておいて、
A::setDefault() で、デフォルト値に戻すとかは?
typelistを使ったtupleで
486471:04/05/03 18:10
>>476
>>484
そうですね、これが一番いいかも。
>>468
誰もが知ってる電気メーカに勤めてるが、確かにそれ言えてるな。ソフト担当させるのは電気系以外の専攻者か
電気系なら学卒者、ただ、後者の場合は将来のソフト部門の責任者として育成するけど。それ以外はキーマンとして
は期待できないから兵隊としてソフト担当にアサインする。
487の要約
> 誰もが知ってる電気メーカに勤めてる
489デフォルトの名無しさん:04/05/03 21:11
作ったのを実行しようとしても、.exeファイルが見つかんないとか言われて
出来ないんですけど、どうしたれいいんですか?
なんだ、>>487もプログラマか。( ´,_ゝ`)プッ
それと、あんたの言うキーマンって何?ピーマンの変種か?
>>489
> 出来ないんですけど、どうしたれいいんですか?
タレ(・∀ (ry

プログラマ:奴隷
管理職:奴隷の雑用係

技術者なんてそんなもん
494デフォルトの名無しさん:04/05/03 21:20
489に誰か答えてください
こうしたれ
>>494
自分が何をしたかスクリーンショットを交えてどこかにウプしろ。
それから、ソープに逝って女を2-3人抱いて来い。
話はそれからだ。
まぁプルグルマが自身を奴隷だと認識していない職場も結構あるけどな。いい給料もらってたりもする。
そういうのはプロセスが存在しない職場ともいう。

どちらが幸せかは謎。そういう職場は往々にしてデスマ(ry
498489:04/05/03 21:26
誰か教えて
>>498
氏ね
500
>>498
多分ネタだと思うが、一応マジレスすると、スレ違い。
>>491 わからなけりゃプログラマやるのががちょうどいい。早くから将来が見えちゃやる気もなくすだろうしな。
で、お前の年収は?

( ´,_ゝ`)プッ (<=先読み)


マ板でやれ
いま504が良い事を言った
別々のクラスをvectorに格納したいのですが、どういうふうにしたらいいのでしょうか?
同じ基底クラスを継承して、基底クラスへのポインタをvectorに格納するというの
ぐらいしか思いつかないのですが。
例外安全の関係でメモリの管理が大変になりますし、継承階層が
一つ増えてしまいます。
507デフォルトの名無しさん:04/05/03 22:43
>>506
http://www.kmonos.net/alang/boost/classes/any.html 使ったら?

> 例外安全の関係でメモリの管理が大変に
ここもちっと詳しく教えて。
>>506
> 例外安全の関係でメモリの管理が大変になりますし、
ふつー boost::shared_ptr とか使う。
便利な言葉ですね>ふつー
>>503 トータルで10M 円弱。
( ´,_ゝ`)プッ
512デフォルトの名無しさん:04/05/03 23:21
M=MAN=万か。
>>510
マジレスするとただのリーマン風情はム板に逝ってくれ。
迷惑。
>>513
typo。
マ板な。
この板は只今より、研究者用の板になりました。
ム板はここだが…
頭の中でこんがらがっていたのはタイプミスとは言わないな。
518ただのリーマン風情:04/05/03 23:39
呼ばれて来ました。
>>506が本題に戻します
>>518
シッ!シッ!
配列を参照渡しできたら便利だと思うのですが。
みなさんはどう思いますか?
522デフォルトの名無しさん:04/05/03 23:44
>>521
できるけど?
>>522
//もしかしてやり方間違えてますか?
//↓みたいなの
func01(int&a[]){
}
main(){
int a[100];
func01(a);
}
524522:04/05/03 23:51
>>523

int func01(int(&a)[100]){}
template<unsigned N>
int func02(int(&a)[N]){}
main(){
int a[100];
func01(a);
func02(a);
}

このどっちかでどーぞ。
>>523
配列を参照渡しすると、template引数に配列のサイズを受け取る
事が出来て、便利な事がある。普通のポインタ渡しだと配列の
大きさに関する情報が変換時に失われてしまう。
526524:04/05/03 23:54
まぁstd::vector<>でも使っときなさいという気もするが。
>>524
おぉそんな方法があるんですね。
templateはまだ勉強してないんで分かりませんでした。
thxでした。ノシ
>>527
& と [] では []のほうが結合優先だから括弧で & を先に結合させる
class D : B {};
って書いたときって、
class D : private B {};
と等価でしたっけ?
おしえてください。
>>525 ハァ?配列へのポインタを知らんのか?
>>530
あんたの方が、はぁ?じゃないか。
固定長配列へのポインタなら呼び出される側が配列のサイズを知ってる事になるし、
そうでないのなら配列のサイズを渡す手段はないぞ。
微妙に話題がループしてるな・・・
あ、こないだはtemplateスレか。
どちらにしろウザ。
>>529
同じ。
>>533
サンポスペ
>>531
>>524にあげられてるテンプレート引数使えば配列へのポインタ使っても同じだろ?
というか(*a)[N}の意味知ってるよね?
536デフォルトの名無しさん:04/05/04 01:13
>>535
憶測でものを言うな!
やってみてから書いたらどうなんだ。
>同じだろ?

この辺りから自信のなさが感じられる。
>>537
> >同じだろ?
>
> この辺りから自信のなさが感じられる。
昔のOOスレのジョソを思い出した。
お前らスライムか?の。
ホレ。わざわざ書かすな!
int func01(int(*a)[100]){}
template<unsigned N>
int func02(int(*a)[N]){}
main(){
int a[3][100];
func01(a);
func02(a);
}
>>539
> ホレ。わざわざ書かすな!
スゲーワラタ。[3]ってなんだよ[3]ってw
ていうかね。テンプレート引数使うならわざわざ参照つかわなくても
いいんだが。
int func01(int a[100]){}
template<unsigned N>
int func02(int a[N]){}
main(){
int a[100];
func01(a);
func02<100>(a);
}
>>541
わざわざ<100>って書きたい香具師は少ないと思うが…
>>540 [3] が嫌なら
int (*pa)[100]=(int(*)[100])a;
func01(pa);
func02{pa);
でもいいぞ。
>>543
荒らしは他所でやってよ。
このスレにはtemplate初心者が大勢いるのはよく分かった。
言いたいことはそれだけか?
本当はそれすら言いたくなかったのでは?
そもそも初心者が勘違いしたレス書くの自体迷惑なんだし。
だから関係ない話は他所でやれって。
お願いですからtemplate初心者厨はこの勢いで
templateスレまで荒らさないで下さい。
>>542
大抵の場合、配列サイズ >= 処理サイズであればいいだろ。むしろ関数側で勝手に処理サイズを
決められてしまうことの方が迷惑なことの方が多いだろ?この場合は

int func01(int *a, size_t N ){}
main(){
int a[100];
func01(&a{5], 30);
}

一番シンプルでいいやろ?男は黙ってポインタ使え。処理サイズは自分で責任を持て!
ところでさっきから無意味に中括弧を混ぜてるのって同一人物?
int func01(vector<int>& v){}
main(){
vector v(100);
func01(v);
}

俺はこれが一番シンプルで安全だと信じて疑わないから、
>>521以降の、テクニックを駆使したいろんな渡し方は
覚えようとも思わん。
上のをこぴぺしたんれすが・・
どうでもいいけど
さっきから提示されてるソースコンパイルすると
エラー発生しまくりなんだよなぁ。
漏れのVCが可笑しいのか。
ふーん。じゃそれで、リングバッファ作ってくれよ
無意味な中括弧ってなに?
557デフォルトの名無しさん:04/05/04 03:45
>>550
> 一番シンプルでいいやろ?男は黙ってポインタ使え。処理サイズは自分で責任を持て!
ならC++使うなよw
一生C爺やってろ


>>557
お前はCスレから出てくるなw
>>558
ポカーン
んなこたぁない。C++はCも包含したマルチパラダイム言語だ。
言ってるだろ。リングバッファこさえてみろって。
逆にハードウェアに密着したことをする必要がなけりゃJavaなりC#なり使え。
一応C++スレなんだからC++をメインにした流れにしようyp
でもlistやbitsetはうれしいが、教科書通りにvector使う椰子いたんだ。
一体なにがうれしくてvectorなんか使うの?
>>562
> でもlistやbitsetはうれしいが、教科書通りにvector使う椰子いたんだ。
> 一体なにがうれしくてvectorなんか使うの?
煽りにマジレスするけど、
そういうときはまず、自分が何がうれしくなくてvector使わないのか書かないと。
564デフォルトの名無しさん:04/05/04 04:04
>>563
ハァ!!!!????
これが火病ってやつか・・
>>557
エンディアンをアプリベースで自動判定したいんですがどうやったら委員ですか?
int n = 1;
char* pn=&n;
if (1==*pn){ /*リトル*/}
else{/*ビッグ*/}
ポインタを使わずお願いします。
>>568
なんで?
570352:04/05/04 04:43
352です。

>>352の件、結局g++ではうまく最適化されないことを皆さんのご協力で理解したんで、
別の方法(>>359で書いたような方向)で書き直してみました。

一応貼っておきます。どうですかね....
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1083458467&res=3&fi=no
g++/icc/vc++で動作確認しました。どのコンパイラでもコンパイル時計算になりました。

なお、誤差はひどいわ、すぐオーバーフローするわで実用性はゼロですw
こういう種類のコードは初めて書いたんでアホな事沢山やってるかも。

char* pn=&n; はふつー error か warning にならない?
char *pn = (char *)&n;
>>568
typedef union {
int i;
char c[4];
} U;
U u;
u.i=1;
if(u.c[0]==1) {
//リトル
} else {
//ビッグ
}
>>572
激しくワラタ
charならOKのはずだが。
駄目ならmemcpy等は書けない。
>駄目ならmemcpy等は書けない。
等は、Cネイティブで書けない
>>570
あれあれ?信号処理の世界では、普通2の補数FixedPointっていうのは
絶対値として1以下を主に扱って、
16bitの場合なら
0x7fff = 1-ε
0x0000 = 0
0x8000 = -1
と対応させることなんだけどね。で、大きさが1を越える部分に
3〜8bit程度をextend bitとして持たせるのが一般的。
±5VのA/Dを±1Vに規格化して扱うといえばイメージしてもらえるかな?
578570:04/05/04 05:19
>>577
> あれあれ?信号処理の世界では、普通2の補数FixedPointっていうのは
あースミマセン、FixedPointって語はあまり考えずに使ってしまいました。
http://lists.boost.org/MailArchives/boost/msg34685.php あたりを見たの
だったかな。間違ってそうですねw

自作のクラスが抱えてる整数に四則演算してどこまで最適化かかるか
見たかっただけ、ということでご勘弁を(苦笑



それと例えば16bitの固定小数点演算をする場合。掛けると必ず32bitになるので
できるだけぎりぎりまで32bit+extend bitで計算しないと精度は無茶苦茶になるよ。
例えば
Σa(i)b(i)
の計算で32bit精度がほしいのはa(i)b(i)の部分|a(i)|<=1,{b(i)}<=1だから
1以下の制度として32bitが必要。そしてextend bitが必要なのはそれらを
加算Σ
どっかに固定小数点クラスは転がってると思うけど、一応DSPの仕様を確認することを勧めるな。
>自作のクラスが抱えてる整数に四則演算してどこまで最適化かかるか
>見たかっただけ、ということでご勘弁を(苦笑
あ、そういうこと?了解。実際に仕事とか学生実験でもいきなりDSPで書くより
C/C++でシミュレートしてからというのが普通のアプローチで、それをしようと
してたのかな?と思ったもので・・
581デフォルトの名無しさん:04/05/04 05:30
>>572でFA?
実際は[4]いらないけど。
>>574のリンク先
> 同一のメモリ領域に対して2種類の型でアクセスすることを禁じているようだ。

それでは共用体が存在し得なくなるが。
未定義でしょ。禁じているならエラーになる筈。
問題の性質上、厳密に ISO C 規格に従って (未定義なしで)
エンディアンを判別することは難しくない?

> If the value being stored in an object is accessed from
> another object that overlaps in any way the storage of the
> first object, then the overlap shall be exact and the two
> objects shall have qualified or unqualified versions of a
> compatible type; otherwise, the behavior is undefined.

オブジェクトに格納されている値が、任意の方法で第1のオブジェクトの
ストレージにオーバーラップする別のオブジェクトからアクセスされる場合、
オーバーラップは正確であるべきである。また、2つのオブジェクトは、
互換性をもつタイプの資格があるか無条件のバージョンで行う。
そうでない場合は、未定義である。
>>583
共用体経由は問題なしと規格の別のとこに書いてあるよん。

586デフォルトの名無しさん:04/05/04 09:25
#include <stdio.h>
class ShowAdd
{
private:
int Add (int num1, int num2){
return num1 + num2;}
public:
void Show (int num1, int num2){
printf ("%d + %d == %d\n", num1, num2, Add( num1, num2) );}
};
int main(void)
{
ShowAdd showAdd;
showAdd.Show (5, 10);
//ShowAdd::Show (5, 10);
return 0;
}
このクラスは、関数をまとめる機能中心で、
構造体の機能は持たない(publicメンバー変数が無い)ので、
コメントの部分みたいに宣言をせずにクラスを使いたいのですが、
できるならやり方を教えてください。
>>586
#include <cstdio>
class ShowAdd
{
private:
static int Add (int num1, int num2){
return num1 + num2;}
public:
static void Show (int num1, int num2){
std::printf ("%d + %d == %d\n", num1, num2, Add( num1, num2) );}
};

>>586
メンバにアクセスする必要がないものをクラスのメンバに入れるなよ。
名前空間にでも入れとけ。
>>587
ありがとうございます。できました。

staticを使うということは、クラスを宣言しないで使うやり方は
普通は余りやらないのでしょうか。
また、こういう関数をまとめるだけの時は別のものを使うのでしょうか。
>>588
Add()の事でしょうか。詳しくお願いします。
>>589
> staticを使うということは、クラスを宣言しないで使うやり方は
> 普通は余りやらないのでしょうか。
Javaだと「関数」が作れないからよくやるけどね。三角関数とかさ。

> また、こういう関数をまとめるだけの時は別のものを使うのでしょうか。
588が言ってるのは下記

namespace /* anonymous */
{
int Add (int num1, int num2){
return num1 + num2;}
}
namespace ShowAdd
void Show (int num1, int num2){
std::printf ("%d + %d == %d\n", num1, num2, Add( num1, num2) );}
}
592586:04/05/04 09:51
>>591
ありがとうございます。思ったようにできました。

後、Addをprivateみたいにしたいのですがどうすればできますか。
593586:04/05/04 09:54
すいません途中でした。
>>588の文章と関連があると思うのですが。
普通に記述するとエラーになってしまいます。
>>592
> >>591
> ありがとうございます。思ったようにできました。
>
> 後、Addをprivateみたいにしたいのですがどうすればできますか。
伝わらなかったか。

[foo.h]
namespace ShowAdd {
void Show(int num1, int num2);
}

[foo.cpp]
#include <cstdio>
namespace
{
int Add (int num1, int num2){
return num1 + num2;}
}
namespace ShowAdd {
void Show(int num1, int num2) {
std::printf ("%d + %d == %d\n", num1, num2, Add( num1, num2) );}
}
[main.cpp]

#include <foo.h>
int main(void)
{
ShowAdd::Show (5, 10);
return 0;
}

とすればよろし。
俺はねるぽなのであとはガンガレ
597588:04/05/04 10:06
>>594-595
関数をプロトタイプ宣言をしていないと
使うとエラーになるみたいな感じの意味ですか?
598588:04/05/04 10:07
>>596
ありがとうございました。おやすみなさい。
なんじゃあこりゃあ?C++のスレなのにCの流儀を強引に押し通そう
としたり、クラスの意味も分からない香具師が出没してる・・・・・
GWもあと2日だぜ。せいぜい暴れてくれ。
【初心者歓迎】C/C++室 Ver.6【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1082182233/

こういうスレもあるので、こっちの方が回答を得られやすいかもね。
601デフォルトの名無しさん:04/05/04 14:24
ぬるぽ
ガッ
>>599 Cもまともに書けないおまえにゃJavaがお似合い
604デフォルトの名無しさん:04/05/04 16:09
struct PIXEL16_60K
{
 unsigned int b :5;
 unsigned int g :6;
 unsigned int r :5;
};

これのサイズ 5+6+5 で 16bit だから2バイトだろうと思ってたんですが
sizeof(PIXEL16_60K)で調べてみたら 4 とでました
これって2バイトにする方法はありませんか?
環境は Win2K Visual C++6.0 です。
>>604
#pragma pack(1)
>>604
int じゃなくて short にする
607デフォルトの名無しさん:04/05/04 16:50
>>606
shortにしてもだめだろ。
その前に仕様的にはintにしとかないと未定義。
>>603
いいから藻前はCスレに(・∀・)カエレ!!
>>608
Cのコードし掛けないお前にC++を語る資格なし。
>>609
そんなDQN、いくらでもいそうだが。
>>609
>Cのコードし掛けないお前に
頭大丈夫か?それとも日本語が不自由な知障か。( ´,_ゝ`)プッ
Cのコードも書けないお前にC++を語る資格なし。ポインタのキャストぐらい覚えとこうな。
>>612
CのキャストなんかC++のキャスト覚えたら危なくて使って
られねーよ。あっそうか、君はC++については全くの素人
だったね。これは失礼。
( ´,_ゝ`)プッ!出来るようになってから言え。逆にポインタを用意してる限り、
型に依存せずにアドレス指定できることは当然だしC++もwarningは出すが禁止してない。
ポインタいじることにびびってるやつはC#がお似合い。
ごめん、触ろうとする前にその知識もなかったんだね。
はいそこの電波飛ばしまくってる二人。(?)
他行ってやりなさい。
>>614
>C++もwarningは出すが禁止してない。
まさに君のような馬鹿のためにこのような措置が取られているのを
知らないのかい?
迷惑だから早く氏んで下さい。
617604:04/05/04 18:52
pragma pack(1)でも4バイトのままだし、
試しに1ビットのメンバしかない構造体を作っても4バイト。
困った。。。
馬鹿はハードウェアをまったく知らないお前。
逆にこの機能がなくなればハードウェア開発にC++は使えないことも
わからないのか馬鹿が。
619デフォルトの名無しさん:04/05/04 19:13
>>613 そうだねー
floatからintとか、longからcharにキャストしたら・・・
const_cast、static_castを使おう
でも、結構ウザいからCキャストも結構使うな・・・
printf()も使いまくる。cin/coutは使いにくい

>>617
#pragma pack(push,1)
...
#pragma pack(pop)
struct PIXEL16_60K
{
 unsigned int b1 :5;
 unsigned int g1 :6;
 unsigned int r1 :5;
 unsigned int b2 :5;
 unsigned int g2 :6;
 unsigned int r2 :5;
};
とでもしとけば?あるいは、C++スレなんだから、
class PIXEL16_60K{
unsigned short rgb;
void r( char r ) { ... }
void g( char g ) { ... }
void b( char b ) { ... }
};
とか。
> floatからintとか、longからcharにキャストしたら・・・
> const_cast、static_castを使おう

const_cast?
intが2byteの環境でがんばる
>>618
reinterpret_castがあれば困ることはないんじゃ?
624デフォルトの名無しさん:04/05/04 19:30
>>620
#define RGB16_R(rgb) (unsigned char)((((rgb) >> 10) & 0x1f) << 3)
#define RGB16_G(rgb) (unsigned char)((((rgb) >> 5) & 0x1f) << 3)
#define RGB16_B(rgb) (unsigned char)(((rgb) & 0x1f) << 3)

unsigned short rgb;
...
unsigned char r = RGB16_R(rgb);
unsigned char g = RGB16_G(rgb);
unsigned char b = RGB16_B(rgb);
でいいんでわ?
オーバーヘッド嫌だぽ


>>621
const int abc = 12345;
int a = const_cast<int>(abc);
>>624
いや、1行目と関係ないじゃないかって思って。
>>624
const intからintには暗黙の変換があるぞ。
627デフォルトの名無しさん:04/05/04 19:38
>>626 そうですた、例が悪いですな
628デフォルトの名無しさん:04/05/04 19:44
>>617
なにが困るんだ?
15bitづつパックされてるわけではないだろ?16bitごとじゃないのか?
629デフォルトの名無しさん:04/05/04 19:46
ところで、ビットフィールドの型はCでもcharとか使えたんだっけ?
ダウンキャストやconstキャスト使う場合は仕方がないが
static_cast<abc>()なんて長ったらしい書式をぐちゃぐちゃ書いてるのか。
>>630
みだりにキャストするもんじゃありません! という戒めのために、
あのように長ったらしい書式なのですよ。と俺は思ってる。
632マイク ◆yrBrqfF1Ew :04/05/04 20:00
当たり前だろ
ぐちゃぐちゃなんか書いてねーよ。
633デフォルトの名無しさん:04/05/04 20:02
>>631 キャストしないとエンコードされたデータとかは展開しにくくない?
オレそういうとこは殆どC構文になっちゃうなあ
634デフォルトの名無しさん:04/05/04 20:04
>>633
また出たよ、脳内男。
635マイク ◆PbfAC65QoU :04/05/04 20:27
トリップ変更します。
636634:04/05/04 20:30
俺Cがまともに書けないんだよ。人がCコード書いてるとついつい嫉妬心から切れちゃうんだよ。
許してくれ。ついでにポインタもよくわかってないんで誰か教えてくれ。
637634:04/05/04 20:32
ポインタがあるとおつむがハレーション起こします
638デフォルトの名無しさん:04/05/04 20:39
>>636-637
ここはC++スレだからw
Cならこっちでね。
http://pc5.2ch.net/test/read.cgi/tech/1083651280/l50
って、Cも分からないのか...じゃぁこっちへでも。
http://pc5.2ch.net/test/read.cgi/tech/1034505166/l20
君はここからやり直したほうがいいよ。紹介しとこう。
http://www2s.biglobe.ne.jp/~thoikuen/
わざわざ検索したのか。キモイなw
641デフォルトの名無しさん:04/05/04 21:06
脳内アゲ
とにかくC厨がC++のスレまできて自分の脳内のC知識を
さもありがたそうに披露するのは目障りだ。
それともCスレで間違った発言をして叩かれたくやしさを
晴らしにこのスレに来ているのか。それだったら場違い。
君がPGに向いていないはっきりとした証拠だから早めに
転職して下さい。
とにかくC厨がC++のスレまできて自分の脳内のC知識を
さもありがたそうに披露するのは目障りだ。
それともCスレで間違った発言をして叩かれたくやしさを
晴らしにこのスレに来ているのか。それだったら場違い。
君がPGに向いていないはっきりとした証拠だから早めに
転職して下さい。
2回言わんでも…
>624
オーバーヘッド?最適化のかかり具合にもよるけど、
ほとんどインライン展開されると思うけど。
>>642-643
ワロタ。お前PGってプログラマのことかい。下らん職業にエベレストより高いプライド持ってるんだねぇ。
をー!よちよち。
647デフォルトの名無しさん:04/05/04 22:52
>>646
ちょっと、低脳さんはもういいでつから。
向き不向きとプライドの高低は別の話だよな。

つーかマ板でやれよ。
>>643
喪前はここの社員だろ? http://www.pg.com
>>646
不幸な奴だな。自分の職業にプライドも持てんとは・・・・・
どうせお前は「俺は本当ならばもっとエリートコースを歩いて
いるはずだ。こんなくだらん仕事をしているはずがない」とでも
勘違いしているだけだろう。自分の能力のなさを人のせいにして
一生そうやって社会を恨み続けて生きるんだな。
>>650
残念だったな。プログラマだけがこのスレに来てると思ってる時点でバカなんだよ。
プログラマ -> 他に何もできない技術屋(エンジニアといえる奴らかどうかわからんが)だろ?
プログラマなんて呼ばれることを恥と思えよ。
反応したくてしたくてしょうがないのは分かったから
マ板でやれよ。
広義のプログラマ(プログラミングする人)でない人が何の目的で
C++スレなんか見るんだ?
GWだからな!
>>651
アホか。俺だってSEなんだが。まあいいや。お互いの顔も知らず
何をやっているかも全く知らずにこうやって言葉遊びを繰り返して
いるだけじゃ埒があかないね。いつまでもそうやってなさい。

>>652
正直すまんかった。刺々しくて香ばしい香具師がいるもんだから
つい相手をしたくなっちまった。普段ならバカバカしくて「また痛い
香具師がいるなあ」ぐらいで反論すらしないが。GWだし(w
656なんちゃってSE:04/05/04 23:47
ですか。
っていうか、そのプログラムすらできないSEに設計なんかして欲しくなおのだが。
×なおのだが ○ないのだが
PGの次はSEか。便利だよなシステムって言葉。
>>656-659
相当頭カッカしてるな(w
typoするなんて(w
「(w」←注目


頭カッカするも何も、俺>>646からしか読んでないし。
で、お前がアホっぽかったからいじめただけ。
>>661
俺もお前がアホっぽかったからいじめただけ。
追い詰められるとレスが鸚鵡返しになってしまう。
>>663
( ‘∀‘)オマエガナー
馬鹿とアホの共演は終わりましたか?
↓ではC++の話に戻ってください。
│     _、_
│  ヽ( ,_ノ`)ノ 残念 それは私のおいなりさんだ
│ へノ   /
└→ ω ノ
      >  
ワロタ
PGがアフォだとエライ目にあうよ、マジで。
つかPGの能力を判断してこき使うSEの能力こそが大事なわけだが。
>604
ここらでちょっとまとめてみる。

多分、unsigned short にしないと 2 バイトにならないと思うが unsigned short の
bit-field が使えるかは規格上保証されない。
実装で規定されていればその実装では使える。
(14882:1998-9.6/1, 9899:1999-6.7.2.1/4)
Cygwin 上の gcc では unsigned short で 2 バイトになった。

ただ漏れもついこの間まで知らなかったんだが、bit-field のメモリ上への割り当ては
非常に実装依存な領域で、上位から割り当てられるか下位から割り当てられるかも
決まっていないし、割り当て単位をまたいで確保されるかどうかも決まってない。
(14882:1998-9.6/1, 9899:1999-6.7.2.1/10)
実際、gcc には割り当てを Visual C++ 互換にするオプションがあるようだ(-mms-bitfields)。

ということで、メモリ上の割り当てを気にするならば >624, >620 後半のように自前で
処理する方がいいんじゃないかと思う。
671デフォルトの名無しさん:04/05/05 00:45
>670
グロ画像

>666
ハゲワラ

>>670
楽しそうだな。
>>670
思わず射精してしまった。
674デフォルトの名無しさん:04/05/05 01:14
>>669
まぁここはC++のスレだからな。C++だと整数系の型だとOKのようだ。規格は見てない
けどVCのヘルプにはそー書いてあった。VCではMS独自仕様でLSBから詰めるそうだ。
>>674
あと、サイズ0(:0)だと次のアライメントまで飛ばすそうだ。#pragma packで指定された
やつな。
blitzで逆行列はどうやって計算するのですか?
>>670
ハマス指導者ヤシン師の痛い写真だな。
車内でRPGでもぶち込まれたか。
678デフォルトの名無しさん:04/05/05 16:24
いま、トランプゲームを作っています。
idはシャッフルのされ方の確認用に。
struct Card{
int val; int suit;
// int id;
} card[54];
でalgorithmのなかのramdom_shuffle()を使うと、
Card構造体のval suit idについてそれぞれごちゃ混ぜにされるようです。
本当は、val-suit-idをセットにして混ぜたいのですが、どうしたらいいですか?
679デフォルトの名無しさん:04/05/05 16:26
>>678
書いたコード貼れ
680676:04/05/05 16:28
テンプレートスレに行きますでの放置してください。
>>678だが、
書いたコードで ジョーカーの初期化を忘れていたことに加え、
random_shuffleの使い方を間違っていたようです。

random_shuffle( card , card+54);
みたいにしたら上手くいきました。

random_shuffle( &card[0].num , 略);
見たいなのがまぎれてました。

# かちゅ〜しゃ よりブラウザから書き込んだほうが
# 規制で書けない率が低い木がする
意味不明萎え
とんだ勘違いでスマソ。

int hoge1[500];
int hoge2[500];
int hoge3[500];

random_shuffle( hoge1 , hoge3 );

ってしたらどうなるんだろう?hoge1の先頭からhoge3の先頭の位置まで
メモリ鍋状態ですか?
>>683
構造体ではなくローカル変数とかだと
hoge1とhoge2, hoge3のメモリ配置がどんな関係かはまったく予断してはいけないが。
構造体の中ならhoge1の先頭からhoge2の最後までが混ざるだろうな。
メモリ鍋って言葉は意味不明だが
685デフォルトの名無しさん:04/05/05 16:38
今2chで話題のA何とかの中の人のMFC講座!
みんないっちゃだめだよ〜wwww
http://www.geocities.jp/aransk88/contents4.html
>>685
いってほしくないならURL晒すんでねえ
>>685
それなりにワラタ
688デフォルトの名無しさん:04/05/05 21:31
C++にJavaのプロパティクラスに代わるものってありますか?
>>688
ない
690デフォルトの名無しさん:04/05/05 21:44
>>689
どっかに落ちていない?ですか?
落し物は2chではなく警察に届けてください。
しかし昨晩は粘着C厨に占拠されて困ったな。
余程Cスレで相手にされなくなっていたのだろう。
このスレで言いたいだけ言って消えたな。
どこで覚えたのかネット上だけで通用する喧嘩論法で
人を追い込んだ気になって満を持して悦に入っていた。
リアルじゃ友達も彼女もそりゃいないだろうな。あれだけ
人に嫌われる内容の言葉を垂れ流しているんだもの。
>>690
どうしてもというなら、とりあえず
ttp://d.hatena.ne.jp/shinichiro_h/20040503#p6
あたりかな
>>692
さんざんやりこまれて、消えたころに悪態つくしか脳の無い間抜けかい?君
(ノ∀`)アイタタタ
C++builderでボタンクリックで実行を
キーボードのF1キーでも実行できるようにするのと
while文を実行中にF2キーで抜けたいけど
どうしたらいいですか?
調べてもわからないのでどなたか教えてくれませんか
   692↓      , -ー,
           /   |  
   /⌒ヽ  /    |  
  / =゚ω゚)/.       | 
  |  つ'@      /⌒ヽ 
  〜_`)`).     /  =゚ω゚) ←694
 ̄ ̄ ̄しU      |  U /
     |       ( ヽノ
〜〜〜〜〜〜〜〜〜〜〜〜
>>696
まず質問するのに適切なスレを見つけることから。
>>696
さっきんとこでどなたか教えてくれてましたぜ。
>>692
精神科通いの前科歴のある人間は相手にしないように。
>>694
目障りだから他スレ行ってやってくれ。これ以上荒らすとアク禁要望出すよ。
>>694
> 脳の無い
>>701
>>694は知障かよ。さすがアニキ
>>698
そうですか...bcb対応スレ探してきます
>>699
教えてくれてありがとう
704デフォルトの名無しさん:04/05/06 08:38
社内情報システムを開発しています。

ソースを変更されないようにするには(もしくは変更されたら動かなくするには)?
どのような方法があるでしょうか?

いまの管理はずさんでソースは誰でも改修できるように公開を求められます。
運用上問題があったら運用担当者が見ようみまねでソースを改修しコンパイルします。
手に負えない改修は開発者に依頼されます。(すでに弄くられているソース)
どの時点でも責任は開発者にあります。
CVSからエクスポートして公開しているソースに対して勝手に改修を掛けられます。
ルールもへったくれもありません。
705俺用しおり:04/05/06 09:37
ヘ_ヘ ____________________________
ミ・・ ミ
( ° )〜 ここまで読んだ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stringクラスのメンバ関数begin()なんですが、
begin()をオーバーロードしているメンバ関数で
引数が同じvoidで、リターン値がconst_iteratorというのが別にありますけど
これって仕様的にマズくないですか?
パラメータの仕様が全く同じ関数はオーバーロードできないと思うんですが
>>707
同じじゃないじゃん
708707:04/05/06 09:46
>>706へのレスですた。
>>707
レスさんくす

今ぐぐって自己解決しました
暗黙的な第1引数thisポインタの型が違うわけか・・なるほど
>>704
板違い
711初心者:04/05/06 12:16
Visual C++ を使ってデータをファイルから読み込んグラフを表示する
プログラムを作成してますが、データの読み込みはできましたが
グラフの表示のしかたがわかりません。

>>711
君が無能だという事はよくわかった。
cctypeの各判定関数のリターン値の型ってintですか?
boolです。
VisualC6でプログラミングしています。
一時ファイルを環境変数TMPで指定されている場所に
作成したいのですが、環境変数の値をプログラム内で
使用する方法を教えてもらえないでしょうか?

あと、
アップロードボタンを押すたびに、<wininet.h>を
使用してFTPでファイルアップロードをする
プログラムを作っているのですが、
アップロードボタン3回までは正常に
動作するのですが、4回目から接続に
失敗してしまいます。
このような状況をご存知の方おられましたら、
解決法を教えてもらえないでしょうか?
>>715
スレ違い
VCスレかWinAPIスレに移動。場所は>>7
>>716
誘導thx
そちらで聞いてみます
C→C++→STL
とやってきて次何すれば良いか分からない・・
>>718
STLはC++の一部でしかないのになぜ別項目
というかそもそも言語は道具であって
何かを作るためにあるわけだが
>>718
テンプレートでMLの処理系作成

次はD言語
Dはまだ仕様も策定中だし実装もまだだろ。
GCCにもVSにもないしなぁ。
>>722
てか、DってC++'程度なんじゃねーの?
>実装もまだだろ。
既にコンパイラができてること知らないのか?
仕様がきっちり決まった頃にはいろいろあらが見えてきて次の言語の模索が始まるのがこれまでの繰り返し。
WINAPIでもやりたいけど
もうすぐWin→Ronghornだろ
互換性あると思うけどなんとなく・・・な
GUIも買わないとダメだ、
それ以前に俺のOSだと.netインスコできないか(わらい
C#-> 見るからにJava
D -> C/C++と一見差が無い asmも埋め込める。ポインタもそのまま残ってる。
  多重継承が消えてすっきり
Dはいいことずくめ。
C++のフロントエンドとして使えるから、すぐに実行速度の比較もできる。
誰かC++とD言語のベンチマーク取って見れ。
そんなに大差なかろう。D言語が流行ってくるとすれば、
C→C++に進もうとして挫折した香具師用だな。
↑アフォ丸出し。
>C→C++に進もうとして挫折した香具師用だな。
自分のこと宣伝してうれしいか?
>>729
うれしいってもんじゃないねえ。D言語マンセー!!
>>726>>729>>730
D言語厨は自分のレスから外に出るな。C++スレを汚染しないでくれ。
この奇人変人が!!
>自分のレスから外に出るな
>>732
コンパイラみたいな奴だな。シンタックスエラーってか。
C系のプログラマがわざわざD覚えるメリットはあるのか?
これからって奴にはいいのかもしれんが
>>734
お前のおつむは鎖国状態か?スペクトルの範囲が極些な使えない奴だな。
爺はプログラミングなんかせずに養老院でもいって日がな一日刻数えてろ!
>>734
LongHornが出る頃には、.Net対応でないと少なくともWindowsでは
主導権が握れなくなっているだろうな。D言語とかD言語とかD言語とか。
C++か?C++は特別なんだよ。ネイティブでも可。
win の上でGUI書いてるだけの糞プログラマがほざいてるな。
その割りにC++が主導権とってると思ってるお前はホント痛いな。
>>737
まだベータ版の域も脱し切れてないD厨よりは100倍増しさ。
けんかすんな
>>736
managed c++いじってるだけならC#使うほうがよっぽど生産効率高いし、実行速度も差が無い。
少なくともWindowsのアプリ開発ではC++からC#にほぼ完全に移行した。C++の優位性を主張する上で
Windows開発持ち出しちゃ逆効果でしょ。
>>740
だな
VSをデフォルトインストールしようとすると既にC++はインストールされないしな。
これって、敢えて使ってくれるなってことだよな。J#よりも使ってくれるなという意思表示。
>>740
そこで、C++/CLI ですよ。
http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf

Sutter 先生乙
Cしゃーぷ厨は満足して巣に帰ったか?
>少なくともWindowsのアプリ開発ではC++からC#にほぼ完全に移行した。

これはいったいどこの話なんだろう・・
いくつか、すでにC#で開発してるという話を耳にしたことはあるが、
完全というには程遠い状況のようなんだが・・
まだ、(.NET)じゃないVBの方が需要ありそうだ。
.Netをlinuxで動かすプロジェクトがβリリースした。
6月30日に正式リリース。
>>745
そうだな。少なくともlonghornが出るまでは.Netの優位は感じられない。
標準で搭載されている訳じゃないし。
longhornになればGUI周りが一変されるから.Net移行してもいいとは思うが。
>>745
それは君が現状知らないだけでしょ?学生さん?もちろんアプリの話であって、ハードウェアのドライバはC/C++だよ。
うーん。でも、ドライバはほぼCに限定してもいいかもね。
ここはWindowsのパシリプログラマのスクツでつか?
Winアプリ・・・Csharp
それ以外のソフトウェア・・・C/C++
この言語3つで将来食っていけますか?
環境: Win+もうひとつ
言語: C/C++/C#(.NET)

マトモにできているなら重宝するよ
ドライバ書いたり、組み込み系やるなら何かひとつのCPUを勉強してアセンブラ書けないとだめ。
そうすりゃCでもC++でも見違えるぐらい効率的なコードが書けるようになる。
というか、一言にアプリといってもフリー、シェアなどの個人ユーザーレベルから
業務で使うリッチクライアントやサーバー関係など多種多様にある。
それを一つの言語だけということはあり得ない。

>>750
言語がどうこうよりもプログラマーとしてのレベルが大事。
仕事の場合、どんな言語、環境が使われるかわからない。

C/C++でも環境依存なと事かあるし
APIなんてAPIプログラムというのが必要になって来るし。
変に固執するよりもしっかりと地力をつけるのが大事。
>>752
今の時代は効率よりも保守性。
それぐらいは常識ですが?
まあ、高速性などが必要な場合は除く。
755デフォルトの名無しさん:04/05/07 13:45
>>752
8086マシン勉強して
アセンブリは一応読めるレベルだけど
書く気は起きないっすよ・・・
C/C++できtりゃC#習得は簡単だが、
一行プログラムでもっと重宝できるのがawkあとperl。アプリ書くわけじゃないけど
C系だと面倒なファイルの読み書きや正規表現を手っ取り早くこなして
Post Programming作業が楽になる。
>>752
じゃ!君にはC#がぴったりだな。このスレから出て行ってくれ。
間違えた >>752じゃなくて
>>754
じゃ!君にはC#がぴったりだな。このスレから出て行ってくれ。
>>しっかりと地力をつけるのが大事。
その地力とは何かを聞いてるんだよッ。
プログラムの世界ではこれをやっとけば大丈夫っていうのがない。
様々な言語が生まれ消えていくから。
そしてそれを採用する企業がいる限り・・・

まあ、個人が趣味でやる分には何をやろうとかまわないけど。
Delphiも.netに移行しちゃったし。
速度を必要としなければVB,C#でもかまわない。

俺はGUI部をdelphiでつくって基幹部をC++でDLLとして作ってる。
>>759
学生の俺がレスしてやろう
多分、逆汗してネイティブコードを見ることだろう
>>759
プログラムに対する考え方とかそういうの。
結局プログラムはロジックの固まりだから論理思考とかね。
ようするに言語に依存しなく、かつ言語の基礎になるもの。

いろんな言語にふれるのもいい。
あとはどれかをとことんやり込む。
>結局プログラムはロジックの固まりだから論理思考とかね。
じゃ詰め将棋でもいいっすか?
それか、徹底的に論理思考を鍛えてる
数学者は最高のプログラマということなんだな?
>逆汗してネイティブコードを見ることだろう
それは相当アセンブラで書き込んでないと難しいぞ。
どんな言語でも人のコード読んで理解するには相当書き込んでないとだめ。
特にアセンブラはコードのつながりとか構造が理解しづらいよ。
>>763
> 数学者は最高のプログラマということなんだな?
別に論理思考だけじゃないから。
他にもいろんなものが必要になってくる。
それぐらいもわからないお前は
最低のプログラマーであることは間違いないがな。

CPUは計算機ですよ?
だな?
から。
くる。
がな。
ですよ?
>それぐらいもわからないお前は
わからなから聞いてるんだよッ。

>最低のプログラマーであることは間違いないがな。
おちょくってたら思惑通り切れてやがんの。ギャハハハ。ばーか

>CPUは計算機ですよ?
それがどないした?
768766:04/05/07 14:12
一番上は引用か。
しかし、今の言語の流れって小学校の学習指導要綱みたいだな。
昔はCとかだったのが今はゆとり教育でJAVAとC#とか。

ここで名言。
「楽をするのはかまわない。ただ、なぜ楽ができるかを知っていなければならない」
770デフォルトの名無しさん:04/05/07 14:16
名言だって・・・(笑)
「楽をするのはかまわない。ただ、なぜ楽をしないといけないかを知っていなければならない」

自分のせりフを名言とかいうな。恥ずかしい。普通一句とかいいたいが句になってないしな。
>769 デフォルトの名無しさん sage New! 04/05/07 14:14
773769:04/05/07 14:18
ごめんゆとり教育受けてきたんで言葉知らないんだよ。
>>767
> >それぐらいもわからないお前は
> わからなから聞いてるんだよッ。
わからないから考えるんだよ。
考えることをやめたら人間終わり。
まあ、お前はすでに終わってるから関係ないか。

> >最低のプログラマーであることは間違いないがな。
> おちょくってたら思惑通り切れてやがんの。ギャハハハ。ばーか
普通の成り行きだろ。お前が「最高」といったから「最低」で返した。
思惑通りの反応でやんの。ギャハハハ。ばーか

> >CPUは計算機ですよ?
> それがどないした?
ない頭をふりしぼって意味考えろ。
って考える力がないんだったね、ごめん。
>>774
また例のC厨か?
さっさとCスレに帰れ。
>>771
いや、誰が言ったか忘れたが引用。
個人的に衝撃受けたもので。
777デフォルトの名無しさん:04/05/07 14:20
糞スレで777ゲット
どこぞのPG募集広告見ても、C・C++(java)は必須つうか前提のように書かれているから
事実上、ゆとり教育は現場で通用しないというか、現場の入り口にさえ入れないという現実がある
>>778
今の教育もそうだよな。小学校でなにをやろうと大学が変わってないから
結局苦労する・・・
フォルダに保存したexeファイルから実行するとすぐに画面が消えてしまうんだけど、どうすればいいですか?
>>780
system("PAUSE");
これでも使え
>>781
だからC厨は(ry
>>780
ウイスルかDOSプログラム。
DOSプログラムならDOSかあ起動すればいいし、ウイルスならなもうだめだな。
バカにされてるのもわからずマジレス返してる時点で恥の上塗りだな。こいつ女じゃねぇか?
>>774
茶化されてることに気づかず。まじめーにレス返してて、気づいた時点での激高振り。
まさに、厨中の厨。先のC厨はまじめなレスなんかはじめから返してなかったんじゃねぇの?
786774:04/05/07 14:37
いや、暇だから・・・
反論に反論で返したかったのよ。
ちなみに他にもいろいろ書いてるよ。
ID制じゃないからわからないだろうけど。
787C厨晒しage!:04/05/07 14:39
C厨晒しage!
どうして君たちってこんなに頭が悪いんだろうね。
食生活のせいかなぁ・・・。
789774:04/05/07 14:46
>>788
教育のせい
790デフォルトの名無しさん:04/05/07 15:05
自己責任

なんでも親のせい、大人のせい、教育のせい、社会のせいに
してはいけない
>>790
その自己は誰が育てると思う?
人生の敗北者でしかないプログラマが人に敗北者への道を説いてどうすんの?
>>791
自然淘汰圧と個体の環境適応戦略と順応能力
黄金虫が湧いてるだけなのか?
それともGW終わって嫌々仕事してるPGの悲鳴?
プログラミング初心者です。
じゃんけんのフローチャートってどうなりますか?
D言語嫌われてるね。
C#やJava厨ならともかく
C++厨がD言語嫌う理由は何だ?
>>796
> C++厨がD言語嫌う理由は何だ?
1. ここが C++ 相談室スレだから。
2. さすがに、まだ仕事には使えない状況なのだけど、その現状を無視して D, D やかましい
 輩が数人いるから。
>>796
そりゃまぁ、メーカーがね(ry
>>795
[かけ声にあわせて、グー、チョキ、パーのいずれかを出す]
↓               ↑
<判定をする>→あいこなら↑
どちらかが勝てば

(終了)
3.ようやく、死に物狂いでC++覚えたのに、また新しい言語が出てきてしかも、
C++でできることはすべてできてしかも生産性が高そうなことに嫉妬して。

ま、C厨と同じく向上心のかけらも無い奴は死になさいって琴田
>>800
D厨は氏ね。
>>799
二人ならね。
3人以上の場合はまずあいこか調べそのあと
架空の相手(誰も出していない手)と対戦させ
そいつに負ければ勝ち、勝てば負けとなる。
>796
Dが嫌われてるというより、D厨がC++スレ荒らしにきてるだけだろ
>>800
あのさあ、D覚える方が、C++覚えるよりずっと簡単なんだけど。
嫉妬なんかしてないんだけど(仕事でC#使ってる)。

向上心というより、どう考えても幼稚化なんだよなあ、Dは。
未来のない会社の株は誰も買わないでしょ。それと同じなんだよ。
Dってもともとお手軽なC++って感じで設計されたんじゃないの?
触ってる奴らでまともにC++の代替って考えてる奴なんかいるか?
D使ってないから知らないがC,C++,JAVAのいいとこ取りで設計されてるんじゃないの?
>>805
俺も全く同感なんだが、どうもD厨の中には甚だしく勘違いをして
いる香具師がいるらしく、「新しい物ほど偉い」と思っているらしい。

俺はそういう香具師に「C++に挫折したC厨が次に飛びつくのはDだ」
と揶揄したつもりだったんだが。ほとんどの人はDを遊び道具としか
考えてないはずなのに、>>800みたいなD狂信者がいて、しかもC++
スレを荒らしに来るので困っているのだ。
なんかJAVAの時もこういう議論あったよな。
>>806
本当に「いいとこ取り」なら互換性を捨てたりしないだろう。Dは一番
美味しい所を捨てているように思えるが。
>>804
あのさあ、ずっと簡単だからいいんだよ。
C#使っててなんでそれ使ってるかわかってないのか?
しかも、幼稚とは思わず使わされて日銭稼いでいる下働きプログラマなんだろが?

>未来のない会社の株は誰も買わないでしょ。それと同じなんだよ。
C++に未来があると思ってる時点でおめでたいことこの上ないな。
Windows以外では別に終わるわけじゃないが、汚前が日々糞coderやってる
WinではC++は終わりなんだよ。
結局言語なんて適材適所。
完璧な言語なんてない。
>結局言語なんて適材適所。完璧な言語なんてない。
激しく同意。所詮ハードウェアの手順なんだからな。
難しいことが美徳と思ってる奴はその都度ロジック回路組め。
>本当に「いいとこ取り」なら互換性を捨てたりしないだろう。Dは一番美味しい所を捨てているように思えるが。
一番おいしい部分のどこを捨ててしまったのか教えてください。
>>816
まあまあ。
味覚なんて人それぞれ違うんだから。
Cだと一筆画きできるがDを一筆書きすると0なのかOなのかわかりにくくなるところ。
>>816
俺も思った。>>811の比較見る限り。
>>816
>>809 は多重継承が何がなんでも必要なんだよ。

言語仕様知らずにこっぱずかしコメント書き込んでるわけじゃないだろうし。
821809:04/05/07 17:22
待て!今はじめて仕様見て必死になってあら捜ししてるところだ。
よーし。ガベコレけなしたろー。
どーでもいいけど、ここでやらないでくれよ。
823809:04/05/07 17:34
#ifdef が書けないのが幼稚だ。
>>811
腐るほど読んだよそのページは。
>>812
でもD言語も始まるわけじゃないね。
>>813
まあそうだな。
所詮C++はつぎはぎのキタネー言語だから、
そこにしがみついてる奴の擁護も当然メチャクチャになる。
>>825
C++の最大の失敗はCを引き継いだところ。いいところ悪いところ両方。
一番おいしいとこ=CやC++との互換性って意味だろ。
確かに、C++は、つぎはぎだらけのキタネー言語だけど、
D言語だって良いとこどりのつもりでごちゃごちゃいろんな機能を
取り入れようとしてつぎはぎだらけになってるけどな。w
お前ら、比較叩き煽り何でもありなスレでも立ててそっちでやれよ
ここで下らん叩き合いをするな
>>826
言語として失敗だろうがなんだろうが、これだけたくさん使われている以上、
まだC++の時代は終わらん。
俺はVC++よりマトモなコンパイラが出てこない限り、C++をやめる気はない。
所詮、C++にもC#にもDにもJavaにもSmalltalkやSchemeのような
スマートさがない。
どれも50歩百歩。
それに、実用性は言語の良し悪しじゃ決まらん。
どれだけCに似てるかと、開発環境の性能で実用性が決まる。
よってC++かC#が一番実用的だ。w
C#は一番おいしいとこ捨ててWinのデファクト開発言語となりまつた。
おまえらGWは終わりましたよ。
>>832
デファクト開発言語の割りには、有名なあのフリーソフトも
あのシェアウェアも全部C#じゃないね。w
Win上の開発では未だに圧倒的にC++が優勢だな。
longhornが来たらVB,C#ともに大幅な修正が加わる予感。
>>834
学生ちゃん。
PS、XBOX、DirectXといったゲームプログラムは
C++しか選択肢が無いしな
Win以外の分野ではC#なぞかけらも見ない
>>836
あれだけ環境依存だと
言語仕様そのものに大幅な修正が要るな
今時そんな薄氷のような言語イラネ
ここまで連鎖あぼ〜んで(ry
>DirectXといったゲームプログラムは
>C++しか選択肢が無いし。

さらしあげ。首つって市ね。あほ!
windowsプログラマ戦々恐々だね。あさましい。
新しく普及しそうな言語がでたらそれをえるように対応するだけなのに
C++厨はなんでこんなに他をけなしてしがみついてるの?C厨以下だな。
MSの手のひらの上で仕事させてもらってうれしいか?
>>838
XBoxとDirectXはC#だよ
PSはアセンブラ
>>843
> 新しく普及しそうな言語がでたらそれをえるように対応するだけなのに
いや、大半の人間は「普及したら」で間に合う。とりあえず Visual D 出るまで
待ちでしょ。
>>845
PSはアセも使うがC/C++も使えるぞ。
コードウォーリアーとかあるし。
ミドルウェアも多いし。
>>846
俺もそう思う。VDとか出たら考える。
JAVAだって結局Serverサイドかゲームぐらいしか使われなくなってるし。
>843
よそのスレで他の言語叩いてるC++信者に言ってくれ・・・
ここはC++のスレだからさ・・・
directX・箱はC++でコード書くのがメイン
PS2のエンジン(ライブラリ)はC++で書いて、微調整でアセンブリだろ
>>Visual D 出るまで待ち
反吐が出るね。M$プログラマのレベルなんてこんなもん。お前はM$の下請けか?
>>850
> PS2のエンジン(ライブラリ)はC++で書いて、微調整でアセンブリだろ
VU1 で走らせるマイクロコード (シェーダー) は、専用のアセンブラ言語。

メイン CPU 側で走るコードは大半が C++, コンパイラがサポートしていない
SIMD 命令 (R5900 マルチメディア命令と VU0 マクロモード)、あとは同期
処理などで使うハードに極めて近い命令だけインラインアセンブラで書く、
っつー感じ。

いずれにせよアセンブラは数学関数や描画系などの中で使うのがメインで、
ゲームっぽいコードのほうにはめったに顔を出さない。
>>851
勝手に反吐だしてれば?糞が。
M$は嫌いだが、コンパイラとマウスは出来がいい。
VCも.NETで対応CPU増えたし、コンパイラだけなら配布しだしたしなぁ。
コンパイラはIntel、GCC、VC、Borlandぐらいか?
>>854
ほかにも CodeWarrior とか。

組み込み用途だと CPU ベンダ純正のコンパイラとか、リアルタイム OS 屋
が出してるコンパイラ (Wind River Diab C/C++) とか色々あるよん。
趣味のプログラムならともかく、業務的には
ソフトウェア開発で職業プログラマが同じ処理を書くとき
少なくともC++より高水準なC#を使う場面なんてあるか?
ゲームプログラムだって
より低水準な言語でローレベルな調整したいのが人情
少なくともゲームプログラムではC・C++をメインに
専用アセンブリで痒いところを微調整というのが通常
そんな君はC++なんか使わずピュアC & 汗使えばいいだろ?というか使え。
C++みたいにコンパイル結果が見通しにくい言語使っちゃ、人間が介入するの大変だろうが。
>>855
違う。メジャーどころって意味で。
マイナー含めたらそれこそ山のようにある。
>>856
業務ってもパッケージソフトウェアとシステム開発で全く違うだろ、
ってかC#が台頭してるのはVB使ってたような場所。
>>858
> 違う。メジャーどころって意味で。
組み込み用途は、むしろメジャーだと思うぞ。開発人口も少なくないし。
>>857
C から C++ になって見通しが悪くなったのは、コードの配置ぐらいだと思うが。
あれは inline やら template やらあるから C と違って調整が難しい (命令
キャッシュのヒット率を上げるのが難しい) けど、他はそれほど。

最適化をかけると元のコードとかけ離れたコードをはくのは C も C++ も
大差ないよ。レジスタリネーミングを使うと、かなり追えん。
C#がデファクトとか言ってる人は何を根拠に?
とても信じ難いんだけど。
どういう世界でデファクトなの?
さっきからデファクトといってるがデファクトスタンダードとしないとも間違ってるぞ。
デファクトは「事実上の」って意味だけだ。
>>862
Web がらみの三階層アプリケーションだと、わりと流行ってる感じ。
これまで VBScript, JScript 使って ASP 書いてたところが、C#.net に
乗り換えてる。

でも、そっちも JSP とか ColdFusion なんかもあるし、まだデファクト
スタンダードっつ〜ほどじゃないと思うが。
>>864
C#はJSP,ASPに置き換わるものとして作られたんだろ。
クライアント用にはVBがあるわけだし。
JSPの代わりもVB.netでいいじゃん。
JSP? Japan Stuttering Project のことか?
どもりで困ってるのか?
>>864
M$がらみはデファクトスタンダードはない。
M$がスタンダードを決めてお前らが従うだけ。嫌なら書かなくていーよ。
アプリ書きたい奴はいっぱいいるから。
言語どころか開発環境さえ選択の自由なんかあるかよ。
>>864
それはVBScriptが取って代わってるだけでC++と
取って代わってるわけじゃないだろ。
>>868
> M$がらみはデファクトスタンダードはない。
三階層アプリだと Oracle + JSP や SQL Server + ASP (C#.net) など、
選択肢はいくつかあるよ。クライアントサイドだと Win32 でほぼ決まり
だから、選択の余地は狭いが。
871864:04/05/07 23:26
>>869
その通り。

っつか、俺は C++ と C# は有効に活用できる対象が明確に違うと思ってる。
ただ今後は Win32 クライアントも C# で書く機会が増えそうだし、これまで
C++ が受け持っていた領域にも少し C# が食い込んでくるかなぁ、とは
考えてるけど。
新しい領域は新しい言語がいいんでない?
C++は従来Cでやってたことを、一歩進めるのに使う。
教えてください。
クラステンプレートにて例えば

template<typename mytype> class test{
test(const mytype &); //コンストラクタ


};

としたとして、コンストラクタなんですが、上記とちょっと変えて
test<mytype>(const mytype &);
とするやり方があると本で読んだのですが、いまいちどう違うのか
わかりません。何でもmytypeにそれぞれ固有のコンストラクタが
コンパイラによって生成されるとかなんだそうですが、最初のやり方
でもそんな感じがします。
どう違うのでしょうか?
>>873
違いなんてありません。
そ、そうなんすか?
ということは
test<mytype>というコンストラクタの書き方は意味をなさないと?
http://www.geocities.com/one_mad_alien/perftest.html
こりゃもう乗り換えるしかないだろ。
>>876
まだ言ってるのか・・・。言語論に速度はほとんど関係ないよ。
>>877
技術ばかりに目が行ってると、その辺が理解できなくなる。視野の狭い人間に
何言っても無駄だから、放置しとけ。

俺は Visual D はともかく、プログラミング言語 D と Effective D が出たら
考えるよ。
879877:04/05/08 01:36
因みに俺はPrologが最高の言語だと思ってる。
>>879 わざわざC++スレでそんな毒にも薬にもならない自己主張などしなくてよい。
881デフォルトの名無しさん:04/05/08 02:04
C++でCと同程度の速度で巨大ファイルを読み込む方法ってありますか。

ここによると、
ttp://www.gamedev.net/community/forums/topic.asp?topic_id=121193

std::iftream ifs( "filename" );
ifs.rdbuf()->sgetn( (char*)data, size );  // low-level

とするのがいいといってるんですが、
50MBほどのファイル読み込みをCと比較すると3倍ほど遅いです。
882デフォルトの名無しさん:04/05/08 02:07
なんかC厨を釣るためのネタ質問に見えるなぁ
>>881
比較用のソース晒せ。
perlより速いんだろ?
>>881
その後のデータの使い方による。stream の機能をフルに使いたいなら
そこで示された方法を使うことになるし、単にメモリ上にマップすれば良い
のなら mmap() とか MemoryMappedFile() といった OS の仮想記憶
システムに近い低レベル API を使うことになる。
881です。
>> 883
だいたいこんな感じです。

const int BUFSIZE = 4096;

// C 用
setvbuf(fp, NULL, _IOFBF, BUFSIZE);
clock_t start = clock();
while (fread(buf, 1, BUFSIZE, fp)) ;
clock_t end = clock

---

// C++ 用
ifs.rdbuf()->pubsetbuf(buf, BUFSIZE);
clock_t start = clock();
while (ifs.read(buf, BUFSIZE)) ;
clock_t end = clock、

>>885
Cのfopenとfgesで十分な使い方です。
ただなんでこんなに速度差があるのか疑問だったので。
881です。

まちがえました。

ifs.read(buf, BUFSIZE));

ifs.rdbuf()->sgetn(buf, BUFSIZE);
>>886
なんで部分的に貼るんだよ。テストしにくいだろ。
>886
デバッグビルドしてませんか。
890デフォルトの名無しさん:04/05/08 09:27
bool aという変数があって、
aがtrueの時はfalseに、falseの時はtrueにするような(反転するような)
代入をしたいのですが、
a=~a;
だと、コンパイラが受け付けてくれません。
どうやったらいいでしょうか。
>>890
a = !a;
C++の仕様を決めるとき、なんで配列のdeleteには[]が必要にしたんだろ?
配列も普通にdeleteだけで開放できても問題ないような。

[]を付け忘れて間違えるデメリットはあっても、付ける事によるメリットって
なんかある?
>>892
ある。

配列を開放する場合、デストラクタを呼び出すために、その配列に格納
されている要素数をどこかに記録しておく必要がある。delete, delete[] を
共通にしてしまうと、常にこの要素数を記録せにゃならんので、その分だけ
メモリが無駄になる。
>>893
でも正直、貧乏臭いよね。
数バイトのメモリケチってdelete/delete[]を誤るほうが怖いな
下手すると豪快にリークしてくれるて本末転倒
>>893
それ本当?

もともとメモリ開放するためには、newで確保したメモリサイズが
なにかしらの管理領域に保持されているはずだよね。
そしたら要素数なんて別に持たなくても、要素数は算出できるはずじゃね?
デストラクタ呼び出しのためじゃないの?
>895
WindowsなどのPC環境でしか開発をしたことがないと
そういう言葉が出てくる
>>897
[ ]あってもなくてもデストラクタは呼ばれる。
>>898
確かにメモリがシビアな状態ではね。
でも、newした時点ですでに保持されてるんじゃないの?
>>896
そのオブジェクトのサイズはね。
だけどポインタが指してる先が一個のオブジェクトか、配列の先頭かは
プログラマにしか分からんよ。
>>901
OSも知ってる。もちろんOSにも寄るけど。
>>896
ttp://www.tietew.jp/cppll/archive/10666

ここを読みんしゃい。

あと、>>896 が言うように計算可能であるかもしれないけど
コストがかかる処理になるかもしれないし
メモリアロケータを設計する上での足枷となりうる。
>>900
メモリアロケータはユーザが override 可能だから、それを仮定することはできない。
>>899
>>899
え?
>>903
うーん、そんなにコストかかるか?
newで確保したメモリ内に管理用領域が付随していて、
それが激しくサイズ不定でとかならわかるが、
普通は引き算がせいぜい数回と、割り算1回発で済むんじゃないの?

>メモリアロケータを設計する上での足枷となりうる。
というのも足かせが思いつかん。
>>906
メモリアロケータは要求されたメモリサイズをそのまま確保するのではなく、
8, 16 バイト単位に切り上げた上でメモリを確保・呼び出し側に渡したり、
一定サイズまではライブラリ内部でプールしておいて、閾値を越えたら OS
のアロケータに丸投げしたりといった細かい工夫が施されてたりする。

確保したメモリサイズ・要素数を生のまま埋め込むことを前提とすると既存の
メモリアロケータを全部捨てて書き直す必要がるし、かといってアロケータが
まったく別の領域で「メモリアドレス先頭」と「要素数」の対応表を管理すること
にすると、そっちのメンテナンス・検索コストが結構かかる。
908デフォルトの名無しさん:04/05/08 12:46
静的メンバ関数を使うメリットってなんですか?
>>908
何と比較して?
>>899
[]なしだと呼ばれるのは先頭要素だけだよな
911908:04/05/08 12:55
>>909
普通に関数宣言するのと比べて(クラスのメンバにしないで)
クラスの静的メンバにアクセスできる
913908:04/05/08 13:01
>>912
即レスありがとうございます。

今のところコールバック関数をメンバにしたいときにしかつかったことないんでどういうときに使うといいのか〜ってのがいまいちわかってないみたいです。
もっと勉強したほうがいいですね。
静的メンバ関数はインスタンスが無くても使えるのが便利。
全てのオブジェクトからアクセスできる。
クラスのオブジェクト生成のカウンタとか、共通で扱うデータなどは静的メンバ変数にする。
916908:04/05/08 13:18
グローバル変数みたいなものってわりきっちゃっていいかな?
むしろ外部からのstatic変数へのアクセス関数に相当だろ。
>>906
>というのも足かせが思いつかん。

古臭い仕様上の制約というやつだ。合理性を求めても仕方が無い。
win32apiのWINAPIとかCALLBACKみたいに
C++の言語仕様に
関数名に付加する修飾子みたいなのってありますか?
>>919
WINAPIが何で定義されてるかお前は知っているのか?
>割り算1回発で済むんじゃないの?
ヲーヲー!もっともクロック数が必要な命令じゃないか。
>>920
__stdなんたらとかいう記号定数だろ
windows.hで定義されてるやつ

仮にC++のソースに関数名と型の間にひとつトークンを置いたとき
こういうのを関数名を修飾するトークンというふうに
認識してくれるのかなとか、なんとなく思ったので質問した
>>922
> __stdなんたらとかいう記号定数だろ
「記号定数」ってなんだ?

C++の文法と、使っているコンパイラのマニュアルを確認しる。
>>922
お前がそのWINAPIを使うときに使ってる言語は何だと思う?
その言語は「修飾するトークンというふうに認識」してるらしいが、
その言語はなんだと思う?w
春だなぁ・・・
春ですねぇ…
春ではなくただの日曜日だが。

>>919
関数名に付加する修飾子は在るが、呼び出し規約を指定するものはない。
呼び出し規約を指定するものしかないの間違いだろ?
> C++の言語仕様に
>>927
土曜日ですよ。
>>928
inline, virtual, explicit, staticなんだが、これを呼び出し規約と言うのか?
stdcall、cdecl、fastcall
>>930
そうだったか…
呼び出し規約は __stdcall __thiscall __fastcall __cdecl だな。Windows環境だと。
ちなみに先頭にアンダーバーがついてるので処理系依存だな。
呼び出し規約ってDLL作成の時にしか気にしてないが
他になんか必要な場合ある?
食い違ってるとスタティックリンクすらできん。
>>934
__thiscallと書きたい気分はわからんでもないが、とりあえず手元のVC7にそんなキーワードはなさげだったぞ。
あとアンダーバー二つはM$拡張みたいだが、詳しいことは漏れもよくわからん。
>>924
D言語
thiscall
C++メンバ関数用
基本的には__cdeclと同じだが、最後にthisをpushする。
thiscall はキーワードではないので、プログラムで明示的に指定できません。
より詳しくは、それぞれのコンパイラスレでどうぞ。
>>935
APIのコールバック関数。
>>939 わかりやすい誤訳だな。
API絡みぐらいじゃないとやっぱ使わないか。
>>943
じゃあ分かり難い誤訳でもご覧になって落ち着いてください。
http://support.microsoft.com/default.aspx?scid=kb;JA;74586
948943:04/05/08 17:34
thisをスタックに積むのは「vararg 関数」の時だけ。
それ以外の場合はecxレジスタで渡す。

↓原文。この時点でたしかに誤解を招きやすい。
http://msdn.microsoft.com/library/en-us/vccore98/html/_core_thiscall.asp

↓新しく書き直されたのがこっち。だいぶ読みやすくなってる。
http://msdn.microsoft.com/library/en-us/vclang/html/_core_thiscall.asp
Whidbeyがいつの間にかVisualStudio2005に名前決まったんだな。
950919:04/05/08 18:09
蒸し返すけど要はホスト環境とコンパイラ依存ということですかね
関数の呼び出し規約の修飾子は。
つまり、WINAPI向けにコンパイラの機能を拡張しただけだと
x86以外の大抵のCPUには呼び出し規約は一つしかない。
x86に呼び出し規約がたくさんあるのも、WINAPI向けってわけじゃぁない。

↓ここの"The history of calling conventions"シリーズがかなり詳しい(まだ全部読めてないけど)。
http://weblogs.asp.net/oldnewthing/archive/2004/01.aspx
NULL character を含む文字列 ("aaa\0bbb\0ccc\0\0" みたいなの) を std::string で
扱いたいんだけど、どうやって代入すればいいですか?

string s = "aaa\0bbb\0ccc\0\0";

だと、"aaa" までしか代入できません。
basic_string(const E *s, size_type n, const A& al = A());
basic_string(const_iterator first, const_iterator last, const A& al = A());
\x00は?
>>952
> string s = "aaa\0bbb\0ccc\0\0";
そりゃ初期化だ。初期化なら >>953 の挙げてるコンストラクタ使え。
代入なら同じ引数のassign使え。

リテラルのサイズを取得するのに、templateを使うと幸せになれるかもしれない。
template< std::size_t N > inline std::string& assign_literal( std::string& target , char const ( &literal )[ N ] ){ return target.assign( literal , N - 1 ); }
>>953,955
うわっ、レス早っ!
こんな感じでいいのかな?

char *p = "aaa\0bbb\0ccc\0\0";
string s(p, 13);
string t;

cout << s << endl;
cout << s.size() << endl;

t.assign(p, 13);
cout << t << endl;
cout << t.size() << endl;

どうもでした。
こまかい突っ込みですまんが。
× char *p = "aaa\0bbb\0ccc\0\0";
○ char const *p = "aaa\0bbb\0ccc\0\0";
>>956
>>955の書いたテンプレート関数なら
std::string s;
assign_literal(s, "aaa\0bbb\0ccc\0\0");
で済みますな。長さを別途与えなくてもいい
>× char *p = "aaa\0bbb\0ccc\0\0";
ほんと糞下らんこと言う奴いるな。
いったん初期化したあとで別のアドレス指すのかもしれんだろうが。
>>957
お前の意図したコードは↓じゃないか?

char const * const p = "aaa\0bbb\0ccc\0\0";
char const ってあったっけ?
const char *const p = ...
ならあると思うが
chsr constは const char と同意。間違いない。それぐらい調べてからコメントしろ。
というより const が直後を修飾すると考えると
char const の方がbetter だと思う。特にpointerのアドレスか内容かをconst指定する際
char const *p;
はわかりやすいと思う
>>964
> char const の方がbetter だと思う。

そうか、読みにくいから俺はいつも const char だ。
>>964
> const が直後を修飾すると考えると

漏れの場合その道理でいくとconstが*にかかって
ポインタを移動できなくなるんじゃないかと誤解するなぁ。
>>constが*にかかって
char *p;
で*pをポインタと考えてるからだろうが!違うぞ pがポインタで*pはその内容を意味する。
だから
char const *p
は p の指す内容を不変とすること。
char * const p;
は p の指すアドレスそのものを不変とすること。
型を修飾すると考えるほうがわかりやすいような希ガス。
>>964
constが直後を修飾するという考えなら
const charでいいだろ。あくまでchar型のインスタンすを定数と
考えるんだからな。
long だってlong int ってするようにな。
971966:04/05/08 22:58
>>968
> で*pをポインタと考えてるからだろうが!

いや、宣言時には*がポインタを表す装飾だと思って(思い込んで)いるから。
漏れの場合*とpは離して書いてるが、それも宣言専用の装飾だと思っているから。
ちょっと無理のある表現だが
const char pointer p;
みたいな感じかな。

> pがポインタで*pはその内容を意味する。

だとすると、
char *p="null po";
はおかしな表現に思えてしまう。
あくまで宣言のみの表現で*pが内容を意味しないと解釈すると
上のようにpointerに置き換えられるので納得しやすい。

あとは定数の表現をchar constではなくconst charと覚えているから
const charのポインタということでconst char *にしているというのもある。
というか、char constって書き方ができるってのはいいが、
そういう表現を積極的に採用してる書籍ってあるのか?
ストラウストラップだってconst charだろ?
char型の・・・ただのchar型でなくて、定数のchar型・・・
というような順の修飾と考えたほうが自然だと思うけどなぁ。

char constという表現を知らんやつがいても仕方ないぐらい、
特殊な書き方だと思うよ。
アスタリスクを通る縦線を引いて、分類せよ。って書いてあったじゃん。
>char *p="null po";
>はおかしな表現に思えてしまう。

これは、本来は文法的にはあまりよろしくない書き方だ。
初期化が面倒だから、K&Rにもこういう書式を許しているし、コンパイラもOKだが
本来は

char *p;
p="おまえはバカ";


であるからな。厳密に考えるとCにはおかしな書式がいくつかある。
>>974
( ゚д゚)ポカーン
>>972
それはお前がバカだから、

Effective C++

読んでから言え。もっとも積極的に勧めてるわけじゃなく、
両方読める必要があると言っている。
お前はそれを知らなかったんだから、知る必要があったわけだ。
無知をひけらかして恥さらすな。
宣言したインスタンスに対し初期化するという意味なら別におかしいとは
思わんよ。
どんな修飾がついてたって、インスタンスはpであってその内容を代入してる
わけだから。修飾子とインスタンスを切り離して考えれば自然ではある。

char *p = "おまえがバカ";
でいいと思う。
978966:04/05/08 23:13
>>972
const char *で宣言してもコンパイラのエラー出力ではchar const *になってたりするけどな。

話はちょっと反れて関数のポインタが&をつけなくても
取得できるのがおかしいというのをたまに聞くが、
あれも関数名はポインタそのもので()がポインタを解決する(実際には実行するんだが)為の
operatorと考えていて何も疑問を感じていない。
むしろ関数名に&を付けて関数のポインタを得られることが不思議だったりする。

メンバ関数に対するconstでもないしそろそろCスレ行きか。
ルールを単純にしたいがため、「constは左の型を修辞する」というルール一本にした。
他所から拾ってきたソースや過去の自分のソースで const char とか書いてあるのを見たときに少し考えてしまう。

> そういう表現を積極的に採用してる書籍ってあるのか?
David Abrahamsによるboostのソースはそうなっている。
上記のルールの一本化も彼のコーディングガイドラインによるもの。
少し前のgccの出力がそうなっていたが、最近はconstが右につくようになった。
>long だってlong int ってするようにな。

話にならんな。
この場合 long は int を修飾するだけ

int long x;

とやって long が xを修飾する必要がどこにあるんだ。

char const *p;
の const がポインタ内容を修飾する必要のある場合とは全く意味が違う。

例を持ち出すならもっと的確な事例を挙げてろ
>>978
関数名は関数型を持ち、関数型は関数へのポインタへ暗黙の変換が効く。
関数への参照という型も存在する。
この認識がないと、templateで関数型を扱うものが理解できない。
>>974
> 本来は
> char *p;
> p="おまえはバカ";

と言われても、
char const * const p;
p = "NULLPO";
と書くと警告でちゃうぞ。

>>976
何熱くなってんだ ?
誰も const char と char const のどちらかしか読めないなんて書いてないぞ。
>>976
バカはおまえだ。俺は両方の表現知ってたし、あくまで
const char より char const の方を押してる書籍の話を
言ってんだ。それが積極的ってことだろ。Effe C++だって
char constを押してるわけじゃない。知る必要とかじゃなくて
どっちが一般的かって話してんだよ。それからお前はEffe C++
がすべてか。バ・カ・タ・レ。
>話はちょっと反れて関数のポインタが&をつけなくても

関数のポインタってなんだ?関数へのポインタのことか?

これ以上constの位置について話すのならコチラへどうぞ→http://pc5.2ch.net/test/read.cgi/tech/1078193971/
なにあつくなってんだクズども

class Class { ... } typedef C;
>>986
お前のことだ(w
>>983
お前が何にも知らんことは文面から用意に察することができたのでバカでも知ってる教科書名を挙げてやったのよ。
一通りよんでりゃ、const の前置、後置ぐらいでスレ汚すバカは居ないだろうからな。勉強になったことを感謝しろ。

日 本 海 溝 よ り 教 育 レ ベ ル の 低 い 糞 ガ キ よ 。



>>984
それぐらい理解しろよ。
人と話したことないのか ?
990966:04/05/08 23:29
>>977
>>971と同じ意見だよな。ありがとう。
が、あくまでソースから受ける印象の話であって何が正しいという話はしていないことに注意。

>>984
すまん。関数へのポインタ。

>>981
恥ずかしながら関数型という言葉を知らないんだが具体例をきぼん。
ということでC++の話題へ。
とりあえず落ち着け。
>>988
海溝は深いと言うべきだな。
>>988
しまいにゃ言えることはその程度かw。死ね。
>>952
最後に'\0'を2回付けたいのなら"〜\0"で十分では?
議論は構わないがそう熱くなるな。
端から見てると単なるケンカにしか見えないから。
まず日本語の読解力を身につけろよ。
>と言われても、
>char const * const p;
>p = "NULLPO";
>と書くと警告でちゃうぞ。

それはね、内容もアドレスも不変と宣言してるのに、宣言した時点より跡で代入してるから。
すいません熱いところ申し訳ないんですが次スレはドコですか
>>984
>それぐらい理解しろよ。
>人と話したことないのか ?

君ポインタの扱いが十分わかってないね。
関数のポインタなんて表現はありえない。
つまり、わかってる奴は絶対こういう表現はしない。
>バカはおまえだ。俺は両方の表現知ってたし、
バーカ。こんなこと知ってるぐらいのことを何宣言してんだ。アホの活造りかおまえ。
1000! って言うか次スレ…
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。