■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

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

前スレ part36
http://pc5.2ch.net/test/read.cgi/tech/1096304546/

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり

2 名前:v(^・^)v :04/10/24 00:00:17
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


3 名前:v(^・^)v :04/10/24 00:00:31
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/


4 名前:v(^・^)v :04/10/24 00:01:22
■基本■
[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://www.open-std.org/jtc1/sc22/wg21

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)

5 名前:v(^・^)v :04/10/24 00:01:49
■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/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/

6 名前:v(^・^)v :04/10/24 00:03:04
■Books(Templateまわり)■
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/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/

7 名前:デフォルトの名無しさん :04/10/24 00:04:42
>>1乙!

8 名前:v(^・^)v :04/10/24 00:05:03
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/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

9 名前:デフォルトの名無しさん :04/10/24 00:05:39
age

10 名前:v(^・^)v :04/10/24 00:06:29
STLつかうと一気に実行ファイルサイズが10倍に?!

11 名前:v(^・^)v :04/10/24 00:06:52
>>10
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

12 名前:v(^・^)v :04/10/24 00:07:19
>>11
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

13 名前:v(^・^)v :04/10/24 00:08:31
■関連スレ■
【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL/WTL Part3
http://pc5.2ch.net/test/read.cgi/tech/1095442366/

14 名前:デフォルトの名無しさん :04/10/24 00:08:34
実行ファイルなんていくら大きくなっても気にしない

15 名前:v(^・^)v :04/10/24 00:08:49
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

16 名前:v(^・^)v :04/10/24 00:09:04
■コンパイラスレ■
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/

17 名前:v(^・^)v :04/10/24 00:09:43
>>15
#include <stdafx.h>

後死ね。

18 名前:v(^・^)v :04/10/24 00:09:48
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part15
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
C++Builder相談室 Part11
http://pc5.2ch.net/test/read.cgi/tech/1094749339/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/

19 名前:v(^・^)v :04/10/24 00:10:13
>>17
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

20 名前:デフォルトの名無しさん :04/10/24 00:10:18
>>17
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

21 名前:デフォルトの名無しさん :04/10/24 00:10:41
行列計算用のライブラリで計算速度が速く使いやすいおすすめのものがあれば
紹介していただけないでしょうか?


22 名前:v(^・^)v :04/10/24 00:12:10
テンプレ終了。
待ってろって言ったのに埋めやがって、
前スレに次スレへのリンク貼れなかったじゃないか愚か者ども。

23 名前:デフォルトの名無しさん :04/10/24 00:12:44
>>21 >8

24 名前:デフォルトの名無しさん :04/10/24 00:12:49
>>10,11,12,15,17,19,20
テンプレ乙!
>>14
テンプレにマジレス乙!
>>21
Blitz++ http://www.oonumerics.org/blitz/ていうかテンプレくらい見ろ

25 名前:デフォルトの名無しさん :04/10/24 00:14:13
>21
あとは ublas とか?

26 名前:デフォルトの名無しさん :04/10/24 00:16:56
4x4 行列, 単精度浮動小数点数限定なら DirectX でも良いけど。

27 名前:デフォルトの名無しさん :04/10/24 00:18:24
>>21
liboctave



28 名前:全スレ>>998 :04/10/24 00:18:28
やっと分かった
va_list 版ってのは関数名に v の prefix つけて、va_end をしないのが基本なの?

29 名前:前スレ>>998 :04/10/24 00:32:50
typeid みてみると va_list って char* なのか…
てことはポインタを進ませながら無理矢理キャストするって実装なのか……?
もしそうなら参照で渡さない限り va_end しても意味ないのか

30 名前:デフォルトの名無しさん :04/10/24 00:37:11
どう実装されているかはstdarg.hを見れば分かる。

31 名前:デフォルトの名無しさん :04/10/24 01:52:48
>>28
すまん、さっきのコードは間違いだらけだった。
↓正しくはこんな感じ。
ore_printf(const char *format,...) {
static int count = 0;
printf("[%08.8d]", count++);
va_list arg_list;
va_start(arg_list, format);
vprintf(format, arg_list);
va_end(arg_list);
print("\n");
}

関数名云々は趣味の問題だけど標準関数の命名規則に従っておいたほうが第三者が見た時に分かりやすいかと。
va_list まわりの処理は慣れるまでは他人の書いたコードを猿真似するのがいいと思うよ。
あと、va_list の実装は環境や処理系によって極端に異なるから基本的には気にしちゃダメ。

32 名前:デフォルトの名無しさん :04/10/24 01:53:52
>>28
vprintf とかは、可変長引数をダラダラ渡す代わりに
va_list を1個だけ渡すのよ。そんだけ。

別の言い方をすれば、可変長引数はそのまま渡せないから
va_list として渡すと言うこと。でも、普通の printf では va_list を
単なる値として受け取っちゃうから、va_list を va_list として
受け取って使ってくれる関数が必要になるわけさ。
それが v******** っつー関数群。

そんで、va_end するのは va_start した関数と同じ関数であるべきだから、
va_list を渡された関数が va_end しないのは当然のこと。

33 名前:デフォルトの名無しさん :04/10/24 01:56:59
>>31
ウホッ。リロードせずに書いたらかぶっちまったスマソ。

>>28
具体例で説明するなら下みたいな感じ。

nurupo(const char* ga, ...) {
va_list arg_list;
va_start(arg_list, ga);
vnurupo(ga, arg_list);
va_end(arg_list);
}

vnurupo(const char* ga, va_list arg_list) {
実装
vprintf(ga, arg_list); みたいな事も出来る。
}

34 名前:デフォルトの名無しさん :04/10/24 02:09:10
>>33
>ウホッ。リロードせずに書いたらかぶっちまったスマソ。
まぁ気にするな。

  ∧_∧
  ( ・∀・) | | ガッ
 と    ) | |
   Y /ノ 人
    / ) <  >__∧∩
  _/し'  . V`Д´)/
 (_フ彡      /  ←>>33

35 名前:デフォルトの名無しさん :04/10/24 16:50:48
C++のライブラリを集めるスレッドとか無いの?

36 名前:デフォルトの名無しさん :04/10/24 16:54:55
計算…uBLAS,blitz++
ネット…ACE
正規表現…boost
スレッド…boost
その他…boost
暗号…Crypto++
GUI…gtkmm,QT

37 名前:デフォルトの名無しさん :04/10/24 16:57:40
XML…Xalan-C++,Xerces C++,ICU

38 名前:デフォルトの名無しさん :04/10/24 19:01:47
#include <vector>
#include <deque>

main()
{
std::vector<int> vec(20);
for(int i=0;i<20;++i)
 vec[i] = i;
std::deque<int> deq(vec.begin(), vec.end());
}

main()
{
std::deque<int> deq(20);
for(int i=0;i<20;++i)
 deq[i] = i;
std::vector<int> vec(deq.begin(), deq.end());
}

上のmainが通るのに
下のmainが

[C++エラー] Could not find a match for
'std::vector<int,std::allocator<int> >::vector(std::deque<int,std::allocator<int> >::iterator,
std::deque<int,std::allocator<int> >::iterator)'.

で通らないのは、どうしてですか?

39 名前:デフォルトの名無しさん :04/10/24 19:13:00
トオルよ

40 名前:デフォルトの名無しさん :04/10/24 19:35:58
通らないとおかしい
環境書け

41 名前:デフォルトの名無しさん :04/10/24 19:41:16
BCB3です。
Borland C++ 5.3 for Win32 Copyright (c) 1993, 1998 Borland International
これコンパイラ部分だけフリーの新しいのに入れ替えられないのかな…

42 名前:デフォルトの名無しさん :04/10/25 17:10:05
>>38はどういうエラーなの?
BCB3ではイテレータ用のコンストラクタが実装されていないということ?

43 名前:デフォルトの名無しさん :04/10/25 18:48:07
Copyright の年から考えてISO C++には対応してないと考えるほうが自然かと

44 名前:デフォルトの名無しさん :04/10/25 19:08:51
newで作成されたTestクラスのインスタンスをdeleteする場合、
下記のように作成したインスタンスを参照に代入してdeleteしても問題ないのでしょうか?

class Test{};

int main()
{
Test* test = new Test();

Test& rTest = *test;

delete &rTest;
}


45 名前:デフォルトの名無しさん :04/10/25 19:13:24
>>44
保障はされてないんじゃないかな・・・。

46 名前:デフォルトの名無しさん :04/10/25 19:23:02
>>45
自身なさげなので敢えて聞くのも申し訳ないですけど
根拠とかあります?


47 名前:デフォルトの名無しさん :04/10/25 19:51:18
>>46
いや、全然ない。

48 名前:デフォルトの名無しさん :04/10/25 19:58:53
>>44
参照変数のアドレスは参照元のアドレスだから大丈夫でしょ。
つーかなんだその怪しげなコードは。

49 名前:デフォルトの名無しさん :04/10/25 20:01:55
>>44
printf("%p %p", test, &rTest);

同じ値が出ればおkって事で。

50 名前:デフォルトの名無しさん :04/10/25 20:05:27
あの偉大なヒトラー総統も一兵士だったときには見張りをなさっていたのでしょうか?

51 名前:デフォルトの名無しさん :04/10/25 20:13:42
>>50
歩哨はされてないんじゃないかな・・・。


52 名前:デフォルトの名無しさん :04/10/25 20:19:15
正しく入力すればこれもOK?
int main ()
{
int* p = new int();
int address;

std::cout << "p = " << int(p) << std::endl << "p2 = ";
std::cin >> address;

delete reinterpret_cast<int*>(address);
}

53 名前:デフォルトの名無しさん :04/10/25 20:22:44
>>44
環境によってはポインタから参照になったときに情報が欠落する可能性もあるんじゃないかなぁ。


54 名前:859 :04/10/25 21:11:29
>>44
多くの処理系でこのプログラムは実行できるのは事実
だけど、インスタンスへのリファレンスの先が
なくなってしまうのだから、限りなくおすすめできない。

もし Test がメンバ変数を持っていて new Test で割当て
られた領域が delete されたあと、再利用されたとしたら
その後の rTest 経由のこの領域に対するアクセスは期待
しない動作を生むことになる。

メンバー変数さえなければ下みたいなプログラムも
可能な処理系が多いんだけど、限りなく裏技だなぁ。
struct Test { void M() { cout << 1; } };
int main() { ((Test*)0)->M(); }

55 名前:デフォルトの名無しさん :04/10/25 21:13:41
>>54
それはぽいんたでもおなじではないか

56 名前:デフォルトの名無しさん :04/10/25 21:14:37
>>55
そう、それを言わんがために、最後の例を書いた。

57 名前:デフォルトの名無しさん :04/10/25 21:18:12
>>56
それはにゅうをつかうなということではないか

58 名前:デフォルトの名無しさん :04/10/25 23:04:21
>>44 は全く問題ないでしょ。
要はリファレンスのアドレスとは何か? という事になる。
参照先オブジェクトのアドレスでしかありえない。
他に何のアドレスがあるというの?

59 名前:デフォルトの名無しさん :04/10/25 23:42:56
friendクラスと被friendクラスの関係を、UMLで表現する場合ってどうすればいいでしょうか?

あと、あるクラスのメンバとして、TemplateHoge<int> m_hogelist;というメンバが定義されていた場合、
これをUMLで表現するにはどうすればいいでしょうか?

できれば、AAで表現していただけるとありがたいです。
もし、無理だったら、エクセルでつくっていただいて、アプロダにアップしてくれるだけでいいです。


60 名前:デフォルトの名無しさん :04/10/25 23:44:28
>>58
const参照の場合複製される可能性があるっけ?

61 名前:デフォルトの名無しさん :04/10/26 00:01:52
>>60
ないでしょう。もしあったとしたらconst参照は(特に関数呼び出しにおいて)
その意義の大半を失いませんか?

62 名前:デフォルトの名無しさん :04/10/26 00:04:50
>>59
> あと、あるクラスのメンバとして、TemplateHoge<int> m_hogelist;というメンバが定義されていた場合、
bind

あるいはクラステンプレートとは別に TemplateHoge<int> という「クラス」を用意してしまう。

63 名前:デフォルトの名無しさん :04/10/26 00:08:08
>>62
AAでかいてくれるとウレシイです^^


64 名前:デフォルトの名無しさん :04/10/26 00:10:35
>>60
そんな仕様だったらコピー禁止オブジェクトへのリファレンスが作れなくなる

65 名前:デフォルトの名無しさん :04/10/26 00:34:17
>>59
禿しくスレ違いの悪寒。

66 名前:デフォルトの名無しさん :04/10/26 17:46:35
ただの依存にしといて friendとか注釈つけとけ

67 名前:マイク ◆yrBrqfF1Ew :04/10/26 17:50:41
>環境によってはポインタから参照になったときに情報が欠落する可能性もあるんじゃないかなぁ。

ポインタからリファレンスになって欠落する情報ってなんだ?
聞いたことねえな

68 名前:デフォルトの名無しさん :04/10/26 20:03:13
>>67
ガッ じゃないか?w

69 名前:デフォルトの名無しさん :04/10/26 20:42:08
int a = 99;
int c( a );
が VC7.1 でコンパイル通るんですが、このような
コンストラクタ的な初期化は C++ の規格で許されてるんですか?

70 名前:デフォルトの名無しさん :04/10/26 20:45:00
普段どーやってコピーコンストラクタ書いてるんだろう…

71 名前:デフォルトの名無しさん :04/10/26 20:51:54
>>69
許されています。

72 名前:マイク ◆yrBrqfF1Ew :04/10/26 21:07:04
>>68
NULLを逆参照してリファレンスにしてよかったか?
int &ref_to_null(*reinterpret_cast<int*>(NULL));

73 名前:デフォルトの名無しさん :04/10/26 21:25:15
>>72
NULL に対して * 演算子を適用した時点で、すでに未定義。鼻から悪魔が
出てくるとか、いきなり PC が暴走しても文句言えない。

74 名前:マイク ◆yrBrqfF1Ew :04/10/26 21:29:03
あそう。

75 名前:デフォルトの名無しさん :04/10/26 21:51:31
>>67
たとえばポインタの指している先のブロックサイズとか。
一般的な実装ではメモリブロックの前に埋め込んでおくとか別の場所に隠しておくが、
ポインタ自体が保持してはいけないという規則は無い。
仮にそういう実装があれば参照になったときに欠落する可能性はある。

76 名前:デフォルトの名無しさん :04/10/26 21:53:52
C++で∫_1^10 (cos x - 0.87) * cos x dxの数値解を求めたいのですが、
どうやってコーディングすればよいか解かりません。
どなたか教えていただけませんか?

77 名前:デフォルトの名無しさん :04/10/26 21:54:56
>>76はHSPスレにすら投げる無差別マルチ

78 名前:デフォルトの名無しさん :04/10/26 21:55:20
>>76
単純に不定積分してから
その数式で計算すればいいのでは?

79 名前:デフォルトの名無しさん :04/10/26 22:00:03
∫て言いたかっただけだろ (プ

80 名前:78 :04/10/26 22:03:55
>>76
台形公式とかシンプソンの公式とかで
x の範囲を分割して計算するとか、
そういうの期待しているの?
(HSP のスレで 78 の回答がダメそうに言われたんだけど)

81 名前:デフォルトの名無しさん :04/10/26 22:13:28
>>76
おとなしく Mathematica か Maple でも買っとけ。

82 名前:デフォルトの名無しさん :04/10/26 22:28:57
>>76
#include <stdio.h>
#include <math.h>
double func(double x) {
return (cos(x) - 0.87) * cos(x);
}
double integrate(double x1, double x2, int n) {
int i;
double sum;
double x;
double h;
h = (x2 - x1) / n;
x = x1;
for(sum = 0, i = 0; i < n; i += 2) {
sum += func(x) + 4 * func(x + h) + func(x + 2 * h);
x += 2 * h;
}
return sum * h / 3.0;
}
int main() {
printf("%lf\n", integrate(1.0, 10.0, 100));
}

83 名前:マイク ◆yrBrqfF1Ew :04/10/26 22:39:47
>>75
あそう

84 名前:デフォルトの名無しさん :04/10/26 23:15:59
>>75
いや、そんな実装はありえないだろ。
大体ブロックサイズってなんなんだよ。
new したものだけがポインタじゃないんだから
ブロックサイズなど保持する意味はない。


85 名前:デフォルトの名無しさん :04/10/26 23:26:35
2chの弱点発見!!!

2chでは、UMLがかけない!

ひろゆきさん、UML描画機能つきのギコナビつくって・・・おねがい。


86 名前:デフォルトの名無しさん :04/10/26 23:28:15
>>85
TeXの書式を認識してくれたら結構便利だよね

87 名前:デフォルトの名無しさん :04/10/26 23:29:01
User Mode Linux

88 名前:デフォルトの名無しさん :04/10/27 16:10:41
FILE *FP = fopen( "Hoge.txt", "wt");
char S[ 256];
sprintf( S, "TEST MESSAGE"),   // ;じゃない
fputs( S, fp),            // ;じゃない
fputs( "\n", fp);
fclose( FP);

これってコンパイラ通っちゃうんですけど、C++はいいんでしたっけ?

89 名前:デフォルトの名無しさん :04/10/27 16:26:59
はい

90 名前:デフォルトの名無しさん :04/10/27 16:29:53
そういえば昔学校で習ったきり、unionって使ったこと無いんだけど
皆々様はどう?

91 名前:デフォルトの名無しさん :04/10/27 16:40:39
>>90
使用例:組込みの入出力周り, インタプリタ, etc..

92 名前:デフォルトの名無しさん :04/10/27 16:52:59
>>91
縁がない分野ばかりだ、ちゃんと使い道あるのねん
サンクス

93 名前:デフォルトの名無しさん :04/10/27 21:32:41
>>88
んなもん、Cでも問題なく通るぞ。
#コメント(//)以外は。

94 名前:デフォルトの名無しさん :04/10/27 21:46:53
>>88
入門書を一から読み直せ
(C++って言ってるけど内容は100%Cのような…ヌルポ)

95 名前:デフォルトの名無しさん :04/10/27 21:59:56
  ∧_∧  \\
  ( ・∀・)   | |  /〃_/_〃
 と    )   | | .∧   / / / / /
   Y /ノ    人 ./   / /   ノ
    / )    <  >__∧∩
  _/し'_//. V`Д´)/ ←>>94
 |     /       /
 | 100t 彡

96 名前:デフォルトの名無しさん :04/10/28 06:32:56
いきなりですみませんが質問させて下さい。
コンパイラの最適化は考慮に入れないとして、
int func(int i);
class X {
  int mfunc(int);
}
void main(){
  X x;
  int (*pfunc)(int) = func;

  int a = func(1); // 行a
  int b = pfunc(2); // 行b
  int c = x.mfunc(3); // 行c
}
の場合行aとbの実行速度に違いはないと思ってますがcはa,bと
比べて呼び出しにコストがかかるんでしたっけ?
それともコストがかかるのは仮想関数呼び出しの時でしたっけ?

参考文献等ありましたら教えていただけないでしょうか。

ただし素人はひっこんでろ。


97 名前:デフォルトの名無しさん :04/10/28 06:33:59
>ただし素人はひっこんでろ。
この一行がネタ回答を欲しがってるようにしか見えない

98 名前:デフォルトの名無しさん :04/10/28 06:36:10
自分で最適化無しでコンパイルしてベンチとればすぐ分かるような。

99 名前:96 :04/10/28 06:46:26
>>98
いや、結果が知りたいんじゃなくって
どうしてそうなるのかがしりたいんだよ。


100 名前:デフォルトの名無しさん :04/10/28 06:53:26
まずaとbに違いが無いわけねーだろカス素人が

101 名前:デフォルトの名無しさん :04/10/28 06:58:33
aとbは機械語レベルでは一緒
仮想関数はVTBLを介するからcより遅い
cがどうなるかはワカンネ

102 名前:デフォルトの名無しさん :04/10/28 07:04:54
機械語が分かるならthiscallでぐぐれば分かる

103 名前:デフォルトの名無しさん :04/10/28 07:16:49
オブジェクトの参照(const Object &) に NULL を入れたら暴走しますた。
仕様ですか?

104 名前:デフォルトの名無しさん :04/10/28 07:18:22
ポインタと違って参照にNULLは入れられません。

105 名前:デフォルトの名無しさん :04/10/28 07:20:04
ありがとうございまつ。理解しますた。

106 名前:デフォルトの名無しさん :04/10/28 07:45:00
catch( const std::exception& e ) みたいに、
catch に const 入れるのって冗長ですか?

文字列リテラル投げるときは必要なんでしょうけど…

107 名前:デフォルトの名無しさん :04/10/28 07:47:43
どうせコピーされた物が渡されるので付けても付けなくても一緒

108 名前:デフォルトの名無しさん :04/10/28 09:10:40
cは最適化の前提が無いならthisポインタ積む分遅いだろ。

109 名前:デフォルトの名無しさん :04/10/28 10:24:08
>>107
そりゃそうですけど…
やっぱり冗長ですかねぇ

110 名前:デフォルトの名無しさん :04/10/28 14:21:30
>>108
96じゃない素人ですけど
mfunc(X*,int)
という形になってpush,popする分遅いということですか?

111 名前:デフォルトの名無しさん :04/10/28 14:21:54
そもそも const は冗長な場合の方が多い。
冗長だから付けないっていう理由はおかしい。


112 名前:デフォルトの名無しさん :04/10/28 14:51:50
>>111
「冗長」の意味を調べ直されたし


113 名前:デフォルトの名無しさん :04/10/28 21:41:48
>>110
積むといってもレジスタかも知れんが、そういうこと。

114 名前:デフォルトの名無しさん :04/10/28 22:12:49
>>112
別に111の言い方も問題ないだろ。

115 名前:デフォルトの名無しさん :04/10/28 23:08:00
>>107,109
参照で受けてるから、コピーされないよ。
const 付けるかどうかの判断は、
その後 e の内容を改変するようなオペレーションが
あるかどうかを、コンパイル時に見つける必要があるか
どうかによって決める。

116 名前:デフォルトの名無しさん :04/10/28 23:48:33
参照で無くてもつけたほうが良い。
パラメータを変更するような関数は設計的によろしくないから

117 名前:デフォルトの名無しさん :04/10/29 00:02:31
>>115
コピーしたオブジェクトへの参照を受け取るんだと思うんだが…

118 名前:デフォルトの名無しさん :04/10/29 01:25:37
>>117
struct A {
A() { std::cout << "A::A()" << std::endl; }
A(const A&) { std::cout << "A::A(const A&)" << std::endl; }
A& operator=(const A&) { std::cout << "A::operator=(const A&)" << std::endl; }
};

try
{
try
{
throw A();
}
catch(const A& a)
{
std::cout << "catch 1" << std::endl;
throw;
}
}
catch(const A& a)
{
std::cout << "catch 2" << std::endl;
}

VC6だとコピーが一切起きないんだけど

119 名前:デフォルトの名無しさん :04/10/29 02:01:51
15.1 -5-
"If the use of the temporary object can be eliminated
without changing the meaning of the program
except for the execution of constructors and destructors
associated with the use of the temporary object,
then the exception in the handler can be initialized directly
with the argument of the throw expression."

120 名前:デフォルトの名無しさん :04/10/29 02:14:29
いい加減VC6見たいなまだC++の仕様が固まってない頃ので検証すんの辞めろよ。

121 名前:デフォルトの名無しさん :04/10/29 02:51:34
>>120
g++ でもコピー起きないよ。

structE {
~E() { cout << "~E()" << endl; }
E() { cout << "E()" << endl; }
E( E const& ) { cout << "E( E const& p )" << endl; }
};

int
main() {
try { throw E(); } catch ( E& e ) {}
}


122 名前:デフォルトの名無しさん :04/10/29 03:01:29
>>116
それは思い込みだな
例外時のトレース情報をとりたいと思ったらどうする?

123 名前:デフォルトの名無しさん :04/10/29 03:27:15
インスタンスを直接throwすると、コピーが起きないのだろうか…。
適当な場所で A a; と作ってから、throw a; とすると、VC6でもVC7.1でもコピーコンストラクタが走った。

ちなみに、bcc32では、直接でも一旦作ってからでも、コピーコンストラクタが走った。

124 名前:デフォルトの名無しさん :04/10/29 03:39:50
>>123 >>119

125 名前:デフォルトの名無しさん :04/10/29 08:45:40
執拗にVC6に拘る厨房
・アンチマイクロソフト厨
・VisualStudioを買えない貧乏人
・新しいPCすら買えない乞食
・古いアプリケーションの機能追加にC++の厳密な使用を持ち込む阿呆
・.NETを一切認めない狂信的Win32信者

126 名前:デフォルトの名無しさん :04/10/29 09:30:26
More Effective C++ 項目13: 参照で例外を捕まえる

を参照のこと

127 名前:デフォルトの名無しさん :04/10/29 10:27:27
VC6どうのこうのは他所でやってくれ

128 名前:デフォルトの名無しさん :04/10/29 12:14:31
typenameって直後に書いてあるものが型名であることを表すと思ってたんだけど、
gcc version 3.3.1 (cygming special)で以下ようにするとエラーになります。
$ cat test.cpp && g++ test.cpp
#include<iostream>
#include<string>
using namespace std;
template< typename Foo > void func( typename Foo val ) {
  typename Foo res;
  res = val + val;
  cout<< res<< endl;
}
int main(void) {
  func<int>(774);
  func<string>( string( "String" ) );
  return 0;
}
test.cpp:4: error: syntax error before `)' token
test.cpp: In function `void func(...)':
test.cpp:5: error: syntax error before `;' token
test.cpp: In function `void func(...) [with Foo = int]':
test.cpp:10: instantiated from here
test.cpp:6: error: `val' undeclared (first use this function)
test.cpp:6: error: (Each undeclared identifier is reported only once for each
function it appears in.)
test.cpp:6: error: `res' undeclared (first use this function)
test.cpp: In function `int main()':
test.cpp:11: warning: cannot pass objects of non-POD type `struct std::string'
through `...'; call will abort at runtime


129 名前:デフォルトの名無しさん :04/10/29 12:20:13
>>128
-template< typename Foo > void func( typename Foo val ) {
- typename Foo res;
+template< typename Foo > void func( Foo val ) {
+ Foo res;


130 名前:128 :04/10/29 12:30:56
>129
dクス。コンパイルとおりました。typenameがtemplate<>の中にしか書けないのは
C++の規格?それともgccの制限?

131 名前:デフォルトの名無しさん :04/10/29 12:33:43
typenameはそれが型名だと確定できないとき以外はつけてはいけない

132 名前:128 :04/10/29 12:40:34
>131
あー、なるほど。その説明でスッキリしました。
ありがd。

// intやdoubleとかにもtypename付けられるようになってると
// 文法の対象性が良くなる気がする。


133 名前:デフォルトの名無しさん :04/10/29 12:53:10
>>132
たぶん誤解してる
typenameは以下のように使う
Fooの前のtypenameを外してコンパイルした結果と比較してみて
環境によってはtypenameはいらないようだけどg++(3系)だと必要
#include<iostream>
#include<string>
using namespace std;
template< typename Foo > void func( Foo val ) {
typename Foo::value_type res;
res = val.size () + val.size ();
cout<< res<< endl;
}
int main(void) {
func<string>( string( "String" ) );
return 0;
}


134 名前:デフォルトの名無しさん :04/10/29 13:22:58
templateの引数にtypenameとclassの両方、
なんの違いも無く使えるのって、なんのため?
意思の表示?歴史的経緯?

135 名前:128 :04/10/29 13:30:05
えーと、typenameを使う主な場所は
・template< >の中
・ template<typename Foo>の有効範囲内で
  Foo::value_type のような型を使うとき
の2つで、
・型であることが明確なものにtypenameつけたらダメ
という理解で良いかな?


136 名前:デフォルトの名無しさん :04/10/29 13:52:02
>>135
そんなとこかなぁ


137 名前:デフォルトの名無しさん :04/10/29 16:14:42
>>135
・template<typename Foo>の有効範囲内で、
 std::vector<Foo>::iteratorのような型を使うとき
もだな。念のため。

138 名前:デフォルトの名無しさん :04/10/29 20:00:42
>>134
歴史的経緯じゃないかと思っている
禿の予知能力がもう少し強ければ
初めから typename だっただろうさ

139 名前:デフォルトの名無しさん :04/10/29 20:41:43
vectorやlist等を基本クラスで宣言したものに
派生クラスのオブジェクトを格納して
派生クラスでオーバーライドした関数呼び出すことってできないですか?




140 名前:デフォルトの名無しさん :04/10/29 20:44:32
>>139
奇妙なテンプレートとかなんとか言うやつでやるかな、たぶん。

141 名前:デフォルトの名無しさん :04/10/29 20:47:34
>>139
つまり、クラスに新たなメソッドが追加されたように振る舞わせるっていうこと?

142 名前:139 :04/10/29 21:01:41
様々な派生クラスのオブジェクトを格納して一括して処理できないかな
と思ったんですけど

派生クラスで格納するから、派生クラスのコンストラクタは呼び出されるんですけど
関数はオーバーライドしても基本クラスのものが呼び出されるんです



143 名前:デフォルトの名無しさん :04/10/29 21:15:16
>>142
えーと、コンテナは基底クラスのポインタを格納していて、
んで、オーバーライドした関数を呼び出してるのに、基底クラスのものが実行される、
ってこと?

144 名前:デフォルトの名無しさん :04/10/29 21:16:11
そのメンバ関数をvirtual指定してる?

とりあえず簡略化したソースでも見せて。

145 名前:デフォルトの名無しさん :04/10/29 22:04:24
class A{
public:
 int x,y;
 A() {};~A() {};
 void Move() { x+=1; y+=1;};
};

class B:public A{
public:
 B() { x=0; y=0;} ~B(){};
 virtual void Move() { x+=2; y+=2; }
};

int main()
{
 vector<A> vec;  
 vec.push_back(B());
 vec[0].Move();
 cout << vec[0].x << vec[0].y;
 return 0;
} //結果11

簡略化というか別のソースなんですけど、こんな感じです

あと初心者スレ別にあったんですね。スマソ

146 名前:デフォルトの名無しさん :04/10/29 22:12:14
>>145
とりあえずこんな感じ
deleteはちゃんとしてね
class A{
public:
int x,y;
A() {}; virtual ~A() {};
virtual void Move() { x+=1; y+=1;};
};

class B:public A{
public:
B() { x=0; y=0;} ~B(){};
virtual void Move() { x+=2; y+=2; }
};

int main()
{
vector<A *> vec;
vec.push_back(new B());
vec[0]->Move();
cout << vec[0]->x << vec[0]->y;
return 0;
} //結果11


147 名前:デフォルトの名無しさん :04/10/29 22:27:54
>>145
出来ました ありがとうございます

ポインタを格納すればよかったんだ

148 名前:147 :04/10/29 22:28:58
間違えました>>146です
うう、すみません

149 名前:デフォルトの名無しさん :04/10/29 22:31:14
>>145
派生クラスの方にvirtual付けてどうする。
仮想関数について勉強しなおすと吉。

150 名前:デフォルトの名無しさん :04/10/30 12:34:31
会社で下のソースようなクラスの使い方している人がいて「一般的な使い方だよ」って言われたんですが
そうなんでしょうか?

かなり簡略したが、大体こんな感じ。
ttp://up.isp.2ch.net/up/68bafad0fbe0.lzh

年配の方に聞くと「ま、そういう人もいるよ。」って言ってましたが…

151 名前:デフォルトの名無しさん :04/10/30 13:10:05
>>150
別に普通だと思うけどなにがマズイと思うの?

152 名前:デフォルトの名無しさん :04/10/30 13:11:51
本当に一般的では無いと思ってるなら
TemplateMethodパターンでくぐって納得した後にデザパタの勉強しなさい。

153 名前:デフォルトの名無しさん :04/10/30 13:13:20
なんなんだろ、この"見て損した"感は…

154 名前:デフォルトの名無しさん :04/10/30 13:14:01
Template Method ってデザパタなんか微塵も知らなくても知ってて当たり前だと思うのだが

155 名前:デフォルトの名無しさん :04/10/30 14:45:21
>>154
君は何で学んだの?

156 名前:デフォルトの名無しさん :04/10/30 14:46:51
>>155
現場の知恵ってやつじゃないの?

157 名前:デフォルトの名無しさん :04/10/30 14:53:35
そもそもデザインパターンは知ってて当たり前のものやよく使われてるものをカタログ化したものだからな。

158 名前:デフォルトの名無しさん :04/10/30 21:18:40
>>154はデザパタをまったく理解してないに100香田

159 名前:デフォルトの名無しさん :04/10/30 21:40:29
>>158
萎えそう思ったのか192文字以内で答えよ

160 名前:デフォルトの名無しさん :04/10/30 21:59:06
>>159
2のべきにしろ

161 名前:デフォルトの名無しさん :04/10/30 22:00:15
文字列の終端も数に入れてね

162 名前:デフォルトの名無しさん :04/10/30 23:39:14
では終端のナル文字を含めて1024文字以内のC文字列で説明せよ

163 名前:デフォルトの名無しさん :04/10/30 23:47:13
ロケールは?

164 名前:デフォルトの名無しさん :04/10/30 23:48:37
C++なら終端なんか含むなよ。

165 名前:デフォルトの名無しさん :04/10/30 23:52:30
説明をstd::stringに格納せよ。字数制限:メモリを使い果たすまで

166 名前:150 :04/10/31 00:52:52
>>151
いや、使い方はそうなんだが、ソース見て違和感しか思えなくて…
なんかあまりマネしたくない手法と言うか…「へー」としか感想無くて…
一般的かどうか聞いてみた。(気にするだけ無駄だったかのかな?)


他のレスもサンクス。

167 名前:デフォルトの名無しさん :04/10/31 00:55:32
>>165
4GB 超のメモリを積んでるマシンでも size_t が 32bit だったりして
困るわけだが。

168 名前:デフォルトの名無しさん :04/10/31 00:59:26
ちょっと見てみたが、何の変哲もないただのオーバーライドじゃん。
どんな解説書にも一回は載ってるような。
TemplateMethodでもないし。

169 名前:デフォルトの名無しさん :04/10/31 01:02:29
>>128-138
ttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#382

170 名前:デフォルトの名無しさん :04/10/31 01:03:30
TemplateMethodだから

171 名前:デフォルトの名無しさん :04/10/31 01:36:20
TemplateMethodですから!!残念!!

GoF26パターン斬るぃ〜!

172 名前:デフォルトの名無しさん :04/10/31 04:16:14
( ´д)ヒソ(´д`)ヒソ(д` ) GoF本は23パターンしかないぞ

173 名前:デフォルトの名無しさん :04/10/31 07:23:03
>>150
ac_BaseStrがclassBaseとclassExtの両方に書いてある事だけは唯一気になる。

174 名前:デフォルトの名無しさん :04/10/31 07:54:08
これのプログラムに問題はありますか?
#include <iostream>
struct base
{
  template<class T>bool _(T)
  {
    return false;
  }
};
struct derived: base
{
  bool _(char c)
  {
    return true;
  }

  bool _(int i)
  {
    return true;
  }

};
int main()
{
  derived d;
  std::cout << std::boolalpha;
  std::cout << d._(1.0f)<< std::endl;
  std::cout << d._('a') << std::endl;
  std::cout << d._(1) << std::endl;
  return 0;
}

175 名前:デフォルトの名無しさん :04/10/31 08:37:37
>174
派生クラスで、同じ関数名でシグニチャが違う関数を宣言すると
基底クラスの関数は隠される。
derivedに using _;とでも書いておけ。

あとアンダースコアから始まる識別子を使うな。

176 名前:デフォルトの名無しさん :04/10/31 19:53:27
C++ で
入力した文字を逆転表示して表示させるにはどうしればいいのでしょうか・・・?


こんにちは

はちにんこ

と言った具合です。


177 名前:デフォルトの名無しさん :04/10/31 19:54:34
>>176はマルチなのでスルーしてください。

178 名前:デフォルトの名無しさん :04/10/31 19:59:23
回答もらってるのにマルチとは言い度胸だな

179 名前:デフォルトの名無しさん :04/10/31 20:08:12
>>176
自分で考えろヴォケ

180 名前:デフォルトの名無しさん :04/10/31 21:57:15
C++Builderのスレがありません。・゚・(ノд`)・゚・。

181 名前:デフォルトの名無しさん :04/10/31 22:22:43
wstring を出力させたくて
std::locale::global( std::locale( "japanese" ) );
std::wstring s;
std::getline( std::wcin, s );
std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcin ) );
としたのですが、copy のところで
error C2440: '型キャスト' : 'std::wostream' から 'std::ostream_iterator<wchar_t>' に変換できません。

となってしまいます。
std::wcout << s とするしかないでしょうか?

182 名前:181 :04/10/31 22:23:37
- std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcin ) );
+ std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcout ) );

183 名前:デフォルトの名無しさん :04/10/31 23:29:57
std::ostream_iteratorの二番目のテンプレート引数をwchar_tにすればコンパイルは通るよ

184 名前:デフォルトの名無しさん :04/10/31 23:42:46
>>181
マルチは帰れ
っていうかそれは宿題スレで私が答えた奴の再質問か?

185 名前:デフォルトの名無しさん :04/10/31 23:45:41
標準入出力とロケールって関係あるの?

186 名前:デフォルトの名無しさん :04/10/31 23:58:38
うん。

187 名前:デフォルトの名無しさん :04/11/01 00:15:18
>>186
どんなの?

188 名前:デフォルトの名無しさん :04/11/01 00:18:27
フォーマット付き出入力

189 名前:デフォルトの名無しさん :04/11/01 00:26:09
>>188
そりゃそうだな

190 名前:デフォルトの名無しさん :04/11/01 00:54:03
>>184
何だこいつ

191 名前:デフォルトの名無しさん :04/11/01 09:49:31
>>190
なんだおまえ

192 名前:デフォルトの名無しさん :04/11/01 12:28:45
>>192
なんだおまえ

193 名前:vc++6.0 :04/11/01 17:32:51
boostいれてみたんですが
Let's boost(ttp://www.kmonos.net/alang/boost/
のサンプルintrusive_ptr以下のサンプルがうまくいきません

intrusive_ptr
c:\〜\intrusive_ptr.cpp(23) : error C2065: 'CountableObject' : 定義されていない識別子です。
c:\〜\intrusive_ptr.cpp(23) : error C2065: 'ptr' : 定義されていない識別子です。
c:\〜\intrusive_ptr.cpp(24) : error C2448: '<Unknown>' : 関数の定義が間違っています。
c:\〜\intrusive_ptr.cpp(29) : error C2448: '<Unknown>' : 関数の定義が間違っています。

lexical_cast
c:\〜\lexical_cast.cpp(12) : error C2062: 型 'int' は不要です。
c:\〜\lexical_cast.cpp(13) : error C2275: 'string' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
c:\program files\microsoft visual studio\vc98\include\xstring(612) : 'string' の宣言を確認してください。
cl.exe の実行エラー

というようになってしまいます。
c:\lib\boostの下にc++boost.gif等が来るようにして
インクルードファイルにc:\lib\boostを追加したんですが

194 名前:デフォルトの名無しさん :04/11/01 18:24:03
std::multimapで重複するキーをinsertした時についてなんですが
例えば
std::multimap<int, int> m;
m.insert(std::pair<int, int>(1, 1));
m.insert(std::pair<int, int>(1, 3));
m.insert(std::pair<int, int>(1, 2));
m.insert(std::pair<int, int>(1, 4));
とし、イテレータで最初からアクセスした場合
キーが重複した部分がどういう順番で出てくるか
とかそういうのは決まっているんでしょうか?

195 名前:デフォルトの名無しさん :04/11/01 18:26:26
>>193
intrusive_ptrはそのコードが間違ってる。
lexical_castはコンパイラが間違ってる。

196 名前:vc++6.0 :04/11/01 22:39:58
>>195
さんくす

197 名前:デフォルトの名無しさん :04/11/02 00:35:07
>>194 決まってない。

198 名前:デフォルトの名無しさん :04/11/02 00:56:44
fstreamで読み書きするとfopenで読み書きするよりだいぶ遅くなるのですが、
どうやったら解決しますか?

199 名前:デフォルトの名無しさん :04/11/02 01:03:33
>>198
しゃーない。fstreamは継承しまくりの怪物だし、CのFILE構造体のような
機械語に近いライブラリには速度でどうやってもかなわんよ。

マシンを新しくするか、FILEを使い続けるかどちらかだな。

200 名前:デフォルトの名無しさん :04/11/02 01:07:15
>>198
コード晒してもらえる?

201 名前:デフォルトの名無しさん :04/11/02 01:07:19
>>198
自分でクラスを書く

202 名前:デフォルトの名無しさん :04/11/02 02:07:00
>>200
長いのでちょっと難しいですが、

基本的には
fp = fopen(path , "rb")

ifstream ifs(path, ios::in | ios::binary);

fread(&data, sizeof(Data), 1, fp);

ifs.read((char*)&data, sizeof(Data));

fgets

getline
と置き換えただけです。

203 名前:デフォルトの名無しさん :04/11/02 02:11:02
速度の方ですがifstreamの方が4〜5割遅くなってしまっています。

readとfgetsはたくさんあってループもしています。
具体的には約10万程度のクラスインスタンスのシリアライズとデシリアライズを行っています。
それと、読込中に正しく読めてるか確認するための\0もあり、
fgetc
ifs.get
で確認しています。

204 名前:デフォルトの名無しさん :04/11/02 02:11:55
>>202 最適化の影響は確認した?

205 名前:デフォルトの名無しさん :04/11/02 02:14:46
>>204
最適化の影響の意味がよく分かりません。
最適化はon(-O2)にしています。

206 名前:デフォルトの名無しさん :04/11/02 02:17:22
全部同じ値のテストデータとかでは無く
実運用データでテストしていてその後実際に読んだデータを元に処理を行っているので、
実際に読み込まないとかの最適化がかかることは無いと思います。

207 名前:デフォルトの名無しさん :04/11/02 02:26:17
やっぱり>>199って事なんでしょうかね…
それにしても実際のIOにかかる時間の方が
iostreamの複雑さなんかよりずっとオーダーが大きそうなのに5割も違うのはなあ…

208 名前:デフォルトの名無しさん :04/11/02 08:41:29
現在実行しているディレクトリのパスを取得する方法を教えてください。
OSはLinuxです。

209 名前:デフォルトの名無しさん :04/11/02 08:58:29
>>208
ここって環境依存ありだっけ?
そうでないなら以後気をつけるようにってことで、getcwd()。

210 名前:デフォルトの名無しさん :04/11/02 11:24:42
>>208
環境依存なしならboost/filesystem

211 名前:デフォルトの名無しさん :04/11/02 14:03:11
すみません、神様教えてください。
下のソース、Mac の OSX 10.3.5 上で実行すると
::pthread_join で止まってしまいます。
CallProc の中身を while ( true ) ::pthread_testcancel();
のようにすると、ちゃんと join できるのですが・・
他の環境では動くのでしょうか?

#include<pthread.h>
#include<sys/socket.h>

#include<iostream>
using namespace std;
static void*
CallProc( void* p ) {
int wSS = ::socket( AF_INET, SOCK_STREAM, 0 );
::listen( wSS, SOMAXCONN );
::accept( wSS, NULL, NULL );
return 0;
}

int
main() {
pthread_t m;
::pthread_create( &m, NULL, CallProc, 0 );
::sleep( 1 );
::pthread_cancel( m );
void* v;
cout << "Calling join." << endl;
::pthread_join( m, &v );
cout << "Joined." << endl;
}


212 名前:デフォルトの名無しさん :04/11/02 14:26:48
FILE*との同期を取るためのコストがでかくて性能が出ないって話がどこかにあった。
同期を行わないパラメタをifstreamに渡せばよかったはずだけど、覚えてない。


213 名前:デフォルトの名無しさん :04/11/02 16:26:39
>>212
std::ios::sync_with_stdio()だろ。それにfalseを与えてパフォーマンスの
変化があるかどうか調べてみ。

214 名前:デフォルトの名無しさん :04/11/03 13:50:07
C++ ではポインタに代入するとき NULL と 0 のどちらを使った方がいいのでしょうか?

215 名前:デフォルトの名無しさん :04/11/03 13:55:48
>>214
0です。そういうことになってます。

216 名前:デフォルトの名無しさん :04/11/03 15:23:38
漏れの手元の本には
プラットフォームに応じてNULLの定義方法が異なっていたことにより
プログラムが暴走する危険があった、と書かれてる

例えば
#define NULL ((char *)0)
#define NULL ((void *)0)
など。で、これを代入するとエラーがでる可能性がある
C *cp = NULL; //エラー?
ちなみにC++では数値の0は任意の型のポインタ値に変換できることが保証されている
よって、0が一般的に使われている

けど、現在のC++の標準には(void *)0のような定義は許可されていないので
その標準にのっとった環境であればNULLを使用しても問題ない

ただ、やっぱり今のC++プログラマはNULLではなく、0を利用するのが一般的、らしい

自分の言葉じゃなくてスマソ
今漏れも勉強中なんだわ

217 名前:デフォルトの名無しさん :04/11/03 17:46:38
>>216
昔の話だから忘れて良い。

ANSI C++ の規格では NULL は「整数型で値は 0 と等しい」(回りくどい言い方に
なってるのは int, long, ... どれになるかは処理系に任してるから) と定義されてる。

C* cp = NULL;

これが通らないコンパイラは、現実にはそろそろゴミ箱行き。

218 名前:デフォルトの名無しさん :04/11/03 17:56:39
NULLより0の方がタイプ数が少なくてグッド

219 名前:デフォルトの名無しさん :04/11/03 18:00:18
C++よりRubyの方がタイプ数が少なくてグッド

220 名前:デフォルトの名無しさん :04/11/03 18:00:43
>>219
激しく同意させてもらう。

221 名前:デフォルトの名無しさん :04/11/03 18:01:05
>>217
> 回りくどい言い方になってるのは int, long, ... どれになるかは処理系に任してるから

君はぬるぽを知っているのか?
Cのぬるぽをわかっているか?

222 名前:デフォルトの名無しさん :04/11/03 18:13:41
C++における、Cの負の遺産の一覧、みたいなのありますか?

223 名前:デフォルトの名無しさん :04/11/03 18:21:22
>>222
ISO/IEC 14882 の Annex C から以後は読んだか?
英語が辛ければ JIS に日本語版もあるぞ

224 名前:デフォルトの名無しさん :04/11/03 18:21:25
>>222 みたことない。

225 名前:デフォルトの名無しさん :04/11/03 18:26:53
えー?ANSI版みたいに1980円くらいでしかも日本語の香具師キボンヌ
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?bunsyoId=JIS+X+3014%3A2003&dantaiCd=JIS&status=1

226 名前:デフォルトの名無しさん :04/11/03 18:34:56
>>225
まあ投資額は目的・目標で決めることだからな
なくていいんならそれまでだ

227 名前:デフォルトの名無しさん :04/11/03 19:32:55
int hoge = 0;
int* hoge = 0x0;

じゃだめですか?

228 名前:デフォルトの名無しさん :04/11/03 20:36:08
>>227 だめです。

229 名前:デフォルトの名無しさん :04/11/03 20:45:47
>>227
OKです。

230 名前:デフォルトの名無しさん :04/11/03 20:46:23
じゅうぶんです

231 名前:デフォルトの名無しさん :04/11/03 20:47:04
はんぶんです

232 名前:デフォルトの名無しさん :04/11/03 20:47:14
>>227
('∀`)<あなたを、犯人です

233 名前:デフォルトの名無しさん :04/11/03 21:58:31
ていうかコンパイルが通らない。

234 名前:おながいしまつ :04/11/04 00:46:52
342 :VC++ですが・・・ :04/11/04 00:32:25 ID:hMyxAB0U
-----------------------------------------
pDocTemplate = new CMultiDocTemplate(
IDR_TEST11TYPE,
RUNTIME_CLASS(CTest1103Doc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CTest1103View));
AddDocTemplate(pDocTemplate);
-----------------------------------------
↓↓↓

RUNTIME_CLASS(); ←この呪文は、ひとことで言うと何ですか?

C言語の初心者ですいません。
javaは一生懸命勉強したのですが、
VC++の呪文に不慣れです。
そこで諸先生がたに伺いました。難しければ結構です。。。

346 :cen ◆Pm9xOTJuM. :04/11/04 00:34:06 ID:???
>>342
ここを。
プログラム
http://pc5.2ch.net/tech/


↑↑↑
というわけで御座います。
基本的な呪文を10個くらい意味と一緒に覚えておきたいと思います。

235 名前:デフォルトの名無しさん :04/11/04 00:50:08
>>234
ひとことで言うと、MFCのマクロ。

236 名前:デフォルトの名無しさん :04/11/04 01:07:38
C++の新バージョンって、いつごろ出るの?

237 名前:デフォルトの名無しさん :04/11/04 01:09:51
>>236
hageに訊いてください。

238 名前:bjarne :04/11/04 01:14:35
シラネ

239 名前:デフォルトの名無しさん :04/11/04 01:25:39
すいません。質問なんですが、
C言語には無くてC++にだけは存在する
プリプロセッサへの命令(ディレクティブ)って何かありますか?

CとC++ってこの部分は同じでしたよね?

240 名前:デフォルトの名無しさん :04/11/04 01:26:55
プリプロセッサディレクティブなんて激しく環境依存じゃねぇの?

241 名前:デフォルトの名無しさん :04/11/04 01:28:43
>>240 いいかげんなこというなよ。

242 名前:デフォルトの名無しさん :04/11/04 01:30:20
ソースって一つのクラスごとに一つ作るのがいいんですか?

243 名前:デフォルトの名無しさん :04/11/04 01:34:51
>>242
一般的には。
ただ、数行〜十数行程度の小さいクラスがぽこぽこ出来るときはある程度まとめる。

244 名前:デフォルトの名無しさん :04/11/04 01:35:35
>>242
基本的にはそれが一番。

245 名前:デフォルトの名無しさん :04/11/04 01:41:38
質問者より回答者の方がレベルが低いスレはここでつか?

246 名前:デフォルトの名無しさん :04/11/04 01:42:58
全部ひとつのヘッダに書くべき

247 名前:デフォルトの名無しさん :04/11/04 01:51:46
>>246
それじゃ再利用しにくくない?

248 名前:デフォルトの名無しさん :04/11/04 01:53:08
>>242
間違っても一つのクラスでファイルを分けたりするなよ。
ソースを追いにくくなるから。
定義と宣言は一カ所でしろ。
Javaから入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。

249 名前:デフォルトの名無しさん :04/11/04 01:55:43
>定義と宣言は一カ所でしろ。
この行を読んだ瞬間ネタだと分かった

250 名前:デフォルトの名無しさん :04/11/04 01:56:38
>>249
遅すぎ。1行目で気づけよ。


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.