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


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

C++相談室 part49
1 名前:v(^・^)v :2006/04/28(金) 09:52:50
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

  → テンプレその他 >>1-15 付近参照 ←

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


2 名前:v(^・^)v :2006/04/28(金) 09:54:57
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

3 名前:v(^・^)v :2006/04/28(金) 09:55:29
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/

4 名前:v(^・^)v :2006/04/28(金) 09:57:35
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/
46 ttp://pc8.2ch.net/test/read.cgi/tech/1136690107/
47 ttp://pc8.2ch.net/test/read.cgi/tech/1139931895/
48 ttp://pc8.2ch.net/test/read.cgi/tech/1142423595/


5 名前:v(^・^)v :2006/04/28(金) 09:58:14
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://public.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/ (日本語)

6 名前:v(^・^)v :2006/04/28(金) 09:59:04
■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/
C++ Coding Standards
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716860/ (翻訳)

7 名前:v(^・^)v :2006/04/28(金) 09:59:53
■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/

8 名前:v(^・^)v :2006/04/28(金) 10:00:52
■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

9 名前:v(^・^)v :2006/04/28(金) 10:04:03
■関連スレ■
【初心者歓迎】C/C++室 Ver.26【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1143601166/
【C++】STL(Standard Template Library)相談室 5
http://pc8.2ch.net/test/read.cgi/tech/1143608073/
C/C++の宿題を片付けます 63代目
http://pc8.2ch.net/test/read.cgi/tech/1143405137/
C/C++でのWindowsPrograming議論スレ(質問お断り)
 http://pc8.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!! 002
 http://pc8.2ch.net/test/read.cgi/tech/1139043535/
C++/CLI について語ろうぜ Part2
 http://pc8.2ch.net/test/read.cgi/tech/1142147319/
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/
ATL/WTL Part4
 http://pc8.2ch.net/test/read.cgi/tech/1134388951/
【雑談】C/C++【その1】
 http://pc8.2ch.net/test/read.cgi/tech/1098817686/

10 名前:v(^・^)v :2006/04/28(金) 10:07:38
STLつかうと一気に実行ファイルサイズが10倍に?!

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

>>11
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

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

11 名前:v(^・^)v :2006/04/28(金) 10:13:17
地鎮祭終わり。後、Effective C++の新刊とか、他に有益な情報があったら
ぜひ教えてください。

D&Eも書いておくか。

The Design and Evolution of C++
http://www.amazon.co.jp/exec/obidos/ASIN/0201543303/
C++の設計と進化
http://www.amazon.co.jp/exec/obidos/ASIN/4797328541/ (翻訳)

12 名前:デフォルトの名無しさん :2006/04/28(金) 10:15:46
洋書はこっちの方がいいか。
http://www.amazon.com/gp/product/0201543303/102-8306451-1796138?n=283155

13 名前:デフォルトの名無しさん :2006/04/28(金) 11:29:41
きましたよ

14 名前:デフォルトの名無しさん :2006/04/28(金) 12:26:03
結局 CUJ のリンクはそのままか。

15 名前:デフォルトの名無しさん :2006/04/28(金) 17:59:09
CUJって何?

16 名前:デフォルトの名無しさん :2006/04/28(金) 18:05:55
>>15
Effective with the March 2006 issue, the C/C++ Users Journal has merged with Dr. Dobb's Journal, which will now feature expanded C and C++ coverage.

ってことで、CUJはDr. Dobb's Journalと合併
>>5のリンクも修正した方がいいんじゃないの、ということ

次スレで修正だな

17 名前:デフォルトの名無しさん :2006/04/28(金) 22:09:10
typedef void (*Function)(void);
typedef std::map<std::string, Function> _map;
このようにして、std::string型をキーとして引数を取らないvoid型の関数を格納できますが

ここで、格納したい関数の戻り値がそれぞれ違うものであったり
引数の個数や型がバラバラの場合でも同じmapに格納する方法がありましたら教えて頂きたいです

18 名前:デフォルトの名無しさん :2006/04/28(金) 22:25:42
>>17
関数オブジェクト

19 名前:デフォルトの名無しさん :2006/04/28(金) 22:26:43
なんかboostでそんなんなかったっけ

20 名前:デフォルトの名無しさん :2006/04/28(金) 22:27:43
>>17
関数呼び出し式の形が同じにできるのであればboost::functionが使える。

21 名前:デフォルトの名無しさん :2006/04/28(金) 22:28:45
boost::anyで何とかなる希ガス

22 名前:デフォルトの名無しさん :2006/04/29(土) 09:01:37
>>17
それ、取り出したときにどうやって使うの?

23 名前:デフォルトの名無しさん :2006/04/29(土) 17:29:54
>>17です。アドバイスありがとうございます。boost::functionとboost::bindでどうにかなりました。
これだけではあれなので、詳細を書かせて頂きたいと思います。

>>22さんの鋭い質問で深く考えさせられました。取り出すというか、引数がバラバラなのにどうやって使うんだ、と。
結果的に、考え付いたのが
CApp p; std::map< std::string, boost::function0< void > > map;
map["aaa"] = boost::bind(&CApp::FuncA, &p, "aiueo");
このようにすることで、どんな引数の数、内容でもキー毎に固定できれば
map["aaa"](); と同じ呼び出し式を使う事ができ、>>17の目的は達成されました。boostすげえ。
では、長文すいませんでした。

24 名前:デフォルトの名無しさん :2006/04/29(土) 20:55:30
rand()%100の場合、同じ数字が出ることはありますか?

25 名前:デフォルトの名無しさん :2006/04/29(土) 20:56:25
あります

26 名前:24 :2006/04/29(土) 21:01:44
>>25
ありがとうございます。
スレ違いですよね、失礼しました。
初心者スレで聞いてきます。

27 名前:デフォルトの名無しさん :2006/04/30(日) 01:21:08
>>26
いやまてw 初心者スレで聞いてもまったく同じ答えだぞw

28 名前:24 :2006/04/30(日) 01:44:20
>>27
あ、同じ数字を出さない方法が知りたいので初心者スレで聞いてこようかな、と思いましてw


29 名前:デフォルトの名無しさん :2006/04/30(日) 02:46:57
エスパー的には、
srand((unsigned)time(NULL));
のことだと予言。

30 名前:デフォルトの名無しさん :2006/04/30(日) 03:03:52
>>29
俺のエスパー能力だと、
0から99まで、100個の、重複しないランダムな乱数列が欲しいんじゃないかと。

31 名前:デフォルトの名無しさん :2006/04/30(日) 03:09:56
まあ、0から99まで配列に入れてシャッフルしろと言うことだな。

32 名前:デフォルトの名無しさん :2006/04/30(日) 03:11:08
>>30
なるほど。そっちの方があってそうだな。

0〜99までの値をランダムシャッフルでおkだな。
ランダムシャッフルのアルゴリズムは定番のがあるから
ググれば出てくるだろう。

33 名前:デフォルトの名無しさん :2006/04/30(日) 03:16:17
このスレ、エスパー多いな。

34 名前:デフォルトの名無しさん :2006/04/30(日) 03:35:55
シャッフルはstd::random_shuffleで事足りるとみた


35 名前:24 :2006/04/30(日) 03:37:29
どうもありがとうございます。
srand((unsigned)time(NULL)); は使っています。
配列ですね。
分かりました。
皆さんスレ違いなのにどうもありがとうございました。

36 名前:デフォルトの名無しさん :2006/04/30(日) 03:41:19
スレ違いってわけでもないが、
本当に質問したいことをはっきりさせるべきだと思われ。

37 名前:24 :2006/04/30(日) 03:51:45
>>36
そうですね。
確かに説明不足で何が知りたいか分からない文章でした。
乱数 配列とランダムシャッフルでググったら両方知りたいソースコードが見つかりました。
本当にありがとうございました。

38 名前:デフォルトの名無しさん :2006/04/30(日) 11:12:08
世の中にここまで自分の意志を伝えられない人間がいるってことが
ものすごく不思議だ。
教育され損なうって恐ろしいことだな。

39 名前:デフォルトの名無しさん :2006/04/30(日) 11:57:53
エスパーにならないと立派なSEにはなれません

40 名前:デフォルトの名無しさん :2006/04/30(日) 12:01:07
>>39
それはクライアントに恵まれていないのです、オー人事でも無理です。

だけど実際にそういう目に遭うことはたまにあります orz


41 名前:デフォルトの名無しさん :2006/04/30(日) 12:15:40
>>40
それは運がいいだけです。現実は、そんなクライアントばかりです。

42 名前:デフォルトの名無しさん :2006/04/30(日) 14:19:41
もっとも近い整数へ変換する関数ってありますか

4.9->5
6.2->6

43 名前:デフォルトの名無しさん :2006/04/30(日) 14:23:55
double value = 4.9;

int answer = (int)(value + 0.5);

44 名前:デフォルトの名無しさん :2006/04/30(日) 15:19:01
>>43
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#566

45 名前:デフォルトの名無しさん :2006/04/30(日) 15:26:29
>>44
言葉のあやを挙げられても……。

46 名前:デフォルトの名無しさん :2006/04/30(日) 15:30:53
>>44みたいなレスする人間は不要

47 名前:デフォルトの名無しさん :2006/04/30(日) 16:11:00
負の数の場合は気をつけろってことだろ。
素直に知っとけばいいじゃないか >>45-46

48 名前:デフォルトの名無しさん :2006/04/30(日) 23:21:53
#include <iostream>
using namespace std;

template <typename T>
bool less(const T &ref1, const T &ref2) {
  return ref1<ref2;
}

int main()
{
  cout << less<char>('A', 'B') <<endl;
}

これをg++でコンパイルすると、less undeclared (first use this function)
とエラーになってしまいます。どこがいけないんでしょうか?



49 名前:デフォルトの名無しさん :2006/04/30(日) 23:29:30
>>48
lessは標準ライブラリに定義されている(std::less)。
多重定義エラー。

50 名前:デフォルトの名無しさん :2006/04/30(日) 23:30:51
>>42
四捨五入って言葉を知らないの?
それとも敢えて使ってないの?

51 名前:デフォルトの名無しさん :2006/04/30(日) 23:32:36
負数の時、「もっとも近い整数」をどっちによせるかによる

52 名前:デフォルトの名無しさん :2006/04/30(日) 23:48:17
そもそも、 0.5 にもっとも近い整数は一意に定まらないよな

53 名前:デフォルトの名無しさん :2006/05/01(月) 00:24:55
>>48
g++は知らないけど'A'とか'B'とかをint型と認識してるのかな?
C++では文字定数はcharのはずなんだけど…。

VC++6ではちゃんとコンパイルできて動くね。

>>49
less undeclared(lessは宣言されていない)って書いてるじゃん。
多重定義エラーってのはなかろ。

54 名前:デフォルトの名無しさん :2006/05/01(月) 00:26:39
>>48
とりあえず
-less<char>('A', 'B')
+less('A', 'B')
でも通らないか?

55 名前:48 :2006/05/01(月) 00:37:01
less を aless とか適当に名前を変えてみたら通り、動きました。
また、::less() とスコープ演算子を付けてみたら通り、動きました。
うーん、やはり多重定義エラーなんでしょうか?

このスコープ演算子をつけた場合、どちらのlessを見に行ってる
のかなと悩んでいたんですが、自作の方のless()を見に行っている
ようです。うーん。


56 名前:48 :2006/05/01(月) 00:42:19
>>54
そのように書き直してコンパイルしてみたらどちらも
no matching function for call to 'std::less<char>::less(char, char)'
といわれますた。

57 名前:デフォルトの名無しさん :2006/05/01(月) 00:57:15
どちらも?

58 名前:48 :2006/05/01(月) 01:06:47
すみません。違うエラーメッセージをコピペしてしまった。

正しくは、
cout << less<char>('A', 'B') <<endl;
これを
cout << -less<char>('A', 'B') << endl;
cout << +less('A','B') << endl;
の各々でやった場合、どちらも
'less' undeclared (first use this function)
と怒られますた。

おとなしくテンプレート関数名を変えときますです。
ありがとうございました。


59 名前:デフォルトの名無しさん :2006/05/01(月) 01:22:06
-と+の扱いも次からテンプレに追加すべきだな、これは……。

60 名前:デフォルトの名無しさん :2006/05/01(月) 01:39:09
クマー

61 名前:デフォルトの名無しさん :2006/05/01(月) 01:57:39
namespace N { struct f; }
using namespace N;
int f();
int main() { return f(); }

これでも
:4: error: `f' undeclared (first use this function)
だと。
ちなみに cygwin の gcc 3.4.4 ね。
エラーになるのはいいんだが、このエラーメッセージはひどい。

62 名前:デフォルトの名無しさん :2006/05/01(月) 02:12:08
VC8でコンパイルすると、「あいまいなシンボルです」ってちゃんと言うね。

63 名前:デフォルトの名無しさん :2006/05/01(月) 07:09:31
>>61
G++の3.4.6, 4.0.3は、

foo.c: In function `int main()':
foo.c:4: error: use of `f' is ambiguous
foo.c:3: error: first declared as `int f()' here
foo.c:1: error: also declared as `struct N::f' here
foo.c:4: error: `f' was not declared in this scope

64 名前:デフォルトの名無しさん :2006/05/01(月) 07:14:01
やはりメジャーバージョンより高くないとダメだな>gcc

65 名前:デフォルトの名無しさん :2006/05/01(月) 07:18:13
>>63
なんか最後に余計なのが残ってるな。

66 名前:デフォルトの名無しさん :2006/05/01(月) 09:24:06
f()に適切なのが見つからないと、4行目のエラー出力処理に落ちていくんだろう。

no suitable `%s' in this scope

にするといい具合いだと思われ。

67 名前:デフォルトの名無しさん :2006/05/01(月) 09:30:39
MinGWバージョンアップマダーチンチン

68 名前:デフォルトの名無しさん :2006/05/01(月) 23:26:29
質問です。

一年ちょっと前にC言語の本を読んでプログラムの勉強を初めて、自分でコードを書いて、
その次にアルゴリズム本等を読んで、またコードを書いて、
今はC++の勉強に取り組みつつコードを書いているという段階なんですが
次に買う本について相談があります。

標準ライブラリの使い方や、基礎的なアルゴリズムを解説している本ではなく、
クラスの上手な作り方、C++プログラミングの常識を勉強できるような本を探しています。
そこで C++ FAQ と Effective C++ に目をつけたのですが、まずどちらを買うべきか迷っています。
自分の希望としては、(どちらも難しい本だろうけれども)少しでも読みやすい方を買いたいのですが
何かアドバイスして頂けないでしょうか

69 名前:デフォルトの名無しさん :2006/05/01(月) 23:29:12
>>68 禿本読破。マジお勧め。

70 名前:デフォルトの名無しさん :2006/05/01(月) 23:36:33
Effective > C++ FAQ

71 名前:デフォルトの名無しさん :2006/05/01(月) 23:45:24
C++ FAQとMore Effective C++は日本語訳が腐ってる。

Effective C++を買うか、これの3rdの日本語版(もうすぐ出る?)
が出るまで待つか。C++ Coding Standardもなかなか良い。

72 名前:デフォルトの名無しさん :2006/05/01(月) 23:56:41
>>68
CエキスパートがC++を業務で使い始めて半年間で蓄積したノウハウが全てEffectiveC++に書かれていた。
つまり、EffectiveC++はその位有用だと言うことだ。

73 名前:68 :2006/05/02(火) 00:23:05
レスありがとうございます

ぐぐって調べてみました。
Effective C++ 第三版 もう出てるみたいです。amazon に今日付けのレビューが一件だけ入ってました。
他の本にも興味はありますが、悩んでも仕方ないし
何か縁を感じたのでとりあえず Effective C++ にしておきます

74 名前:デフォルトの名無しさん :2006/05/02(火) 00:28:53
Effective C++ 第三版は日本語訳がひどくないよな・・・
明日でもちょっくら立ち読みして、良さそうだったら買ってくるか。

誰か既に突撃した人いる?

75 名前:デフォルトの名無しさん :2006/05/02(火) 00:42:21
Effective C++第三版の訳者はAccelerated C++の人だから大丈夫だろ
まぁ俺は改訂二版が手元にあるから第三版は買ってないので断言はできないが

76 名前:デフォルトの名無しさん :2006/05/02(火) 01:12:57
禿本って何だゴラァ

77 名前:デフォルトの名無しさん :2006/05/02(火) 01:21:06
"禿本 C++" で調べたら判った

78 名前:デフォルトの名無しさん :2006/05/02(火) 01:26:03
禿本は正直薦めにくい
禿本を活用できるレベルの人は既に禿本を読んでいる
禿本を活用できるレベルでない人には、もっと適した本が一杯ある


79 名前:デフォルトの名無しさん :2006/05/02(火) 01:55:45
C++FAQも実は隠れた名著であることはあまり知られていないようだな。
EffectiveC++が有名すぎて。

80 名前:デフォルトの名無しさん :2006/05/02(火) 02:32:38
C++FAQってwebで公開されてなかったっけ?

81 名前:デフォルトの名無しさん :2006/05/02(火) 03:07:27
「C++再考」もいいよ。
最新C++ではないけれど、設計の考え方が参考になる。

82 名前:デフォルトの名無しさん :2006/05/02(火) 10:31:30
>>81
俺はその本で、引数付きマニピュレータの定義の仕方を初めて知った。
それから、テンプレートと関数オブジェクトの組み合わせとか、ぱっと見
は簡単そうだが、じっくり読むと深い内容まで突っ込んだ事が書いて
あるね。

83 名前:デフォルトの名無しさん :2006/05/02(火) 11:27:21
著者がKoenig&Mooだからな…

それぞれCFrontのテスタ、マネージャ。
初期のC++設計&処理系開発の中心にいた人たち。

「C++の設計と進化」のKoenigの登場回数と言ったら…
禿の次くらいにC++設計への貢献が大きいんじゃないか?

84 名前:デフォルトの名無しさん :2006/05/02(火) 12:05:57
まずは、C++ Coding Standards を読むのがベストだと思う。
Exceptional C++ の sutter 氏と、Modern C++ Design の Andrei 氏が
さまざまな書籍から要点をピックアップしてくれていて、読みやすい。
一通り読んだあとで、Effective や、Exceptional を読むとより分かりやすいし。


85 名前:デフォルトの名無しさん :2006/05/02(火) 12:16:51
逆に最後に手元に置くのを C++ Coding Standards がいいんじゃないかな?
あれ説明がないから、最初は辛い。

86 名前:デフォルトの名無しさん :2006/05/02(火) 13:00:42
自分から情報を求める姿勢があるなら大丈夫じゃね

87 名前:デフォルトの名無しさん :2006/05/02(火) 15:48:01
ただいま帰還。
Effective C++ 第三版は今回はアスキーではなくてピアソンだそうだ。

http://www.amazon.co.jp/exec/obidos/ASIN/4894714515/qid=1146552307/sr=1-4/ref=sr_1_10_4/249-1722344-5945958
来週頭から本屋に配送予定だと。もちろん予約してきた。

88 名前:デフォルトの名無しさん :2006/05/02(火) 16:57:14
ていうかとっくに届いてる
中が2色刷りなのにびっくり
高いだけある(のか?)

89 名前:デフォルトの名無しさん :2006/05/02(火) 17:13:13
>>85
同意。

90 名前:デフォルトの名無しさん :2006/05/02(火) 18:19:41
近所の大型書店では
4月29日発売とは言っても、東京の問屋に卸すのが29日の場合は今日書棚にあるとは限らない、
GW明けまでずれこむ恐れもある、と言われたよ

梅田まで出て行ったら見つかったけど

91 名前:デフォルトの名無しさん :2006/05/02(火) 19:12:42
Effective C++3版買った奴に聞きたいんだが、改訂2版持ってても3版買う価値ある内容?

92 名前:デフォルトの名無しさん :2006/05/02(火) 19:42:07
内容変えてしまうならいっそ続編みたいな形で出してほしいな。
同じ書名で版が違うだけなのに内容がかなり違うとかなんか本として微妙。

93 名前:デフォルトの名無しさん :2006/05/02(火) 19:48:41
>>91
俺もそこが知りたい。
改訂前の第一版を持ってる俺としては。

94 名前:シャビ :2006/05/02(火) 21:38:22
仮想関数テーブルポインタを含んだクラスをまるごとfwriteやfread等できる方法はありますでしょうか?
ファイルからデータ読み込んだ時に、仮想関数テーブルポインタが壊れないようにしたいのですが…
各メンバ別個に読み書きしたり、メンバを構造体にするのはなるべく避けたいので、何か良い方法があれば教えて下さい。

95 名前:デフォルトの名無しさん :2006/05/02(火) 21:40:21
>メンバを構造体にするのはなるべく避けたい
構造体にしたほうがわかりやすいんじゃないかなあ。利用側としては。

96 名前:デフォルトの名無しさん :2006/05/02(火) 22:28:49
>>94
Boost.Serializationはだめか?

97 名前:デフォルトの名無しさん :2006/05/02(火) 22:53:22
char buf[10] = {0};

とかした場合、buf[1]〜buf[9]まで0で初期化される保証はあったっけ?
構造体の場合と同様に、初期値の指定が無い残りの部分は0で埋められると考えていいのかな?

98 名前:デフォルトの名無しさん :2006/05/02(火) 23:01:33
>>97
その保障はある。
足りないところは0初期化される。

99 名前:シャビ :2006/05/02(火) 23:23:15
>>95-96
サンクス!
Serializationについて調べてみる事にします。

普通は構造体にするのかな?

100 名前:デフォルトの名無しさん :2006/05/02(火) 23:48:12
ハンドでガリガリ行きたいなら、
fprintfの値渡し書きして、scanfのパラメータ&の参照渡し機能使って読むって手もあるが、
環境が分からないから何出せばいいか分からないけど、シリアライズオブジェクト使うのがいいと思う。

101 名前:デフォルトの名無しさん :2006/05/03(水) 00:07:01
scanf>fscanf

102 名前:シャビ :2006/05/03(水) 00:38:23
ありがとうございます!
確かにfread、fwriteよりはずっと楽ですねー

103 名前:デフォルトの名無しさん :2006/05/03(水) 01:05:53
あるstreamの一部分を別のstreamへ切り出したいんだけどいい方法ない?
rdbuf()からいろいろいじってみたんだけど、頭は指定できてもケツが決まらくて難航中。
具体的な状況としては、複数のファイルがその行数と共に詰まってるアーカイブもどきから
一つのファイル分だけ取り出して、パーサーに渡そうとしている所。

104 名前:デフォルトの名無しさん :2006/05/03(水) 03:01:07
あの、MFCでActiveXコントロールを作ってたら
http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146577850180.jpg
のエラーが出るんですが、

ダイアログに「ActiveXコントロールの挿入」をした際に出ます。

なぜでしょうか?


105 名前:デフォルトの名無しさん :2006/05/03(水) 03:05:16
>>104
スレ違い。
以下、スレ名検索だけで誘導。

MFCではじめるActiveXプログラミング
http://pc8.2ch.net/test/read.cgi/tech/1143185353/

■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/

106 名前:デフォルトの名無しさん :2006/05/03(水) 03:08:42
>>103
行数で決まるんだろ。普通に書けるじゃないか。何が不満だ?

107 名前:デフォルトの名無しさん :2006/05/04(木) 00:00:24
>>106
普通にといわれてもなぁ。

108 名前:デフォルトの名無しさん :2006/05/04(木) 01:16:46
fmemopenみたいなのがほしいの?

109 名前:デフォルトの名無しさん :2006/05/04(木) 22:19:06
質問なんですが、関数のリファレンスってどこを見れば良いんでしょうか?
例えば、ですけど、
std::getlineの引数にはどんな型が来て、戻り値の型がこうで・・・
みたいなことが知りたいんです。
Cのときはmanを参考にしたりしていたんですが、
何かリファレンス本を買った方が良いですかね?

110 名前:デフォルトの名無しさん :2006/05/04(木) 22:24:04
>>109
規格票

111 名前:デフォルトの名無しさん :2006/05/04(木) 22:25:53
>>109
この当たりでもいいかもしれんな。
http://volga.eng.toyama-u.ac.jp/~mii/lab/manual/fujitsu/C++/

112 名前:デフォルトの名無しさん :2006/05/04(木) 22:37:10
>>110
勘弁してくださいorz

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



いまこんなの見つけたんですが、
ちょっとこれを参考にしてみようと思います。
さっき結構探したのになんでここが見落としてたんだろう・・・すみません。
http://web.archive.org/web/20050227093643/http://www.shibu.jp/cppreference/all_cpp.html

いまはwww.shibu.jpが落ちてるのか、
直接はアクセスできないみたいですけど。

113 名前:デフォルトの名無しさん :2006/05/04(木) 22:43:49
>>109
libstdc++のmanをインストールして、

$ man 3 std::iostream

doxygenで生成しているからhtml版もあるよ。

114 名前:デフォルトの名無しさん :2006/05/04(木) 22:46:03
>>112
おなじサーバで運用中(?)の swig.jp とか unittest.org もずっと死んだままス。つд`)
なんか渋チン、社会人になってからサーバのメンテを放棄してる?

115 名前:デフォルトの名無しさん :2006/05/05(金) 00:18:07
>>113
どうもありがとう!
インストールってどうやったらいいのかよく分かんなかったので、
適当にlibstdc++-man-20051007.tar.bz2をDLしてきて
中身を既存のman3にコピーしたら
なんかうまく行ったっぽいです。

>>114
できたら復帰して欲しいですね。
さしあたって
http://www.shibu.jp/cppreference/cppreference.zip
がArchive.orgにあったら良かったんだけどそれも無いし・・・

116 名前:デフォルトの名無しさん :2006/05/05(金) 00:32:21
>>115
捨てメアドでも晒してくれたメールで送るよ。

117 名前:デフォルトの名無しさん :2006/05/05(金) 00:39:36
VS.NET で以下のソースをコンパイルしたら実行時にエラーが起きました。

#include <iostream>
using namespace std;

int sub( int* p_num )
{
p_num = new int;
*p_num = 10;
cout << *p_num << endl;
return 0;
}

int main()
{
int* p_num = 0;
sub( p_num );
cout << *p_num << endl; // * を外してアドレスを表示すると 0 となる
delete p_num;
return 0;
}

最初はどこで引っかかっているのか判りませんでしたが、今はとりあえず
呼び出し側の main 関数に p_num = new int; が反映されておらず
存在しないものを delete しようとしているからエラーが起きることが判りました。

しかし sub 関数の側では 10 という値が確かに表示されているし
なぜポインタで渡してるのに呼び出し元に 10 が伝わってこないのかが判りません。

new 演算子で用意したメモリは delete で明示的に捨てるまで確保されたままだと思っていたのですが
もしかしてこれが勘違いだったのでしょうか

118 名前:デフォルトの名無しさん :2006/05/05(金) 00:41:35
>>117
ポインタを勉強しる

119 名前:デフォルトの名無しさん :2006/05/05(金) 00:50:30
上げてしまった。すまん。

120 名前:デフォルトの名無しさん :2006/05/05(金) 00:52:37
>>117
趣旨が真逆だけどこれでも読んで勉強しれ。
http://www.01-tec.com/document/without_pointer.html

121 名前:デフォルトの名無しさん :2006/05/05(金) 00:53:42
確かに不勉強。
>>117
>なぜポインタで渡してるのに呼び出し元に 10 が伝わってこないのかが判りません。
なぜ渡されたポインタを new で潰してるのかが判りません。

122 名前:デフォルトの名無しさん :2006/05/05(金) 01:00:01
>>117
自分が分かった部分だけだけど、欠陥が2箇所見つかった。
>int* p_num = 0;
&p_numに0x00000000が入ってしまっている。
intprep=0;
int* p_num = &prep;
こうダミーを使ってやれば解決する。
>int sub( int* p_num )
>{
>p_num = new int;
これは是非、デバッガを使って、intの前にブレークポイント置いて、ステップオーバでp_numの値に注目してもらいたいのだけど、
この関数は参照で、int*p_numでアドレスを受け取っている。
次にnewして新たにp_numにアドレスを割り当てている。この時点で受け取ったアドレスと内容はゴミとしてメモリ上に浮くことになる。
そして、main側(sub( p_num );を発した側)はアドレスが変わったことを知るすべもなし、ゴミのアドレスと値を参照することになる(元々の値)。
実行時、エラーがでなくとも、たまたま短かっただけで、新たなスタックがそこに侵食してくると、もしp_numアドレス参照すると、
AccessViolationかMemoryAssertionかなんらかのエラーがでると思う。

123 名前:デフォルトの名無しさん :2006/05/05(金) 01:02:40
やっぱ、C関連やるにはデバッガ必須だね。
うまくいかなかったとき、デバッガなしだと、脳内妄想で終わってしまう。
自分もうやむやのまま進んで、何度も初歩に戻ったしなあ。

124 名前:デフォルトの名無しさん :2006/05/05(金) 01:03:17
>>116
まじですか!お言葉に甘えていいですかね?
suteasdf@hotmail.co.jp
よろしくお願いします。

125 名前:デフォルトの名無しさん :2006/05/05(金) 01:09:17
阿呆な質問かもしれませんが。。。

std::strlen等と、strlen等は同じなんですか?

#include <iostream>としておけば、
Cだとそれぞれ別にヘッダファイルをincludeしておかないと使えない関数も含め、
ほとんどのCの標準ライブラリ関数が使えるようですが・・・

std名前空間のメンバである
Cの標準ライブラリ関数と同じ名前の関数は、
Cの標準ライブラリ関数とまったく同じものだと考えて良いんですか?
std::strlenと書いても、ただstrlenと書いても同じように動作するわけですが、
これはどういうことなんでしょうか?

あと、試してみた中では数学関数はstd空間にないみたいで、
これはmath.hをincludeしないと使えないようですが、
なんでこんな風になってるんですかね?

126 名前:デフォルトの名無しさん :2006/05/05(金) 01:12:32
>>124
送ったお。

127 名前:デフォルトの名無しさん :2006/05/05(金) 01:15:24
>>125
コンパイラ書けよ。俺のコンパイラの挙動と違うぞ。俺のはVC8ね。

128 名前:デフォルトの名無しさん :2006/05/05(金) 01:17:23
>>116
届きました。
本当にありがとうございました!


129 名前:125 :2006/05/05(金) 01:21:13
>>127
すんません、gcc(g++)使ってまして、
gcc_selectの結果は
Current default compiler:
gcc version 4.0.0 20041026 (Apple Computer, Inc. build 4061)
なんですが。

130 名前:デフォルトの名無しさん :2006/05/05(金) 01:25:48
>>125
#include <cmath> だろ。

131 名前:125 :2006/05/05(金) 01:28:17
>>130
Cで#include <〜.h>として使っていたものに関しては、
#include <c〜>となるわけですね。わかりました。

132 名前:125 :2006/05/05(金) 01:32:03
std名前空間のメンバになってる関数については、
自分の環境では#include <cstring>等々することなく
std::strlenとか単にstrlenと言った風に使えてしまうんですが、
これは問題でしょうか?ちゃんと#include <cstring>とすべきですか?

また、std::strlenという風に使うのと、単にstrlenという風に使うのとでは、
まったく同じことだと思っていいのかどうなのか分からないんですが、
その点についてはどうなんでしょうか?

133 名前:デフォルトの名無しさん :2006/05/05(金) 01:40:49
>>132
あーそれどっかで問題になってたな。
std付けないと見えないはずなのに、見えてしまうという問題。
どこでだっけ・・・

134 名前:デフォルトの名無しさん :2006/05/05(金) 01:41:32
>>125
>#include <iostream>としておけば、
>Cだとそれぞれ別にヘッダファイルをincludeしておかないと使えない関数も含め、
>ほとんどのCの標準ライブラリ関数が使えるようですが・・・

たまたま<iostream>内で間接的に#includeしてるだけで
使いたい関数があったらちゃんと対応するヘッダを#includeすべき。

135 名前:デフォルトの名無しさん :2006/05/05(金) 01:45:24
>>115のC++リファレンスが欲しいんですが、どなたかupして頂けませんか

136 名前:125 :2006/05/05(金) 01:47:26
>>133, >>134
ありがとうございます。

ということは、
使いたい関数があるときは
#include <cmath>なり、#include <cstring>なり、
きちんとincludeして、std::〜という形で使うのが正解、
ということですね?

ちなみに、includeするときにcmathとかcstringとか
頭にcが付いているってことは、
その動作はCの標準ライブラリ関数とまったく同じと考えても良いんですよね?


137 名前:デフォルトの名無しさん :2006/05/05(金) 01:49:09
規格票も持ってない奴ばっかかよ・・・・

138 名前:125 :2006/05/05(金) 01:51:45
持ってないです・・・阿呆な質問の繰り返しでごめんなさいorz

139 名前:デフォルトの名無しさん :2006/05/05(金) 01:55:43
規格読めで済むならこんなスレいらなくね

140 名前:デフォルトの名無しさん :2006/05/05(金) 01:56:30
>>137
おまえ、あれはコンパイラを作るヤツやC++の解説書を書くヤツなんかの為にあるもんだぞw

141 名前:126 :2006/05/05(金) 02:00:20
ttp://www.cppll.jp/cppreference/

そういえばミラーがあったの忘れてたw

142 名前:デフォルトの名無しさん :2006/05/05(金) 02:32:40
>>140
「規格読め」はそもそも言った本人が読んだことなくて
しかも質問にきちんと答えられないときに使うセリフなんで
真に受けちゃダメよ

143 名前:デフォルトの名無しさん :2006/05/05(金) 02:39:44
>>142
言われて悔しい思いをした経験がおありで?

144 名前:140 :2006/05/05(金) 02:54:30
>>142
コンパイラ云々ではなくC++の仕様的にどうなのかって質問なら「規格嫁」が正論だろ。
コンパイラの挙動ではなくC++の厳密な仕様を気にするぐらいなら規格票を購入すべき。
規格票も持たず、基本的な仕様すら規格上でどうなってるかも知らないのに
部分的な仕様だけを知ろうとするのはナンセンス。

145 名前:デフォルトの名無しさん :2006/05/05(金) 03:08:22
要するに、「規格票読め」は避けて、規格票の該当部分をそのまま
コピペして、簡単な説明を付けろって事だな。

著作権の問題とかはどうなるのかはよくわからないが、少なくとも、
貼り付けた本人が「実は質問に答えられないのでただ言ってみた」
わけではない事がわかるだろう。

146 名前:デフォルトの名無しさん :2006/05/05(金) 08:10:36
>>141 d

147 名前:デフォルトの名無しさん :2006/05/05(金) 10:58:17
>>113
libstdc++もmanあるのね知らんかった
Thanks!


148 名前:デフォルトの名無しさん :2006/05/05(金) 12:19:01
そもそも規格を読むだけでは分からないような質問が
このスレでされたことは一度もないぞ

149 名前:デフォルトの名無しさん :2006/05/05(金) 12:22:42
>>148
ウソつくな。そんな質問いくつもされてきたぞ。
で、そのたびに「スレ違い」というレスが返されてきた。

150 名前:デフォルトの名無しさん :2006/05/05(金) 15:56:58
自他共に認める無知、あるいは、自分では一応知識があるつもりだけど
それが本当に試される状況は怖いから避けたい人、
そういう人種が「そのくせ偉そうにしたい」時には便利ですよね<○○読め

151 名前:デフォルトの名無しさん :2006/05/05(金) 16:03:07
>>150
>>145

152 名前:113 :2006/05/05(金) 16:21:19
つーか今回の発端は>>109なわけで、
「規格票読め」もあながち外した答えとは言えないような…

まずは>>113>>141でいいと思うけどね。他にいいのある?

ちなみに>>113のHTML版公開しているのは↓ここ。
http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html
http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html

http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html より

俺は自宅のマシンで全文検索エンジンでインデックス作ってる。boostも。

153 名前:デフォルトの名無しさん :2006/05/05(金) 16:33:30
C か C++で正規表現をするにはどうしたらよいでしょうか。
サードパーティのは利用せず(?)に、標準のもので実現したいのですが。

154 名前:デフォルトの名無しさん :2006/05/05(金) 16:37:11
標準だけでやりたいなら、自分で書くしかない。
boost::regexが次の標準に入る奴に近い。

155 名前:デフォルトの名無しさん :2006/05/05(金) 16:37:13
>>152
boost ならここやね。

http://boost.cppll.jp/HEAD/
http://boost.cppll.jp/HEAD/libs/libraries.htm

>>153
boost::regex じゃだめ?
boost はまだ準標準というべきものだが。

156 名前:153 :2006/05/05(金) 16:46:58
>>154-155

http://www.s34.co.jp/cpptechdoc/article/regexpp/
を見ているのですが、スキルが足りないためぱっと見理解できないです。
サンプルのとおりにやってみようと思います・・

157 名前:デフォルトの名無しさん :2006/05/05(金) 16:47:55
見ただけで理解できないのは普通。
とりあえず触って覚えろ。

158 名前:153 :2006/05/05(金) 18:37:08
今boostのインストール中ですが、最終的に作るアプリをほかのPCで
動かしたいと課題を出した人が言うと思うので、自分で書こうと思います。

あとインストールに時間がかかるというのと、いくつかインストール方法の載ってる
サイトを検索したけども、そこにある用語すら分からず正常にインストールできている
か不明のため

159 名前:デフォルトの名無しさん :2006/05/05(金) 18:42:22
boost ってテンプレートライブラリだから、
余計なもの入れなければ
ヘッダだけあれば動くんじゃないの?

160 名前:デフォルトの名無しさん :2006/05/05(金) 18:42:39
boost使っていようがいまいが、
他のPCでも動くと思うが。。。

161 名前:デフォルトの名無しさん :2006/05/05(金) 18:42:52
boost::regex の使い方をサンプルで理解できないのに
自分でパーサを書くという意味?それは無茶があると思う。
boost を用いたプログラムを書いても、特別な dll 等は必要ないし
そのままやった方が早いかと。

162 名前:デフォルトの名無しさん :2006/05/05(金) 18:49:35
まぁ、boost が準標準ライブラリだとしても、初めて触る者にとっては
得体の知れないモノなわけで、そんなモノに頼りたくないって気持ちは
わかるが騙されたと思って boost 使っとけ。

163 名前:デフォルトの名無しさん :2006/05/05(金) 19:10:05
boost使うと実行サイズが大きいし、速度が遅いし、という難点があるけどね。

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

165 名前:デフォルトの名無しさん :2006/05/05(金) 19:37:09
>>164
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。


166 名前:デフォルトの名無しさん :2006/05/05(金) 19:40:55
STLつかうと一気に実行ファイルサイズが10倍に?!

167 名前:デフォルトの名無しさん :2006/05/05(金) 19:48:25
いいえ、3倍です。

168 名前:デフォルトの名無しさん :2006/05/05(金) 20:29:32
棒読みw

169 名前:側近中の側近 ◆0351148456 :2006/05/05(金) 20:30:23
>>167
(っ´▽`)っ
ついでに赤くなるんだよな?

170 名前:デフォルトの名無しさん :2006/05/05(金) 21:33:21
Boostつかうとコンパイルが遅すぎ

171 名前:デフォルトの名無しさん :2006/05/05(金) 21:45:09
>>170
君に取って置きの秘策をお教えしよう。

パ ソ コ ン グ レ ー ド ア ッ プ。

172 名前:デフォルトの名無しさん :2006/05/05(金) 22:02:49
VC++6.0stdで最適化コンパイルできますか?

173 名前:デフォルトの名無しさん :2006/05/05(金) 22:06:13
古いコンパイラでコンパイルできるかどうかは保証しない。

174 名前:デフォルトの名無しさん :2006/05/05(金) 22:07:58
VC++ならプリコンパイルドヘッダとか使えば多少速くなるんじゃね?

175 名前:デフォルトの名無しさん :2006/05/05(金) 22:10:54
>>170
まあ、ソースが全部ヘッダに含まれてるわけだからな・・・。
早く export 実装しろよー。

176 名前:デフォルトの名無しさん :2006/05/05(金) 22:27:25
禿がもっと禿れば各ベンダーも実装してくれるだろうよ。

177 名前:デフォルトの名無しさん :2006/05/06(土) 02:49:55
>>158
なんか変な流れでかわいそうなのでwマジレスしておくと
静的リンクしておけばDLLはいらんし、そもそもヘッダインクルードだけで使えるライブラリも多い。
ダイナミックリンクにしてもDLLを一緒に配ればすむ話だ。

178 名前:デフォルトの名無しさん :2006/05/06(土) 09:59:41
filesystem系とかスレッド系とかunittest系以外はヘッダだけで大丈夫じゃなかったっけ


179 名前:デフォルトの名無しさん :2006/05/06(土) 11:40:08
>>170
unix系ならdistccもおすすめ


180 名前:デフォルトの名無しさん :2006/05/07(日) 02:30:20
ff

181 名前:デフォルトの名無しさん :2006/05/07(日) 09:41:16
質問で〜す

同名でconst、非constなメソッドがあったとして、
そのメソッドを非constなオブジェクトから呼んだ場合、
どちらのメソッドが呼ばれるのでしょうか?

具体的には下記のようなコードで、func2の中のa.hoge()は
const、非constどちらのメソッドが呼ばれるのか?

とりあえずvc7だと非constメソッドが呼ばれるようですが、
これってどの処理系でも必ず保障されます?

class A {
public:
  void hoge() const {
    cout << "const" << endl;
  }
  void hoge() {
    cout << "not const" << endl;
  }
};

viod func1(const A &a) {
  a.hoge() // => const
}

viod func2(A &a) {
  a.hoge() // => not const ?
}



182 名前:デフォルトの名無しさん :2006/05/07(日) 09:49:10
non constに決まってるだろ
constの意味を理解してから書けボケ

183 名前:デフォルトの名無しさん :2006/05/07(日) 09:50:19
>>181
Overload Resolutionのルールによって、保障されている。

詳しく説明すると長くなるけど、
staticでないメンバ関数は、thisを隠れた引数として取るが、
このthisも、オーバーロードされている際のbest candidateを決定するにあたって考慮される。
さらに、thisはcv-qualifiersの影響を受けるので、constなメンバ関数では、thisはconst修飾される。

constなオブジェクトから呼び出した場合は、constなメンバ関数、
constでないオブジェクトから呼び出した場合は、constでないメンバ関数のほうが、
よりbest candidateになる。

184 名前:デフォルトの名無しさん :2006/05/07(日) 10:07:45
×保障
○保証

185 名前:デフォルトの名無しさん :2006/05/07(日) 10:09:09
>>183
const なオブジェクトから呼び出した場合は const でないメンバ関数は
candidate にもならないんじゃないか?

186 名前:183 :2006/05/07(日) 10:15:06
>>185
そういえばそうでした。

187 名前:181 :2006/05/07(日) 10:15:46
>>183
ためになる解説どうもありがとうございました。
Overload Resolutionについて勉強してみようと思います。

188 名前:デフォルトの名無しさん :2006/05/07(日) 10:20:12
>>187
あまり深く勉強しても、実際に役に立つことは少ないと思うけど。
こんなに複雑なのも、人間にとってより自然な挙動にしようと議論された結果だし。


//! boostのtype traitsを実装しようというなら、話は別だけど。

189 名前:デフォルトの名無しさん :2006/05/07(日) 14:43:24
>>182
constの意味とか、この質問にはまるで関係ないじゃんw

あとあとまともな回答があっただけに、大恥さらしちゃったねww

190 名前:デフォルトの名無しさん :2006/05/07(日) 14:55:51
>>181

189 名前: デフォルトの名無しさん [sage] 投稿日: 2006/05/07(日) 14:43:24

>>182
constの意味とか、この質問にはまるで関係ないじゃんw

あとあとまともな回答があっただけに、大恥さらしちゃったねww

191 名前:デフォルトの名無しさん :2006/05/07(日) 20:13:40
お前の方が恥じ書いてるっての

192 名前:デフォルトの名無しさん :2006/05/07(日) 20:20:08
constの意味は大いに関係あるだろ

途中でconst外されちゃまいっちんぐ

というルールなわけだし


193 名前:デフォルトの名無しさん :2006/05/07(日) 20:24:30
>>192
非 const なオブジェクトなら const メンバ関数も、非 const メンバ関数も安全に呼び出せる。
どっちでもよさそうだが、その場合にどっちになるのか?という質問だ。
const の意味は十分理解しているものと思われる。

194 名前:デフォルトの名無しさん :2006/05/07(日) 21:17:22
詭弁君キター

195 名前:デフォルトの名無しさん :2006/05/07(日) 21:49:47
char *c;
*c = '\0';

と、

char *c = NULL;

って同じ意味?

196 名前:デフォルトの名無しさん :2006/05/07(日) 21:51:59
>>195 ぜんぜん違う。

197 名前:デフォルトの名無しさん :2006/05/07(日) 21:53:46
俺も違うと言いかけたが
必ずしも違うとは言い切れない気もしてきた

198 名前:デフォルトの名無しさん :2006/05/07(日) 21:54:59
>>195,197
どう考えたら同じだと思えるの?

199 名前:デフォルトの名無しさん :2006/05/07(日) 21:55:43
>>198
文字コードにASCIIを使っている場合。

200 名前:デフォルトの名無しさん :2006/05/07(日) 21:58:43
>>197
もしかしてNULLと'\0'の違いがどーとか考えてないか?

char *c;
c = 0;

と、

char *c = NULL;

ならお前の悩みも解らなくもないが・・・

201 名前:200 :2006/05/07(日) 22:00:15
あ、キャストせんとコンパイルエラーでっかな?


char *c;
c = 0


char *c;
c = (char *)0;


202 名前:デフォルトの名無しさん :2006/05/07(日) 22:03:56
いや、0はどんなポインタ型へも変換できる。

203 名前:デフォルトの名無しさん :2006/05/07(日) 22:04:24
>>199
その前提で、もうちょっと変形すれば動作が同じになると思えなくも無いが、
やっぱり意味はぜんぜん違う。

204 名前:デフォルトの名無しさん :2006/05/07(日) 22:08:19
ポインタの説明読んでると、ミスするとシステムを壊してしまう可能性があるらしいんですが
みなさんミスしないでやれるんですか?
ポインタ勉強したいけど怖くて・・・><

205 名前:デフォルトの名無しさん :2006/05/07(日) 22:16:46
>>204
まともなOSが走っているマシンで実行するなら大丈夫。
安心してポインタいじれ。

206 名前:デフォルトの名無しさん :2006/05/07(日) 22:17:52
>>204
そんなうんこは死ねばいいと思うよ

207 名前:デフォルトの名無しさん :2006/05/07(日) 22:19:38
1.例外拾えればアプリケーションがズッコケ
2.例外逃すとプロセスがぼよよーん
3.最悪はシステム(OS)が凍てつく

208 名前:デフォルトの名無しさん :2006/05/07(日) 22:23:05
>>207
それ、まともじゃないOSの話だろ。

209 名前:デフォルトの名無しさん :2006/05/07(日) 22:33:44
まともじゃないOSって具体的になんだ?OS/2とか?

210 名前:デフォルトの名無しさん :2006/05/07(日) 22:37:23
MSX-DOS とか

211 名前:デフォルトの名無しさん :2006/05/07(日) 22:46:38
Windows 1.0 〜 3.x 〜 9x

212 名前:デフォルトの名無しさん :2006/05/07(日) 22:53:38
ぼよよーんにふいた

213 名前:デフォルトの名無しさん :2006/05/07(日) 23:07:52
自分で throw した例外以外( 一般保護例外,ゼロ除算,等々 )は catch(...) でも拾えずに
コアを吐く Unix/Linux のヘタレっぷりを初めて知った時にはワロタ。

214 名前:デフォルトの名無しさん :2006/05/07(日) 23:14:33
>>213
catch(...) で一般保護例外を拾ってしまうのは、それはそれで問題なわけだが。

215 名前:デフォルトの名無しさん :2006/05/07(日) 23:14:59
>>213
個人的に、そういう種類の例外は、環境依存の方法でキャッチすべきだと思っているんだけど。
まあ、VC++ならどういう例外が投げられてきたかを知る方法だけはあるから、まだましか。

216 名前:デフォルトの名無しさん :2006/05/07(日) 23:20:20
>>214-215
これができるとできないとでは大きな差があることぐらいはわかるよね?

217 名前:デフォルトの名無しさん :2006/05/07(日) 23:25:01
>>216
できるできないの問題ならいいんだが、強制されてしまうぶんには
どっちが有利ともならないなぁ。

218 名前:デフォルトの名無しさん :2006/05/07(日) 23:38:19
>>217
例外処理の使い方を考えれば強制されるという概念を持つ事は変だと思う。
が、その「強制された」としてなんか困ることや嫌なことが具体的にあるの?

俺はこの件に関しては Unix/Linux はダメダメと結論している( もちろん
そんな一点の問題で Unix/Linux 自身がダメダメと結論づけるようなつもりは
毛頭無い。 )が、そうでない意見があるなら聞いておきたい。

219 名前:デフォルトの名無しさん :2006/05/07(日) 23:51:59
>>218
「C++の例外処理」「unixのsignal」「WindowsのSEH」を混同してませんか?
C++の例外風に処理を記述できるWindowsのSEHは便利だよね、というだけの話。
まぁSEHには「知識や権限に関わらず、早く例外を捕まえた人が処理できてしまう」
という問題があるため結局VEHが導入されたわけだが。

220 名前:デフォルトの名無しさん :2006/05/08(月) 00:01:19
>>218
よく知らないんだが throw() と考えられる関数からも一般保護例外は飛んでくるよね?
ちゃんとそれ考慮して、スタックの巻き戻しができるようにコード生成してくれるの?

try{
 std::auto_ptr<T> p(new T);
 strcpy(0,0);
}catch(...){
 // ここにくるまでに p の delete は行われるの?
}

行われるとしたら、とても非効率なコードが生成されてしまいそうなんだけど。

221 名前:デフォルトの名無しさん :2006/05/08(月) 00:01:45
>>219
一応知ってはいるが、混同はあるかも知れん。が、結局どこがどう問題なの?

自分が知っている例外についてはそれぞれ型を明記してそれぞれに合わせた処理をして、
その他の例外がきたらまとめて処理する。この「その他の例外」に「unixのsignal」 or
「WindowsのSEH」が含まれることは全然welcomeだと思うんだが。

222 名前:デフォルトの名無しさん :2006/05/08(月) 00:04:32
>>220
それはダブルフォールトになって落ちる。
これはまた別の問題だと思う。

223 名前:222 :2006/05/08(月) 00:05:26
あ、適当なこと言った。
ダブルフォールトじゃなかったかも。
とにかく落ちる。

224 名前:デフォルトの名無しさん :2006/05/08(月) 00:30:19
VC++ 2005 Express で↓のコード動かしたけど、キャッチできないお?

#include <cstdio>
int main()
{
 try{
  struct T { ~T(){ puts("~T()"); } } x;
  puts("causing access violation");
  char* p = 0;
  *p = 0;
 }catch(...){
  puts("catch(...)");
 }
}

225 名前:デフォルトの名無しさん :2006/05/08(月) 00:33:27
コードが最適化で消えてるとか?

226 名前:デフォルトの名無しさん :2006/05/08(月) 00:33:50
WindowsのSEHはそのままじゃC++のEHじゃ捕まえられないよ。
VC++なら_set_se_translator()使わないと自分で throw した例外以外
( 一般保護例外,ゼロ除算,等々 )は catch(...) でも拾えずに
Dr.WatsonをよぶWindows のヘタレっぷりを初めて知った時にはワロタ。

227 名前:デフォルトの名無しさん :2006/05/08(月) 00:35:49
他のosだと捕まえられるのか?

228 名前:デフォルトの名無しさん :2006/05/08(月) 00:39:00
>>224
コンパイルオプションを調べれ。
>>226がなんか言ってるけど、そんなことしなくても拾える。
( まぁ、明示的か裏でやってくれるかの違いでしかないかもしれんが。 )

229 名前:デフォルトの名無しさん :2006/05/08(月) 00:42:34
>>226
何をやっても拾えない Unix/Linux はヘタレ以下ってことでおk?

230 名前:224 :2006/05/08(月) 00:43:36
>>228
/EHa にしたらキャッチできた。 ~T() も呼ばれたみたい。

でもデフォルトじゃないってことは、やっぱり何か問題があったっぽいな。

231 名前:デフォルトの名無しさん :2006/05/08(月) 00:45:34
>>217
というわけで、強制じゃないってことだな。
それなら便利に使えることもあるだろう。

232 名前:デフォルトの名無しさん :2006/05/08(月) 00:49:06
>>230
問題と言っても Unix/Linux で動かした時と同じ挙動にさせたいとか
そーゆー互換性の類の問題かも。本当のとこはどーなのか知らんけど。

233 名前:デフォルトの名無しさん :2006/05/08(月) 00:55:08
>>224
VC7.1だと、/EHsでもキャッチできてしまう。
問題だったんだろうな。

234 名前:デフォルトの名無しさん :2006/05/08(月) 00:55:46
>>229
本当に何をやっても拾えないの?


235 名前:デフォルトの名無しさん :2006/05/08(月) 00:56:14
>>232
SEHに対応してなかった頃のプログラムの挙動を変えないようにする為に1票。

236 名前:デフォルトの名無しさん :2006/05/08(月) 00:56:39
>>221
記述が楽なだけで、出来ることも不便なところもsignalと大差ないでそ?
VEHなら強力で応用範囲が広いので Windows マンせーもわかるけど、
高々SEHは記述がラクってだけで unix はダメ風に言うのはどうか、と言いたかった。

237 名前:229 :2006/05/08(月) 00:57:29
>>234
俺はWindows使いだから知らね。

238 名前:デフォルトの名無しさん :2006/05/08(月) 01:00:56
>>237は低脳ということが判明した。
知らない環境に対して口を出すなよ。

239 名前:デフォルトの名無しさん :2006/05/08(月) 01:02:11
>>236
catch(...)って記述だけで全部拾えるのは単に記述がラクって言うのとは違うとは思う。
全てのプログラマが Unix/Linux でのプログラミングに精通してるわけじゃないないんだから。

240 名前:デフォルトの名無しさん :2006/05/08(月) 01:07:52
>>230
デフォルトじゃないのは、パフォーマンスのためらしい。
http://msdn2.microsoft.com/ja-jp/library/7f10tsf4(en-us,vs.80).aspx

241 名前:デフォルトの名無しさん :2006/05/08(月) 01:08:14
>>239
確かに簡単というか難しくないアプリ開発とかならそのとおりなんだけど、
signalさえわからん奴に勝手に拾われても・・・ってな話もあると思うよ。
結局SEHではそれが問題でVEHが出てきたわけだし。

242 名前:デフォルトの名無しさん :2006/05/08(月) 01:12:04
窓使いなのでよく分からないのだけど、Unix/Linuxでシグナルがcatchできないってのは
特定の言語処理系の問題なの? それともUnix/Linuxのしくみ自体がそれを許さないってことなの?


243 名前:デフォルトの名無しさん :2006/05/08(月) 01:17:47
ま、>>242 が窓使いって奴の限界なのかね。

244 名前:デフォルトの名無しさん :2006/05/08(月) 01:20:00
>>242
いや別にLinuxにもUnixにも、それを不可能とするような制限は無いよ。
例えば HP C++ なんかではSEH同様の機構が実装されている。
あんまり欲しい人がいないせいか、gccに採用されてないだけ。

245 名前:242 :2006/05/08(月) 01:25:23
>>244
サンクス。よかった、そりゃそうだよね。

それじゃ、そもそも>>213は「GCC(等の対応していない処理系の)のヘタレっぷりにワロタ」ってことなのかな。


246 名前:237 :2006/05/08(月) 01:26:41
>>238
ゴメンなさい。

247 名前:デフォルトの名無しさん :2006/05/08(月) 01:27:19
>>245
実際はそういうことなんだろうが、 OS の優劣と混同していると思われ。

248 名前:デフォルトの名無しさん :2006/05/08(月) 06:05:17
cygwin の gcc でSEHを拾えるか試してみたんだけど拾えんかった。
なんかググってみたところ、SEHに対応させるパッチを作ってる人がいるみたいだけど
gcc みたいにそれなりの頻度でバージョンアップがあり且つバージョンが変わったら
ゴロっと中身が変わってしまうようなプログラムでパッチがあってもあんまりうれしくないなぁ。

249 名前:デフォルトの名無しさん :2006/05/08(月) 06:24:51
>>230
> ~T() も呼ばれたみたい。

これ、例外の種類によっては、うまくいかないことがある。
特にコンストラクタの中で例外が起きた時。
だからSEHは強い例外安全じゃない。過信は禁物。


250 名前:デフォルトの名無しさん :2006/05/08(月) 10:58:46
>>249
コンストラクタが完了しないとデストラクタは呼ばれません。基本です。


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