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

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

C++相談室 part55

1 :デフォルトの名無しさん:2006/12/01(金) 14:31:34
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

テンプレその他 >>2-15 付近参照

前スレ
C++相談室 part54
http://pc8.2ch.net/test/read.cgi/tech/1159340181/


2 :デフォルトの名無しさん:2006/12/01(金) 14:33:01
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://www.cppreference.com/ (英語)
 http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない)
[禿 Stroustrup]
 http://public.research.att.com/~bs/
[C++ International Standard]
 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/
  ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。


3 :デフォルトの名無しさん:2006/12/01(金) 14:33:35
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 ttp://www.amazon.com/exec/obidos/ASIN/0201700735/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 ttp://www.amazon.com/exec/obidos/ASIN/0201824701/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 ttp://www.amazon.com/exec/obidos/ASIN/0201379260/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 ttp://www.amazon.com/exec/obidos/ASIN/0201924889/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 ttp://www.amazon.com/exec/obidos/ASIN/020163371X/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 ttp://www.amazon.com/exec/obidos/ASIN/0201615622/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 ttp://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 ttp://www.amazon.com/exec/obidos/ASIN/0201760428/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)
C++ Coding Standards
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716860/ (翻訳)

4 :デフォルトの名無しさん:2006/12/01(金) 14:34:39
■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/

5 :デフォルトの名無しさん:2006/12/01(金) 14:35:17
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache STDCXX http://incubator.apache.org/stdcxx/
 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://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

6 :デフォルトの名無しさん:2006/12/01(金) 14:44:49
1 http://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


7 :デフォルトの名無しさん:2006/12/01(金) 14:45:23
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/

8 :デフォルトの名無しさん:2006/12/01(金) 14:47:20
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/
37 http://pc5.2ch.net/test/read.cgi/tech/1098543578/
38 http://pc5.2ch.net/test/read.cgi/tech/1101473340/
39 http://pc5.2ch.net/test/read.cgi/tech/1106466303/
39(実質40) http://pc8.2ch.net/test/read.cgi/tech/1106527792/
40(実質41) http://pc8.2ch.net/test/read.cgi/tech/1113408957/
41(実質42) http://pc8.2ch.net/test/read.cgi/tech/1120190961/
43 http://pc8.2ch.net/test/read.cgi/tech/1124113879/
44 http://pc8.2ch.net/test/read.cgi/tech/1128512737/
45 http://pc8.2ch.net/test/read.cgi/tech/1133007604/

9 :デフォルトの名無しさん:2006/12/01(金) 14:49:36
46 http://pc8.2ch.net/test/read.cgi/tech/1136690107/
47 http://pc8.2ch.net/test/read.cgi/tech/1139931895/
48 http://pc8.2ch.net/test/read.cgi/tech/1142423595/
49 http://pc8.2ch.net/test/read.cgi/tech/1146185570/
50 http://pc8.2ch.net/test/read.cgi/tech/1149427282/
51 http://pc8.2ch.net/test/read.cgi/tech/1153079297/
52 http://pc8.2ch.net/test/read.cgi/tech/1156525695/

■関連スレ■
多すぎ。とりあえずスレタイ C++ で検索して。
以下、スレタイで見つからなさそうな関連スレ。

Boostを語れゴラァ part3
http://pc8.2ch.net/test/read.cgi/tech/1158991211/
GCCについて part7
http://pc8.2ch.net/test/read.cgi/tech/1145357824/

10 :デフォルトの名無しさん:2006/12/01(金) 15:11:28
C++学ぶと、一気に頭髪が後退に?

11 :デフォルトの名無しさん:2006/12/01(金) 15:17:00
以下、啓蒙文Ver3.0
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。


12 :デフォルトの名無しさん:2006/12/01(金) 15:19:52
>>10
人によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10cmほどしか後退してない。

13 :デフォルトの名無しさん:2006/12/01(金) 15:25:23
すげえ。ボーランドのコンパイラ使っといてC++とかいってるよ。この人。

14 :デフォルトの名無しさん:2006/12/01(金) 15:30:01
C1010: プリコンパイル済みヘッダーの検索中に予期しない HAGE を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

15 :デフォルトの名無しさん:2006/12/01(金) 15:31:11
キチガイ啓蒙文は無視な。
好きなようにやれ。

16 :デフォルトの名無しさん:2006/12/01(金) 15:37:39
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。

17 :デフォルトの名無しさん:2006/12/01(金) 15:46:49
11 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
16 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

18 :デフォルトの名無しさん:2006/12/01(金) 15:47:37
#include <stdaderance.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁ付け毛ぐらいにはなったな。
うむごくろう。

19 :デフォルトの名無しさん:2006/12/01(金) 15:48:18
Boostつかうと一気に実行ファイルサイズが100倍に?!

環境によるだろ。
俺はVC++に /Yc オプションを指定して、極力
プリコンパイルヘッダを使用するようにして使っているが、例えばboost::lambdaを
使っても使わない時と比べ10秒ほどしか増えない。

20 :デフォルトの名無しさん:2006/12/01(金) 15:51:08
任意のタイミングでファイルオープンとファイルクローズが出来るデバックツール探してます。
CreateFileとかCopyFile等の動作チェック用です。
自分で作ってもいんですが、既に多機能な機能やグラフィカルなツールがあるかもしれないので探しています。
VisualStudioパッケージあるかもしれんがようわからん。
誰か知らないか?

21 :デフォルトの名無しさん:2006/12/01(金) 15:52:43
>>12
std恐るべし((((;゜Д゜)))

22 :デフォルトの名無しさん:2006/12/01(金) 15:56:33
>>20は自らエスパーを呼び寄せることにした…

23 :デフォルトの名無しさん:2006/12/01(金) 16:19:04
>>20
スレ違い

24 :デフォルトの名無しさん:2006/12/01(金) 16:37:04
>>20
これって前スレの頭の方にあった質問だね。
テンプレに入れる事にしたのか。

25 :デフォルトの名無しさん:2006/12/01(金) 16:51:04
もうテンプレ増やさなくてもいいじゃないかと思うんだけどなぁ。
前スレ後半から新スレへくるようなお客さんが引いちゃうし、なにより飽きた。


26 :デフォルトの名無しさん:2006/12/01(金) 17:02:08
テンプレートを使ったコードを、ヘッダとソースに分離したいと考え、
http://docs.sun.com/source/806-4838/Ch2.src.html
の最後にある、「テンプレート定義分離型の構成」のサンプルを
VC7.1にてビルドしてみたのですが、以下のようなエラーが出てしまいます。

error LNK2019: 未解決の外部シンボル "int __cdecl twice<int>(int)"
(??$twice@H@@YAHH@Z) が関数 _main で参照されました。

これは何が問題なのでしょうか?
もしや、VCの仕様でしょうか?

27 :デフォルトの名無しさん:2006/12/01(金) 17:07:15
>>26
exportキーワードがサポートされてないなら全部ヘッダに書くしかない

28 :デフォルトの名無しさん:2006/12/01(金) 17:49:29
どこまでがテンプレなのか
もうわからん

29 :デフォルトの名無しさん:2006/12/01(金) 19:48:26
Q
NGにしてるヤツが「番号が飛び飛び」「〜が見えない」とやたらNGにしてることを強調したがるのはどうしてか

A
統合失調症の恐れがあります。
何をされるかわかったもんじゃないので関わらないほうがいいです。

30 :デフォルトの名無しさん:2006/12/01(金) 20:12:41
「番号が飛び飛び」というのは一種の揶揄でもある。
書き込んだやつからの反応がほしいんじゃなくて、
自分と同様にあぼ〜んしたやつからの反応がほしいんだろう。

「〜が見えない」の意味が理解できないのは2ちゃん初心者。
SGにでも登録してください。

31 :デフォルトの名無しさん:2006/12/01(金) 21:36:14
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。


32 :デフォルトの名無しさん:2006/12/01(金) 21:40:23
__(●)(●)((●)((●))(●)(●)(●)ii● l(●)(●)(●)__
 /  (●)(●)(●)(●)(●))(●)(●)(●゙'‐='"(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)(●)(●)))(●)(●)(●)(●)_
 /  (●)(●)(●)(●)(●))(●)(◎)(●))(●)(●)(●)(●)  \
    _(●)(●,,r==、(●))(●)(◎)(●))(●)(●)(●)(●)_
      (●)((ii ,●l)(●))(●)(●)(●)(●)(●)(●)(●)
   __(●)(●゙'‐='"((●))(●)(●)(●))(●)(●)(●)(●)__
 /  (●)(●)(●)(●)(●))(●)(●,,r==、(●)(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)(●)ii ● ))(●)(●)(●)(●)_
 /  (●)(●)(丿"~"i i(●)(●)(●)゙'‐='"(●)(●)(●)(●)  \
    _(●)(●)(",, )(X)ヽヽ(●))(●)(●))(●)(●)(●)(●)_
      (●)(●)\ ヽXヽヽ(●))(●)(●)(≡)(≡)(●)(●)
   __(●)(●)((●\ヽ Xヽヽ(●)((●))(●)(●)(ミ)(●)__
 /  (●)(●),,r==、)( \,",",ソ●(●))(●),,r==、●)(●)   \
   _ (●)(●)ii ,●l)(●)(●)(●)(●)))(●ii● ;)(●)(●)_
 /  (●)(●)゙'‐='"(●)(●))(●)(●)(●))((゙'‐='"(●)(●)  \
    _(●)(●)●)(●)(●))(●)(●)(●))(●)(●)(●)(●)_
  /  (l●)(●)(●),,r==、)(●)(●)(●)(,,r==、)(●)(●l;)  \
  | .  (l;●)(●)(● ,● ))(●))(●)(●)ii ● l)(●)(●)    |
  |  . (0●)(●)(●゙'‐='"●))(●)(●)(゙'‐='"(●))(●)O)    |
  ,;;    (:●)●)(●)(●)(●)(●)(●)(●))(●))(●;)      。
       (о●)(●))(●)(●))(●)(●)(●)(●)●》)
         ( ;●ξ巛:)( ;●ξ(●)(●,--'""ヽ●:( ;)
           巛巛ミ巛ミミミ//二二ノ""^ソ彡
             巛((ミミ((巛ヘ`\┼┼┼ ,!ヽ
                 巛王 \"ヽ-;:,,,,,,ノ /'
                       \,,,,,__,,,ノ


33 :デフォルトの名無しさん:2006/12/01(金) 23:18:17
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。


34 :デフォルトの名無しさん:2006/12/02(土) 03:18:46
31 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
33 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

35 :デフォルトの名無しさん:2006/12/02(土) 05:12:40
皆さん単体テストは何を使っているのですか?

36 :デフォルトの名無しさん:2006/12/02(土) 08:59:21


37 :デフォルトの名無しさん:2006/12/02(土) 09:14:37
え、俺は体だけど?

38 :デフォルトの名無しさん:2006/12/02(土) 11:09:48
単体テストなど頭も手も使わずベロだけでこなしてみせよう

39 :デフォルトの名無しさん:2006/12/02(土) 11:55:05
boost::test

40 :デフォルトの名無しさん:2006/12/02(土) 15:14:11
::test tobj(/*今日の日付*/20060212);

41 :デフォルトの名無しさん:2006/12/02(土) 18:16:27
テンプレートクラスでtemplate<class T>のT型の返り血(値)を返す関数を、インターフェイスを書いたファイルとは別のファイルに記述したいんですが、
どうすれば良いんでしょうか。

42 :デフォルトの名無しさん:2006/12/02(土) 18:33:58
//MyFunc.h
template < typename T>
T func() ;

#include "MyFunc.cpp"



export? 何それ食えるの?

43 :デフォルトの名無しさん:2006/12/02(土) 19:02:56
テンプレートクラスのフレンド関数も扱い難しいよなあ。
まあフレンドなんて使うなってことだろうが

44 :デフォルトの名無しさん:2006/12/02(土) 19:23:42
C++のテンプレートで質問があります。下記のコードをGCC3.4でコンパイルする
とa = 1;、y(); のところでエラーとなってしまいます。this->a = 1;、
this->y();のようにすれば問題ないのです。出来ればthisをつけないようにし
たいのですが、どうすれば良いでしょうか?


template<class T1, class T2>
class A
{
int a;
void y();
};

template<class T1, class T2>
class B
{
void x();
};

template<class T1, class T2>
void B<T1, T2>::x()
{
a = 1;
y();
}

45 :デフォルトの名無しさん:2006/12/02(土) 19:26:01
>>44
何これ
BはAを継承してるのか?

46 :デフォルトの名無しさん:2006/12/02(土) 19:29:07
>>44のコードはよくわからないけど
privateメンバはサブクラスからはいじれないとかそのへんのことじゃね?

47 :デフォルトの名無しさん:2006/12/02(土) 19:31:26
サブクラスに公開するにはprotectedにするあたりはJavaと一緒?

48 :44:2006/12/02(土) 19:33:59
すみません、いろいろと書き忘れていました。BはAを継承していて、Aのメンバは全てpublicです。

template<class T1, class T2>
class A
{
public:
int a;
void y();
};

template<class T1, class T2>
class B: public A<T1, T2>
{
void x();
};

template<class T1, class T2>
void B<T1, T2>::x()
{
a = 1;
}

49 :デフォルトの名無しさん:2006/12/02(土) 19:35:15
いろいろいらない物をつけたけど、基本的にデフォルトテンプレートパラメータ
がない時は明示しなければならない

template <class T1, class T2>
class A
{
protected:
int a;
void y() { std::cout << a << std::endl; }
};

template <class T1, class T2>
class B : public A<T1, T2>
{
public:
void x();
};

template <class T1, class T2>
void B<T1, T2>::x()
{
A<T1, T2>::a = 1;
A<T1, T2>::y();
}

50 :44:2006/12/02(土) 19:36:56
>>49
丁寧なレス有り難うございます。

51 :44:2006/12/02(土) 19:41:51
ちょっと興味があるんですが、多重継承でもないのに明示的にA<T1, T2>::のよ
うなものをつける必要があるのはどういった理由からでしょうか?ポインタだ
けでも教えていただけるとうれしいです。

52 :デフォルトの名無しさん:2006/12/02(土) 19:47:55
VCならスーパークラスのメソッドはA<T1,T2>::つけなくても呼べたような気がする。
気のせいかな

53 :デフォルトの名無しさん:2006/12/02(土) 19:57:31
VS.NET2003だと明示的に書かなくても通った。

54 :デフォルトの名無しさん:2006/12/02(土) 19:58:20
>>43
扱いを難しくしてるのは、gccだけだけどなw

55 :デフォルトの名無しさん:2006/12/02(土) 20:06:28
残念。それはgccのせいではなく規格のせいであり、つまるところ禿とかのせいなわけで。

56 :デフォルトの名無しさん:2006/12/02(土) 20:08:14
VCだと本来typenameがあるべき所に無くても通ったりするな。
プログラマをへたらせるだけだと思うんだが

57 :デフォルトの名無しさん:2006/12/02(土) 20:13:17
VC++ 8でtypenameを付けないとコンパイルできなくなったように思う。

58 :デフォルトの名無しさん:2006/12/02(土) 20:15:30
直されたんか。それはよかった
規格の不可解な点には必ず理由があると思ってた。
>>49のように書かなければいけないのも(typedefすればすっきりするが)
何か理由があるのだろう。基底クラスが一意に決定できるのにわざわざ
修飾しなければならないのは。

59 :デフォルトの名無しさん:2006/12/02(土) 20:30:22
>>58
Aが特殊化されてるかもしれない。

60 :デフォルトの名無しさん:2006/12/02(土) 21:28:59
プログラマがへたるっていうより一個一個typenameついてたら美しくない希ガス。
もちっとましな規格にならんもんかしら

61 :デフォルトの名無しさん:2006/12/02(土) 21:34:27
0xになると少しは要らなくなるかもしれないらしい。
ttp://d.hatena.ne.jp/mb2sync/20061123#p1

62 :デフォルトの名無しさん:2006/12/02(土) 21:42:05
>>61
そこで書かれているのは typename が要らなくなる,ではなくて
現在の仕様だと typename を書くことが禁止されていた場所に
typename を書いても許されるようになる,ということだけだと思います.
この規格の変更で 60 さんの不満が解消することは恐らくないかと.

63 :デフォルトの名無しさん:2006/12/03(日) 10:30:18
>>51
two stage lookup ってやつだろ。
B<T1, T2>::x() の定義の前にグローバルな int a; なんて宣言があった場合、
>>48 だとテンプレートのインスタンス化前に行われる名前解決で ::a = 1 と
決定されてしまう。

ここでは a がテンプレートのインスタンス化を行うまで確定しないことを
コンパイラに伝える必要がある。 >>49 はその方法のうちの一つ。
this->a のほうがお勧めだけど。

64 :デフォルトの名無しさん:2006/12/03(日) 11:22:12
初心者ですみません

メンバ関数の中でstatic変数使ってるんですけど、これは他のオブジェクトとも共有されるんですかね

65 :デフォルトの名無しさん:2006/12/03(日) 11:31:48
class foo{
void func() {
static int a = 0;
printf("a = %d\n", ++a);
}
}

int main(int argc, char*argv[])
{
foo f1, f2;
f1.func();
f2.func();
return 0;
}

66 :デフォルトの名無しさん:2006/12/03(日) 11:51:36
スマソ
メンバ変数にすることにします
静的変数ってグローバル変数とほとんど変わらないんですね

67 :デフォルトの名無しさん:2006/12/03(日) 20:28:33
C++というより、Cの質問になるのかもしれませんが、
C++組込型において、格上げの規格について教えてください。

signed short s = 0xFFFF;
unsigned long ul = static_cast<unsigned long>(s);

cout << hex << ul << endl;

とした場合、結果は
ffffffff
となりました。

符号有り型から、符号無し型へ格上げした場合、変換後の値は変換先の型に入るだけのビット数を変換前から抜き出したものになる。とプログラミング言語C++第3版 p945には書いてあるのですが、これは違った結果になりました。

最上位bitが1なら、上位ビットは1で埋まるというのは、規格で決まっているのでしょうか?

コンパイラは、Visual C++ 2005 Express edition です。

68 :デフォルトの名無しさん:2006/12/03(日) 20:43:40
まあ、あれだな。
cout << (ul==s) << endl;
とやってみてから考えれば?

69 :デフォルトの名無しさん:2006/12/03(日) 20:47:00
ああしまった。これじゃ暗黙の型変換で意味がない。
cout << ul << endl;
cout << s << endl;

70 :67:2006/12/03(日) 20:58:25
>>69

4294967295
-1

となりました。うーん、ちょっとまだよく分からないのですが。
何かプログラミング言語C++を読み違えてるんでしょうね・・もう少しジックリ読んでみます。
ありがとう。

71 :デフォルトの名無しさん:2006/12/03(日) 21:12:08
符合拡張でぐぐれ。
それからビット数が多い整数から少ない整数に変換する話であって本は間違ってない。

72 :デフォルトの名無しさん:2006/12/03(日) 21:15:24
>>67
> signed short s = 0xFFFF;

signed short の最大値が 0xFFFF 以上じゃないと、この時点で値は実装依存だよ。

73 :67:2006/12/03(日) 21:22:56
>>71
符号拡張というんですね。
さっそくググってみます。

>>72
あ、すいません。-1とするべきでしたね。

ご丁寧に、ありがとうございました。

74 :デフォルトの名無しさん:2006/12/03(日) 21:24:44
>>71
それを書くなら符号拡張だろ。

だが、ここで関係するのは汎整数拡張だ。int/unsigned intより小さい型の値は、
演算前にintか、intで表すことができなければunsigned intへ拡張されることになっている。


75 :デフォルトの名無しさん:2006/12/03(日) 21:39:39
モンテカルロ法でいろいろ計算するプログラムを作っています。

モンテカルロクラスのコンストラクタに、計算対象の純粋仮想クラスへの参照を渡して
計算させたいのですが、下記のようにするとコンパイルエラーとなってしまいます。

class MonteCalro
{
    public:
        explicit MonteCalro(Calculatable& c){cp=c;};
        double calc(const int count);
        
    private:
        MonteCalro();
        Calculatable& cp;
        double getRandomValue(const double range) const;
};

上記の&を*にするとうまくいきますが、
オブジェクトの内容を書き換えられるのがいやなので
なるべくでしたら参照型で渡したいのですが。。
どうしたらよいのでしょうか?

76 :デフォルトの名無しさん:2006/12/03(日) 21:43:29
別に参照にしたからといって内容を書き換えられなくなりはしないけど。
-?explicit?MonteCalro(Calculatable&?c){cp=c;};
+?explicit?MonteCalro(Calculatable&?c):cp(c){};


77 :デフォルトの名無しさん:2006/12/03(日) 21:47:04
explicitに引っかかってるとか?とりあえず書き換えられたくなかったらconstつけとけ

78 :デフォルトの名無しさん:2006/12/03(日) 21:57:22
>>76 うまくいきました。ありがとうございました。正直びびりました
>>77 「参照メンバー 'MonteCalro::cp' は初期化されていない」とエラーになっていました・・
それと、どこにconstをつけたらいいか良く分かりません。
        const Calculatable& cp;
とすると、警告 W8037 montecarlo.cpp 9: const オブジェクトに対して 非 const 関数 'Calculata
ble::getYrange()' が呼ばれた(関数 MonteCalro::calc(const int) ) とでます。。

C++ むずかしい・・・

79 :デフォルトの名無しさん:2006/12/03(日) 22:12:16
>>78
Calculatable::getYrange()っていう関数でメンバ変数を書き換えるコードがかかれてない?
constつけるとそういうのはコンパイルエラーになる

80 :デフォルトの名無しさん:2006/12/03(日) 22:22:29
>>79 レスありがとうございます

Caluculatableクラスに下記のようにconstつけてみたのですが、
まだ、警告 W8037 montecarlo.cpp 13: const オブジェクトに対して 非 const 関数 'Calculat
able::isInside(const double,const double)' が呼ばれた(関数 MonteCalro::calc(cons
t int) )
とエラーが出ます。isInsideにconstをつけると、継承したクラスで
エラー E2353 main.cpp 17: クラス 'Circle' は抽象クラス('Calculatable::isInside(
const double,const double) = 0' のため)(関数 main(int,char * *) )
とエラーが出ます。がびーん

class Calculatable
{
    public:
        virtual bool isInside (const double x,const double y)=0;
        double getXrange() const{return xrange;} 
        double getYrange() const{return yrange;} 
    protected:
        double xrange;
        double yrange;
};

81 :デフォルトの名無しさん:2006/12/03(日) 22:24:00
>>78
getYrange() に const 付け忘れてんだろ。

82 :デフォルトの名無しさん:2006/12/03(日) 22:25:31
>>80
isInside() と、それをオーバーライドするクラスでの宣言全部に const が必要。
片方だけ付けるとオーバーライドとみなされない。

83 :デフォルトの名無しさん:2006/12/03(日) 22:34:42
>>82
ありがとうございます。うまくいきました。

各クラス1個1個const付けつつコンパイルしてたので失敗していました。。。

84 :デフォルトの名無しさん:2006/12/03(日) 23:22:00
いかにも学校の宿題っぽいソース見せられるとなんか和むな

85 :デフォルトの名無しさん:2006/12/04(月) 10:56:18
旦~

86 :デフォルトの名無しさん:2006/12/04(月) 10:56:54
すまぬ、誤爆したorz

87 :デフォルトの名無しさん:2006/12/04(月) 20:00:54
1つのクラスで10Kラインてのは、
やっぱ詰め込みすぎですかね?

ソース整理してくれって言われてて
とりあえずライン数集計したんだけど。

88 :デフォルトの名無しさん:2006/12/04(月) 20:16:42
よっぽど低レベルな処理でもしてるんでなければ多すぎだろ、それは。

89 :デフォルトの名無しさん:2006/12/04(月) 20:48:38
マ板の「この会社やめようと思ったソースコード」に出てくる領域じゃないかな・・・。

90 :87:2006/12/04(月) 21:32:55
>>88、89

うーん、詳しくはいえないんだけど、
数値計算系の業務用プログラムなんだ。
入ったばっかで何やってるかわからないから、
10Kが妥当かどうかも判断つかないよ。

91 :デフォルトの名無しさん:2006/12/04(月) 21:41:50
数値計算系ならあり得るかも・・・


92 :デフォルトの名無しさん:2006/12/04(月) 21:43:01
まぁソース分割だけじゃなく色んな方面から考えないとなぁ

93 :デフォルトの名無しさん:2006/12/04(月) 21:51:36
メンバ変数とか1つのクラスに数十個あるよ
クラス同士の結合も相当強いし。。
しかし、数値計算に必要といわれればそれまでwww

94 :デフォルトの名無しさん:2006/12/04(月) 23:38:50
そればっかりはアルゴリズム勉強するとかしないと判断不能だからなぁ……。
困るねそういうの。

95 :デフォルトの名無しさん:2006/12/05(火) 00:15:35
あと、時々メモリリークを起こすって言うから調べてるんだけど
(どうもconst変数の値がいつのまにか変わっちゃうらしい)
全クラスでコピーコンストラクタとコピー代入演算子が書かれてないんだ。
(デストラクタも宣言しただけ)
このあたりって、関係あるかな???

96 :デフォルトの名無しさん:2006/12/05(火) 00:23:58
単にconst_castしちゃってるとかじゃないよね?

97 :デフォルトの名無しさん:2006/12/05(火) 00:32:42
>>96
あ、それもありうるかも
なんせソースが長いからどっかでやってるかな。。
明日調べてみます。ありがd!!!


98 :デフォルトの名無しさん:2006/12/05(火) 00:39:58
getter/setterについての質問です。

多くのgetter/setterはmember変数に対しての操作になると思います。
例えば、int GetX() constとvoid SetX(int)です。

で、逆に、member変数に対して操作しないような関数は、
GetやSetっていう名前をつけるのは避けたほうがいいんでしょうか。

今制御のprogram書いてるんですけど、
制御する機器の状態(シリアル接続)を問い合わせるのに、
GetMode()とかやってどういうモードで稼働しているかとか、
そういう関数にGetを使うのは慣習違反ではないですか?

99 :デフォルトの名無しさん:2006/12/05(火) 00:46:11
俺はなんかの状態を取り出すものは全部getってつけてる。
むしろメンバ変数かそうでないかでgetってつけるかつけないか
決めちゃったらカプセル化という意味でも変だと思う

100 :デフォルトの名無しさん:2006/12/05(火) 02:40:39
>>98
そのクラスが
 外からみてどう振舞って欲しいか、どんな操作があればよいか
というのと、
 メンバ変数としてどう持つか
というのは分けて考える。
そうすれば疑問は沸かない。

広い意味でのインターフェースと実装の分離、だよ。

101 :デフォルトの名無しさん:2006/12/05(火) 07:14:01
class A{
public:
  A(){};
  void F(){ ... };
};
というクラスを作り、
A a1;
A a2();
とインスタンス化したのですが、
a2の方は「プロトタイプされている関数が呼び出されませんでした」と警告が出ました
続けて、
A a2();
a2.F();
とやると、Fが定義されてないとなってコンパイルエラーがでました。
以前、コンストラクタで()をつけても、つけなくても同じと聞いたのですが、やはり違うんですか?
VisualStudio.2003を使ってます

102 :デフォルトの名無しさん:2006/12/05(火) 07:18:47
>>101
それだと「引数を受け取らず、Aを返す関数の宣言」と解釈されてしまってる。

103 :デフォルトの名無しさん:2006/12/05(火) 10:17:03
>>98
標準ライブラリに習って、メンバの状態取得には何もつけない。

[オブジェクト].名詞();    // げった
[オブジェクト].動詞(値) // せった。 若しくは [オブジェクト].set_名詞(値)

でアクセス。たとえば mode なら

int md = object.mode();
object.change_mode(md);

サイズなら、

size_t sz = object.size();
object.resize(sz);

みたいな。


104 :デフォルトの名無しさん:2006/12/05(火) 10:20:26
type member() const;
void member(type value);
でいいじゃん。

105 :デフォルトの名無しさん:2006/12/05(火) 13:49:47
>>104
bind に渡すときとか面倒なうえに可読性もガタ落ちするんで、やめてください。

106 :98:2006/12/05(火) 14:47:40
レスありがとうございます。
特にこれといった流儀はなさそうですが、
>>99-100
そのclassを使う側からしてみれば、
member変数なのかも分からないですもんね。
そうすると、member変数が持つ状態のか、
制御する装置自身が持っている状態なのか、
気にする必要はないような気がします。

>>103
こっちでも確かにそうだなーと思ってしまう。

どっちにするか未定ですが、参考になりました。

>>104
きもす。

107 :デフォルトの名無しさん:2006/12/05(火) 16:16:10
new/deleteに関する質問です。

newで動的に領域を確保しているのですが、
この領域をいくつものクラス間で利用しているため、
どのクラスでdeleteすればいいかが分かりません。
最後に使用しているクラスを判断するみたいな関数とか
ありませんでしょうか?

108 :デフォルトの名無しさん:2006/12/05(火) 16:19:23
>>107
その領域を使用しているクラスを表すカウンタを作る

109 :デフォルトの名無しさん:2006/12/05(火) 16:21:03
クラスとインスタンスの区別はつけよーぜ。
ってのはともかく、スマートポインタとかリファレンスカウントとかって言葉で調べろ。

110 :デフォルトの名無しさん:2006/12/05(火) 16:21:30
>>108
その手があったか!!
サンクス

111 :デフォルトの名無しさん:2006/12/05(火) 16:25:41
>>109
すみません、まだC++始めたばっかりで
理解できていない部分が多くて(´Д⊂グスン
精進しますm(_ _)m

112 :デフォルトの名無しさん:2006/12/05(火) 17:40:40
Stroustrupへのインタビュー

ttp://www.techreview.com/InfoTech/17831/

113 :デフォルトの名無しさん:2006/12/05(火) 17:46:23
そのネタもう秋田

114 :デフォルトの名無しさん:2006/12/05(火) 17:57:00
毎年いるなー
「このネタ面白いでしょでしょ?」なバカが。
氏ねばいいのに

115 :デフォルトの名無しさん:2006/12/05(火) 18:38:42
細かくあちこち覗いてると、毎月ペースで出会うw

116 :デフォルトの名無しさん:2006/12/05(火) 19:45:17
io.h, stdio.h, fstream
とありますが、ファイル入出力で一番処理効率がいいのって
fopen系ですよね?
fstream系のオブジェクトで数メガのファイルを開くとどうもモッサリします…

普通にこんな感じなんですが。

ifstream in("file", ios::binary);
in.seekg(ios::end);
int size = in.tellg();
in.seekg(ios::beg);
char pbuf = new char[size];
in.read(pbuf, size);
in.close();
delete []pbuf;

117 :デフォルトの名無しさん:2006/12/05(火) 20:04:10
>>116
実装による

118 :デフォルトの名無しさん:2006/12/05(火) 20:07:31
>>117
そうですよねぇ…
VC++6.0なんですけど、>>116コードがかなりモッサリしてたんで…

119 :デフォルトの名無しさん:2006/12/05(火) 20:24:10
1MB以上1GBぐらいまでのファイルの読み込みなら素直にAPI使ってメモリマップトファイルで。

120 :デフォルトの名無しさん:2006/12/05(火) 22:41:13
>>113-114
>>112はいつものネタじゃないぞw
ttp://slashdot.jp/~El-ahrairah/journal/384164
日本語訳

121 :デフォルトの名無しさん:2006/12/05(火) 22:57:06
昔Cの読んだ本で、
「プログラミング言語C」 難しい、分からない
「初めてのC」 全然分からない
「新・詳説C言語」 分かりやすくてサイコー
こんな感じだったんだけど。

「新・詳説C言語」のようなC++の解説サイト(日本語限定)、なかなか見つからない。
色々ぐぐってみて、javaでは今のところ、
Javaの道(Java入門・リファレンス)
ttp://www.javaroad.jp/
が一番イメージに近いんだけど。

122 :デフォルトの名無しさん:2006/12/05(火) 22:59:56
>>121
〜だけど。〜だけど。
何が言いたいのか分からない。


123 :デフォルトの名無しさん:2006/12/05(火) 23:22:44
とりあえず英語勉強しろと言っとこう。
絶対必要になるし。

124 :デフォルトの名無しさん:2006/12/06(水) 04:13:20
2次元配列を使った3×3行列の転置行列って、どうやったらいいですかねぇ?

125 :デフォルトの名無しさん:2006/12/06(水) 04:16:00
行と列を入れ替えればいいと思うよ

126 :デフォルトの名無しさん:2006/12/06(水) 13:37:44
関数の引数として一時オブジェクトを渡すとなぜコピーが発生しないのでしょうか?
例えば、これ。
class A;
void Func(A obj);
int main() {
Func( A() ); //コンストラクタを直接呼んで一時オブジェクトを生成
return 0;
}
後、一時オブジェクトはスタックに作られるんでしょうか?

127 :デフォルトの名無しさん:2006/12/06(水) 13:45:08
>>126
必ずコピーが発生しないわけではない。
詳細は覚えてないけど、ダイレクトで渡してもいいよっていうルールがあるだけ。
場合によってはレジスタ上にしか存在しないなんて例外もあるかもしれんが、
基本的に一時オブジェクトはスタック上に作られる。

128 :デフォルトの名無しさん:2006/12/06(水) 13:59:28
最適化とかが進むと、クラスの実体自体が機械語レベルでは消えてたりとかな。

129 :126:2006/12/06(水) 14:18:24
一時オブジェクトは、スタックに作られるというのは分かりました。
>必ずコピーが発生しないわけではない。
ということは、一時オブジェクトからさらに引数のために
スタックにコピーされることもあるってことですよね。
そうなると、引数にするものが存在するのにコピーして無駄
な作業してるじゃないですか。

130 :デフォルトの名無しさん:2006/12/06(水) 15:54:14
>>129
そして>>127へ戻る。
最適化で無駄なコピーを除去してよいという規則がある。

131 :126:2006/12/06(水) 16:32:33
なんかもやもや感がありますが、そういう規則が適用される場合があると考えることにします。
回答ありがとうございました。

132 :デフォルトの名無しさん:2006/12/06(水) 21:18:33
一時オブジェクトの省略はしても良いし、しなくても良い。
どちらにするかの判断はコンパイラに任されている。

133 :デフォルトの名無しさん:2006/12/06(水) 21:45:30
引数も戻り値も一時変数もローカル変数も全部スタックの上の話ってことさ

134 :126:2006/12/06(水) 22:30:35
なるほど、コンパイラによるんですね。結構すっきりしてきました。
でも、テストコードを作るために直接コンストラクタを呼んで一時オブジェクト使えばコードを書く量が減るから
いいなぁ〜って思ったけど、あまりやらない方がいいですね。

135 :デフォルトの名無しさん:2006/12/06(水) 22:51:45
コードの量は減らせるなら減らしたほうがいい
わかりやすさを損ねない限り

136 :デフォルトの名無しさん:2006/12/06(水) 23:04:11
そもそもクラスを引数にするなら普通const参照にするだろ。

137 :デフォルトの名無しさん:2006/12/07(木) 10:16:50
>>134
その辺は次の標準ではやり方が変わる可能性が高い。
rvalue reference, move semantics辺りで。

138 :デフォルトの名無しさん:2006/12/07(木) 11:04:59
聞いてない

139 :デフォルトの名無しさん:2006/12/10(日) 13:37:08
拡張子 cppは見直すべきじゃないか
http://www002.upp.so-net.ne.jp/mif/cpp/


140 :デフォルトの名無しさん:2006/12/10(日) 14:14:28
>>139
それでなくても C PreProcessor との曖昧さが問題だろ。

141 :デフォルトの名無しさん:2006/12/10(日) 17:29:51
namespace A
{
int a()
{
retrun 0;
}
}
using A::a();
int main()
{
a();
retrun 0;
}

こう書いてるノートがあるんですが、
これって間違いですよね。
正しくは
using A::a;
じゃないんですか?

142 :デフォルトの名無しさん:2006/12/10(日) 17:42:27
>>141 コンパイルしてから聞け。

143 :デフォルトの名無しさん:2006/12/10(日) 17:47:50
>>142
using A::a();
でコンパイルできなくて
A::a;
だとできたので聞いたんです。

144 :デフォルトの名無しさん:2006/12/10(日) 17:52:30
そこまでやって自分で結論出せないなら首吊って氏ね

145 :デフォルトの名無しさん:2006/12/10(日) 17:54:32
>>143
オマエのコンパイラは retrun がコンパイルできるんだな。それ C++ じゃないよ。

146 :デフォルトの名無しさん:2006/12/10(日) 17:58:52
>>145
return の間違いだろ。スルーしとけばよくね?

147 :デフォルトの名無しさん:2006/12/10(日) 18:00:02
>>145
return の間違いです。

148 :デフォルトの名無しさん:2006/12/10(日) 18:12:06
>>144
いや、誉めてもらいたいんだよきっと

149 :デフォルトの名無しさん:2006/12/10(日) 18:34:12
すみません、C++がほとんど分からないバカですが、
分からないにも関わらず、C++の仕事やんなきゃいけなくって、
困ってます。助けてください。(ほんとにわけわかってません)

[質問]
  MFCでつくったDLLって、MFCでつくったEXEからしか
  呼べないんでしょうか? MFC以外のC++のEXEから呼ぶ
  方法があれば、教えて下さい。

150 :デフォルトの名無しさん:2006/12/10(日) 18:39:40
>>149
スレ違い。

バカはプログラムするな。分からないと自覚してるんなら仕事は断れ。

151 :デフォルトの名無しさん:2006/12/10(日) 18:41:09
>>149
■MFC相談室 mfc17d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1164073111/

152 :デフォルトの名無しさん:2006/12/10(日) 18:49:01
質問です。
#include <iostream>
using namespace std;

namespace x
{
a(int,int);
int i;
int j;
int k;
}

int x::a(int k, int j)
{
cout << k+j << endl;
return 0;
}

int main()
{
return 0;
}

これがコンパイルできるのですが、
関数宣言したとき、戻り値書かなかった場合、自動的にintになるんですか。

153 :デフォルトの名無しさん:2006/12/10(日) 18:54:58
>>152
暗黙の宣言でググれ。
Cやその前身のBの頃の名残り。

154 :デフォルトの名無しさん:2006/12/10(日) 18:56:50
質問です
シーはネトゲに向いてますか?
どんなネトゲに使われてますか?

将来ネトゲ作るために、少しふれておきたいです
どれがいいのか悩んでます

155 :デフォルトの名無しさん:2006/12/10(日) 18:57:04
>>149
もしお客だったとして、こんな奴の作ったもの使いたくない

156 :デフォルトの名無しさん:2006/12/10(日) 18:57:44
>>153 ありがとうございました。

157 :デフォルトの名無しさん:2006/12/10(日) 19:11:00
C言語の構造体

typedef struct tree{
int value;
..any
struct tree *next;
struct tree *child;
struct tree *parent;
struct tree *prev;
}Tree;

このようなデータ構造をC++側でラップする場合みんなどうやってラップしますか?

158 :デフォルトの名無しさん:2006/12/10(日) 19:17:57
>>152
コンパイラ何使ってる? C++ では暗黙の型指定は無くなってるはず。

159 :デフォルトの名無しさん:2006/12/10(日) 19:18:43
>>157
ラップする目的がわからないと、何も決まらない。

160 :デフォルトの名無しさん:2006/12/10(日) 19:29:03
>>159
AIXとHPでほぼ同じ構造体を持つライブラリがあります。
わざわざ呼び出すのに、ライブラリに依存して呼び出したくないので
ラップして、隠蔽したいなぁと考えています。

161 :デフォルトの名無しさん:2006/12/10(日) 19:45:57
>>160
共通のインターフェースを純粋仮想関数としたクラスを書いて、
それぞれの実装(派生クラス)にラップする構造体を持たせる
って感じが基本かなぁ。

162 :デフォルトの名無しさん:2006/12/10(日) 19:46:05
>>158
Borland C++ 5.5.1
拡張子で判断してくれてるんだと思ってたけど、
なんかオプション必要?

163 :デフォルトの名無しさん:2006/12/10(日) 19:48:39
>>162
namespace でエラーが出ないなら、 C++ としてコンパイルしてるはず。
どうせ C の実装をそのまま使いまわしちゃってるんだろう。
ここはソースを直すべき。

164 :デフォルトの名無しさん:2006/12/10(日) 20:16:52
>>163
どうも。

165 :デフォルトの名無しさん:2006/12/10(日) 21:40:38
Exceptional C++ Style で、コピーの生成を省略できる(RVO)理由として
「標準準拠のプログラムと区別がつかない限り、コンパイラは標準の
技術的要求と異なることをしても良い」
とあるのですが、意味がよく分かりません。
例えばコンストラクタで画面に文字を出力しているときなどでは、
コピーが省略されると結果が変わってくると思うのですが

166 :デフォルトの名無しさん:2006/12/10(日) 21:53:46
RVOは規格にやってよいと書かれているはず。

167 :デフォルトの名無しさん:2006/12/10(日) 22:01:27
>165
第何項の話?

168 :デフォルトの名無しさん:2006/12/10(日) 22:02:57
>>166
http://cpptips.hyperformix.com/cpptips/ret_val_opt.txt

>>165
その辺りの非効率改善と意味論的錯綜は、
RVOで何とか誤魔化そうとしたけど、誤魔化しきれなかったので、
次の規格で、move semantics, rvalue referenceってのを入れようとしてます。

A Brief Introduction to Rvalue References
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html

169 :デフォルトの名無しさん:2006/12/10(日) 22:03:57
>>167
書籍のことを言っているのなら187P

170 :デフォルトの名無しさん:2006/12/10(日) 22:06:32
>>167
12.8.15じゃん。
12.8 Copying Class Objects

171 :デフォルトの名無しさん:2006/12/10(日) 22:07:37
>>168
要するにいい加減になってるということですか?
(rvalue referenceは是非とも入ってほしいですね)

172 :170:2006/12/10(日) 22:07:44
ぐは!>>167を読み違えてるよ、俺。

173 :デフォルトの名無しさん:2006/12/10(日) 22:10:39
>>171
まああなたの>>165の疑問は正しい感覚であるということになると思います。
良く考えて読んでいる証拠かと。
12.8.15も読んどいてください。JIS規格はただで読めるので。

174 :デフォルトの名無しさん:2006/12/10(日) 22:25:20
>169
ごめんなさい.英語版しか持ってないんです…….

>172
曖昧な質問ですいません.書籍の項目番号を聞いてるつもりでした.

>165
上のレスで挙げられた規格の項目 12.8/15 にありますけれど
"even if the copy constructor and/or destructor for the object have side effects."
でも [N]RVO は許されていて
>例えばコンストラクタで画面に文字を出力しているとき
では RVO が機能しているかどうかで画面出力が変化します.
逆に,画面出力の回数で RVO が効いているかどうかを確認することができます.

ただし constructor/destructor に副作用があるかどうかで,コンパイラの
RVO に関する判断が変わる可能性も否定できませんけれど.

175 :デフォルトの名無しさん:2006/12/10(日) 22:30:33
>>174
私も書いた後でそんな気がしてましたw
「最適化と効率」の「24.constによる最適化」という項の、
Guru質問3の解説にあります

176 :デフォルトの名無しさん:2006/12/10(日) 22:38:42
>175
今,該当の項目読みましたけれど,ここは RVO とは直接の関係が無いと思います.
なので書いてあるとおり, z のコピーコンストラクタで副作用が発生するなら
copy を省略することはできないです (ここが RVO との差異).

177 :デフォルトの名無しさん:2006/12/11(月) 12:41:05
質問です。
関数の引数に渡されたインスタンスが、
ある複数のクラスを継承しているかをRTTIも用いずに判別する方法はあるでしょうか?

その判別が可能であれば、その後に各クラスのインタフェースでメソッドを呼びたいのです。
今のところ、苦肉の策として
class Hoge : public A , B;というクラスの場合、
void Func(A a,B b) のように含まれる型分の引数を増やした関数を作り、
全てに同じインスタンスオブジェクトを指定してもらうようにしています。

178 :デフォルトの名無しさん:2006/12/11(月) 13:11:54
コンパイル時ならtemplateでどうにでもなるんだけどなぁ。
MFCだとRUNTIME_CLASSなんてのがあったね。

179 :デフォルトの名無しさん:2006/12/11(月) 13:13:32
>>177
「複数のクラス」が全部空のインターフェースクラスなら、
単純にまとめたインターフェースクラスを取ればいいんだろうなぁ。
現状で実装が混ざってるんなら、そいつら切り離したら良いんじゃない?

あるいは、
class AB
{
virtual A& A() = 0;
virtual B& B() = 0;
};

class Hoge : public A, B, AB
にして
void Func(AB&);
とか。

180 :デフォルトの名無しさん:2006/12/11(月) 13:42:36
class A{
B b;
};

class B{
A a;
};

としたいんですが、やはりコンパイルエラーです。
どうすれば良いんでしょうか。

181 :デフォルトの名無しさん:2006/12/11(月) 13:57:31
>>180
それ無限入れ子になるから無理

182 :デフォルトの名無しさん:2006/12/11(月) 14:01:42
class A{
B*b;
};

class B{
A*a;
};

実はこれがしたいのを適当に省略してしまいました。
voidで我慢しないといけないんでしょうか。

183 :デフォルトの名無しさん:2006/12/11(月) 14:04:29
class B;
class A{
B*b;
};

class B{
A*a;
};

184 :デフォルトの名無しさん:2006/12/11(月) 14:05:01
arigatougozaimasita;

185 :デフォルトの名無しさん:2006/12/11(月) 21:29:28
>>177

class Q { public: virtual bool QueryClass( uintptr_t cid, void * & pSelf ) = 0; }

template<typename T> uintptr_t CLSID()
{
 static T * dummy = 0;
 return reinterpret_cast<uintptr_t>(&dummy);
}

class A { public: static uintptr_t CID() { return CLSID<A>() } ... };
class B { public: static uintptr_t CID() { return CLSID<B>(); } ... };

class AB : public A, public B, public Q {
 public:
  static int CID() { return CLSID<AB>(); }
  bool QueryClass( uintptr_t cid, void * & pSelf ){
   pSelf = 0;
   if( cid == A::CID() || cid == B::CID() || cid == AB::CID() )
    pSelf = this;
   return pSelf != 0;
  }
};

186 :デフォルトの名無しさん:2006/12/11(月) 22:47:22
感動した
流石template

187 :デフォルトの名無しさん:2006/12/12(火) 01:21:12
プログラムの事じゃないからここで聞いちゃいけないかもしれないけど・・・

小さい頃からプログラマーになりたくて中学校のときに中学生なりに勉強はしてたけど
普通の勉強が嫌いでプログラムの勉強ばっかりしてたら工業高校にいけなくて結局普通高に行った
学校は普通の授業ばかりでやる気も出ずに中退
プログラマーの夢も諦めてしばらくNEETやってたけどやっぱり親に頼りっきりってのも問題だと思って
もう一度プログラムの勉強始めてみた

でも中卒でプログラマーやPC関連の職に就けるとは思えない・・・
もし望みがまったく無いなら今のうちに諦めて別の職業を探そうかなと・・・

今から勉強をがんばったとして望みはありますか?
大検も一応受けようと思ってます

188 :デフォルトの名無しさん:2006/12/12(火) 01:26:26
プログラムの勉強ばっかりしてたら
数学も英語も必要になるのでどうにかなっただろう

君はバカなのだ
逆説的だが君はプログラマに向いている
望みはある

189 :デフォルトの名無しさん:2006/12/12(火) 01:52:26
>>188
数学も英語も一応使う部分は勉強して理解してたけど
その時の授業で使われないから意味が無かった・・・
好きなことに関しては勉強意欲もあるし長時間できるけど
国語や社会などの勉強は10分も出来ない・・・やる気が出ない・・・極端すぎた

就職する望みがあるならこのまま勉強続けたいと思います
とりあえずCとJavaかな・・・

ありがとうございましたw

190 :デフォルトの名無しさん:2006/12/12(火) 02:14:22
一気にスレのレベルが上がったなw

191 :デフォルトの名無しさん:2006/12/12(火) 02:27:08
大学入試でも私立なら国社はいらないし気にすることないんじゃないの

192 :デフォルトの名無しさん:2006/12/12(火) 02:35:30
>>187
正攻法で行っても、実力を評価される前に「足切り」されるのがオチ。
就職希望なら自分の実力を相手にはっきり示せる武器をまずは用意しろ、話はそれからだ。
あと、なにも就職することだけが職業プログラマへの道ではない。

193 :デフォルトの名無しさん:2006/12/12(火) 02:46:57
>>185
QueryClass の結果は戻り値使えばいいんじゃないの?
CLSID にある dummy の型は char const で十分だね。
uintptr_t を使ってる意味が分からない。 void const* を typedef すれば十分じゃないの?

とか、いろいろ突っ込みどころがあって気になったけど、面倒になったからあとはいいや。

>>186
これ、たぶん無駄な記述が多いから真似しないほうがいいよ。

194 :デフォルトの名無しさん:2006/12/12(火) 07:32:29
auto_ptr<>についての質問です。

動的に3次元配列のメモリをauto_ptr<>を使って確保したんですけど、
どうしたらいいのか、わかりません。
どうしたらいいんでしょうか?

195 :デフォルトの名無しさん:2006/12/12(火) 07:44:40
>>194
確保したんだったら、利用すれば?
利用するために確保したんでしょ?

196 :デフォルトの名無しさん:2006/12/12(火) 07:51:22
そもそも配列の保持にauto_ptrを使ってはいけない。

197 :デフォルトの名無しさん:2006/12/12(火) 09:32:34
>>194
boostにmulti_arrayというのがある
boost::multi_array<int, 3> ary(boost::extents[10][20][30]);
ary[0][1][2] = 123;
こんな感じで使える

198 :デフォルトの名無しさん:2006/12/12(火) 11:47:04
クラスのメンバに参照を持ちたいんですけど、ポインタで我慢しないといけないんでしょうか。

199 :デフォルトの名無しさん:2006/12/12(火) 11:52:38
>>199
我慢せずにどうぞ


200 :デフォルトの名無しさん:2006/12/12(火) 12:23:14
template<typename _Ty>みたいな使い方の利点はわかるんだけど
template<int _I>とかって存在理由がよくわからない。
テンプレートクラスなんかでもメンバ変数かなんかに保持してちゃだめなのかな。

201 :デフォルトの名無しさん:2006/12/12(火) 12:58:32
存在理由というか、そもそも使い方が分かってないので、
boost::lambdaでも読んで勉強してはどうか?

202 :デフォルトの名無しさん:2006/12/12(火) 13:05:48
>>200
配列の要素数のような定数式が要求される部分でもパラメータ化できる。

203 :デフォルトの名無しさん:2006/12/12(火) 16:43:17
>>200
引数に渡された配列の要素数がゲットできる。

204 :デフォルトの名無しさん:2006/12/12(火) 17:18:16
フィボナッチ数を計算できるw

205 :デフォルトの名無しさん:2006/12/12(火) 18:15:24
>>193
めんどくさがらずに書いていただきたい。

206 :デフォルトの名無しさん:2006/12/12(火) 18:16:05
上げてすまん。

207 :デフォルトの名無しさん:2006/12/12(火) 18:26:00
>>200
コンパイラに無茶な仕事をさせ、コンパイル時間を大幅に引き伸ばすことができる。

208 :デフォルトの名無しさん:2006/12/12(火) 21:30:15
>>200
C++学習者に意味のわからない奇妙な構文を浴びせ、
混乱に陥れる事が出来る。

209 :デフォルトの名無しさん:2006/12/13(水) 00:44:04
>>205 (>>185)
じゃ、書いてみる。

定型になっている CID() の定義を繰り返すのは無駄だろ。
QueryClass() の実装と継承関係に関連が無いのでまったく信用できない。

というわけで、そもそも >>177 への回答になっていなかったわけだ。
どうでもいいぜ。

210 :デフォルトの名無しさん:2006/12/13(水) 02:15:49
ここで質問に答えてる人に聞きたいんだけど、
何か問題解くためのソースをゼロから書きたいって思ったとき
完成するまでどのくらいの時間かかってんの?
たとえば、どんな問題でもいいけど、ソートとか。

やっぱり頭の中で簡単にアルゴリズムからソース生成できるのかな。


211 :194:2006/12/13(水) 02:59:06
保持するのにuato_ptr<>を使うのは間違いなんですか。
わかりました!
ありがとうございました!

boostですか。初めて見ましたw
これからそれについて勉強してみます。
ありがとうございました!

212 :デフォルトの名無しさん:2006/12/13(水) 10:50:10
テンプレートによるスマートポインタを作っているのですが、
void型をサポート可能にしてしまうと、operator*()が実装出来ずに困っています。
error C2182: '*' : 'void' 型が不適切に使用されています。
どのように解決すればよいでしょうか?ご教授下さい。

213 :デフォルトの名無しさん:2006/12/13(水) 11:11:53
特殊化

214 :デフォルトの名無しさん:2006/12/13(水) 12:14:07
>>213
なるほと、こんなときの特殊化でしたね。
ありがとうございました。

215 :デフォルトの名無しさん:2006/12/13(水) 15:50:23
>>210
ソートだと、STLとかのライブラリに頼り切ってるから
全部自分で書こうとすると悩むかも。クイックソートってどうやるんだっけ?とか。

簡単な問題なら、大まかなアルゴリズムがパッと思い浮かぶ。
で、もっとスマートにできないかとか、これで合ってるのかとかちょっと考える。
アルゴリズムが固まればコードに落とすのは簡単。その通りに書けばいいだけだし。

216 :デフォルトの名無しさん:2006/12/13(水) 17:10:32
>>210
スレ違いです。

217 :デフォルトの名無しさん:2006/12/13(水) 17:54:54
すみません。テンプレートで分からないことがあるのですが、

template<typename T> int function(vector<T> vec)
{
 ・・・
 return 0;
}
int main(){
 vector<int> vec;
 function<int>(vec);
 return 0;
}
このような感じだと
「function(class vector<int,alloc<int>>)が定義されていない」
といった感じのエラーが出てしまいます。

型がまだわからないvectorを引数に取る関数を定義するには
どうすればいいのでしょうか?

218 :デフォルトの名無しさん:2006/12/13(水) 18:15:02
>>217
コンパイルできたけど?
includeかnamespace忘れてない?

219 :デフォルトの名無しさん:2006/12/13(水) 19:11:37
あれ、、。
ちなみにコンパイラは何でしょう?

#include <vector>
using namespace std;
と冒頭で打ってるので大丈夫だと思うのですが。

220 :デフォルトの名無しさん:2006/12/13(水) 19:16:43
質問です
LinuxでC++を使う場合、開発環境はEcrips一択でしょうか?
他に便利なものがあれば教えてください

221 :デフォルトの名無しさん:2006/12/13(水) 19:17:05
>>219
gcc,vc,bcc
エラーがでる最小限のソース晒してくれ


222 :219:2006/12/13(水) 19:19:58
>>221
ちょっと時間ください。
大学が閉まりそうなので時間かかってしまうかもしれませぬ。

223 :219:2006/12/13(水) 20:11:00
思っていたソースとだいぶ違っていました。。
#include <vector>
using namespace std;
// default
template<typename T>
int func(T data);
// int
template<>
int func<int*>(int* data);
// vector
template<typename A>
int func<vector<A>*>(vector<A>* data);

// int
int func<int*>(int* data){
return 0;
}
// vector
template<typename A>
int func(vector<A>* data){
return 0;
}

int main(){
vector<int> ivec;
func(&ivec);
vector<float> fvec;
func(&fvec);
int i;
func(&i);
return 0;
}

224 :219:2006/12/13(水) 20:12:01
これだと、
test.cpp(12) : error C2768: 'func' : 明示的なテンプレート引数を使用することはできません。
となってしまいます。
型未定ベクタの特殊化をしたいのでが、うまい方法が分からないです。
何かいい方法はありませんでしょうか?

225 :デフォルトの名無しさん:2006/12/13(水) 20:21:41
関数の特殊化は無理

226 :デフォルトの名無しさん:2006/12/13(水) 20:28:38
>>220
誘導
http://pc8.2ch.net/test/read.cgi/linux/1039282447/


227 :デフォルトの名無しさん:2006/12/13(水) 20:35:57
>>224
templateの特殊化はよく知らないのだけど、コンパイルできるように変えてみた
ただコンパイル通るようにしただけで、たぶん求めてるものと違うと思う

#include <vector>
using namespace std;
// default
template<typename T>
int func(T data);
// int
template<>
int func<int*>(int* data){
return 0;
}
// vector
template<typename A>
int func(vector<A>* data){
return 0;
}

int main(){
vector<int> ivec;
func(&ivec);
vector<float> fvec;
func(&fvec);
int i;
func(&i);
return 0;
}

228 :219:2006/12/13(水) 20:57:12
特殊化できないのですか…むしろする必要がない?きがしてきました。

それでコンパイル通りました。そんな感じで色々試してみます。
携帯からなのでアンカー省略しますが、みなさんありがとうございました。

229 :デフォルトの名無しさん:2006/12/13(水) 21:08:56
人格プログラムって作れるんですか?

230 :デフォルトの名無しさん:2006/12/13(水) 21:11:14
C++で?

231 :デフォルトの名無しさん:2006/12/13(水) 21:14:51
難しいことはよくわかんないです。プログラム自体どんなものかよく分からないし・・・・
ここの話題とは外れているんですけど・・・

232 :デフォルトの名無しさん:2006/12/13(水) 21:21:21
>>231
ここでやれ
http://pc8.2ch.net/test/read.cgi/tech/1160751859/

233 :デフォルトの名無しさん:2006/12/13(水) 21:23:57
教えていただいてありがとうございます


234 :デフォルトの名無しさん:2006/12/13(水) 21:53:36
1GBくらいのメモリを一気に必要とするプログラムを作ってるんですが。。。
物理メモリ1GBのマシンで走らせると、
スワップで死ぬほど遅くなります。。
スワップ走らせないで、物理メモリのみを確保するにはどうしたらいいんですか?
WinXPです

235 :デフォルトの名無しさん:2006/12/13(水) 21:55:44
>>234
XPは、カーネルが、100MB以上のメモリを必要とするが、どこから1GBのメモリは湧き出てくるのかね?

236 :デフォルトの名無しさん:2006/12/13(水) 21:56:52
>>234
仮想メモリを切っておく

ってのは冗談としてWin32API使わないと出来ないかも

237 :デフォルトの名無しさん:2006/12/13(水) 22:30:02
>>235
会社の共有スペースにメモリが落ちてます

>>236
そうですか。。。すれ違いですみません

238 :デフォルトの名無しさん:2006/12/13(水) 22:54:13
絶対にスワップしないと保障できるメモリはAWEで確保できるが、
AWEはあまり使いやすいとは思えない。
大抵の用途ではオーバースペックだし。


そもそもAWEを有効にするには、BOOT.INIを変更する必要があるし。

239 :デフォルトの名無しさん:2006/12/13(水) 22:55:08
スレ違いも程ほどに

240 :デフォルトの名無しさん:2006/12/13(水) 23:15:58
>>234みたいな糞はともかくとして
PCの知識が不足気味な奴って結構いるよな

241 :デフォルトの名無しさん:2006/12/13(水) 23:25:41
むっかーーーーー!!!!!!!!!!!!!!!
ぷりぷり

242 :デフォルトの名無しさん:2006/12/13(水) 23:28:12
>>240
クズは死になさい

243 :デフォルトの名無しさん:2006/12/13(水) 23:32:01
>>238さん
ありがとうございます。
AWE調べてみます。

>>240さん
糞に糞と言われたくありません。

244 :デフォルトの名無しさん:2006/12/13(水) 23:37:19
>>243
うんこ

245 :デフォルトの名無しさん:2006/12/13(水) 23:41:08
>>243
( ・∀・)つ三三三三三● ウンコクラエ!!

246 :デフォルトの名無しさん:2006/12/13(水) 23:51:10
>>243がウンコもらした

247 :デフォルトの名無しさん:2006/12/13(水) 23:51:41
おい、なんか>>243のほうから臭うんだが・・・


248 :デフォルトの名無しさん:2006/12/13(水) 23:52:33
>>243
いちいち構うな。

249 :デフォルトの名無しさん:2006/12/13(水) 23:57:58
>>243


250 :デフォルトの名無しさん:2006/12/13(水) 23:59:00
うんこだけに>>243の人気に嫉妬!(shit)

251 :デフォルトの名無しさん:2006/12/14(木) 00:00:27
>>250
だれがうまい事ry

252 :デフォルトの名無しさん:2006/12/14(木) 00:01:30
>>250を無視リストに入れた

253 :デフォルトの名無しさん:2006/12/14(木) 00:12:41
>>50
責任は取りなさい。

254 :デフォルトの名無しさん:2006/12/14(木) 00:17:48
急速にスレの質が低下してまいりました

255 :デフォルトの名無しさん:2006/12/14(木) 00:27:00
ム板ではよくあること

256 :デフォルトの名無しさん:2006/12/14(木) 01:02:55
>>217
> といった感じのエラーが出てしまいます。

ずばりエラーメッセージそのものを張りなよ。

257 :220:2006/12/14(木) 01:21:30
>>226
ありがとうございます

258 :デフォルトの名無しさん:2006/12/14(木) 14:49:25
拡張子の問題なんだけど

*.hpp, *.cpp
のファイルはboostと同じ命名方法でclassを書いた

.hxx, cxx
適当な命名規則でむちゃくちゃ

が混在していて

A.hxx
A.hpp
A.cpp
で2つのヘッダーに分けるか2重に名前定義するか迷ってるんだけど
なにかいい解決方法ない?

259 :デフォルトの名無しさん:2006/12/14(木) 19:52:11
>>258
よくわからんが、「適当な命名規則でむちゃくちゃ」を捨てればいいんじゃね?

260 :sage:2006/12/14(木) 22:46:09
すみません、低レベルで申し訳ないのですが、
int* num;
はポインタですよね、
int& num;
の意味は何でしょうか?

261 :デフォルトの名無しさん:2006/12/14(木) 22:50:05
リファレンス

262 :デフォルトの名無しさん:2006/12/14(木) 22:55:08
参照

263 :デフォルトの名無しさん:2006/12/14(木) 23:03:30
ありがとうございます。
あと、クラスのconstメンバや参照メンバ
の初期化ってどうすればいいのでしょうか?

264 :デフォルトの名無しさん:2006/12/14(木) 23:07:39
きりがないから、まず本なりで一通り勉強しろ。

265 :デフォルトの名無しさん:2006/12/14(木) 23:14:20
すみません。質問禁止とは知りませんでした。
申し訳ないです。
明日図書館に行ってみます。

266 :デフォルトの名無しさん:2006/12/14(木) 23:19:35
禁止ではないが、入門レベルの本を見ればずばりの方法が書いてあることは、本を見ろよと思う。
お前以外にも山ほど同じような疑問を抱くやつは出てくるから答えるほうだって飽きてくる。

267 :デフォルトの名無しさん:2006/12/14(木) 23:24:40
>>263
コンストラクタの初期化リストで行う
というか行わないとエラーになるだろ

268 :デフォルトの名無しさん:2006/12/14(木) 23:37:26
参照はともかくconstなメンバはコンストラクタで代入しても、実は平気。
コンストラクタ・デストラクタの中ではconstがないものとして扱われるはず。
勿論なるべく初期化リスト使うべきだろうが。

269 :デフォルトの名無しさん:2006/12/14(木) 23:47:22
気持ち悪い仕様だな

270 :263:2006/12/14(木) 23:55:24
みなさん本当に申し訳ありません。
明日図書館で調べてみます。
迷惑かけてしまって本当にすみませんでした。

271 :デフォルトの名無しさん:2006/12/14(木) 23:58:00
>>268
おい、嘘付くな。
コンストラクタ内でconstに代入しようとしたら当然のごとく
コンパイルエラーになったぞ。

staticでないconstは初期化リスト、staticの場合は外部で
定義するか、static const intだけは直接書いてもいいけど、
コンストラクタ内ではだめだろ。

272 :268:2006/12/15(金) 00:21:48
本当だ、すまん。
オブジェクト自身にconstが付いている場合とごっちゃにしていた。○| ̄|_

273 :デフォルトの名無しさん:2006/12/15(金) 00:38:44
>>272
>オブジェクト自身にconstが付いている場合とごっちゃにしていた。○| ̄|_

どういうこと?

274 :デフォルトの名無しさん:2006/12/15(金) 03:23:43
1418544個のデータをint型の配列に格納しようとしたんですけど、
異常終了っていうんでしょうか?強制的に終了しました。
int data[1418544]も一気に確保する事ってできないようになってるんでしょうか?

275 :デフォルトの名無しさん:2006/12/15(金) 03:42:04
>>274
お前がMS-Windowsを使っているなら、デフォルトのスタックは1MBだ。
後は分かるな?

276 :デフォルトの名無しさん:2006/12/15(金) 04:14:41
>>275
?! そうだったんですか!

分けなくてはならないって事でしょうか?
どうしたらいいんでしょうか?


277 :デフォルトの名無しさん:2006/12/15(金) 05:00:38
つnew

278 :デフォルトの名無しさん:2006/12/15(金) 05:19:20
あっ!
ありがとうございました!

279 :デフォルトの名無しさん:2006/12/15(金) 13:16:01
Cの基礎勉強しなおしたいんですけど、
基礎とその基礎を使った問題が載ってる本てあるんでしょうか?
何かお勧めの本あったら教えてください

280 :デフォルトの名無しさん:2006/12/15(金) 13:25:15
独習C

281 :デフォルトの名無しさん:2006/12/15(金) 13:42:56
独習シリーズは簡単すぎると思うのはオレだけ?

282 :デフォルトの名無しさん:2006/12/15(金) 15:45:02
というより独習C++から初めても簡単だからね。

283 :デフォルトの名無しさん:2006/12/15(金) 16:02:30
boostのシリアライズって、
ポインタを渡しても自動的にポインタが指すインスタンスが
シリアライズされますよね?
あれってどうやって、ポインタか否か判別してるんですか?

284 :デフォルトの名無しさん:2006/12/15(金) 16:43:37
んー、俺のスキルでは簡単にまとめられん。
ソース嫁。

285 :デフォルトの名無しさん:2006/12/15(金) 17:03:29
type_traints

286 :デフォルトの名無しさん:2006/12/15(金) 17:23:59
ポインタで特殊化してるとか?

287 :デフォルトの名無しさん:2006/12/15(金) 18:12:56
>>284
読んでみました。
extended_type_infoとかあやしいんですが、
ややこしいですね…

>>285
ブースト内検索してみましたが
出てこなかったです。

>>286
う〜ん。見た感じserialize関数はテンプレート使ってないです。
最初それでやってたんですが、記述量が無駄に増えてスマートにならなかったので、
boostはどうしてるのか気になったんです。

288 :デフォルトの名無しさん:2006/12/15(金) 18:14:18
http://www.kmonos.net/alang/boost/classes/type_traits.html

289 :デフォルトの名無しさん:2006/12/15(金) 18:19:13
あ、type_traitsですね。
ありがとです。
調べてみます。

290 :デフォルトの名無しさん:2006/12/15(金) 20:05:18
↓のソースコードみたいにyやnを入力してループを終了するのではなく、

 画面に
  continue finish
 のようなのを用意しておき、方向キーの「←」「→」で、
 選択した方されたほうを、括弧([ ])で
  continue [finish]
 のように表示させて、enterキーを押すと
 決定される(上の場合はループを抜ける)ようにしたいのですが、
 どうしたらいいのでしょうか?

#include <iostream>
using namespace std;

void main()
{
char cInput = 'n';
do {
cout << "終了する場合は y を入力\n";
cin >> cInput;
} while ( cInput != 'y' );
return 0;
}


291 :デフォルトの名無しさん:2006/12/15(金) 20:13:09
環境依存。他所でどうぞ。

292 :デフォルトの名無しさん:2006/12/15(金) 20:16:16
>>291

はい。

293 :デフォルトの名無しさん:2006/12/15(金) 20:16:40
ブロッキングせずに入力状態にするのってスレッド使わなきゃ無理?

294 :デフォルトの名無しさん:2006/12/15(金) 20:35:38
環境依存。

295 :デフォルトの名無しさん:2006/12/15(金) 22:27:38
gcc 3.4.5使ってます

template< class T, class T2 > class Hoge {
public:
 map< T, T2 > _map;
 map< T, T2 >::iterator GetBegin(){ return _map.begin(); }
};

と書くと、"expected ';' before GetBeginとエラーになります。
map< T, T2 >::iteratorって文法違反なのでしょうか?


296 :デフォルトの名無しさん:2006/12/15(金) 22:29:26
typename map<T, T2>::iterator

297 :デフォルトの名無しさん:2006/12/15(金) 22:31:40
ありがとうございます。
出来ました。typename必要だったのですね・・
VSだとiterator前にtypename無くてもOKだったので気づきませんでした

298 :デフォルトの名無しさん:2006/12/16(土) 05:22:59
VC++じゃない方のC++で
分かりやすくMakefileの書き方が載ってるサイトがあれば教えてください

299 :デフォルトの名無しさん:2006/12/16(土) 06:25:55
>>298
スレ違い……いや、鼬害だ。
Makefileは言語に関係なく書式が決まっている。先ずはmakeのマニュアルページでも見たまえ。

300 :デフォルトの名無しさん:2006/12/16(土) 10:56:12
>>298
UNIXプログラミングスレで答えておきました。

301 :デフォルトの名無しさん:2006/12/16(土) 14:09:31
>>299
鼬害(?)失礼しました。

>>300
ありがとうございました。

302 :デフォルトの名無しさん:2006/12/16(土) 17:01:21
一応この板にもmakeスレはあるけどな。
ttp://pc8.2ch.net/test/read.cgi/tech/1029599472/

俺はmakeわけわかめだったからもうビルドツール自作した。

303 :マリー:2006/12/17(日) 12:08:55
antにすればいいじゃない

304 :デフォルトの名無しさん:2006/12/17(日) 12:36:02
C++だったらboost jamだろ

305 :デフォルトの名無しさん:2006/12/18(月) 12:51:27
#define max
が使ってるライブラリのどこかにあるみたいなんだけど
(max)って書くと避けられるとも聞いたのだが
(max) = #define max のこと?

306 :デフォルトの名無しさん:2006/12/18(月) 12:53:57
環境依存スレへ

307 :デフォルトの名無しさん:2006/12/18(月) 13:33:03
言語仕様の話だろ

#undef max
でいいんじゃないか?

308 :デフォルトの名無しさん:2006/12/18(月) 14:42:47
>>305
()をつけるとマクロ展開が抑制される。

309 :デフォルトの名無しさん:2006/12/18(月) 15:02:05
maxを定義しているのが<windows.h>の中からなら#define NOMINMAX

310 :デフォルトの名無しさん:2006/12/19(火) 01:56:19
>>308
引数つきの奴だけ、な。

311 :デフォルトの名無しさん:2006/12/19(火) 09:02:06
stringstreamの内部バッファをクリアするには
どうすればいいのでしょうか?





312 :デフォルトの名無しさん:2006/12/19(火) 09:17:42
>>311 str(string())

313 :311:2006/12/19(火) 09:27:19
>>312
本当にありがとうございました。

pubsetbuf、clearとかそれらしいものみてたけど
str()で取得できるのは知ってたんで
まさかstrで設定もできるとは...orz

io関係の命名則、意地悪すぎ...


314 :デフォルトの名無しさん:2006/12/19(火) 18:15:31
stringstreamの内部バッファのサイズを変更する方法を教えてください。

315 :デフォルトの名無しさん:2006/12/19(火) 18:20:46
数値計算系のプログラムつくってると
デバックのために、計算の途中結果を図でみたくなることがよくある

例えば
std::vector<double> a(100)
のヒストグラムを図でみたくなったりする

こういう場合に図示するのに使えるライブラリーとかないのでしょうか?

例えばこんな感じです

std::vector<double> a(100)
....
plot_hist(a);
wait_key(0);



316 :デフォルトの名無しさん:2006/12/19(火) 18:36:07
>>315
C++を使わずにRを使いましょう。

317 :デフォルトの名無しさん:2006/12/19(火) 20:04:25
静的なstd::mapを作成する方法ってないですかね
enum{id_0,id_1,id_2};
static const std::map<int,char*> m ={
{id_0,"val0"},{id_1,"val1"},{id_2,"val2"}
};
キーと値のマッピング情報はコンパイル時に確定しているので、
わざわざ動的にmapを生成するのは無駄の様な
気がします・・

318 :デフォルトの名無しさん:2006/12/19(火) 21:05:38
普通にchar*の配列じゃだめなのか・・・?

319 :デフォルトの名無しさん:2006/12/19(火) 21:11:33
>>318
vectorじゃなくてmapなんだから、きっとこんなenumなんだよ。たぶん。
enum ID {id_1= 10001, id_2 = 10001} ;

320 :317:2006/12/19(火) 21:21:58
>>318まさに>>319の通りです。keyが0オリジンとは限らないし、stringの場合もあります
今までは
struct foo{ int key,char* val };
foo[]={ {1,"one"},{3,"tree"},{5,"five"}};
してループでサーチしたりしてたんですが
せっかく標準で用意されてるんだからmap(set)を使えばサーチが楽じゃね?

と思ったわけです


321 :デフォルトの名無しさん:2006/12/19(火) 21:36:06
binary_searchでも使っとけ

322 :デフォルトの名無しさん:2006/12/19(火) 23:19:32
1つのクラスにメンバが100個(含むポインタ)くらいあるんですが、
コピーコンストラクタとコピー代入演算子はどう書けばいいんでしょう。。。


323 :デフォルトの名無しさん:2006/12/19(火) 23:27:16
>>322
俺ならそのクラスをrm

324 :デフォルトの名無しさん:2006/12/19(火) 23:40:10
>>322
設計からやりなおせ

325 :デフォルトの名無しさん:2006/12/19(火) 23:45:56
ソース書き直しとか
設計やり直しって、
本当に効果あったことあります?

326 :デフォルトの名無しさん:2006/12/19(火) 23:46:18
重量級だなオイ

327 :デフォルトの名無しさん:2006/12/19(火) 23:49:16
>>322
先ずそのクラスの100個のメンバを4個に分けてそれぞれクラスとする。
次にその4個のクラスの平均25個のメンバを5個に分けてそれぞれクラスとする。
更に、20個+4個+1個のクラスについてコピーコンストラクタを用意すればいい。

328 :デフォルトの名無しさん:2006/12/19(火) 23:52:22
>>327
えーまじーー???
100個書くのは変わんないじゃんwww

329 :デフォルトの名無しさん:2006/12/20(水) 00:01:31
いっそのことコピー不可にしちゃえ

330 :デフォルトの名無しさん:2006/12/20(水) 00:03:57
>>325
当然ある。

331 :デフォルトの名無しさん:2006/12/20(水) 00:06:28
クラスの「仕様の継承」について質問なのですが
メソッドは virtual void func() = 0; の様に宣言するとしても
コンストラクタはどうすればいいのでしょうか?
特定の型を引き受けるコンストラクタ、というのを用意しようとしたとき
その実装をサブクラスに要求するにはどうすればいいか、という事なんですが・・・

332 :デフォルトの名無しさん:2006/12/20(水) 00:07:44
>>331
コンストラクタは継承されないから、
変わりにgetInstanceとかを用意するとかかね

333 :デフォルトの名無しさん:2006/12/20(水) 00:08:18
>>325
全く同じ知識経験の人間がもう一度設計しても同じものになるのは当たり前。
問題点を把握してればそれなりに意味はある。

334 :デフォルトの名無しさん:2006/12/20(水) 00:13:32
>>332
C++の機能とか予約語の事じゃなくて
「欲しい型のデータを取るメソッドを用意しろ」ってことですよね、
要するにコンストラクタは使わないと

やっぱりそれしかないですか・・・

335 :デフォルトの名無しさん:2006/12/20(水) 00:30:08
class Hoge {
public:
Hoge(int foo) {}

private:
Hoge(); //no implement
};

じゃダメ? >>334


336 :デフォルトの名無しさん:2006/12/20(水) 01:09:59
>>331
どうせ template で使うんだろ?なら concept を定義するんだ。
今のところ言語は何も助けちゃくれないけどな。

337 :デフォルトの名無しさん:2006/12/20(水) 01:54:16
VC++6.0でこうやっても大丈夫なんですけど。
これって規格ではどうなんですか?安全が保障されてます?
void *p = NULL;
delete p;
free(p);

338 :デフォルトの名無しさん:2006/12/20(水) 01:55:21
>>337 何にも起こらない。安全。

339 :デフォルトの名無しさん:2006/12/20(水) 02:02:12
>>338
じゃあNULL判定しなくてもいいな。どうも。

340 :デフォルトの名無しさん:2006/12/20(水) 02:10:01
free(NULL)はどうだっけ?

341 :デフォルトの名無しさん:2006/12/20(水) 02:16:50
free(NULL); は問題ナシ。
delete NULL; はコンパイルエラーになりましたよ。
(VC++6.0 Pro SP6)

342 :デフォルトの名無しさん:2006/12/20(水) 07:32:28
>341
よーくかんがえろ。C++では
#define NULL 0
なので、文脈によってはポインタとして扱われない。キャストが要る。

343 :デフォルトの名無しさん:2006/12/20(水) 08:49:48
そこでnullptrですよ

344 :デフォルトの名無しさん:2006/12/20(水) 09:09:20
そこでnullpoですよ

345 :デフォルトの名無しさん:2006/12/20(水) 09:16:01
ゲッ

346 :デフォルトの名無しさん:2006/12/20(水) 18:02:50
STLのsetを使っていて、だいたい

set<X> a;
a.insert(b);

のようなことをやると、

Core was generated by `XYZXYZ'.
Program terminated with signal 11, Segmentation fault.
#0  0x400000000002f320 in std::_Rb_tree<X, X, std::_Identity<X>, std::less<X>, std::allocator<X> >::insert_unique ()
(gdb) backtrace
#0  0x400000000002f320 in std::_Rb_tree<X, X, std::_Identity<X>, std::less<X>, std::allocator<X> >::insert_unique ()
#1  0x4000000000002aa0 in main??unw ()

のような感じでエラーになってしまうようです。
(完全に再現性のある小さいコードを用意することが
出来ませんでした。すみません。)

コンパイラはicc9.0で、gccだと問題なく動作します。
個人的にはsetのinsertでcoreを吐くというのは、
あまりないような気がするのですが、どういうことを
念頭におきながらデバッグすればよいでしょうか?

347 :デフォルトの名無しさん:2006/12/20(水) 18:26:22
346です。
すみません、どうやらスレ違いみたいですね。
ttp://pc8.2ch.net/test/read.cgi/tech/1160821240/l50
で質問させていただきます。

348 :デフォルトの名無しさん:2006/12/20(水) 19:45:45
すごく初歩的な質問なんですけど、
CMyClassというクラスのcppファイル内で

#define FILEPATH L"C:\Test\File"
(中略)
void CMyClass::test
{
CString ss = FILEPATH;
}

というコードを記述してコンパイルすると
error C2065: 'INIFILEPATH' : 定義されていない識別子です。
というエラーが出てきてしまいます。#defineの使い方を
間違っているのでしょうか?であるならば正しい使い方を教えてください。
よろしくお願いします。



349 :デフォルトの名無しさん:2006/12/20(水) 20:04:00
エラー嫁。

350 :348:2006/12/20(水) 20:07:40
>>349
すみません、名前間違っていたのを直しました。
ですがそれでも同じエラーが出てきてしまったんですけど
根本的になにか間違っているんでしょうか?

351 :デフォルトの名無しさん:2006/12/20(水) 20:23:22
ソース晴れ

352 :デフォルトの名無しさん:2006/12/20(水) 20:24:28
バックスラッシュ絡み?

353 :348:2006/12/20(水) 20:42:47
みなさんすみません
ソースではなくヘッダーに記述したところ
コンパイル通りました。
お騒がせいたしましたm(_ _)m

354 :デフォルトの名無しさん:2006/12/20(水) 20:46:32
しかし\は\\にしないといかんと思うが

355 :デフォルトの名無しさん :2006/12/21(木) 01:16:59
>>348
C++で定数つかうならconstで
あとVC++みたいなので
const WCHAR *const FILEPATH = L"C:\Test\File";

356 :デフォルトの名無しさん:2006/12/21(木) 01:21:19
>>355
const WCHAR *const FILEPATH = L"C:\\Test\\File";
だろう

357 :デフォルトの名無しさん:2006/12/21(木) 02:08:59
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。

358 :デフォルトの名無しさん:2006/12/21(木) 02:35:30
257 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

359 :デフォルトの名無しさん:2006/12/21(木) 03:09:20
257?

360 :デフォルトの名無しさん:2006/12/21(木) 07:52:21
>>356
const WCHAR FILEPATH[] = L"C:\\Test\\File";
だろう

361 :デフォルトの名無しさん:2006/12/21(木) 15:15:07
注.:.私.の.有.意.義.な.発.言.に.対.し.、.自.分.の.理.解.不.足.を.棚.に.上.げ.煽.り.、.1.行.レ.ス
で.返.す.方.が.多.い.よ.う.で.す.が.、.そ.の.よ.う.な.方.は.ス.レ.の.皆.様.を.混.乱.さ.せ.る.だ.け.で.な.く
ス.レ.の.雰.囲.気.を.崩.し.か.ね.な.い.の.で.お.黙.り.下.さ.い.。
ま.た.質.問.者.は.回.答.者.に.知.識.を.披.露.す.る.場.を.与.え.る.貴.重.な.存.在.な.の.で.、
質.問.者.を.見.下.し.た.回.答.、.あ.ま.り.に.も.儀.礼.を.欠.い.た.回.答.も.厳.重.に.禁.止.い.た.し.ま.す.。
忙.し.い.中.、.少.な.い.時.間.の.合.間.を.縫.っ.て.質.問.し.に.来.て.る.わ.け.で.す.の.で.、
そ.の.辺.ご.承.知.下.さ.い.。.な.お.、.当.方.が.質.問.に.対.し.て.有.意.義.な.答.え.で.あ.る.と
判.断.し.た.方.に.は.評.価.い.た.し.ま.す.の.で.各.自.よ.く.調.べ.、.よ.く.考.え.正.確.な.回.答.を.す.る.よ.う.に.。

362 :デフォルトの名無しさん:2006/12/21(木) 18:57:23
テンプレートの部分的特殊化で

template<class T> class Hoge{ /* ... */ };
template<class T, class U> class Hoge<T(U)>{ /* ... */ };

というコードを見たんですが、
T(U)という書き方はC++標準に適合しているのですか?

363 :デフォルトの名無しさん:2006/12/21(木) 20:12:01
クラスへのポインタがNULLでも
とりあえずメソッド呼べるんだねー
(もちろんメンバにアクセスしないメソッドだけだけど)



364 :デフォルトの名無しさん:2006/12/21(木) 20:22:59
>>363
鼻から悪魔が出てるぞ

365 :デフォルトの名無しさん:2006/12/21(木) 20:24:13
>>362
T(U)は、U型を引数に取りT型を返す関数型。

>>363
静的メンバがなかった頃には、それで代用していたらしい。
今の規格では、たぶんそれをやるとどうなるかは未定義にしていると思う。

366 :362:2006/12/21(木) 20:33:23
>>365
ありがとうございます
ところで規格書のどのセクションにあるかわかりますか?

367 :デフォルトの名無しさん:2006/12/21(木) 20:34:46
質問です

newで確保したメモリに対して、
2回delete走らせると死ぬのはなぜですか?

368 :デフォルトの名無しさん:2006/12/21(木) 20:40:24
平気と思うその感覚がわからん。

369 :デフォルトの名無しさん:2006/12/21(木) 20:42:03
Linux上でg++を使ってプログラムを書きたいと思っています。
標準ライブラリのオンラインマニュアルはどのようにしたらみれるのでしょうか?
(日本語でも英語でも構いません)

370 :デフォルトの名無しさん:2006/12/21(木) 20:45:10
>>366
強いて言えば8.3.5@JIS X 3014:2003

>>365
deleteされても、deleteしたポインタを指す変数は、そこを指していると言う状態のままである。
そこで、2度目のdeleteを行うと、deleteされたはずの場所をdeleteしようとして、あらぬことになる。

原理的には1度目のdeleteの後で、そこを指す変数に0を代入しておけば2度目のdeleteでは、
ヌルポインタをdeleteすることになって落ちない(ヌルポインタのdeleteは何も起きないと定められている)。
勿論実際には、2度もdeleteするなと言う話になるが。

371 :デフォルトの名無しさん:2006/12/21(木) 20:53:59
>>370
丁寧なご説明
ありがとうございました。


372 :デフォルトの名無しさん:2006/12/21(木) 20:55:27
const変数の値が書き換わってしまうのってどんな場合がありますか?
(メモリ直接上書きとconst_cast以外で)

373 :デフォルトの名無しさん:2006/12/21(木) 20:57:03
放射線

374 :デフォルトの名無しさん:2006/12/21(木) 20:59:45
>>369
http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html


375 :デフォルトの名無しさん:2006/12/21(木) 21:16:35
const変数の値が書き換わるかどうかは未定義では?
const_castは実際にはconstでないオブジェクトへのconstポインタのconstを外すのに使われるだけ
つまり、
int a = 0;
void f(const int* a){
*const_cast<int*>(a) = 1;
}
これはおk
const int a = 0;
void f(const int* a){
*const_cast<int*>(a) = 1;
}
未定義

376 :デフォルトの名無しさん:2006/12/21(木) 21:20:19
>>370
そこで auto_ptr ですよ。

377 :デフォルトの名無しさん:2006/12/21(木) 23:56:10
質問です。

WinXP Pro
VC2005 SP1

RaiseException にて発生させたエラーを、ただの try でキャッチしたいのですが、
try {


378 :377:2006/12/21(木) 23:59:20
質問です。

RaiseException にて発生させたエラーを、ただの try でキャッチしたいのですが、
catch (...)
だとキャッチ出来ます。さらに詳しい情報が欲しいため、catch の () の中に書くべき
コードがわかりません。そもそも、仕様上無理なものなのでしょうか?

ちなみに、__except では成功しました。

WinXP Pro
VC2005 SP1
コンパイルオプションで、「SEH の例外あり (/EHa)」を指定しています。


379 :デフォルトの名無しさん:2006/12/22(金) 00:27:36
そもそも標準にRaiseExceptionなんてものは無いわけで

380 :369:2006/12/22(金) 00:37:13
>>374
ありがとうございました。

381 :デフォルトの名無しさん:2006/12/22(金) 00:39:23
>377
Windowsの構造化例外をC++例外に変換する方法があるが
環境依存なのでスレ違い

382 :377:2006/12/22(金) 04:49:07
>>381
ありがとうございます。
381さんの書き込みで解決しました。

383 :デフォルトの名無しさん:2006/12/23(土) 14:57:35
MFCスレで聞いたら、スレ違いといわれたので、こちらに来ました。

VC++6.0 WinXPProで開発を行っております。
ダイアログアプリの開発を行っており、そのアプリ上で、XPログオン用のユーザ名とパスワード
を利用者に打ち込ませています。このパスワードが正しいかどうかを、開発したプログラム上で
確認したいと思っているのですが、どのようにすればよろしいでしょうか。

384 :デフォルトの名無しさん:2006/12/23(土) 15:06:20
>>383
strcmp() でいいんじゃね?

っていうか、まずは自分で書け。
それで困ったことがあったら相談してもいいから。

385 :デフォルトの名無しさん:2006/12/23(土) 15:12:02
いや、>>383は、そのユーザ名とパスワードが、
正しいアカウントとパスワードであるかどうかを確認したいんじゃないのか。

しかし、そんなAPIはエクスポートされているのかね。

386 :デフォルトの名無しさん:2006/12/23(土) 15:13:13
>>384
strcmpだと、Windowsパスワードとの比較ができません。
そもそも、Windowsパスワード自体知らないわけで、知らない文字列との比較は……

387 :デフォルトの名無しさん:2006/12/23(土) 15:15:21
APIスレのが適切だと思うけどな
APIで、パスワードが「必ずある」ならLogonUserあたりかもしらん
自PCパスワードつきのアカウント1個もないからわからんけど

388 :デフォルトの名無しさん:2006/12/23(土) 15:19:43
あまり環境依存な話は持ち出すべきじゃないと思うが、
ぐぐったら一発でヒットしたぞ。
面倒そうではあるが。
ttp://support.microsoft.com/kb/180548


というわけで終了。

389 :383:2006/12/23(土) 15:52:22
ありがとうございます。

390 :デフォルトの名無しさん:2006/12/25(月) 00:02:49
イブだけど、とりあえずtemplateがキモすぎて俺は失禁しそうです><

391 :デフォルトの名無しさん:2006/12/25(月) 00:55:50
>>390
クリスマスに失禁とはとんだ茶番だな

392 :デフォルトの名無しさん:2006/12/25(月) 01:00:54
fstreamのバイナリモードで数メガのファイルを数バイトずつシークし読み取って変数に格納してるんですが、
なんだかHDに優しくないような気がしてきました。
もっと外道でないやり方はありますか?

393 :デフォルトの名無しさん:2006/12/25(月) 01:03:13
>>392
シークする必要はどうしてあるの?どういう格納方法になってるんだ?

394 :デフォルトの名無しさん:2006/12/25(月) 01:03:50
環境依存だがデカいファイルの読み書きにはmemory mapped fileを使うべし。

395 :デフォルトの名無しさん:2006/12/25(月) 01:11:30
>>392
バッファリングされているから問題ない


396 :デフォルトの名無しさん:2006/12/25(月) 01:13:33
>>392
std::getline()でstd::stringにファイルを一括して読み込み、それを元に
std::stringstreamを作成し、そこから変数を読み取る。

シークの部分はstd::stringstreamではseekpとseekgの意味が異なるので
移植に注意。

397 :デフォルトの名無しさん:2006/12/25(月) 01:15:20
うわっやべえ
ベンチマーク取って遊びたくなってきた。

どちらが速いのか?あーでもファイルはディスクキャッシュを無効に
したりいろいろしないといけないので面倒だな。

398 :デフォルトの名無しさん:2006/12/25(月) 02:59:35
extern "C" void register_callback(void* object, void (*callback)(void* object));

C で作ったライブラリにこんな関数あるんだけど、こいつにクラスの
インスタンスを食わせたいとき、

class C {
public: void foo() { register_callback(this, callback); }
private: static void callback(void* this_);
};

こんなふうに書いてたんだ。コンパイルも通るし、動作にも問題ない。
でも実は extern "C" の中にある関数の型と C++ で普通に宣言した
関数じゃ型が違うらしいんだ。つまり register_callback() に渡す
関数は extern "C" で宣言しないとダメってことね。

それじゃぁってことで、

extern "C" void callback(void* this_);
class C {
public: void foo() { register_callback(this, callback); }
private: friend void callback(void* this_);
};

としたんだけど、これだと callback() が外部シンボルになってしまう。
じゃぁ static つければ内部リンケージになるだろうと思ったけど、

static extern "C" void callback(void* this_);

はコンパイル通らなかった。

どうすればいいと思う?

399 :デフォルトの名無しさん:2006/12/25(月) 03:01:18
>>>398
extern "C" の関数にthisポインタを渡さないようにする。これで解決。

400 :デフォルトの名無しさん:2006/12/25(月) 08:34:12
コンパイルもとおって動作に問題もなくて
何がダメだったのかが分からない

401 :デフォルトの名無しさん:2006/12/25(月) 09:29:55
extern "C"の意味を理解してないのがダメ。
C++側で、Cの流儀に合わせる願望がダメ。

402 :デフォルトの名無しさん:2006/12/25(月) 10:08:48
extern "C" の関数を別につくり、クラスへのアクセスはそこ経由のみ、とか

403 :デフォルトの名無しさん:2006/12/25(月) 11:54:03
>>400
規格の 7.5p1 より
"Two function types with different language linkages are distinct types even if they are otherwise identical."
ということで C++ language linkage を持つ C のメンバ関数 callback() は
C language linkage を持つ register_callback() の引数 callback とは型が違うことになる。

型が違えばエラーになるはずなんだが、コンパイルが通る。ってことは
暗黙の変換か何か行われるのかと思うけど、規格にそんな記述は無い。

型を合わせるために extern "C" をつければいい( >>402 の方法ね)んだけど、
そうすると外部リンケージを持つことになるんで名前付けが面倒。そもそも
別のソースから呼び出したいわけじゃない。

404 :デフォルトの名無しさん:2006/12/25(月) 12:14:14
Linkage from C++ to objects defined in other languages
and to objects defined in C++ from other languages is
implementation-defined and language-dependent. Only
where the object layout strategies of two language
implementations are similar enough can such linkage
be archived.

405 :デフォルトの名無しさん:2006/12/25(月) 12:35:49
これだな。
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2316

規格に沿って修正するとえらいことになってしまう罠。
pthread_create() に C++ の関数渡してるコードなんて
山ほどある。 qsort() や bsearch() もヤバイ。

406 :デフォルトの名無しさん:2006/12/25(月) 12:47:15
>>405
それとは違うでしょ。
同じ名前使ってるんじゃなくて、
リンケージの違うものを渡して型は大丈夫なのかって話だから。
大丈夫でしょ。

callbackにstatic修飾は必要なの?

407 :デフォルトの名無しさん:2006/12/25(月) 12:51:09
>>406
extern "C" と extern "C++" で関数の型を区別するかどうかってことで、
関連はあるだろう。

static つけないとプログラム全体で完全にユニークな名前をつける必要が
あるんで、面倒になる。

408 :デフォルトの名無しさん:2006/12/25(月) 13:09:06
static付けると void (C::*)(void*) ではなくて、
void (*)(void*) と見做されているみたいだが。> g++


409 :デフォルトの名無しさん:2006/12/25(月) 13:23:01
>>408
そんなことはみんな知ってて話してる。

410 :デフォルトの名無しさん:2006/12/25(月) 14:15:33
>>408
当たり前だろwwwwボケはすっこんでろwwwwwwww

411 :デフォルトの名無しさん:2006/12/25(月) 14:17:04
410は初めて知ったようだ

412 :フォルトの名無しさん:2006/12/25(月) 15:12:44
どうみてもC++の基礎知識の欠如です
本当にメリークリスマスでした

413 :デフォルトの名無しさん:2006/12/25(月) 15:40:26
>>403
規格でも認められてる。よく読め。

414 :デフォルトの名無しさん:2006/12/25(月) 17:59:57
初歩的な質問で恐縮ですが教えてください。

int n=10;
int & nRef = n;

上記のような宣言が行われているとして、あるタイミングで
変数nRefに別の参照を設定したいのですが、

int i=8;
nRef = i;

としてみても変わらず変数nを参照してしまいます。
どうしたらよいのでしょうか?



415 :デフォルトの名無しさん:2006/12/25(月) 18:03:15
ポインタにする。

416 :デフォルトの名無しさん:2006/12/25(月) 18:06:52
ポインタを使えばいいという理由で、参照先は後から変えられない。

417 :413:2006/12/25(月) 18:17:13
>>415-416
レスどうもです。
ポインタですか・・・。まだあまりポインタ理解できていないので
使いたくはなかったのですが、これもいい機会だと思って勉強します。
ありがとうございました。

418 :デフォルトの名無しさん:2006/12/25(月) 18:18:34
ポインタが理解できないうちは参照使わない方が良いよ

419 :414:2006/12/25(月) 18:18:34
間違えました。>417は私です。

420 :デフォルトの名無しさん:2006/12/25(月) 18:29:56
つーか、参照先を変えたい理由如何によってはポインタ云々以前かも試練。

421 :デフォルトの名無しさん:2006/12/25(月) 23:53:51
こういうのってOKなの?

#define WORKPATH "c:\\temp\\aaa"
const string g_WORKPATH = WORKPATH;



422 :デフォルトの名無しさん:2006/12/26(火) 00:02:56
何か懸念でも?


423 :デフォルトの名無しさん:2006/12/26(火) 02:23:00
>>413 規格のどこで何が認められてるの?

424 :デフォルトの名無しさん:2006/12/26(火) 02:25:42
>>421
なぜそんなことをしたいのかわからないが、問題ないと思う。

425 :デフォルトの名無しさん:2006/12/26(火) 06:19:24
もしかしたらCからの移行かもな・・・

426 :デフォルトの名無しさん:2006/12/26(火) 06:59:02
クラスのprivateメンバが例え一つしかなくても
Pimplイディオムを使う意義はありますか?

427 :デフォルトの名無しさん:2006/12/26(火) 08:37:42
変数名が置き換わらないのかなと思って

428 :デフォルトの名無しさん:2006/12/26(火) 08:41:52
>>426 あるよ

429 :426:2006/12/26(火) 09:17:09
レスdです

気にせず常にPimpl使おうと思います

430 :デフォルトの名無しさん:2006/12/26(火) 09:47:45
常に…?

431 :デフォルトの名無しさん:2006/12/26(火) 09:57:08
いや、使えそうな場面では常に、ですorz
今まではprivateなメンバが一つの時とかはどうしようか迷ってたんで

432 :デフォルトの名無しさん:2006/12/26(火) 15:10:15
二つに増えるかも知れないから、Pimplを使うと考えろ
ゼロになるかも(ry

433 :デフォルトの名無しさん:2006/12/26(火) 23:23:17
いろんなスレッドから参照されるクラス(インスタンス)
に適用できるデザインパターンて何かな
まあ、普通に全メソッドにクリティカルセクションかけりゃいいけど
なんかいいの無いかな

434 :デフォルトの名無しさん:2006/12/26(火) 23:25:29
Immutable, Read write lockとか?
つかそんなんじゃワカラン

435 :デフォルトの名無しさん:2006/12/26(火) 23:43:13
>>434
ありがトンございます
ともあれデザパタ本買います

436 :デフォルトの名無しさん:2006/12/26(火) 23:45:23
C++ マルチスレッド関連のデザパタ本無いですか?
アマゾンで検索したのですがJAVAしか出てきません

437 :デフォルトの名無しさん:2006/12/26(火) 23:51:59
Javaは言語規格にスレッドがあるからな
素直にJava勉強してその本読んだ方が良いかと

438 :デフォルトの名無しさん:2006/12/26(火) 23:56:38
ACE本はフレームワークの存在が前提だし
デザパタを前面に押し出しているわけじゃないし

POSAの第2巻とか?あれはC++に限ってないけれど

あとはJavaな本をC++の言葉に噛み砕いて読むくらいかな
437に書かれているような言語機能の違いからC++特有の苦労が必要になるけれど

439 :デフォルトの名無しさん:2006/12/27(水) 00:25:14
>>437,438
そうですね。とりあえず基本的なクラスの設計は
Javaと共通の部分があると思うのでJava本買おうと思います。
レスありがとうございました。

440 :デフォルトの名無しさん:2006/12/27(水) 02:29:29
>>439
thread local specifier, __threadってのが多くのベンダのコンパイラで使えて、
標準になりそうなので、調べてといて。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1966.html

441 :デフォルトの名無しさん:2006/12/27(水) 02:54:25
TLSはもう普通に使われてるんじゃね

>>C++でデザパタ
「プログラムデザインのためのパターン言語」って本はサンプルがC++だったよん
すこしsmalltalkもあったけど。
あとネット上なら
http://www002.upp.so-net.ne.jp/ys_oota/mdp/index.htm
とか
http://www.01-tec.com/document/cpp_design_pattern.html
とか。
ハテナダイアリでちょこっと検索するとブログで書かれてるのが出てきたりもする

442 :デフォルトの名無しさん:2006/12/27(水) 15:35:56
質問です
#defineにとっての#undefに相当することを
usingに対してやりたいんだけど、
namespaceを一個作成してその中でusingするしかないんでしょうか

443 :デフォルトの名無しさん:2006/12/28(木) 12:38:58
{
 using ...;
}


444 :デフォルトの名無しさん:2006/12/28(木) 15:57:57
サブルーチンの中にサブルーチンを書くのはどうでしょうか?
というのも指導教官に「それはよくない。美しくない」と指摘されたのですが、
実用性を重視するなら、ありといえばありですよね?
みなさんが直面された重要な困難があれば教えて欲しいです。

445 :デフォルトの名無しさん:2006/12/28(木) 16:06:30
>>444
スレ違い

446 :デフォルトの名無しさん:2006/12/28(木) 16:16:55
すいませんでした。初心者スレで聞いてきます。

447 :デフォルトの名無しさん:2006/12/28(木) 20:19:28
>>444
案外C++な話題かも?

void foo(void)
{
 struct local {
  static void func(void) {
   // do something
  };
 };
 local::func();
 local::func();
}

ある関数内でのみ可視な関数を使いたいときに便利。


448 :デフォルトの名無しさん:2006/12/28(木) 20:41:38
>>444
別に美しくないとは思わない
その教官のセンスがおかしいだけ

449 :デフォルトの名無しさん:2006/12/28(木) 20:56:51
>>448
じゃあお前もおかしいな、センスとか

450 :デフォルトの名無しさん:2006/12/28(木) 21:01:06
>>449==教官
>センスがおかしいだけ

451 :デフォルトの名無しさん:2006/12/28(木) 22:15:31
>>443
これ、いいですね。ありがとん

452 :デフォルトの名無しさん:2006/12/29(金) 10:22:22
lambdaを否定された気がする

453 :デフォルトの名無しさん:2006/12/29(金) 17:19:04
質問です。
C++で、ファイルの内容を一度にstd::stringに読み込む方法は
ないでしょうか?

いろいろ調べてみたのですが、std::getline()では改行文字まで
しか読み取らないし、他にはread()で何バイトかずつ読み込んで
stringに足すか、get()で一文字ずつ読み込んで足す、位の方法
しか思いつきません。

rdbuf()を使ってstd::stringstreamに読み込もうとしたら、fstreamとは
違ってコンストラクタがないんですね。

454 :デフォルトの名無しさん:2006/12/29(金) 17:45:04
std::string str;
std::ifstream fin;

std::copy(std::istreambuf_iterator<char>(fin),std::istreambuf_iterator<char>(),std::inserter(str,str.begin()));

455 :デフォルトの名無しさん:2006/12/29(金) 17:54:24
>>454
ありがとうございます。これならスマートになりますね。
速度的には1文字ずつ読んでいるのであまり変化ないかもしれませんが、
一行で書けるという点が魅力です。

istreambuf_iteratorを使うという所が私には盲点でした。

さっそく使わせていただきます!

456 :デフォルトの名無しさん:2006/12/29(金) 17:55:30
std::ifstream file;
std::istreambuf_iterator<char> first(file);
std::istreambuf_iterator<char> last;
std::string fileData(first, last);

457 :デフォルトの名無しさん:2006/12/29(金) 17:58:29
1行で書きたいのなら
std::string fileData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
しかし分かりにくいので>>456のように書いた方がよい
>>455-456のやり方は>>454のように1文字ずつの代入ではなく初期化なので効率は少しはマシになるはず

458 :デフォルトの名無しさん:2006/12/29(金) 18:03:47
>>455-457
度々ありがとうございます。
私も書いてみました。これでも行けるようです。
s.insert(s.begin(), std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>());

459 :デフォルトの名無しさん:2006/12/29(金) 18:09:42
>>457
あと、stringのコンストラクタにistreambuf_iteratorを取る形式ですと、
遅延評価を行っているのかよくわかりませんが、私の環境では直後の

std::istringstream strstr(s);

で "istreambuf_iterator *を取るコンストラクタが見つからない"という
エラーが出てしまいます。ちょっと謎です。

環境はBCC5.8.2、Dinkumwareです。

460 :デフォルトの名無しさん:2006/12/29(金) 18:13:38
コンストラクタやinsertを使わずにinserter使う奴大杉

461 :デフォルトの名無しさん:2006/12/29(金) 18:16:10
世間に?職場に?

462 :デフォルトの名無しさん:2006/12/29(金) 18:18:40
>458
文字列が空の場合この方がよいと思う。
(空で無い場合意味が異なる)
s.assign(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>());

463 :デフォルトの名無しさん:2006/12/29(金) 18:21:59
>>462
それはコンパイルエラーになりました。
C++標準ライブラリという本にも、assignメンバ関数にはイテレータを
取る形式は書いてありませんでした。

464 :デフォルトの名無しさん:2006/12/29(金) 18:23:09
空なんだったらassignなどせずに初期化した方が良かろう

465 :デフォルトの名無しさん:2006/12/29(金) 18:24:39
>>464
>>459でも書いたように、コンストラクタにイテレータを使う形式ですと、
そのstringでistringstreamを構築するとエラーが出てしまうので、
今回は使えないのです。

466 :デフォルトの名無しさん:2006/12/29(金) 18:35:48
>463
そんな本とコンパイラなんて窓から投げ捨ててしまえ。

467 :デフォルトの名無しさん:2006/12/29(金) 18:49:39
助けてください
結構凄いことなってる。助言とかお願いします
http://ex17.2ch.net/test/read.cgi/news4vip/1167379476/

468 :デフォルトの名無しさん:2006/12/29(金) 19:00:55
>>459
なんかそれ変だな
以下のソースでどんなコンパイルエラーが出る?
#include <fstream>
#include <iterator>
#include <string>
#include <sstream>
using namespace std;
int main () {
ifstream ifs ("hoge");
string s ((istreambuf_iterator <char> (ifs)), istreambuf_iterator <char> ());
istringstream strstr (s);
return 0;
}


469 :デフォルトの名無しさん:2006/12/29(金) 19:41:53
Effective STLでいうところの「C++で最も奇妙な解析」が絡んでるな、この会話。
なんか一言あったほうがいいかもしれないけど、説明が面倒だな。

470 :デフォルトの名無しさん:2006/12/29(金) 19:43:49
>>468
いえ、これは通りました。
どうもstringを定義している位置で出たり出なかったりするようです。
間違いなくコンパイラのバグだと思います。

471 :デフォルトの名無しさん:2006/12/29(金) 19:45:04
>>469
その本持ってます。確か「関数と見なせるものは関数とみなす」
という意味で、防止法は、括弧で囲む事でしたね。それでちょっと
試してみます。

472 :デフォルトの名無しさん:2006/12/29(金) 19:47:42
>>469
済みません、本当にありがとうございました。
Effective STLの第6項、P32そのままの問題でした。
コンパイラのバグではありませんでした。

本は読んでいましたが、実際に遭遇したのは初めてです。
覚えておきます。

473 :デフォルトの名無しさん:2006/12/29(金) 19:49:26
だから>>456のように書いた方が良いわけだ・・・・

474 :469:2006/12/29(金) 20:28:40
>>457-458ペアと>>462-463ペアのコード&反応の違いを見て
急に気になって書いたんだが、書いてよかったな。

475 :デフォルトの名無しさん:2006/12/29(金) 20:31:00
>>474
実は>>457の第一パラメータに括弧が付いているのを見落として
いたんです。申し訳ありません。

476 :デフォルトの名無しさん:2006/12/29(金) 21:34:12
実際にこれに引っ掛かってるのを初めて見た

477 :デフォルトの名無しさん:2006/12/29(金) 22:03:00
真の通過儀礼か。

478 :デフォルトの名無しさん:2006/12/29(金) 22:43:04
ここでC++糞と思うかC++面白いと思うかが今後を分ける
かも。

479 :デフォルトの名無しさん:2006/12/29(金) 23:57:00
Effective STL持ってないんだけど、どういう問題なのかサラっとでいいから教えてくれないかな。

480 :デフォルトの名無しさん:2006/12/30(土) 00:03:02
>>479
string s(istreambuf_iterator<char>(ifs), istreambuf_iterator<char>());

が s という名前の関数宣言と見なされてしまうという問題で、これを
回避するために

string s((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());

これで ifs のファイル内容で初期化された string型の変数 s が出来る。

481 :デフォルトの名無しさん:2006/12/30(土) 00:12:03
string s(istreambuf_iterator<char>(ifs), istreambuf_iterator<char>());
が何で関数宣言にみなされるの?

482 :デフォルトの名無しさん:2006/12/30(土) 00:16:08
>>481
string s(istreambuf_iterator<char> ifs, istreambuf_iterator<char>);

とみなされるから。これで分からなければ是非本を読んでね。

483 :デフォルトの名無しさん:2006/12/30(土) 00:20:04
なんとなく予想してたので合ってたわ

484 :デフォルトの名無しさん:2006/12/30(土) 00:26:01
sはstring型を返す関数で、引数を2つとる。
最初の引数はistreambuf_iterator<char>型で、名前はifs。
2番目の引数は、「引数をとらずistreambuf_iterator<char>型を返す関数」へのポインタ。

・・・とコンパイラは解釈する。

485 :デフォルトの名無しさん:2006/12/30(土) 00:34:34
>>484
あ、そうだった。

string s(istreambuf_iterator<char> ifs, istreambuf_iterator<char>());

こうですね。本を持っててもちゃんと読んでいないとこんなもんです。

486 :デフォルトの名無しさん:2006/12/30(土) 00:39:16
あーくそ。C++ Primer Plus fifthを書店で見かけたと思ったら、
何と"C Primer Plus fifth"だった。まあ内容的にはC99の事も
取り上げられていていいのだが。

注文せんと入れてくれんかなぁ。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)