C++相談室 part30
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v
NGNGただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。
過去スレ、関連スレ、関連リンクなどは >>2-9 あたり
0002デフォルトの名無しさん
NGNG2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
0003デフォルトの名無しさん
NGNG[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[禿 Stroustrup]
http://www.research.att.com/~bs/
[C++ International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
http://std.dkuug.dk/jtc1/sc22/wg21/
[C/C++ Users Journal]
http://www.cuj.com/
[cppll (ML)]
http://www.trickpalace.net/cppll/ (日本語)
0004デフォルトの名無しさん
NGNGamazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
0005デフォルトの名無しさん
NGNG[Boost]
Boost http://www.boost.org/
(日本語) http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
(日本語) http://www.kmonos.net/alang/boost/
[STL]
STLport http://www.stlport.org/
SGI-STL http://www.sgi.com/tech/stl/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
(日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
http://www.moderncppdesign.com/
LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
ACE http://www.cs.wustl.edu/~schmidt/
Blitz++ http://www.oonumerics.org/blitz/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
http://www.trumphurst.com/cpplibs/cpplibs.phtml
(日本語) http://www.kmonos.net/alang/cpp/lib.html
0006デフォルトの名無しさん
NGNG- 【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/l50
- C/C++の宿題をやらせて、お兄ちゃん 22代目
http://pc5.2ch.net/test/read.cgi/tech/1083050221/l50
- C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/l50
- managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/l50
- ATL 相談室
http://pc5.2ch.net/test/read.cgi/tech/1029029882/l50
- COM の世界を斬る!
http://pc5.2ch.net/test/read.cgi/tech/981823340/l50
0007デフォルトの名無しさん
NGNG- タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/l50
- GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/l50
- タダで使えるVisual C++
http://pc5.2ch.net/test/read.cgi/tech/1082177340/l50
- タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/l50
- OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/l50
- Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/l50
0008デフォルトの名無しさん
NGNG- ★初心者にVisual C++を教えるスレ★ Part12
http://pc5.2ch.net/test/read.cgi/tech/1083585833/l50
- ■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/l50
- C++Builder相談室 Part9
http://pc5.2ch.net/test/read.cgi/tech/1080541814/l50
- Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50
0009v(^・^)v
NGNG関連スレは増えてたんで適当にわけたよ。
足りない分は補充よろしくです。
テンプレは以上です。
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0013いいわけ巫女の地鎮祭
NGNG呑まれねばなるまい
呑まれねばなるまい
0014デフォルトの名無しさん
NGNG> 恥ずかしながら関数型という言葉を知らないんだが具体例をきぼん。
typedef int filter( int );
filter identity;
int identity( int x ){ return x; }
boost::function< filter > f = identity;
とか。
0015デフォルトの名無しさん
NGNGとか。
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGつまらん自演で「場がその話題で盛り上がってるフリ」して楽しいか?
0020デフォルトの名無しさん
NGNG0021さらしておこう
NGNG>>972
それはお前がバカだから、
Effective C++
読んでから言え。もっとも積極的に勧めてるわけじゃなく、
両方読める必要があると言っている。
お前はそれを知らなかったんだから、知る必要があったわけだ。
無知をひけらかして恥さらすな。
988 :デフォルトの名無しさん :04/05/08 23:28
>>983
お前が何にも知らんことは文面から用意に察することができたのでバカでも知ってる教科書名を挙げてやったのよ。
一通りよんでりゃ、const の前置、後置ぐらいでスレ汚すバカは居ないだろうからな。勉強になったことを感謝しろ。
日 本 海 溝 よ り 教 育 レ ベ ル の 低 い 糞 ガ キ よ 。
999 :デフォルトの名無しさん :04/05/08 23:45
>バカはおまえだ。俺は両方の表現知ってたし、
バーカ。こんなこと知ってるぐらいのことを何宣言してんだ。アホの活造りかおまえ。
0022デフォルトの名無しさん
NGNGそれぞれの機能は認識してるんだけど、名前が時々どっちだったっけって
迷う。何か良い憶え方無い? ゴロ合わせでもいいんだけど…
0023デフォルトの名無しさん
NGNGはテンプレートスレがいいのかな?
0024デフォルトの名無しさん
NGNG「オペレータ・オーバーロード」はきいたことあるっしょ?
これを覚えておけばどっちがどっちかすぐにわかるでしょ。
0025デフォルトの名無しさん
NGNGC++はオーバーロード。
Javaはオーバーライド。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNGオーバーライドという単語の"ride = 乗っかる"の部分に注目すれば、
認識するのは容易だと思うけどなぁ。
ずっとカタカナで考えてると混乱するかもね。
0030デフォルトの名無しさん
NGNGオーバーライド:乗り移る
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGどこぞの関西弁女子高生を思い出した
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGそうだね。あっちネタ切れ気味だから。
0037デフォルトの名無しさん
NGNG結 論
そのくらい覚えろ。
0038デフォルトの名無しさん
NGNGお前がダントツで一番役立たずだなw
0039デフォルトの名無しさん
NGNGカタカナより日本語の方が日本人にとって
覚えやすいのは確かだ。
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNGTHE虎舞竜 ロード第一章
のロードだと覚えとけばイイ!!
0044デフォルトの名無しさん
NGNGTHE 虎舞竜のロードは奴らにとって“道”ではなく“重荷”だったといいたいわけか?
0045デフォルトの名無しさん
NGNG>>22読め。
「ゴロ合わせでもいい」って書いてあるだろ。
0046デフォルトの名無しさん
NGNGごめん、>>42 のどこがどう語呂合わせになってるのかさっぱり分からないんだけど。
ロード第一章で覚えておくと、なんでオーバーライドとオーバロードの違いが覚えられるの?
0047デフォルトの名無しさん
NGNGオーバーライド:上書き
0048デフォルトの名無しさん
NGNGオーバーライド:縦のつながり
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0052デフォルトの名無しさん
NGNGすげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0053デフォルトの名無しさん
NGNGすげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNGスマソ(w
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいのですか?
005651
NGNG0057デフォルトの名無しさん
NGNG#include "stdafx.h"
後死ね。
0058デフォルトの名無しさん
NGNG言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG{
int a;
int b;
public:
void Set(int i, int j) {
a = i;
b = j;
}
}
などと適当に作って、printf("%d\n", sizeof(A)); してみると8バイトって
出るんですが、メンバ関数の部分ってメモリを食わないんでしょうか?
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNG面罵関数へのアドレスはコンパイル時に決定されるから要らない。
ただvirtualなものがある場合VMT分の領域が要る。
0064デフォルトの名無しさん
NGNGクラスインスタンスごとに必要なメモリ量にメンバ関数自体は関係ない。
それでも、「メモリを食わない」とは言い切れなくって、
virtual関数の有る無しで間接的に影響することはあるし、
コード領域としてメモリを食うと言えるかもしれない。
> 面罵関数へのアドレスはコンパイル時に決定されるから要らない。
なんか胡散臭い説明だなぁ。
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG個々のインスタンスではなく、クラス全体で共有したいから。
0069デフォルトの名無しさん
NGNG同じ内容を各インスタンスの中それぞれに含むのは効率が悪いんだよ。
0070デフォルトの名無しさん
NGNGなんとなく。
0071デフォルトの名無しさん
NGNGデザパタ本を読めばわかるかもよ。GoFなんかスタンダードな所で。
0073質問アゲ
NGNGVC++やBCBなどのC++からCを動かす方法でいいアイデアがあったら
教えてください。
とりあえず思いついたのはC++のクラス定義部分にて
class hoge{
public:
#include "目的のソース.c"
}
と書いて動かしています。
0074デフォルトの名無しさん
NGNG普通はCモジュールのヘッダファイルの頭に
#ifdef __cplusplus
extern "C" {
#endif
を、最後に
#ifdef __cplusplus
}
#endif
を書けばC++から普通に呼べるんだがね
0075デフォルトの名無しさん
NGNGextern "C" {
#include "目的のソースのヘッダ.h"
}
}
クラスにすりゃGUIになるってもんでもないし、
こうして使えばいい。
0076質問アゲ
NGNG普通でない環境で開発しているんだがね
0077デフォルトの名無しさん
NGNG普通でなくても >>74が通用しないなんて考えにくいが
0078デフォルトの名無しさん
NGNG質問する態度じゃない
カエレ!
0079デフォルトの名無しさん
NGNG普通じゃん。
0080デフォルトの名無しさん
NGNG76は最近良く沸いてるage嵐じゃないの?
73の態度から76はちょっと考えづらい。
008178
NGNGだったらスマンかった。。。>73
0082デフォルトの名無しさん
NGNGその「Cのソース」をコンパイラのオプションか拡張子を変更してC++ソースとしてコンパイルしてみれ
もし問題が全く起きないか、容易に解決できる問題しか発生しなければそれがベスト。
0083デフォルトの名無しさん
NGNGは?
0084デフォルトの名無しさん
NGNGCとして書かれたソースでも、C++としてコンパイルできる場合があるということ。
って、あまり説明になってないが、わからんかな?
俺は82じゃないけど、意味わかったぞ。
0085デフォルトの名無しさん
NGNGclass AGE {
private:
std::vector< double > _age;
...その他もろもろ
public:
AGE( size_t size ) : _age( size ) {}
std::vector< double >& age( void ) { return _age; }
...その他もろもろ
};
void fun( std::vector< double >& ){...}
int main( void ) {
AGE age( 10000 );
fun( age.age() );
...
}
と書いたらメンバの参照を返すなとも書いて有りますた。
漏れはどうしたらいいでつか?
0086デフォルトの名無しさん
NGNG...
public:
...
void fun() { fun( _age ); }
...
};
0087デフォルトの名無しさん
NGNG{
if(nIndex < _age.size())
return _age.at(nIndex);
else
return -1;
}
みたいなもん作れってことか?
0088デフォルトの名無しさん
NGNGAGEは汎用にしたくて(DATAのバッファ用等)fun()とかメンバ関数持たせたくない場合はやむを得ずでしょうか?
0089デフォルトの名無しさん
NGNG互いに関係の無いもの同士をひとつにまとめるだけならpublicなデータメンバによるstructにすればいい。
「メンバ変数をpublicにすんな」、「メンバの参照を返すな」というのは、
クラスがただのデータの集まり以上の意味を持つとか、
データメンバの間に常に保たなければならない整合性があるとか、
そういった場合の話。
ただのデータの集まりならstructで単純にまとめればいい。
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGSoBigはとてもデータのサイズが大きい構造体です。
class a
{
SoBig big;
public:
SoBig* GetData(){return &big;}
};
つまり、値で返してしまうとコピーに時間がかかってしまうのでポインタを渡すということです。
0094デフォルトの名無しさん
NGNGそういうときはせめてconstつける。つか、参照で充分だが。
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG馬鹿が増えたからだよ(もちろん俺様を除く)。
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNGclass A {
public:
int value;
A() { value = 1; }
};
A a;
class B {
public:
int value;
B() { value = a.value; }
};
B b;
こういうので、aがコンストラクトされるまえにbがコンストラクトされてしまって
bは正しく初期化されない、ということってありえますか?
正しくは b.value == 1 になると思うのですが実際には0になります。
関係あるか分かりませんが、aとbは実際には別の翻訳単位で定義されています。
つかってるのはvc.net2003です。
0102デフォルトの名無しさん
NGNGglobalの初期化の順序は不定。
0103デフォルトの名無しさん
NGNGというか、ダメな見本のようなコーディングだよな。
0104デフォルトの名無しさん
NGNGどうすりゃいいの?
0105デフォルトの名無しさん
NGNGそれぐらい考えろ。
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG初期化の依存関係に応じてイニシャライザを呼ぶ
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG>それぐらい考えろ。
嫌ならわざわざ書き込むな糞が。
0111デフォルトの名無しさん
NGNG違うよ。最初からそれぐらい考えろって言ってる訳じゃなく、
ヒントを与えてから言ってる。
別にやりたくもない宿題だったらまだしも自分でプログラムの勉強してるなら
考えないとダメになる。
0112デフォルトの名無しさん
NGNGC++FAQ第2版の16.14〜16.18に解決策が載ってるよ。
これはその一番最初の例。Bの静的変数はA内に保持する方法。
class B {
public:
int value;
B(int v) : value(v) {}
void f() { std::cout << "B::f(), value = " << value << std::endl; }
};
class A {
protected:
static B& bo(int x) {
static B* p = new B(x);
return *p;
}
public:
int value;
A() { value = 1; }
void f() {
std::cout << "A::f(), value = " << value << std::endl;
bo(value).f();
}
};
A a;
int main()
{
a.f();
}
0113デフォルトの名無しさん
NGNGもしこのintが邪魔なら
static B& bo(int x = 0) {
static B* p = new B(x);
return *p;
}
とでもすればいい。とにかくAがBより先に初期化されて欲しければ
Aの内部にBを持つしかない。
0114デフォルトの名無しさん
NGNGそんなことするよりも>>107の方が断然いい。
ほんとに一度しか初期化されたくなければフラグ持たせればいいわけだし。
0115デフォルトの名無しさん
NGNG「シングルトン」でググれ。
ついでに、「僧衣」でググれ。
0116デフォルトの名無しさん
NGNGsingletonとは別だろ?
というか>>101が何をしたいかによる。
インスタンスが一つしか嫌だってばあいはsingletonだし
複数持ちたい場合はsingletonじゃダメだし。
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNGもちろんデザパタはいいが使いかたも知らないで使ってる奴もいるし。
0119デフォルトの名無しさん
NGNG0120101
NGNGポインタでもつようにしました。
0121デフォルトの名無しさん
NGNGたしか、生成順の制御ができたやつ。
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNGphoenix singleton は破棄の順序が問題になる場合。
今回は生成順序なので >107 で十分でしょ。
singleton はしばしば >107 のように実装されるけど、唯一性を目的としたものじゃ
なければ singleton じゃないわな。
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG同感。
かなり微妙だからね、生成順序って。
トレースさえ開始できないタイミングで生成されると
動作確認がお手挙げだし。
0126デフォルトの名無しさん
NGNGは使えないという記事をどこかで読んだけど、
どうしてダメなのか意味がわからんかった
誰かサルにもわかるように優しく教えてください
0128デフォルトの名無しさん
NGNGデザパタスレってなかった?そっちで聞いた方がいいと思うけど?
0129デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNGアトミックになってないなんて… > Java
使えないインスタンスを返すなんて重大な設計ミスのような希ガス。
0133デフォルトの名無しさん
NGNGリンク先読んだ?>>130のコメントって外しているような・・・。
0134デフォルトの名無しさん
NGNGが JIT で
mem = allocate();
instance = mem;
ctorSingleton(instance);
こんな擬似コードを出力するという主張らしいんだけど
スレッドを考えると少なくともこうしないとまずいよね。
mem = allocate();
ctorSingleton(mem);
instance = mem;
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNGコンテキストスイッチが発生する位置によっては
C++でも保証はされないだろうな
0137デフォルトの名無しさん
NGNGそりゃ、C++の言語仕様でスレッドに関する保証を得るのは無理だけど、
正しく動作するlock/unlockを前提にすれば、
double checked lockingという手法自体は問題ないんじゃないの?
0138デフォルトの名無しさん
NGNG必要なのはlock/unlockじゃなくて>>134
0139デフォルトの名無しさん
NGNGだから、lock/unlockは前提と言うことで済ませた上で、
「C++では>>134のような問題はない」→「C++ではdouble checked lockingは問題ない」
ってことじゃないの?
0140デフォルトの名無しさん
NGNG生成されるコードによるってことが分からないの?
あれはJavaに限った話じゃない。
C++では生成されるコードに対する規定はまったくなされてないよ。
0141デフォルトの名無しさん
NGNG>5.3.4 New
>The new-expression attempts to create an object of the type-id or
>new-type-id to which it is applied. (中略) If the entity is a
>non-array object, the new-expression returns a pointer to the object
>created.
パラグラフの最後に"new は「生成された」オブジェクトのポインタを返す"
ってあるから、コンストラクタは通らないとまずいんじゃないかな。
コンストラクタを通らないと created にはならないんでは。
the object allocated なら別だけども。
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNGもっと低レベルな話。
0144デフォルトの名無しさん
NGNGどんなコードを生成してもいいってわけじゃあないし。
制限がなかったら規格の意味なんてない。
0145デフォルトの名無しさん
NGNG>>127(>>134)の問題が発生するようなシナリオのサンプルきぼん。
出力コードは擬似でもいいです。
個人的には>>139が正しいと思ってます。
0146デフォルトの名無しさん
NGNG分かったからageるなぼけ
0147デフォルトの名無しさん
NGNG337: EnterCriticalSection(&Singleton::cs);
004025E6 mov esi,esp
004025E8 push offset Singleton::cs (00405258)
004025ED call dword ptr [__imp__EnterCriticalSection@4 (00406228)]
004025F3 cmp esi,esp
004025F5 call _chkesp (00403004)
338: if (instance == NULL)
004025FA cmp dword ptr [Singleton::instance (00405274)],0
00402601 jne Singleton::getInstance+97h (00402647)
339: instance = new Singleton();
00402603 push 1
00402605 call operator new (0040302c) ----- *1
0040260A add esp,4
0040260D mov dword ptr [ebp-14h],eax
00402610 mov dword ptr [ebp-4],0
00402617 cmp dword ptr [ebp-14h],0
0040261B je Singleton::getInstance+7Ah (0040262a)
0040261D mov ecx,dword ptr [ebp-14h]
00402620 call Singleton::Singleton (00402680) ----- *2
0148デフォルトの名無しさん
NGNG00402628 jmp Singleton::getInstance+81h (00402631)
0040262A mov dword ptr [ebp-58h],0
00402631 mov eax,dword ptr [ebp-58h]
00402634 mov dword ptr [ebp-10h],eax
00402637 mov dword ptr [ebp-4],0FFFFFFFFh
0040263E mov ecx,dword ptr [ebp-10h]
00402641 mov dword ptr [Singleton::instance (00405274)],ecx ----- *3
340: LeaveCriticalSection(&Singleton::cs);
00402647 mov esi,esp
00402649 push offset Singleton::cs (00405258)
0040264E call dword ptr [__imp__LeaveCriticalSection@4 (00406224)]
00402654 cmp esi,esp
00402656 call _chkesp (00403004)
*1で一時領域にメモリの確保
*2でコンストラクタの呼び出し
*3で変数instanceへの格納
と、>>134でいう後者のパターンで構築が行われているので、
VCの吐き出したコードには問題がない。
じゃあ、前者のパターンのコードを掃き出すコンパイラがあったらどうなる?
Javaと同じ問題を抱える事になるね。
0149デフォルトの名無しさん
NGNGa = new A();
と書いてるのなら、式の評価順序としては
コンストラクタの実行がaへの代入より後になるなんて考えられない気がするが
規格に規定ないの?
0150デフォルトの名無しさん
NGNGctor(mem);
a = mem;
上のコードが、最適化によって
a = alloc();
ctor(a);
にされちまうことがあるのかもしれんな。
スレッド間の干渉まで考慮してくれるような賢いコンパイラが要求されてるならvolatileなんてキーワードも必要ねーしな
0151デフォルトの名無しさん
NGNG評価を終了せずに代入することはないから
まともな処理系なら問題なし。
まともじゃない処理系は…捨てたほうが。(ワラ
0152デフォルトの名無しさん
NGNGdouble checked lockingが保証されるかどうかはCPU(コンパイラ)の
問題なんじゃないの?
仮にdouble checked lockingが有効だったとしても、
allocateとctorの順番がどうであれMC++Dの
double checked lockingをつかったsingletonの
実装には関係なさそうに見えるし。
0153152
NGNGa = alloc();
ctor(a);
だったら、MC++Dの実装でもまずいか。orz
ただ、double checked lockingがCPU依存なのはOKだよね?
0154デフォルトの名無しさん
NGNGは、
a.operator=(new A());
だから評価が終わるまで代入される事は無い。
0155デフォルトの名無しさん
NGNGメモリの再割り当ては行われているのでしょうか?
appendで追加すると、文字化けがおこってしまいますし、
resizeやreserveを行うと、既存文字列自体が破壊されているようです。
どうすればいいんのでしょうか?
0156デフォルトの名無しさん
NGNG何やってるの? なんか変なことやってない?
appendはもちろん再割り当てが行われ得るし
reserveとかで既存の内容が破壊されるってことは普通ありえないが。
普通に代入してるのなら。
0157デフォルトの名無しさん
NGNGもしかしてstringをstringのままで使わずに
文字列のポインタ得てそれを使い続けようとしてたりしてる?
0158デフォルトの名無しさん
NGNGすいません。実行してみたらちゃんと出てました。
でもデバッグしてると、内容が「|r」とかわけわからんものになってるんです。
そいで、そのstringの_Mysizeとやらが16になってるんですが、
文字列の長さも16なんで、ヌル文字分が確保されていないように思うのですが。
0159デフォルトの名無しさん
NGNGああ、VC7.1で少なくともマルチスレッド版だと
16文字までは自身に格納し、それを超えたら参照カウント共有とかやってるみたいだね。
で、デバッガでみると間違ったほうが表示されたりすることがあるね。
まあそういうこと。とりあえずコード側でassertionとかdebug printとかで逃げてるよ。
0160デフォルトの名無しさん
NGNGちゃんと表示されてるのは、string tempとして、
temp.c_str()をやってるからなんでしょうか?
>>157
stringのまま使っています。
vcでデバッグして、tempの値をトレースしてると、文字化けが起こります。
具体的には、「ConsoleLog-1.txt」(16文字)という文字なんですが、
1の部分が2,3...10...20...と増えていくので、
ConsoleLogの後に「-」,「(数字)」,「.txt」を3回に分けてappendしています。
0161デフォルトの名無しさん
NGNGそうなんですか。ありがとうです。
プログラム自体はちゃんと動くんですが、デバッグしてたら不安になりました。
0162デフォルトの名無しさん
NGNG>ヌル文字分確保
std::stringがヌル文字分確保するなんて誰に聞いた?
.c_str() こちらは最後にヌル文字が付加されるね。
0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG要素は独自定義のクラスのオブジェクトのポインタなんですが。
0165デフォルトの名無しさん
NGNGinsert
0166デフォルトの名無しさん
NGNGinsertでイテレータを指定しますよね?
ある要素のイテレータを取得するにはどうしたらいいんですか?
その要素のポインタは分かるんですけど。
0167デフォルトの名無しさん
NGNGvector.begin()はrandom access iteratorを返すので
vector[i]のイテレータは (vector.begin() + i)で得られるけどな。
0168デフォルトの名無しさん
NGNGなるほどー!
ありがとうごじます!
0169デフォルトの名無しさん
NGNGistream_iteratorでdifference_typeってのを指定しますよね。
こんな感じ。
typedef vector<string>::difference_type deff_type;
ifstream infile("XXXXX");
istream_iterator<string, diff_type> input_set(infile);
このdifference_typeというのは、解説書によるとイテレータ
同士の減算を行った際の差を格納するための型だということでした。
これがどうもピンと来ないのですが、上の例だとイテレータ間の
stringが全部格納されるのでしょうか?しかし、型指定しただけで
そんなうまいこといくんでしょうか?それとも違うでしょうか?
そもそも組み込み型の配列の場合ってポインタの減算は、その型の
要素数の差が返ってきますよね。単純に数値が・・。
vector<string>に距離を収めるとはどいうことなんでしょうか?
0170デフォルトの名無しさん
NGNG単純に数値と考えれば良い
「差」を表す名前を与えただけ。
0171169
NGNGちょっとわからんのですが、数値だとしてなぜにvector<string>型を
指定するのでしょうか?そこの意味がわからんのです。
実際にイテレータ同士の減算を行った結果を格納するのが、上の例で
いうとvector<string>なんですよね?数値の型としては不適当な
気がするんですが・・・。
0172デフォルトの名無しさん
NGNGvector<string>じゃなくてvector<string>::difference_typeだよ?
0173169
NGNGたとえば他の型を指定することも可能ですか?上の例で。
またそれによって変化がでてくるのでしょうか・・・。
0174デフォルトの名無しさん
NGNG0175169
NGNG0176176
NGNG0177デフォルトの名無しさん
NGNGvector<string>::iterator って書き方したことない?
vector<string> のイテレータの型が vector<string>::iterator。
で、この vector<string>::iterator の差の型が vector<string>::difference_type になる。
istream_iterator に対してテンプレート引数 Distance を指定するということは、その istream_iterator
の差が Distance 型になるということだ。
istream_iterator は Input iterator なので実質 distance() が返す型が Distance 型になるってことだな。
ほとんど意味がない。
なのでわざわざ Distance を指定せずデフォルトにまかせるのが普通。
なお、istream_iterator の宣言は↓の通りなのでそのコード間違ってるよ?
template <class T, class charT = char, class traits = char_traits<charT>, class Distance = ptrdiff_t>
class istream_iterator:
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG「そうだ」と言えば信じるのか?
0180デフォルトの名無しさん
NGNGシングル�dインスタンスを取得するたびにロックするしかない?
0181デフォルトの名無しさん
NGNGってのは?
0182デフォルトの名無しさん
NGNGstringには数字しか入ってないのは分かっています。
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGstd::istringstream使うとか
0185デフォルトの名無しさん
NGNGどうも。boost入れてたんで使います。
>>184
サンクス。勉強になりました。
0186デフォルトの名無しさん
NGNG[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21/
0187デフォルトの名無しさん
NGNGstd::vector< double > tmp(10);
tmp[1]、std::vector< double >::iterator、tmp.at(1)等などありますけど。
それから、sizeが必要な場合関数への受け渡しは何がいいですか?
void func( std::vector< double >& d ){ size_t size(d.size());...}
void func( std::vector< double >::iterator begin, std::vector< double >::iterator end )
void func( double *tmp, size_t size )
幾らでも方法がありますけど。
0188デフォルトの名無しさん
NGNG目的による。
0189デフォルトの名無しさん
NGNGboostがAPIを使ったりはしないと思うのだが。
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGtmp.at(1)は範囲エラーの時に例外が飛ぶが、
tmp[1]は例外が飛ばない。(たぶん
template <typename RIt> void func(RIt top,RIt last);
はいかが?格納方法がvectorであることも強要しないし、
double *tmpの用にメモリ上に連続であることも強要しない。
RandamAccessIteratorである事のみ強要する。
ただ、funcの性質にもよると思う。実装ベタベタな関数なら楽なのに
すればいいし、汎用的にするなら上記方法もありだし。
0192169
NGNG詳細な説明ありがとうございました。
意味ナッシングですか・・・。
どうもPrimerの著者は、執筆してる段階ではまだ古いC++コンパイラ
使ってたようで、その辺の名残がサンプルコードにあるみたいです。
素直にデフォルトでいけばいいですね。
0193デフォルトの名無しさん
NGNG>>506
>宿題なら構わないんじゃないか?
>「C++相談室 part30」は質問という単語をスレタイに含めるべきだと思った、そんな夜。
おいおい、頼むからこのスレに学校の宿題解いて厨はよこさんでくれ。
0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGvcでも使いたいのですがboostは使わせてもらえないので
素直にboostのソースをコピペしてつかう事にします
0199デフォルトの名無しさん
NGNG> class X {
> public:
> static void *operator new( size_t size, void *buf ) { return buf; }
> };
と、しなければ placement new はコンパイルエラーになるって書いて
あります。が、下のソースで何の問題もおきません。std::vectorの動作を
考えてみてもoperator newの定義はなくてもいいと思うんですが、どうなんですか?
#include <iostream>
struct S {
S() { value = 555; }
int value;
};
int main()
{
char buf[sizeof(S)] = { 0 };
S* s = new (buf) S;
std::cout << s->value << std::endl;
return 0;
}
0200デフォルトの名無しさん
NGNGboost使わせてもらえない = 使用禁止??
boostのソースコピペ = 使用してるじゃん。
馬鹿?
0201デフォルトの名無しさん
NGNG俺も一緒のこと思った。
0202デフォルトの名無しさん
NGNGどうよ、お前ら。
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG開発環境に明示的に組み込めないってことだろ
外部ライブラリを使っちゃいけないとか規約があって
自作の振りしてこっそりコピペするんだろ。すぐバレそうだけど
0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNGboostの場合コンパイラを選ぶって理由はあるとは思いますが
商用利用においてライセンス周りでうるさいライブラリではないと思うのですが・・・
boost使ったコードを理解できない(ドキュメント読んで理解する時間が惜しい)という理由でしょうか?
厨な質問で申し訳ないです。
0207デフォルトの名無しさん
NGNG部分コピペしにくいのは明らかにグローバル関数じゃなくてクラス関数。
0208デフォルトの名無しさん
NGNGそんなやついっしょに仕事したくない
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG・・・と同時にmplあたりをすらすら理解できてすらすら書くようなやつとも
一緒に仕事したくないわけだがw
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG{
char a;
char b;
char c;
char d;
};
A proc(void)
{
return NULL;
}
↑このプログラムがコンパイルできないんですけど
コンパイルが通るようにキャストする方法ありませんか?
0214デフォルトの名無しさん
NGNGC?C++?
0215デフォルトの名無しさん
NGNGA*ならまだしも。
0216デフォルトの名無しさん
NGNGC++です。
>>215
A proc(void)
{
A r;
r.a = 0;
r.b = 0;
r.c = 0;
r.d = 0;
return r;
}
でもいいんですけどちょっと高速にしたくて。
0217デフォルトの名無しさん
NGNG戻り値最適化を期待するならコンストラクタを作っておいて、
return A(0, 0, 0, 0); でいいのでは。
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0なら
A r=A();
で十分。
0220デフォルトの名無しさん
NGNG駄目。
0221デフォルトの名無しさん
NGNG実際にコンパイルして試してみた?
それではデフォルトコンストラクタが呼ばれるだけで初期化は
されない。
struct A
{
char a;
char b;
char c;
char d;
A() : a(0), b(0), c(0), d(0) {}
};
とか。もっとスマートな方法があると思うのだが・・・・・
0222デフォルトの名無しさん
NGNGオブジェクトが作られ、それでもって r を初期化する、ですね。
で、一時オブジェクトはメンバが初期化されてないから各メンバ
にどんな値が入ってるかわかったもんじゃない、と。
0223デフォルトの名無しさん
NGNGr.c=10;
r=A();
return r.c;
の場合「0」になったけど?
VC.Net2003
Releseで。
0224デフォルトの名無しさん
NGNG108 16 64 0
になった。各メンバ。BCC5.6.4だけど。
0225デフォルトの名無しさん
NGNGこれはセキュリティ上の問題。
しかし、スタックにせよヒープにせよ、OSが確保して以降全く使用されていないという
保証がなければ当然期待値は「不定」だ。
0226デフォルトの名無しさん
NGNGそれが、VC7.1のコードではDebugでもReleaseでもXOR EAX,EAX
というコードに展開されててゼロクリアしているんだよね。rを。
gcc3.4.0(MinGW)でも同様だった。BCCだけ違う。
0227デフォルトの名無しさん
NGNGVC,GCCなら問題ないと。
まあ、仕様に定義されてないんだろうけど。
0228デフォルトの名無しさん
NGNGもっと大きなクラスか構造体で試してみたいね。
俺の考えではA()はAのデフォルトコンストラクタを呼び出して
(何もしないですぐリターンする)、一時オブジェクトを作るだけで、
0クリアするなんて掟は規格書にはなかったような記憶が。
0229デフォルトの名無しさん
NGNG言語規格上は不定値であることが定義されている.
(勝手に0クリアするのは規格違反じゃないだけで保証はされない)
というか素直に221で良いと思うんですが・・・
0230デフォルトの名無しさん
NGNGT() {}
T(const T&) {}
~T() {}
private:
const T& operator=(const T&);//禁止したい
};
--------------
T t1, t2;
t1.~T()
new (&t1) T(t2);
これって実行時間をのぞけば
t1 = t2
を実行できたのと同じことだよね?
(operator=がごく普通にコピーをあらわすとして。)
0231デフォルトの名無しさん
NGNG違う。
T t1, t2;
T(t2)のコンストラクタで例外が発生した場合、
後者ならt1は有効だけど、前者ではそうではない。
0232デフォルトの名無しさん
NGNGふつう両方を private において実装なしにするだろ。
ついでに operator= の戻り値は非 const な。実際に使うことは稀だと思うが。
0233デフォルトの名無しさん
NGNG生成時以外には値をかえられたくない、と思ってこうすることも
ひょっとしたらあるかと思って。
0234デフォルトの名無しさん
NGNG12.6.2は"Initializing bases and members"なので、そこで「初期化されない」と定義されているのは、
メンバ(または基底クラス)のうち、初期化リストに現れず、且つPOD型である場合。
8.5 -7- により初期化子が空の括弧 () の場合、「デフォルト初期化」されると決まっている。
そして 8.5 -5- により、POD型の「デフォルト初期化」は「ゼロ初期化」であるとされている。
つまりVCとGCCは準拠しているが、BCCは違反。
0235デフォルトの名無しさん
NGNGtemplate <typename RIt> void func(RIt top,RIt last);
を使ってみます。
0236デフォルトの名無しさん
NGNG一連の話、VCは .NET2003 からね。2002までは初期化してくれない。
0237デフォルトの名無しさん
NGNG暗黙のデフォルトコンストラクタがメンバに対して空の括弧の初期化子を
適用することは明示されているのでしょうか?
12.1.7 (ISO/IEC 14882/2003)
The implicitly-defined default constructor performs the set of initializations of the
class that would be performed by a user-written default constructor for that class
with an empty mem-initializer-list (12.6.2) and an empty function body.
これの"empty mem-initializer-list"の解釈の問題だと思うのですが,
私は,mem-initializer-listが全く指定されていないコンストラクタと理解したのですが・・・
(よって初期化子リストに現れず,12.6.2.4により初期化は保証されない,という主張です.)
0238デフォルトの名無しさん
NGNG標準C++のヘッダファイル名(拡張子無し)
をソースファイルに両方記述できますか?例えば
#include <windows.h>
#include <string> のように
0239デフォルトの名無しさん
NGNGなんでできないと思うの?
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGなんとなく、統一した方が無難かなと思いました
0242デフォルトの名無しさん
NGNGstruct B
{
int m[1000];
};
int main()
{
B b = B();
std::cout << b.m[0] << std::endl;
}
結果
2621440
何回試してもダメだ。BCCは糞。
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG標準の機能には無い。
0245デフォルトの名無しさん
NGNGboost::filesystem をドゾー
http://boost.cppll.jp/HEAD/libs/filesystem/doc/operations.htm
ただ、特にパス操作で、ShiftJISのダメ文字に対応してるかどうか確認してない。
どなたかご存知ですか〜?
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG>>245
ありがとうです。
ダメ文字って言うのは\/*とかですか?
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNGなるほど。良く分からないんで自分で調べてみます。ありがとうです。
0250デフォルトの名無しさん
NGNG>暗黙のデフォルトコンストラクタがメンバに対して空の括弧の初期化子を
>適用することは明示されているのでしょうか?
そうではなくて、>234 は POD 型 (ここでは struct A) の () による初期化
自体が zero-initialize になる(からデフォルトコンストラクタは呼ばれない)ので、
0 に初期化されるという主張だと思う。
なお、14882:2003 だと zero-initialize じゃなくて value-initialize となってる。
この例では、結局 zero-initialize と同じ結果になると思われ。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG値が不定ってのなら分かるが、未定義となると、デフォルトコンストラクタ
を呼んだ途端にコンピュータがフォーマットされても文句言えんぞ。
0253デフォルトの名無しさん
NGNGコンピュータがフォーマットされるってのが
よくわからんがFORTRANみたいになるのか?
それとも紫外線あてるとか・・・
0254デフォルトの名無しさん
NGNGhttp://freett.com/esqkft/040507ms/010.jpg
0255デフォルトの名無しさん
NGNGかわいい!オシッコ飲みたい!!(;´Д`)ハァハァハァハァ
0256デフォルトの名無しさん
NGNGhttp://freett.com/esqkft/040507ms/161.jpg
0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG・・・
現在はSTLは標準C++の中のテンプレートライブラリ部分の名前。
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG大学の課題なんで詳しい人助けてー。
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGClassで三角形だけじゃなくいろいろな面積に繋げるため
inheritanceしろってか?
0264デフォルトの名無しさん
NGNGC/C++の宿題をやらせて、お兄ちゃん 22代目
http://pc5.2ch.net/test/read.cgi/tech/1083050221/
0265デフォルトの名無しさん
NGNG伝統的な章立てで進行する授業なら
データと型あたりか? そこだと、まだclassが登場してないよな
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG「既に定義されています」
というリンクエラーが出ます。
どこで定義すればいいんでしょうか?
今はsfdafxという全てのファイルから参照されるヘッダに宣言しています。
0269デフォルトの名無しさん
NGNG定義はヘッダではなくコード側に
0270デフォルトの名無しさん
NGNGVCの場合は
#pragma once
一般的には
#ifndef __STDAFX__
#define __STDAFX__
中身
#endif
とする。
__・・・ __
をヘッダーごとに変える。
0271デフォルトの名無しさん
NGNG> stdafxが多重インクルードされるから。
ちがうよ。
0272デフォルトの名無しさん
NGNGいろんなところから呼び出されるんだから多重インクルードだろ。
別にインクルードがループしてるって意味で言ったんじゃないぞ?
0273デフォルトの名無しさん
NGNG> というリンクエラーが出ます
0274デフォルトの名無しさん
NGNG>>270の方法でやりましたが、同様のエラーが出ました。
#pragma onceを消して#ifdefを書くんですよね?
>>269
複数のクラスから参照される変数なんですが、
使用するすべてのコードで書くんでしょうか?
0275デフォルトの名無しさん
NGNGヘッダには定義ではなく宣言を書く。
extern int a; // 宣言
int a; // 定義
0276デフォルトの名無しさん
NGNGエラー内容(表示される物)書いてくれるのが一番助かるんだが。
0277デフォルトの名無しさん
NGNGようやく納得しました.確かに
A r = A();
の書き方は,8.5.7によりvalue-initializedになり,Aにユーザ定義のコンストラクタが
ないので,8.5.5によりvalue-initializeによってメンバ全てに対するvalue-initializeが保証されて,
結果PODメンバに対してzero-initializeが保証されるわけですね.
ありがとうございました.
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNGちなみに#ifdefじゃなくて#ifndef
つまり
__STDAFX__が定義されてなかったら
{
__STDAFX__を定義する
中身
}(#endif)
というので多重インクルードを防げる。
#pragmaはVCオンリーなのであんまり使わない方がいい。
0280277
NGNG#include <iostream>
struct A{ char a, b, c, d; };
struct B{
B(){}
char a, b, c, d;
};
int main(int argc, char *argv[]){
A a = A();
std::cout << int(a.a) << std::endl;
std::cout << int(a.b) << std::endl;
std::cout << int(a.c) << std::endl;
std::cout << int(a.d) << std::endl;
B b = B();
std::cout << int(b.a) << std::endl;
std::cout << int(b.b) << std::endl;
std::cout << int(b.c) << std::endl;
std::cout << int(b.d) << std::endl;
return 0;
}
上のコードのようなしょうもない違いが生じるわけですねw.
(VC++7.1では違いは出ませんが,gcc3.2.2では違いが生じます)
Aが>>250に対応し,Bが>>237に対応すると.
0281デフォルトの名無しさん
NGNGそれ関係ないってば。
0282デフォルトの名無しさん
NGNGstdafx自体VCオンリーな感じが(笑)
0283デフォルトの名無しさん
NGNG違う
0284デフォルトの名無しさん
NGNGつーかVC使ってるんなら
VCの拡張だって理解した上で
#pragma once使ったほうが効率的。
0285デフォルトの名無しさん
NGNGはじめに
A r=A();
を持ち出したのは俺だがあってるみたいでよかった。
俺も他人がこの方法で初期化してるのみて「できるの?」
って思ってたから・・・
じゃあ、A()が0初期化保証されるならBCCは違反って事?
0286デフォルトの名無しさん
NGNG#pragmaがVCオンリーってのはネタ?
0287デフォルトの名無しさん
NGNG関係ないのはわかってるが
#ifndefじゃなくちゃいけないのに#ifdefって書いてあったから。
0288274
NGNGエラー内容は、
error LNK2005: "int TARGET_DAY" (?TARGET_DAY@@3HA) は既に AnalysisManager.obj で定義されています。
というものです。
このほかにも同様のエラー、「グローバル変数XXは既にXXX.objで定義されています」と出ます。
コンソールアプリなんですが、このTARGET_DAYとかをコマンドライン引数から入力してもらって、
その値によって処理を変えようと思うので、グローバル変数にしたいんですが。
グローバル変数をコード内に書くとするなら、その変数を使用する全てのクラスのコード内に記述するんでしょうか?
0289デフォルトの名無しさん
NGNG定義は一個だけにする。
0290デフォルトの名無しさん
NGNG>>275は無視かよ。
0291デフォルトの名無しさん
NGNG#pragma once
ってVCでしかみなかったからオンリーだと思ってたよ・・・
違うんだね。
でも、VC以外では使わない方がいいってのはあってるでしょ?
0292274
NGNGあ。
すいません。
つまり宣言は複数用意すると。宣言は使用するクラスのヘッダ内全てで書いてもいいんですか?
それで定義をメインクラスのグローバルスコープの位置でするって感じですかね?
0293277
NGNG280をgccで実行してもらえれば分かりますが,A()の書き方で
0初期化保証されるのはAにユーザ定義のコンストラクタを全く定義していないときに
限られますのでご注意を.
ユーザ定義のコンストラクタを定義していない場合の話なら,
当然BCCは違反ってことになりますね.
0294デフォルトの名無しさん
NGNG>>279には#pragmaとしか書かれていない。
0295デフォルトの名無しさん
NGNGヘッダファイルは一個に見えてもincludeしたすべてのモジュールに
コンパイル時につなぎ合わされて解釈されるの。
宣言は使用するクラスのヘッダすべてがincludeする別のヘッダに一個かけばいい。
定義はメインクラスんとこでいいよ。
疲れた('A`)
0296デフォルトの名無しさん
NGNG#pragma onceって書くのめんどくさかったから・・・
0298デフォルトの名無しさん
NGNGいや、それは分かるけど今回は全然意味変わってんじゃん。
JavaScriptをJavaと書くようなもんだよ。
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG#pragma onceにして、プログラマの手から離れたほうがいいに決まってる。
対応してない環境で開発しなきゃいけない状況に陥らない限り、俺は絶対#pragma once使うぞ。
0301デフォルトの名無しさん
NGNG知らない奴に教えるときくらい気をつけて欲しいもんだな。
0302デフォルトの名無しさん
NGNG#include <mah.h>
#define vector00 1,2,3
#define vector01 4,5,6
namespace mytriangle{
class Vect3D{ double x, y, z;
public:
Vect3D(){}
Vect3D(double const&, double const &, double const&);
friend Vect3D OuterProducts (Vect3D const &,Vect3D const &);
inline double Abs3D(){ return sqrt(x * x + y * y + z * z); }
Vect3D &operator=(Vect3D &V){
x = V.x; y=V.y; z=V.z;
}
friend double Square(Vect3D const &, Vect3D const &);
};
Vect3D::Vect3D(double const & X, double const & Y , double const &Z)
:x(X),y(Y),z(Z){}
inlinedouble Det2(double const & a, double const &b,
double const &c, double const &d){ return a * d - b * c;}
inline Vect3D OuterProducts(Vect3D const &v1,Vect3D const &v2 ){ return Vect3D( Det2(v1.y, v1.z, v2.y, v2.z),-Det2(v1.x, v1.z, v2.x, v2.z),Det2(v1.x, v1.y, v2.x, v2.y));}
inline double Square(Vect3D const &v1, Vect3D const &v2 ){ return OuterProducts(v1, v2).Abs3D()/2.;}
}
int main(){
using namespace mytriangle; Vect3D u(vector00), v(vector01); std::cerr << Square(u,v) <<'\n';}
0303デフォルトの名無しさん
NGNGあと、main のなかで最後に 1でも返しといて。
0304デフォルトの名無しさん
NGNGVC.netにはマクロがついてる。
自動で#ifndef、#define、#endifしてくれる。
名前はファイル名で。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNGどこが言い争いにみえたのやら・・・
誰と誰がどういう意見で争ってるのか、言ってみ(w
0307デフォルトの名無しさん
NGNG0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG使いこなせないのはもっとダサい。
0310デフォルトの名無しさん
NGNG同意見
0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNG悪魔の証明だなw
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNGさすがに1年以下は居ないだろうな・・・・・・(゚Д゚;)
0316デフォルトの名無しさん
NGNGコンパイル単位なんてC++に限らんが、C++始めたのはつい最近だな。10年くらいか。
0317デフォルトの名無しさん
NGNGVC++7.1付属のSTLの出来はどう?(6.0ではいろいろ問題があったけど。)
あえてC++を使いこなしてる人のこのスレで意見を聞きたい。
0318デフォルトの名無しさん
NGNGコンパイラはMinGWのgcc 3.3.3です。
ソース>
#include <iostream>
using namespace std;
class Test
{
public:
template <class T>
Test& operator<<(const T& rhs)
{
cout << rhs;
return *this;
}
};
int main()
{
Test t;
t << 100 << std::endl;
return 0;
}
エラーメッセージ>
t120.cpp:19: error: no match for 'operator<<' in '(&t)->Test::operator<< [with T = int]((&100)) << std::endl'
0319デフォルトの名無しさん
NGNGstd::endlの定義を考えてみて。
0320デフォルトの名無しさん
NGNGstruct A
{
virtual void Foo1(void) { std::cout << "A" << std::endl; }
void Foo2(void) { Foo1(); }
};
struct B : public A
{
void Foo1(void) { std::cout << "B" << std::endl; }
};
struct C : public B
{
void Foo1(void) {
std::cout << "C" << std::endl;
B::Foo2(); }
};
int main( int argc, char *argv[] )
{
struct C test;
test.Foo1();
return 0;
}
これを実行したときに、「CCCCCCCC・・・」と永遠に続いてしまいます。
test.Foo1()を実行ときに「CB」と表示されて終了して欲しいのですが、何か良い手段はないでしょうか?
(B::Foo2()を実行したときに B::Foo1() が呼び出されて欲しい。)
ちなみに、「B::Foo2()」を「B *cls = (B *)this; cls->Foo2();」にしても結果は同じでした。
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNGキャストしても、Foo1へのポインタは
オブジェクト自身に C のvTblへのポインタが含まれてるので
C::Foo1が呼ばれる。
0323321
NGNG0324デフォルトの名無しさん
NGNGstruct Bに
void Foo2(void) { std::cout << "B" << std::endl; }
を追加する。
0325デフォルトの名無しさん
NGNG> test.Foo1()を実行ときに「CB」と表示されて終了して欲しい
要求がそれだけなら、
void C::Foo1(void) { std::cout << "C" << std::endl; B::Foo1(); }
とか、
void C::Foo1(void) { std::cout << "CB" << std::endl; }
とか、
やりかたはいくらでもある。
0326320
NGNGイベントを親クラスにチェーンする機能(ATLのCHAIN_MSG_MAP())を作ろうとしたときに
親クラスのイベントマップをうまく呼び出せなかったんですよね。
(CEventImpl + CWidget -> CWindowImpl -> CBaseWindow -> CFrameWindowという継承を
行った場合、CFrameWindowからCBaseWindowのイベントマップを呼びたかった)
でも、なんかCEventImplの実装が間違っているような気もするので別の方法を模索してみて諦めます。
0327デフォルトの名無しさん
NGNGtemplate<class Type, int i>
void func(){...]
みたいにテンプレートの引数のところにint iというような記述を
する必要があるときってどんなときですかね?
普通に関数の仮引数にしないのはどういう意図なんでしょうか。
0328デフォルトの名無しさん
NGNG定数を最適化。
0329デフォルトの名無しさん
NGNG静的な定数として使うとき。
たとえばその関数内で char a[i] とか、 std::bitset<i> とか。
0330327
NGNGconstつけるのとは違うのでしょうか?
できれば例か何かあげてもらえないですかね。
0331デフォルトの名無しさん
NGNG>>329
0332327
NGNGconst int size = 5;
char a[size];
はできますが、sizeが関数の仮引数だとだめなんですね・・・なんでだろ。
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNGたいていの処理系だと、自動変数はスタックにとる。
size がコンパイル時定数なら自動変数のアドレスはすべて
スタックフレームポインタの相対アドレスとして求まるが、
size が可変だと自動変数のアドレスを実行時に全部計算する
必要があって、効率悪くなる。
まぁ gcc みたいに独自拡張で size が可変でも OK っつー
処理系もあるし、alloca() 使えばスタック上に可変サイズ
のデータ領域とれるが、C++ 的には
1) コンパイル時に確定できるならテンプレート引数で
2) 実行時に決まるなら std::vector
というのが推奨。
0335デフォルトの名無しさん
NGNG何か、名前空間を汚してイヤンな感じがするんですけど、
どうするのがスマートなんですかねぇ?
現在は、
namespace IJIRUNA {
const int hoge = 123;
const char * const p = "ふがふが";
};
とかやってるんですが、何かマズいことはありますか?
ほとんどの場合、即値に展開されると思うのですが。。。
0336デフォルトの名無しさん
NGNG0337リンカ-ン
NGNG0338デフォルトの名無しさん
NGNG欠陥コンパイラ用のテクニックですね
0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNG.net 2003では大丈夫だった。
0341デフォルトの名無しさん
NGNGヘッダでポインタを初期化すると、
インクルードするソースごとに文字列リソースが作成されるのでは?
>>335の場合、"ふがふが"がソースの数だけ実行バイナリに埋め込まれてしまうはず。
VCなどの最適化処理では対処しきれないと思う。
ソースで宣言している分には問題なし。
0342341
NGNGあるソースでポインタpを使ってなければ、そのソースの分に関しては
"ふがふが"文字列リソースは埋め込まれない。
0343デフォルトの名無しさん
NGNGもっと調べてから書こうね。
0344デフォルトの名無しさん
NGNG0345335
NGNG>>336
なんか、ちと大げさな気が。。。
static const なメンバならいいんですかねぇ?
>>337
enumって定数だけだったやうな(ry
>>341
ヘッダには、もちろんexternつけますよ。即値で埋め込んでくれたほうが
速度的に良さそうな気がしますが、あまりにも長い文字列は、ファイルから読み込むか
プールしとかないとだめでしょうね。
0346デフォルトの名無しさん
NGNG使い回さないオプションがついていると思うのだが。
0347デフォルトの名無しさん
NGNG真っ当なって時点からただの戯れ言に成り下がったな
0348261
NGNG↓のエラー(ミス)がわからないのですが、詳しい人助けてくださいm(__)m
#include <iostream,h>
#include <math,h>
void main(void){
doble hen-a,hen-b,hen-c,;
doble t,menseki
cin>> a >> b >> c ;
if(a+b>c & b+c>a & c+a>b){
t=(a+b+c)/2
s=sqrt((t-a)(t-b)(t-c));
}
cout>>menseki;
あと、マイクロソフトビジュアルc++はどのように入手できるのですか?
手助けお願いします。
0349デフォルトの名無しさん
NGNG.h> -> >
void main -> int main
doble -> double
& -> &&
)( -> ) * (
店で買う
0350デフォルトの名無しさん
NGNGVisual Studio C++ .net でも大体同じことできるよ。
0352デフォルトの名無しさん
NGNG使いまわしが可能なのは、あくまでもソース単位(中間ファイル単位)だと思われ。
0353デフォルトの名無しさん
NGNG店で買う
0354デフォルトの名無しさん
NGNGいや、VCのオプションだと文字列は一カ所に追いやられる。
それを参照する。
0355デフォルトの名無しさん
NGNG学生ならアカデミック版がやすくていい。
0356デフォルトの名無しさん
NGNGttp://www.amazon.co.jp/exec/obidos/ASIN/B00009PJOD/ref=sr_aps_sw_6/250-9112563-1390659
0357261
NGNG0358デフォルトの名無しさん
NGNG文字列等のコンストラクタを伴わない定数は、
どのように最適化するかはコンパイラベンダの実装に任されている。
一つになるか複数になってしまうかはツール依存だったと思う。
const定数使った方がデバックが楽なので、個人的にはconst定数の利用を御勧めする。
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGwinnyで出回ってるよ
買うやつはアフォ
0361デフォルトの名無しさん
NGNG>319
なんとかなりました。
ostreamファイルでのendlの定義が
namespace std
{
(略)
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
endl(basic_ostream<_CharT, _Traits>& __os)
{ return flush(__os.put(__os.widen('\n'))); }
(略)
}
となっているので、ようするに _CharT と _Traits の型が決められなかったのが原因でした。
0362デフォルトの名無しさん
NGNG{
// どうのこうの
}
ってメンバのfoo* &bar
ってなんですか?
0363デフォルトの名無しさん
NGNGメンバじゃないし。
0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNGきちゃないソースをメンテすることになって泣きそうです。
OSはSolaris、linuxです。
0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNGemacs の自動整形じゃだめなの?
0368デフォルトの名無しさん
NGNGemacsは入っていません
0369デフォルトの名無しさん
NGNGなるんでしょうか?そのクラスのメンバ関数をpthreadで生成したスレッド
関数で加工できますか?それともポインタで渡してしまえば、何でも
Cのように書き換えられちゃったりしますか?
0370デフォルトの名無しさん
NGNG>pthreadをクラスのメンバ関数から生成した場合、スコープはどこまでになるんでしょうか?
pthreadは何を入れる変数or関数なのか?
>そのクラスのメンバ関数をpthreadで生成したスレッド関数で加工できますか?
メンバ変数の誤り?加工じゃなくて呼び出し?
どっちにしてもそのスレッド関数とやらがfriendなら自由じゃない?
>それともポインタで渡してしまえば、何でもCのように書き換えられちゃったりしますか?
0371デフォルトの名無しさん
NGNG入れればいいじゃん。
どっちにしろなんかツールを新規導入しようとしてるんでしょ。
0372デフォルトの名無しさん
NGNG一般的に高速と言われているBM法などに比べて
パフォーマンスはどのようなもんなんでしょう?
高速を目指すなら独自実装が必要なんでしょうか?
0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNG自作の超チューニングされたコードにかなうものなし。
0376デフォルトの名無しさん
NGNG俺も結構自作派。String,Vector、スタックあたりは自作。
0377デフォルトの名無しさん
NGNG|
|
∩___∩ |
| ノ _, ,_ ヽ (( |
/ ● ● | (=)
| ( _●_) ミ _ (⌒) J ))
彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
0378デフォルトの名無しさん
NGNGこの文字列の中にあるENTという文字が幾つあるか検索したいんだけど、
どうすれば良いんでしょうか。
strchrを使って上手く数えられないのかな?
ポインタを動かして読み飛ばしとかってのも考えたんだけど、
上手くいかないっぽ。
何か良い手を教えてもらえませんか?
0379デフォルトの名無しさん
NGNGとりあえず使ってみるのはいいけど、高速化/コードサイズ/使いやすさとか追求すると結局最後
は自分で作ることになるよ。もちろん公開されてるライブラリソースは参考にするとしても。
0380デフォルトの名無しさん
NGNGとりあえず使ってみるのはいいけど、高速化/コードサイズ/使いやすさとか追求すると結局最後
は自分で作ることになるよ。
0381デフォルトの名無しさん
NGNGstrstr() でぐるぐるすれば簡単にできるっしょ。
C++ らしくはないけども。
0382デフォルトの名無しさん
NGNG禿同。最近はライブラリだけじゃ物足りなくて
コンパイラにも手を入れ始めるようになったよ。
先週はデフォルト最上位クラスobject、
例外の最上位クラスexceptionを追加して
すべてのインスタンスを統一的に
扱えるようになってもうウハウハ。
0383ラッキーシリ( ´∀`)
NGNG⊂⊃ .☆.。.:*・゚
∧_∧. /
( ´∀`)/ このシリに出会ったあなたは超桃尻。
/, つ 近々便秘が舞い込んでくることでしょう。
(_(_, )
しし'
☆★☆★★☆ラッキーシリ☆★★☆★☆
0384デフォルトの名無しさん
NGNGありがとうございました。
そんな関数頭になかった><
ガッツり出てきそうです。thx
0385デフォルトの名無しさん
NGNG大丈夫、キャリア10年以上、年齢40以上の博士号持ってる自称SEでさえ知らなかったから。
0386デフォルトの名無しさん
NGNGをstd::string str;に
入れたい。
str = "1";
をiをつかってやるとどうなる?
0387デフォルトの名無しさん
NGNGアスキーコード使えばいい。
0388デフォルトの名無しさん
NGNG[1-9]\d*
だったらどうするんだよ
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG388さんのエクスプレッションの意味って
なんでつか?
0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNGformat
つかえばいいじゃん
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNGperlなら
sprintf("%d",$i);
でいいんだけど・・・
0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNGじゃあ、perlで日本語つかるってとこみせてみろよ
0402デフォルトの名無しさん
NGNGスレ違いな展開は勘弁
0403デフォルトの名無しさん
NGNGclassBからclassAのメンバ変数を操作したいんです
0404デフォルトの名無しさん
NGNG#include <string>
std::ostringstream oss;
int i = 1;
oss << i;
std::string str = oss.str();
0405デフォルトの名無しさん
NGNGclass B
{
public: B(class A* ref);
};
class A
{
B b_;
void func() { b_ = new B(this); }
};
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNGThanx
けど、面倒なのね
0409デフォルトの名無しさん
NGNG(実際にはユーザー定義のデストラクタがあります)
抽象クラスAから派生した複数の型のクラスを格納して一括して解放したいのですが‥‥
class A
{
public: virtual void Delete() = 0;
};
class B : public A
{
public: virtual void Delete() { delete this; }
};
main()
{
B *b = new B;
A *a = b;
a->Delete();
}
0410デフォルトの名無しさん
NGNG仮想デストラクタをAに定義してれば普通にAのポインタでdeleteすれば
派生もokだが
0411デフォルトの名無しさん
NGNGデストラクタをvirtualに、ではいかんのか?
0412409
NGNGそーいえばそんなものがあったなぁ‥‥
アリガトン
ミ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」 ノ∩
―――――――――――――‐┬┘ ⊂ ヽ
| /( 。A。 )っ あらよっと
____.____ | U ∨ ∨
| | | |
0413デフォルトの名無しさん
NGNGnamespace A {
// ここに関数やクラスなどの宣言がずらずらと
}
using namespace A;
というヘッダファイルがありました。
名前空間の終わりの直後にusing namespaceをしては名前空間の意味がないと思うのですが、何か意味があるのでしょうか?
0414デフォルトの名無しさん
NGNGたぶん、無名の名前空間ってのを知らない奴が書いたのでは?
0415デフォルトの名無しさん
NGNG名前空間で囲っておけば名前が衝突しても簡単に回避できるからだろう。
using指令を使ったところで名前空間の意味がなくなるわけではない。
0417デフォルトの名無しさん
NGNGだから、無名の名前空間を知らんのか?
0418デフォルトの名無しさん
NGNG名前なし名前空間は普通ヘッダファイルでは使わないだろ。
翻訳単位ごとに別の名前が宣言されるからな。
0419デフォルトの名無しさん
NGNGあ、ヘッダファイルか。そうだな、勘違いしてたよ。
じゃあ >>413の答えは、「意味なし」は言い過ぎにしても、「台無し」が正解じゃないのか?
0420デフォルトの名無しさん
NGNG413もそれを知ることができたわけだし。
0421デフォルトの名無しさん
NGNGしかしすでにコード書いた部分をnamespaceを明示するように修正するのは面倒。
なのでついでにusingした。
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG│
│ ∧_∧
↓ ( ・ω・ )
■p⊂ と )
(_(_ろ
0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG( ・ω・ )
■b⊂ と )
| (_(_ろ
|
|
|
↓
0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNGなんか誤解してないか?
名前空間の特徴のうち、
・Koenigの自動照合
・リンク時のシンボルレベルでの衝突の回避
・(名前空間内ではなくて)ユーザーコードの修正によるコンパイル時点での衝突の回避
は、using namespaceをするしないに関わらず機能するぞ。
0430デフォルトの名無しさん
NGNGそこで現在、開発環境をどれにするかで悩んでいます。
条件としては、
・ 言語: C++ (当たり前か・・・)
・ フリーソフトウェア(≒オープンソース)である。
・ RAD環境が整っており、簡単にグラフィカルなアプリが作れる
・ 環境が日本語
・ WindowsでもX Window Systemでも動作可能
・ インターフェースは
Winなら普通のLook&Feel
Xなら(できれば)GTK+
WideStudioも検討しましたが、ランタイムが重過ぎたり、
UIが独自で扱いにくい、そして別スレでの評判(作者云々)で
できれば検討から外したいと思っています。
無理な話だとは思いますが、このような環境をご存知の方居られましたら
ぜひご教授願います。
0431デフォルトの名無しさん
NGNGあと、そんな環境ありません。あなたが本当にやる気があるのなら、フリーウェアの項は撤廃すべきです。
0432デフォルトの名無しさん
NGNG0433430
NGNG確かに無理難題だったかもしれません。条件を厳しくし過ぎてしまいました。
>> C++が本当に扱うことができるようになるのか、じっくりと検討してみるのがよろしいと思います。
とりあえず、 http://www.asahi-net.or.jp/~yf8k-kbys/cpp0.html には目を通し、大枠では理解できたかと感じました。
目を通しただけで、実習としてのコーディングは全てざっと読んでから、と考えていました。
そして大分(内容の6割くらいか?)理解できたと感じたので、コーディングのための環境を揃えようと思い立ちました。
しかし、他のプログラムのソースを見ると、どうやらテキストベースとグラフィックベースのプログラミングでは、
随分差があるように感じました。多分これは間違いではないと思います。
それに、私はテキストベースのソフトを作るつもりは当分無いので、できることなら初めからGUIのやり方に慣れよう、
と思ったわけです。
また私は現在、できる・できないの問題でなく、「できる所までやってみよう」という趣旨のもと、言語の学習を進めています。
どうせ趣味としてのプログラミングで、納期なんて物も無いですから、気楽に学習しています。
>> あなたが本当にやる気があるのなら、フリーウェアの項は撤廃すべきです。
意図が掴めなかったので、これについての詳しい説明をお願いします。
VBのぬるま湯に長く浸かっておりましたので、皆様には間の抜けた質問をしてしまうかもしれませんが、
頑張って慣れてゆこうと思いますので、どうか宜しくお願い致します。
0434デフォルトの名無しさん
NGNGC++ で GUI なんて、C++そのものの勉強、プラットフォームの勉強の後じゃないと理解できないと思う。
少なくとも、RADが期待できる言語ではない。
0436デフォルトの名無しさん
NGNGいや、そんなところでワガママ言ってるようじゃ
Windows でも X でもって所でどうしようもなくなる気が。
言語的にはスタンドアロンに向かないことはない。
誰も使ってないだけで。
0437デフォルトの名無しさん
NGNGこのスレ http://pc5.2ch.net/test/read.cgi/tech/1065627704/ から辿れるツールキットのソースを読んで、
それでもC++を使いたいと思ったら戻って来い。
0438デフォルトの名無しさん
NGNGソートプログラムを書いていて疑問に思ったんですが、
バブルソートとクイックソートとバブルソートなどは
実際の現場!?ではどのように使い分けているのでしょうか?
・プログラムのしやすさ
・使用メモリの大きさ
・速さ
などを考えたんですが、実際はどうなんでしょうか?
0439デフォルトの名無しさん
NGNGいちいちソートなんぞ書いてられるか。
自分で書くとしたらcomb sortぐらい。
0440デフォルトの名無しさん
NGNGそんなことをつらつら考えるより、ライブラリを使った方が早い。
特殊用途以外では気にすることもない。
0441デフォルトの名無しさん
NGNGのでしょうか?それとも、もしかして将来、標準ライブラリの一部と
取って代わるようなこともありえるのですか?
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG要するに、C++でRADというのは実質無理なのでしょうか?
私がRADにこだわるのは、便利で手軽、保守が簡単であるという点と、なにより
ネット上に存在する多くの資料を見て嫌気が差したからでもあります。
私のC++を学習しようとする理由のひとつが、「Windows以外でも走らせたい」ということであり、
もちろんこれはJavaでもできますが、マイナーであるし、Java Start(だったっけ?) という
Sun版のJVMについていたサンプルのUIに良い印象を受けなかったこともあり、良い印象を持っていません。
それに、バイトコードを実行するので、性能も犠牲になります。
ですから、折角なら前々から考えていたC系言語をやってみよう、と考えたのです。
宜しければ、この際RADには拘らないので、C++でのGUIプログラミングを始めるにあたって
分かり易いサイト、もしくは書籍等を紹介して頂けないでしょうか。
もちろん、C++の基礎に関しては、分かり易い情報を多く見つけることが出来ましたので、
そこら辺の知識が前提となっていても構わないです。
ネット上の資料は、難しいか、VC++関係のものばかりで入門用の情報が見つかりませんでした。
何度もご迷惑をお掛けする事になってしまいましたが、どうかよろしくお願いします。
>>435
平仮名で送信してしまった・・・恥ずかしい
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNGっていうか、RADってmodelとviewなんかぐちゃぐちゃに書くやつが
多くていやなんですが・・・
VC++みたく、DOC/VIEWで完全に切り分けて、初心者を除外して欲しい
仕事しずらいったらありゃしない
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNGクロスプラットフォームのライブラリ使うにはそれなりのC++の知識が必要。
とりあえずウインドウズでGUIの基本を学ぼう。
まずMSのサイトでC++のコンパイラを落としてきて、プラットフォームSDKをインストールしましょう。
その次に「猫でもわかるプログラミング」でググって、出てきたページを1からやりましょ。リソースエディタなんかなくても手書きで十分。
あと、VisualStudioのMFCならダイアログエディタで作ったダイアログをクラスに落とすことができるから、いいRADになると思うよ。
0448デフォルトの名無しさん
NGNG「プログラミング言語C++ 3版」
これを書店でつらつらと眺め、全部理解できそうだと思ったら買って勉強する。
思いとどまるなら思いとどまる。
Webサイトの解説を読んで分かった気になっても、それは気持ちだけの話だからね。
0449デフォルトの名無しさん
NGNG俺もそう思ってwxWindowsを使ってる。RAD環境も(一応)ある。
恐らくこいつで不満は出ないと思う。
聞きたいことがあればwxWindowsスレで聞いてくれたら教えてあげるかも。
0450デフォルトの名無しさん
NGNG別の付加機能。
0451デフォルトの名無しさん
NGNGglade + anjuta
kylix3
などと言ってみる。
0452デフォルトの名無しさん
NGNG覚えられないだろ
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNG>Will the Boost.org libraries become part of the next C++ Standard?
>
>Some might, someday, but that is up to the standards committee.
>Committee members who also participate in Boost will definitely be
> proposing at least some Boost libraries for standardization.
>
>Libraries which are "existing practice" are most likely to be accepted
> by the C++ committee for future standardization. Having a library
> accepted by Boost is one way to establish existing practice.
http://www.boost.org/more/faq.htm より引用してみたが、質問の意味が違うのか。
基本的に標準ライブラリに「取って代わる」ようなものではない(一部あるかも知れないが)。
ただし追加として標準ライブラリに採用される可能性はもちろんある。
0455デフォルトの名無しさん
NGNG可変長引数=引数の個数が可変って解釈でいいんだよな。
で、具体的に何がしたいのよ。
それだけだと cstdarg 使え、で終わってしまうわけだが。
ttp://www.kouno.jp/home/c_faq/c15.html
0456デフォルトの名無しさん
NGNGやー、まー、なんつーか。
多分あんたがVBで作ったアプリよりJavaのバイトコードをJIT搭載環境で動かした方がずっと速いから。
いきなり完璧なソフトなんてつくれっこないんだし、性能なんてもっとも難易度の高い分野のひとつ
なんだから考慮するだけ無駄だっての。
だいたい、基礎を分かった気になってるようだけど、それなら何で入門サイトなんか聞きたがるの?
開発環境で日本語を要求してる当たり、英語の資料は全部難しいんだろうね。
0457デフォルトの名無しさん
NGNG寧ろPerlでcgiでも作ってみたら?
制約された条件で、如何に使いやすいGUIを提供できるかいい勉強になるよ。
0458デフォルトの名無しさん
NGNG(゚д゚)ハァ?
あなたは、何か勘違いしてませんか?このスレの住人はガッコの先生じゃ
ありませんよ。自分で歩ける様になってから尋ねて来てくださいね。
0459デフォルトの名無しさん
NGNG読み込みたいのですけど、、
#include <stdio.h>
#include <math.h>
#define M 21
#define N 2
void main(void)
{
int V, T;
int i;
int array[M][N];
for(i=0, i<21, i++);{
FILE *ifp; /* declare pointers for in and out */
ifp = fopen("in.dat", "r");
fscanf(ifp, "%d %d", &V, &T);
printf("%d %d", array[i]);
}}
これで駄目だったので、どこが悪いですか?
0460459
NGNG0461デフォルトの名無しさん
NGNG>これで駄目だったので、どこが悪いですか?
ちゃんと勉強してないのが悪い。
質問の仕方が悪い。
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNG頭?
0から勉強し直さないと無理。
0465デフォルトの名無しさん
NGNGお前ら糞だな。ぐちゃくちゃ書き込むぐらいなら、一言でちゃんとと教えてやれ。
それと
>>462
C++はCの仕様を包含してることを忘れるなアホ。
0466デフォルトの名無しさん
NGNGといいながら一言で教えてない罠
あとCを包含してるといってCの話題をC++スレでやったら
Cスレと分かれてる意義が薄れ、話題が分散してしまう。
ということで >>462に同意
0467デフォルトの名無しさん
NGNGC++にはstdio.hもmath.hもないが
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG早く言い訳しろよ。
0470デフォルトの名無しさん
NGNGだから答えないお前らはアホなのである。基地外なのである。ゴミ以下なのである。
ていうか俺の質問には絶対に答えなくてはならない、これは全宇宙的な戒律なのである。
って、さっき>>465が部屋の隅っこで呟いてたよ。
0471デフォルトの名無しさん
NGNG>C++にはstdio.hもmath.hもないが
アホかお前?
0472デフォルトの名無しさん
NGNGあぁ体育座りしながらな
0473デフォルトの名無しさん
NGNGお前がアホ。
つうか、もうヤメレ。
はい、次。
0474デフォルトの名無しさん
NGNGしかし俺のほうがもっとアホだ
アホって誉め言葉でしょ
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNGcstdio のファイルの中身すら見たことない超初心者の >>467 をいじめてやるなよ。
0478467
NGNG0479デフォルトの名無しさん
NGNG皿仕上げ
0480467
NGNG首吊ってきます。
0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNGcstdioの中身が
namespace std {
#include <stdio.h>
}
とかになってるって事か?
規格と実装は(略
0483デフォルトの名無しさん
NGNG通りでコンパイルできなかった理由が初めてわかりました。
0484デフォルトの名無しさん
NGNGoperator<<=, って演算子があるけど、
こいつを文字列に対して、例えば以下のように多重定義する。
wstring & operator<<=( wstring & lhs, string const & rhs )
{
vector< wchar_t > buf;
buf.reserve( mbstowcs( 0, rhs.c_str(), MB_CUR_MAX ) );
mbstowcs( &b[0], rhs.c_str(), MB_CUR_MAX );
wstring( b.begin(), b.end() ).swap( lhs );
return lhs;
}
すると、ナロー文字列をワイド文字列に変換する際に以下のようにかける。
wide <<= narrow;
とても C++ らしいと思うのだがどうだろう?
0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGC++に*.hはない。
0488デフォルトの名無しさん
NGNG規格嫁
0489デフォルトの名無しさん
NGNGoptional
しかも、厳密にはcstdioがstdio.hを取り込むのではなく、
stdio.hで各関数をグローバルにusing std::printf;みたいな事するようになってる。
0490デフォルトの名無しさん
NGNG>>487
アホの活け作り。Cの処理系なしに、pure C++だけで動く処理系あれば言ってみろ。糞が
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNGオプションであってもそれが使えなければCとの互換性は保てない。
DではなくてあくまでもよりよいCがC++だから。
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG> Cスレに相応しい質問はすべて、C++スレにおいても相応しい質問なのである。
> だから答えないお前らはアホなのである。基地外なのである。ゴミ以下なのである。
> ていうか俺の質問には絶対に答えなくてはならない、これは全宇宙的な戒律なのである。
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNGそれはお前の中だけだろう。
Cと矛盾する仕様もいくつか含んでいるし
C99に至っては完全に枝分かれしたような状態なのに。
0498デフォルトの名無しさん
NGNG0499デフォルトの名無しさん
NGNGwarningなりerrorなりを出すべきだな。
簡単にできるはずだが、現実はそうなっていない。
0500デフォルトの名無しさん
NGNGだれもそんな事は言っていない。
C++標準以外のヘッダやライブラリは使えないとでもいうつもりか?
0501デフォルトの名無しさん
NGNGお前何言ってる?
C++はよりよいCを目指して作られた処理系ってこと知らないのか?
0502デフォルトの名無しさん
NGNGアフォかお前。
Cの標準ライブラリをincludeしたときにwarning出すぐらい簡単だと
言ってるんだよ。自前のファイルのincludeをハネル必要なんかないだろうが。
0503デフォルトの名無しさん
NGNG目指して作られた事と、実際にC++がCのスーパーセットであることに相関関係はないぞ。
0504デフォルトの名無しさん
NGNGC++の処理系がCのヘッダファイルを「わざわざ」認識して警告する必要があるのか?
アフォとか言う前に、プリプロセッサの仕事を良く考え直してみろ。
取り込んだヘッダがC++の文法と矛盾していなければ問題なくコンパイルできて何が悪い?
0505デフォルトの名無しさん
NGNG頭悪いなお前。言ってることのロジックが成り立ってないこともわからんのか?
0506デフォルトの名無しさん
NGNGはぁ。
0507デフォルトの名無しさん
NGNG全く問題ないよ。だから使うことに何の問題もない。
お前、考えてから書き込めや。
0508デフォルトの名無しさん
NGNG>C++の処理系がCのヘッダファイルを「わざわざ」認識して警告する必要があるのか?
全くないよ。
0509デフォルトの名無しさん
NGNGお前ら、全員馬鹿だってば。
いいかんげんにヤメレ!
0510デフォルトの名無しさん
NGNGC++の言語仕様には、Cとの多くの共通点があるだけ。
>>507
使う事に問題があるなんて誰も言ってないだろうが。
Cのstdio.hを使うのならそれはC++スレの範疇ではないと言ってるだけだ。
C++は決してCを包括しているわけではない。
0511デフォルトの名無しさん
NGNG何でやたらキャストばかり・・・
int main(){
int y[] = {1,2,3,4,5,6,7,8,9,10};
int *ip;
long L1;
long L2;
L1 = (long)y;
cin >> L2;
ip = (int*)(L1 + (L2 * sizeof(int)));
printf("%d\n",*ip);
return 0;
}
0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNGC++はCを包括している。
0514デフォルトの名無しさん
NGNG基本的にC++はCの完全なるスーパーセットであって、
C++の言語仕様は、Cを完全に包含していなければならない。
0515デフォルトの名無しさん
NGNG頭が古いですね。
0516デフォルトの名無しさん
NGNGそれが意図しているのは多分、
int main(){
int y[] = {1,2,3,4,5,6,7,8,9,10};
int *ip;
long L2;
cin >> L2;
ip = y + L2;
printf("%d\n", *ip);
return 0;
}
つまり、入力された数に1を足して表示する。
0517デフォルトの名無しさん
NGNGy[i] = *(y + i)
を確かめたいんじゃないの?
0518デフォルトの名無しさん
NGNGそんなこと、どこに書いてあった?
0519デフォルトの名無しさん
NGNG>>507
>>511にこんなキャストはCのキャストだからCスレに行けと言うのか?
それともcinさえあればC++スレでOKなのかい?
0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNGint *でポインタ演算をする代わりに、longにキャストして、ポインタ演算の真似事をして、
再びint *にキャストしている。
ポインタの中身が通常の整数であるような実装では、ポインタの中身はバイトのアドレスで、
intの配列の要素を指しているポインタの数値にsizeof(int)分だけ足せば
その配列の次の要素を指すようになる。だから、
L2 * sizeof(int)
を足せば、L2個先の要素を指すようになる。
但し、上に書いたことは規格で保障されてはいない。
実際、ポインタをlongにキャストして再び元に戻すと値が失われる処理系があると思う。
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNGそれが「C++はCとは別の言語だが、Cとの共通点を多く含む仕様」って物なんだよ
ISO C++はCとは別の言語。
仕様に重複個所があったとしても、それぞれCの要件、C++の要件で別物なの。
0524デフォルトの名無しさん
NGNG--- 中略---
C++とCの間のすべての違いはコンパイラによって診断できる。
0525デフォルトの名無しさん
NGNGお前の頭はスでもはいってるのか?
>ISO C++はCとは別の言語。
当たり前。C++はCのスーパーセット。
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGC++コンパイラがエラーなり警告なり出さない書式はすべてC++と認めて構わないってことだな。
0528デフォルトの名無しさん
NGNGいっそこういうのは
gcc version 3.2.3 (mingw)にて想定どうりの動作確認
#include <iostream>
void hello(){
std::cout << "hello world\n";
}
void f(){
long p;
*(&p+2)=reinterpret_cast<long>(&hello);
std::cout << "f\n";
}
int main(){
f();
std::cout << "after f\n";
return 0;
}
0529デフォルトの名無しさん
NGNG> 当たり前。C++はCのスーパーセット。
頭が古いですね。
0530デフォルトの名無しさん
NGNGおまえは文字定数の型の違いを知らないのか?
暗黙のintを知らないのか?
整数とポインタ間の暗黙の変換を知らないのか?
_Complexや"%lf"を知らないのか?
>>526
宿題スレに馬鹿な議論を持ち込もうとせんでくれ。
0531デフォルトの名無しさん
NGNGおまえはちょっと冷静になれ。
元質問の>>459を宿題スレでやれってこったろ。
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG>暗黙のintを知らないのか?
>整数とポインタ間の暗黙の変換を知らないのか?
>_Complexや"%lf"を知らないのか?
はぁ?それを知ってることに対してお前は何を言いたいんだ?
_Complexは知らんな。
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG絡んでないのだが。同一人物と思ってる時点でお笑いだな。
0536デフォルトの名無しさん
NGNGおまえが459かよ。取りあえずは責任とって氏んでくれ。
0537デフォルトの名無しさん
NGNG本当だ、IPを確認したら別人だったよ!
0538デフォルトの名無しさん
NGNGふーん。そのIP晒してくれよ。
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG仮想アドレス空間でのコード領域においてメインルーチンは先頭に配置されるますよね
従って、関数名の「main」はメインルーチンの実行コードを指すポインタなんですかね?
それに付随して、他のサブルーチン内でmain()を呼び出すことは出来ますでしょうか?
0541デフォルトの名無しさん
NGNGmain()を呼び出すことも可能だが、それはよくない書き方。
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGサンクス。
「main」も関数ポインタと理解して良かったんですね
0544デフォルトの名無しさん
NGNGそれは違うよ。ポインタとして扱いたければ関数へのポインタを宣言して
main()を指すようにすれば。ただし、君がやろうとしてることは恐らく正しい
コーディング法ではないと思うけど。
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNGもうちょっと素直に「main()も関数なんですね」と言え。
0547デフォルトの名無しさん
NGNGint funcx()
{
int (*f)();
f = main;
f();
}
int main()
{
//実体
funcx();
}
無限ループになるよ。
0548デフォルトの名無しさん
NGNG要は、mainがメインルーチンの関数名(先頭アドレス)としてソース上で表現されている
ということを確認したかったんです
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNGそれがなんなの?
0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNG>>544に書いたことを>>547に書いたんだが、なんか問題でもあるのか?
0557デフォルトの名無しさん
NGNGC++標準に存在しないstdio.hとか使ったソースを持ってきたら
実装依存だから専用スレへ誘導するべきだな。
0558デフォルトの名無しさん
NGNG使いたいんですけど、そういった物が使えるライブラリはないでしょうか?
0559デフォルトの名無しさん
NGNG(宣言部のファイルで#include "source.cpp"とかはなしで)
実装部を別ファイルにするとリンカがエラーを吐いてくれるので‥‥
0560デフォルトの名無しさん
NGNGexportを使える環境以外では無理。
0561デフォルトの名無しさん
NGNGいや、ここでやったらいいよ。
0562デフォルトの名無しさん
NGNGexport
0563デフォルトの名無しさん
NGNGCのヘッダだけは良しとする合理的理由が説明されてない
てことはunistd.hとかwindows.hもありだな。
ホント何でもありなんだな、C++スレは。
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG>>561の行間嫁。一行だけどな。
0566559
NGNG>export キーワードは将来の実装用に予約済みですが,このリリースでは効果を持ちません。
orz
0567デフォルトの名無しさん
NGNGcomeauはちょっと手が出しにくいなあ。
注文書にクレカの表裏のコピー添付してサイン入れてfaxか郵送しろってのが・・。
0568デフォルトの名無しさん
NGNGそりゃ初耳だ。C++の規格にはCが含まれていると言う事か。
0569デフォルトの名無しさん
NGNGもういいって。
0570名無しさん@Vim%Chalice
NGNGhttp://www.boost.org/libs/multi_array/doc/reference.html#synopsis
boost::multi_array は resize 出来るぞ
0571デフォルトの名無しさん
NGNG> テンプレートを使用したクラスで宣言部と実装部を別々のファイルに記述することはできないのでしょうか?
> (宣言部のファイルで#include "source.cpp"とかはなしで)
>
> 実装部を別ファイルにするとリンカがエラーを吐いてくれるので‥‥
私はg++(3.3.3)を使っているのですが,
テンプレート引数に与える型が限られている場合,
例えば,以下のようにクラステンプレートAがあって,
テンプレート引数としてintとfloatでしか実体化しない場合には,
$ cat a.h
template <typename T> struct A {A ();};
$ cat a.cpp
#include "a.h"
#include <iostream>
template <typename T> A <T>::A () {
std::cout << typeid (T).name () << std::endl;
}
template class A <int>;
template class A <float>;
$ cat test.cpp
#include "a.h"
int main () {
A <int> a0;
A <float> a1;
return 0;
}
なんてことをしてます.
これって,仕様としてはOKなのでしょうか? gcc以外のみなさん,これ動きます?
0573デフォルトの名無しさん
NGNG規格上はOK。
0575デフォルトの名無しさん
NGNGSTLport使ってるんですがそれが原因でしょうか?
#include <iostream>
int main()
{
using namespace std;
wchar_t s[] = L"波浪";
wcout << s << endl;
return 0;
}
0576デフォルトの名無しさん
NGNG今のSTLPortでもimbueしてやんないとだめかもしれない。
http://www.tietew.jp/cppll/archive/1484
0577デフォルトの名無しさん
NGNGSTLportは知らんが、VC7.1だと
setlocale(LC_ALL, "Japanese_Japan.932" );
こういうのが要るが、そのへんはどうか
0578575
NGNGを加えたら正しく出力できました
setlocale(LC_ALL, "Japanese_Japan.932" );
はだめでした。Japanese_Japan.20932とかもだめでした
ありがとうございました
0579デフォルトの名無しさん
NGNGC++ 使っている場合、setlocale よりも、locale::global を使ったほうがいい。
0580デフォルトの名無しさん
NGNGがあり、これを int として解釈したい場合、
static_cast<int>(uInt);
reinterpret_cast<int&>(uInt);
とすると -1 になり同じ結果が得られますが、用法としてはどちらが正しいのでしょうか。
或いはどちらも正しい?
0581デフォルトの名無しさん
NGNG再解釈だけが目的ならstatic_cast
0582デフォルトの名無しさん
NGNG未だに static と reinterpret の区別が曖昧なもので。
もう一回勉強してみます。
0583デフォルトの名無しさん
NGNG最後の手段として使う物だす
0584デフォルトの名無しさん
NGNGreinterpret_castはビットパターンをそのままコピー
0585デフォルトの名無しさん
NGNG変換元の値が、変換先の整数型の上限を超えている場合は、そもそも実装依存だよ。
static_cast 使おうが reinterpret_cast 使おうが。
> 4.7 Integral conversions
> 3 If the destination type is signed, the value is unchanged if it can be represented in
> the destination type (and bitfield width); otherwise, the value is implementationdefined.
0586デフォルトの名無しさん
NGNGえ・・・?およびでない?
0587デフォルトの名無しさん
NGNGふーんimplementationdefinedだったのか。undefinedだと思っていた。
くそー手元に規格票がなくて調べようがない・・・
0588デフォルトの名無しさん
NGNGstruct A {
char str[10];
int b;
int c;
} ;
という構造体で渡されてくるデータがあるとします。
これを以下のような型へのポインタを引数に取る関数(この中は
事情があって手を入れられない)に渡したいのですが、
struct B {
int b;
int c;
} ;
この場合、struct B b1;を作りそこに対応メンバーをコピーして
から渡す方法がありますが、参照でコピーせずにやりたいのですが
うまくいきません。どうやったら良いでしょうか?
0589デフォルトの名無しさん
NGNGstruct A : B
{
char str[10];
};
0590デフォルトの名無しさん
NGNG無理。きれいな方法はない。
おそらくAの設計ミス。
どうしてもやるなら、
struct A {
char str[10];
B b;
};
物理的なレイアウトに
制約がなければ
struct A : B {
char str[10];
};
これは保証なし
struct C {
char str[10];
B b;
};
union {
A a;
C c;
};
0591デフォルトの名無しさん
NGNGreinterpret_cast< B* >( reinterpret_cast< char* >( &a ) + offsetof( A , b ) )
とりあえず動くものはできるかもしれないけど、激しくおすすめできない。
int ふたつくらいならコピーしてしまう方がいい。
0592588
NGNGなるほどやはり参照で逃げるのは無理のようですね。
引数の渡し方にばかり目がいき、>>589を忘れてました。
これが一番本質的な解決策ですね。どうもありがとうございました。
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNGどういうときに使うのでしょうか?
0595デフォルトの名無しさん
NGNGhttp://www.fides.dti.ne.jp/~oka-t/cpplab-cast.html
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNGなんか気持ちの悪いキャストをするだろ?アレ
0599594
NGNGう〜む、どうも俺には難しいなぁ。
いちおう基底→派生の変換で、なおかつ基底クラスが仮想関数
をもっていなけりゃいけないってことですが、何の役に立つのかな。
static_castでもできそうな・・・。
0600デフォルトの名無しさん
NGNG実行時にチェックしてくれる。
0601594
NGNG危険があると・・・しかし、そもそも何をもってキャスト成功・失敗が
分岐するのでしょうか。
0602デフォルトの名無しさん
NGNGdynamicだから実行時に行うんだよ。当たり前だけど
それ以外のキャストはコンパイル時に決定するだろ
0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNG俺が最近使ったのは、スクリプト言語を実装したとき。スクリプト言語側は
C++ ほど豊富な型情報を持たせなかったので、スクリプトにポインタを
渡した段階で基底クラス型のポインタに。
で、受け取ったポインタを元の型に復元するときに dynamic_cast してた。
0605デフォルトの名無しさん
NGNG> 何をもってキャスト成功・失敗が分岐するのでしょうか。
ポインタのキャストが失敗すればヌル。
参照のキャストが失敗すればbad_cast。
0606594
NGNGあとは自分でつめてみます。
0607デフォルトの名無しさん
NGNG安いんだから、買っとけ。
0608デフォルトの名無しさん
NGNG何かの本にはvirtual関数はバーチャルテーブル見る分遅いと書いてあった気がします。
virtual関数を使用せずstateパターンと同じような効果を得られるお勧めのパターンがあったら教えてください。
0609デフォルトの名無しさん
NGNG速度は計測してから判断せよ。ただ、目安としては
vtableは相当速度に厳しいとき以外はまったく問題にならないから安心しろ
0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNGswitch - case だってジャンプテーブル持つことになるから、本質的に
変わらんよ。
それと状態遷移に関しては、入退場動作をどうするか、複合状態(状態の
ネスト)をどうするかの方が大きな問題。複合状態を全く扱わないってのも
一手だが、複雑になってくると破綻しがち。
0612デフォルトの名無しさん
NGNG0613デフォルトの名無しさん
NGNG速度については>>609,>>611の言うとおり。
「何かの本にはコンパイラはアセンブラより遅いとあった気がします」
といってるのと同じだよ。
普通にプログラムを組む場合、バーチャルテーブルなんかより
自分自身がつくりあげるアルゴリズムの方がよっぽど速度に
影響を与えていることが多い。
0614デフォルトの名無しさん
NGNGbad_cast例外が出るなんて知らなかったYO!
どこに書いてあるんだYO!!!
0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNGできないのですが、なぜですか?
0617デフォルトの名無しさん
NGNGこことか。
http://www.google.co.jp/search?hl=ja&q=dynamic_cast+bad_cast&lr=lang_ja
例外でなかったら、他にどうなると思ってたんだ?
0618デフォルトの名無しさん
NGNGNULLの詰まった参照
0619デフォルトの名無しさん
NGNGそんなもん、言語仕様上には存在しない。
ヌルポインタをデリファレンスした時点で未定義。
0620デフォルトの名無しさん
NGNGおれば、C++はエンジン部分のdllを作ることしか使ってない。てか、使えない。
GUIの部分はC#に頼りきり。C++でやろうとしたんだけど、難しすぎてあきらめた。
0621デフォルトの名無しさん
NGNG0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNG普通は自作か他作のGUIライブラリを使います。C#なんて使いません。
0627デフォルトの名無しさん
NGNG普通はVBかC#を使います。C++なんて使いません。
0628デフォルトの名無しさん
NGNGよっぽど暇なんだね。
0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNG0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNG【GUIライブラリ】wxWindowsでのひょーん
http://pc5.2ch.net/test/read.cgi/tech/1052186697/
0640デフォルトの名無しさん
NGNG0641デフォルトの名無しさん
NGNG状態Aの処理内で状態Aから状態Bに切り替えたくなったのですが
どうすればいいのでしょうか。そもそもAはBがあることすら知らないのですが
0642デフォルトの名無しさん
NGNG0643デフォルトの名無しさん
NGNGvoid (*sa_handler)(int); に、同じクラスの別のメンバ関数
を登録したいのですが、コンパイラに型が違うと怒られて
弾かれてしまいます。こういう場合は、どうやってセット
するんでしょうか。
0644デフォルトの名無しさん
NGNGclass内でstatic void foo(int bar);なるメンバ関数なら登録できると思われ。
staticじゃないメンバ関数は呼び出し手順が違うので登録できないかと。
0645デフォルトの名無しさん
NGNG先にC言語勉強したほうがいい?
0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNGC++からでいいでしょ。
Cのライブラリもどうせ覚えなあかんけど、それを最初に済ましておく必然性も無いような。
0648デフォルトの名無しさん
NGNGそういったところを知らない(C/C++を初めて触るというレベル)というのであれば
Cを勉強したほうがいいんでないの?
0649デフォルトの名無しさん
NGNGライブラリの勉強なんかしてどうすんの
Cやるときにでもライブラリなんて後回しでいいよ。
0650デフォルトの名無しさん
NGNGはC++やる上で必須だろ?
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG同意。
>>650
new delete でいいじゃん。
0653デフォルトの名無しさん
NGNGint *((*)f())[]
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNGになることは間違いない
0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNGC#まず勉強してGCに慣れ親しんでから
C++やるのがいいと思うよ。
ちょうど
オートマに慣れてからミッション運転する感じかな。
0658デフォルトの名無しさん
NGNGC#?
http://www.kmonos.net/alang/d
やっぱDだろ?DからはじめてC++
0659デフォルトの名無しさん
NGNGオートマにもミッションはありますが何か。
0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG0662デフォルトの名無しさん
NGNG自動変数がスコープを抜けるとデストラクタが呼ばれるとかいうのを
asmレベルで確認できるぐらいじゃないと
わけわからんところで躓く気がする
0663デフォルトの名無しさん
NGNGマニュアルと言いたかったんだろう
0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNGemacs lispまず勉強してGCに慣れ親しんでから
C++やるのがいいと思うよ。
ちょうど
オートマに慣れてからミッション運転する感じかな。
0666デフォルトの名無しさん
NGNGそういう汚れ仕事はそれ専用の人間に任せればいいのさ。
0667デフォルトの名無しさん
NGNGEiffelまず勉強してGCに慣れ親しんでから
C++やるのがいいと思うよ。
ちょうど
オートマに慣れてからミッション運転する感じかな。
0668デフォルトの名無しさん
NGNGCでラッピングして__stdcall でエクスポートするdll作って、
C#でそれをインポートしてGUI作る
ってのが効率のいいWindowsアプリ作りの作法ってことでいい?
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNG>オートマに慣れてからミッション運転する感じかな。
つまり、エンストしまくりだし、全く使いこなせないってことですね。
0671デフォルトの名無しさん
NGNGなぜ適切にデストラクタが呼び出されるのか理解に詰まってるので教えてください。
たとえば以下のような基底クラスと派生クラスがあったコードの場合
class CParent {
int m_nSize;
public:
CParent(int nSize =0) : m_nSize(nSize) {}
~CParent(){}
};
class CChild : public CParent {
int* m_lpnData;
public:
CChild(int nSize =0) : CParent(nSize), m_lpnData(new int [nSize]){}
~CChild(){ delete [] m_lpnData; }
};
int main() {
CParent* p =new CChild(10);
delete p;
return 0;
}
このようにするとpがCParentのポインタのためCChildのデストラクタが呼ばれないのはわかります。
しかし、ここでCParentのデストラクタにvirtualを付加すると、なぜCChildのデストラクタから適切に
呼ばれるのでしょうか。
virutalは派生クラスで関数をオーバーライドするときに使うものだと理解しています。
関数がオーバーライドされている場合は、ポインタが基底クラスのものでも実行時型が
派生クラスのものであれば、派生クラスのオーバーライドした関数が呼ばれるのはわかります。
しかし、関数をオーバーライドしていない場合は基底クラスの関数が呼ばれると思います。
このコードの場合、派生クラスでは基底クラスのデストラクタをオーバーライドしているわけではないですし、
デストラクタの名前ももちろん違うのに、なぜCChildのデストラクタが呼ばれるのでしょうか?
0672671
NGNG�@delete p; が実行される。
�ApはCParentのポインタなので、~CParent()を実行しに行く。
�Bpの指す実行時型はCChildなので、CChildに~CParent()がオーバーライドされてないか見に行く。
�CCChildにオーバーライドされた~CParent()が見つからないので、CParentの~CParent()を実行する。
0673デフォルトの名無しさん
NGNG関数のオーバーライドと同じだ。
0674デフォルトの名無しさん
NGNG0675671
NGNG関数のオーバーライドは
名前も返り値も引数も同じ関数が必要なんじゃないですか?
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNG仮想デストラクタにするということは、デストラクタのポインタを持つということだ。
だから、delete p で、CParentのデストラクタではなく、ポインタが指すデストラクタ、
すなわちCChildのデストラクタが呼び出される。
仮想デストラクタになってなければ、delete pはCParentのデストラクタしか呼べない。
わかった?
0678671
NGNGデストラクタはインスタンスが開放されるときに呼ばれる
関数と本などには書いてありましたよ
>>677
ではポインタの指す実行時型のデストラクタから呼びに行くというのは
deleteの仕様ということになるのでしょうか?
なんとなくわかりました
0679デフォルトの名無しさん
NGNG0680デフォルトの名無しさん
NGNGうーん、本当にわかったのかなぁ。
deleteの仕様云々は関係ないんだけどな。結果的にそれはdeleteのときに起こるわけだけど。
デストラクタが呼ばれる、それは仮想か否かという、極めてシンプルな話なんだよな。
>>679
Cを知らなくてもC++を習得することは出来る。
0681デフォルトの名無しさん
NGNG俺はCを飛ばして一気にC++に行ったよ。
しかもPerlから。
0682デフォルトの名無しさん
NGNGそれって昔からある議論だね。たしかにC++からでもOKだが、
昔は多くのC++書籍がCの知識前提のような書き方だったからなぁ。
Cの標準ライブラリは使うことあるんじゃないかな。
それぐらい覚えれば大丈夫か?
0683デフォルトの名無しさん
NGNG裏を返せば、入門書の問題ってことでしょ。
Cの標準ライブラリも「使える」というだけで、使う必要はない。
はっきり言って、目標がC++なら、Cから覚えるのは遠回り。
ちょっとした練習プログラムだって、わざわざprintf使うより、
いきなり coutでいいでしょ。scanfにいたっては、勘弁してよ状態だし。
0684デフォルトの名無しさん
NGNG>ではポインタの指す実行時型のデストラクタから呼びに行くというのは
いやいや、pがCParentのポインタである以上、あくまでCParentのデストラクタを呼び出そうとする。
ところが、CParentのデストラクタを仮想にしておくと、デストラクタのありかはインスタンスをみてね、となるわけ。
で、みてみると、pが指していたのは実はCChildクラスのインスタンスだったので、
なんとCChildのデストラクタを指しているわけですよ。
さて、ここで基本的な前提知識として、CChildはCParentの派生クラスなので、CChildのデストラクタは、
CParentのデストラクタを呼び出します。これは仮想にしてるかどうかとは関係の無い話。
めでたしめでたし。
0685デフォルトの名無しさん
NGNGC++の機能にあるんでしょうか?
0686デフォルトの名無しさん
NGNGライブラリに機能もへったくれもないが。
>>683の揚げ足取りですか? だからといって、「Cから学べ」にはならんでしょ。
if文はCの機能だから〜、なんて言う奴いないよね。
0687デフォルトの名無しさん
NGNGナカーマ。
0688デフォルトの名無しさん
NGNG別に揚げ足取りというわけではないが、Cから学ぶ学ばないに
対してではなく、C標準ライブラリを使う必要はないと
きっぱり言ってることに対して、聞いただけ。自分はC++
標準ライブラリ、まだよく把握してないんで。
0689デフォルトの名無しさん
NGNGまともなCプログラマはscanfなんて使わない。
0690デフォルトの名無しさん
NGNG0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNGそうだよなあ、
全 く
必要ないと、断言できるのかできないのか
俺様もぜひ拝聴してみたいものだ (ケケケ
0694デフォルトの名無しさん
NGNG0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNGうむ。
0697デフォルトの名無しさん
NGNGで警告もエラーもでなければなんでもいい。
0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNGプラグイン対応のソフトを実装する為に有用な資料等を御存知ありませんか?
現在はDLLを追加する度に,ソフト本体に修正を加える必要があります.
これを設計から見直して,プラグイン形式とゆーか本体には一切修正を加えずに機能拡張をしたいのです.
0700デフォルトの名無しさん
NGNGSPI_API.TXTは?
0701デフォルトの名無しさん
NGNGそのDLL内の決まった名前の関数で、対象のファイルが
自分のサポートしている形式かをチェック。
サポートしてなければ次のDLLを読み込んで、
そのDLL内の同じ名前の関数でチェック。
サポートしてるDLLが見付かれば、そいつで圧縮とか展開とか。
DLLの検索方法は決まったフォルダ内のDLLを全検索とか、
特別にそれ用に決めた拡張子を使って判別するとか。
って辺りが単純な方法。
0702699
NGNGDLL側の知識も重要ですが,如何せん私にはレベルが高すぎました…
>>701
なるほど.
分かり易い説明,有難う御座います.
ところでDLLを用いた拡張コンポーネントと,ネットワークによる分散は共存可能なものでしょうか?
具体的にはDLLにて拡張コンポーネントを読み込み,実行はネットワーク上の別の計算機で行う状況です.
また(実現の可能性は取り敢えず考えずに)ネットワーク上のDLLを読み込んで,分散処理といった処理は可能なのでしょうか?
DLLの動的なロードはなんとかなりそうですが,前述の分散に関しては検索キーワードが思いつきません…
御力をもう少し貸して頂けませんか?
0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNGunionのこの使い方、どうなんですか?
void swap (unsigned char *c);
int main(int argc, char* argv[])
{
static union{
unsigned short iPort;
union {
unsigned char cPort[2];
};
};
iPort=0xFFEE;
printf("[変換前:%X:" ,iPort);
swap(cPort);
printf( "変換後:%X%X]\n",cPort[0],cPort[1]);
return (0);
}
void swap (unsigned char *c){
unsigned char tmp;
tmp = c[0];
c[0] = c[1];
c[1] = tmp;
}
0705デフォルトの名無しさん
NGNGそれ以前にDLLだのはいい加減スレ違いなんだが。
0706デフォルトの名無しさん
NGNGなんか途中でプロセスが死ぬ。
しかも何も出力されないから原因がわからないし、
どのスレッドがエラーしてるのかもわからない。
こういう時ってなんかうまくデバッグする方法ない?
0707デフォルトの名無しさん
NGNGhtons/ntohs?
0708デフォルトの名無しさん
NGNG実はネットワーク系ライブラリ関数のhtons()等より、
直接バイトシフトしたマクロやインライン関数の方が実行速度が速かったりする。
是非、お試しあれ。
0709デフォルトの名無しさん
NGNG無名 union 変数か・・・alias みたいな感じ。
ファイルやバイト列等のバイナリのデータをパースして適切なな型に変換して、
ってときに型変換オペレータを省略できるね。
0710デフォルトの名無しさん
NGNGcoreは出てないの?
0711デフォルトの名無しさん
NGNGとりあえずgdb使え。話はそれからだ。
0712デフォルトの名無しさん
NGNGない。
マルチスレッドプログラムを対話デバッグしようとする行為自体が無謀&無駄。
>>710の指摘しているように、coreからあぼーと位置を特定することは出来るけど、
結局は場当たり的な解析になりがち。
この問題が解決しても、いずれ他にあぼーとされる箇所が現れることでしょう。
多くの開発者は自前のトレース関数・トレースマクロを使ってトレースしている。
素直に通常のデバッグをあきらめて、トレース出力関数の作成に勤しんだ方が建設的だと思うね。
0714デフォルトの名無しさん
NGNGunion {
unsigned char cPort[2];
};
これの意味がわからんのだが、どういう意味があるの?
0716デフォルトの名無しさん
NGNGブロックが動くたびに新しい画面を改ページで再描写していると
プレイが長引くと画面がスクロールしまくってDOS画面が
重くなりそうで心配です。
CUIで一旦表示した画面(文字をならべて作った二元配列)を
一旦消してその場に新しい画面を再描写する方法はないでしょうか
TELNETのCUI上で普通にアニメーションしているテトリスを
むかしやったことがあるのですが、いったいどうやってるんでしょうかね
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG完全にスレ違いじゃないか。
0719デフォルトの名無しさん
NGNGエスケープシーケンスとかで変更部分だけ書き換えれば良い。
テトリスなら、変更部分はほとんど矩形とみなせるので楽だろう。
つーかここはC++相談室ですぜ、旦那。
0720デフォルトの名無しさん
NGNGMyClass::MyClass():
my_int(10),my_int(20)
{
}
なんていうメンバ変数の初期化の仕方ってどうよ?
こんな書き方していいっていう本見たことないんだが。
0721デフォルトの名無しさん
NGNGネットのソースや猫でもわかるを見て試行錯誤してるのですが。
現在作ろうとしてるのが初めてDialogをメインでCreateWindowなどを使わない方法なのですが、
どうもDialogリソースにクラス名を入れると起動後すぐに終了したり、
WM_KEYUPなどのウィンドウメッセージが反応しないなどの壁にぶつかってます。
特に後者はどのようにしたら解決出来るでしょうか?WM_COMMANDなどは正常に反応します。
Window生成したソースだとちゃんとWM_KEYUPなど動いてくれます。
いまいち生成されたWindowとリソースエディタで作ったDialogの違いが分かってないようです。
Dialogを、この生成されたWindowのようには扱えないのでしょうか。
どうかご教授よろしくお願いします。
0722デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNGそりゃ、持ってる本が悪い。
そう書くべきなのだ。
0724デフォルトの名無しさん
NGNGEffective C++ 買え
0726デフォルトの名無しさん
NGNGC++だとこの記述でもインスタンス出来るんでしょうか?
0727デフォルトの名無しさん
NGNGはじめて知ったけど、無問題らしい。
http://black.sakura.ne.jp/~third/programming/cpp/cpp44.html
0728デフォルトの名無しさん
NGNGちょっと待てよ、初めて知ったって・・・。
C++を勉強してなかったのか?
URL示してまで答えるほどのことでもないぞ。
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNGきいているのではないの
0731デフォルトの名無しさん
NGNG無名共用体の用途が全然わからない。
>>730
参照がなければコンパイラによって消え去ってしまうよう運命にあるような。
0732デフォルトの名無しさん
NGNG全然わからないなどと開き直るな。
教えてくださいと言え。
0733デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNG通報しますた
0736デフォルトの名無しさん
NGNGなんだ、おまいも使い道わからんのじゃないか(w
0737デフォルトの名無しさん
NGNG0738デフォルトの名無しさん
NGNG>そう書くべきなのだ。
え?
コンストラクタが複数種ある場合など、
いちいちあのようなメンバ変数初期化コードを書くのはウザイと思うなぁ。
0739デフォルトの名無しさん
NGNG代入ならウザくないのか?
値を設定しないのも問題外だろ。
0740デフォルトの名無しさん
NGNG普通は>>723 の通りにすべきだろ。
0741721
NGNGMFCを「使用せずに」とのことですけど。。
0742デフォルトの名無しさん
NGNG0743721
NGNG0744デフォルトの名無しさん
NGNG>>739
代入だと、init( void )を一発書いておいて、複数のコンストラクタから呼べばいいよね?
0745デフォルトの名無しさん
NGNGEffectiveC++嫁
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNGEffectiveC++読んだことあるけど、
コンストラクタ内での代入が駄目だって記述とかあったか?
0748デフォルトの名無しさん
NGNGお前はバカかアホのどっちかだ。どうせ読んだの表紙だけだろ。
http://www.google.com/search?hl=ja&ie=UTF-8&safe=off&q=Effective+C%2B%2B+%E4%BB%A3%E5%85%A5%E3%82%88%E3%82%8A%E3%82%82%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0749744
NGNGんな事より、my_intを2回初期化しているのに突っ込みが無いのは何で?
0750デフォルトの名無しさん
NGNGそれくらい読み取れ。
0751デフォルトの名無しさん
NGNGデストラクタにも同様の状態があるべきだ。
あれ、デストラクタ呼び出し中って仮想関数どうなるんだっけ
0752デフォルトの名無しさん
NGNG先にデフォルトコンストラクタが呼ばれてから
代入演算子が呼ばれるので無駄。
代入でも問題ないのはPODときぐらいだな。
0754デフォルトの名無しさん
NGNGそれに突っ込まなかったのは、単なるtypoだと思ったから。
どうせエラーになるんじゃないか? 試してないから知らんけど。
問題の本質は初期化の仕方だしな。
0755デフォルトの名無しさん
NGNG何が言いたいのか、何を聞きたいのかわかりません。
デストラクタの働きをご存知ないような書き方に見えますが。
0756デフォルトの名無しさん
NGNG0758744
NGNG初期化子の書き方知らないなんて思いもしないから、
「こんな書き方」っていうのがtypoじゃないって思ったんだよ…orz
0759デフォルトの名無しさん
NGNGmplつかってたら、不自然にexeのサイズが大きくなる。
アセンブラで追っかけても確かにコードは最適化で正しく消えている。
どうやら、mplで組み合わせたクラスにvirtual関数が含まれている為、
type_info用(?)のやたら長いクラス名(200文字)が組み合わされた分だけ
exeに含まれた模様。
type_info使ってないんだから最適化してよ...orz
0760デフォルトの名無しさん
NGNG0761759
NGNG0762デフォルトの名無しさん
NGNG0763671
NGNG遅レスになりましたが
はっきりわかりました
ありがとうございます
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNGを継承したときの
アップキャストとダウンキャストは
どういう風に実行されるのですか?
なぜ仮想基底クラスからダウンキャストは
できないのでしょうか?
0766デフォルトの名無しさん
NGNG仮想関数や仮想デストラクタと同じく、基底クラスをポインタで持っているんだろうと推測してみる。
スレ汚し、スマン。
0767デフォルトの名無しさん
NGNG>なぜ仮想基底クラスからダウンキャストは
>できないのでしょうか?
dynamic_castでできるよ
制限あるけど、それは仮想継承とは無関係
0768デフォルトの名無しさん
NGNGchar* a = new char[len+1];
ZeroMemory(a,len+1);
std::string str = a;
delete[] a;
これを実行したらdelete[] aで落ちます。
stringはaの内容のコピーを持っているだけではないのですか?
0769デフォルトの名無しさん
NGNG0770768
NGNGZeroMemory(&a,len +1)とやっていました。
すみません。
0771学生
NGNG0772デフォルトの名無しさん
NGNGそんな都合のいいものはありません。
0773デフォルトの名無しさん
NGNGmplの中でvirtual使ってるクラスなんて見当たらないんですが、
問題の再現するサンプルコードかなんか、出してもらえますか?
0774デフォルトの名無しさん
NGNGg++では不満なのか?
0775学生
NGNGじー足す足す?
0776デフォルトの名無しさん
NGNGなんでtypeidで型を調べながらプログラムすればいいのにそうしないんでしょう?
0777デフォルトの名無しさん
NGNGゲ・ペラ・ペラ です。
0778デフォルトの名無しさん
NGNGちなみにGCCはグッシッシ
0779759
NGNGmplに含まれているのではなく、タイプリストから生成する
多重継承クラスのベースがvirtualを含むという意味。
作っているのがtemplateライブラリなのでsrc単位で
RTTIをoffにもできずお手上げです。しょうがないので、
多重継承クラスの変わりにタプルを生成して、関数ポインタ
で代用した。
mpl使うと基本的に型名が長くなるので、基本的にはvirtualを
絡ませるような使い方は厳しいような気がします。type_info
の実装にもよるんでしょうけど。
0780デフォルトの名無しさん
NGNGでは継承は全部仮想継承にしても問題ないように思うんですが
なぜそれは駄目なんでしょう。その理由がダウンキャストができなくなるから
と聞いたのですが。
0781デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/jangrayhood/
ピンポイントで引用すると、
「仮想継承は、単一継承や多重継承よりも、インプリメントと使用のコストが格段に高くなります。」
0782デフォルトの名無しさん
NGNGメンバ変数として配列を持つと、それを初期化するコードは書けません。
C++の仕様の穴というか、まぁC++では配列を(なるべく)使うなってことだ。
C++っぽい機能と配列を一緒に使うと、不思議なことが起こったりするから、
素人にはお勧めできない。
0783デフォルトの名無しさん
NGNG>C++っぽい機能と配列を一緒に使うと、不思議なことが起こったりするから
思い当たる節がないのですが。
具体例をあげてみて下さいな。
0784デフォルトの名無しさん
NGNGその発言がいかにも素人。
0785デフォルトの名無しさん
NGNG派生クラスの配列を、基底クラスの配列(というかポインタ)を引数にとる関数に渡せちゃったりとか。
templateを使ったMPっぽいことをすると、配列が使えなかったりとか。
0786デフォルトの名無しさん
NGNGコンストラクタから配列初期化用のメンバ関数を呼ぶのではだめなん?
0787デフォルトの名無しさん
NGNG意味的には初期化だろうけど文法的には代入なので、POD以外の場合にオーバーヘッドがかかる。
constメンバだとconst_castする以外に手はない。
0788デフォルトの名無しさん
NGNG0789780
NGNGそこを読むと計算コストが増してしまうことはわかるのですが
継承の機能が制限されることはないのでしょうか?
憂鬱なプログラマのためのオブジェクト指向開発講座
という書籍の中には
仮想基底クラスを使うと副作用が発生します。
それは残念ながら、速度が遅くなるとか、サイズが大きくなるとかいう
レベルの問題ではなく、継承というメカニズムが持っている性質そのものを
スポイルしてしまいます。ここでは具体的に説明しませんが
ダウンキャストが困難になります。
というようなことが書いてあるのですが、これは
どのように解釈したらいいでしょうか
0790デフォルトの名無しさん
NGNGはて?
0791デフォルトの名無しさん
NGNGその書籍、古くないですか?
dynamic_castとRTTI登場以前とか。
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNGちゃうちゃう。多重継承時におじいちゃんが独りになるようにする奴。
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNG仮想基底クラスの場合って
アップキャストするとポインタをたどって
基底クラスそのものになってしまって
そのあとダウンキャストしようとしても
派生クラスの情報はどこにもなくて
ダウンキャストできないってなるんじゃないですか?
dynamic_castも必ず失敗するのでは?
違いますかね
自信はあまりないんですけど
0796デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNG杞憂・誤解・妄想
少しはググって勉強しれ。
0798デフォルトの名無しさん
NGNG禿本の15.4.2 引用/説明はちと面倒なのでパス(w 禿本持ってたら見てみて。
0799デフォルトの名無しさん
NGNGなんだか解らないから使わないのと、いろいろ解ってるから使わないのとではかなり違う。
あんたの書き込みは、ただ単に馬鹿っぽい。
0800デフォルトの名無しさん
NGNGいわゆるvptrが指すvtblが、まさに派生クラスの情報だろ。
0801デフォルトの名無しさん
NGNGきいたふうな言葉を使うな若造
0802デフォルトの名無しさん
NGNGRTTI や仮想基底クラスの無い時代の多重継承でアップキャストした場合にはそうなります
(どっち側からアップキャストしたのか、プログラマ(ム)が覚えておかなきゃならない)。
仮想基底クラスの場合は dynamic_cast でRTTI 使って適切にオフセットしてくれます。
0803デフォルトの名無しさん
NGNGそれを796に言ってやらないのは、あんたが796だからか?(w
今の話題についていけないなら、黙ってな。
0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNGそれならC++を捨てるのが得策だと思いますが。
0808デフォルトの名無しさん
NGNG今悩んでるのは >>795 だけでしょ。
0809デフォルトの名無しさん
NGNG…とまでは言わないが、
「雪山を無礼るな!万全の体制を整えるんだ!」
とか言って連れて行かれそうになったら
「そもそも、そうまでしてその山を越える必要が本当にあるんですか?」
くらいは聞くかもなあ。
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG論理的同一性と家
0812780
NGNGそして「独習C++改訂版」は1999年4月30日に初版発行で
独習C++にはdynamic_castがすでにのっているので
1998年6月以降にdynamic_castが出てきており
「憂鬱な・・・」の情報は古いってことでいいのでしょうか?
結論としては仮想継承は計算コストが増大すること以外は
通常の継承と変わりないってことでいいでしょうか?
0814780
NGNG#include <typeinfo.h>
class GrandParent{ };
class Father : virtual public GrandParent{ };
class Mother : virtual public GrandParent{ };
class Child : public Father, public Mother{ };
int main()
{
GrandParent *gpp;
Father *fap, fa;
Mother *mop, mo;
Child ch;
gpp = &fa; cout << typeid(*gpp).name() << endl;
gpp = &mo; cout << typeid(*gpp).name() << endl;
gpp = &ch; cout << typeid(*gpp).name() << endl;
fap = &ch; cout << typeid(*fap).name() << endl;
mop = &ch; cout << typeid(*mop).name() << endl;
return 0;
}
これを実行すると
GrandParent
GrandParent
GrandParent
Father
Mother
となりました。 RTTIが派生クラスのものになってくれません。
0815デフォルトの名無しさん
NGNG当たり前だろ。仮想基底クラスであるGrandParentはそこから派生したクラスの
情報など持ってない。
0816デフォルトの名無しさん
NGNGGrandParentに仮想関数(デストラクタでヲケ)を追加してみ。
0817デフォルトの名無しさん
NGNGRTTIを使うには仮想関数が必要。
つーか基底クラスとして使うクラスのデストラクタは仮想にするのが大原則だから覚えておき。
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGそれを避けるためのvirtual。
実の親ではなく義理の親。だから兄妹に血のつながりは無いのでOK。
0820デフォルトの名無しさん
NGNG基底クラスの(隠し)メンバでなければ、
基底クラスのポインタからアクセスできんだろうが。
>819
もしかして笑うところ? 意味が解らないのだが。
0821デフォルトの名無しさん
NGNG1行目がまっとうな理解
2行目はアフォの頭の中
0822デフォルトの名無しさん
NGNG> 2行目はアフォの頭の中
私817じゃないけど何で?
private継承,protected継承はなしよ.
0823デフォルトの名無しさん
NGNGまさかお前は基底クラスとして使うクラスのデストラクタは全部仮想にしてるのか?
0824デフォルトの名無しさん
NGNG全然関係ないぞ??
>>*
struct V
{
int vm;
virtual ~V() {}
};
struct A : public virtual V { int am; };
struct B : private virtual V { int bm; };
struct C : public A, public B { int cm; };
int main()
{
C c;
V* pv;
pv = &c;
cout << pv << endl;
B* pb;
pb = dynamic_cast<C*>(pv); // これ、どう思う?
cout << pb << endl;
return 0;
}
0825デフォルトの名無しさん
NGNG822 じゃないが、原則として公開継承する基底クラスのデストラクタは仮想に
するだろう。そうでないとアップキャストしたら大惨事確定だし。
0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNG822 じゃないが、原則として公開継承する基底クラスのデストラクタは仮想に
するだろう。そうでないとアップキャストしたら大惨事確定だし。
0828デフォルトの名無しさん
NGNG>原則として公開継承する基底クラスのデストラクタは仮想に
>するだろう。
繰り返さなくていいよ。
だからしないってば。
>そうでないとアップキャストしたら大惨事確定だし。
んなわけない。アップキャストしただけで大惨事ってなんだよ?
0829780
NGNG#include <typeinfo.h>
class GrandParent{ public: virtual ~GrandParent(){} };
class Father : virtual public GrandParent{ };
class Mother : virtual public GrandParent{ };
class Child : public Father, public Mother{ };
int main()
{
GrandParent *gpp; Father *fap, fa; Mother *mop, mo; Child *chp, ch;
gpp = &fa; cout << typeid(*gpp).name() << endl;
fap = dynamic_cast<Father *>(gpp); if(fap)cout << typeid(*fap).name() << endl;
gpp = &mo; cout << typeid(*gpp).name() << endl;
mop = dynamic_cast<Mother *>(gpp); if(mop) cout << typeid(*mop).name() << endl;
gpp = &ch; cout << typeid(*gpp).name() << endl;
chp = dynamic_cast<Child *>(gpp); if(chp) cout << typeid(*chp).name() << endl;
return 0;
}
結果
class Father
class Father
class Mother
class Mother
class Child
class Child
GrandParentに仮想デストラクタを追加した結果うまくいきました。
教えてくれた皆さんありがとうございました。
0830780
NGNG#include <typeinfo.h>
class GrandParent{ public: virtual ~GrandParent(){} };
class Father : virtual public GrandParent{ };
class Mother : virtual public GrandParent{ };
class Child : public Father, public Mother{ };
int main()
{
GrandParent *gpp; Father *fap, fa; Mother *mop, mo; Child *chp, ch;
gpp = &fa; cout << typeid(*gpp).name() << endl;
fap = dynamic_cast<Father *>(gpp); if(fap)cout << typeid(*fap).name() << endl;
gpp = &mo; cout << typeid(*gpp).name() << endl;
mop = dynamic_cast<Mother *>(gpp); if(mop) cout << typeid(*mop).name() << endl;
gpp = &ch; cout << typeid(*gpp).name() << endl;
chp = dynamic_cast<Child *>(gpp); if(chp) cout << typeid(*chp).name() << endl;
return 0;
}
結果
class Father
class Father
class Mother
class Mother
class Child
class Child
GrandParentに仮想デストラクタを追加した結果うまくいきました。
教えてくれた皆さんありがとうございました。
0831デフォルトの名無しさん
NGNGstruct Deriv : public Base {};
struct Base* p = new Deriv;
これでアウトでしょ。こういう使い方をしないのであれば、そもそも
継承ではなくコンポジションにしいた方が良いと思われ。
0832デフォルトの名無しさん
NGNGdeleteしないアフォはどうしましょうか?
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNGどうせ、そやつのプログラムはぬるぽだろう。ほっとく。
0835デフォルトの名無しさん
NGNG>こういう使い方をしないのであれば、そもそも
>継承ではなくコンポジションにしいた方が良いと思われ
んなこたぁない。
少なくとも世の中に、んなこたぁない例がゴロゴロしてる。
0836デフォルトの名無しさん
NGNGpolymorphicに使いたいときはそうだ。
だが実装の手間を減らすために仮想関数を持たないクラスを
public継承することもある。
例えばboost::iterator_facadeとか。
0837デフォルトの名無しさん
NGNGEffective C++ 14項 「基底クラスには仮想デストラクタを持たせよう」を参照せよ。
これは割と常識に近いものだと思っていたが……
0838デフォルトの名無しさん
NGNGvoid operator delete(void*)
{
/* no operation */
}
0839デフォルトの名無しさん
NGNGそっくり返す。
見出しだけじゃなく、本文も熟読してくれよ。
0840デフォルトの名無しさん
NGNG追加のデストラクタがいらないので、(ほんとうにそれだけなら)セーフ。
0841デフォルトの名無しさん
NGNGあれはクラステンプレートだから話が違う。しかも第一引数に派生クラス型を渡し、
常に
1 その派生型に static_cast<> する形でアクセスする
2 あるいはイテレータが指している要素にアクセスする
いずれかを強制する形になっており、基底クラスにアップキャストして使うことを
想定してない。
反例として挙げるには、むしろ例外的なケースだと思うぞ。
0842デフォルトの名無しさん
NGNG「例外的なケースだと思う」で却下されるんじゃぁ、どんな例だしても無駄だろうな。
0843デフォルトの名無しさん
NGNG「例外的なケースだと思う」で却下されるんじゃぁ、どんな例だしても無駄だろうな。
0844デフォルトの名無しさん
NGNG何があってもデストラクタは仮想にしろ、って主張するヤツもバカだが、
「RTTI 使えない→基底クラスとして使うクラスのデストラクタは仮想にする
のが原則」って話をしてるときに、文脈無視してクラステンプレートの
話持ってくるのもアレですぜ。
0845デフォルトの名無しさん
NGNG繰り返さなくていいよ。
だから間違ってるんだってば。
841はなぜ例外に当たるのかちゃんと説明しているだろう。
理由も言わずに「誰かが言っていたから(boostがそうしてるから)」
だけじゃあ、話は進展しないって。
0846822
NGNG>>823
> まさかお前は基底クラスとして使うクラスのデストラクタは全部仮想にしてるのか
Yes.私の意見は831と全く同じ.
836の「実装の手間を減らすために仮想関数を持たないクラスをpublic継承する」
ってのは気持は分かるけど,そういう時はpriavte継承かprotected継承にして,
usingを使って使用するメンバ関数を公開する方が,まだ良いと思う.
>>826
> デストラクタがvirtualじゃないと困るのはポリモフったポインタをdeleteするときだったはず
「ポリモフったポインタをdeleteしない」を自分と関わりのある全てのプログラマに守るよう徹底して廻るか,
そもそも「public継承はポリモフれて,基底のポインタからdeleteできる」のだから
デストラクタは常にvirtualにしておくか,の選択かと思うけど,私は後者だな.
1. vtableによる速度低下,サイズの増大が気になる.
2. usingするのさえ面倒臭いほどメンバ関数が多い.
3. 作ったクラスは自分だけで使うし,設計方針を2度と忘れない自信がある.
これらの条件が揃ったらデストラクタを仮想にしないと決断するかもしれない.
0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNG> 「ポリモフったポインタをdeleteしない」を自分と関わりのある全てのプログラマに守るよう徹底して廻るか,
選択肢としては、デストラクタを protected にするってのもアリ。いちおう。
0849デフォルトの名無しさん
NGNGデストラクタ virtual
デストラクタ protected
このどちらかをしておくのが派生クラス作成者がヘボな場合でも
問題が起こりにくいクラスだろう。
ポイントは基底クラス作成者と派生クラス作成者の実力差を
カバーする必要があるか否かだと思う。ただ、俺は自分の間抜けさを
認識しているのでどちらかの手法を取る。
0850822
NGNG問題.
「デストラクタを protected にする」ことで以下の(3),(4)を禁止したい.
デストラクタを protected にするのはどの階層か?
なお,(1),(2)は触らぬこと.
class GrandParent {};
class Parent: public GrandParent {};
class Child: public Parent {};
int main()
{
GrandParent gp; // <- (1)
Parent p; // <- (2)
Parent *pp (new Child ());
delete pp; // <- (3)
GrandParent *gpp (new Child ());
delete gpp; // <- (4)
return 0;
}
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
NGNGもちろん何事にも例外はあるが、一部の例外を持ち出して
「あらゆる場合」と揚げ足をでっち上げた上で、その揚げ足取りを取ってるんだもんな。
反発されて当然だっての。
0854デフォルトの名無しさん
NGNG#include <****.h>
に誰もつっこまないのはなぜ?
0855822
NGNG>何でこう「あらゆる場合にこの方法をとるべし」と捕らえる人が多いのかねぇ……
何でだろう? コードの再利用性を追求しているうちに,こうなっちゃたような気がする.
この場合はこう,あの場合はこう,っていちいち例外を考えるよりは....
0856849!=848
NGNGまぁ落ち着け。>>848はそういう方法もあると提示しただけだろう。
君自身も>>850みたいな何でも来いクラスのGrandParentなんか
作らないタイプのプログラマなんでしょ?多分。
インターフェース、ポリシー、実装と分けて考えるのが吉。
0858デフォルトの名無しさん
NGNG「その『役不足』の用法は間違っている」っていっつも書き込んでるの?
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNGこの考えに沿った例と悪い例を提示していただけるとありがたいです。
0862デフォルトの名無しさん
NGNG例えばこんな風にやるといいと自分は理解している。
//ポリシー
struct NoisyShout{
protected:
void shout(){std::cout << "いていていて!" << std::endl;}
~NoisyShout(){}
};
struct DefaultShout{
protected:
void shout(){std::cout << "いてっ" << std::endl;}
~DefaultShout(){}
};
0863デフォルトの名無しさん
NGNG続き
//インターフェース
struct Target{
virtual void hit() = 0;
virtual ~Target(){}
};
struct NullInterface{
protected:
~NullInterface(){}
};
0864デフォルトの名無しさん
NGNG続き
//ポリシー、インターフェースを結合する実装
template<typename S, typename I>
class Man : public S, public I{
public:
void hit(){
std::cout << "なぐられたーっ" << std::endl;
S::shout();
}
//他にもいろいろ実装があるだろう...
~Man(){
std::cout << "Man::destructed" << std::endl;
}
};
0865デフォルトの名無しさん
NGNG続き
使い方1。
std::cout << "# 一人ずつ殴るだけ" << std::endl;
Man<NoisyShout, NullInterface> young;
Man<DefaultShout, NullInterface> middle;
young.hit();
middle.hit();
0866デフォルトの名無しさん
NGNG続き
使い方2。
std::cout << "# まとめてぶん殴る" << std::endl;
Target* targets[2];
targets[0] = new Man<NoisyShout, Target>;
targets[1] = new Man<DefaultShout, Target>;
for(Target** i = targets; i < targets + 2; ++i)
{(*i)->hit();}
for(Target** i = targets; i < targets + 2; ++i)
{delete (*i);}
0867849
NGNGここまで俺の書き込み。
インターフェースまでポリシーっぽく扱ったのはふさわしくないかもしれない。
実際のアプリ開発ではポリモーフィズムされるかされないか大抵決められる
はずなので、あそこまでやることは稀だと思う。
(凄く効率と汎用性を求めるクラスならやっても良いのではないだろうか。)
書いてしまったけど、叩かれないかビクビクしてる臆病者の俺…。
>>822
さっきは余計なことまで勢いで書いてしまった。
俺が勝手に期待しただけだ。悪かった。
0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNG{
virtual ~A(){};
virtual void release()=0;
};
struct B: A
{
virtual ~B()
{
cout << "~B" << endl;
release();
}
virtual void release()
{
cout << "B::release" << endl;
}
};
struct C: B
{
virtual void release()
{
cout << "C::release" << endl;
}
};
int main()
{
B* p = new C;
p->release();
delete p;
return 0;
}
C::releaseが呼ばれてほしいーーーーーーーー
0870869
NGNG0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNGC::~C(){ release();}
0874デフォルトの名無しさん
NGNG0875デフォルトの名無しさん
NGNGあほ?それをしなきゃならんのがダサいんだろ
0876デフォルトの名無しさん
NGNGだったらC::release()を呼び出したくない場合はどうするん?
0877デフォルトの名無しさん
NGNGけいしょうしない
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNGうちのところではだれも導入してないです。
boostのライセンスみると商用利用でも全く問題ないのに。
顧客からboost使うなといわれてるわけでもない。
boostを使うとまずい場面ってあるんでしょうか?
本も出たことだし、利用を呼びかけてみようと思ってるんですが。
http://www.kmonos.net/pub/BoostBook/
0880デフォルトの名無しさん
NGNGboostのコードの品質管理も自社の基準で行わないといけないから
結局位置から作る方が手間が掛からないってのが大きいんじゃ?
0881デフォルトの名無しさん
NGNG問題は商用が *禁止* されているかどうかじゃない
もちろん禁止されていれば使わないが
0882デフォルトの名無しさん
NGNGその本、LAOXの書籍売り場の目立つところにディスプレイされてるね。
業者さんでつか?それとも著者?(プ
0883デフォルトの名無しさん
NGNGその理屈からいくと、当然std::hogehogeなコードも全部作っているんですね?
boostはそこらの馬の骨が作ったものじゃないですよ。
0884デフォルトの名無しさん
NGNGなきゃ書けないってものでもないし、元々使い方を知らなきゃ使う気にもならないでしょう。
導入してないところは、それだけのところでは?
0885デフォルトの名無しさん
NGNG使っていいものと、いけないもの
俺もなかなか憶えられなくて
0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNGそうですよね。boostは信頼のできるライブラリです。
ただboostのバグを見つけた場合って勝手に直していいんでしょうか?
0888デフォルトの名無しさん
NGNG0889デフォルトの名無しさん
NGNGsourceforgeか開発MLに投げれ。
0890デフォルトの名無しさん
NGNGなぜ聞く? 勝手に直せよ。改造したっていいんだぞ?
本当にバグを直したなら。コミュニティかここで発表すれば喜ばれるし、場合によっては神と呼ばれるかも知れないぞ。
0891デフォルトの名無しさん
NGNGスマートポインタや lambda あたりは普通に使ってます。
>>887
良いんじゃないの? ただ、開発元に連絡しとくと、次のバージョンで修正が
取り入れられて(自分も含めて)幸せになれると思うけど。
0892戦争はじまります
NGNGhttp://news13.2ch.net/test/read.cgi/newsplus/1085826910/
【中国】(資源独占の恐れ!) 日中境界海域に施設(日本は調査予定なし)★2 [05/28]
http://news17.2ch.net/test/read.cgi/news4plus/1085792271/
中国が尖閣諸島周辺の国境付近で資源採掘を開始ししだしました
ガス採掘施設となってますが、それだけではなく
ここにはなんと、 「世界2位の規模を誇る原油」 が眠っています
そしてほとんど日本の領土側に眠っている資源が
ジュースのストローで吸い上げられるように中国に持っていかれます。
こっから採掘吸い上げ全部中国へ
‖
‖|
■|■■■■■■■■石油■■■■■■■■■■
■|■■■■■■■■■■■■■■■■■■■■
中国領土← | →日本領土
これがあれば日本は強力な資源大国になれます。
今の不況や失業など一気に吹っ飛ば、安全なバブルが到来します
この暴挙をみすみす許している日本政府と外務省、
国家の一大事であるにもかかわらず一切放送しないマスコミ
今声を上げないと、この国は終わるかもしれません。
0893デフォルトの名無しさん
NGNG社内のプログラマが作るコードがboostと比較して糞コードである事の方が多いだろうけど、
品質管理を通ってしまえば社内基準は通過しているので、要件を満たしているコードと言える
boostは未来永劫要求を満たしつづけてくれるかと言えばそうではないだろ?
新規ならばboostの特定バージョンを検査して、それを導入すればいいだろうけど
普通は品質管理基準をクリアした汎用部品の蓄積があるんだから、
あえて無駄なコストをかけてまで導入する理由が無いじゃないか。
あと、std::hogehogeなんかは商用ライブラリ導入時に検査を行っているか、
メーカーと保守契約を結んでいる場合がほとんどだろ。
0894デフォルトの名無しさん
NGNGはいはい、ほとんどねぇ。よかったですね。あなたが、そのほとんどに含まれる仕事をしていることはわかりました。
はい、では次の人、どうぞ。
0895デフォルトの名無しさん
NGNGboostがそんなショボイライブラリの訳ねーだろ。
ちゃんと計算されてる。角度とか。
0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNGgccに標準で入っている標準ライブラリをそのまま使って作った
ソフトをろくにコード検証もせずに、他所様に垂れ流してるんですか?
0899デフォルトの名無しさん
NGNGtemplateスレと一緒になったんじゃなかったっけ?
0901デフォルトの名無しさん
NGNGあほはお前だろ。マンドクセ。
0902デフォルトの名無しさん
NGNGなんたらエンタープライズとboostを一緒にされても・・・
gccに標準で入っている標準ライブラリとかstd::hogehogeに
対する検証ってどの程度で行ってるんでしょうか。
全検査できる体制があるなら羨ましい限りです。
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNGその前に、!があるんだけど、これは戻り値の否定でいいんだよね?
こんなの↓
if(!::method(,,,)){
}
0907デフォルトの名無しさん
NGNGオーバーロードしていなければ。
0908デフォルトの名無しさん
NGNGいい。
0909デフォルトの名無しさん
NGNG釣りか?
operator ! でサフェースアナライズする気だろ
その手に乗るかってんだ
0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNGわかんなきゃ先ずぐぐれ
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=%E3%82%B5%E3%83%BC%E3%83%95%E3%82%A7%E3%82%B9%E3%82%A2%E3%83%8A%E3%83%A9%E3%82%A4%E3%82%BA
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=%22surface+analyze%22&lr=
・・・ヒットしねぇ。つかsurface analysisだろ?
0913デフォルトの名無しさん
NGNG0914デフォルトの名無しさん
NGNG今は gcc + STLport の仕事してるけど、さすがに gcc のソースコードや
newlib, STLport の詳細までは追ってないなぁ。実際に使ってみて問題が
出なければ、まぁ良いやって感じ。
別にバグがあっても人死にが出るタイプのソフトじゃないんで、そこにコスト
掛けるなら、顧客の要求に素早く対応する方にコスト掛けた方が良いっつー
判断。
0915デフォルトの名無しさん
NGNGsurface analysisって何?
0916デフォルトの名無しさん
NGNGその場合、複数のメンバ関数に一つずつインターフェースを
指定すると、templateの数が膨大になるので非現実的ですよね?
旨くやる方法ってあるのでしょうか?教科書的には、NoisyShout、DefaultShout
を基底クラスから導出すると思うのですけども。スレの流れはちと忘れて。
0917デフォルトの名無しさん
NGNG表面分析
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNGそもそもポリシーは互いに関連する複数のメンバ関数を提供するのが普通だし、
むしろ「インターフェイス、ポリシーを分けて考えろ」ってのは
インターフェイスがポリシーごとの差異を細かく反映していくつも用意されることに異を唱えてるんだと俺は解釈したが。
0920デフォルトの名無しさん
NGNG「operator ! で表面分析する」ってどういう意味さ?
0921デフォルトの名無しさん
NGNGなかなかピンと来ないのですが、
>>インターフェイスがポリシーごとの差異を細かく反映していくつも用意されることに異を唱えてる
の具体的な例を示してもらえませんか。
インターフェイスがポリシーの差異を細かく反映していくつも用意されている例と、
インターーフェイスとポリシーと実装を分離してうまく解決している例と。
例を見ないと学習がスムーズに進まない性分なのでお願いします。
0922デフォルトの名無しさん
NGNGすまんが、俺はちょっと例までは出せない。
というか
>インターフェイスがポリシーごとの差異を細かく反映していくつも用意される
ってのは君が心配しているような(想像上の)場合を述べたもので、
実際にはポリシーに当たる部分を分離して一つのクラスを作っているなら
その段階で全体のインターフェイスとの関連性は自然になくなるはずなんだよね。
実際にあるみたいな言い方したせいで誤解させてしまったようだけど。
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG/* 悪い例 */
struct VariableNoisyShout{
protected:
void shout(int noisiness){
while(--noisiness >= 0) std::cout << "いて";
std::cout << "!" << std::endl;
}
~NoisyShout(){}
};
/* 良い例 */
struct VariableNoisyShout
{
set_noisiness(int n){nn = n;}
protected:
NoisyShout():nn(3){}
void shout(){
int noisiness = nn;
while(--noisiness >= 0) std::cout << "いて";
std::cout << "!" << std::endl;
}
~NoisyShout(){}
private:
int nn;
};
0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNGstruct base{protected:~base(){}};
struct derived : public base{};
base *p = new derived;
delete p; /* コンパイルエラー */
0928デフォルトの名無しさん
NGNG良い例と以下はあんまり変わらないと思いますけど、
この例にポリシーってあるんですか?
struct VariableNoisyShout{
protected:
void shout(int noisiness = 3){
while(--noisiness >= 0) std::cout << "いて";
std::cout << "!" << std::endl;
}
~NoisyShout(){}
};
0929デフォルトの名無しさん
NGNGあげく、「ポリシーってあるんですか?」ときた。
話している両者で定義が違っているような気がするんだが、
ちゃんと噛みあった会話になってるの?
漏れとしては、
「インターフェース」
広い意味では、提供者と使用者の間での約束事のこと。
たぶん今の会話の中では、純粋仮想関数のみを持つクラス型のこと。
「ポリシー」
テンプレート引数として動作をカスタマイズできるように、
必要なメンバ(要求)が定義されているクラス型のこと。
広義のインターフェースに含まれる。
だと思ってるんだけど、あってるかな?
0930デフォルトの名無しさん
NGNG理解したいと思ったしだいです。
0931925
NGNG忘れてくれ。
0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNG「日本語」と「ソース」が逆だったら賛成だが・・・
現状、あんたがおかしい
0934デフォルトの名無しさん
NGNG概念ではなく実装レベルで見ると
インターフェース
純粋仮想関数と仮想デストラクタだけを含むクラス
ポリシー
typedef と定数定義だけを含むクラス
かね。形だけ見ても、それをどう有効活用するか理解してないと
意味不明だから、あまり良い説明じゃないんだが。
0935デフォルトの名無しさん
NGNGうそくせーなんかうそくせー
0937デフォルトの名無しさん
NGNGどうした、なんか発作でも起こしたのか?
0938デフォルトの名無しさん
NGNG0939849
NGNG俺の書いたソースで混乱させてしまったようですまない。
言葉が足らなかったのでとりあえず>>862-866にこめた
気持ちを書きます。ちょっと酔ってるのでわかりにくいかもしれんが
なんとなくこのまま放っておけないので。
ポリシーはModernC++Designで定義されている用語です。
俺がだらだら説明するなんて無駄だから知りたい方は
読まれると良いでしょう。
ポリシーもインターフェースも複数メンバがあっていいです。
どちらも意味的にわかりやすい単位でまとめていいでしょう。
0940849
NGNG件の話の流れから、「デストラクタvirtual」と「デストラクタprotected」の
使い分けのような部分を示したかったのです。
俺の理想としてはインターフェースから導出→(当然)デストラクタvirtual
実装の再利用及び、アプリケーションの特性を示すクラス→デストラクタprotected
の気持ちを持っています。※基本APIはここでは考えません。
で、インターフェースから導出するのは
なるべく動的にクラスが扱われる場合
(一緒の配列に格納したりStateパターンを使ったりするような場合)
にするべきだということです。使用例2において配列で示しました。
動的でなければほとんどテンプレートでコンパイル時に静的解決できるだろうと
考えています。動的に使用しないなら使用例1で十分(インターフェース不要)
ということです。
こうするとインターフェースばかり(仮想関数ばかり)で
効率が下がってしまうという問題を回避できるのではないかという意味でした。
デストラクタにvirtualをつけるのを嫌がるのは効率を考えるからだ、
というふうに受け止めているからです。
0941849
NGNGまた、もし一つのメンバ関数を一つのポリシーに対応させて作っても
コンパイル時に最適化されて一つのクラスになるし、
ポリシーに分けた部分を継承で実装するならクラス数も同様に
増えると思うので、これに関してデメリットは無いだろうと思います。
ポリシーは似て非なるクラスを作りたい時にその「似て非なる」を
他になるべく影響を与えずに切り出す手段だと思っています。
えらい長文すみません。ちゃんと伝わるといいんですが。
0942デフォルトの名無しさん
NGNG...には何を指定すればいいでしょうか?
int[10]としたらおこられました。
0943デフォルトの名無しさん
NGNG0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNGint (*hoge)[10] = new int[n][10];
0946デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNG>最適化されて
これ言い出したらOOP崩壊
class sine
{
private:
int afo;
public:
void set_afo(int gaikichi);
};
void inline sine::set_afo(int gaikichi)
{
afo = gaikichi;
}
main()
{
sine arasi;
arasi.set_afo(nurupo);
}
0948デフォルトの名無しさん
NGNG0949デフォルトの名無しさん
NGNGそもそもここが分かってないような気がするので。
とりあえず、VariableNoisyShout とか自体がポリシーでしょ?
>862 からの流れです。
で、>849 と >925 は主張が違ってるような気がします。
>849 は既に本人が説明されてるんでパス。
で、>925 が言いたかったのは、悪い例ではポリシーが違うことによって shout() の呼び出し方が
変わってしまうため >864 みたいに単純に hit() が作れなくなり、結果としてインタフェースまで
影響が波及しかねず(hit()自体を差し替える必要がありそう)だめぽってことでしょう。
良い例の場合は、>863-864 と組み合わせが可能ですし、何回 Shout するかも制御可能です。
まとめると「ポリシーは問題を切り分けてちゃんと作れ」になってしまいそうな気がしますが(w
なお >928 のコードでは結局何回 Shout するかを制御できないですね(実装を使うユーザが)。
0950デフォルトの名無しさん
NGNG>>849 氏の説明は、class DerivedA1 : public BaseA {}、class DerivedA2 : public BaseA {}
では、DerivedA1、DerivedA2 を BaseA* と共にしない場合でもvirtualが入ってくるが、
>>862-866の例では、BaseA*的に扱うか否かを使用者が決める(ポリシー)だと受け取りました。
>>928 は完全に私の勘違いで申し訳ありません。
0951デフォルトの名無しさん
NGNGは、ナニが言いたいの?意味不明なんだけど
0952デフォルトの名無しさん
NGNGvbptrが指している仮想基本クラステーブルについてなんですが
テーブルの最初のエントリーがクラスGの場合 GdGvptrG なのですが
ここには何が入ってるんですか? GdGvptrC さえあればよさそうに見えるのですが
各仮想基本クラスへのオフセット値以外に何か必要なのでしょうか
0953849
NGNG>>925の解説ありがとう。
実は俺、昨日読んだ時点では文脈がわかってなかったんだが、
俺のソースから始まったことだからとりあえず返信したのでした。
ちなみに>>949のような話なら俺はまず下記いずれかで解決を
試みると思います。どちらを取るかはアプリ次第ですね。
行数足らないのでデストラクタとprotected宣言は補完してください。
//実装側に変更を要求するが、柔軟。
template<typename S>struct IgnoreCountShoutAdapter{
void shout(int count){S::shout();}//引数ありshoutを引数なしshoutへ
};
//型爆発が起こる可能性あり。
template<int C>struct StaticCountShout{
void shout(){
int noisiness = C;
while(--noisiness >= 0) std::cout << "いて";
std::cout << "!" << std::endl;
}
};
0954849
NGNGその通り。同じ意識を共有できたと思う。
説明が足りなくてすまなかった。
>>919
ポリシーは実装を作るためのパーツ感覚なので
一般的にインターフェースより粒度は細かいだろうと思う。
件のサンプルではそういう意図ではなかったんだけどね。
多分この辺を感じ取ってくれてフォロー入れてくれたんだよな。
感謝。
0955デフォルトの名無しさん
NGNGコントロールのボタンを押した時、Form_Closeingをして
アプリケーションを終了したいのだけど。
0956デフォルトの名無しさん
NGNG0957C++初心者
NGNGとある本で実行時の動作について
1.全ての割り込みを受け付けないようにする
2.ROM から RAM に初期化したデータを全てコピー
3.初期化されていないデータ領域を 0 で初期化
4.スタックを確保して初期化
5.プロセッサのスタックポインタを初期化
6.ヒープ領域を作成して初期化
7.全ての広域変数のためのコンストラクタとイニシャライザを実行 (C++)
8.割り込みを可能にする
9.main を呼ぶ
とあったんですが、
"全ての広域変数のためのコンストラクタとイニシャライザを実行"
とはどういう意味でしょうか?
広域変数の意味がわかりません。クラスのヘッダ内で宣言している変数のことでしょうか?
そのためにコンストラクタとイニシャライザを実行ということは、
そのクラスが使われる使われないにかかわらず、
実行時にヘッダに宣言してある変数がRAM上(何領域?)に取られるということですか?
0958デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNG0961C++初心者
NGNGそうするとコンストラクタが実行されることの意味がわかりません
イニシャライザって
class A {
A() : a(0) {
とかのa(0)のことかと思ってました
0962デフォルトの名無しさん
NGNGint m;
abc() : m(0) { hoge(); }
};
abc a;
main(...) { ... };
なんてのがあったとき、main が呼ばれる前に a のコンストラクタが動くよ、ってこと>>961
0963C++初心者
NGNGそれ以外のクラスに関しては、実行時に呼ばれた際に初めてコンストラクタが走ってメモリが獲得されるという理解でいいんですよね?
その際の呼び出し方によって、どこにメモリが取られるのかが決まると
ありがとうございました
0964デフォルトの名無しさん
NGNGポリシーって、A< Policy > a; の様に使ってAの内部動作を決める事しか
目を向けていませんでした。件のコードはとても新鮮でした。
struct Base {
virtual void func1();
virtual void func2();
];
struct DerivedA : public Base {
void func1() { ... }
void func2() {} // place holder
};
struct DerivedB : public Base {
void func1() {} // place holder
void func2() { ... }
};
の様に無理に共通の基底クラスを作らなくても済みますね。
template< typename Policy > struct A;
struct Policy1;
struct Policy2;
struct Policy12 : public Policy1, public Policy2;
A< Policy12 > a
とやると複数のポリシーを適用できるかなぁと夢想中・・・
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNGまずは入門書買え。そして読め。話はそれからだ。
0967デフォルトの名無しさん
NGNG発想の転換でintで定義して入力を受けるときだけcharに変換する
0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGエライね(w
初心者の言わんとすることを咀嚼した上で回答している。
自分だったら、ついつい>>967のような返答してしまうだろうなぁ。
0971デフォルトの名無しさん
NGNGあーっ、うざい。初心者スレか宿題スレにとっとと逝け
って回答しちゃうな。みんな親切だな。
0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNG(int)(i - '0')
0974デフォルトの名無しさん
NGNGi - '0' ってやった時点で既に整数への格上げを受けているよ。まず i が
整数への格上げを受け、次に '0' も整数への格上げを受けるので、
結局int - intの計算をして、結果もint。キャストは不要。
0975デフォルトの名無しさん
NGNGなんとなく? あるいは自分なりの基準を持ってますか?
0976デフォルトの名無しさん
NGNG・メンバが全てpublic
・operator以外の関数がない
・仮想関数テーブルがない
場合はstructだな。まぁ多少例外もあるが。
友人はoperatorなども含め、関数が入りそうな時点でclassに
してるんで、結構「俺基準」がありそうな気がする。
0977デフォルトの名無しさん
NGNGかく言う俺もそれ。
0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG別に一生懸命使い分けているわけでもないのだが。
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG自分で作る場合は文句なしにclass
他の人のを借りた場合のみstructが存在する
0987985
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNGメンバ関数とかoperatorみたいに++なことを書くときclass
ただしインターフェースはstruct
てなことやってるけど、本音ではclassいらん
俺的にはpublic->protected->privateの順で書くべきだと思っているし
template関係のぐちゃが痛くて見てらんねー
0992デフォルトの名無しさん
NGNGpublic書くの面倒くさいとかだったら悪だね。
0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNGその分、クラスを使わないでやる場合に比べると遅い。
0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。