トップページ⇒tech
1001コメント322KB

C++相談室 part45

■ このスレッドは過去ログ倉庫に格納されています
0001(*^ー゚)b グッジョブ!!2005/11/26(土) 21:20:04
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いします。
IDE(VC++など)などの使い方の質問もその開発環境のスレに
お願いします。

前スレ
http://pc8.2ch.net/test/read.cgi/tech/1128512737/
0002デフォルトの名無しさん2005/11/26(土) 21:22:41
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0003デフォルトの名無しさん2005/11/26(土) 21:23:26
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/
0004デフォルトの名無しさん2005/11/26(土) 21:24:15
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/
0005デフォルトの名無しさん2005/11/26(土) 21:24:35
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "乙" << endl;
return 0;
}
0006デフォルトの名無しさん2005/11/26(土) 21:25:01
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

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

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
0007デフォルトの名無しさん2005/11/26(土) 21:25:48
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
0008デフォルトの名無しさん2005/11/26(土) 21:34:56
C++ Coding Standards
http://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
http://www.amazon.co.jp/exec/obidos/ASIN/4894716860/(翻訳)
0009デフォルトの名無しさん2005/11/26(土) 21:35:13
■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/
0010デフォルトの名無しさん2005/11/26(土) 21:36:32
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0011デフォルトの名無しさん2005/11/26(土) 21:37:33
■Libraries■
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html
0012デフォルトの名無しさん2005/11/26(土) 21:38:47
■関連スレ■
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/
【C++】STL(Standard Template Library)相談室 4
http://pc8.2ch.net/test/read.cgi/tech/1130680264/
C/C++の宿題を片付けます 53代目
http://pc8.2ch.net/test/read.cgi/tech/1132102992/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc8.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc8.2ch.net/test/read.cgi/tech/1014486422/
【.NET】 C++/CLI について語ろうぜ 【最適】
http://pc8.2ch.net/test/read.cgi/tech/1126450441/
ATL/WTL Part3
http://pc8.2ch.net/test/read.cgi/tech/1095442366/
0013v(^・^)v2005/11/26(土) 21:42:42
テンプレは以上
0014デフォルトの名無しさん2005/11/26(土) 21:46:09
乙
0015デフォルトの名無しさん2005/11/26(土) 21:49:58
>>1乙
0016デフォルトの名無しさん2005/11/26(土) 22:44:55
>>1
乙
0017デフォルトの名無しさん2005/11/26(土) 23:33:10
STLつかうと一気に実行ファイルサイズが10倍に?!
0018デフォルトの名無しさん2005/11/26(土) 23:36:28
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0019デフォルトの名無しさん2005/11/26(土) 23:38:14
>>18
毎スレ恒例のテンプレみたいなもんだ。気にするな。
0020デフォルトの名無しさん2005/11/26(土) 23:41:42
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>

後氏ね。
0021デフォルトの名無しさん2005/11/26(土) 23:56:44
↑
確かこれもテンプレ
0022デフォルトの名無しさん2005/11/27(日) 00:05:54
乙>>1

しかし、std::iteratorを継承して、独自のイテレータを作るの、面倒いね。
オーバーライドをきちんとしないと、予期しないコンパイルエラーの原因になる。

どっかにうまくまとめたサイトないですかね。
0023デフォルトの名無しさん2005/11/27(日) 00:12:27
>>22
boost::iterator_adaptorやboost::iterator_facadeはどうか?
0024デフォルトの名無しさん2005/11/27(日) 00:43:10
>>23
ありがとう。さっそくいじくってみます。
0025デフォルトの名無しさん2005/11/27(日) 01:21:02
実行ファイルとは違うディレクトリにあるファイルのオープンを絶対パス指定以外で
行うにはどうしたらいいのでしょうか?
0026デフォルトの名無しさん2005/11/27(日) 01:23:30
相対パス
0027デフォルトの名無しさん2005/11/27(日) 01:48:10
ワロタ
0028デフォルトの名無しさん2005/11/27(日) 01:52:44
自演乙
0029デフォルトの名無しさん2005/11/27(日) 12:14:44
>>27-28
自演乙
0030デフォルトの名無しさん2005/11/27(日) 13:39:38
webサーバー立てて、URLでファイルを取得する。
0031デフォルトの名無しさん2005/11/27(日) 17:18:53
for(int i=5, m; i < 10; i++)
{
}
のような文の時
int i=5,m;
の意味はint型の変数iとmを作ってiに5を代入するという意味でいいのしょうか?
0032デフォルトの名無しさん2005/11/27(日) 17:31:15
いいえ、代入ではなくiを5で初期化するという意味です。
0033デフォルトの名無しさん2005/11/27(日) 17:53:29
ありがとうございました
0034デフォルトの名無しさん2005/11/27(日) 18:04:42
本当にありがとうございました
0035デフォルトの名無しさん2005/11/27(日) 18:28:04
代入と初期化の違いは何ですか?
0036デフォルトの名無しさん2005/11/27(日) 18:56:50
constメンバに値をカキコできるのは初期化のときだけ
0037デフォルトの名無しさん2005/11/27(日) 19:29:07
>>35
実行されるのが代入演算子かコンストラクタか
0038デフォルトの名無しさん2005/11/27(日) 20:21:09
PODだと違いを感じない(=C言語のつもりだと区別が実感できない)けどな
C++だとコンストラクタと代入演算子で処理が変えられるから区別が必要だよな。
0039デフォルトの名無しさん2005/11/29(火) 07:04:39
staticでprivateなメンバを初期化子(もしくはそれのようなもの)
を使って初期化したいのですが、
どうにも苦戦しています。(PODではないため?)

class a_c {
private:
static int x[2];
};
int a_c::x[2] = {0,1};

どうすれば
よろしいのでしょう…コンスタラクタで初期化や継承など考えましたが、
旨くいきません。
初期化は、staticで、初期化子のように羅列する方式おこないたい
と思うのですが不可能でしょうか。
0040デフォルトの名無しさん2005/11/29(火) 07:48:33
>>39
そのコードは全然間違っていません。正しいですよ。
0041デフォルトの名無しさん2005/11/29(火) 15:26:49
>>39
つまり何が上手く言ってないのか書けと。エラーメッセージとかな。
0042デフォルトの名無しさん2005/11/29(火) 20:13:43
テンプレートクラスを作成し、
そのメンバ関数でそのテンプレート型を返す関数を作成したのですが
関数の失敗時の戻り値に何を返せばいいのか分からず悩んでおります
失敗判定の値を返したいのですが
型によって返す値を分岐するしかないのでしょうか
0043422005/11/29(火) 20:17:17
>型によって返す値を分岐するしかないのでしょうか
すみません、これは意味が分かりませんでした…
0044デフォルトの名無しさん2005/11/29(火) 20:29:06
>>42
つ[例外]
0045422005/11/29(火) 20:37:15
>>44
おお、ありがとうございます
例外処理でやってみます
0046デフォルトの名無しさん2005/11/29(火) 21:23:32
>42
Nullオブジェクト……とか思ったけど、C++だと使い物にならんな……
0047デフォルトの名無しさん2005/11/29(火) 22:28:13
struct Point {
 Point() {}
 Point(int xx, int yy) : x(xx), y(yy) {}
 Point(const Point& p) : x(p.x), y(p.y) {}
 int x, y;
};

この

 Point(int xx, int yy) : x(xx), y(yy) {}
 Point(const Point& p) : x(p.x), y(p.y) {}

この部分はどういう処理をしているのでしょうか?
0048デフォルトの名無しさん2005/11/29(火) 22:36:23
その前に、structでなくてclassじゃないの?
0049デフォルトの名無しさん2005/11/29(火) 22:43:23
これを参考にしてくれ!
http://homepage2.nifty.com/aito/cpp/node14.html

Point(int xx, int yy)、Point(const Point& p)はPointクラスのコンストラクタ。
: x(xx), y(yy)と: x(p.x), y(p.y)はxとyのコンストラクタと思われるが、不要なんじゃない?
Pointコンストラクタで初期化するだろうから。
0050デフォルトの名無しさん2005/11/29(火) 22:44:43
>>47
とりあえず
x = xx;
と同じだと考える。
0051デフォルトの名無しさん2005/11/29(火) 22:45:53
>>49
いやどう見ても初期化はしていないだろ
0052デフォルトの名無しさん2005/11/29(火) 22:47:06
メンバイニシャライズでは
0053デフォルトの名無しさん2005/11/29(火) 22:49:15
ごめん、イニシャライザでした
0054デフォルトの名無しさん2005/11/29(火) 22:50:01
>>47
後者はコピーコンストラクタだろ。
0055デフォルトの名無しさん2005/11/29(火) 22:52:26
この場合コピーコンストラクタは確かに不要(デフォルトので十分)だが、
Point(int xx, int yy)のコンストラクタはあったら便利。

void f(Point);のような関数に対してf(Point(10, 10));のように呼べ、
Pointの変数を作らなくてすむ。
0056デフォルトの名無しさん2005/11/29(火) 22:58:39
>>48
別にstructでもいいじゃん。
つーか、全メンバがpublicなら敢えてprivate宣言を省略するために
structにするというポリシーかも知れず。

>>47
前者は整数値を二つ引き数に取るコンストラクタ、
後者はその構造体へのコンスト参照を引き数に取るコンストラクタ。
#所謂コピーコンストラクタやね。

で、どちらもメンバ変数であるxとyを引き数を使って初期化している。

って、リロードしたら被ってた罠。
#でも書き込んじゃう♪
0057デフォルトの名無しさん2005/11/29(火) 23:02:13
class Point {
 Point() {x=0; y=0};
 Point(int xx, int yy) : {x=xx; y=yy};
 Point(const Point& p) : {x=p.x; y=p.y};
 int x, y;
};
でいいんじゃない?
0058デフォルトの名無しさん2005/11/29(火) 23:08:09
>>57
初期化でできることは初期化でやるべき。
どうでもいいけど、初期化ならPoint(int x, int y) : x(x), y(y) {}と書ける。
0059デフォルトの名無しさん2005/11/29(火) 23:08:51
>>57
たしかにxとyは組み込み型だからいいけど、
クラスでは初期化と代入は別物。
たとえばfstreamなんかはそういう風にできない。
0060デフォルトの名無しさん2005/11/29(火) 23:12:59
>>59
fsteamはどうなってるの?
0061デフォルトの名無しさん2005/11/29(火) 23:23:59
>>60
fstream fs("hoge");というのがあったとして下のコードはコンパイルできない。
fstream fs2;
fs2 = fs;
コンストラクタの中でも同じ。
0062472005/11/30(水) 02:29:42
なるほど

: x(x), y(y)

この使い方ははじめてみたので何なのかわかりませんでした。
メンバイニシャライザというのですね。普通に代入してもよさそうですが
覚えておきます。どうもでした
0063デフォルトの名無しさん2005/11/30(水) 02:44:26
: x(1), y(x)

と書いたとき y に 1 が入る保障はないな
0064デフォルトの名無しさん2005/11/30(水) 02:49:46
>>63
class foo {
foo() {//1
x = 1;
y = x;
}
foo() : x(1), y(x) {}//2
int x;
int y;
};
の場合、どちらもyに1が入ることは保証されている。
0065デフォルトの名無しさん2005/11/30(水) 03:03:06
a[4][2]に格納する値を条件によって変化させたいんですけど

int a[4][2]={{1,2},{3,4},{5,6},{7,8}};
と初期化するみたいにいい方法はないですか?

いちいち
a[0][0]=1;
a[0][1]=2;
a[1][0]=3;
・・・
はめんどうなんですけど
0066デフォルトの名無しさん2005/11/30(水) 03:03:19
: x(x), y(y)

そもそもこれ意味あるのか?
0067デフォルトの名無しさん2005/11/30(水) 03:12:29
>>66
個人的にはちょっとした構造体のときにメンバ変数と引き数を揃えることでシンプルになるのが気に入ってるが。

>>65
・構造体にして一次変数を初期化→代入
・構造体にしてカンマ演算子をオーバーロードして一気に代入
・いちいち代入する部分を関数にして、引き数をずらずら並べる
ってところじゃないかな。
0068デフォルトの名無しさん2005/11/30(水) 03:23:37
>>66
初期化されないっつーか不定だな
0069デフォルトの名無しさん2005/11/30(水) 03:51:41
2つの配列を一度に入力するにはどのように書いたらいいんでしょうか?
例えばa[ ]とb[ ]に一度に1 2 3 4 5 6みたいに入れたいのですが。
ポインタはまだわからないです。

cout<<"ベクトルを2つ入力 -->";
for(j=0;j<c;j++)
{
cin>>a[j]>>b[j];
}
自力だとこうなのですがエラーが出て…
0070デフォルトの名無しさん2005/11/30(水) 04:18:35
>>69
a[]とb[]を同じにするなら、cin >>a[j]; b[j] = a[j];
0071デフォルトの名無しさん2005/11/30(水) 04:37:02
cout<<"ベクトルを2つ入力 -->";
for(j=0;j<c;j++)
{
cin>>a[j];
}
b=a;
0072デフォルトの名無しさん2005/11/30(水) 04:38:43
>64
class foo {
foo() : y(x),x(1) {}
int x;
int y;
};
こう書いても保証されるんだっけ。
0073デフォルトの名無しさん2005/11/30(水) 04:41:49
>>71 その場合 y は不定。
0074732005/11/30(水) 04:42:21
アンカーミスった ×71 ○72
0075デフォルトの名無しさん2005/11/30(水) 04:42:34
>>72
初期化リストで保証されているのは、リストに書いた順に初期化が行われること。
0076722005/11/30(水) 04:47:19
>73,75
いつからそんな仕様になったの?
0077デフォルトの名無しさん2005/11/30(水) 04:52:51
>>76
知ってる限り、最初から。
いつならこんな仕様じゃなかったの?
0078デフォルトの名無しさん2005/11/30(水) 04:55:33
いや72は保証されてるだろ。
メンバ初期化子の順序は無視され、クラスの宣言に現れた順に初期化が行われるはず。
紛らわしいから同じ順番で書けってのがセオリー
0079デフォルトの名無しさん2005/11/30(水) 04:59:43
class foo {
int x;
int y;
foo() : x(y),y(1) {}
};

ということは、これは不定?
0080デフォルトの名無しさん2005/11/30(水) 04:59:46
ちなみに12.6.2.5ね。
> Then, nonstatic data members shall be initialized in the order they were described in the class definition
> (again regardless of the order the mem-initializers).
0081デフォルトの名無しさん2005/11/30(水) 05:00:48
だーかーらー

class foo {
int x;
int y;
foo() : x(x),y(y) {}
};

これも不定だってば。
0082デフォルトの名無しさん2005/11/30(水) 05:03:11
>>79
不定
0083デフォルトの名無しさん2005/11/30(水) 05:03:14
>77
多分最初から。
プログラミング言語C++は持ってないけど、Effective C++にも一項使って書いてある。
クラスの宣言なのはメンバのデストラクタ呼び出しの順番を固定するためだって。

>81
それはこれのことだろ。
Point(int x, int y) : x(x), y(y) {}
不定じゃない。
008473=772005/11/30(水) 05:07:15
>>72,76
ああぁ、宣言順は x, y だったのな。ごめん間違い。
0085デフォルトの名無しさん2005/11/30(水) 07:33:21
どうでもいいことだが、さっきからclassで書いてるヤシは、publicつけといたほうがいいんジャマイカ
0086デフォルトの名無しさん2005/11/30(水) 07:41:28
なんか、自分の勉強不足を力一杯宣言している阿呆がいるな。
0087デフォルトの名無しさん2005/11/30(水) 09:48:04
fooがpoint型ならともかく何か分からないんだからどっちでもいい罠。
x,yって名前も適当に付けてんだし
0088デフォルトの名無しさん2005/11/30(水) 11:49:52
constオブジェクトのためには初期化子も必要ですよね?
0089デフォルトの名無しさん2005/11/30(水) 12:10:50
>>88
そんな消極的な理由で必要なわけじゃない。
基底クラスやメンバを初期化するために必要。
0090デフォルトの名無しさん2005/11/30(水) 13:55:21

初期化子に付随する、function-try-block があれば、
コンストラクタで失敗したときにログを吐く場合も有効。

struct foo
{
 auto_ptr< bar > x;
 auto_ptr< bar > y;
 
 // function-try-block が利用できる場合(非常に便利)
 foo( int v )
  try : x( new bar( v ) ), y( new bar( v ) ) {}
catch( exception const & e ) {
   cout << "初期化失敗:" << e.what() << endl;
  } // ここで例外が自動的に再スローされる。

 // function-try-block が利用できない場合(非常に不便)
 foo( int v, bad_tag )
 {
  try {
   x = auto_ptr< bar >( new bar( v ) );
   y = auto_ptr< bar >( new bar( v ) );
  }
  catch( exception const & e ) {
   cout << "初期化失敗:" << e.what() << endl;
   throw e; // 自分で再度投げる
  }
 }
};

0091デフォルトの名無しさん2005/11/30(水) 17:12:18
>>40
>>41
レスありがとうございます。
実際のコードは大きいので問題抽出してる時に間違ってしまったようです。
typedef struct {
int a[2];
} b_s;

typedef struct {
b_s bs;
} c_s;

static const c_s cs = {
{0, 1}
};

こんな感じのデータがあって、
それにクラスをかぶせたいのですが、
どうすればいいのかわかりません。

class c_c {
public:
c_c() {}
c_c(const cs& cs) {}
const b_c getC()
private:
};

static const c_c cc(cs);

この辺までで詰まってます…
0092デフォルトの名無しさん2005/11/30(水) 17:12:27
>>90
初めて知った
Thanks!
0093デフォルトの名無しさん2005/11/30(水) 17:45:15
>>88
実はコンストラクタ・デストラクタの中では全てのメンバはconstでないという扱い。
だからといって初期化子を使わなくて良いということではないが。
0094デフォルトの名無しさん2005/11/30(水) 20:44:00
struct A
{
 virtual void g() {}
 void f()
 {
  // お世話になります。
  // g がオーバーライドされていればgを呼び出す。
  // って事をしたいのですが、オーバーライドされた事を調べるにはどうしたら
  // 良いのでしょうか?
  // if(g != A::g) 見たいなシンプルな判定方法があれば教えてください。
 }
};

struct B : A
{
 void g() { /* いろいろ */ }
};
0095デフォルトの名無しさん2005/11/30(水) 20:59:25
>94
デフォルトのA::g()の中身が空なら、何も考えずにg()を呼べばいいのでは?
0096942005/11/30(水) 21:11:19
>>95
肝心な事を忘れていました。
gにパラメータを渡すのですが、そのパラメータの計算が結構長いのです。
gが空ならその計算ごと省略したいので、どうにかならないかと考えた訳です。
0097デフォルトの名無しさん2005/11/30(水) 21:29:37
>>96
これって結局は「fの振る舞いが型によって異なる」ということなのだから、
fを仮想関数にして、Aを継承した型が自分のf()の中でg()関連を
担当するべきなんじゃないでしょうか。
0098デフォルトの名無しさん2005/11/30(水) 21:46:22
hoge0 = hoge1 * hoge2 * 0.5;
みたいな、良くある演算子オーバーロード使用のループを

hoge0.x = hoge1.x * hoge2.x * 0.5;
hoge0.y = hoge1.y * hoge2.y * 0.5;
みたいな感じで展開してみたら、泣けるくらい実行速度が速くなりました。

計算式がまちまちな上、計算自体数百行に及ぶので、
可読性を考えると圧倒的に前者の方が助かるのですが、さりとて速度も欲しいところでして。

なにか両者を共にいただけるような方法ないッスかねぇ。
0099デフォルトの名無しさん2005/11/30(水) 22:13:00
>>98
プログラム設計には2段階あって、論理設計と物理設計の二つ。
論理設計では上の方法が好ましいんだけど、性能面(物理設計)でダメと
いうことか。
演算子オーバーロードの処理が重いんだろ。

>なにか両者を共にいただけるような方法ないッスかねぇ。
ない!(笑)
0100デフォルトの名無しさん2005/11/30(水) 22:16:22
焼け石に水だろうが、その演算子オーバーロード関数が
もしインライン関数でなければインライン関数にしておく。
0101992005/11/30(水) 22:24:43
>>100
なるほど、その手があったか。
演算子オーバーロードに対してinline使えたっけ?
■ このスレッドは過去ログ倉庫に格納されています