5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part29

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

過去スレ、関連スレ、関連リンクなどは >>2-13

2 :v(^・^)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/

3 :v(^・^)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
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/

5 :v(^・^)v:04/04/16 01:47
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
 (日本語) http://www.kmonos.net/alang/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html

6 :デフォルトの名無しさん:04/04/16 01:47
S

7 :v(^・^)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

8 :1:04/04/16 01:59
なんか、ちょぃと失敗気味なスレ立てになっちまった…

すまぬ。

9 :Addicted to C++ ◆nrBjarne.g :04/04/16 02:48
乙!

10 :デフォルトの名無しさん:04/04/16 04:04
STL使うと(ry

11 :デフォルトの名無しさん:04/04/16 04:19
>>10
環境に(ry

12 :デフォルトの名無しさん:04/04/16 04:23
>>11
すげ(ry

13 :デフォルトの名無しさん:04/04/16 05:16
C1010: プリ(ry

14 :デフォルトの名無しさん:04/04/16 05:19
>>13
#inclu (ry
あと氏(ry

15 :デフォルトの名無しさん:04/04/16 05:21
>>14
言葉が(ry
まぁヒント(ry
うむごくろ(ry

16 :デフォルトの名無しさん:04/04/16 05:58
>>(ry

17 :デフォルトの名無しさん:04/04/16 08:32
もまいらムダにスレを消費す(ry

18 :デフォルトの名無しさん:04/04/16 11:36
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です

19 :デフォルトの名無しさん:04/04/16 11:47
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あげ

22 :デフォルトの名無しさん:04/04/18 11:08
行列表記したいのですが、
1. std::vector< std::vector<double> >
2. boost::multi_array
3. blitz::array
だとどれが速度的にいいでしょう?

23 :デフォルトの名無しさん:04/04/18 12:06
お前の環境とお前の使用するサイズでベンチマークしろ

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;
};


25 :22:04/04/18 12:43
ここはマジレス禁止スレなんですか?

26 :デフォルトの名無しさん:04/04/18 12:48
マジレス禁止スレかもしれないのに
「マジレス禁止スレなんですか?」って聞くバカ発見

27 :デフォルトの名無しさん:04/04/18 12:52
うそつき村を思い出すな。

というか、 >>22 は速度だけが問題なのか。保守性とか考えないのかな。
本当に速度最優先なら環境と使い方に依存する面が大きいので
>>23 の通り、実際に測って比較するしかない。

28 :デフォルトの名無しさん:04/04/18 12:53
つぅか、一口に速度っても色々あるだろうに。
数値演算における"行列"なら標準ライブラリではvalarrayの担当。

29 :デフォルトの名無しさん:04/04/18 13:26
>>28
std::valarrayで多次元配列同士の演算(乗算とか)は
面倒だろう。効率も悪い。

30 :デフォルトの名無しさん:04/04/18 13:27
結論:double[][]が一番早い。

31 :デフォルトの名無しさん:04/04/18 13:32
俺の環境なんかだとblitzは(演算にもよるんだろうが)gccの方がiccより
圧倒的に速かったりするし、ホントにコレは環境依存だと思う。
gcc でもvalarray より vector の方が速かったりするしね…。

32 :デフォルトの名無しさん:04/04/18 14:22
valarrayはalias-freeなのが売りなので、alias-freeだとコンパイラに明示的に指定して
なんぼだと思っていたのですが(そしてgccはalias-freeの指定がなかったはず)。
あぁっと、sliceが使えるという利点もありますね。
いずれにせよvalarrayは時代の遺物というのが一般的な認識だと思います。
あと、boost::multi_arrayじゃなくて、せめてboost::ublasを引き合いに出してほしいです。
まぁ、上で言われているとおりまず測定するのが先でしょう。
数値計算は環境に非常に敏感な処理ですから。

ところで便乗になりますが、unrollの回数なんかをクライアントが環境に合わせて
調整できるような線形代数ライブラリはないんでしょうか?C++で。

33 :デフォルトの名無しさん:04/04/18 22:15
>>32
MTLがそんな事出来たような気がしなくもないけど忘れた。勘違いかも。

34 :デフォルトの名無しさん:04/04/18 23:48
100000x100000が欲しいので>>24さんそれもヨロ。



35 :デフォルトの名無しさん:04/04/18 23:56
レスくれた方々有難うございます。

boost::multi_arrayのドキュメント読むとblitzからの貢献があった
となっています。
blitz::arrayはboost::multi_arrayに吸収されたと思っていいですか?
準標準と言われるものが2つもあるとどれにするか悩みますが。

36 :デフォルトの名無しさん:04/04/19 00:28
>>35
で、レスされたことを実行しようとはしないわけ?>速度計測

37 :デフォルトの名無しさん:04/04/19 00:29
>>24
_で始まる名前を使うなっ(とレスしてみる)

38 :デフォルトの名無しさん:04/04/19 10:19
>>36 今週中にはやるから。今、暇がないし。

前もってある程度手がかりが欲しかったのよね。

39 :デフォルトの名無しさん:04/04/19 12:51


40 :デフォルトの名無しさん:04/04/19 16:28
>>37
あ、おれよく使う。やばい?

41 :デフォルトの名無しさん:04/04/19 16:36
標準ライブラリや処理系定義のライブラリと名前衝突しても文句言えん。そんだけ。

42 :デフォルトの名無しさん:04/04/19 16:45
オレ、名前付けのセンスあるから多分ぶつからない。
ぶつかってもコンパイラが警告出してくれるからいいや。

43 :デフォルトの名無しさん:04/04/19 17:25
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];
};
のようにメモリーを当てるのと同じ意味なんでしょうか?
長くてすいません。

45 :デフォルトの名無しさん:04/04/19 18:28
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>が気に入らないみたいです。どうやったらコンパイルできるんでしょう?

46 :デフォルトの名無しさん:04/04/19 18:43
やりたいのはポインタの2次元配列じゃなくて
2次元配列へのポインタ
double (*r)[ny][nz];
じゃないのか?

47 :デフォルトの名無しさん:04/04/19 19:09
>>44
その前にそのコードコンパイル通ったか?

48 :デフォルトの名無しさん:04/04/19 19:31
>>45
意味不明。 operator* だけでいいだろ。



ひょっとして、釣りか?

49 :デフォルトの名無しさん:04/04/19 21:09
>>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に対してそうやると面食らう結果になりますよ.
(理由を説明すると長いんですが・・・)

50 :デフォルトの名無しさん:04/04/19 21:28
ところで、>>45は、マルチなわけだが。

51 :デフォルトの名無しさん:04/04/19 22:28
>>45
Matrix<X>の前にtypenameを入れたらどうか。
VC7.1は本来typenameを入れなければならない場所に入れなく
てもコンパイルが通ることがあるくせに、入れなくてもいい場所
に入れないとエラーを起こす事がある。

52 :45: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のバグなのでしょうか?

53 :45:04/04/20 00:24
>>48
ストラウストラップよーく読んでね。ホント見落としそうなところに
チョコっとだけ書いてあるから。もちろん前方宣言要とは一言も書いてないけど。

54 :デフォルトの名無しさん:04/04/20 03:33
>>52
friend宣言しているfuncがメンバ関数のfuncを指していると解釈されてしまっていると思います.
スコープ解決子を使って見て下さい.

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

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

前方宣言についてですが,
friend宣言の時点で関数テンプレートの実体化を行わせるわけですけれど,
その時点で関数テンプレートの宣言は見えていないとならないですから,
私としては前方宣言は必須だと思うのです.
gccの実装ではfriend宣言の後方にまで関数テンプレートの宣言を読みに行ってくれる
ようですが,むしろこちらの方が気が利きすぎかと思います.

55 :デフォルトの名無しさん:04/04/20 03:39
>>52
あと49にも書いたのですが,前方参照がわずらわしいなら,friend関数の定義を
クラススコープ内に書くのもおススメします.(49の書き方はわかりにくかったですね)

template<typename X> class Matrix{
...
friend Matrix<X> operator*(Matrix<X> const & lhs, Matrix<X> const & rhs){
//ここにoperator*の定義を書いてしまう.
}
};


56 :デフォルトの名無しさん:04/04/20 12:26
>>54,55
丁寧に回答していただきありがとうございました。

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

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

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

親切に教えていただき感謝の気持ちでいっぱいです。

57 :56: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さんの言われるトリック使わないとだめかも・・・

58 :56:04/04/20 18:37
icc では前方宣言+スコープ解決子できれいに通りました。
結局
gcc3.3.1: テンプレートの前方宣言なしOK, スコープ演算子使うとエラー
icc8.0: 前方宣言+スコープ演算子が要
VC7.1: 前方宣言要,スコープ演算子要,時にスコープ演算子でもエラーとなる。
って結果でした。
さて、VCはどうしよう?

59 :デフォルトの名無しさん:04/04/20 23:54
C++のクラスってのが書き方がめんどくさいし、継承とか意味が分かりません
クラスって構造体に関数を加えたやつですよね
大規模な開発で関数が多くなったり、再利用するためにライブラリ化するのに
クラスを使えばいいとは思うんですが、それ以外ってややこしくなるだけですよね
小規模やライブラリ化しないのであれば、C++よりCの方が分かりやすくていいですよね

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

60 :デフォルトの名無しさん:04/04/21 00:02
>>59
そんな君に
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797311126/250-5351434-6401851

61 :デフォルトの名無しさん:04/04/21 00:39
59はC,C言ってるけど実はFortran使いの匂いがするな…って気のせいか…

62 :デフォルトの名無しさん:04/04/21 00:55
> ややこしいC++なので、大きなソフトで使えばさらにややこしくなると思うんですが…

そうはならない。
C++のややこしさを使って、大きなソフトを単純な記述で表すことが可能になったりする。

63 :デフォルトの名無しさん:04/04/21 01:05
>>59
単に今のところC++から脱落していると言うだけのようですね。
がんばって理解すれば、ちょっとしたものでもC++で書きたくなります。

64 :デフォルトの名無しさん:04/04/21 01:07
>>60
>>59レベルのやつにいきなり読ますなって(w
むしろ「憂プラ」の方が入りやすいんじゃ?

というか、オプジェクト指向の必要性を感じないなら無理にC++つかわんでCでいいやン。
多分、>>59氏にはそれで十分なんだよ。

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

66 :デフォルトの名無しさん:04/04/21 01:45
別にクラスを使わなくてもC++使ってると言ってる人は、
少なくはないんじゃないかと、ふと思ったり。。。

67 :デフォルトの名無しさん:04/04/21 02:01
>>66
多いよ〜。
「C++です」って注釈のついたソース読んだけど、OldCスタイルだったし。

で、「小規模」をどう判断するかでも変わるけど、
c++でcと同程度に書くことは可能だし巧く書ければ
可読性や保守性の点でcに勝ることも可能だと思う。
#問題は、それをできる技術者が少ないことだな。

68 :デフォルトの名無しさん:04/04/21 02:53
単純にC++で書いたほうが必然的に頭の中が整理されるので好んで使ってる。
こんな風に思ってるオレって、もしかしてC++のことよくわかって無いのかな?

69 :デフォルトの名無しさん:04/04/21 03:02
pure Cではほとんど書いてないな。// はANSI Cではコメントとして認められてたっけ?
TurboからBorlandに変わってすぐにPC-98の上でビヤーンとにらめっこ
しながらC++コード書いてたが、やってはいけないことがよくわからなかった。
Effective C++あたりはそこら辺がうまくまとめられてるんだけど、そんなの未だ出版
されてなかったから手探りで随分遠回りしたよ。
人様の作ったクラスライブラリ使わせてもらうだけならいいんだろな?多分!
禿げビヤーンとEffective Vol1,2読んでオブジェクト指向の本読んで、デザインパターンの
本読んで・・・いつになったら一人前になることやら・・・
そうこうしてるうちにC++自体あぽーんしたってか?

70 :デフォルトの名無しさん:04/04/21 03:14
>>68
いきなりクラスから作り始めるわけ?
俺それできない。
ある程度Cで関数作ってみてから全体構成考えてクラス作る。


71 :デフォルトの名無しさん:04/04/21 03:25
ハードウェアに密着してたり、アセンブラに近い速度出したい人はCとアセンブラでギンギンにチューンしてください。
アプリ組みたい人はC#でやってね。
C++は暇な人やってください。

俺は暇なのでC++使ってる。
あと,complex標準でサポートしてる言語ってFORTRANとC++以外にあった?

72 :デフォルトの名無しさん:04/04/21 04:28
>>58
あきらめてクラススコープ内に定義書いちゃいましょうw.
そっちの方が圧倒的に楽だと思います(色々実験して疲れたw).

73 :デフォルトの名無しさん:04/04/21 04:39
>>70
C++でやった方が綺麗に書けることが多いよ。
データソースが、ファイルかリソースかメモリであるかを
意識しないでアクセスできるようなストリームクラスを作ってみ?
C++のありがたさが本当にわかるから。
純粋仮想関数の使い方を理解したらCには戻れないよ。

74 :デフォルトの名無しさん:04/04/21 05:06
>>70
普通、データ構造とか先に考えてからじゃないと、
アルゴリズムは決まらないでしょ。
ちょっと、効率悪い作り方してるかもしれないから、
先輩とか上司に相談してみたらいいと思うよ。

75 :デフォルトの名無しさん:04/04/21 05:09
趣味のプログラミングだったら、その場の思いつきの
行き当たりばったりの作り方でいいと思うけど、
仕事でそんなことやったら上司から雷落ちるなー。
設計と製造を行ったり来たりどたばたしたらマジで鉄拳飛んでくるw
プロの仕事ってそんなもんよ。

76 :デフォルトの名無しさん:04/04/21 05:13
>>70
そういう怪しい作り方をしないようになるためにも、
C++やったほうがいいかもよ。いやまじで。

77 :76:04/04/21 05:14
っていうか、いきなり作り始められるところがすごいと思う。
少なくても、作ろうと意識した瞬間、
既に頭の中には仕様書が出来ている?

78 :デフォルトの名無しさん:04/04/21 05:45
>77
最初から脳内ですべてのクラス設計が出来る人間などいない

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

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

そうやっていけば、何をクラスにしていけばいいかが見えてくる
こういうことを繰り返していけば、経験則としてどういうクラス設計が
妥当かというのはいずれ身についていくよ


79 :デフォルトの名無しさん:04/04/21 06:08
似たようなソフトばっかり作ってるんだから
惰性で決まるだろ

80 :デフォルトの名無しさん:04/04/21 07:01
>>73
ストリームクラスを作るより、むしろ、
ストリームを引数に持つ汎用関数を作ると思うのだが。
例:
void Func1(FILE* fp);
void Func2(std::iostream& strm);

ストリームクラスの自作は、あまりに面倒ではないかい?

81 :デフォルトの名無しさん:04/04/21 08:34
>>80
そんなに面倒じゃないと思うぞ

82 :デフォルトの名無しさん:04/04/21 09:07
>>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を利用する処理がある場合と書いてるじゃん

85 :デフォルトの名無しさん:04/04/21 13:45
>そう考えてしまうのはオブジェクト”思考”ができていないから。
アフォの一つ覚えじゃねえのか?オブジェクト指向プログラミングやりたいなら
C++がベストチョイスじゃないだろが?まっとうなオブジェクト指向でいきたけりゃ
別な言語使え。
しかもストリームクラスの自作?いったい何の必要性があってそんな無駄なこと
せにゃならんのだ?大体メモリに関しては速度低下もたらすような余計な操作を
経由することなくアクセスしたいがためにC#じゃなくC++を使ってるのに、バカ学生かお前?

86 :83:04/04/21 13:47
>>84
そお?82氏の言いたい事ってストリームを抽象化したクラスを
作れって言いたいのでは。
80氏がFunc1とFunc2を何でならべて書いたのかわかんないけど、
>そう考えてしまうのはオブジェクト”思考”ができていないから。
ってのはちと的外れなような・・・。

87 :デフォルトの名無しさん:04/04/21 13:58
>>75
>設計と製造を行ったり来たりどたばたしたらマジで鉄拳飛んでくるw
>プロの仕事ってそんなもんよ。
君の会社暴力団かね?

88 :デフォルトの名無しさん:04/04/21 14:20
例えば、ハード屋にアルゴリズムを説明したり、DSPのコーディングを外部に委託
するとき、C++で元のコード書いてるとすごく見通しが悪くなるんだなこれが。
C++はこれからも使われ続けるだろうけど、ビジネスの峠は超えたな。
Unix系は相変わらずCが多いしな。


89 :デフォルトの名無しさん:04/04/21 14:21
>>78
それは>>70氏に言ってあげてください。

90 :デフォルトの名無しさん:04/04/21 14:25
>>87
そうやって話の腰を折るんだよね。
プロ意識が無い香具師ほど、こんなこと言って話をそらす。

91 :デフォルトの名無しさん:04/04/21 14:32
多重継承をサポートしてる言語ってC++以外にある?
で、これ禁止すれば随分すっきりするよな。

92 :デフォルトの名無しさん:04/04/21 14:42
使わなければすっきりするよ。

93 :デフォルトの名無しさん:04/04/21 14:59
今の会社で鉄拳制裁加えでもしたら傷害罪でやった奴は間違いなくクビ。
どころか前科者だわな。まっとうな会社でそんなことする会社あるのか?
聞いたことないな。

94 :デフォルトの名無しさん:04/04/21 15:00
粘着が1人いますね。

95 :デフォルトの名無しさん:04/04/21 15:01
C++で多重継承使ってる奴いる?多重継承の必要性について熱く語ってくれ!

96 :デフォルトの名無しさん:04/04/21 15:01
>>93
そんなこと気にするより、自己を磨くことに専念したほうがいいよ。


97 :デフォルトの名無しさん:04/04/21 15:03
そんな会社に居続けるよりやめたほうがいいよ。

98 :デフォルトの名無しさん:04/04/21 15:03
>>95
使う人は使えばいいし、必要性の感じない人は使わなければいい。
無理に使おうとして苦労するのも時間の無駄だし、
多重継承だけがC++のご利益では無いから。

99 :デフォルトの名無しさん:04/04/21 15:05
オレ、データのカプセル化、
ライブラリのラッパーぐらいにしか使ってないよ。。。
それでもC++がいいよ。Cよりちょっとだけコーディング楽だから。

100 :デフォルトの名無しさん:04/04/21 15:06
>>97
まあ、個人の自由だな。


101 :デフォルトの名無しさん:04/04/21 15:10
仕事でバタバタしたからといって殴るより、仕事中2CHにアクセスしてる奴を殴ってやりゃどうだ。有限会社ところか三ちゃん会社だろうけどよ。

102 :デフォルトの名無しさん:04/04/21 15:12
>>101
まったくその通りですね。先ずはあなたから。

103 :デフォルトの名無しさん:04/04/21 15:13
っていうか、殴るに異様に反応する人がいますね。

104 :デフォルトの名無しさん:04/04/21 15:14
普通だったら比喩的表現ってみるだろ。
何、過剰反応してるんだか。
関係ない話ですマソ。

105 :デフォルトの名無しさん:04/04/21 15:19
JavaもC#も多重継承は必要悪としてる。無くても十分と判断してるわけだな。
C++ではそれを認めてるわけだが、それが理由でC++を使ってる人居るのかい?

106 :デフォルトの名無しさん:04/04/21 15:21
WTL。

107 :デフォルトの名無しさん:04/04/21 15:27
必要な人は使ってるし、必要で無い人は使ってないんじゃないかな。

108 :デフォルトの名無しさん:04/04/21 15:29
だから、サポートしていても使わなければいいだけの話で。
他のC++の機能の恩恵を受けている人もたくさんいるわけで。

109 :デフォルトの名無しさん:04/04/21 15:30
必要、不必要と言う話なら、もうこの辺で終わりにしたら?
必要なら使う、必要でないなら使わない。以上。

110 :デフォルトの名無しさん:04/04/21 15:34
>>108
だから他の機能のことはどうでもいいよ。君に無理にそれを聞いてるわけじゃないんだから,
使ってなければわざわざレスはいいよ。
こっちは多重継承にどんな実例があるのか聞きたいわけなんだから。

111 :デフォルトの名無しさん:04/04/21 16:07
lib_socket_init(srvName, &errNum)
ソケット通信関連の関数みたいなんですが、なんなんでしょうか?。
一般的な物ですか?。

112 :デフォルトの名無しさん:04/04/21 16:10
> 一般的な物ですか?。
ググればわかるよ

113 :デフォルトの名無しさん:04/04/21 16:13
>>110
「多重継承の必要性について熱く語」られても今更迷惑だし…

114 :デフォルトの名無しさん:04/04/21 16:16
>>110
それこそ、本を買いあさって読むほうが早いと思うよ。
そこまでやってピンと来なければ、
そういうもんだと諦めるしかないかもね。
あと、仕事などでやってる実例はここでは言えないし。

115 :デフォルトの名無しさん:04/04/21 16:31
>>114
だから言えなければレスしなくていいってば!教えてくれる気がある人だけコメントくれればそれでいい。
そんなに書き込みたいの?まともな実例載ってる本が見当たらないから、ここに相談しに来てるんだし。

116 :デフォルトの名無しさん:04/04/21 16:33
>>115
cppll にでも行ってみ

117 :80:04/04/21 16:34
このスレは「車輪の再発明」で独り悦に入るマニアの多いスレですね(w

118 :デフォルトの名無しさん:04/04/21 16:36
懐かしい話をここで聞くとはw

119 :デフォルトの名無しさん:04/04/21 16:37
オレにはどういう話のつながりかわからないよ〜。
車輪の再開発。話は知ってるけど。。。

120 :デフォルトの名無しさん:04/04/21 16:38
>>115
“自分が求めている答以外は許せないタチ”ですか?
いちいち反応しすぎです。

つか、iostream じゃダメ?

121 :デフォルトの名無しさん:04/04/21 16:40
要は車を作るのに車輪から新規開発するメーカーはないでしょってこと。
違ったっけ?
で、どこと話がリンクするの?

122 :デフォルトの名無しさん:04/04/21 16:40
リンクエラーです。。。

123 :デフォルトの名無しさん:04/04/21 16:41
>>115
>>106

124 :デフォルトの名無しさん:04/04/21 16:41
>>122
いや、ハイパーリンクでいいのですが。

125 :デフォルトの名無しさん:04/04/21 16:43
iostream っていう実例があるのに、周期的に「多重継承の実例ない?」厨が発生するのはなぜだろう。
は、ひょっとして釣り?

126 :デフォルトの名無しさん:04/04/21 16:45
車輪ってiostreamのことか。わかりましたー。

127 :デフォルトの名無しさん:04/04/21 16:46
>>115は先ずiostreamをよく調べてからここに来なさいって琴田。
話はそれからでも遅くは無い。以上。

128 :デフォルトの名無しさん:04/04/21 17:21
>>71
C(99)

129 :デフォルトの名無しさん:04/04/21 17:49
言語仕様の一部を実現するために全体の言語仕様を決めました。

130 :デフォルトの名無しさん:04/04/22 02:18
筒子の2から8を2個ずつ集めるのも車輪ですよ。それも大きな。

131 :デフォルトの名無しさん:04/04/22 02:48
つまんね

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って返ってきて欲しいのだけれど.
たまたまかなぁ.


133 :デフォルトの名無しさん:04/04/23 09:53
mapの要素はデフォルトコンストラクトされるので、その場合は0が保証される。
newで生成する値については少し事情が違う。

134 :デフォルトの名無しさん:04/04/23 10:34
cppll、もうやだ。
FreeMSVCって環境依存のはなしだろ!?
初心者がそういう話したら、ぺきっておるくせに。

135 :132:04/04/23 10:37
早速の返答,ありがとうございました.よく分かりました.
>>133
> mapの要素はデフォルトコンストラクトされるので、その場合は0が保証される。
ただ,この説明で新たに疑問が生じたのですが,
私の環境では,スタックに,
double d0;
とか取ったときにはd0が0でないことがあります.
スタックに組み込み型を取った場合は
デフォルトコンストラクトはされないんということでしょうか?



136 :デフォルトの名無しさん:04/04/23 10:42
>>135
133がいってるデフォルトコンストラクトは、mapのこと。
double自体には無いです。

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

m0 [0];
した時点で要素であるdoubleがデフォルトコンストラクトされ,
それの値としては0が保証される.
って説明じゃないんですか???


138 :デフォルトの名無しさん:04/04/23 11:00
>>137
0は保障されないよ。コンパイラ依存。

139 :デフォルトの名無しさん:04/04/23 11:02
↑ごめん、ちょっとまって、試す
忘れて。

140 :デフォルトの名無しさん:04/04/23 11:06
m0 [0];
なんで、ここでコンストラクトされるとおもってるの?

141 :デフォルトの名無しさん:04/04/23 11:19
>>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は保証。

142 :132: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が保証されるとかですか?


143 :デフォルトの名無しさん:04/04/23 11:21
m0[0]としたとこで、allocatorが動き出す。
ディフォルトのallocatorは0で埋めるから、
mapで生成される要素に関して0が保障される。
>>133

double *pd= new doubleは、0を保障しない。
double d; も0になるとは限らない。
スッタクだろうが、ヒープだろうが、同じ。

144 :132:04/04/23 11:24
>>141
> で、ここでTはdoubleだが、組み込み型に対する明示的な引数なしコンストラクトは
> 0が返る。
おおっ! なるほど.
ありがとうございました.


145 :132:04/04/23 11:26
>>143
> m0[0]としたとこで、allocatorが動き出す。
> ディフォルトのallocatorは0で埋めるから、
> mapで生成される要素に関して0が保障される。

おおっ! なるほど.
ありがとうございました.


146 :143:04/04/23 11:26
>>141
m(_ _)m

147 :143:04/04/23 11:38
スッタクってなんだぁ!
たのむ!流行らないでくれ!

148 :132: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です.


149 :143:04/04/23 11:43
double *pd= new double();
double d();
こういうことなら、非環境依存で0になるんじゃないかな。

150 :デフォルトの名無しさん:04/04/23 11:47
>>149
後者は関数宣言な罠

151 :143:04/04/23 11:48
・・・。 ('A`)スッタク

152 :143:04/04/23 11:53
VC7.1で、
double *pd= new double();
*pd == 0 です。

double *pd= new double;
*pd != 0 です。

153 :デフォルトの名無しさん:04/04/23 11:56
>>149
5.3.4(New)の15によると、Tが組み込み型(POD)の場合
new T() だと初期化され、 new T だと不定値になるね。
()の有無が重要なんだなあ。

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

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


155 :デフォルトの名無しさん:04/04/23 17:29
>>134

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

なので、2chにいるのだ。

156 :デフォルトの名無しさん:04/04/23 17:38
cppll_noviceが上級者に荒らされてるような気がするのは俺だけ?

157 :デフォルトの名無しさん:04/04/23 23:50
>>156
cppllもnoviceも万年初心者の漏れには投稿しづらいッス。

158 :デフォルトの名無しさん:04/04/24 01:14
スッタクドッコイ!

159 :デフォルトの名無しさん:04/04/24 03:40
ヒプー


160 :デフォルトの名無しさん:04/04/24 06:21
コンストラクタへの関数ポインタってどうやって宣言するの?

161 :デフォルトの名無しさん:04/04/24 09:34
コンストラクタは関数じゃな〜い

162 :デフォルトの名無しさん:04/04/24 09:57
ちょくちょく出てくる “cppll” って何かと思ったら、エビか…

163 :デフォルトの名無しさん:04/04/25 01:07
nslookupでk.vodafone.ne.jpのMXコードを調べたいんですが検索できません
何か検索する方法はないんですか?


164 :デフォルトの名無しさん:04/04/25 02:04
class Cexception{
const char* str_;
public:
Cexception(const char* str) : str_(str){}
const char* what() const {return str_;}
};

こんなかんじの例外クラスを見かけたんですが、コレ大丈夫なんでしょうか

165 :デフォルトの名無しさん:04/04/25 02:31
コンストラクタに渡すstr次第なんじゃね?

166 :デフォルトの名無しさん:04/04/25 02:45
>>165
そのとおりだが(w
エラーメッセージが全部グローバルで用意されているのかな?
使いにくそうな例外クラスではある。

167 :デフォルトの名無しさん:04/04/25 10:04
>>166
cから延々と引き継いでるプロジェクトとか、cから流れてきたプログラマとかだと
平気でやりそうな設計ですね。

168 :デフォルトの名無しさん:04/04/25 14:17
std::exception派。

169 :160:04/04/25 14:45
コンストラクタへのテーブル作りたいのだけど困ったなぁ。。。

  Class{
  public:
    Class();
  };

のとき、

  Class& (*pfnClass)();

とかできそうなもんだが何故できない?


170 :デフォルトの名無しさん:04/04/25 14:52
>>169
で、そのコンストラクタが初期化すべきオブジェクトはメモリ上のどこにあるんだ?

素直にT*を返す関数作れ。なんならtemplateで。

171 :デフォルトの名無しさん:04/04/25 14:53
>>169
コンストラクタを直接呼び出すことは禁止
(領域の初期化がセットになる、つまりnew経由の必要がある)なので

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

何がやりたいの?

172 :160:04/04/25 17:26
>>171
そうだ、私がやりたかったのはソレダ
ありがとう

173 :デフォルトの名無しさん:04/04/26 00:01
すみません、自分はjavaを主にやってるのですが
ファイルを示すクラスを作るときなどに

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

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

c++のえろい人だったらどうやって実現しますか
こんな感じで作るというのをアドバイスいただけると助かります。

174 :デフォルトの名無しさん:04/04/26 00:08
>>173
スコープの問題とは?

175 :デフォルトの名無しさん:04/04/26 00:11
>>174
即レスサンクスです

Hogeというクラスがあって

Hogeというクラスの中にcreateHoge()という関数(メンバ関数ではない)を作るとして
そのなかでHoge*を返却する場合に new Hoge()とした場合に問題はないのでしょうか?


176 :デフォルトの名無しさん:04/04/26 00:11
例外投げる。

177 :デフォルトの名無しさん:04/04/26 00:16
>>175
NULLじゃなくてis_openみたいにすれば

178 :デフォルトの名無しさん:04/04/26 00:23
どうもサンクスです

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

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

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

それが一番スマートですかね


179 :デフォルトの名無しさん:04/04/26 00:59
file存在しない場合はNULLObject作って>>177みたいにするとか
戻り値はauto_ptrにすれば安全かな

180 :デフォルトの名無しさん:04/04/26 08:58
>>175
auto_ptrを使うとか:
if (Hoge *ptemp = Hoge::createHoge()) {
std::auto_ptr<Hoge> phoge(ptemp);
// phogeを使って色々...
}
って手もあるけど、例外のほうがいいかも。

181 :デフォルトの名無しさん:04/04/26 13:21
例外で処理するのが一番だよ.
でもってファイル操作は。
必要になった時点で fopen 使えばいいじゃないか。
<< なんか使うより fprintf の方が簡単でずっと良いだろ?

182 :56: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の方が歴史も古い分、出来がいいような気がしますが・・・?

183 :56: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な変数と比べて
どんな利点がありますか?

185 :デフォルトの名無しさん:04/04/26 23:40
副作用など無く、ただ
「スコープを制限するためだけにある」
ってことくらいか

186 :デフォルトの名無しさん:04/04/27 01:09
ハァ?何がstatic?とか思いながらタイプしなくていい。
スコープ引っ越すときにつけたりはずしたりしなくていい。
内部リンケージとか外部リンケージとか気にしなくていい。

187 :175:04/04/27 02:10
いろいろなパターンを教えていただき感謝です

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


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

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

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



188 :デフォルトの名無しさん:04/04/27 03:46
>>182
自分も色々試したのですが,結論としては,テンプレート引数に依存する型を返り値とする関数
(そしてこれはまず間違いなく関数テンプレートになると思いますが)
をfriendとして宣言するときには,型の付かないスコープ解決子(::)は使えない
(使わなくて良い)ということみたいです.
で,このときはクラス内での宣言順に気をつけたほうが良い(>>182)というわけですね.
なので54の前半分で書いたことはどうやら間違いくさいです.
誤った情報を提供してしまって申し訳ないです.
自分も色々試してみて勉強になりました.(が,細かい規格に正直うんざりした面もw)

189 :デフォルトの名無しさん:04/04/27 12:52
Matrix ライブラリのBlitz++ですが、もう随分前からファイルが
消えてるんですが、
http://www.oonumerics.org/blitz/download
プロジェクト自体あぽーんしたんでしょうか?

190 :デフォルトの名無しさん:04/04/27 13:24
>>189
sorceforgeのミラーから普通に落とせたが?

191 :デフォルトの名無しさん:04/04/27 13:29
>>189
本当だね。最終更新日も去年の7月だし。boostのuBLASにBlitz++
その他のライブラリを開発する時のノウハウを盛り込んだと書いて
あるから、もしかしたらBlitz++プロジェクトは事実上停止し、uBLAS
に開発者が移った可能性はある。

どっかにソースないかな。

192 :デフォルトの名無しさん:04/04/27 13:32
>>190
ttp://sourceforge.net/project/showfiles.php?group_id=63961
から落とせた?

193 :デフォルトの名無しさん:04/04/27 13:36
>>192
ttp://easynews.dl.sourceforge.net/sourceforge/blitz/Blitz++-0.7.tar.gz
少なくとも俺はこれを落とせた。

194 :デフォルトの名無しさん:04/04/27 13:39
>>193
本当だね。URLを全部指定しないとだめぽ・・・・
CGIからは全部削られているみたい。

195 :デフォルトの名無しさん:04/04/27 18:30
C++って何で、
extern "C" { }
が要るの?

これのせいで、どれだけ手間が増えてるか!

196 :デフォルトの名無しさん:04/04/27 18:32
>>195
オブジェクトファイルの命名規則がCと違うから。

197 :196:04/04/27 18:34
性格には、
オブジェクトファイル内で使われるシンボルの命名規則が違うから。
誤解を招く表現だったな。

198 :デフォルトの名無しさん:04/04/27 18:42
>>195
そんなに手間増えるか?

199 :デフォルトの名無しさん:04/04/27 19:24
>>195
多分、ここにそんなレスを書き込む手間のほうがめんどいとおもう。

200 :56: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の速度となりました。


201 :56: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より遅いのか判ってませんが??

202 :56:04/04/27 20:17
あ!XP では20 FreeBSD 15だから速いんだ。オカルトが起こらなくてよかった。
間違いばかりでスンマセン。


203 :デフォルトの名無しさん:04/04/28 02:56
>>202
レポートおつ〜。

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

スッタク、ヒプー ワロタよw

204 :デフォルトの名無しさん:04/04/28 04:33
>>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);
};

205 :デフォルトの名無しさん:04/04/28 05:45
difftime の結果が
Cygwin -mno-cygwinだと20sec
FreeBSD のgcc だと 15sec

206 :デフォルトの名無しさん:04/04/28 05:54
も一度書き直します。
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計算を多用(カルマンフィルタ)したものです。

207 :デフォルトの名無しさん:04/04/28 06:32
コマンドラインからファイルかディレクトリ名を入力してもらって、
ファイルの場合は末尾にabcと書き込んで、ディレクトリの場合にはそのディレクトリに
abc.txtというファイルを作成し、そこにabcと書き込むようなプログラムを作りたいのですが
コマンドラインから入力されたものが、ファイルかディレクトリかを識別する方法ってありますか?

208 :デフォルトの名無しさん:04/04/28 07:20
>>207 bool boost::filesystem::is_directory( const boost::filesystem:path & ph );

209 :デフォルトの名無しさん:04/04/28 07:45
>>208
boostを使うわけね。
実はboostって触ったことすらなくてちんぷんかんぷんなんだけど、
調べてみたら面白そう。少しやってみるよ。
ありがとうございました。

210 :デフォルトの名無しさん:04/04/28 12:52
>>204
本当にどうでもいい話なら
boost::numeric::ublas::matrixを使えば終わるという説も

211 :デフォルトの名無しさん:04/04/28 18:16
テンプレート引数を持つ関数のfriend宣言は何もmatrixライブラリに限った話ではない。

212 :C++:04/04/28 22:24
http://page4.auctions.yahoo.co.jp/jp/auction/d47227135

213 :デフォルトの名無しさん:04/04/28 23:19
>>204
下の方が良いというか,どっちでも良いはずです.

>>210
どうでも良くなくても,普通はそうするべきですね.

214 :デフォルトの名無しさん:04/04/28 23:20
すいません。自然定数eを計算によって求め、結果を表示するプログラムの作り方を教えてください。

215 :デフォルトの名無しさん:04/04/28 23:47
>>214
まず数値計算を勉強汁!
っつーか自然定数って何だよ。自然対数の底だろうが...ったく。
そもそもさぁ、おまえにはググって答えを見つけるぐらいの知恵はないのかよ。

216 :デフォルトの名無しさん:04/04/28 23:57
そう問題に書かれているからわからんのですよ

217 :デフォルトの名無しさん:04/04/28 23:59
「自然定数」ってなんだかわかんなかったから、かわりに
「自然対数の底」を求めるプログラムを作りました。

って書いて提出すれば問題なし(たぶん)

218 :デフォルトの名無しさん:04/04/29 00:05
とりあえずそうしてみます。アドバイスありがとう


219 :デフォルトの名無しさん:04/04/29 00:30
自然対数の底 e = 自然定数

220 :デフォルトの名無しさん:04/04/29 00:33
"+自然定数" の検索結果 約 108 件
"+自然対数" の検索結果 約 6,330 件

221 :デフォルトの名無しさん:04/04/29 01:09
>>213
>どうでも良くなくても,普通はそうするべきですね.
それは違うな!そんなことはboostがISOの仕様に含まれてからいうべき。
標準仕様に含まれてないものを使うべきなどとは誰もいえない。


222 :デフォルトの名無しさん:04/04/29 01:17
どうでもいいけどBoostダウンロードできるか?
http://www.boost.org

223 :213:04/04/29 01:26
>>221
あ,違います違います.
213は,既存のライブラリがあるなら,自分で車輪の再発明をするよりは
それを使うべきではないか?という意図の書き込みです.
boost::numeric::ublasを使うことを強制するつもりはまったく無いです.
特にmatrixは他の有力な候補もありますし.

224 :デフォルトの名無しさん:04/04/29 01:28
sfのミラーから落とせないならsf.net自体の不調だろ。なんかあそこトラブル多いし。

225 :デフォルトの名無しさん:04/04/29 01:31
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行で回答
できるだろが!

226 :デフォルトの名無しさん:04/04/29 01:54
>>225
#include <math.h>
#include <stdio.h>
int main(void) { printf("%f\n", pow(2, (1 / log(2)))); return 0; }
わずか3行でできるだろうが!

227 :デフォルトの名無しさん:04/04/29 02:01
よく車輪の再発明が愚の骨頂のように言う人いるけど、温故知新ってことわざもあります。
boost使って楽だけど、楽して一ユーザとして過ごしてるだけじゃ、難しくて膨大な
言語仕様のC++はなかなか身につかないんじゃないすか?C++習得の教育効果という意味で
matrixのクラスライブラリの作成は有意義だと思いますが・・・

228 :デフォルトの名無しさん:04/04/29 02:04
まあ確かに、演習としてはStringとかArrayとか作るわな。

229 :デフォルトの名無しさん:04/04/29 02:04
>>226
>>すいません。自然定数eを計算によって求め、結果を表示するプログラムの作り方を教えてください。
出題者は収束する様子を確認させたいんだよ.

230 :デフォルトの名無しさん:04/04/29 02:14
それと、自分のプログラムの中でその依存度があまりに高い場合、自前で作るのは決して悪くないと思う。
汎用目的のものをカスタマイズすると思いもかけず速度が改善したりってこともあるし。何より内容をちゃんと
理解しとくとサポートを中止されたときでも安心ってのもあるよ。


231 :デフォルトの名無しさん:04/04/29 02:53
車輪を作るのは面白いし勉強になる。
しかし自分が本当にやるべきこととはズレていることが多いので注意。

232 :デフォルトの名無しさん:04/04/29 02:58
再発明上等ヽ(`Д´)ノVC5じゃboostまともに使えねーんだもん

233 :デフォルトの名無しさん:04/04/29 03:10
>>227
教育的効果については激しく同意します.

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

>>231
耳が痛いですw

234 :デフォルトの名無しさん:04/04/29 03:34
この仕事長くやってると、車輪作るのウザったくない?
まあ、若いうちだけだなって感じ。

235 :デフォルトの名無しさん:04/04/29 03:35
あれだよ。そんな雑魚仕事は新人研修の課題にでもすればいい。
今がちょうどいい時期。

236 :デフォルトの名無しさん:04/04/29 05:09
所詮、人様の作ったライブラリの wrapper 作ってるだけのソフト屋が雑魚仕事とは片腹痛し。


237 :デフォルトの名無しさん:04/04/29 05:23
初心者が「これがあれば(゚∀゚)イイ!!」
と思うようなものはすでに存在している。
複数人参加型のプロジェクトで使わない事を前提にするなら、
自作ライブラリを作るなりなんなり勝手にすればいい。
ただし自作を自慢すんな、このスレで。はずかしいぞ。

238 :デフォルトの名無しさん:04/04/29 05:39
>人様の作ったライブラリの wrapper 作ってるだけ
あいたた! まさに>>237 の仕事そのもの

239 :デフォルトの名無しさん:04/04/29 06:25
と、以前に自作自慢で恥をかかされた経験のある>>238が申しております。

240 :デフォルトの名無しさん:04/04/29 06:26
と、以前に自作自演で恥をかかされた経験のある>>238が申しております。

241 :デフォルトの名無しさん:04/04/29 06:29
と、顔を真っ赤にして煽りをいれる>>239-240が申しております。

242 :デフォルトの名無しさん:04/04/29 06:35
と、顔を真っ赤にして煽った経験があるから
他人も同じ事するに違いないと思い込んでいる>>241が申しております。

243 :デフォルトの名無しさん:04/04/29 07:12
再発明という表現にも語弊がある気がするね。
結局、誰かがもう通った道をなぞってるだけじゃん。そりゃ楽だし面白いわ。

自分だけの新大陸を見つけよう。

244 :210:04/04/29 07:16
>>227
matrix作るのも悪くは無いが>>228くらいにとどめておくか
貧弱な2(or多)次元配列クラスが作れた、程度でいいと思う。
matrixで学習すべきはExpression Templateじゃないかと。
てことで誰か俺にExpression Templateを学習できる出来れば日本語のサイトを教えてくれ_| ̄|○

245 :デフォルトの名無しさん:04/04/29 07:32
>>243
実は、コロンブスやマゼランは中国(明王朝)の探検団の作った地図を頼りに
新大陸に到達したという説が浮上している。
TBSの「世界ふしぎ発見」でやってたよ。マジレス。

246 :デフォルトの名無しさん:04/04/29 07:46
ほとんどの製品開発っていうのは再発明なんだよな。再発明じゃないのは製品の規格制定段階の
ファーストランナーだけ。ところが再発明といっても全く同じプロセスじゃないから新たな発明が生まれる。

247 :デフォルトの名無しさん:04/04/29 08:31
>>245
それはもしかして鄭和のことか?

248 :デフォルトの名無しさん:04/04/29 12:08
日経サイエンスにコロンブス以前に新大陸について書かれた地図の真贋論争というネタが
載ってたな。というか、コロンブス以前にヴァイキングが行ってたのは間違いないらしいが。

249 :デフォルトの名無しさん:04/04/29 12:14
ここは車輪の再発明ネタだけで何倍もおかわりするインターネットですね。

250 :245:04/04/29 12:26
>>247
そういえば、そんな名前が出てたかもしれない。

コロンブスの大陸到達時の文献に、
アメリカ原住民と明らかに肌の色が違う人々が他にいたと書かれている。
由来不明の古い灯台の遺跡が存在し、その設計寸法の最小単位が
中国で用いられていた単位と一致する。
などなど、色々番組で言ってたよ。

251 :デフォルトの名無しさん:04/04/29 13:05
>>249
既に答えがわかってるもの以外人に相談しても答えられないだろ。再発明が嫌な奴はこのスレ
に来るなって琴田。
ところで、
数値計算するのに行列の演算ではなく操作というかインターフェースを提供してるだけ
のublasなんか使ってる椰子なんているのかね?実際の+/-/*以外の実際の演算は結局自分で
つくらにゃならんだろ?実数に限定するならnewmat の方がよっぽど便利
http://www.robertnz.net

252 :デフォルトの名無しさん:04/04/29 15:11
車輪は車輪でも俺の車輪はレース用のスペシャル仕様
市販品ではタイムが下がりますよ?

253 :デフォルトの名無しさん:04/04/29 16:23
>>252
スポンジタイヤを紙やすりで削ってますか?
シャーシは肉抜きしてますか?
タミヤの電池使ってますか?

254 :デフォルトの名無しさん:04/04/29 16:27
そして結局「適材適所」に落ち着くわけか

255 :デフォルトの名無しさん:04/04/29 18:33
>>236
オレの事かと思ってびっくりしたよw

256 :デフォルトの名無しさん:04/04/29 19:03
パフォーマンスがどうこう言ってSTLを
否定する>>252のような痛いヤシがいたが、
また息を吹き返したようだな(w

257 :デフォルトの名無しさん:04/04/29 19:11
>>256
お前は何もわかってないな

258 :デフォルトの名無しさん:04/04/29 19:16
>>257
お前がな。相当に痛いよw

259 :デフォルトの名無しさん:04/04/29 19:33
>>255のように謙虚になれないヤシって痛いよな。
ユーザーモードはすでにそれ自体がラッパーなのに、
それを自覚できない馬鹿のなんと多いことか。

260 :デフォルトの名無しさん:04/04/29 19:38
ラッパーと非ラッパーの二種類に分ける気かよ

無茶だなー

261 :デフォルトの名無しさん:04/04/29 19:38
じゃドライバとか作ってるとエライわけだな

262 ::04/04/29 19:39
おまえら人間ってラッパーしか作ってないじゃん

263 :デフォルトの名無しさん:04/04/29 20:13
俺はトロンボーン奏者だ

264 :デフォルトの名無しさん:04/04/29 20:15
俺はフルート奏者だ

265 :デフォルトの名無しさん:04/04/29 20:15
yippy yo yippy yay
あれ、ここなんのスレだっけ

266 :デフォルトの名無しさん:04/04/29 21:15
俺はハーモニカ走者だ。

267 :デフォルトの名無しさん:04/04/29 21:16
俺は尺八掃射だ。

268 :デフォルトの名無しさん:04/04/29 21:53
利用しやすいインターフェイスの構築は立派なことだと思います。

269 :デフォルトの名無しさん:04/04/30 00:09
C++の数値演算ライブラリってなかなかいいのがないよ。liboctave+atlasがなかなかいいけど、
blitz風の行列の設定方法(A = 1,2,3,5,6;)が使いたいとか言い出すと結局自作せざるを得ない。

270 :デフォルトの名無しさん:04/04/30 00:17
C#が出てきたことでC++はなくなるんですか?

271 :デフォルトの名無しさん:04/04/30 00:27
C#でOS作れるのか?

272 :デフォルトの名無しさん:04/04/30 00:37
継承は何の為にある

273 :デフォルトの名無しさん:04/04/30 01:12
C++使いとしてはC#の存在が気になるんですけどね。
C#が出来たから何か良いことあるんですかね?

274 :デフォルトの名無しさん:04/04/30 01:35
すまん、知らんのだが、Windows以外でも使えるの? C#。

275 :デフォルトの名無しさん:04/04/30 01:40
本屋に行くとやたらとC#関係の本が並んでいるのが気になるところ。なんで?

276 :デフォルトの名無しさん:04/04/30 02:22
スレ違いだけどLonghornでWinFXがネイティブAPIになるからじゃないの。
つーかGW的な流れだね。

277 :デフォルトの名無しさん:04/04/30 02:56
オライリーのC#本を見たときは、妙な感慨があったな。

278 :デフォルトの名無しさん:04/04/30 03:53
C#の本ぱらぱら読んだだけなのだが、継承でsealとかoverrideを明示するのはC++にはない
新しい機能。こんなのはC++でもあっていいとオモタ。
俺はポインタ大好きなんで、明示的なポインタがないのは寂しいけど
-> がないのは確かに見やすいとオモタ。
ただ条件コンパイル指定の機能が弱いのと、
結局遅くてOffice作るには使えんかったというのはホントか?
少なくともデバドラは書けんが特にWin上の統合環境でVB/C++行き来しながら
アプリ書かんでいいのは楽ということらしい。・・・でいいんかな?
まぁ数値計算メインの椰子には用はないってことで。

279 :デフォルトの名無しさん:04/04/30 03:59
Winのアプリ屋がいうには最近ほとんどC/C++の仕事はなくC#がメインらしい。
でも組み込みやディジタル回路屋では全く話は別でC#のかけらもない。

280 :デフォルトの名無しさん:04/04/30 04:06
まあ、C#はまさに”次世代”のためのものだな。
スペック的にVS.netが動けるマシンじゃないのに開発してていらいらしたよ。
でも、コンパイル時にちょっと重いだけで一旦走り出せばそんなには気にならない。
C++の知識があれば習得は容易だけど、いろんな面でJavaの方が近いのはなんだかな・・・

281 :デフォルトの名無しさん:04/04/30 15:10
ピアソンのC++のテキストで、
「isspaceはワイド文字用のバージョーンでオーバーロードされている」というくだりがあるんだけど
確か、ctypeヘッダではisspace()は一つしか定義されてないし、それ以前に
Cの仕様のライブラリなんだから、オーバーロードされているはずないと思うんだけど・・・
誤訳かなんかと考えて宜しいでしょうか?

282 :デフォルトの名無しさん:04/04/30 15:25
iswspaceのことかなあ。

283 :デフォルトの名無しさん:04/04/30 18:28
C++知ってる奴には習得は容易というけど、両方いじくるはめになったら混同しそう。
monoってのが既にあるけど、adaやjavaまで手を広げたgccもサポートしそうだな。

284 :デフォルトの名無しさん:04/04/30 18:49
>>281
オーバーロードというよりtemplate版だが<locale>にある。
Cライブラリ関数にオーバーロードが追加されているのは珍しくない。
strchrとか、absとか<cmath>の各関数とか。

285 :デフォルトの名無しさん:04/04/30 19:56
>>284
サンクス。

286 :デフォルトの名無しさん:04/05/01 00:19
やっぱ
#if〜#endif
は欲しいよ。

287 :デフォルトの名無しさん:04/05/01 01:07
try、throw、catchを記述すると例外をthrowしなくても実行速度に禿しく影響しますか?

288 :デフォルトの名無しさん:04/05/01 01:11
>>287
理想としてはほぼ影響ないように実装できるはず、という話になるが、
現状のコンパイラのほとんどにはそこまで期待できないので、
実測しないと答えはわからない。

289 :デフォルトの名無しさん:04/05/01 01:25
>287
禿げしくてのは内容にもよるが、影響はある。
例外処理を行う以上、そのオーバーヘッドは避けられない。


290 :デフォルトの名無しさん:04/05/01 03:04
>>287
むしろ関数の入り口に throw() を書くように徹底すると
速度が上がると思うよ。

291 :デフォルトの名無しさん:04/05/01 03:43
>>290
残念ながらそれも実測するまでわからない。
http://www.gotw.ca/publications/mill22.htm
http://www.boost.org/more/lib_guide.htm#Exception-specification

292 :デフォルトの名無しさん:04/05/01 13:30
>>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();}するのと同じ処理が入るわけで。


294 :デフォルトの名無しさん:04/05/01 13:51
ポカーン

295 :デフォルトの名無しさん:04/05/01 13:55
ポカーン

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
どういう意味があるのか聞いているのですが。

305 :デフォルトの名無しさん:04/05/01 14:32
>>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みたいな関数と同じようにつかえるんですね。
よくわかりました。
ありがとうございました。

309 :デフォルトの名無しさん:04/05/01 14:37
















よし。

310 :デフォルトの名無しさん:04/05/01 14:39
>>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++でやりたいのですが、どのようにすればよいでしょうか

312 :デフォルトの名無しさん:04/05/01 14:57
int count = 0;
while(count < 1) {
 try{
  ・・・ここで入力
  ・・・入力値チェック(エラーなら例外スロー)
 }
 catch (CHogeException e) {
  puts("正しい入力をしてください");
  continue;
 }
 count++;
}


313 :301:04/05/01 15:02
なんか、質問した本人がいない間に、
お礼まで書き込まれて話が完了してる・・・・

>>303
ものすご端的で明快な回答どうもでした。
なるほど、インスタンス無しで使えるのは便利ですね。
やはりシングルトンにアクセスするために使うのがメインになるのかな?

314 :311:04/05/01 15:03
入力値チェックの方法がわかりません。

315 :デフォルトの名無しさん:04/05/01 15:08
>>313
テンプレート関係のコードでは結構使う。
例えば関数テンプレートの部分特殊化の模倣に使える。
ttp://www.tietew.jp/cppll/archive/3819


316 :デフォルトの名無しさん:04/05/01 15:09
>>313
>ものすご端的
日本語は正確に書きなさい。




317 :デフォルトの名無しさん:04/05/01 15:09
>>314
そこまで面倒見切れない。
どういう入力を期待していて、何を入力エラーにするかも書いてないし。

318 :デフォルトの名無しさん:04/05/01 15:18
>317
int型整数を期待してそれ以外と、範囲外をエラーとしたいです。

319 :デフォルトの名無しさん:04/05/01 15:29
>>318
宿題スレへ(・∀・)カエレ!


320 :デフォルトの名無しさん:04/05/01 15:29
今319が良い事を言った


321 :デフォルトの名無しさん:04/05/01 15:42
>>316
うるせーばか!

322 :301:04/05/01 15:45
どうも、勝手に返事をしてくれる方がいるようで。

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

>>316
てへ

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


324 :デフォルトの名無しさん:04/05/01 16:07
空気嫁

      /,.ァ、\
     ( ノo o ) )
      )ヽ ◎/(.  
    (/.(・)(・)\
    (/| x |\)
      ( ヽノ
       ノ >ノ  ヒタヒタ
  三  しU


325 :デフォルトの名無しさん:04/05/01 16:19
空気嫁キタ━━(゚Д゚;)━━( ゚Д)━━(  ゚)━━(   )━━(゚   )━━(Д゚ ;)━━(゚Д゚;)━━!!!


326 :デフォルトの名無しさん:04/05/01 17:54
最近C++も始めたんですけど
C経験者ならiostreamよりstdioで実装した方が有利ですかね
あとstringもほとんど使ってないっす

327 :デフォルトの名無しさん:04/05/01 18:01
>>326
何に対して有利不利なのか文章からは不明だけど、
別の言語だと思った方が最終的には幸せになれると思うけど?


328 :デフォルトの名無しさん:04/05/01 18:03
>>326
C経験者はstdioの方が使いやすいだろうけど、
それじゃいつまでたってもiostream覚えられん罠。
stringは使ったほうがいいと思う。単純ミスのバグ減らせるし

329 :デフォルトの名無しさん:04/05/01 18:07
>>328
stringは、変なこだわりさえ持っていなければ使うだろう。C使いからみたらかなり便利。

330 :デフォルトの名無しさん:04/05/01 18:10
http://jbbs.shitaraba.com/bbs/read.cgi/computer/5651/1048584601/77-

331 :デフォルトの名無しさん:04/05/01 18:29
ま、確かに printf とかの書式付出力は結構便利だと思う。
iostream で使いたければ boost::format 使うよろし。

332 :326:04/05/01 19:05
了解しました

演算子のオーバーロードはなかなか面白いです
実行時のオーバーヘッドとかは気になりますけど

333 :デフォルトの名無しさん:04/05/01 19:20
>>332
そう思うならガシガシ逆汗してオーバーヘッドがどんなもんか確認汁。

最近の人間はそれできない人多いから、Cしかできない爺の活躍する
場になるぞ。


334 :デフォルトの名無しさん:04/05/01 19:21
> 最近の人間はそれできない人
急いで書いたら修飾がかぶった。ソマソ。


335 :デフォルトの名無しさん:04/05/01 19:32
>>333
結論として、Cと比べてルーチン内に
CALL命令が沢山あるということですか

336 :デフォルトの名無しさん:04/05/01 19:37
>>335
一般的な傾向としてはそうだね。ctor, dtor呼びが自動で入るわけだし。

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

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



337 :デフォルトの名無しさん:04/05/01 19:52
>>336
Cしかできない爺もアレですが・・・

C++はかじったばかりですが、もう既に
C++の汎用的すぎるライブラリは、かなり抵抗あります
あのスマートなコーディングは魅力ですが
テキスト丸写しの簡単なテストプログラムでもiostream使うと
実行ファイルのサイズが凄いですね

338 :デフォルトの名無しさん:04/05/01 19:55
iostreamでコードサイズ喰ってるのはやたら高機能なlocale回りとかだった気が。
しかもほとんど使われてないという。

339 :デフォルトの名無しさん:04/05/01 20:02
大抵は、出力はそのまま垂れ流すからなあ。

340 :デフォルトの名無しさん:04/05/01 20:02
>>337
> C++はかじったばかりですが、もう既に
> C++の汎用的すぎるライブラリは、かなり抵抗あります
俺はゲーム関係なんで、C++でスマートに書きつつ速度も稼がないとならんのだけど、
そういう関係じゃないならその抵抗感はひとまず捨ててしまったほうが良いのでは?


341 :デフォルトの名無しさん:04/05/01 21:27
コンストラクタで受け取ったポインタの内容を読み出したり変更したりするクラスを作りたいのですが
可能な場合に極力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ではないですけど。

342 :341:04/05/01 21:30
もしかしてtemplateでptrとコンストラクタの引数をconst char*にするのが正解?

343 :デフォルトの名無しさん:04/05/01 21:31
>>341
現状でもむりやりなconst_castさえしなければ無問題に思うが?


344 :341: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);}
};

つーかどういう文脈でこういうことがしたくなるのかわからんけど。


346 :デフォルトの名無しさん:04/05/01 22:27
イテレータを自作してて、const_iteratorとiteratorを1つで
済まそうとすると、そういう羽目に陥るのではないかと予想。

347 :341:04/05/01 22:30
>>345
参考になります。
実際は最適化されるので微々たるものでしょうけど
readする度に分岐するのが精神衛生上良くないですね。

> つーかどういう文脈でこういうことがしたくなるのかわからんけど。
こういうことをしないとなるとコピーコンストラクタでしょうけれど
リソースも入り得る場合、リソースは普通コピーしませんよね。
一度読んだらshared_ptrかなにかにして使いまわすと思うのですが。

348 :デフォルトの名無しさん:04/05/01 22:39
>>347
なにをしたくてこのクラス書いてるのか教えてよ。


349 :デフォルトの名無しさん:04/05/01 22:54
>>348
ビットマップのクラスです。
通常はクラスがshared_ptrを用いてメモリの生成し、自由に中身を書き換えていくわけですが
リソースにも同じクラスを使いまわそうとしています。
また、方針としてクラスをコピーした場合には
ポインタが同じメモリを指すようにしています(そのためのshared_ptrですが)。

そこでリソースは極力constで扱いたいという考えです。

350 :デフォルトの名無しさん:04/05/01 23:02
>>349
>リソースにも同じクラスを使いまわそうとしています。
これをやめたほうがいいに1000clock



351 :デフォルトの名無しさん:04/05/01 23:34
>>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使用です。


354 :デフォルトの名無しさん:04/05/01 23:55
>>353
VC6では

mov eax, 5
ret 0

になったけど。

355 :デフォルトの名無しさん:04/05/01 23:56
最適化オプションつけてないんじゃないの?

356 :デフォルトの名無しさん:04/05/01 23:57
>>354
うーんそうですか。サンスコ。
コンパイラによらずに5のmovだけにする方法ないですかねえ・・
templateとenumとか?(とするとスレ違いか)


357 :デフォルトの名無しさん:04/05/01 23:58
>>355
-O2です。-O6でも一緒ですね。
ちなみに最適化しないともっと悲惨なコードになるです。


358 :デフォルトの名無しさん:04/05/02 00:00
>>357
-O3にしないとインラインの展開しなかったのでは?

359 :デフォルトの名無しさん:04/05/02 00:05
>>358
いや-O3でもだめです。というか、インライン展開はされてるんですよね
call命令はひとつもないし、結果の5がimmで書かれてるから。消去され
るべき余計なコードまで出力されちゃってるってだけで。

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

boost::mpl方面?を調べるべきでしょうか。

360 :デフォルトの名無しさん:04/05/02 00:05
ところで、
先頭のタブとか、インデントは &nbsp; 4つに置換しないか。

361 :デフォルトの名無しさん:04/05/02 00:07
スマソ

362 :デフォルトの名無しさん:04/05/02 00:21
うちの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を積み込んでるぞ。

363 :デフォルトの名無しさん:04/05/02 00:43
やはりgccの最適化強度はその程度なのかな。

364 :デフォルトの名無しさん:04/05/02 00:46
>>363
VS.NETで試したらインライン展開すらされてないように思うんだけど
なんかコンパイルオプション間違ってるんかな??


365 :デフォルトの名無しさん:04/05/02 01:10
>>364
漏れはアセンブラさっぱし分からんけど
↓みたいになる模様。VS 2003

PUBLIC_main
_TEXTSEGMENT
_mainPROC NEAR
moveax, 5
ret0
_mainENDP
_TEXTENDS
END

366 :365:04/05/02 01:12
スマソ。タブが消えてましたな。

PUBLIC_main
_TEXT   SEGMENT
_main   PROC NEAR
   mov   eax, 5
   ret   0
_main   ENDP
_TEXT   ENDS
END


367 :364:04/05/02 01:21
>>366
ありがとう。やはり漏れの勘違いだったみたい。
ちなみにそういうリストってどうやって出すの?


368 :デフォルトの名無しさん:04/05/02 01:44
>>367
-S付けると出てこない?

369 :デフォルトの名無しさん:04/05/02 01:50
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();
}
 
のようにクラス内でテンプレート引数を使用しないとして
テンプレート的に違う型のポインタにキャストするのって
動作は保証されてますか?

371 :デフォルトの名無しさん:04/05/02 02:04
しかしoperator*の中にcout << "operator * "; と入れてVC7.1の
吐いたコードを見てワロタ。

単に "operator * "を3回出力した後いきなり 5 を出力。コンスト
ラクタもoperator* も思い切り最適化されて影も形もなくなってる。

372 :デフォルトの名無しさん:04/05/02 02:07
>>371
3回出力したなら影も形もあるのでわ?


373 :デフォルトの名無しさん:04/05/02 02:08
>>370
テンプレート関係はtemplate総合スレで聞いたほうが良いと思われ


374 :デフォルトの名無しさん:04/05/02 02:11
>>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)]


375 :デフォルトの名無しさん:04/05/02 02:12
>>372
こんな感じで。クラスをバラバラに分解し、計算できる所は
計算してしまって、残った部分だけインラインで並べている感じ。

376 :デフォルトの名無しさん:04/05/02 02:13
VSの最適化ってすごいね

377 :デフォルトの名無しさん:04/05/02 02:14
>>375
ほんとだ。
すごいな。g++にゃこれは無理だ。



378 :370:04/05/02 02:14
template総合スレで聞いてみることにします

379 :デフォルトの名無しさん:04/05/02 02:15
>>376
恐れおののいた。ICCだともっと凄いのかな。
gccでは何とかインライン化するものの、どうしても内部の
計算はそのまま残っていた。

380 :デフォルトの名無しさん:04/05/02 02:17
どうでもいいが>>337にも参考になりそうな展開だな・・・
人生の。



381 :デフォルトの名無しさん:04/05/02 02:21
>>380
うん。C++のライブラリはできるだけダイナミックリンクにした
方が良さそうだ。
そうなると地鎮祭の「STLを使うと実行ファイルのサイズが
一気に10倍に!?」という言葉もまともに思えてくる。

382 :デフォルトの名無しさん:04/05/02 02:28
>>379
icc for Linux ダウソしてみるわ…


383 :デフォルトの名無しさん:04/05/02 03:16
>FixedPoint h = f*f*f*f;
この書き方ならスタックに順番につむだろ。
& operator *=
を定義して、
h=f;
h *=f;
以下必要分だけ繰りかえしちゃどうよ?

384 :デフォルトの名無しさん:04/05/02 04:26
ヲイヲイ固定小数点程度の計算するのに乗算を再帰的に定義して、
オプティマイザの効率がどうこう言ってんじゃねぇよ。再帰的に
定義してるからスタックに積むんじゃねぇか。お前のおつむは機械以下か?アフォが。


385 :デフォルトの名無しさん:04/05/02 04:28
gcc 3.3.X のコードはVC7.1より良質というのが世間の相場だろ?

386 :デフォルトの名無しさん:04/05/02 04:29
>>384
どこが再帰的なんだ?w

387 :デフォルトの名無しさん:04/05/02 04:33
プw

388 :デフォルトの名無しさん:04/05/02 04:36
>>385
ウスターじゃないソースは?


389 :デフォルトの名無しさん:04/05/02 05:19
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

390 :デフォルトの名無しさん:04/05/02 06:15
nanananana hey yeah yeah hey
nanananana ya know a stuck on you !

391 :デフォルトの名無しさん:04/05/02 06:54
>>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するとどうなる?


394 :デフォルトの名無しさん:04/05/02 09:25
>>389>>392
わろた

395 :デフォルトの名無しさん:04/05/02 09:42
>>393
g++(MinGW3.3.3)の出力。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1083458467
インライン展開はされているものの、メンバ関数の内容は最適化されて
いない。もっともこのプログラムではVC7.1もあまり最適化は効かなかった。

396 :デフォルトの名無しさん:04/05/02 10:04
>>391
変なプログラムだなあ。

397 :デフォルトの名無しさん:04/05/02 11:30
>>395
了解。最適化効いてない(コンパイル時計算になってない)わね。



398 :デフォルトの名無しさん:04/05/02 11:59
>>395
g++ -S -fverbose-asm hoge.cpp したあと c++filt < hoge.s > hoge_.s で整形したほうが
ベターと思われ。あとこれ最適化何?-O2?


399 :デフォルトの名無しさん:04/05/02 16:25
>>398
-O3。gccはだいたいこんなもんだよ。

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

あとスピンコントロールの使い方も


401 :デフォルトの名無しさん:04/05/02 17:06
>>400
何様?氏んだら?

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

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

403 :デフォルトの名無しさん:04/05/02 17:10
皆さ〜ん。
>>400>>>402は偉く居丈高なので、答える必要はありませんよ〜。
質問の仕方という基本的な事を思い知らせてやりましょう。

404 :デフォルトの名無しさん:04/05/02 17:23
>>403
お前みたいなのが邪魔。
>>400
ヘルプに書いてある。

405 :デフォルトの名無しさん:04/05/02 17:24
402さんは丸出しですから
隠す必要無いですもんね。

406 :デフォルトの名無しさん:04/05/02 17:43
メンバ変数をconst指定する意味は何?

407 :デフォルトの名無しさん:04/05/02 17:49
質問の仕方以前にスレ違いだ馬鹿野郎

408 :デフォルトの名無しさん:04/05/02 17:49
>>401-403

409 :デフォルトの名無しさん:04/05/02 17:51
どういう意味があるのか聞いているのですが。

410 :デフォルトの名無しさん:04/05/02 17:52
このスレは猿並の頭の持ち主しかいないから
誰も答えられないんだよ

411 :デフォルトの名無しさん:04/05/02 18:02
オマエガナー

412 :デフォルトの名無しさん:04/05/02 18:05
406=409で407=408だろ。
よって409の勘違い。

constにするのはメンバだろうが普通の変数だろうが同じでは?
間違えて書き換えたくない場合や変更してはいけないことを他人に明示したい場合じゃないの?

413 :デフォルトの名無しさん:04/05/02 18:09
>412
×他人に
○コンパイラに


414 :デフォルトの名無しさん:04/05/02 18:49
>>400ですが・・・確かに高圧的に読めますね
荒らしてしまって申し訳ありませんでした

>>404
ありがとうございます
もうちょい調べてみます

415 :406:04/05/02 19:17
>>412 407は別人だよ。

なるほど、コンストラクタでの初期化だけは許可されのね。
でもgccではこのconst指定をはずすとまともなコードはきますよ。

416 :デフォルトの名無しさん:04/05/02 19:20
そんなにgccをようごしなくても

417 :デフォルトの名無しさん:04/05/02 19:28
>>414
というか、そもそもスレ違いなので、APIスレで聞いたら?

418 :デフォルトの名無しさん:04/05/02 21:26
>>4007>>402

なんだこのやろう!!!!!!!

419 :デフォルトの名無しさん:04/05/02 21:27
>>400>>402
死ねば?

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

あとスピンコントロールの使い方も


421 :デフォルトの名無しさん:04/05/02 21:28
蒸し返すなよ…

422 :デフォルトの名無しさん:04/05/02 21:28
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


423 :デフォルトの名無しさん:04/05/02 21:30
初心者を餌食にするのって傍から見ててもムカつくんだよね

424 :デフォルトの名無しさん:04/05/02 21:47
突然ですが。
いま「プログラミング言語C++第3版」読んでるんですけど、
§13.2(pp. 386)に書いてある
"文字列の定義は、文字をコピーをできるといったごくわずかの内容から構成されている"
ってどういう意味なんでしょう。

425 :デフォルトの名無しさん:04/05/02 21:59
>>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指定をはずすとまともなコードはきますよ。
だから、 誤解だって。


427 :デフォルトの名無しさん:04/05/02 22:30
>>426
だから誤解じゃないよ。-Sつけて確認してみろ。

428 :デフォルトの名無しさん:04/05/02 22:35
>>427
> だから誤解じゃないよ。-Sつけて確認してみろ。
>>395見ろ低能。


429 :デフォルトの名無しさん:04/05/02 22:39
>>427
389は嘘だよ?


430 :デフォルトの名無しさん:04/05/02 22:47
>>428
糞かお前は。メンバ変数のconst削除した場合。
FixedPoint h = f*f*f*f;
がどう展開されるかは、とっくに>>389に示されてるんだよ。
>>353の何回もpush繰り返すコードとは明らかに違うだろうが。
アセンブラも読めない知障は死ねよ。

431 :428:04/05/02 22:58
>>430
ったく・・・・・・。
mainにreturn文がないから0を返却してる。
最適化でfとhは綺麗さっぱり消えている。
だからなにもしてないように見えるだけ。

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



432 :デフォルトの名無しさん:04/05/02 23:00
>>430
ワロタ

433 :デフォルトの名無しさん:04/05/02 23:01
242 名前:名無しさん@恐縮です :04/05/02 22:55 ID:7ffryccT
ここまでのネタ職人の仕事ぶりのまとめ

http://cgi28.plala.or.jp/ll/lll/img20040502212012.jpg#pc5.2ch.net(元画像)
http://ahiru.zive.net/joyful/img/1095.mpg#pc5.2ch.net(元動画)

http://fetish-onsen.com/cgi/upload/source3/No_2179.jpg#pc5.2ch.net(一塁が観客席側に移動)
http://up.nm78.com/data/up004929.jpg#pc5.2ch.net(一塁が本塁側に・・・)
http://fetish-onsen.com/cgi/upload/source3/No_2181.jpg#pc5.2ch.net(一塁手が観客席側に・・・)
http://up.nm78.com/data/up004948.jpg#pc5.2ch.net(神隠し・・・)
http://sumire.sakura.ne.jp/~hatomune/cgi-bin/imgboard/img-box/img20040502214930.jpg#pc5.2ch.net(一塁が分裂して・・・)
http://a.jmpd.com/upload/show_img.php?pid=946-A&db=hige1128&type=2(飛脚・・・)
http://fetish-onsen.com/cgi/upload/source3/No_2183.jpg#pc5.2ch.net(一塁がジャンパイアの手元・・・)
http://sumire.sakura.ne.jp/~hatomune/cgi-bin/imgboard/img-box/img20040502224028.jpg#pc5.2ch.net(ファミコンで再現・・・)

http://www.chugoku-np.co.jp/Carp/2003/Cs03060501.html(関連ニュース)

434 :デフォルトの名無しさん:04/05/02 23:03
まさしく

「環境によるだろ」

みたいなw

435 :デフォルトの名無しさん:04/05/02 23:04
まぁg++3を仮定しての話ってことで。
VC++は最強すぎるし。


436 :デフォルトの名無しさん:04/05/02 23:16
それを認められない人がいるわけで

437 :デフォルトの名無しさん:04/05/02 23:18
430は引き篭もったのか?


438 :デフォルトの名無しさん:04/05/02 23:37
春だねえ…

439 :424:04/05/02 23:50
>>425
サンクスです。
よく分かりました。

私が読んでるのは訳書なんです。
日本語がひどいです。
誤)2つの補い合う16ビット整数でintを表現するマシンでは
正)16ビットの2の補数でintを表現するマシンでは
とか...

440 :デフォルトの名無しさん:04/05/02 23:52
http://www.nminoru.jp/~nminoru/programming/x86-cc.html#benchmark
icc が最強 > gcc3 >= MVC
ってところだな。

441 :デフォルトの名無しさん:04/05/02 23:57
>>439
何頁?

442 :デフォルトの名無しさん:04/05/03 00:05
>The definition of a string relies on the fact that acharacter can be copied, and littele else.

string の定義はコピーできるってこととほんのわずかのほかのことに依存している。

443 :デフォルトの名無しさん:04/05/03 00:10
little はもうちょっと否定的につかった方がいいかな?
意味はコピーできることが一番大事で、それ以外のことはささいなこと
っていうことじゃないの?

444 :デフォルトの名無しさん:04/05/03 00:40
>>443
> little はもうちょっと否定的につかった方がいいかな?
もっと否定的で「ほとんど〜ない」っつーぐらいに訳すのが一般的。

 string の定義は、ほぼ (sting を構成する要素である) 文字が複製可能であるという
 事実のみに依存している。

445 :439:04/05/03 00:47
>>441
108ページです。

↓は正誤表のURL(訳者のWebページ)です。
ttp://www.longtail.co.jp/errata/

446 :デフォルトの名無しさん:04/05/03 00:52
>事実のみに依存している。
こういう訳語に相当するのはonlyだよ。and little else を無視してるな。

447 :デフォルトの名無しさん:04/05/03 00:53
「ほぼ」って書いてる

448 :デフォルトの名無しさん:04/05/03 00:55
「ぼぼ」に見えた。

449 :デフォルトの名無しさん:04/05/03 00:58
まんこ。

450 :デフォルトの名無しさん:04/05/03 00:59
英語以前に
ほぼ文字
こういう形容の仕方より
ほぼ依存している
とするのがbetterだろ?

451 :デフォルトの名無しさん:04/05/03 00:59
べっちょ


452 :デフォルトの名無しさん:04/05/03 01:05
>>445
昔そこをみたとき掲示板に痛い書き込みがあったなーと思いながら
いってみたらまだあった

453 :デフォルトの名無しさん:04/05/03 01:07
>>452
どれさ


454 :デフォルトの名無しさん:04/05/03 01:17
>>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は綺麗さっぱり消えている。
> だからなにもしてないように見えるだけ。
> アセンブラ読めないのは お・ま・え☆
> ったく糞が。


456 :デフォルトの名無しさん:04/05/03 07:26
gcc厨が暴れているスレはここですか?

457 :山本五十六:04/05/03 10:22
いい加減目を覚ませ…
C++は時代遅れなんだ、と

458 :デフォルトの名無しさん:04/05/03 11:11
>>457
では逆に聞くが、時代に沿った言語とは?
まさかC#なんて言うなよ。

459 :デフォルトの名無しさん:04/05/03 11:11
>>457
それからD言語というのも無しだ。

460 :デフォルトの名無しさん:04/05/03 11:12
マジレス(・∀・)カコイイ

461 :デフォルトの名無しさん:04/05/03 11:26
>>458
C#は時代に沿ってないの?
つまり、Windowsがなくなると思ってるってことになるけど
君は本気でそう思っているわけ?

462 :デフォルトの名無しさん:04/05/03 11:31
>>461
そうは言ってない。WinFX APIを備えたLongHornが主流になれば
最先端だと言えるかもしれないが、今の段階では糞重たくてC++
より遅くて効率が悪い言語としか言えない。

そういう俺も仕事で無理矢理C#をちまちま触っているが、まだ
まだだねえ。この言語。次のバージョンに期待しよう。

463 :デフォルトの名無しさん:04/05/03 11:40
双方うざい
〓〓〓〓〓〓〓〓〓〓 終了 〓〓〓〓〓〓〓〓〓〓 

464 :デフォルトの名無しさん:04/05/03 15:19
チッ!Winのプログラマやってる能無しかい?

465 :デフォルトの名無しさん:04/05/03 15:28
↑チッ!Winのプログラマもできない能無しかい?

466 :デフォルトの名無しさん:04/05/03 16:13
Winのプログラマのほうが勝ち組。だってWinだから。

467 :デフォルトの名無しさん:04/05/03 16:41
PCFX最強

468 :デフォルトの名無しさん:04/05/03 16:57
>>465
プログラマやってること自体恥じろ!タクシー運転手と同じ人生の掃溜め職業ってことを自覚しろ!

469 :デフォルトの名無しさん:04/05/03 17:12
>>379
> >>376
> 恐れおののいた。ICCだともっと凄いのかな。
iccでやってみたけど、VC++と同様の結果だった。まぁさすがという漢字かな。


470 :デフォルトの名無しさん:04/05/03 17:28
>>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でつ。


473 :デフォルトの名無しさん:04/05/03 17:46
>>471
ABCに共通のスーパークラスを作って、そのクラスでvectorに放り込んでおくとかは?
初期化はループの中で順次にやる。

474 :473:04/05/03 17:51
勘違いしたかも。

引数をフラグにして、どのメンバを初期化するか選択するということ?
もしそうなら、テーブルかな・・・。

475 :デフォルトの名無しさん:04/05/03 17:56
どういうことがしたいんだかわからん

476 :デフォルトの名無しさん:04/05/03 17:56
A, B, Cそれぞれにinit()を持たせる。

477 :473:04/05/03 17:59
情報が足りないね。
どういう風に書いたら、冗長になるのか提示してみそ。

478 :471: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 の部分が指定した値で初期化されるという
感じです。


479 :デフォルトの名無しさん:04/05/03 18:02
>>478
残りのフィールドは大量にメンバとしてあるけど初期化しないわけ?

480 :デフォルトの名無しさん:04/05/03 18:04
>>478
memset萎えー


481 :デフォルトの名無しさん:04/05/03 18:04
オーバーロードしかない

482 :471:04/05/03 18:06
>>479
別途コンストラクタで全体の初期化はしますが、databaseの更新途中で、
特定のメンバーだけデフォルト値に戻したいんですが。

>>476
むむ、なるほろ

>>480
memsetじゃ駄目なんでしょうか?

483 :デフォルトの名無しさん:04/05/03 18:06
ABCとも、ぜんぶそれぞれのコンストラクタで0クリアしておいて、
All::init()で特定のメンバにデータをセットする、っていう仕様じゃだめなのか?

484 :デフォルトの名無しさん:04/05/03 18:08
>>482
それなら、ABCそれぞれにデフォルト値を別途持たせておいて、
A::setDefault() で、デフォルト値に戻すとかは?

485 :デフォルトの名無しさん:04/05/03 18:08
typelistを使ったtupleで

486 :471:04/05/03 18:10
>>476
>>484
そうですね、これが一番いいかも。


487 :デフォルトの名無しさん:04/05/03 20:02
>>468
誰もが知ってる電気メーカに勤めてるが、確かにそれ言えてるな。ソフト担当させるのは電気系以外の専攻者か
電気系なら学卒者、ただ、後者の場合は将来のソフト部門の責任者として育成するけど。それ以外はキーマンとして
は期待できないから兵隊としてソフト担当にアサインする。

488 :デフォルトの名無しさん:04/05/03 20:06
487の要約
> 誰もが知ってる電気メーカに勤めてる


489 :デフォルトの名無しさん:04/05/03 21:11
作ったのを実行しようとしても、.exeファイルが見つかんないとか言われて
出来ないんですけど、どうしたれいいんですか?

490 :デフォルトの名無しさん:04/05/03 21:13
なんだ、>>487もプログラマか。( ´,_ゝ`)プッ

491 :デフォルトの名無しさん:04/05/03 21:15
それと、あんたの言うキーマンって何?ピーマンの変種か?

492 :デフォルトの名無しさん:04/05/03 21:16
>>489
> 出来ないんですけど、どうしたれいいんですか?
タレ(・∀ (ry



493 :デフォルトの名無しさん:04/05/03 21:17
プログラマ:奴隷
管理職:奴隷の雑用係

技術者なんてそんなもん

494 :デフォルトの名無しさん:04/05/03 21:20
489に誰か答えてください


495 :デフォルトの名無しさん:04/05/03 21:21
こうしたれ

496 :デフォルトの名無しさん:04/05/03 21:23
>>494
自分が何をしたかスクリーンショットを交えてどこかにウプしろ。
それから、ソープに逝って女を2-3人抱いて来い。
話はそれからだ。


497 :デフォルトの名無しさん:04/05/03 21:25
まぁプルグルマが自身を奴隷だと認識していない職場も結構あるけどな。いい給料もらってたりもする。
そういうのはプロセスが存在しない職場ともいう。

どちらが幸せかは謎。そういう職場は往々にしてデスマ(ry


498 :489:04/05/03 21:26
誰か教えて

499 :デフォルトの名無しさん:04/05/03 21:27
>>498
氏ね


500 :デフォルトの名無しさん:04/05/03 21:28
500

501 :デフォルトの名無しさん:04/05/03 22:05
>>498
多分ネタだと思うが、一応マジレスすると、スレ違い。


502 :デフォルトの名無しさん:04/05/03 22:05
>>491 わからなけりゃプログラマやるのががちょうどいい。早くから将来が見えちゃやる気もなくすだろうしな。

503 :デフォルトの名無しさん:04/05/03 22:10
で、お前の年収は?

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




504 :デフォルトの名無しさん:04/05/03 22:32
マ板でやれ

505 :デフォルトの名無しさん:04/05/03 22:33
いま504が良い事を言った


506 :デフォルトの名無しさん:04/05/03 22:37
別々のクラスをvectorに格納したいのですが、どういうふうにしたらいいのでしょうか?
同じ基底クラスを継承して、基底クラスへのポインタをvectorに格納するというの
ぐらいしか思いつかないのですが。
例外安全の関係でメモリの管理が大変になりますし、継承階層が
一つ増えてしまいます。

507 :デフォルトの名無しさん:04/05/03 22:43
>>506
http://www.kmonos.net/alang/boost/classes/any.html 使ったら?

> 例外安全の関係でメモリの管理が大変に
ここもちっと詳しく教えて。


508 :デフォルトの名無しさん:04/05/03 22:48
>>506
> 例外安全の関係でメモリの管理が大変になりますし、
ふつー boost::shared_ptr とか使う。


509 :デフォルトの名無しさん:04/05/03 22:49
便利な言葉ですね>ふつー

510 :デフォルトの名無しさん:04/05/03 23:14
>>503 トータルで10M 円弱。

511 :デフォルトの名無しさん:04/05/03 23:21
( ´,_ゝ`)プッ

512 :デフォルトの名無しさん:04/05/03 23:21
M=MAN=万か。

513 :デフォルトの名無しさん:04/05/03 23:22
>>510
マジレスするとただのリーマン風情はム板に逝ってくれ。
迷惑。


514 :デフォルトの名無しさん:04/05/03 23:22
>>513
typo。
マ板な。


515 :デフォルトの名無しさん:04/05/03 23:31
この板は只今より、研究者用の板になりました。

516 :デフォルトの名無しさん:04/05/03 23:32
ム板はここだが…

517 :デフォルトの名無しさん:04/05/03 23:38
頭の中でこんがらがっていたのはタイプミスとは言わないな。

518 :ただのリーマン風情:04/05/03 23:39
呼ばれて来ました。

519 :デフォルトの名無しさん:04/05/03 23:42
>>506が本題に戻します


520 :デフォルトの名無しさん:04/05/03 23:43
>>518
シッ!シッ!

521 :デフォルトの名無しさん:04/05/03 23:43
配列を参照渡しできたら便利だと思うのですが。
みなさんはどう思いますか?

522 :デフォルトの名無しさん:04/05/03 23:44
>>521
できるけど?


523 :デフォルトの名無しさん:04/05/03 23:47
>>522
//もしかしてやり方間違えてますか?
//↓みたいなの
func01(int&a[]){
}
main(){
int a[100];
func01(a);
}


524 :522: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);
}

このどっちかでどーぞ。


525 :デフォルトの名無しさん:04/05/03 23:52
>>523
配列を参照渡しすると、template引数に配列のサイズを受け取る
事が出来て、便利な事がある。普通のポインタ渡しだと配列の
大きさに関する情報が変換時に失われてしまう。

526 :524:04/05/03 23:54
まぁstd::vector<>でも使っときなさいという気もするが。


527 :デフォルトの名無しさん:04/05/03 23:58
>>524
おぉそんな方法があるんですね。
templateはまだ勉強してないんで分かりませんでした。
thxでした。ノシ

528 :デフォルトの名無しさん:04/05/04 00:00
>>527
& と [] では []のほうが結合優先だから括弧で & を先に結合させる

529 :デフォルトの名無しさん:04/05/04 00:24
class D : B {};
って書いたときって、
class D : private B {};
と等価でしたっけ?
おしえてください。


530 :デフォルトの名無しさん:04/05/04 00:45
>>525 ハァ?配列へのポインタを知らんのか?

531 :デフォルトの名無しさん:04/05/04 00:50
>>530
あんたの方が、はぁ?じゃないか。
固定長配列へのポインタなら呼び出される側が配列のサイズを知ってる事になるし、
そうでないのなら配列のサイズを渡す手段はないぞ。

532 :デフォルトの名無しさん:04/05/04 00:50
微妙に話題がループしてるな・・・
あ、こないだはtemplateスレか。
どちらにしろウザ。


533 :デフォルトの名無しさん:04/05/04 00:51
>>529
同じ。

534 :デフォルトの名無しさん:04/05/04 01:06
>>533
サンポスペ


535 :デフォルトの名無しさん:04/05/04 01:07
>>531
>>524にあげられてるテンプレート引数使えば配列へのポインタ使っても同じだろ?
というか(*a)[N}の意味知ってるよね?

536 :デフォルトの名無しさん:04/05/04 01:13
>>535
憶測でものを言うな!
やってみてから書いたらどうなんだ。


537 :デフォルトの名無しさん:04/05/04 01:16
>同じだろ?

この辺りから自信のなさが感じられる。

538 :デフォルトの名無しさん:04/05/04 01:18
>>537
> >同じだろ?
>
> この辺りから自信のなさが感じられる。
昔のOOスレのジョソを思い出した。
お前らスライムか?の。


539 :デフォルトの名無しさん:04/05/04 01:24
ホレ。わざわざ書かすな!
int func01(int(*a)[100]){}
template<unsigned N>
int func02(int(*a)[N]){}
main(){
int a[3][100];
func01(a);
func02(a);
}


540 :デフォルトの名無しさん:04/05/04 01:26
>>539
> ホレ。わざわざ書かすな!
スゲーワラタ。[3]ってなんだよ[3]ってw


541 :デフォルトの名無しさん:04/05/04 01:30
ていうかね。テンプレート引数使うならわざわざ参照つかわなくても
いいんだが。
int func01(int a[100]){}
template<unsigned N>
int func02(int a[N]){}
main(){
int a[100];
func01(a);
func02<100>(a);
}

542 :デフォルトの名無しさん:04/05/04 01:32
>>541
わざわざ<100>って書きたい香具師は少ないと思うが…


543 :デフォルトの名無しさん:04/05/04 01:49
>>540 [3] が嫌なら
int (*pa)[100]=(int(*)[100])a;
func01(pa);
func02{pa);
でもいいぞ。

544 :デフォルトの名無しさん:04/05/04 01:50
>>543
荒らしは他所でやってよ。


545 :デフォルトの名無しさん:04/05/04 02:30
このスレにはtemplate初心者が大勢いるのはよく分かった。

546 :デフォルトの名無しさん:04/05/04 02:35
言いたいことはそれだけか?

547 :デフォルトの名無しさん:04/05/04 02:39
本当はそれすら言いたくなかったのでは?
そもそも初心者が勘違いしたレス書くの自体迷惑なんだし。

548 :デフォルトの名無しさん:04/05/04 02:42
だから関係ない話は他所でやれって。

549 :デフォルトの名無しさん:04/05/04 02:42
お願いですからtemplate初心者厨はこの勢いで
templateスレまで荒らさないで下さい。

550 :デフォルトの名無しさん:04/05/04 03:32
>>542
大抵の場合、配列サイズ >= 処理サイズであればいいだろ。むしろ関数側で勝手に処理サイズを
決められてしまうことの方が迷惑なことの方が多いだろ?この場合は

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

一番シンプルでいいやろ?男は黙ってポインタ使え。処理サイズは自分で責任を持て!

551 :デフォルトの名無しさん:04/05/04 03:37
ところでさっきから無意味に中括弧を混ぜてるのって同一人物?

552 :デフォルトの名無しさん:04/05/04 03:40
int func01(vector<int>& v){}
main(){
vector v(100);
func01(v);
}

俺はこれが一番シンプルで安全だと信じて疑わないから、
>>521以降の、テクニックを駆使したいろんな渡し方は
覚えようとも思わん。

553 :デフォルトの名無しさん:04/05/04 03:41
上のをこぴぺしたんれすが・・

554 :デフォルトの名無しさん:04/05/04 03:42
どうでもいいけど
さっきから提示されてるソースコンパイルすると
エラー発生しまくりなんだよなぁ。
漏れのVCが可笑しいのか。

555 :デフォルトの名無しさん:04/05/04 03:43
ふーん。じゃそれで、リングバッファ作ってくれよ

556 :デフォルトの名無しさん:04/05/04 03:44
無意味な中括弧ってなに?

557 :デフォルトの名無しさん:04/05/04 03:45
>>550
> 一番シンプルでいいやろ?男は黙ってポインタ使え。処理サイズは自分で責任を持て!
ならC++使うなよw
一生C爺やってろ




558 :デフォルトの名無しさん:04/05/04 03:51
>>557
お前はCスレから出てくるなw

559 :デフォルトの名無しさん:04/05/04 03:52
>>558
ポカーン


560 :デフォルトの名無しさん:04/05/04 03:53
んなこたぁない。C++はCも包含したマルチパラダイム言語だ。
言ってるだろ。リングバッファこさえてみろって。
逆にハードウェアに密着したことをする必要がなけりゃJavaなりC#なり使え。


561 :デフォルトの名無しさん:04/05/04 03:56
一応C++スレなんだからC++をメインにした流れにしようyp

562 :デフォルトの名無しさん:04/05/04 04:00
でもlistやbitsetはうれしいが、教科書通りにvector使う椰子いたんだ。
一体なにがうれしくてvectorなんか使うの?

563 :デフォルトの名無しさん:04/05/04 04:01
>>562
> でもlistやbitsetはうれしいが、教科書通りにvector使う椰子いたんだ。
> 一体なにがうれしくてvectorなんか使うの?
煽りにマジレスするけど、
そういうときはまず、自分が何がうれしくなくてvector使わないのか書かないと。


564 :デフォルトの名無しさん:04/05/04 04:04
>>563
ハァ!!!!????

565 :デフォルトの名無しさん:04/05/04 04:07
これが火病ってやつか・・


566 :デフォルトの名無しさん:04/05/04 04:08
>>557
エンディアンをアプリベースで自動判定したいんですがどうやったら委員ですか?

567 :デフォルトの名無しさん:04/05/04 04:34
int n = 1;
char* pn=&n;
if (1==*pn){ /*リトル*/}
else{/*ビッグ*/}

568 :デフォルトの名無しさん:04/05/04 04:37
ポインタを使わずお願いします。

569 :デフォルトの名無しさん:04/05/04 04:40
>>568
なんで?

570 :352: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
こういう種類のコードは初めて書いたんでアホな事沢山やってるかも。



571 :デフォルトの名無しさん:04/05/04 04:46
char* pn=&n; はふつー error か warning にならない?
char *pn = (char *)&n;

572 :デフォルトの名無しさん:04/05/04 04:50
>>568
typedef union {
int i;
char c[4];
} U;
U u;
u.i=1;
if(u.c[0]==1) {
//リトル
} else {
//ビッグ
}

573 :デフォルトの名無しさん:04/05/04 04:52
>>572
激しくワラタ

574 :デフォルトの名無しさん:04/05/04 04:52
>>569
> なんで?
http://www.radiumsoftware.com/0304.html#030408
とか。


575 :デフォルトの名無しさん:04/05/04 04:57
charならOKのはずだが。
駄目ならmemcpy等は書けない。

576 :デフォルトの名無しさん:04/05/04 05:00
>駄目ならmemcpy等は書けない。
等は、Cネイティブで書けない

577 :デフォルトの名無しさん:04/05/04 05:10
>>570
あれあれ?信号処理の世界では、普通2の補数FixedPointっていうのは
絶対値として1以下を主に扱って、
16bitの場合なら
0x7fff = 1-ε
0x0000 = 0
0x8000 = -1
と対応させることなんだけどね。で、大きさが1を越える部分に
3〜8bit程度をextend bitとして持たせるのが一般的。
±5VのA/Dを±1Vに規格化して扱うといえばイメージしてもらえるかな?

578 :570:04/05/04 05:19
>>577
> あれあれ?信号処理の世界では、普通2の補数FixedPointっていうのは
あースミマセン、FixedPointって語はあまり考えずに使ってしまいました。
http://lists.boost.org/MailArchives/boost/msg34685.php あたりを見たの
だったかな。間違ってそうですねw

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





579 :デフォルトの名無しさん:04/05/04 05:22
それと例えば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の仕様を確認することを勧めるな。

580 :デフォルトの名無しさん:04/05/04 05:26
>自作のクラスが抱えてる整数に四則演算してどこまで最適化かかるか
>見たかっただけ、ということでご勘弁を(苦笑
あ、そういうこと?了解。実際に仕事とか学生実験でもいきなりDSPで書くより
C/C++でシミュレートしてからというのが普通のアプローチで、それをしようと
してたのかな?と思ったもので・・

581 :デフォルトの名無しさん:04/05/04 05:30
>>572でFA?


582 :デフォルトの名無しさん:04/05/04 05:38
実際は[4]いらないけど。

583 :デフォルトの名無しさん:04/05/04 05:43
>>574のリンク先
> 同一のメモリ領域に対して2種類の型でアクセスすることを禁じているようだ。

それでは共用体が存在し得なくなるが。

584 :デフォルトの名無しさん:04/05/04 07:01
未定義でしょ。禁じているならエラーになる筈。
問題の性質上、厳密に 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つのオブジェクトは、
互換性をもつタイプの資格があるか無条件のバージョンで行う。
そうでない場合は、未定義である。

585 :デフォルトの名無しさん:04/05/04 09:12
>>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メンバー変数が無い)ので、
コメントの部分みたいに宣言をせずにクラスを使いたいのですが、
できるならやり方を教えてください。

587 :デフォルトの名無しさん:04/05/04 09:32
>>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) );}
};



588 :デフォルトの名無しさん:04/05/04 09:34
>>586
メンバにアクセスする必要がないものをクラスのメンバに入れるなよ。
名前空間にでも入れとけ。

589 :デフォルトの名無しさん:04/05/04 09:39
>>587
ありがとうございます。できました。

staticを使うということは、クラスを宣言しないで使うやり方は
普通は余りやらないのでしょうか。
また、こういう関数をまとめるだけの時は別のものを使うのでしょうか。

590 :デフォルトの名無しさん:04/05/04 09:41
>>588
Add()の事でしょうか。詳しくお願いします。

591 :デフォルトの名無しさん:04/05/04 09:42
>>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) );}
}


592 :586:04/05/04 09:51
>>591
ありがとうございます。思ったようにできました。

後、Addをprivateみたいにしたいのですがどうすればできますか。

593 :586:04/05/04 09:54
すいません途中でした。
>>588の文章と関連があると思うのですが。
普通に記述するとエラーになってしまいます。

594 :デフォルトの名無しさん:04/05/04 09:55
>>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) );}
}


595 :デフォルトの名無しさん:04/05/04 09:55
[main.cpp]

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

とすればよろし。

596 :デフォルトの名無しさん:04/05/04 09:57
俺はねるぽなのであとはガンガレ


597 :588:04/05/04 10:06
>>594-595
関数をプロトタイプ宣言をしていないと
使うとエラーになるみたいな感じの意味ですか?

598 :588:04/05/04 10:07
>>596
ありがとうございました。おやすみなさい。

599 :デフォルトの名無しさん:04/05/04 10:17
なんじゃあこりゃあ?C++のスレなのにCの流儀を強引に押し通そう
としたり、クラスの意味も分からない香具師が出没してる・・・・・
GWもあと2日だぜ。せいぜい暴れてくれ。

600 :デフォルトの名無しさん:04/05/04 12:25
【初心者歓迎】C/C++室 Ver.6【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1082182233/

こういうスレもあるので、こっちの方が回答を得られやすいかもね。

601 :デフォルトの名無しさん:04/05/04 14:24
ぬるぽ


602 :デフォルトの名無しさん:04/05/04 14:24
ガッ

603 :デフォルトの名無しさん:04/05/04 14:44
>>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 です。


605 :デフォルトの名無しさん:04/05/04 16:19
>>604
#pragma pack(1)


606 :デフォルトの名無しさん:04/05/04 16:42
>>604
int じゃなくて short にする

607 :デフォルトの名無しさん:04/05/04 16:50
>>606
shortにしてもだめだろ。
その前に仕様的にはintにしとかないと未定義。

608 :デフォルトの名無しさん:04/05/04 17:14
>>603
いいから藻前はCスレに(・∀・)カエレ!!

609 :デフォルトの名無しさん:04/05/04 17:32
>>608
Cのコードし掛けないお前にC++を語る資格なし。

610 :デフォルトの名無しさん:04/05/04 17:35
>>609
そんなDQN、いくらでもいそうだが。

611 :デフォルトの名無しさん:04/05/04 18:21
>>609
>Cのコードし掛けないお前に
頭大丈夫か?それとも日本語が不自由な知障か。( ´,_ゝ`)プッ

612 :デフォルトの名無しさん:04/05/04 18:23
Cのコードも書けないお前にC++を語る資格なし。ポインタのキャストぐらい覚えとこうな。

613 :デフォルトの名無しさん:04/05/04 18:27
>>612
CのキャストなんかC++のキャスト覚えたら危なくて使って
られねーよ。あっそうか、君はC++については全くの素人
だったね。これは失礼。

614 :デフォルトの名無しさん:04/05/04 18:38
( ´,_ゝ`)プッ!出来るようになってから言え。逆にポインタを用意してる限り、
型に依存せずにアドレス指定できることは当然だしC++もwarningは出すが禁止してない。
ポインタいじることにびびってるやつはC#がお似合い。
ごめん、触ろうとする前にその知識もなかったんだね。

615 :デフォルトの名無しさん:04/05/04 18:42
はいそこの電波飛ばしまくってる二人。(?)
他行ってやりなさい。

616 :デフォルトの名無しさん:04/05/04 18:47
>>614
>C++もwarningは出すが禁止してない。
まさに君のような馬鹿のためにこのような措置が取られているのを
知らないのかい?
迷惑だから早く氏んで下さい。

617 :604:04/05/04 18:52
pragma pack(1)でも4バイトのままだし、
試しに1ビットのメンバしかない構造体を作っても4バイト。
困った。。。

618 :デフォルトの名無しさん:04/05/04 18:57
馬鹿はハードウェアをまったく知らないお前。
逆にこの機能がなくなればハードウェア開発に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)

620 :デフォルトの名無しさん:04/05/04 19:14
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 ) { ... }
};
とか。

621 :デフォルトの名無しさん:04/05/04 19:16
> floatからintとか、longからcharにキャストしたら・・・
> const_cast、static_castを使おう

const_cast?

622 :デフォルトの名無しさん:04/05/04 19:20
intが2byteの環境でがんばる

623 :デフォルトの名無しさん:04/05/04 19:28
>>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);

625 :デフォルトの名無しさん:04/05/04 19:32
>>624
いや、1行目と関係ないじゃないかって思って。

626 :デフォルトの名無しさん:04/05/04 19:35
>>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とか使えたんだっけ?

630 :デフォルトの名無しさん:04/05/04 19:49
ダウンキャストやconstキャスト使う場合は仕方がないが
static_cast<abc>()なんて長ったらしい書式をぐちゃぐちゃ書いてるのか。

631 :デフォルトの名無しさん:04/05/04 19:58
>>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
トリップ変更します。

636 :634:04/05/04 20:30
俺Cがまともに書けないんだよ。人がCコード書いてるとついつい嫉妬心から切れちゃうんだよ。
許してくれ。ついでにポインタもよくわかってないんで誰か教えてくれ。

637 :634: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

639 :デフォルトの名無しさん:04/05/04 20:42
君はここからやり直したほうがいいよ。紹介しとこう。
http://www2s.biglobe.ne.jp/~thoikuen/

640 :デフォルトの名無しさん:04/05/04 20:47
わざわざ検索したのか。キモイなw

641 :デフォルトの名無しさん:04/05/04 21:06
脳内アゲ

642 :デフォルトの名無しさん:04/05/04 21:58
とにかくC厨がC++のスレまできて自分の脳内のC知識を
さもありがたそうに披露するのは目障りだ。
それともCスレで間違った発言をして叩かれたくやしさを
晴らしにこのスレに来ているのか。それだったら場違い。
君がPGに向いていないはっきりとした証拠だから早めに
転職して下さい。

643 :デフォルトの名無しさん:04/05/04 22:01
とにかくC厨がC++のスレまできて自分の脳内のC知識を
さもありがたそうに披露するのは目障りだ。
それともCスレで間違った発言をして叩かれたくやしさを
晴らしにこのスレに来ているのか。それだったら場違い。
君がPGに向いていないはっきりとした証拠だから早めに
転職して下さい。

644 :デフォルトの名無しさん:04/05/04 22:12
2回言わんでも…

645 :デフォルトの名無しさん:04/05/04 22:24
>624
オーバーヘッド?最適化のかかり具合にもよるけど、
ほとんどインライン展開されると思うけど。

646 :デフォルトの名無しさん:04/05/04 22:45
>>642-643
ワロタ。お前PGってプログラマのことかい。下らん職業にエベレストより高いプライド持ってるんだねぇ。
をー!よちよち。

647 :デフォルトの名無しさん:04/05/04 22:52
>>646
ちょっと、低脳さんはもういいでつから。

648 :デフォルトの名無しさん:04/05/04 22:55
向き不向きとプライドの高低は別の話だよな。

つーかマ板でやれよ。

649 :デフォルトの名無しさん:04/05/04 22:59
>>643
喪前はここの社員だろ? http://www.pg.com

650 :デフォルトの名無しさん:04/05/04 23:10
>>646
不幸な奴だな。自分の職業にプライドも持てんとは・・・・・
どうせお前は「俺は本当ならばもっとエリートコースを歩いて
いるはずだ。こんなくだらん仕事をしているはずがない」とでも
勘違いしているだけだろう。自分の能力のなさを人のせいにして
一生そうやって社会を恨み続けて生きるんだな。

651 :デフォルトの名無しさん:04/05/04 23:15
>>650
残念だったな。プログラマだけがこのスレに来てると思ってる時点でバカなんだよ。
プログラマ -> 他に何もできない技術屋(エンジニアといえる奴らかどうかわからんが)だろ?
プログラマなんて呼ばれることを恥と思えよ。

652 :デフォルトの名無しさん:04/05/04 23:15
反応したくてしたくてしょうがないのは分かったから
マ板でやれよ。

653 :デフォルトの名無しさん:04/05/04 23:18
広義のプログラマ(プログラミングする人)でない人が何の目的で
C++スレなんか見るんだ?

654 :デフォルトの名無しさん:04/05/04 23:31
GWだからな!

655 :デフォルトの名無しさん:04/05/04 23:37
>>651
アホか。俺だってSEなんだが。まあいいや。お互いの顔も知らず
何をやっているかも全く知らずにこうやって言葉遊びを繰り返して
いるだけじゃ埒があかないね。いつまでもそうやってなさい。

>>652
正直すまんかった。刺々しくて香ばしい香具師がいるもんだから
つい相手をしたくなっちまった。普段ならバカバカしくて「また痛い
香具師がいるなあ」ぐらいで反論すらしないが。GWだし(w

656 :なんちゃってSE:04/05/04 23:47
ですか。

657 :デフォルトの名無しさん:04/05/04 23:47
っていうか、そのプログラムすらできないSEに設計なんかして欲しくなおのだが。

658 :デフォルトの名無しさん:04/05/04 23:48
×なおのだが ○ないのだが

659 :デフォルトの名無しさん:04/05/04 23:50
PGの次はSEか。便利だよなシステムって言葉。

660 :デフォルトの名無しさん:04/05/05 00:02
>>656-659
相当頭カッカしてるな(w
typoするなんて(w

661 :デフォルトの名無しさん:04/05/05 00:07
「(w」←注目


頭カッカするも何も、俺>>646からしか読んでないし。
で、お前がアホっぽかったからいじめただけ。

662 :デフォルトの名無しさん:04/05/05 00:11
>>661
俺もお前がアホっぽかったからいじめただけ。

663 :デフォルトの名無しさん:04/05/05 00:15
追い詰められるとレスが鸚鵡返しになってしまう。

664 :デフォルトの名無しさん:04/05/05 00:17
>>663
( ‘∀‘)オマエガナー

665 :デフォルトの名無しさん:04/05/05 00:23
馬鹿とアホの共演は終わりましたか?
↓ではC++の話に戻ってください。

666 :デフォルトの名無しさん:04/05/05 00:24
│     _、_
│  ヽ( ,_ノ`)ノ 残念 それは私のおいなりさんだ
│ へノ   /
└→ ω ノ
      >  

667 :デフォルトの名無しさん:04/05/05 00:30
ワロタ

668 :デフォルトの名無しさん:04/05/05 00:34
PGがアフォだとエライ目にあうよ、マジで。
つかPGの能力を判断してこき使うSEの能力こそが大事なわけだが。

669 :デフォルトの名無しさん:04/05/05 00:36
>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 後半のように自前で
処理する方がいいんじゃないかと思う。

670 :デフォルトの名無しさん:04/05/05 00:43
まぁまぁ。荒れてばっかりいないでこれでも見て楽しくやろうyo
http://www.arabtimes.com/mixed3/2.jpg
http://www.arabtimes.com/mixed3/1.jpg
http://www.arabtimes.com/mixed3/3.jpg
http://www.arabtimes.com/mixed3/4.jpg
http://www.arabtimes.com/mixed3/5.jpg
http://www.arabtimes.com/mixed3/6.jpg
http://www.arabtimes.com/mixed3/7.jpg
http://www.arabtimes.com/mixed3/8.jpg
http://www.arabtimes.com/mixed3/9.jpg
http://www.arabtimes.com/mixed3/10.jpg

671 :デフォルトの名無しさん:04/05/05 00:45
>670
グロ画像

>666
ハゲワラ



672 :デフォルトの名無しさん:04/05/05 00:46
>>670
楽しそうだな。

673 :デフォルトの名無しさん:04/05/05 01:01
>>670
思わず射精してしまった。

674 :デフォルトの名無しさん:04/05/05 01:14
>>669
まぁここはC++のスレだからな。C++だと整数系の型だとOKのようだ。規格は見てない
けどVCのヘルプにはそー書いてあった。VCではMS独自仕様でLSBから詰めるそうだ。

675 :デフォルトの名無しさん:04/05/05 01:15
>>674
あと、サイズ0(:0)だと次のアライメントまで飛ばすそうだ。#pragma packで指定された
やつな。

676 :デフォルトの名無しさん:04/05/05 15:29
blitzで逆行列はどうやって計算するのですか?

677 :デフォルトの名無しさん:04/05/05 15:41
>>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
書いたコード貼れ


680 :676:04/05/05 16:28
テンプレートスレに行きますでの放置してください。

681 :デフォルトの名無しさん:04/05/05 16:31
>>678だが、
書いたコードで ジョーカーの初期化を忘れていたことに加え、
random_shuffleの使い方を間違っていたようです。

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

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

# かちゅ〜しゃ よりブラウザから書き込んだほうが
# 規制で書けない率が低い木がする


682 :デフォルトの名無しさん:04/05/05 16:33
意味不明萎え


683 :デフォルトの名無しさん:04/05/05 16:35
とんだ勘違いでスマソ。

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

random_shuffle( hoge1 , hoge3 );

ってしたらどうなるんだろう?hoge1の先頭からhoge3の先頭の位置まで
メモリ鍋状態ですか?

684 :デフォルトの名無しさん:04/05/05 16:38
>>683
構造体ではなくローカル変数とかだと
hoge1とhoge2, hoge3のメモリ配置がどんな関係かはまったく予断してはいけないが。
構造体の中ならhoge1の先頭からhoge2の最後までが混ざるだろうな。
メモリ鍋って言葉は意味不明だが

685 :デフォルトの名無しさん:04/05/05 16:38
今2chで話題のA何とかの中の人のMFC講座!
みんないっちゃだめだよ〜wwww
http://www.geocities.jp/aransk88/contents4.html


686 :デフォルトの名無しさん:04/05/05 16:39
>>685
いってほしくないならURL晒すんでねえ

687 :デフォルトの名無しさん:04/05/05 16:42
>>685
それなりにワラタ


688 :デフォルトの名無しさん:04/05/05 21:31
C++にJavaのプロパティクラスに代わるものってありますか?


689 :デフォルトの名無しさん:04/05/05 21:36
>>688
ない


690 :デフォルトの名無しさん:04/05/05 21:44
>>689
どっかに落ちていない?ですか?

691 :デフォルトの名無しさん:04/05/05 21:48
落し物は2chではなく警察に届けてください。

692 :デフォルトの名無しさん:04/05/05 22:24
しかし昨晩は粘着C厨に占拠されて困ったな。
余程Cスレで相手にされなくなっていたのだろう。
このスレで言いたいだけ言って消えたな。
どこで覚えたのかネット上だけで通用する喧嘩論法で
人を追い込んだ気になって満を持して悦に入っていた。
リアルじゃ友達も彼女もそりゃいないだろうな。あれだけ
人に嫌われる内容の言葉を垂れ流しているんだもの。

693 :デフォルトの名無しさん:04/05/05 22:26
>>690
どうしてもというなら、とりあえず
ttp://d.hatena.ne.jp/shinichiro_h/20040503#p6
あたりかな


694 :デフォルトの名無しさん:04/05/06 01:48
>>692
さんざんやりこまれて、消えたころに悪態つくしか脳の無い間抜けかい?君

695 :デフォルトの名無しさん:04/05/06 01:55
(ノ∀`)アイタタタ

696 :デフォルトの名無しさん:04/05/06 02:08
C++builderでボタンクリックで実行を
キーボードのF1キーでも実行できるようにするのと
while文を実行中にF2キーで抜けたいけど
どうしたらいいですか?
調べてもわからないのでどなたか教えてくれませんか

697 :デフォルトの名無しさん:04/05/06 02:10
   692↓      , -ー,
           /   |  
   /⌒ヽ  /    |  
  / =゚ω゚)/.       | 
  |  つ'@      /⌒ヽ 
  〜_`)`).     /  =゚ω゚) ←694
 ̄ ̄ ̄しU      |  U /
     |       ( ヽノ
〜〜〜〜〜〜〜〜〜〜〜〜

698 :デフォルトの名無しさん:04/05/06 02:14
>>696
まず質問するのに適切なスレを見つけることから。

699 :デフォルトの名無しさん:04/05/06 02:15
>>696
さっきんとこでどなたか教えてくれてましたぜ。

700 :デフォルトの名無しさん:04/05/06 02:18
>>692
精神科通いの前科歴のある人間は相手にしないように。
>>694
目障りだから他スレ行ってやってくれ。これ以上荒らすとアク禁要望出すよ。

701 :デフォルトの名無しさん:04/05/06 02:22
>>694
> 脳の無い

702 :デフォルトの名無しさん:04/05/06 02:25
>>701
>>694は知障かよ。さすがアニキ

703 :デフォルトの名無しさん:04/05/06 02:43
>>698
そうですか...bcb対応スレ探してきます
>>699
教えてくれてありがとう

704 :デフォルトの名無しさん:04/05/06 08:38
社内情報システムを開発しています。

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

いまの管理はずさんでソースは誰でも改修できるように公開を求められます。
運用上問題があったら運用担当者が見ようみまねでソースを改修しコンパイルします。
手に負えない改修は開発者に依頼されます。(すでに弄くられているソース)
どの時点でも責任は開発者にあります。
CVSからエクスポートして公開しているソースに対して勝手に改修を掛けられます。
ルールもへったくれもありません。


705 :俺用しおり:04/05/06 09:37
ヘ_ヘ ____________________________
ミ・・ ミ
( ° )〜 ここまで読んだ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


706 :デフォルトの名無しさん:04/05/06 09:43
stringクラスのメンバ関数begin()なんですが、
begin()をオーバーロードしているメンバ関数で
引数が同じvoidで、リターン値がconst_iteratorというのが別にありますけど
これって仕様的にマズくないですか?
パラメータの仕様が全く同じ関数はオーバーロードできないと思うんですが

707 :デフォルトの名無しさん:04/05/06 09:45
>>707
同じじゃないじゃん

708 :707:04/05/06 09:46
>>706へのレスですた。

709 :デフォルトの名無しさん:04/05/06 09:57
>>707
レスさんくす

今ぐぐって自己解決しました
暗黙的な第1引数thisポインタの型が違うわけか・・なるほど

710 :デフォルトの名無しさん:04/05/06 09:58
>>704
板違い


711 :初心者:04/05/06 12:16
Visual C++ を使ってデータをファイルから読み込んグラフを表示する
プログラムを作成してますが、データの読み込みはできましたが
グラフの表示のしかたがわかりません。



712 :デフォルトの名無しさん:04/05/06 12:32
>>711
君が無能だという事はよくわかった。

713 :デフォルトの名無しさん:04/05/06 13:09
cctypeの各判定関数のリターン値の型ってintですか?

714 :デフォルトの名無しさん:04/05/06 13:20
boolです。

715 :Windowsプログラム初心者:04/05/06 13:20
VisualC6でプログラミングしています。
一時ファイルを環境変数TMPで指定されている場所に
作成したいのですが、環境変数の値をプログラム内で
使用する方法を教えてもらえないでしょうか?

あと、
アップロードボタンを押すたびに、<wininet.h>を
使用してFTPでファイルアップロードをする
プログラムを作っているのですが、
アップロードボタン3回までは正常に
動作するのですが、4回目から接続に
失敗してしまいます。
このような状況をご存知の方おられましたら、
解決法を教えてもらえないでしょうか?

716 :デフォルトの名無しさん:04/05/06 13:36
>>715
スレ違い
VCスレかWinAPIスレに移動。場所は>>7

717 :Windowsプログラム初心者:04/05/06 13:58
>>716
誘導thx
そちらで聞いてみます

718 :デフォルトの名無しさん:04/05/06 19:38
C→C++→STL
とやってきて次何すれば良いか分からない・・

719 :デフォルトの名無しさん:04/05/06 20:01
>>718
STLはC++の一部でしかないのになぜ別項目
というかそもそも言語は道具であって
何かを作るためにあるわけだが

720 :デフォルトの名無しさん:04/05/06 20:17
>>718
テンプレートでMLの処理系作成



721 :デフォルトの名無しさん:04/05/06 22:52
次はD言語

722 :デフォルトの名無しさん:04/05/07 01:37
Dはまだ仕様も策定中だし実装もまだだろ。
GCCにもVSにもないしなぁ。

723 :デフォルトの名無しさん:04/05/07 02:17
>>722
てか、DってC++'程度なんじゃねーの?

724 :デフォルトの名無しさん:04/05/07 03:35
>実装もまだだろ。
既にコンパイラができてること知らないのか?
仕様がきっちり決まった頃にはいろいろあらが見えてきて次の言語の模索が始まるのがこれまでの繰り返し。

725 :デフォルトの名無しさん:04/05/07 07:05
WINAPIでもやりたいけど
もうすぐWin→Ronghornだろ
互換性あると思うけどなんとなく・・・な
GUIも買わないとダメだ、
それ以前に俺のOSだと.netインスコできないか(わらい

726 :デフォルトの名無しさん:04/05/07 10:24
C#-> 見るからにJava
D -> C/C++と一見差が無い asmも埋め込める。ポインタもそのまま残ってる。
  多重継承が消えてすっきり
Dはいいことずくめ。

727 :デフォルトの名無しさん:04/05/07 10:39
C++のフロントエンドとして使えるから、すぐに実行速度の比較もできる。


728 :デフォルトの名無しさん:04/05/07 11:27
誰かC++とD言語のベンチマーク取って見れ。
そんなに大差なかろう。D言語が流行ってくるとすれば、
C→C++に進もうとして挫折した香具師用だな。

729 :デフォルトの名無しさん:04/05/07 12:02
↑アフォ丸出し。
>C→C++に進もうとして挫折した香具師用だな。
自分のこと宣伝してうれしいか?


730 :デフォルトの名無しさん:04/05/07 12:08
>>729
うれしいってもんじゃないねえ。D言語マンセー!!

731 :デフォルトの名無しさん:04/05/07 12:16
>>726>>729>>730
D言語厨は自分のレスから外に出るな。C++スレを汚染しないでくれ。
この奇人変人が!!

732 :デフォルトの名無しさん:04/05/07 12:18
>自分のレスから外に出るな

733 :デフォルトの名無しさん:04/05/07 12:20
>>732
コンパイラみたいな奴だな。シンタックスエラーってか。

734 :デフォルトの名無しさん:04/05/07 12:22
C系のプログラマがわざわざD覚えるメリットはあるのか?
これからって奴にはいいのかもしれんが

735 :デフォルトの名無しさん:04/05/07 12:26
>>734
お前のおつむは鎖国状態か?スペクトルの範囲が極些な使えない奴だな。
爺はプログラミングなんかせずに養老院でもいって日がな一日刻数えてろ!

736 :デフォルトの名無しさん:04/05/07 12:28
>>734
LongHornが出る頃には、.Net対応でないと少なくともWindowsでは
主導権が握れなくなっているだろうな。D言語とかD言語とかD言語とか。
C++か?C++は特別なんだよ。ネイティブでも可。

737 :デフォルトの名無しさん:04/05/07 12:32
win の上でGUI書いてるだけの糞プログラマがほざいてるな。
その割りにC++が主導権とってると思ってるお前はホント痛いな。

738 :デフォルトの名無しさん:04/05/07 12:34
>>737
まだベータ版の域も脱し切れてないD厨よりは100倍増しさ。

739 :デフォルトの名無しさん:04/05/07 12:34
けんかすんな

740 :デフォルトの名無しさん:04/05/07 12:52
>>736
managed c++いじってるだけならC#使うほうがよっぽど生産効率高いし、実行速度も差が無い。
少なくともWindowsのアプリ開発ではC++からC#にほぼ完全に移行した。C++の優位性を主張する上で
Windows開発持ち出しちゃ逆効果でしょ。

741 :デフォルトの名無しさん:04/05/07 12:55
>>740
だな

742 :デフォルトの名無しさん:04/05/07 13:05
VSをデフォルトインストールしようとすると既にC++はインストールされないしな。
これって、敢えて使ってくれるなってことだよな。J#よりも使ってくれるなという意思表示。

743 :デフォルトの名無しさん:04/05/07 13:09
>>740
そこで、C++/CLI ですよ。
http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf

Sutter 先生乙

744 :デフォルトの名無しさん:04/05/07 13:13
Cしゃーぷ厨は満足して巣に帰ったか?

745 :デフォルトの名無しさん:04/05/07 13:22
>少なくともWindowsのアプリ開発ではC++からC#にほぼ完全に移行した。

これはいったいどこの話なんだろう・・
いくつか、すでにC#で開発してるという話を耳にしたことはあるが、
完全というには程遠い状況のようなんだが・・
まだ、(.NET)じゃないVBの方が需要ありそうだ。


746 :デフォルトの名無しさん:04/05/07 13:29
.Netをlinuxで動かすプロジェクトがβリリースした。
6月30日に正式リリース。

747 :デフォルトの名無しさん:04/05/07 13:31
>>745
そうだな。少なくともlonghornが出るまでは.Netの優位は感じられない。
標準で搭載されている訳じゃないし。
longhornになればGUI周りが一変されるから.Net移行してもいいとは思うが。

748 :デフォルトの名無しさん:04/05/07 13:33
>>745
それは君が現状知らないだけでしょ?学生さん?もちろんアプリの話であって、ハードウェアのドライバはC/C++だよ。
うーん。でも、ドライバはほぼCに限定してもいいかもね。

749 :デフォルトの名無しさん:04/05/07 13:36
ここはWindowsのパシリプログラマのスクツでつか?

750 :デフォルトの名無しさん:04/05/07 13:37
Winアプリ・・・Csharp
それ以外のソフトウェア・・・C/C++
この言語3つで将来食っていけますか?

751 :デフォルトの名無しさん:04/05/07 13:39
環境: Win+もうひとつ
言語: C/C++/C#(.NET)

マトモにできているなら重宝するよ

752 :デフォルトの名無しさん:04/05/07 13:40
ドライバ書いたり、組み込み系やるなら何かひとつのCPUを勉強してアセンブラ書けないとだめ。
そうすりゃCでもC++でも見違えるぐらい効率的なコードが書けるようになる。

753 :デフォルトの名無しさん:04/05/07 13:42
というか、一言にアプリといってもフリー、シェアなどの個人ユーザーレベルから
業務で使うリッチクライアントやサーバー関係など多種多様にある。
それを一つの言語だけということはあり得ない。

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

C/C++でも環境依存なと事かあるし
APIなんてAPIプログラムというのが必要になって来るし。
変に固執するよりもしっかりと地力をつけるのが大事。

754 :デフォルトの名無しさん:04/05/07 13:44
>>752
今の時代は効率よりも保守性。
それぐらいは常識ですが?
まあ、高速性などが必要な場合は除く。

755 :デフォルトの名無しさん:04/05/07 13:45
>>752
8086マシン勉強して
アセンブリは一応読めるレベルだけど
書く気は起きないっすよ・・・

756 :デフォルトの名無しさん:04/05/07 13:47
C/C++できtりゃC#習得は簡単だが、
一行プログラムでもっと重宝できるのがawkあとperl。アプリ書くわけじゃないけど
C系だと面倒なファイルの読み書きや正規表現を手っ取り早くこなして
Post Programming作業が楽になる。

757 :デフォルトの名無しさん:04/05/07 13:50
>>752
じゃ!君にはC#がぴったりだな。このスレから出て行ってくれ。

758 :デフォルトの名無しさん:04/05/07 13:51
間違えた >>752じゃなくて
>>754
じゃ!君にはC#がぴったりだな。このスレから出て行ってくれ。


759 :デフォルトの名無しさん:04/05/07 13:54
>>しっかりと地力をつけるのが大事。
その地力とは何かを聞いてるんだよッ。

760 :デフォルトの名無しさん:04/05/07 13:54
プログラムの世界ではこれをやっとけば大丈夫っていうのがない。
様々な言語が生まれ消えていくから。
そしてそれを採用する企業がいる限り・・・

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

俺はGUI部をdelphiでつくって基幹部をC++でDLLとして作ってる。

761 :デフォルトの名無しさん:04/05/07 13:57
>>759
学生の俺がレスしてやろう
多分、逆汗してネイティブコードを見ることだろう

762 :デフォルトの名無しさん:04/05/07 13:57
>>759
プログラムに対する考え方とかそういうの。
結局プログラムはロジックの固まりだから論理思考とかね。
ようするに言語に依存しなく、かつ言語の基礎になるもの。

いろんな言語にふれるのもいい。
あとはどれかをとことんやり込む。

763 :デフォルトの名無しさん:04/05/07 14:01
>結局プログラムはロジックの固まりだから論理思考とかね。
じゃ詰め将棋でもいいっすか?
それか、徹底的に論理思考を鍛えてる
数学者は最高のプログラマということなんだな?

764 :デフォルトの名無しさん:04/05/07 14:07
>逆汗してネイティブコードを見ることだろう
それは相当アセンブラで書き込んでないと難しいぞ。
どんな言語でも人のコード読んで理解するには相当書き込んでないとだめ。
特にアセンブラはコードのつながりとか構造が理解しづらいよ。

765 :デフォルトの名無しさん:04/05/07 14:08
>>763
> 数学者は最高のプログラマということなんだな?
別に論理思考だけじゃないから。
他にもいろんなものが必要になってくる。
それぐらいもわからないお前は
最低のプログラマーであることは間違いないがな。

CPUは計算機ですよ?

766 :デフォルトの名無しさん:04/05/07 14:12
だな?
から。
くる。
がな。
ですよ?

767 :デフォルトの名無しさん:04/05/07 14:12
>それぐらいもわからないお前は
わからなから聞いてるんだよッ。

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

>CPUは計算機ですよ?
それがどないした?

768 :766:04/05/07 14:12
一番上は引用か。

769 :デフォルトの名無しさん:04/05/07 14:14
しかし、今の言語の流れって小学校の学習指導要綱みたいだな。
昔はCとかだったのが今はゆとり教育でJAVAとC#とか。

ここで名言。
「楽をするのはかまわない。ただ、なぜ楽ができるかを知っていなければならない」

770 :デフォルトの名無しさん:04/05/07 14:16
名言だって・・・(笑)

771 :デフォルトの名無しさん:04/05/07 14:16
「楽をするのはかまわない。ただ、なぜ楽をしないといけないかを知っていなければならない」

自分のせりフを名言とかいうな。恥ずかしい。普通一句とかいいたいが句になってないしな。

772 :デフォルトの名無しさん:04/05/07 14:17
>769 デフォルトの名無しさん sage New! 04/05/07 14:14

773 :769:04/05/07 14:18
ごめんゆとり教育受けてきたんで言葉知らないんだよ。

774 :デフォルトの名無しさん:04/05/07 14:18
>>767
> >それぐらいもわからないお前は
> わからなから聞いてるんだよッ。
わからないから考えるんだよ。
考えることをやめたら人間終わり。
まあ、お前はすでに終わってるから関係ないか。

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

> >CPUは計算機ですよ?
> それがどないした?
ない頭をふりしぼって意味考えろ。
って考える力がないんだったね、ごめん。

775 :デフォルトの名無しさん:04/05/07 14:19
>>774
また例のC厨か?
さっさとCスレに帰れ。

776 :デフォルトの名無しさん:04/05/07 14:20
>>771
いや、誰が言ったか忘れたが引用。
個人的に衝撃受けたもので。

777 :デフォルトの名無しさん:04/05/07 14:20
糞スレで777ゲット

778 :デフォルトの名無しさん:04/05/07 14:20
どこぞのPG募集広告見ても、C・C++(java)は必須つうか前提のように書かれているから
事実上、ゆとり教育は現場で通用しないというか、現場の入り口にさえ入れないという現実がある

779 :デフォルトの名無しさん:04/05/07 14:22
>>778
今の教育もそうだよな。小学校でなにをやろうと大学が変わってないから
結局苦労する・・・

780 :デフォルトの名無しさん:04/05/07 14:23
フォルダに保存したexeファイルから実行するとすぐに画面が消えてしまうんだけど、どうすればいいですか?

781 :デフォルトの名無しさん:04/05/07 14:25
>>780
system("PAUSE");
これでも使え

782 :デフォルトの名無しさん:04/05/07 14:26
>>781
だからC厨は(ry

783 :デフォルトの名無しさん:04/05/07 14:26
>>780
ウイスルかDOSプログラム。
DOSプログラムならDOSかあ起動すればいいし、ウイルスならなもうだめだな。

784 :デフォルトの名無しさん:04/05/07 14:27
バカにされてるのもわからずマジレス返してる時点で恥の上塗りだな。こいつ女じゃねぇか?

785 :デフォルトの名無しさん:04/05/07 14:34
>>774
茶化されてることに気づかず。まじめーにレス返してて、気づいた時点での激高振り。
まさに、厨中の厨。先のC厨はまじめなレスなんかはじめから返してなかったんじゃねぇの?

786 :774:04/05/07 14:37
いや、暇だから・・・
反論に反論で返したかったのよ。
ちなみに他にもいろいろ書いてるよ。
ID制じゃないからわからないだろうけど。

787 :C厨晒しage!:04/05/07 14:39
C厨晒しage!

788 :デフォルトの名無しさん:04/05/07 14:44
どうして君たちってこんなに頭が悪いんだろうね。
食生活のせいかなぁ・・・。

789 :774:04/05/07 14:46
>>788
教育のせい

790 :デフォルトの名無しさん:04/05/07 15:05
自己責任

なんでも親のせい、大人のせい、教育のせい、社会のせいに
してはいけない

791 :デフォルトの名無しさん:04/05/07 15:06
>>790
その自己は誰が育てると思う?

792 :デフォルトの名無しさん:04/05/07 15:11
人生の敗北者でしかないプログラマが人に敗北者への道を説いてどうすんの?


793 :デフォルトの名無しさん:04/05/07 15:11
>>791
自然淘汰圧と個体の環境適応戦略と順応能力

794 :デフォルトの名無しさん:04/05/07 15:16
黄金虫が湧いてるだけなのか?
それともGW終わって嫌々仕事してるPGの悲鳴?


795 :デフォルトの名無しさん:04/05/07 15:19
プログラミング初心者です。
じゃんけんのフローチャートってどうなりますか?


796 :デフォルトの名無しさん:04/05/07 15:20
D言語嫌われてるね。
C#やJava厨ならともかく
C++厨がD言語嫌う理由は何だ?

797 :デフォルトの名無しさん:04/05/07 15:26
>>796
> C++厨がD言語嫌う理由は何だ?
1. ここが C++ 相談室スレだから。
2. さすがに、まだ仕事には使えない状況なのだけど、その現状を無視して D, D やかましい
 輩が数人いるから。


798 :デフォルトの名無しさん:04/05/07 15:28
>>796
そりゃまぁ、メーカーがね(ry

799 :デフォルトの名無しさん:04/05/07 15:31
>>795
[かけ声にあわせて、グー、チョキ、パーのいずれかを出す]
↓               ↑
<判定をする>→あいこなら↑
どちらかが勝てば

(終了)

800 :デフォルトの名無しさん:04/05/07 15:35
3.ようやく、死に物狂いでC++覚えたのに、また新しい言語が出てきてしかも、
C++でできることはすべてできてしかも生産性が高そうなことに嫉妬して。

ま、C厨と同じく向上心のかけらも無い奴は死になさいって琴田

801 :デフォルトの名無しさん:04/05/07 15:53
>>800
D厨は氏ね。

802 :デフォルトの名無しさん:04/05/07 16:07
>>799
二人ならね。
3人以上の場合はまずあいこか調べそのあと
架空の相手(誰も出していない手)と対戦させ
そいつに負ければ勝ち、勝てば負けとなる。

803 :デフォルトの名無しさん:04/05/07 16:21
>796
Dが嫌われてるというより、D厨がC++スレ荒らしにきてるだけだろ


804 :デフォルトの名無しさん:04/05/07 16:29
>>800
あのさあ、D覚える方が、C++覚えるよりずっと簡単なんだけど。
嫉妬なんかしてないんだけど(仕事でC#使ってる)。

向上心というより、どう考えても幼稚化なんだよなあ、Dは。
未来のない会社の株は誰も買わないでしょ。それと同じなんだよ。

805 :デフォルトの名無しさん:04/05/07 16:36
Dってもともとお手軽なC++って感じで設計されたんじゃないの?
触ってる奴らでまともにC++の代替って考えてる奴なんかいるか?

806 :デフォルトの名無しさん:04/05/07 16:39
D使ってないから知らないがC,C++,JAVAのいいとこ取りで設計されてるんじゃないの?

807 :デフォルトの名無しさん:04/05/07 16:41
>>805
俺も全く同感なんだが、どうもD厨の中には甚だしく勘違いをして
いる香具師がいるらしく、「新しい物ほど偉い」と思っているらしい。

俺はそういう香具師に「C++に挫折したC厨が次に飛びつくのはDだ」
と揶揄したつもりだったんだが。ほとんどの人はDを遊び道具としか
考えてないはずなのに、>>800みたいなD狂信者がいて、しかもC++
スレを荒らしに来るので困っているのだ。

808 :デフォルトの名無しさん:04/05/07 16:42
なんかJAVAの時もこういう議論あったよな。

809 :デフォルトの名無しさん:04/05/07 16:42
>>806
本当に「いいとこ取り」なら互換性を捨てたりしないだろう。Dは一番
美味しい所を捨てているように思えるが。

810 :デフォルトの名無しさん:04/05/07 16:44
ttp://www.sun-inet.or.jp/~yaneurao/dlang/Chapter-02.html


811 :デフォルトの名無しさん:04/05/07 16:48
ttp://www.kmonos.net/alang/d/comparison.html

812 :デフォルトの名無しさん:04/05/07 16:51
>>804
あのさあ、ずっと簡単だからいいんだよ。
C#使っててなんでそれ使ってるかわかってないのか?
しかも、幼稚とは思わず使わされて日銭稼いでいる下働きプログラマなんだろが?

>未来のない会社の株は誰も買わないでしょ。それと同じなんだよ。
C++に未来があると思ってる時点でおめでたいことこの上ないな。
Windows以外では別に終わるわけじゃないが、汚前が日々糞coderやってる
WinではC++は終わりなんだよ。

813 :デフォルトの名無しさん:04/05/07 16:53
結局言語なんて適材適所。
完璧な言語なんてない。

814 :デフォルトの名無しさん:04/05/07 16:58
>結局言語なんて適材適所。完璧な言語なんてない。
激しく同意。所詮ハードウェアの手順なんだからな。

815 :デフォルトの名無しさん:04/05/07 17:00
難しいことが美徳と思ってる奴はその都度ロジック回路組め。

816 :デフォルトの名無しさん:04/05/07 17:05
>本当に「いいとこ取り」なら互換性を捨てたりしないだろう。Dは一番美味しい所を捨てているように思えるが。
一番おいしい部分のどこを捨ててしまったのか教えてください。

817 :デフォルトの名無しさん:04/05/07 17:09
>>816
まあまあ。
味覚なんて人それぞれ違うんだから。

818 :デフォルトの名無しさん:04/05/07 17:10
Cだと一筆画きできるがDを一筆書きすると0なのかOなのかわかりにくくなるところ。

819 :デフォルトの名無しさん:04/05/07 17:10
>>816
俺も思った。>>811の比較見る限り。

820 :デフォルトの名無しさん:04/05/07 17:20
>>816
>>809 は多重継承が何がなんでも必要なんだよ。

言語仕様知らずにこっぱずかしコメント書き込んでるわけじゃないだろうし。

821 :809:04/05/07 17:22
待て!今はじめて仕様見て必死になってあら捜ししてるところだ。
よーし。ガベコレけなしたろー。

822 :デフォルトの名無しさん:04/05/07 17:23
どーでもいいけど、ここでやらないでくれよ。

823 :809:04/05/07 17:34
#ifdef が書けないのが幼稚だ。

824 :デフォルトの名無しさん:04/05/07 17:42
>>811
腐るほど読んだよそのページは。
>>812
でもD言語も始まるわけじゃないね。
>>813
まあそうだな。

825 :デフォルトの名無しさん:04/05/07 17:53
所詮C++はつぎはぎのキタネー言語だから、
そこにしがみついてる奴の擁護も当然メチャクチャになる。

826 :デフォルトの名無しさん:04/05/07 17:55
>>825
C++の最大の失敗はCを引き継いだところ。いいところ悪いところ両方。

827 :デフォルトの名無しさん:04/05/07 17:58
一番おいしいとこ=CやC++との互換性って意味だろ。

828 :デフォルトの名無しさん:04/05/07 17:59
確かに、C++は、つぎはぎだらけのキタネー言語だけど、
D言語だって良いとこどりのつもりでごちゃごちゃいろんな機能を
取り入れようとしてつぎはぎだらけになってるけどな。w

829 :デフォルトの名無しさん:04/05/07 18:01
お前ら、比較叩き煽り何でもありなスレでも立ててそっちでやれよ
ここで下らん叩き合いをするな

830 :デフォルトの名無しさん:04/05/07 18:02
>>826
言語として失敗だろうがなんだろうが、これだけたくさん使われている以上、
まだC++の時代は終わらん。
俺はVC++よりマトモなコンパイラが出てこない限り、C++をやめる気はない。

831 :デフォルトの名無しさん:04/05/07 18:02
所詮、C++にもC#にもDにもJavaにもSmalltalkやSchemeのような
スマートさがない。
どれも50歩百歩。
それに、実用性は言語の良し悪しじゃ決まらん。
どれだけCに似てるかと、開発環境の性能で実用性が決まる。
よってC++かC#が一番実用的だ。w

832 :デフォルトの名無しさん:04/05/07 18:03
C#は一番おいしいとこ捨ててWinのデファクト開発言語となりまつた。

833 :デフォルトの名無しさん:04/05/07 18:03
おまえらGWは終わりましたよ。

834 :デフォルトの名無しさん:04/05/07 18:04
>>832
デファクト開発言語の割りには、有名なあのフリーソフトも
あのシェアウェアも全部C#じゃないね。w

835 :デフォルトの名無しさん:04/05/07 18:06
Win上の開発では未だに圧倒的にC++が優勢だな。

836 :デフォルトの名無しさん:04/05/07 18:07
longhornが来たらVB,C#ともに大幅な修正が加わる予感。


837 :デフォルトの名無しさん:04/05/07 18:10
>>834
学生ちゃん。

838 :デフォルトの名無しさん:04/05/07 18:10
PS、XBOX、DirectXといったゲームプログラムは
C++しか選択肢が無いしな
Win以外の分野ではC#なぞかけらも見ない

839 :デフォルトの名無しさん:04/05/07 18:12
>>836
あれだけ環境依存だと
言語仕様そのものに大幅な修正が要るな
今時そんな薄氷のような言語イラネ

840 :デフォルトの名無しさん:04/05/07 18:12
ここまで連鎖あぼ〜んで(ry

841 :デフォルトの名無しさん:04/05/07 18:13
>DirectXといったゲームプログラムは
>C++しか選択肢が無いし。

さらしあげ。首つって市ね。あほ!

842 :デフォルトの名無しさん:04/05/07 18:17
windowsプログラマ戦々恐々だね。あさましい。

843 :デフォルトの名無しさん:04/05/07 18:25
新しく普及しそうな言語がでたらそれをえるように対応するだけなのに
C++厨はなんでこんなに他をけなしてしがみついてるの?C厨以下だな。

844 :デフォルトの名無しさん:04/05/07 18:29
MSの手のひらの上で仕事させてもらってうれしいか?

845 :デフォルトの名無しさん:04/05/07 18:33
>>838
XBoxとDirectXはC#だよ
PSはアセンブラ

846 :デフォルトの名無しさん:04/05/07 18:34
>>843
> 新しく普及しそうな言語がでたらそれをえるように対応するだけなのに
いや、大半の人間は「普及したら」で間に合う。とりあえず Visual D 出るまで
待ちでしょ。

847 :デフォルトの名無しさん:04/05/07 18:36
>>845
PSはアセも使うがC/C++も使えるぞ。
コードウォーリアーとかあるし。
ミドルウェアも多いし。

848 :デフォルトの名無しさん:04/05/07 18:37
>>846
俺もそう思う。VDとか出たら考える。
JAVAだって結局Serverサイドかゲームぐらいしか使われなくなってるし。

849 :デフォルトの名無しさん:04/05/07 18:38
>843
よそのスレで他の言語叩いてるC++信者に言ってくれ・・・
ここはC++のスレだからさ・・・


850 :デフォルトの名無しさん:04/05/07 18:41
directX・箱はC++でコード書くのがメイン
PS2のエンジン(ライブラリ)はC++で書いて、微調整でアセンブリだろ

851 :デフォルトの名無しさん:04/05/07 18:41
>>Visual D 出るまで待ち
反吐が出るね。M$プログラマのレベルなんてこんなもん。お前はM$の下請けか?

852 :デフォルトの名無しさん:04/05/07 18:47
>>850
> PS2のエンジン(ライブラリ)はC++で書いて、微調整でアセンブリだろ
VU1 で走らせるマイクロコード (シェーダー) は、専用のアセンブラ言語。

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

いずれにせよアセンブラは数学関数や描画系などの中で使うのがメインで、
ゲームっぽいコードのほうにはめったに顔を出さない。

853 :デフォルトの名無しさん:04/05/07 18:49
>>851
勝手に反吐だしてれば?糞が。
M$は嫌いだが、コンパイラとマウスは出来がいい。

854 :デフォルトの名無しさん:04/05/07 19:03
VCも.NETで対応CPU増えたし、コンパイラだけなら配布しだしたしなぁ。
コンパイラはIntel、GCC、VC、Borlandぐらいか?

855 :デフォルトの名無しさん:04/05/07 19:14
>>854
ほかにも CodeWarrior とか。

組み込み用途だと CPU ベンダ純正のコンパイラとか、リアルタイム OS 屋
が出してるコンパイラ (Wind River Diab C/C++) とか色々あるよん。

856 :デフォルトの名無しさん:04/05/07 19:27
趣味のプログラムならともかく、業務的には
ソフトウェア開発で職業プログラマが同じ処理を書くとき
少なくともC++より高水準なC#を使う場面なんてあるか?
ゲームプログラムだって
より低水準な言語でローレベルな調整したいのが人情
少なくともゲームプログラムではC・C++をメインに
専用アセンブリで痒いところを微調整というのが通常

857 :デフォルトの名無しさん:04/05/07 19:45
そんな君はC++なんか使わずピュアC & 汗使えばいいだろ?というか使え。
C++みたいにコンパイル結果が見通しにくい言語使っちゃ、人間が介入するの大変だろうが。

858 :デフォルトの名無しさん:04/05/07 20:03
>>855
違う。メジャーどころって意味で。
マイナー含めたらそれこそ山のようにある。

859 :デフォルトの名無しさん:04/05/07 20:07
>>856
業務ってもパッケージソフトウェアとシステム開発で全く違うだろ、
ってかC#が台頭してるのはVB使ってたような場所。

860 :デフォルトの名無しさん:04/05/07 20:15
>>858
> 違う。メジャーどころって意味で。
組み込み用途は、むしろメジャーだと思うぞ。開発人口も少なくないし。

861 :デフォルトの名無しさん:04/05/07 20:18
>>857
C から C++ になって見通しが悪くなったのは、コードの配置ぐらいだと思うが。
あれは inline やら template やらあるから C と違って調整が難しい (命令
キャッシュのヒット率を上げるのが難しい) けど、他はそれほど。

最適化をかけると元のコードとかけ離れたコードをはくのは C も C++ も
大差ないよ。レジスタリネーミングを使うと、かなり追えん。

862 :デフォルトの名無しさん:04/05/07 21:29
C#がデファクトとか言ってる人は何を根拠に?
とても信じ難いんだけど。
どういう世界でデファクトなの?

863 :デフォルトの名無しさん:04/05/07 21:34
さっきからデファクトといってるがデファクトスタンダードとしないとも間違ってるぞ。
デファクトは「事実上の」って意味だけだ。

864 :デフォルトの名無しさん:04/05/07 21:36
>>862
Web がらみの三階層アプリケーションだと、わりと流行ってる感じ。
これまで VBScript, JScript 使って ASP 書いてたところが、C#.net に
乗り換えてる。

でも、そっちも JSP とか ColdFusion なんかもあるし、まだデファクト
スタンダードっつ〜ほどじゃないと思うが。

865 :デフォルトの名無しさん:04/05/07 21:41
>>864
C#はJSP,ASPに置き換わるものとして作られたんだろ。
クライアント用にはVBがあるわけだし。

866 :デフォルトの名無しさん:04/05/07 21:42
JSPの代わりもVB.netでいいじゃん。

867 :デフォルトの名無しさん:04/05/07 22:47
JSP? Japan Stuttering Project のことか?
どもりで困ってるのか?

868 :デフォルトの名無しさん:04/05/07 23:09
>>864
M$がらみはデファクトスタンダードはない。
M$がスタンダードを決めてお前らが従うだけ。嫌なら書かなくていーよ。
アプリ書きたい奴はいっぱいいるから。
言語どころか開発環境さえ選択の自由なんかあるかよ。

869 :デフォルトの名無しさん:04/05/07 23:21
>>864
それはVBScriptが取って代わってるだけでC++と
取って代わってるわけじゃないだろ。

870 :デフォルトの名無しさん:04/05/07 23:24
>>868
> M$がらみはデファクトスタンダードはない。
三階層アプリだと Oracle + JSP や SQL Server + ASP (C#.net) など、
選択肢はいくつかあるよ。クライアントサイドだと Win32 でほぼ決まり
だから、選択の余地は狭いが。

871 :864:04/05/07 23:26
>>869
その通り。

っつか、俺は C++ と C# は有効に活用できる対象が明確に違うと思ってる。
ただ今後は Win32 クライアントも C# で書く機会が増えそうだし、これまで
C++ が受け持っていた領域にも少し C# が食い込んでくるかなぁ、とは
考えてるけど。

872 :デフォルトの名無しさん:04/05/07 23:32
新しい領域は新しい言語がいいんでない?
C++は従来Cでやってたことを、一歩進めるのに使う。

873 :デフォルトの名無しさん:04/05/07 23:50
教えてください。
クラステンプレートにて例えば

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


};

としたとして、コンストラクタなんですが、上記とちょっと変えて
test<mytype>(const mytype &);
とするやり方があると本で読んだのですが、いまいちどう違うのか
わかりません。何でもmytypeにそれぞれ固有のコンストラクタが
コンパイラによって生成されるとかなんだそうですが、最初のやり方
でもそんな感じがします。
どう違うのでしょうか?

874 :デフォルトの名無しさん:04/05/08 00:01
>>873
違いなんてありません。

875 :デフォルトの名無しさん:04/05/08 00:15
そ、そうなんすか?
ということは
test<mytype>というコンストラクタの書き方は意味をなさないと?

876 :デフォルトの名無しさん:04/05/08 01:19
http://www.geocities.com/one_mad_alien/perftest.html
こりゃもう乗り換えるしかないだろ。

877 :デフォルトの名無しさん:04/05/08 01:23
>>876
まだ言ってるのか・・・。言語論に速度はほとんど関係ないよ。

878 :デフォルトの名無しさん:04/05/08 01:30
>>877
技術ばかりに目が行ってると、その辺が理解できなくなる。視野の狭い人間に
何言っても無駄だから、放置しとけ。

俺は Visual D はともかく、プログラミング言語 D と Effective D が出たら
考えるよ。

879 :877:04/05/08 01:36
因みに俺はPrologが最高の言語だと思ってる。

880 :デフォルトの名無しさん:04/05/08 01:41
>>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厨を釣るためのネタ質問に見えるなぁ

883 :デフォルトの名無しさん:04/05/08 02:13
>>881
比較用のソース晒せ。

884 :デフォルトの名無しさん:04/05/08 02:14
perlより速いんだろ?

885 :デフォルトの名無しさん:04/05/08 02:15
>>881
その後のデータの使い方による。stream の機能をフルに使いたいなら
そこで示された方法を使うことになるし、単にメモリ上にマップすれば良い
のなら mmap() とか MemoryMappedFile() といった OS の仮想記憶
システムに近い低レベル API を使うことになる。

886 :デフォルトの名無しさん:04/05/08 02:43
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で十分な使い方です。
ただなんでこんなに速度差があるのか疑問だったので。

887 :デフォルトの名無しさん:04/05/08 02:50
881です。

まちがえました。

ifs.read(buf, BUFSIZE));

ifs.rdbuf()->sgetn(buf, BUFSIZE);

888 :デフォルトの名無しさん:04/05/08 03:22
>>886
なんで部分的に貼るんだよ。テストしにくいだろ。

889 :デフォルトの名無しさん:04/05/08 03:53
>886
デバッグビルドしてませんか。

890 :デフォルトの名無しさん:04/05/08 09:27
bool aという変数があって、
aがtrueの時はfalseに、falseの時はtrueにするような(反転するような)
代入をしたいのですが、
a=~a;
だと、コンパイラが受け付けてくれません。
どうやったらいいでしょうか。

891 :デフォルトの名無しさん:04/05/08 09:32
>>890
a = !a;

892 :デフォルトの名無しさん:04/05/08 10:14
C++の仕様を決めるとき、なんで配列のdeleteには[]が必要にしたんだろ?
配列も普通にdeleteだけで開放できても問題ないような。

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

893 :デフォルトの名無しさん:04/05/08 10:38
>>892
ある。

配列を開放する場合、デストラクタを呼び出すために、その配列に格納
されている要素数をどこかに記録しておく必要がある。delete, delete[] を
共通にしてしまうと、常にこの要素数を記録せにゃならんので、その分だけ
メモリが無駄になる。

894 :デフォルトの名無しさん:04/05/08 11:42
>>893
でも正直、貧乏臭いよね。

895 :デフォルトの名無しさん:04/05/08 11:51
数バイトのメモリケチってdelete/delete[]を誤るほうが怖いな
下手すると豪快にリークしてくれるて本末転倒

896 :デフォルトの名無しさん:04/05/08 11:53
>>893
それ本当?

もともとメモリ開放するためには、newで確保したメモリサイズが
なにかしらの管理領域に保持されているはずだよね。
そしたら要素数なんて別に持たなくても、要素数は算出できるはずじゃね?

897 :デフォルトの名無しさん:04/05/08 11:58
デストラクタ呼び出しのためじゃないの?

898 :デフォルトの名無しさん:04/05/08 12:00
>895
WindowsなどのPC環境でしか開発をしたことがないと
そういう言葉が出てくる

899 :デフォルトの名無しさん:04/05/08 12:11
>>897
[ ]あってもなくてもデストラクタは呼ばれる。

900 :デフォルトの名無しさん:04/05/08 12:13
>>898
確かにメモリがシビアな状態ではね。
でも、newした時点ですでに保持されてるんじゃないの?

901 :デフォルトの名無しさん:04/05/08 12:16
>>896
そのオブジェクトのサイズはね。
だけどポインタが指してる先が一個のオブジェクトか、配列の先頭かは
プログラマにしか分からんよ。

902 :デフォルトの名無しさん:04/05/08 12:20
>>901
OSも知ってる。もちろんOSにも寄るけど。

903 :デフォルトの名無しさん:04/05/08 12:21
>>896
ttp://www.tietew.jp/cppll/archive/10666

ここを読みんしゃい。

あと、>>896 が言うように計算可能であるかもしれないけど
コストがかかる処理になるかもしれないし
メモリアロケータを設計する上での足枷となりうる。

904 :デフォルトの名無しさん:04/05/08 12:30
>>900
メモリアロケータはユーザが override 可能だから、それを仮定することはできない。

905 :デフォルトの名無しさん:04/05/08 12:32
>>899
>>899
え?

906 :デフォルトの名無しさん:04/05/08 12:33
>>903
うーん、そんなにコストかかるか?
newで確保したメモリ内に管理用領域が付随していて、
それが激しくサイズ不定でとかならわかるが、
普通は引き算がせいぜい数回と、割り算1回発で済むんじゃないの?

>メモリアロケータを設計する上での足枷となりうる。
というのも足かせが思いつかん。


907 :デフォルトの名無しさん:04/05/08 12:41
>>906
メモリアロケータは要求されたメモリサイズをそのまま確保するのではなく、
8, 16 バイト単位に切り上げた上でメモリを確保・呼び出し側に渡したり、
一定サイズまではライブラリ内部でプールしておいて、閾値を越えたら OS
のアロケータに丸投げしたりといった細かい工夫が施されてたりする。

確保したメモリサイズ・要素数を生のまま埋め込むことを前提とすると既存の
メモリアロケータを全部捨てて書き直す必要がるし、かといってアロケータが
まったく別の領域で「メモリアドレス先頭」と「要素数」の対応表を管理すること
にすると、そっちのメンテナンス・検索コストが結構かかる。

908 :デフォルトの名無しさん:04/05/08 12:46
静的メンバ関数を使うメリットってなんですか?

909 :デフォルトの名無しさん:04/05/08 12:47
>>908
何と比較して?

910 :デフォルトの名無しさん:04/05/08 12:49
>>899
[]なしだと呼ばれるのは先頭要素だけだよな

911 :908:04/05/08 12:55
>>909
普通に関数宣言するのと比べて(クラスのメンバにしないで)


912 :デフォルトの名無しさん:04/05/08 12:57
クラスの静的メンバにアクセスできる

913 :908:04/05/08 13:01
>>912
即レスありがとうございます。

今のところコールバック関数をメンバにしたいときにしかつかったことないんでどういうときに使うといいのか〜ってのがいまいちわかってないみたいです。
もっと勉強したほうがいいですね。

914 :デフォルトの名無しさん:04/05/08 13:12
静的メンバ関数はインスタンスが無くても使えるのが便利。

915 :デフォルトの名無しさん:04/05/08 13:18
全てのオブジェクトからアクセスできる。
クラスのオブジェクト生成のカウンタとか、共通で扱うデータなどは静的メンバ変数にする。

916 :908:04/05/08 13:18
グローバル変数みたいなものってわりきっちゃっていいかな?

917 :デフォルトの名無しさん:04/05/08 13:22
むしろ外部からのstatic変数へのアクセス関数に相当だろ。

918 :デフォルトの名無しさん:04/05/08 13:23
>>906
>というのも足かせが思いつかん。

古臭い仕様上の制約というやつだ。合理性を求めても仕方が無い。

919 :デフォルトの名無しさん:04/05/08 13:32
win32apiのWINAPIとかCALLBACKみたいに
C++の言語仕様に
関数名に付加する修飾子みたいなのってありますか?

920 :デフォルトの名無しさん:04/05/08 14:06
>>919
WINAPIが何で定義されてるかお前は知っているのか?

921 :デフォルトの名無しさん:04/05/08 15:26
>割り算1回発で済むんじゃないの?
ヲーヲー!もっともクロック数が必要な命令じゃないか。

922 :デフォルトの名無しさん:04/05/08 15:37
>>920
__stdなんたらとかいう記号定数だろ
windows.hで定義されてるやつ

仮にC++のソースに関数名と型の間にひとつトークンを置いたとき
こういうのを関数名を修飾するトークンというふうに
認識してくれるのかなとか、なんとなく思ったので質問した

923 :デフォルトの名無しさん:04/05/08 15:58
>>922
> __stdなんたらとかいう記号定数だろ
「記号定数」ってなんだ?

C++の文法と、使っているコンパイラのマニュアルを確認しる。

924 :デフォルトの名無しさん:04/05/08 16:12
>>922
お前がそのWINAPIを使うときに使ってる言語は何だと思う?
その言語は「修飾するトークンというふうに認識」してるらしいが、
その言語はなんだと思う?w

925 :デフォルトの名無しさん:04/05/08 16:13
春だなぁ・・・

926 :デフォルトの名無しさん:04/05/08 16:38
春ですねぇ…

927 :デフォルトの名無しさん:04/05/08 16:42
春ではなくただの日曜日だが。

>>919
関数名に付加する修飾子は在るが、呼び出し規約を指定するものはない。

928 :デフォルトの名無しさん:04/05/08 16:43
呼び出し規約を指定するものしかないの間違いだろ?

929 :デフォルトの名無しさん:04/05/08 16:46
> C++の言語仕様に

930 :デフォルトの名無しさん:04/05/08 16:47
>>927
土曜日ですよ。

931 :デフォルトの名無しさん:04/05/08 16:48
>>928
inline, virtual, explicit, staticなんだが、これを呼び出し規約と言うのか?

932 :デフォルトの名無しさん:04/05/08 16:51
stdcall、cdecl、fastcall

933 :デフォルトの名無しさん:04/05/08 16:52
>>930
そうだったか…

934 :デフォルトの名無しさん:04/05/08 16:58
呼び出し規約は __stdcall __thiscall __fastcall __cdecl だな。Windows環境だと。
ちなみに先頭にアンダーバーがついてるので処理系依存だな。

935 :デフォルトの名無しさん:04/05/08 17:01
呼び出し規約ってDLL作成の時にしか気にしてないが
他になんか必要な場合ある?


936 :デフォルトの名無しさん:04/05/08 17:03
食い違ってるとスタティックリンクすらできん。

937 :デフォルトの名無しさん:04/05/08 17:05
>>934
__thiscallと書きたい気分はわからんでもないが、とりあえず手元のVC7にそんなキーワードはなさげだったぞ。
あとアンダーバー二つはM$拡張みたいだが、詳しいことは漏れもよくわからん。

938 :デフォルトの名無しさん:04/05/08 17:06
>>924
D言語

939 :デフォルトの名無しさん:04/05/08 17:11
thiscall
C++メンバ関数用
基本的には__cdeclと同じだが、最後にthisをpushする。


940 :デフォルトの名無しさん:04/05/08 17:12
thiscall はキーワードではないので、プログラムで明示的に指定できません。


941 :デフォルトの名無しさん:04/05/08 17:18
より詳しくは、それぞれのコンパイラスレでどうぞ。

942 :デフォルトの名無しさん:04/05/08 17:18
>>935
APIのコールバック関数。

943 :デフォルトの名無しさん:04/05/08 17:21
>>939 わかりやすい誤訳だな。

944 :デフォルトの名無しさん:04/05/08 17:24
>>943
はぁ?
ttp://www.microsoft.com/japan/developer/library/vccore/_core_thiscall.htm
でも見てろ。

945 :デフォルトの名無しさん:04/05/08 17:24
API絡みぐらいじゃないとやっぱ使わないか。

946 :デフォルトの名無しさん:04/05/08 17:28
>>943
じゃあ分かり難い誤訳でもご覧になって落ち着いてください。
http://support.microsoft.com/default.aspx?scid=kb;JA;74586


947 :デフォルトの名無しさん:04/05/08 17:33
>>943
ttp://www.microsoft.com/italy/survey/surveycom_jp.aspx

948 :943: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

949 :デフォルトの名無しさん:04/05/08 17:36
Whidbeyがいつの間にかVisualStudio2005に名前決まったんだな。

950 :919:04/05/08 18:09
蒸し返すけど要はホスト環境とコンパイラ依存ということですかね
関数の呼び出し規約の修飾子は。
つまり、WINAPI向けにコンパイラの機能を拡張しただけだと

951 :デフォルトの名無しさん:04/05/08 18:18
x86以外の大抵のCPUには呼び出し規約は一つしかない。
x86に呼び出し規約がたくさんあるのも、WINAPI向けってわけじゃぁない。

↓ここの"The history of calling conventions"シリーズがかなり詳しい(まだ全部読めてないけど)。
http://weblogs.asp.net/oldnewthing/archive/2004/01.aspx

952 :デフォルトの名無しさん:04/05/08 19:21
NULL character を含む文字列 ("aaa\0bbb\0ccc\0\0" みたいなの) を std::string で
扱いたいんだけど、どうやって代入すればいいですか?

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

だと、"aaa" までしか代入できません。

953 :デフォルトの名無しさん:04/05/08 19:25
basic_string(const E *s, size_type n, const A& al = A());
basic_string(const_iterator first, const_iterator last, const A& al = A());

954 :デフォルトの名無しさん:04/05/08 19:33
\x00は?

955 :デフォルトの名無しさん:04/05/08 19:44
>>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 ); }

956 :デフォルトの名無しさん:04/05/08 20:22
>>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;

どうもでした。

957 :デフォルトの名無しさん:04/05/08 20:28
こまかい突っ込みですまんが。
× char *p = "aaa\0bbb\0ccc\0\0";
○ char const *p = "aaa\0bbb\0ccc\0\0";

958 :デフォルトの名無しさん:04/05/08 20:34
>>956
>>955の書いたテンプレート関数なら
std::string s;
assign_literal(s, "aaa\0bbb\0ccc\0\0");
で済みますな。長さを別途与えなくてもいい

959 :デフォルトの名無しさん:04/05/08 21:38
>× char *p = "aaa\0bbb\0ccc\0\0";
ほんと糞下らんこと言う奴いるな。
いったん初期化したあとで別のアドレス指すのかもしれんだろうが。

960 :デフォルトの名無しさん:04/05/08 21:44
>>959


961 :デフォルトの名無しさん:04/05/08 21:46
>>957
お前の意図したコードは↓じゃないか?

char const * const p = "aaa\0bbb\0ccc\0\0";

962 :デフォルトの名無しさん:04/05/08 22:07
>>959 http://www.kuzbass.ru/docs/isocpp/future.html#depr.string

963 :デフォルトの名無しさん:04/05/08 22:07
char const ってあったっけ?
const char *const p = ...
ならあると思うが


964 :デフォルトの名無しさん:04/05/08 22:18
chsr constは const char と同意。間違いない。それぐらい調べてからコメントしろ。
というより const が直後を修飾すると考えると
char const の方がbetter だと思う。特にpointerのアドレスか内容かをconst指定する際
char const *p;
はわかりやすいと思う

965 :デフォルトの名無しさん:04/05/08 22:20
>>964
> char const の方がbetter だと思う。

そうか、読みにくいから俺はいつも const char だ。

966 :デフォルトの名無しさん:04/05/08 22:23
>>964
> const が直後を修飾すると考えると

漏れの場合その道理でいくとconstが*にかかって
ポインタを移動できなくなるんじゃないかと誤解するなぁ。

967 :デフォルトの名無しさん:04/05/08 22:27
次スレ?
http://pc5.2ch.net/test/read.cgi/tech/1078193971/

968 :デフォルトの名無しさん:04/05/08 22:35
>>constが*にかかって
char *p;
で*pをポインタと考えてるからだろうが!違うぞ pがポインタで*pはその内容を意味する。
だから
char const *p
は p の指す内容を不変とすること。
char * const p;
は p の指すアドレスそのものを不変とすること。

969 :デフォルトの名無しさん:04/05/08 22:43
型を修飾すると考えるほうがわかりやすいような希ガス。

970 :デフォルトの名無しさん:04/05/08 22:48
>>964
constが直後を修飾するという考えなら
const charでいいだろ。あくまでchar型のインスタンすを定数と
考えるんだからな。
long だってlong int ってするようにな。


971 :966: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 *にしているというのもある。

972 :デフォルトの名無しさん:04/05/08 23:03
というか、char constって書き方ができるってのはいいが、
そういう表現を積極的に採用してる書籍ってあるのか?
ストラウストラップだってconst charだろ?
char型の・・・ただのchar型でなくて、定数のchar型・・・
というような順の修飾と考えたほうが自然だと思うけどなぁ。

char constという表現を知らんやつがいても仕方ないぐらい、
特殊な書き方だと思うよ。

973 :デフォルトの名無しさん:04/05/08 23:06
アスタリスクを通る縦線を引いて、分類せよ。って書いてあったじゃん。

974 :デフォルトの名無しさん:04/05/08 23:07
>char *p="null po";
>はおかしな表現に思えてしまう。

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

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


であるからな。厳密に考えるとCにはおかしな書式がいくつかある。

975 :デフォルトの名無しさん:04/05/08 23:08
>>974
( ゚д゚)ポカーン

976 :デフォルトの名無しさん:04/05/08 23:09
>>972
それはお前がバカだから、

Effective C++

読んでから言え。もっとも積極的に勧めてるわけじゃなく、
両方読める必要があると言っている。
お前はそれを知らなかったんだから、知る必要があったわけだ。
無知をひけらかして恥さらすな。

977 :デフォルトの名無しさん:04/05/08 23:13
宣言したインスタンスに対し初期化するという意味なら別におかしいとは
思わんよ。
どんな修飾がついてたって、インスタンスはpであってその内容を代入してる
わけだから。修飾子とインスタンスを切り離して考えれば自然ではある。

char *p = "おまえがバカ";
でいいと思う。

978 :966:04/05/08 23:13
>>972
const char *で宣言してもコンパイラのエラー出力ではchar const *になってたりするけどな。

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

メンバ関数に対するconstでもないしそろそろCスレ行きか。

979 :デフォルトの名無しさん:04/05/08 23:15
ルールを単純にしたいがため、「constは左の型を修辞する」というルール一本にした。
他所から拾ってきたソースや過去の自分のソースで const char とか書いてあるのを見たときに少し考えてしまう。

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

980 :デフォルトの名無しさん:04/05/08 23:16
>long だってlong int ってするようにな。

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

int long x;

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

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

例を持ち出すならもっと的確な事例を挙げてろ

981 :デフォルトの名無しさん:04/05/08 23:17
>>978
関数名は関数型を持ち、関数型は関数へのポインタへ暗黙の変換が効く。
関数への参照という型も存在する。
この認識がないと、templateで関数型を扱うものが理解できない。

982 :デフォルトの名無しさん:04/05/08 23:20
>>974
> 本来は
> char *p;
> p="おまえはバカ";

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

>>976
何熱くなってんだ ?
誰も const char と char const のどちらかしか読めないなんて書いてないぞ。

983 :デフォルトの名無しさん:04/05/08 23:21
>>976
バカはおまえだ。俺は両方の表現知ってたし、あくまで
const char より char const の方を押してる書籍の話を
言ってんだ。それが積極的ってことだろ。Effe C++だって
char constを押してるわけじゃない。知る必要とかじゃなくて
どっちが一般的かって話してんだよ。それからお前はEffe C++
がすべてか。バ・カ・タ・レ。


984 :デフォルトの名無しさん:04/05/08 23:22
>話はちょっと反れて関数のポインタが&をつけなくても

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



985 :デフォルトの名無しさん:04/05/08 23:22
これ以上constの位置について話すのならコチラへどうぞ→http://pc5.2ch.net/test/read.cgi/tech/1078193971/

986 :デフォルトの名無しさん:04/05/08 23:25
なにあつくなってんだクズども

class Class { ... } typedef C;


987 :デフォルトの名無しさん:04/05/08 23:26
>>986
お前のことだ(w

988 :デフォルトの名無しさん:04/05/08 23:28
>>983
お前が何にも知らんことは文面から用意に察することができたのでバカでも知ってる教科書名を挙げてやったのよ。
一通りよんでりゃ、const の前置、後置ぐらいでスレ汚すバカは居ないだろうからな。勉強になったことを感謝しろ。

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





989 :デフォルトの名無しさん:04/05/08 23:28
>>984
それぐらい理解しろよ。
人と話したことないのか ?

990 :966:04/05/08 23:29
>>977
>>971と同じ意見だよな。ありがとう。
が、あくまでソースから受ける印象の話であって何が正しいという話はしていないことに注意。

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

>>981
恥ずかしながら関数型という言葉を知らないんだが具体例をきぼん。
ということでC++の話題へ。

991 :デフォルトの名無しさん:04/05/08 23:29
とりあえず落ち着け。
>>988
海溝は深いと言うべきだな。

992 :デフォルトの名無しさん:04/05/08 23:30
>>988
しまいにゃ言えることはその程度かw。死ね。

993 :デフォルトの名無しさん:04/05/08 23:30
>>952
最後に'\0'を2回付けたいのなら"〜\0"で十分では?

994 :デフォルトの名無しさん:04/05/08 23:33
議論は構わないがそう熱くなるな。
端から見てると単なるケンカにしか見えないから。

995 :デフォルトの名無しさん:04/05/08 23:34
まず日本語の読解力を身につけろよ。


996 :デフォルトの名無しさん:04/05/08 23:36
>と言われても、
>char const * const p;
>p = "NULLPO";
>と書くと警告でちゃうぞ。

それはね、内容もアドレスも不変と宣言してるのに、宣言した時点より跡で代入してるから。

997 :デフォルトの名無しさん:04/05/08 23:36
すいません熱いところ申し訳ないんですが次スレはドコですか

998 :デフォルトの名無しさん:04/05/08 23:43
>>984
>それぐらい理解しろよ。
>人と話したことないのか ?

君ポインタの扱いが十分わかってないね。
関数のポインタなんて表現はありえない。
つまり、わかってる奴は絶対こういう表現はしない。


999 :デフォルトの名無しさん:04/05/08 23:45
>バカはおまえだ。俺は両方の表現知ってたし、
バーカ。こんなこと知ってるぐらいのことを何宣言してんだ。アホの活造りかおまえ。

1000 :デフォルトの名無しさん:04/05/08 23:46
1000! って言うか次スレ…

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

235 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)