トップページ⇒tech
568コメント175KB

C++相談室 part22

■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)vNGNG
C++に関する質問はこちらへどうぞ。
ただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。

過去スレ、関連スレ、関連リンクなどはこちら>>2-7
0002v(^・^)vNGNG
■過去スレ■
 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://pc2.2ch.net/tech/kako/1041/10413/1041328679.html
 15 http://pc2.2ch.net/tech/kako/1043/10436/1043605481.html
 16 http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html
 17 http://pc2.2ch.net/tech/kako/1047/10475/1047560042.html
 18 http://pc2.2ch.net/tech/kako/1050/10501/1050177746.html
 19 http://pc2.2ch.net/tech/kako/1052/10526/1052625846.html
 20 http://pc2.2ch.net/tech/kako/1055/10551/1055162298.html
 21 http://pc2.2ch.net/test/read.cgi/tech/1057580107/
0003v(^・^)vNGNG
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ Final Draft International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
[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/ (日本語)
0004v(^・^)vNGNG
■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/
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/
0005v(^・^)vNGNG
■Compiler■
[GCC]
 http://gcc.gnu.org/
 (Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
 http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
 http://www.microsoft.com/downloads/details.aspx?FamilyId=9B3A2CA6-3647-4070-9F41-A333C6B9181D&displaylang=ja
[DigitalMars]
 http://www.digitalmars.com/
[OpenWatcom]
 http://www.openwatcom.org/
[Comeau]
 http://www.comeaucomputing.com/
[Intel]
 http://www.intel.com/software/products/compilers/
[Metrowerks]
 http://www.metrowerks.com/mw/default.htm
0006デフォルトの名無しさんNGNG
__ノ              |    _
| |                    |  ノ\__ヽ
ヽ二二 ヽ -―人 、       |   \ノ◎)
_____/ /'(__)ヽ____| 
   /  / _(__)∩      \
   |  |/ ( ・∀・ )ノ RUBY!  \
   .\ヽ、∠___ノ\\        \
     .\\::::::::::::::::: \\        \
0007v(^・^)vNGNG
■Libraries■
[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
0008v(^・^)vNGNG
■関連スレ■
[【C++】template 統合スレ -- STL/Boost/Loki, etc.]
 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
[【C++】Boost使い集まれ!]
 http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50
[C/C++の宿題やらせてください。]
 http://pc2.2ch.net/test/read.cgi/tech/1058283913/l50
[初心者にVisual C++を教えるスレ]
 http://pc2.2ch.net/test/read.cgi/tech/1056280510/l50
[VisualC++(MFC限定)相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1056584836/l50
[ATL 相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
[C/C++でのWindowsPrograming議論スレ(質問お断り)]
 http://pc2.2ch.net/test/read.cgi/tech/1049790146/l50
[COMの世界を斬る!]
 http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
[managed C++ やろうぜ!!]
 http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50
[C++Builder相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1054280736/l50
[タダで使えるBorland C++]
 http://pc2.2ch.net/test/read.cgi/tech/1054390397/l50
[Code of the Nerds" Digital Mars C/C++]
 http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[GCCについて]
 http://pc2.2ch.net/test/read.cgi/tech/1046179115/l50
[OpenWatcom C++]
 http://pc2.2ch.net/test/read.cgi/tech/1033433728/l50
[タダで最強!フリーC/C++コンパイラ]
 http://pc2.2ch.net/test/read.cgi/tech/1035882599/l50
00091NGNG
なんかここって5連続以上で投稿するとはねられるのか。知らなかった。。。
0010デフォルトの名無しさんNGNG
これ見てください。
http://jbbs.shitaraba.com/game/bbs/read.cgi?BBS=1314&KEY=1060147851&LAST=100
0011デフォルトの名無しさんNGNG
嫌です
0012v(^・^)vNGNG
■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
part1 http://pc2.2ch.net/tech/kako/1037/10377/1037795348.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50

STLスレッド
part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html
0013v(^・^)vNGNG
■関連スレ(環境依存の話題)■
[GCC]
GCCについて
part1 http://pc2.2ch.net/tech/kako/1007/10077/1007731543.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1046179115/l50
祝・GCC 3.0リリース http://pc.2ch.net/test/read.cgi/unix/992942337/l50
[Digital Mars]
Code of the Nerds" Digital Mars C/C++
http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[Borland]
C++Builder相談室
part1 http://piza2.2ch.net/tech/kako/969/969458279.html
part2 http://pc.2ch.net/tech/kako/997/997074601.html
part3 http://pc3.2ch.net/tech/kako/1016/10160/1016065855.html
part4 http://pc2.2ch.net/tech/kako/1035/10355/1035596146.html
part5 http://pc2.2ch.net/tech/kako/1045/10455/1045542179.html
part6 http://pc2.2ch.net/test/read.cgi/tech/1054280736/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/tech/kako/1030/10304/1030493157.html
[VisualC++]
VisualC++相談室
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc2.2ch.net/tech/kako/1036/10368/1036897197.html
0014v(^・^)vNGNG
初心者にVisual C++を教えるスレ
part1 http://pc3.2ch.net/tech/kako/1023/10235/1023530449.html
part2 http://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
part3 http://pc2.2ch.net/tech/kako/1038/10381/1038160750.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1044196393/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1048698321/l50


VisualC++(MFC限定)相談室 MFC7.dll
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
COM の世界を斬る!
http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
ATL 相談室
http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
managed C++ やろうぜ!!
http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50
0015v(^・^)vNGNG
 ↑この名前は決まり事ですか?
0016デフォルトの名無しさんNGNG
CとC++ってもう終わっていまはC#なんじゃないんですか?
0017デフォルトの名無しさんNGNG
>>16
違う。今はJava。
0018デフォルトの名無しさんNGNG
std::list < std::string >

で特定の文字列を含む要素を削除したいのですが
どのようにすればいいのでしょうか?
0019デフォルトの名無しさんNGNG
remove_if
00201NGNG
>>12-15
テンプレ長いので整頓して>>2-8にしたんだけど、ダメすか?

>>18
struct contains {
 const string& key;
 contains( const string& key ) : key(key) {}
 bool operator()( const string& str ) const { return str.find(key) != string::npos; }
};
lst.erase( remove_if( lst.begin(), lst.end(), containe("hoge") ), lst.end() );
0021デフォルトの名無しさんNGNG
>struct contains {
> const string& key;
> contains( const string& key ) : key(key) {}
> bool operator()( const string& str ) const { return str.find(key) != string::npos; }
>};

前スレによるとこの時コンストラクタに渡されるテンポラリstring("hoge")の
生存期間はコンストラクタを抜けるまでという事になっているから
これでは駄目なのではないのか?そうだとすれば
const string key;と書くべきという事になるのだが…
002220NGNG
>>21
んにゃ。"full expression containing the call" の終わりまで有効です。
前スレ829 (827ではなく) 参照。
0023デフォルトの名無しさんNGNG
>>22
829は関数呼び出しの参照パラメータに結合した場合で
827はコンストラクタの初期化リストに結合した場合だから
827が適用されるように見えるのだが?
002418NGNG
試して見ます。ありがとうございます。
0025デフォルトの名無しさんNGNG
>>23
コンストラクタの初期化リスト( ctor-initializer / 12.6.2.1 )とは
 constructor()
  : parent_class( ... ), member( ... ) ← これ
のことであって
 new constructor( ... ) ← これ
のことではない。こっちはコンストラクタ関数呼び出しの際の参照パラメータへのbind。
0026デフォルトの名無しさんNGNG
>コンストラクタの初期化リスト( ctor-initializer / 12.6.2.1 )とは
それはもちろん承知だが、つまり
contains() : key(string("hoge")) {}
は駄目という事か。なるほど
具体例がないからよく分からなかった。
002718NGNG
うまくいきました。ありがとうございました。
0028デフォルトの名無しさんNGNG
>>27
こっちもためしてみな。
lst.remove_if( contains( "hoge" ) );
0029デフォルトの名無しさんNGNG
>>28
それだ!
0030デフォルトの名無しさんNGNG
ヘッダー1をインクルードしたヘッダー2を
インクルードするとヘッダー1が受け継がれてしまうのですが、
これを受け継ぎたくないのです。

ヘッダーのみでインラインクラス作る時にこの制約が生じると思うのです。
cppでインクルードしたいヘッダーをインクルードすればこれを回避できるのですが、
2つのファイルに分離してしまいます。
解決策はあるのでしょうか?

0031デフォルトの名無しさんNGNG
templateがないなら分割コンパイルすればいいが
あるなら(今のところ)あきらめるしかない。
あるいは独自のネームスペースに閉じ込めてもいいが
マクロはどうにもならない。
0032C++ユーザーはSCOに金を払え!NGNG
プログラミング言語のC++も当社が保有しており、他社にライセン
スしています。当社はC++から多くのロイヤルティ収入を得ていま
す。カルデラの知的資本の奥の深さには驚かされました。

http://www.zdnet.co.jp/enterprise/0208/20/nw_01.html
0033デフォルトの名無しさんNGNG
>>30
たとえばヘッダ2で必要としている(ヘッダ1内の)宣言が型名で、
ヘッダ2の中ではそれへのポインタとして利用されているだけなら、
ヘッダ2の中でその型名だけ(それが型名であると)宣言してやれば、
ヘッダ2がヘッダ1をインクルードする必要はなくなる。

もしヘッダ2がインクルードされる前にヘッダ1がインクルードされていれば
中身のあるその宣言を使えばいいし、逆にインクルードされていなければ、
ヘッダ2の中で自前で必要最低限の宣言だけしてやれば良い。

...しかしたとえそれが型名であっても、ヘッダ1でテンプレートが使われていたり、
ヘッダ2でポインタや参照以外の使われ方をしていたりすると、
>>31 のいうとおり、どうしようもないだろうな。

ってゆーか漏れはそもそも、そういう構成自体がどうかと思うが。
0034デフォルトの名無しさんNGNG
>>1
乙!!
0035名無しさん@EmacsNGNG
ちょいと質問です。変な状況かもしれないのだけど。

C++で書かれた二つのライブラリを組合わせて一つのプログラムを
作りたいのですが、それぞれに別のメモリ管理ポリシーをもってます。
つまりそれぞれで operator new() を別のものにしてやりたいのですが、
うまい方法はないでしょうか?
それぞれのライブラリはもう書きあがっているので、できるだけ
ライブラリのコード自体はいじらずに、ヘッダをちょこっといじるだけで
すむとうれしいのですが..
0036デフォルトの名無しさんNGNG
( ´_¬`)プ──ン
0037デフォルトの名無しさんNGNG
クラスライブラリなら、メモリアロケーションをポリシー化して、
継承させればいいんでないか?
0038デフォルトの名無しさんNGNG
前スレからきますた。
C++のRTTIについて質問なのですが、これってC++は
どうやって実現しているのですか?
文字列で各インスタンスに埋め込んでいるのでしょうか?
0039デフォルトの名無しさんNGNG
>>38
普通は、仮想関数テーブルに型情報を置いてある。
仮想関数テーブルがどこにあるかは前スレを見れ。
004038NGNG
>>39
レスありがとうございます。
仮想関数テーブルの質問も私ですた。(苦笑
ってことは仮想関数をもたないクラスのインスタンスも
vptrを持っているということですか?
0041デフォルトの名無しさんNGNG
>>40
RTTIは仮想関数画ナイトダメ
004238NGNG
>>41
そうなんですか?
仮想関数を持たないクラスでもRTTI使えますが。。。
0043デフォルトの名無しさんNGNG
>>40
>>40
No, それだと C との互換性がなくなっちゃうから。C++ 標準規格では、
仮想関数を持たないクラスに対して downcast できないことになってる。

5.2.7 Dynamic cast
1 The result of the expression dynamic_cast<T>(v) is the result of converting the expression v to type
T. T shall be a pointer or reference to a complete class type, or “pointer to cv void”. ...
(2-5 upcast とか null ポインタの扱いなど)
6 Otherwise, v shall be a pointer to or an lvalue of a polymorphic type (10.3).
004438NGNG
>>43
なるほど。。。納得です。
となると仮想関数をもたないクラスのRTTIは
どうやって実現しているのですか?
0045デフォルトの名無しさんNGNG
RTTI といえば typeid もあるけど、あれも polymorphic class 以外に
適用すると、実際の型が返ってくるとは限らない。

5.2.8 Type identification
3 When typeid is applied to an expression other than an lvalue of a polymorphic class type, the result
refers to a type_info object representing the static type of the expression.

>>42
処理系とテストコード晒してみ?
0046デフォルトの名無しさんNGNG
まあでも、polymorphic class以外のクラスを、
親クラスから子クラスのポインタにキャストするような
使い方は、あんまりしないわな
(あ、でもCRect->RECT*みたいなのがあるか)。
004738NGNG
>>45
ていねいにありがとうございます。m(__)m
環境はVC++6.0で

#include <iostream>
#include <typeinfo>

using namespace std;
class CBase
{
};

class CDerived : public CBase
{
};

int main(){

 CBase* p;
 p=new CDerived;
 cout << typeid(p).name() << endl;
 delete p;

 return 0;
};

こんな簡単なコードで試しているのですが、出力はCBaseへのポインタ
と出ます。
でCBaseに仮想関数を追加してもやはりダメでした。
0048デフォルトの名無しさんNGNG
VC6 だとデフォルトで RTTI 無効だったような。

メニューバーから [プロジェクト] - [設定] で設定ダイアログ表示
[C/C++] タブ選択
「ランタイムタイプ情報 (RTTI) を有効にする」のチェックボックスを確認
0049デフォルトの名無しさんNGNG
#include <iostream>
#include <typeinfo.h>

class Base {
public:
virtual void vvfunc() {}
};

class Derived : public Base {};

using namespace std;
main()
{
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl; //prints "class Base *"
cout << typeid( *pb ).name() << endl; //prints "class Derived"
cout << typeid( pd ).name() << endl; //prints "class Derived *"
cout << typeid( *pd ).name() << endl; //prints "class Derived"
delete pd;
}
0050デフォルトの名無しさんNGNG
typeid( type-id )
typeid( expression )
005138NGNG
>>48
あぅ。
こんなのがあったのですね。知りませんですた。(--);;

でもやっぱりダメみたいですー。(TT)
005238NGNG
>>49
理解できますた。
コードまで書いていただいてすんまそん。
お騒がせしますた。
逝ってきます。。。
0053デフォルトの名無しさんNGNG
>>51
> cout << typeid(*p).name() << endl;
これで CDerived と表示されない?
005438NGNG
>>53
なりますた。
ポインタの型を表示させていますた。(TT)
005530NGNG
>>31,33
ありがとうございます。
>ってゆーか漏れはそもそも、そういう構成自体がどうかと思うが。
そうですね。
ヘッダー1(class1)をヘッダー2(class2)でインクルードせずに
プロトタイプ宣言して使っても
結局はヘッダー2もインクルードしないとコンパイルできない...。
ただ、後からヘッダー1以外で定義した(class1)を選択できる
余地は生まれるわけだが、(class1)のあるヘッダーを探さなければいけない罠。
0056デフォルトの名無しさんNGNG
しょうもないことかもしれないのですが
#includeディレクティブって、みなさんどこに
書きますか?
.cppにまとめて書いている人を良く見かけますが
.hでそのクラスの実装で必要なのをインクルード
してはマズイでしょうか?
0057>>2ちゃんねらーの皆さんNGNG
2ちゃんねらーなどの間で、人気のある寺院が有ります。
これらの寺院にて諸願成就を祈願しましょう。(爆)

(1-3件目)
http://www.tctv.ne.jp/matuti/
http://www5b.biglobe.ne.jp/~ryumyoin/
http://www1.ocn.ne.jp/~tatsueji/
(4件目)
--------------------------------------------------------------
寺院名    吉祥山唐泉寺
通称     江戸川不動尊
所属宗派  真言宗泉涌寺派
住所     〒133−0051
        東京都江戸川区北小岩七丁目10−10
        京成電鉄の小岩駅から徒歩約15分
        (JR線の小岩駅は、
        京成電鉄の小岩駅とはもの凄く離れているので不可。)
電話番号  03−3658−4192
住職     高田正圓
        (女住職で、先代住職(高田真快)の奥さんであった模様。) 
本尊     不動明王
祈祷日及び祈祷時刻
        通常は毎日午前6時より(150分前後かかる模様)
        行われるが、毎月28日には(不動明王縁日として)
        午前11時にも(2時間ほどかかる模様)行われる。
祈祷料
(普通護摩)   3000円 5000円 10000円
(特別護摩)   30000円(21日間) 100000円(108日間)
          300000円(365日間)
--------------------------------------------------------------
0058デフォルトの名無しさんNGNG
>>56
継承関係があったりメンバ変数として実態を持つ場合には、当然ヘッダに
書く必要がある。ただし、そうすると

1. ヘッダ A に private メソッドを追加
2. ヘッダ A を include している別のヘッダ A1, A2, A3... も
 影響を受ける (と make や統合環境のビルドシステムは理解する)
3. 結果としてヘッダ A, A1, A2, A3, ... を直接・間接に include している
 ソースコードは全部リコンパイル

となって、規模が大きくなってくるとキツイ。

俺は極力ヘッダ同士の include はせずに、実装も impl イディオムや
インターフェース継承 + FactoryClass などを使って隠蔽するように
してる。
0059デフォルトの名無しさんNGNG
ヘッダの依存関係は少ないほど良い。
0060デフォルトの名無しさんNGNG
>>56
58のとおりだが、
他に、相互参照したときにエラーになるなど。
006156NGNG
>>58-59さん
なるほど...
.cppでインクルードすると#includeを書く順番に気を
つけないといけないので、.hに書けばいいのにと
思ったのですが、書籍によっては徹底的に.cppで
まとめてインクルードしているもので。
58さんの方法、まだ初心者なのでよくわからないのですが
もっと勉強しますです。。。
0062デフォルトの名無しさんNGNG
> .cppでインクルードすると#includeを書く順番に気を
> つけないといけないので
それはヘッダの書き方が間違ってる気がする。
006356NGNG
>>60さん
ありがとうございます。
でも、Grid.hとCell.hがあったらGrid.h中でCell.hを
インクルードしておいて、プログラム中ではGrid.h
だけインクルードするようにしたいですね、やっぱり...

みなさんみたいにもっといっぱい経験を積まなきゃぁ
0064デフォルトの名無しさんNGNG
>>63
GridだけでCellを使わないならCell.hをインクルードする必要はないでしょ。
Cellも使う時だけCell.hをインクルードすればいいだけだし。

勝手にまとめてインクルードされて些細な変更でまとめて再コンパイルされるより、使うものだけインクルードした方がマシ、
何十個もインクルードするわけじゃないんだから。
006556NGNG
>>64
ちょっとこんがらがってきたのでよく考えて見ます。。。
0066デフォルトの名無しさんNGNG
C++でAccessに接続したいのですが
何か参考になるサイトがあれば教えてください。
0067デフォルトの名無しさんNGNG
質問です。

class CTest{
public:
CTest();
private:
int m_nValue;
};

というクラスがあって、m_nValueを初期化するのに

CTest(){m_nValue=100;}

と書いている場合と

CTest():m_nValue(100){}

と書いている場合がありますが
どう違い、使い分けているのでしょう?
0068デフォルトの名無しさんNGNG
>>67
代入と初期化の違いを調べろ。
0069デフォルトの名無しさんNGNG
>>67
何も考えずに
CTest():m_nValue(100){}
使え
0070デフォルトの名無しさんNGNG
組み込み型の値ならたいした違いはない。と思う
0071デフォルトの名無しさんNGNG
継承する時とかに違いが出る
0072デフォルトの名無しさんNGNG
出るか?
0073デフォルトの名無しさんNGNG
出ない
0074デフォルトの名無しさんNGNG
出るっ、出ますうっ のガイドライン
http://that.2ch.net/test/read.cgi/gline/1038243550/
0075デフォルトの名無しさんNGNG
標準ライブラリの名前付け規則(アンダースコア区切りの小文字)について、
なぜあのようになっているか理由が示された文書はありますか?
0076デフォルトの名無しさんNGNG
UNIXではあれが普通だから。
0077デフォルトの名無しさんNGNG
map型のコンテナの宣言の時に判定関数を付けたいんですが
その判定関数のはどうしたらいいんでしょうか?
戻り値がboolで仮引数がpairにしているんですけどエラーでコンパイルできません
0078デフォルトの名無しさんNGNG
ダメ質問の典型例
0079デフォルトの名無しさんNGNG
>>35
それオレも知りたい。
引数を微妙に変えたoperator new()を用意して、
MFCのデバッグ用operator new()とぶつからないようにしたりしてる。
もうちょっとなんとかならんのか…
0080デフォルトの名無しさんNGNG
別のプログラムにしてタスク間通信する
008177NGNG
bool haitei(const double& a, const double& b)
{
return a < b;
}
と関数を書いて
map<string,double> x(hantei);
とかいています。
したいことはコンテナの並び順をdoubleの値で順番が決まるようにしたいんです。
0082デフォルトの名無しさんNGNG
map<double,string>でいいだろ
0083_NGNG
http://homepage.mac.com/hiroyuki45/
0084デフォルトの名無しさんNGNG
( ´_¬`)プ──ン
0085デフォルトの名無しさんNGNG
なんでコンストラクタに比較関数を渡してるのかが分からん。
1.釣り
2.参考にした文献にそう書いてあった
3.やっぱり釣り
0086デフォルトの名無しさんNGNG
>>81
> したいことはコンテナの並び順をdoubleの値で順番が決まるようにしたいんです。
無理。んなことしたらmapじゃなくなる。
あと比較関数はテンプレートの引数に。
0087デフォルトの名無しさんNGNG
麻雀かとおもた
typoだよね
008881NGNG
Accelerated C++のp137に
map<K,V> m(cmp);
キーの型が const Kで値の型がVである空のmapを生成する。ただしキーの順番は判定関数の
cmpで決められる。
って書いてあったんです。
キーでしか並べられないことは理解しました。正しくは
map<K,V,cmp> m;
と書くのでしょうか?
0089デフォルトの名無しさんNGNG
デフォルトはless<Key>だからそれを変えなければ意味ない
pointer_to_binary_functionにしとくとか
0090デフォルトの名無しさんNGNG
>>88
コンストラクタに渡せる比較関数は、
map<K,V,CMP> ← としたときの、CMP 型のオブジェクトのみ。

map<K,V, bool (*)(const K&,const K&> m( &cmp );
とでも書くか、もっと綺麗に書くなら比較関数を
関数オブジェクト(わかんなけりゃgoogleれ) にするか。
0091デフォルトの名無しさんNGNG
>>88
前者の記述も間違いではないがこの場合 cmp は less<Key> に限定されるから意味がない。
後者の記述で、cmp には関数オブジェクトのクラスを指定すればいけるばず。
0092 NGNG
みんな、SCO にお金払ってる?
俺、払ってないんだけど…
0093 NGNG
http://slashdot.jp/comments.pl?sid=112395&cid=373312
MozillaQuestによると、SCOはC++の権利も主張しはじめたようです。
http://mozillaquest.com/Linux03/ScoSource-02_Story03.html
0094デフォルトの名無しさんNGNG
MSに金払ってるからC++は関係ねーな
0095デフォルトの名無しさんNGNG
まったくの初心者なんですが、
C++でキーのログをとりたいんですがどーすればいいですか?
JAVAみたいにキーイベントあるんでしょうか?
0096デフォルトの名無しさんNGNG
javaでやれば?
0097デフォルトの名無しさんNGNG
スパイウェア市ね
0098 NGNG
>>95
それは C++ にあるとかないとか、の問題じゃないと思う。
つーか、使っている OS のイベントハンドラにアクセスするためのライブラリがあればできるんじゃない?
0099デフォルトの名無しさんNGNG
初心者は何(の本)から手をつけたらいいでつか?
独習?
0100デフォルトの名無しさんNGNG
麻奈たんハァハァ…
0101デフォルトの名無しさんNGNG
>>99
Cマガジン
0102デフォルトの名無しさんNGNG
>>99
Cマガジン
0103 NGNG
その前に SCO にかね払わないと…
SCO に吸い取られて餓死しそうです。
0104デフォルトの名無しさんNGNG
VC++6.0 デフォルト
コンパイル通らないけど、こういうのってだめなんだっけ?

#include <vector>
#include <map>

class A{};
class B{};
class C{
public:
C(){}
C(const std::pair<const A, B> &in){}
};

int main(){
std::map<A, B> m;
std::vector< C > v(m.begin(), m.end());
return 0;
}
0105デフォルトの名無しさんNGNG
>>98
ありがとうございます。
調べてみます。
0106デフォルトの名無しさんNGNG
>>104
VC7では通る
0107デフォルトの名無しさんNGNG
less<A>がなくても通るのだろうか
0108デフォルトの名無しさんNGNG
プログラムの勉強をしようと思うのですが、
友達に聞いたところ、ゲームを作ったり本気でやりこむつもりなら、
CやC++が良いと言われました。

そこで質問なのですが、
C++を理解するためにはCの知識は必要ですか?
どういう順序でやっていくのが良いと思いますか?

夏厨ですがよろしくお願いします。
0109デフォルトの名無しさんNGNG
>>108
いきなりC++でじゅうぶん。人並みの頭があれば。
0110デフォルトの名無しさんNGNG
C++は難しすぎ、と言うスレが立っていますが、
それほど難解なのですか?
また、ゲームを作る事を目標にした時、
CよりC++の方が適しているのでしょうか?
(この二つの違いも良く分かってないもので。。)
0111デフォルトの名無しさんNGNG
>>110
難解ということはないが、いろんなことができるので
"全部"使えるようになろうと思うとかなり大変ということ。

一部しか知らなくても十分使えるので、徐々に知識を増やせばいい。

CとC++の違いだが、C++はCを拡張した言語なので、基本的に
C++はCのすべての機能を含み、さらに多機能だと考えて良い。

ただし、Cの機能だけを前提にした書き方と、C++の機能があるときの
書き方の主流は違っているので、C++目的に先にCを覚えるのは遠回りかも。
0112デフォルトの名無しさんNGNG
>>110
C++の方が適している。今時純粋なCで組むやつなんか少ないと思われ。

C++は他の言語に比べると難解と言えるかもしれない。
0113デフォルトの名無しさんNGNG
>>110
(Cと比べて)C++のいいことろ
・オブジェクト指向を実現しやすい
・STLが便利(有り難味はそのうちわかる)
・低水準な部分(ハード周りの部分)を気にしなくてすむかもしれない

悪いところ
C++自身の入門書でよいものがない(大抵はCなどの経験が前提)
細かいことを気にしだすときりがない
はじめにGUIに手を出すと挫折する
0114104NGNG
>>106

サンクスコ。
そうか、7では通るのか...。

なんかvector(unsigned int, T, allocator)
に解釈されてるっぽい。
0115デフォルトの名無しさんNGNG
>>114
VC6だとSTL関連は通らないことが多いかも
0116デフォルトの名無しさんNGNG
他スレでも関連したことを聞いたのですが教えてください。
みなさん自作の共通関数とかってどうやってプロジェクト
に取り込んでコンパイルしていますか?
cppに例えばSumという関数を定義して、それを別のcpp
から呼びに行くと「定義されていない識別子です」と
叱られるのですが。
0117デフォルトの名無しさんNGNG
ハラショー
0118デフォルトの名無しさんNGNG
>>117
すぱしーば
0119デフォルトの名無しさんNGNG
>>116
ヘッダファイル書け(´д`;)
0120デフォルトの名無しさんNGNG
>>116
ヘッダーファイルというものを知らんのか
0121デフォルトの名無しさんNGNG
>>119,120
知りませんが何か?
0122デフォルトの名無しさんNGNG
>>121
そこまで根源的な初歩を知らないなら
まずは入門書嫁
0123116NGNG
遅れてしみません。
121は私ではありません。TT

ヘッダ.hと実装.cppに分けて、ヘッダ
を取り込んだのですが、関数を呼んでいる部分で
「グローバルネームスペースにない」といって
叱られます。
0124デフォルトの名無しさんNGNG
>>123
簡単な例を見せて
0125デフォルトの名無しさんNGNG
>>123
namespaceが本当に違っているのでなければ、
ヘッダに書いた関数プロトタイプの引数のどっかが違ってるとかじゃないの?
0126116NGNG
でヘッダにネームスペースCommonを定義したのですが、
別のcppでそのヘッダをインクルードして
using namespace Common;

とやっても、
Common::Func();
だと通るのですが、ただの::Func()
だと通りません。

遅れたのですがVC++6.0です。
0127デフォルトの名無しさんNGNG
>>126
::Func()はusingの外のグローバルネームスペースから探すから当然では
Func()だろ
0128116NGNG
>>124-125

レスありがとうございます。
ソースですが

-- Common.h --

namespace Common
{
void Func();
}

-- Common.cpp --

void Common::Func(){//処理...}

-- 別のcpp --

#include "Common.h"

using namespace Common;

void main()
{
::Func(); // 通らない
Common::Func();  // 通る
}

こんな感じです。
0129デフォルトの名無しさんNGNG
>>128
だから、::Func()と Func() は違うぞ。後者に汁
0130116NGNG
>>127
みなさんおさわがせしました。TT
逝って来ます。。。
0131デフォルトの名無しさんNGNG
Cの入門書を終わらせていざC++の入門書を紐解くと
Cの知識が全然役に立たないのは仕様ですか?

他言語からの移行組はCやる必要なかった?
0132166NGNG
>>129
サンクスコ!です。TT
0133デフォルトの名無しさんNGNG
>>131
うん
0134デフォルトの名無しさんNGNG
>>131
しかし、C++の入門書はCからの差分のみ書かれている場合が多いので、
いきなりclassのソースが出てきてstructとの比較……とかやられても
さっぱり理解できない気がする。

文法からしっかり説明されてる本ならいいけどね。
0135デフォルトの名無しさんNGNG
C相当の知識はWebで収集してしまえ!
0136デフォルトの名無しさんNGNG
C++も色々あるみたいですけど
どれを使ったらいーんですか?
一番メジャーなやつ教えてください。
0137デフォルトの名無しさんNGNG
>>136
C++処理系?
unix/linux系ならGCC3.x
WindowsならMS純正ってことでVisualC++.NET2003がC++的に無難かね
0138デフォルトの名無しさんNGNG
vector<string> func();
みたいな関数があって、返り血の各要素を変数
v1,v2,v3...
に格納したいんですけど簡単な方法ありますか?
perlみたいに (v1,v2,v3,...) = func(); とできればよいんですけど
0139デフォルトの名無しさんNGNG
>>138
配列のまま使わない理由は?
v1, v2...のほうが面倒だらけじゃんか
0140デフォルトの名無しさんNGNG
directxをがんがんに使ったドハデなゲームを作るには、どのC++がいいですか?
bolandのはダメって友達が言ってたんですが・・・
0141デフォルトの名無しさんNGNG
>>139
ちょっと抽象的過ぎました。すいません。例えば
vector<string> func(string s);

string s = "会社,社員,社員コード";
(company,name,code) = func(s);
のようにしたいんですが。
0142デフォルトの名無しさんNGNG
>>141
ゲイツのC#にしとけ
0143デフォルトの名無しさんNGNG
>142は141じゃなくて>>140ね
まちがえた欝だ。
0144デフォルトの名無しさんNGNG
>>141
まあ簡単で安全な記法はないが、結果を構造体にすれば多少使いやすくなる:
struct record {
std::string company, name, code;
record(const std::string& com, const std::string& nam, const std::string& cod)
:company(com), name(nam), code(cod) {}
};
record vector_string_to_record(const std::vector<std::string>& v)
{
return result( v[0], v[1], v[2] );
}
0145デフォルトの名無しさんNGNG
>>139
vector ≠ 配列

>>138
vector <string> rtn = func();
company = rtn[0];
name = rtn[1];
code = rtn[2];
じゃだめなん?
0146デフォルトの名無しさんNGNG
>>144
あ、 return result は return record の間違い
0147デフォルトの名無しさんNGNG
footempl<tuppleType>(company, name,code) = someTupple;
を実現するテンプレートは作れると思う。
0148デフォルトの名無しさんNGNG
>>140
microsoft の製品にはmicrosoftの製品で・・・。
つまり vc2003つーことだ。
0149デフォルトの名無しさんNGNG
>>141
boost::tuple<string,string,string> f(string);

string s,s1,s2,s3;
boost::tie(s1,s2,s3)=f(s);
0150デフォルトの名無しさんNGNG
>>149
boost便利棚
0151138=141NGNG
>>144
こんな方法もあるんですね。勉強になります。

>>145
たしかに地道に代入するのが手っ取り早いかも。

>>147
どうやるんだろう。全然思いつかないです。
>>149
と思ったらboostにはこんな便利なものがあるんですか。これを機会に導入してみよう。
0152デフォルトの名無しさんNGNG
Visual C++やgccなど色々なソフトの名前を聞きますが、
エディタ等が違うだけですか?作れるプログラムの種類が違って来たりするのでしょうか?
0153デフォルトの名無しさんNGNG
>>152
私はVC++でコンパイルするソースもgccでコンパイルするソースも
同じエディタを使ってますが。
0154デフォルトの名無しさんNGNG
>>152
つくれるぷろ�cの種類が違います
0155デフォルトの名無しさんNGNG
ボーランドしぃプラプラのインスコと環境変数の設定は終わった。
簡単なソースも書いた。拡張子も.cppにした。
cd使って.cppが置いてあるフォルダまで行く事も出来た。

で、コンパイルするには後なにをすれば良いんだ?
HSPはボタン一発で全部やってくれたんだが
CとかC++ってなんか小難しいのな。
0156デフォルトの名無しさんNGNG
>>155
makefile で ググれ。
俺はVCしか使ったこと無いんで、これ以上説明できん。
0157デフォルトの名無しさんNGNG
bbc failname
0158デフォルトの名無しさんNGNG
>>157
名前をしくじるのか?
0159デフォルトの名無しさんNGNG
>>157
> bbc failname
なんか失敗しそうだなw
0160デフォルトの名無しさんNGNG
>>155
http://www.hi-ho.ne.jp/jun_miura/bccdev.htm
あたり使え
0161デフォルトの名無しさんNGNG
>>157
徹夜明けだけど激しくwラタ
0162デフォルトの名無しさんNGNG
bcc32 filename でやったぞ
0163デフォルトの名無しさんNGNG
いまさらながらだが、bbcじゃなくてbccだよな。
0164デフォルトの名無しさんNGNG
いまさらながらだが、bbcじゃなくてbccだよな。
0165デフォルトの名無しさんNGNG
いまさらながらだが、bbcじゃなくてbccだよな。
0166デフォルトの名無しさんNGNG
bcc32 filenameでやったらコンパイルできたぞ!
最初bbcとbcc試してダメだったんだが32を付けないといかんのだな。
objファイルとかtdsファイルとかわけわからん物まで出てきたがな!
お前等thx

exeファイルクリックしても一瞬で画面が消えてしまうのは、
ソースにHSPで言うwaitとかstopを入れてないからだろうか。
0167デフォルトの名無しさんNGNG
クリックして実行すんじゃなくて、コマンドプロンプトからfilename[Enter]で
0168デフォルトの名無しさんNGNG
Auto〜って予約語ですか?
0169デフォルトの名無しさんNGNG
>>168
no
0170デフォルトの名無しさんNGNG
auto のみ予約語
0171168NGNG
>>169-170
ありがとうございます
0172デフォルトの名無しさんNGNG
>>167
thx

*
**
***
****
*****

と表示する事に成功したよ。
0173デフォルトの名無しさんNGNG
tdsとかobjファイルって消したらまずい?
激しく邪魔なんだけど。
0174デフォルトの名無しさんNGNG
>173
いいよ。
0175デフォルトの名無しさんNGNG
>>173
全部開発が終了したら消す。
0176デフォルトの名無しさんNGNG
>>173
かまわんが。ソースコードの管理だけはちゃんとしとけよ。
0177デフォルトの名無しさんNGNG
このページの後半に書かれていることは間違いですよね?
http://www.kurumi.sakura.ne.jp/~kumicyou/cplusplus/1305.html
0178デフォルトの名無しさんNGNG
中盤にかかれている、
>実は、explicitを使用しない場合、コンストラクタは何回でも呼べる。
> A a = 1; //a = A( 1 );
> a = 2; //a = A( 2 );
このあたりから、間違いなわけだが。
0179デフォルトの名無しさんNGNG
>>177
うへえ、コンストラクタでメモリ確保すると異常終了するだって?
むちゃくちゃですな。
'Resource Acquisition is Initialization'の前提が崩れる(笑)

それより代入演算子定義してないからメモリリーク起こしてそうだけどな。
0180デフォルトの名無しさんNGNG
まさに、「代入演算子定義してない」から、二重解放がおこっているのでせう。
0181デフォルトの名無しさんNGNG
> A a = 1; //a = A( 1 );
これは×
> a = 2; //a = A( 2 );
これは○

>(異なるインスタンスを作れば)コンストラクタは何回でも呼べる。
○
0182デフォルトの名無しさんNGNG
>>177
A a = 1; // A::A(1)で初期化, a.p確保
a = 2; //a = A( 2 ); これは分解すると:
// 1. 一時オブジェクト tempがA::A(2)で初期化, temp.p確保
// 2. a.operator=(temp)を実行, デフォルトなのでまるまるコピーされ
// a.pが刺していたメモリはリーク、a.pはtemp.pが指す内容になる
// 3. 一時オブジェクトtempが解体, temp.pはfree
// a.pが指している領域は開放済みになってしまう
a = 3;
a = 4;
a = 5;
この時点で、a.pには A(5)の一時オブジェクトのために確保されて
既に開放されたアドレスが入っている。
結果、returnの時点で、aの初期化のときに確保されたpのメモリがリークし、
A(5)の一時オブジェクトで確保されたpが二重解放されてるわけだな。
0183デフォルトの名無しさんNGNG
>>35,79
VCなら
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcmex/html/vcconmanagedtypesmfc.asp
みたいな手は使えない?
試してみたけど、MFCアプリの中でMC++できた。
0184デフォルトの名無しさんNGNG
visual c++ とフツーのC++はどう違うんですか?
どっち先に覚えればいいですか?
0185デフォルトの名無しさんNGNG
>>184
フツーのC++って何よ
0186デフォルトの名無しさんNGNG
>>184
少なくとも小文字と大文字の違い以上のものはあると思うぞ。
0187デフォルトの名無しさんNGNG
>>184
どちらか片方でも全て覚えることは無理。
覚えるのではなく、使えるようになればよい。
0188デフォルトの名無しさんNGNG
文法とかは同じだよね?VC++も。
俺borlandのつかってるけどVCとどう違うのか良くワカラソ
しかもC++はじめたばかりの初心者ときたもんだ
0189デフォルトの名無しさんNGNG
いろいろと処理系特有の言語拡張がある
0190デフォルトの名無しさんNGNG
Visual C++, Borland C++ Builder = 製品名
C++ = 言語名

「VC++, BCB は、C++で開発するための環境を提供するアプリ」ってことやん。
まぁ、環境固有の言語拡張とかもあるけどさ…
0191デフォルトの名無しさんNGNG
処理系と言語
0192デフォルトの名無しさんNGNG
誰か俺に宿題を出しておくれ。
ちなみに30分前にC言語ライフをスタートしたペーペー。
知識としてはHSPでシューティングからRPGまで一通り作った程度。
Cの知識はウンコみたいなもんです。
0193デフォルトの名無しさんNGNG
宿題スレの過去問でもやっとけ。
0194デフォルトの名無しさんNGNG
何を入れても ぬるぽ と出力される iostream を実装せよ。
0195デフォルトの名無しさんNGNG
>>194
ぬるぽ と入れたら ガッ と出して欲しいね。
0196デフォルトの名無しさんNGNG
例えばtest()とmain()があって、test()の後にmain()がある。
両方関数だけどtest()の中にcoutとか書かれててもそこでは実行されなくて、
main()以下でtest()が呼び出された場合に初めてtest()の中に書かれてるcoutが実行される。
プログラムはmain()以下で始まってそれ以前にある物はただの宣言(設定)みたいな物。

こういう認識で合ってますか?
0197デフォルトの名無しさんNGNG
>>194
iostreamを実装せよの部分が良くわからんけど、
何か値を入力出来る様にチャット窓みたいなの作って、
そこに何を入れられても「ぬるぽ」って出力すれば良いって事?

つまり入力する所でエンター押された時に入力された値を無視して、
関数nurupo()に飛ばしてcout << "ぬるぽ" << endl;を実行させる様にすれば良いだけか。

まぁそのチャット窓の作り方から調べないといけないわけだけれども。
0198デフォルトの名無しさんNGNG
>>197
basic_iostreamを派生したクラスを実装しろってことでは
0199デフォルトの名無しさんNGNG
>>198
やっぱり俺の理解を超えた難しい意味だったのか。
まぁとりあえず197に書いた「何入力してもぬるぽと表示するプログラム」は出来たよ。

勝手に理解して勘違いしたが勝手に宿題もしたからこれでおk!
0200デフォルトの名無しさんNGNG
>>197 >>199
ガッ
0201デフォルトの名無しさんNGNG
「何入力してもぬるぽ」ってのは「何出力してもぬるぽ」の間違いちゃうんかと。
0202デフォルトの名無しさんNGNG
情けない質問なのですがおながいします。
int と float の計算で
100 * 2.33000 が 232 になってしまいます。
コンパイラもwarning(floatからintへの変換でデータが失われている
かもしれない)といっているのですが、
こんなときどうコーディングすればいいのでしょうか?
0203デフォルトの名無しさんNGNG
有理数(boost::rationalとか)
0204デフォルトの名無しさんNGNG
>>202
intの100をfloatに型キャストすればいいんじゃないの?

(float)100*2.33000

俺は試してないからね。自分で試してみてね。
0205デフォルトの名無しさんNGNG
実は232.9999...というオチ
0206202NGNG
>>203
サンクスコです。
でもboost入ってないんです。TT

>>204
それもやってみたのですがダメです。
10000をかけると23299になりますた。
ウォッチだと2.33000ってなってるのに
なんなんでしょう。TT
どうもです。。。
0207202NGNG
>>205
>実は232.9999...というオチ

実際そのようです。TT
どうすればいいでしょうか?


0208デフォルトの名無しさんNGNG
四捨五入じゃダメ?
0209202NGNG
作業的には、intは用紙幅でfloatはプレビュー倍率です。

>>208

四捨五入、あるいは切り上げはできたらしたいのですが
nWidth * fZoom のどこでしたらいいのでしょう。
初心者質問でしみません。。。

0210デフォルトの名無しさんNGNG
floatがはじめからdoubleならうまくいくんだけどねぇ。
floatをdoubleにキャストしても駄目みたい。
内部表現の問題だろうな。
0211202NGNG
>>210
ですよね。doubleにキャストしてもダメでした。
デバッグウィンドウにも2.33000って出てるのに
タチ悪いです。VC++6.0なんですがこんななんですね。。。
0212デフォルトの名無しさんNGNG
>>209
#include <cmath>
四捨五入:
 static_cast< int >( std::floor( nWidth * fZoom + 0.5f ) );
切り上げ:
 static_cast< int >( std::ceil( nWidth * fZoom ) );

四捨五入のfloorはいらんかも。
0213212NGNG
VC6か。std外さないと通らないかも。
0214デフォルトの名無しさんNGNG
>>211
俺が確認したのはBCCだったよ。結果は同じだった。
0215202NGNG
みなさんレスありがとう。
212さんの切り上げでみごと解決しますた。(端数の
原因はわからないので保留しますた。stdははずしたら
通りますた。)
遅くにほんとにどうもありがとう!!...(TT)...
0216デフォルトの名無しさんNGNG
floatの2.33自体が実は内部表現では2.299...となっているから、
根本的に無理かもしれない。もとデータがすでに2.33ではないのだから。
この場合は四捨五入で逃げられるかもしれないが、
今度は.5境界近辺で同じ問題に遭遇するので根本的解決にはならないかも。
0217デフォルトの名無しさんNGNG
浮動小数点数の計算は数学のようにはゆかない。
0218202NGNG
>>216
だからBCCでもVCでも同じ現象なんでしょうか。

>今度は.5境界近辺で同じ問題に遭遇するので根本的解決にはならないかも。

印刷のズレ程度なのでとりあえず保留しておくことにします。
端数ってムズいですね。。。
0219デフォルトの名無しさんNGNG
こういうのって(最終的にintが必要なら)100倍とか10000倍とかで倍率を整数値で保持しておいて
最終結果を1/100なり(必要なら50足してから)するのが、一番まともな気がするけど。
利息や消費税計算とかはそうじゃないのかな?知らないけど。
0220202NGNG
>>217
>浮動小数点数の計算は数学のようにはゆかない。

つねにそれを頭に入れておかないといけないんですね。
お金がらみじゃなくてよかたー。

>>219
>こういうのって(最終的にintが必要なら)100倍とか10000倍とかで倍率を整数値で保持しておいて

なるほど...
ちらっと思ったのですが印刷部分でスピードが必要と思い、そのまま
ピクセルで持っちゃったのが悪かったかも。。。
(別のtwipとかの座標系を使うとか...)
0221デフォルトの名無しさんNGNG
お金がらみは怖いよね。
昔、COBOL使ってたけど固定小数点だったな。
科学技術計算をさせるときは難儀だったけど。
0222デフォルトの名無しさんNGNG
Currencyとかの通貨型をサポートする環境も増えてきてるよね。
COBOLは給与計算とか販売管理、生産管理とかで
実績は十分証明されているもんね。
昔VBでお金からみのシステムの置き換えをやったけど
稼動後以前のシステムと1円合わないとか言われた。
例えばa * b * cでa*bですぐ端数処理するか、全部終わって
やるかの誤差らしかった。んなもん知るかとw
0223デフォルトの名無しさんNGNG
そんなこと言わずに、丁寧につくってあげてなー。
0224デフォルトの名無しさんNGNG
というか、どう端数処理するかが仕様に含まれていないのは如何なものかと。
0225デフォルトの名無しさんNGNG
>>224
仕様出す方は、切り捨てと四捨五入とJIS丸めの違いを知らないから。

>>202
速度を重視するなら尚更floatなんて使うな。
恐らくはdoubleで充分だし、必要なら整数で実装するべき。
0226デフォルトの名無しさんNGNG
っていうか、boost 入ってないなら今からインストールして rational 使えば?

>>225
印刷関係ってことは多分実行環境は PC だし、
多分 double の方が早いだろ。
0227デフォルトの名無しさんNGNG
JIS丸めとIEEE754って何が違うの?
0228デフォルトの名無しさんNGNG
JIS丸めって、JIS Z 8401だよね。
ってことはISO 31/0かな。
IEEEの番号はしらね。
0229デフォルトの名無しさんNGNG
>>225-226
floatは32ビット、doubleは64ビットで
なんでdoubleのほうが早いの?
0230デフォルトの名無しさんNGNG
>>229
80x86 では内部では 80 ビットで計算してるから
どっちでもデータ変換が生じることに変わりはないので、
基本的にはどっちでも速度は一緒。
でも、標準関数では double 型が使われているので、
その関数との受け渡しにおいては
float だとデータ変換が生じて遅くなってしまう。
0231デフォルトの名無しさんNGNG
>>229
ハードウェアが最初から double を想定して作られてるから。
0232229NGNG
>>230-231
なるへそ。単純にCPUのビットだけの問題じゃないんですね。
0233デフォルトの名無しさんNGNG
>232
同じような理由で、charの方がshortやlongより早く処理できると思ったら大間違い。
0234デフォルトの名無しさんNGNG
202です。昨晩はどうもでした。

>>226
boost入れたいのですがHDDがあと200Mぐらいしか...

>>225-231
doubleのほうが早いんですね。知らなかた...

ところで昨日212さんに教えてもらった標準ライブラリ関数
std::ceilですが、なぜVCだとstdがついてるとコンパイル
できないのでしょうか?
VCは初心者なのですがVCにはそんなクセみたいなのが
いっぱいあるのでつか?
0235デフォルトの名無しさんNGNG
if(1926 <= a && a <= 1989)
if (1990>a&&a>1925)

この二つは同じ意味だと思いますが、処理の早さに差が出たりしますか?
a+=1よりa++と書いた方が速いというのは聞いた事あるのですが、
そういう細かいところで速度をアップするテクニックって他にどんなものがありますか?
0236デフォルトの名無しさんNGNG
盲目的にdoubleの方が速いと思わない方が良いよ。
CPUやコンパイラに左右されるということを忘れずに。

ちなみに単精度用の関数( sinf とか sqrtf とか )が
用意されているコンパイラもある。
0237デフォルトの名無しさんNGNG
>>235
速度に差は出ない。

>a+=1よりa++と書いた方が速いというのは聞いた事あるのですが、
どこの馬鹿にそんなこと吹き込まれたか知らないけど、それは大嘘。


まぁ、演算子のオーバーロードの実装の仕方によれば変わるかもしれないけど。
0238デフォルトの名無しさんNGNG
最近のx86ならlong doubleが80bitフルでない?
0239デフォルトの名無しさんNGNG
>235
その例なら、
if( (unsigned)( a - 1926 ) <= 1989 - 1926 )
の方がたぶんはやい。
0240デフォルトの名無しさんNGNG
>>235
やー、悪いことは言わない。今は可読性を重視した方がいいと思うよ。
マシン性能があがり、お馬鹿なコンパイラも減ってる昨今だし。
ボトルネック解消なら、別で稼ぐべきかと。

>>237
大嘘ってことは無いと思うけど
0241デフォルトの名無しさんNGNG
>a+=1とa++
今時のコンパイラ(つーかC++コンパイラ)なら同じようなコードを出力するはず。
但し、古い貧弱な環境用のCコンパイラが前者は定数値との足し算、
後者をインクリメントで実装しているのも事実。

>1926云々
単純に年だけで元号を判定することは危険。
なぜならば、1989年はたったの数日しか昭和ではなかったから。
0242デフォルトの名無しさんNGNG
最近の CPU だと
むしろ INC x より ADD x, 1 の方が速いって聞くけどね。
0243デフォルトの名無しさんNGNG
昭和元年も、数日しかないけれど。
0244デフォルトの名無しさんNGNG
一例を挙げると、その他の例を挙げないと気がすまない香具師がいるのはこのスレですか?
0245デフォルトの名無しさんNGNG
まー要するに気にするなってこった。
でもhoge++は++hogeと書こうな。operator++のことも考えて統一した方がいい。

とか書くと「hage[hoge++]とhage{++hoge]は違うだろ」とか言い出すだろうけど
そういう時は
++hoge
hage[hoge]
か
hage[hoge]
++hoge
と書くもんだ。
0246デフォルトの名無しさんNGNG
>>234
VC6 はそうなるね。
古いから標準仕様に追いついてないだけ。

VC .NET なら大丈夫だった気が。
古いのは使うなってこった。
0247デフォルトの名無しさんNGNG
class benki {
 const int unko;
public:
 benkio(void) : unko(100) {} 
};
うんこは定数?それともconstオブジェクト?
0248デフォルトの名無しさんNGNG
>>247
排泄物
0249デフォルトの名無しさんNGNG
便器はオブジェクトなのにウンコはオブジェクトじゃないのか
0250デフォルトの名無しさんNGNG
>>247
class benki {
 static const int unko=0xBAD;
};

定数になりますた
0251202NGNG
>>246
ありがとう。。。
0252デフォルトの名無しさんNGNG
>>247
class benki {
 static const int unko=0xF00D;
};

定食になりますた
0253デフォルトの名無しさんNGNG
>>252
Scatologyパターンってやつですね
0254デフォルトの名無しさんNGNG
>>253
ヤヤウケタ
0255デフォルトの名無しさんNGNG
C++超初心者なのですがよろしくお願いいたします。m(__)m
関数を実装するのに
func(CPoint* pPoint)
とポインタで実装するか
func(CPoint& Point)
と参照を使って実装するか迷うのですが
どういう風に使い分ければいいのでしょうか。
0256直リンNGNG
http://homepage.mac.com/maki170001/
0257デフォルトの名無しさんNGNG
>>255
いろいろ流派があるんだけど、大きく分けると2派。

1. NULL が来る可能性がある場合のみポインタで後は参照。
2. 関数内部で値を書き換えるならポインタ、そうでないなら参照
 (呼び出し側で、値渡しと明らかに区別が付くように)

俺は 1 の方。
0258255NGNG
>>257
レスありがとうございます!
あっ、ヌルポインタが来る場合があるのですね。
MFCを勉強しているのですが、たいていポインタで渡して
いるのでなんでだろうと思ったのですが、積極的に
参照を使ってもいいんですね。納得です!
0259デフォルトの名無しさんNGNG
>>258
MFC ってもうかなり古いから、
MFC の設計方針はあんまり当てにならんよ。
0260デフォルトの名無しさんNGNG
まあ、古いから駄目と言うわけでもないんだが、
折れは特別な理由がない限りはほとんどポインタ。
最悪、仕様変更があったときでも対応しやすいし。
(賛否があるのはわかった上でね。)
0261デフォルトの名無しさんNGNG
おれは>>257のでいくと2かな。
だからint unko(const hoge& hage)とかしかつかったことないなぁ。
0262デフォルトの名無しさんNGNG
俺はオブジェクト指向上の要素としてのクラスは全部ポインタ経由だな。
つか、どうせ生成〜保持〜破棄とポインタで扱うことがほとんどだから、
いちいち関数の引数に渡すときにデリファレンスするのも馬鹿らしいって
理由なんだが。
0263デフォルトの名無しさんNGNG
値で多態ができる仕組みが欲しい。
RTIを駆使すれば実装できるんじゃないかねえ
0264247NGNG
>>250-252
コンパイル時に置き換えてくれるの?
0265デフォルトの名無しさんNGNG
実際にどうなるかなど気にしない方がいい
0266デフォルトの名無しさんNGNG
ある1つのクラス内でしか使わない定数ってどんな風に定義してる?
1. static const int unko = 100;
2. const int unko;(初期化リストで初期化)
3. enum { unko = 100, };
4. クラス外でconst int unko = 100;
5. #define unko 100
6. 憧れのあの子はウンコなんてしない
0267デフォルトの名無しさんNGNG
>>266
お前、「6. 憧れのあの子はウンコなんてしない 」と書きたかっただけだろ?
0268266NGNG
>>267
いや、いたって真面目な質問です。
6. は定数なんて使わないって意味。
0269デフォルトの名無しさんNGNG
1. static const int unko = 100;
3. enum { unko = 100, };

これ以外は機血画位
0270デフォルトの名無しさんNGNG
特に4と5はな。
0271デフォルトの名無しさんNGNG
2はクラス内定数じゃない気が
0272266NGNG
ごめん、今まで4の基地外だった。
他人様のソース見る限りでは1は少数派かな?
って事で3で逝きます。
0273デフォルトの名無しさんNGNG
>>266
4.はcppファイルの方に書くんでしょ?
それならよく使う。
ヘッダファイルを汚さない手を他に思いつかないんだよね。
0274デフォルトの名無しさんNGNG
>>273
cpp内で継承クラス作って、そこに書けばいいのでは?
0275デフォルトの名無しさんNGNG
>>272
272 みんな好き好んで 3 を使ってるわけじゃない。
ほんとは 1 にしたいけど、古いコンパイラ(VC6 のとか)は
1 を定数として認識してくれないから。
(固定長の配列の宣言とかに使えない)

>>273
cpp ファイル内で使いたいんなら static つけてファイル内スコープに。
0276デフォルトの名無しさんNGNG
リンケージ
0277デフォルトの名無しさんNGNG
>>275
4.2 -1-
"The use of the static keyword is deprecated when declaring objects in namespace scope."
0278デフォルトの名無しさんNGNG
今から借りてきたあの本を根性で前ページスキャンします。
0279デフォルトの名無しさんNGNG
>277
それがどう関係するのか教えてください。
namespaceスコープではなくclassスコープの話をしているのだと認識していました。
0280デフォルトの名無しさんNGNG
>>272
テンプレートとも相性抜群だからおいらも 3 をお薦めしとくよ。
0281266NGNG
共有するソースなら3を、そうでなければ1を。
状況に応じて4を使い分ければいいかな?

所で文字列定数ってどうしてる?
クラス外で const char* unko = "もりもり";
これは逝って良し?
0282デフォルトの名無しさんNGNG
どんなプログラムかによってどんな手段がいいかは変わってくる。

フォーマルにやる必要がある場合は、面倒くさいけど
文字列定数に関してはそれだけをひとつのファイルに
まとめたりするのがベスト。

おちゃらかでいい場合はリテラル文字列をその場で直埋め。
0283デフォルトの名無しさんNGNG
const char * const unko = "もりもり";

じゃねぇーの?
0284山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0285デフォルトの名無しさんNGNG
age
0286デフォルトの名無しさんNGNG
あげ
0287デフォルトの名無しさんNGNG
>>281
static const char unko[];
をクラス内に作って、
.cpp 内で const char Unko::unko[] = "もりもり";
と初期化。
0288デフォルトの名無しさんNGNG
>おちゃらかでいい場合はリテラル文字列をその場で直埋め。

ファイルかリソースだな
0289デフォルトの名無しさんNGNG
>>288
多言語化しやすいしな。
0290デフォルトの名無しさんNGNG
>>288
お前はたった数十行規模のプログラムでもそんなことするのか?
まぁ、止めはせんが。
0291デフォルトの名無しさんNGNG
>289
YAGNI
0292まりりんまんそんNGNG
先輩の皆様、膣問させてください。m(__)m
{
 int *i;
 float *f;
 double *d;

 i = new int;
 f = new float;
 d = new double;

 //何らかの処理

 delete d,f,i; // ←ココ
}

最後の行のdelete文はi,f,dの指す3つの領域をすべて正しく解放しますか?
それとも、

delete d;delete f;delete i;

のようにちゃんとばらばらに記述しないといけませんか?
bcc32でコンパイルしてみてるんですが、いずれもエラーはでません。
ちゅか、メモリが解放されたかどうかのチェックのしかたがわからないよ、ママン。('・c_・` )
0293デフォルトの名無しさんNGNG
>>292
deleteされるのはiだけ。
,演算子(コンマ演算子)を調べるべし。
0294デフォルトの名無しさんNGNG
> delete d,f,i; // ←ココ
ダメ。 これだと d の指す領域しか開放されない。
(delete d), f, i;
http://www.microsoft.com/japan/developer/library/vclang/_pluslang_c.2b2b_.operators.htm
0295デフォルトの名無しさんNGNG
>>292
> ちゅか、メモリが解放されたかどうかのチェックのしかたがわからないよ、ママン。('・c_・` )
Borland の C++Builder を買えば
http://www.borland.co.jp/cppbuilder/papers/codeguard/index.html
とかでチェックできるけど。free版だとなさそうな気がする。
0296まりりんまんそんNGNG
>>293-294
サンクスです。マンコ^h^h^hコンマ演算子、調べてみます。

>>295
今のところ適当なループを書いてクラッシュするまでまわしたりしてますが・・・。
そうですか、ありませんか・・・。;_;

回答ありがとうございました。m(__)m
0297デフォルトの名無しさんNGNG
デストラクタが呼ばれた時に何らかの情報を出力するクラスを作って試せばいいじゃない。
0298293NGNG
ごめんなさい。虚偽を書きました。
294氏が正しい。
0299デフォルトの名無しさんNGNG
似たような落とし穴にこんなのがある。
ttp://www.tietew.jp/cppll/archive/8838 (後半部分)
0300デフォルトの名無しさんNGNG

コーポレイトソフトウェアていうサポセンの馬鹿が
PGに喧嘩売ってます。

http://money.2ch.net/test/read.cgi/haken/1057486349/287

腹立ちました。
みんなでやっつけにいこう。
0301デフォルトの名無しさんNGNG
んなことで所構わず貼って回るなよな。
0302デフォルトの名無しさんNGNG
C++勉強中の者ですが、マクロがいまいち理解できません。
宣言した名前に数字や命令などを入れるんですよね?
それで後から書き換える時に楽にできる、と。

そこで疑問なのですが、例えば数字を入れる場合で、
普通に変数でやる場合と何か違いはあるんですか?
命令を入れる場合でも、普通に関数でやれば良いような・・・

あと、C++とC#を比較するとどの辺が違いますかね?
0303まりりんまんそんNGNG
>>302
マクロは「単なる文字列である」ことが重要。

例えば
#define M男 鞭で叩かれ蝋燭で熱せられることに喜びを見出す者。雄
と定義すると、
コンパイル時にソースコード中の「M男」という文字列が
「鞭で叩かれ蝋燭で熱せられることに喜びを見出す者。雄」に置き換わる。
単にテキストが置換されるだけなので、
どんな文字の定義も許される。
逆にいうと、置換された結果が正しいプログラム文であるかどうかは、
プログラマが保証しなければならない。

・・・たしか、こんな感じ。
0304デフォルトの名無しさんNGNG
>>302
マクロはC言語からのレガシー(遺産)で、昔は const や inline なんかがなかったのよ。
だからいまなら const や inline なんかでやるようなことを全部マクロでやってたわけ。
だから const や inline なんかでできることでマクロを使うの避けましょう。

まぁ、よくわかんなかったら今はとりあえずマクロは他に打つ手が無い時の最後の手段だってことだけ覚えとけ。
0305デフォルトの名無しさんNGNG
どんな例だYO!!w
0306デフォルトの名無しさんNGNG
// マクロの簡単な罠ドゾー

#define TAX 1.0+0.05
void main(){
printf("1000*TAX=%.0f", 1000*TAX);
}
0307デフォルトの名無しさんNGNG
const, inline, template, ... などを駆使すれば、
マクロが必要になることってのはあんまりない。
まぁ、完全になくなるってことはないけど。
0308デフォルトの名無しさんNGNG
class fusianasan {
void putchar();
};
0309デフォルトの名無しさんNGNG
マクロはALGOL60で言うところのcall by nameによる呼び出しを実現していると
考えることができる。

普通のC++の関数の呼び出しは call by value である。
ただし、仮引数が参照の場合は call by reference(参照渡し) である。
0310春は来ないNGNG
それは、それは、空を越えて〜 やがて、やがて、迎えに来る〜♪
0311デフォルトの名無しさんNGNG
クラスのstaticな関数はインライン展開されるのでしょうか?
コンパイラ依存であれば、VisualC++ 2003 について
教えて欲しいです。
0312デフォルトの名無しさんNGNG
インライン展開を期待する書き方(クラス定義内に書くかinline指定する)をしており、
コンパイラがインライン展開可能な関数であればインラインになる。

コンパイラにも依存するが
関数自体にも依存するので一概には言えない。
0313デフォルトの名無しさんNGNG
>>311
インライン展開される【保証があるか】
インライン展開される【場合があるか】
どっちが知りたいんだ?

前者なら
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=ISO%2FIEC+14882%3A1998&dantaiCd=ISO&status=1&pageNo=0

後者ならアセンブラ嫁
0314デフォルトの名無しさんNGNG
インライン展開に関係ありそうなことと、なさそうなことを考えてみれ。
・再帰
・関数ポインタ
・リンケージの種類
0315311NGNG
>>312-314
どうもありがとうございました。
0316デフォルトの名無しさんNGNG
それほど多くを知らないせいか、そこら辺のフリーソース見ても、
例外処理をしているものは、ほとんど皆無です。

趣味グラムくらいでは、例外処理って、あまり有用じゃないのでしょうか?
0317デフォルトの名無しさんNGNG
>>316
んなこたない。
けどC++の例外クラスは腐ってるから簡単お手軽に使う気はあまりしないよ。
せめてエラーの原因をstringで持たせりゃいいのに。
0318デフォルトの名無しさんNGNG
>>317
はぁ?
stringで持たせるクラスを派生させればいいだけじゃ?
0319316NGNG
プロとアマの違いは、エラー処理の厳密さだ!と指摘され、ショックのあまり気がふれ
例外処理でコードを埋めようとしたところ、あまりの例のなさに、がっかりしてたとこでした。

>>317
レスありがとうございます。やっぱり使いづらいのですね。
stringなら簡潔でよかですねぇ。処理の流れを分けて、
可読性を高めるはずなのに、かえってシンプルじゃ無くなったりで…。

どっかで綺麗に実装してるコード例とかないかなぁ…。
0320デフォルトの名無しさんNGNG
それよりstringを投(ry
0321316NGNG
ぉぅ、書いてる間に…

>>318
なるほどなるほど、やはり皆さんそれぞれ独自に
自分用例外クラスを設けてるんでしょうか。
0322デフォルトの名無しさんNGNG
例外ってC言語のsetjmp,longjmpに相当するぐらいの負荷があるのでしょうか?
0323デフォルトの名無しさんNGNG
C++の例外クラスってこれだもんな・・・
始めてみたときハァ?って思ったよ。
class exception {

public:
exception () throw();
exception (const exception&) throw();
exception& operator= (const exception&) throw();
virtual ~exception () throw();
virtual const char* what () const throw();
};

まともな例外クラスとはこういうものを言うんだよ。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemexceptionmemberstopic.asp
0324316NGNG
>>323
うーーむ、すいません。熱心に読んでは見たのですが
使い方が良く分からなくて….NETが無いと駄目なのかな…。

なんとなく、すごそうだってのは良く分かりました。
0325デフォルトの名無しさんNGNG
>>323
ハァ? それと同じようなモン派生させてそれ使えばいいだろ。何度も言わせんな馬鹿。
0326316NGNG
>>325
レス番違うけど、俺へのレスかな…すんません、もう何がなにやら。
0327316NGNG
あまり長引いても迷惑ですし、まだしばらくは分相応に
返り値でエラーチェックに戻ります…レスありがとうございました
0328デフォルトの名無しさんNGNG
レス番違うく無いけどね

0329デフォルトの名無しさんNGNG
厨房用例外クラス

class Error
{
 std::string message;
public:
 Error(std::string msg): message(msg){}
 std::string const &Message(){ return message; }
 static void Check(bool exp, std::string message){
  if(!exp) throw Error(message);
 }
};

int main(int argc, char* argv[])
{
 int n = 0;
 try{
  Error::Check(n==3, "n==0でなければならない");
 }catch(Error &e){
  std::cout << "ERROR:" << e.Message() << std::endl;
 }
 return 0;
}
0330デフォルトの名無しさんNGNG
assertで十分
0331デフォルトの名無しさんNGNG
>>322について誰か知りませんか?
0332デフォルトの名無しさんNGNG
>>331
自分でasmファイル吐くコンパイルオプション付けて調べてみたらどうですか?
0333デフォルトの名無しさんNGNG
>>332
知らないならだまっててね
0334デフォルトの名無しさんNGNG
チンカス
0335デフォルトの名無しさんNGNG
プ
0336デフォルトの名無しさんNGNG
↓以下厨の煽りあい
0337デフォルトの名無しさんNGNG
asmも分からないのに速度なんて気にしてる時点で厨丸出し
0338デフォルトの名無しさんNGNG
てかさぁ、質問されたこと以外のことを書き込んでる時点で荒らしじゃね?
0339デフォルトの名無しさんNGNG
夏全開
0340デフォルトの名無しさんNGNG
                   _,,,,,.........,,,,__
                 /:;:;:;:;:;:;:;:;:;:;:;:;:;,丶
..    さっさと教えれ…  /:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;.,ヽ
                 i' ' ' ' ' ' ' ' 'i;:;:;:;:;:;:;:;:;.,|
    ,.-‐¬ ̄-、¨¬‐、  |\,. 、/  L:;:;:;:;:;:;.;.l
   ////""`'""''ヽソ-‐l=・= =・=  ヽ:;/¨iノヽ、
  //////」  -=== }  |         ,ノ./lllll/、
  i//ノソ,._______,.""'  '".i,  l `_       ./lllll/  ヽ
  ヽ彡i.6 ̄ ̄i.,__ノ⌒i.,_ノ ..::ゝ.,_____,,,...- /llllllll/    ヽ
  /ヽ ゝ'    ,rti.l.l.l.、)ゝノlllllllllゝ.,__,ノlllllllllllllソ     .}
⌒`ヽ、ヽ li       ./ヽllllllllllllllllllllllllllllllllllllllliゝ /    /
、   V ヽ ゝ  _,......__ ノノ  ヽllllllllllllllllllllllllllllllllli/    ./
丶、,.、,ヽ     ミ三   ` ¬ ‐‐---‐¬ ¨ ̄
        ((   ̄ ̄ ¨¬‐- ..,_
          l 川 |
0341デフォルトの名無しさんNGNG
あーあ、役に立たねぇ板だな。時間損した。
0342デフォルトの名無しさんNGNG
>>341
使うのが難しい板ですからね。
質問者のレベルによっては何の役にも立たないんですよ。
0343デフォルトの名無しさんNGNG
>>341
只なんだよ、只。
乞食根性は仕方ないが
少しは隠せ、恥を知れ。
0344デフォルトの名無しさんNGNG
おみやげ。

技術系メーリングリストで質問するときのパターン・ランゲージ
http://www.hyuki.com/writing/techask.html
真・技術系メーリングリスト FAQ
http://www.geocities.co.jp/SiliconValley/5656/

メーリングリストを掲示板に置き換えても通用するから読んでね。
0345↑↑↑↑↑↑↑↑NGNG
ブラクラ
0346デフォルトの名無しさんNGNG
ところで、>>322について誰か知りませんか?
0347デフォルトの名無しさんNGNG
>>346
ある
# 人に聞くよりプログラム書いて時間計れ!
0348デフォルトの名無しさんNGNG
>>347
知らないならだまっててね
0349デフォルトの名無しさんNGNG
チンカス
0350デフォルトの名無しさんNGNG
無限ループの予感!
0351デフォルトの名無しさんNGNG
while (true) {
 ところで、>>322について誰か知りませんか?
 自分で調べてみたら?
 知らないならだまっててね
 チンカス
}
0352デフォルトの名無しさんNGNG
#ってなに
C#って単語を時々きくけど。
0353デフォルトの名無しさんNGNG
>>348は騙りかJava厨、C#厨だと思うが
アセンブラで見るか、それがわからなきゃ
簡単なベンチマークぐらい書けよ。つーか、レベル低杉。

# >>352は釣りと見た。
0354322NGNG
うう、すいません・・・つまらない質問してしまって・・・
私は322以降発言していないのですが・・・
私のせいでなんかスレが荒れてしまって本当に申し訳ない・・・


話は変わるのですが、>>322のレスについて誰かご存知の方はいらっしゃいませんか?
0355デフォルトの名無しさんNGNG
>>354
謝らなくていいから>>353が言っていることを無視するな
0356デフォルトの名無しさんNGNG
今日C++を始めたんですが、
BCC5.5で

/////////////////////////
#include <iostream.h>
int main(void)
{
cout << "test002";

return 0;
}
/////////////////////////
をコンパイルすると、

/////////////////////////
致命的エラー F1003 c:\(省略)\include\stdcomp.h 5: erroe 指令: Must use C++ for STDCONP.h
/////////////////////////

と、表示されコンパイルできないんですが、、、

ちなみに堀越一雄著「決定版初めてのC++」を参考にしています。
著者が使用しているg++コンパイラじゃないと使えないんでしょうか?
それともiostream.hが入ってないだけ?

お願いします。
0357デフォルトの名無しさんNGNG
理論抜きでいきなりベンチとったりアセンブラソース眺める奴は馬鹿。
0358322NGNG
>>355
知らないならズボンのチャックを閉じていてください。
0359デフォルトの名無しさんNGNG
>>356
拡張子がcppになっていないとか
0360デフォルトの名無しさんNGNG
>>356
本古すぎ
0361デフォルトの名無しさんNGNG
オブジェクトのアンワインドの分だけ例外が遅い。
0362デフォルトの名無しさんNGNG
>>357
アセンブラのソース眺めれば理論が分かるだろ
0363デフォルトの名無しさんNGNG
>>359
拡張子は「c」になってます。
>>360
図書館でC++関連の本を探したらコレしかなかったんで・・・。
0364356NGNG
>>357
コレ、私です。
0365356NGNG
>>363-364
失礼こっちでした。
焦りすぎ、、、
0366デフォルトの名無しさんNGNG
>>365
拡張子cppにして本屋にいって本を買ってきなさい
0367356NGNG
>>366
あっ!
出来ました!
ありがとうございます・・・。

何度もスイマセンが
独習用として買う場合のお勧めを教えて下さいませんか?
値段は安ければ文句無いですがひとまず保留として、
C++初心者分かりやすいのをお願いします。
0368デフォルトの名無しさんNGNG
なんでできるんだろ
.hつけるとstd::がいらなくなる???
0369デフォルトの名無しさんNGNG
>>367
ttp://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html

所々間違いもあるっぽいがとりあえずこのへんでもみとけ。
0370デフォルトの名無しさんNGNG
>>368
.h 付きのヘッダは namespace std が無かった頃の負の遺産なので。
0371356NGNG
>>369
参考になりました。
ありがとうございます。
0372デフォルトの名無しさんNGNG
一般的には .h 付きのヘッダは推奨ではないが、
移植性を考えると現状では .h 付きのヘッダのほうがよかったりする。
0373デフォルトの名無しさんNGNG
>>372 んなこたぁない。
0374デフォルトの名無しさんNGNG
C++本気でマスターしようとするなら、本代は最低2万はかかるよねぇ
0375デフォルトの名無しさんNGNG
>>374
最近はネットですむけどね。
0376デフォルトの名無しさんNGNG
>>374
英語が読めれば、ネットで読みきれないほどの記事があふれてる。本要らない。
0377デフォルトの名無しさんNGNG
>>354
だから
「ある」
ってさっき言ったじゃん
0378デフォルトの名無しさんNGNG
>>370
わしの使っている本にはusing namespaceに関する表記がまったくないのですが、
なんかいいサイトを知りませぬか?;q;
0379デフォルトの名無しさんNGNG
>>373
.h 付きでないヘッダに対応している処理系を対応し始めたバージョンを併記して
5つ以上リストアップしてくれ。それができないならそんなこと言うな。
できたら負けを認めよう。
0380デフォルトの名無しさんNGNG
C++勉強中です。
とあるクラスでひとつのメンバ関数をconstにしたら、連鎖的に書き換える必要がでてきて、
最終的に全てのメンバ関数がconstになり、全てのメンバ変数がmutableになりました。
これってたぶん使い方を誤ってますよね。
mutableの効果的な使用法を解説しているサイトはありませんでしょうか?
0381373NGNG
>>379
めんどくさい。STLport使えよ。
0382デフォルトの名無しさんNGNG
>>380
mutable使わない方向でお願いします。
0383デフォルトの名無しさんNGNG
>>381
STLportって printf とか C 言語のときからの標準関数も含んでるの?
0384デフォルトの名無しさんNGNG
mutable を使う例としては参照カウントぐらいで、
それ以外で mutable を使うことは滅多にない。
0385デフォルトの名無しさんNGNG
>最終的に全てのメンバ関数がconstになり、全てのメンバ変数がmutableになりました。

意味なし。最強
0386381NGNG
>>383
ごめん、聞かれてる意味がわからない。
0387デフォルトの名無しさんNGNG
VC7.1でSTLPortって使えるの?
0388デフォルトの名無しさんNGNG
通報しました
0389380NGNG
>>382 >>384
ありがとうございます。
しばらくは mutable は存在しないものとして学習を進めていくことにします。
0390380NGNG
>>385
やっぱり・・・。そんな気はしたんですよね。
0391デフォルトの名無しさんNGNG
メンバ変数を変更するメンバ関数ではconstを付けるな

メンバ変数を見るだけのメンバ関数にはconstを付けろ
0392デフォルトの名無しさんNGNG
メンバ変数を見るだけのメンバ関数なのにiteratorで舐め回すとエラーが出ます。
0393デフォルトの名無しさんNGNG
>>392
const_iteratorでも?
0394デフォルトの名無しさんNGNG
>>392
const_iteratorにしる。
0395デフォルトの名無しさんNGNG
>>392
const_iteratorじゃだめ?
0396デフォルトの名無しさんNGNG
>>379
> .h 付きでないヘッダに対応している処理系を対応し始めたバージョンを併記して
> 5つ以上リストアップしてくれ。それができないならそんなこと言うな。

知らんが、今後シェア最大になるであろう Visual Studio .NET 2003 には .h 付きヘッダが
含まれていないのだが。それでも .h を入れた方が移植性が高いと思うのか?
0397デフォルトの名無しさんNGNG
C++って一貫して一貫性がないな。
0398デフォルトの名無しさんNGNG
322と名乗っている教えて君に【無礼者】のレッテルを貼る
教授または先輩に見放された理由がよくわかる
0399デフォルトの名無しさんNGNG
それは一貫性だな。
0400デフォルトの名無しさんNGNG
>>396
それは今後の話だろ?
現状では同じ VC でも未だにバージョン6が主流。
0401デフォルトの名無しさんNGNG
>>400
で、だから.hつけるのかね?
0402デフォルトの名無しさんNGNG
メタ一貫性だろ
0403デフォルトの名無しさんNGNG
>>396
まじ!?
じゃあCのソースをコンパイルできないじゃん。
0404デフォルトの名無しさんNGNG
>>403
無いのはiosteam.hとかだろ。たぶん。
Cでコンパイルすればいいんだしさ。どうせ。
0405デフォルトの名無しさんNGNG
>>401
.h 付きじゃないとダメな処理系の時にはどうしてるの?
#if をいちいち使ってるの?
0406デフォルトの名無しさんNGNG
>>405
.h 付きだとダメな処理系の時にはどうしてるの?
#if をいちいち使ってるの?
0407デフォルトの名無しさんNGNG
>>406
そんな処理系使ったことないある。
そんな処理系、実際どれくらいあるの?
0408デフォルトの名無しさんNGNG
.h月じゃないと駄目な処理系に出くわしたら
泣く泣く自分で.h付かないヘッダ作って、中で.h付きのファイルをincludeしてください
0409デフォルトの名無しさんNGNG
>>408
で、.h 付きだとダメな処理系ってどれくらいあるの?
0410デフォルトの名無しさんNGNG
>>409
VC++.NET 2003
0411デフォルトの名無しさんNGNG
>>410
それだけなの?
0412デフォルトの名無しさんNGNG
gccでも最近のバージョンは警告出す。
0413デフォルトの名無しさんNGNG
>>412
コンパイルは通るんでしょ?
0414デフォルトの名無しさんNGNG
>>411
67%のシェアをほこる処理系ですが
0415デフォルトの名無しさんNGNG
>>414
旧バージョン含めたらでしょ
0416デフォルトの名無しさんNGNG
>>414
それはどこが公表してるどういう数字?
できたらソースきぼんぬ。
0417デフォルトの名無しさんNGNG
ウザ
0418デフォルトの名無しさんNGNG
>>414
VC++.NET 2002は .h付きもサポートされてるよ。
で、その67%のシェアって、2003のシェアじゃないよな。
0419デフォルトの名無しさんNGNG
.hつけなきゃいけない処理系って何?
0420デフォルトの名無しさんNGNG
ttp://www.trickpalace.net/cgi-bin/cppll/enq.cgi?mode=enquete&number=5

母数が少ないからあんまりあてにはならんけど、
そんなに現状と激しい差はないと思われる。
0421デフォルトの名無しさんNGNG
http://www.trickpalace.net/cgi-bin/cppll/enq.cgi?mode=enquete&number=5
0422デフォルトの名無しさんNGNG
>>419
VC6。
あと、最近のバージョンなら大丈夫だと思うが CodeWarrior も。
0423デフォルトの名無しさんNGNG
VC++6.0にiostreamとか入っているよ?
0424デフォルトの名無しさんNGNG
stdio がアウト。( cstdio なら大丈夫 )
0425デフォルトの名無しさんNGNG
ハードリンクも作れない低脳どもが
0426デフォルトの名無しさんNGNG
あと付け加えとくと VC6 は cstdio にしても
標準関数が std 名前空間に入ってくれないから意味が無い。
0427デフォルトの名無しさんNGNG
>>425
そんなもの必要ありませんがなにか?
0428デフォルトの名無しさんNGNG
>>424
何それ? いやマジで。cstdioは知ってるぞ。
0429デフォルトの名無しさんNGNG
// VCだとアウト
#include <stdio>

int main() {
  printf("hoge\n");
  return 0;
}
0430デフォルトの名無しさんNGNG
とりあえず、「STLPortを入れて.hを抜いとく」のがいいんかな。
0431デフォルトの名無しさんNGNG
VC7.1にSTLPort入れるとエラー出るよ
0432デフォルトの名無しさんNGNG
>>430
STLportって printf とか C 言語のときからの標準関数も含んでるの?

以下ループ・・・
0433デフォルトの名無しさんNGNG
>printf とか C 言語のときからの標準関数
は処理系依存の物が沢山あるからそういうことはないよ
処理系で用意されているオリジナルのヘッダを読み込むだけの
同名のヘッダは用意されているけど
0434デフォルトの名無しさんNGNG
429 名前:デフォルトの名無しさん[sage] 投稿日:03/08/17 23:38
// VCだとアウト
#include <stdio>

int main() {
printf("hoge\n");
return 0;
}
0435デフォルトの名無しさんNGNG
>>433
例えば stdio.h をインクルードしてるだけの stdio があるってことですか?
0436デフォルトの名無しさんNGNG
>>435
stdio.hもcstdioもある
0437デフォルトの名無しさんNGNG
>>436
そうなんだ、知らなかったよ。情報ありがとう。

でも >>431 によると STLport を使う事で問題が
万事解決ってわけでもなさそうですね。
0438デフォルトの名無しさんNGNG
>>429
> #include <stdio>
そりゃアウトだろう。
0439デフォルトの名無しさんNGNG
初めて見たよ
0440デフォルトの名無しさんNGNG
>>435 と >>436 は、微妙に話がかみ合ってない。(cの一文字)
で、>>424と>>429は、無視でよろしいですか?
0441デフォルトの名無しさんNGNG
>>422
デマはよせ。VC++ は 4.2 から <iostream> を持っとる。

>>440
> で、>>424と>>429は、無視でよろしいですか?
>>403とかも無視でよろしいと思う。
0442デフォルトの名無しさんNGNG
結局、 >>372 が諸悪の根源か?
0443デフォルトの名無しさんNGNG
で、結局のところどういうことなの?
.h 付きだとダメな処理系は VC++.NET 2003 オンリーで、
.h 無しだとダメな処理系は?
0444デフォルトの名無しさんNGNG
>>443
>.h 付きだとダメな処理系は VC++.NET 2003 オンリー
これが正しいわけだが。つーか規格嫁。
0445デフォルトの名無しさんNGNG
>>444
なんだその噛み合ってないレスは
0446デフォルトの名無しさんNGNG
>>444
規格も大切だが移植性の話してるんだから
現状がどうなっているかは重要。
規格にしたがったからって実際に現実の移植性が
いいかとは別問題。
0447デフォルトの名無しさんNGNG
>>446
で、きみは.hつけるのかね?
0448デフォルトの名無しさんNGNG
>>447
その参考にする為に訊いてるんだから
つけているかつけていないか別問題だろ。
頭悪いなぁ。
0449デフォルトの名無しさんNGNG
>>448
規格は一つ。
現実問題は処理系の数だけある。
どっちに依るかは使う処理系によって自ずと決まろう。
0450デフォルトの名無しさんNGNG
規格にすがる気持ちは無いけど、一定の拠り所はほしいよな。
0451デフォルトの名無しさんNGNG
規格規格逝ってる香具師はANSIC++規格に100%準拠したコンパイラが出るまで、
C++を使わないで下さい。
0452デフォルトの名無しさんNGNG
>>450
そうそう。規格通りに実装されてなければ意味をなさないし、
実際問題、まだ全てが規格通りに実装されるわけでもないんだし。
0453デフォルトの名無しさんNGNG
移植性移植性逝ってる香具師はembedded系のC++コンパイラサブセットでも通るコードだけ書いて下さい。
0454デフォルトの名無しさんNGNG
>>453
実際にそれを使う奴は他の処理系でも意識してコード書くだろ。
特に共通で使えそうなコードならなおさら。
0455デフォルトの名無しさんNGNG
要するにだ、今の規格は現場のニーズを満たしていないと。現場のニーズは
規格化するにはあまりにも多岐にわたっていると。そういうことだな?
0456デフォルトの名無しさんNGNG
拠り所が欲しい奴は↓に従え。

まず規格通り .h 無し。
エラーが出るようなら STLport を検討。

それでダメなら .h を足して、対応する std:: の使用を変更する。
このとき、移植性が必要なソースなら処理系で定義済みの
プリプロセッサシンボルで .h の追加、namespaceの変更をスイッチ可能にしておく。

それでだめなら諦めて実装を変える。
このとき、移植性が必要なソースなら処理系で定義済みの以下略
0457322NGNG
プププ 流石低能ばかりがいるスレですね。
0458デフォルトの名無しさんNGNG
>>457
また来やがったなw
0459デフォルトの名無しさんNGNG
ttp://www.tietew.jp/cppll/archive/121
0460322NGNG
ああっ、なんてレベルが高いスレッドなんだ。これじゃ誰もついていけない。
2ちゃんねるも捨てたもんじゃないな。まだこんなレベルが高いスレッドが
あるんだもんな。しかし、ここに書き込んでいる連中は相当なレベルの高さ
だよなぁ。これじゃ、こんなにレスがつくのも当たり前だよ。本当に322の
レベルは高いと思うけど、それについて行ける奴も凄いな。まったく尊敬
するよ。おれもみんなを見習ってレベルの高い人間になれるように精進する。
そして、みんなについて行けるような立派なプログラマになるよ。まだ見習い
だけど3ヶ月後の俺を見ていてくれよ。みんなをアッと言わせるプログラマに
なるからさ。その時まで、みんなもレベルが高いのを持続してくれよな。
ほんと、2ちゃんねるに来て幸せだよ、オレは幸せものだなぁ。
0461デフォルトの名無しさんNGNG
>>460
長文オツカレー、だけどみんなもう飽きちゃってんだよねぇ…。
04621NGNG
//Basic.h
class Basic {
public:
int b;
Basic() {b=10;}
};

//C1.h
#include "Basic.h"
class C1 : public Basic {
public:
int cc1;
C1() {cc1 = 1;}
};

//C2.h
#include "Basic.h"
class C2 : public Basic {
public:
int cc2;
C2() {cc2 = 2;}
};
04632NGNG
//Main.cpp
#include <iostream>
#include "C1.h"
#include "C2.h"
using namespace std;

int main(int argc, char** argv) {
C1 c1;
C2 c2;
cout << "c1.cc1=" << c1.cc1<<"c1.b="<< c1.b;
cout << "c2.cc2=" << c2.cc2 <<"c2.b="<< c2.b;
return 0;
}

%c++ Main.cpp
In file included from C2.h:1,
from Main.cpp:3:
Basic.h:2: redefinition of `class Basic'
Basic.h:2: previous definition of `class Basic'

となってしまいます。どうしたらよいのでしょうか?
0464デフォルトの名無しさんNGNG
とりあえずインクルードガード
0465322NGNG
>>461
コピペにマジレスオツカレー、だけど俺も飽きてんだよねぇ・・・どうしよう・・・
0466デフォルトの名無しさんNGNG
>>465
とりあえず、話を聞いてくれる友達を作れw
0467デフォルトの名無しさんNGNG
>>464
できましたー。蟻が�。
こんなのに、何時間もかけてたなんて…鬱。
0468デフォルトの名無しさんNGNG
標準では
ネットワークサポートしてないのでしょうか?(C or C++)
VCなのですが、sys/socket.hなどが見つかりません。
0469デフォルトの名無しさんNGNG
>>468
Winsockなんてのがあるよ。でも、あまり期待しないでね。
0470デフォルトの名無しさんNGNG
ネットワークは、標準にはならないと思うよ。
ネットワークが不要な環境や不可能な環境もあるわけで、
ネットワークがCやC++の標準になってしまうと、そういう環境では
非標準のコンパイラしか供給できなくなる。
0471デフォルトの名無しさんNGNG
GUIは、標準にはならないと思うよ。
GUIが不要な環境や不可能な環境もあるわけで、
GUIがCやC++の標準になってしまうと、そういう環境では
非標準のコンパイラしか供給できなくなる。
0472デフォルトの名無しさんNGNG
STLは、標準にはならないと思うよ。
STLが不要な環境や不可能な環境もあるわけで、
STLがCやC++の標準になってしまうと、そういう環境では
非標準のコンパイラしか供給できなくなる。
0473デフォルトの名無しさんNGNG
>>469-470
とりあえずOSで用意されたものを使うことにしました。
ありがとうございました。


0474デフォルトの名無しさんNGNG
一気にレスを読んで、例外に関する話が出てきたけど、
http://www.cuj.com/documents/s=8250/cujcexp2106alexandr/
で紹介されている Enforce を使ってみてはどうかと思う。
実際に使ってみると Log とる時にすごく便利。

何気に std::runtime_error を std::string で実装している環境向けなので、
STLport では使えなかったりするが。
0475デフォルトの名無しさんNGNG
>424 >429
それは、c++の規格通り。
0476デフォルトの名無しさんNGNG
(unsigned int)aは、
coutで変数を表示したりする時に一時的に内容をint型に変更するって理解で合ってますか?
0477デフォルトの名無しさんNGNG
aの型は変わらない
0478デフォルトの名無しさんNGNG
>>476
a を usigned int として解釈する、
もしくは a から usigned int の一時変数を作成することを意味する。
0479デフォルトの名無しさんNGNG
VC++で.h付きのと.h無しのとを混ぜるのはやめような。
どっちをincludeするかで使われるライブラリが異なる。
0480デフォルトの名無しさんNGNG
>>476
a の値を unsigned int に変換した値を得るだけ。
a 自身に変化は無い。
-a が a の値の符号を逆転させた値を得るだけで
a 自身に変化が無いのと同じように。
0481デフォルトの名無しさんNGNG
Javaをあまり知らないので聞きたいのですが、
C++のSTLみたいなgeneric programmingってJavaでそのまま使えます?
0482デフォルトの名無しさんNGNG
>>481
ダウンキャストの嵐でよければ、現状でもそれなりには、
container/iterator/algorithm ... みたいなものはある。

けど、もっとマシな Generics は JDK 1.5 に期待せよ。
http://objectclub.esm.co.jp/JavaGenerics/
0483デフォルトの名無しさんNGNG
>>482
ありがとう。かなり参考になった。
0484 ◆uDXNh2HK82 NGNG
Microsoft Visual C++ .NETとBorland C++Builder 6のどちらを買ったほうがいいですか?
使用目的はC++の勉強や趣味にしたいと思っていますが、本格的なアプリケーション作成も十分出来るなどの点を踏まえて教えて下さい。
0485デフォルトの名無しさんNGNG
>>484
VC .NET 2003 にしとけ。
Borland はもう結構長いことバージョンアップしてないし。
0486デフォルトの名無しさんNGNG
>>484
.NET Frameworkかcygwinでまずは遊ぶのがいいよ。
金出したからといってプログラミングができるようになるわけじゃない。
書籍に金をかける方がいい。
0487デフォルトの名無しさんNGNG
IDE無しじゃ学習効率は大幅にダウンする。
書籍以前の問題だな。
0488 ◆uDXNh2HK82 NGNG
>>484です。
C++の勉強と書きましたが、GUIの勉強に近いです。
C++の書籍は購入し、Linuxも持っているので標準入出力、反復、条件分岐、ポインタなどはある程度出来ます。
GUIをやろうとするとなんか調子が悪いし、Windowsなどでフリーで提供されているソフトよりもわかりづらい部分もあるので、Windowsでの開発環境を買ってみたいと思いました。
WindowsのAPIも利用したいです。
でもCUIならgccはとてもいいです。
0489デフォルトの名無しさんNGNG
抽象クラスのコンストラクタはpublicでOKでしょうか?
0490デフォルトの名無しさんNGNG
>>489
純粋仮想関数をもってないならprotectedにしとくといいよ。
0491デフォルトの名無しさんNGNG
privateにしていいの?
0492489NGNG
えと、抽象クラスということで、pure virtualありです。
> 純粋仮想関数をもってないならprotected
は何故なのでしょうか? おしえていただけると嬉しいです。
0493デフォルトの名無しさんNGNG
>>492
Abstract not_implemented;
って感じに抽象クラスのインスタンスを作ってもエラーにならないから。
0494489NGNG
ああ、なるほど。サブクラスでoverrideしなくてもいいけど、
抽象クラスそのものをインスタンス化してもらっちゃ嫌だと
いうことですね。ありがとうございます。
0495デフォルトの名無しさんNGNG
>>491
全然OK。
そういう設計もある。
0496デフォルトの名無しさんNGNG
教えてください。
int i=15 * 6 * 0.7; // 62
int i=15 * 0.7 * 6; // 63
で前者は62に後者は63になるのですが
これは一体なんなんでしょうか?
0497デフォルトの名無しさんNGNG
C++に関係あるんでしょうか
0498デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0+%E8%AA%A4%E5%B7%AE&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
http://www.google.co.jp/search?num=30&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&q=%E6%BC%94%E7%AE%97%E5%AD%90+%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D+%E7%B5%90%E5%90%88&lr=lang_ja
0499496NGNG
>>498
ありがとうTT
0500デフォルトの名無しさんNGNG
質問です。
プログラムの実行中に、関数を動的に書き換えたいと考えています。
そこで、オリジナルの関数を宣言した時、
その関数のポインタを得ることは出来ますが
関数の終端を得るにはどうすればよいでしょうか?
(この「終端」はアセンブラ命令でいうretの位置だと捉えてください)
0501デフォルトの名無しさんNGNG
>>500
オリジナルを動的に書き換えるのは(確か)無理。
char型の配列を書き換えてcallならできるだろうけど。
0502デフォルトの名無しさんNGNG
配列にコピーしたいから終端を知りたいんですけど。
0503デフォルトの名無しさんNGNG
>>502
だから無理。はじめから配列にアセンブラで命令入れとけ。
0504500NGNG
回答どうもありがとうございます。
WriteProcessMemoryでどうにかなるかな?
と思ったのですが、無理なのですね〜勉強になりました。

御教授いただいたchar型配列のcallを試してみます。
どうもでした。ちなみに502は私ではありませんが、すいませんです。
0505502NGNG
じゃあなんで終端を知りたいんだろう。
0506500NGNG
>505
そうでした・・すいません。
最初と変わって申し訳ないのですが、オリジナルの関数以外も視野に入れさせてください。
書き換えは不可能でも、関数の内容の読み取りを行いたいんです。

そこで、ちょっと終端検出を考えて試してみたのですが
void a(〜)
{
 〜
};
void b(〜)
{
};

と隙間無しに宣言して、aとbのポインタを見てみると
bはaの直ぐ後ろに確保されているようで
b-1がaの終端ということでいいのかも、と思ったのですが
この方法は、あまりよくないんでしょうか・・?
メモリの確保のされ方はOSのほうの話になりますか?
0507 NGNG
>>506
OS じゃなくてコンパイラの出すコード次第だと思う。
(リンカも多少仕事する余地があるかな)

>この方法は、あまりよくないんでしょうか・・?
どっちにしろ移植性ゼロなんだから、C++ の話題じゃあないし、
あまり気にせず出来るやり方でやればよいと思うよ。
Win32 ならコード書き換えるんなら VirtualProtect(Ex) でチャクチャキっと。
0508デフォルトの名無しさんNGNG
>>506
書き換えとか読み取りとかって・・・
コンパイルというものを理解しているかな?
アセンブラとか、マシン語とかって知ってる?
メモリーの中に、Cの関数が入っているわけじゃないよ。
最近はソースコードデバッガがあたりまえだから、そういう錯覚に陥りやすいのかもしれないけど。
0509デフォルトの名無しさんNGNG
>>508
>>500みるかぎり、その辺は分かってるんじゃないかな
0510デフォルトの名無しさんNGNG
書き換えたいんだったらOpenC++のMOP使う方が格好いいよ。
0511デフォルトの名無しさんNGNG
てか、関数ポインタを使えと小一時間・・・
0512デフォルトの名無しさんNGNG
スレ違い+マルチ
氏ね
0513デフォルトの名無しさんNGNG
>>506
>と隙間無しに宣言して、aとbのポインタを見てみると
>bはaの直ぐ後ろに確保されているようで

そんな保証はない! ・・・と断言してみせた。
さあ次はお前の番だ。保証があると反駁してみせろ。
0514デフォルトの名無しさんNGNG
コンパイラの設定によってはインラインになるかもしれんしな。
0515デフォルトの名無しさんNGNG
ぶっちゃけ最初どういうプログラムかいて勉強すりゃいい?
javaだったらGUI簡単につかえてやる気がでるんだが・・・

どこかほどほどに大きいサンプルプログラムおちてるとこないっすか?
0516デフォルトの名無しさんNGNG
今は大概のアプリケーションがフリーであったりするから
プログラミングのためのモチベーション維持するのが大変だよな。
大きなものはいきなりは作れないだろうし。
0517デフォルトの名無しさんNGNG
>>515
Qtはいいよ!!!!
0518デフォルトの名無しさんNGNG
クラスのメンバ変数?で三次元配列使いたいんですけど、初期値を代入する方法としてファイルも使わずスマートに記述する方法ってありますか?
0519デフォルトの名無しさんNGNG
Qtよりgtkmmがいいよ
0520デフォルトの名無しさんNGNG
>>518
もうちょっと、詳細な状況説明をおながいします。
0521518NGNG
>>520
理解できない馬鹿は黙ってろよ。


わかってる人、よろしくお願いします。
0522デフォルトの名無しさんNGNG
単次元配列に初期値用意してループ使って初期化。
0523518NGNG
>>521
禿道。>>520みたいなやつって邪魔だよね。
0524デフォルトの名無しさんNGNG
粘着Java厨、C#厨警報!
質問者はトリップを忘れずに。
0525デフォルトの名無しさんNGNG
>>521>>523
三次元配列は固定長なのか、初期値は定数なのか、その辺次第だろ?
0526デフォルトの名無しさんNGNG
ジサクジエンカコワルイ
0527デフォルトの名無しさんNGNG
三次元配列を使いたいといっている時点でスマートじゃない罠。
0528 NGNG
C++ でメソッドの定義を記述するとき、
あいまいさがない限りは this-> を省略できますよね。
これの this-> を強制するようにはできますか?
それってコンパイラごとのオプションで #pragma で指定するようなものなんでしょうか。

ローカル変数で同じ名前の変数を使ってしまって、
それがバグの原因になるということが頻繁にあるので、
明示的に this-> を使うように強制したい、と思うんです。

使用しているのは gcc 2.95.2 です。
0529デフォルトの名無しさんNGNG

コーディング規約
0530 NGNG
>>529
みんなが規約をきっちりと守ってくれたらいいんですが…
0531デフォルトの名無しさんNGNG
>>528
コンパイラでは規制はできない。
そんな腐ったルールを強制するよりは
名前ルールのほうで回避するのが普通
(ローカル変数は小文字だけ、とかメンバ変数はm_つけるとかそういう類。
コーディング規約スレ参照)
0532 NGNG
>>531
やっぱりそうですか…
現状、ローカル変数は aaa_bbb_ccc 系の命名方法、
クラスの変数は aBbbCcc 系の命名方法にしているんですが
(Windows 系のプロジェクトとあわせるためもあって)、
守ってくれない人もいるんで強制できたらなぁと思った次第です。

PHP のようにデフォルトで強制される言語もあるんで、
Web がらみの仕事も多いうちではどうせなら C++ でも強制してしまえ、とばかりに。
0533_NGNG
http://homepage.mac.com/yamazaki8/hankaku09.html
0534デフォルトの名無しさんNGNG
>>532
名前ルールで分割しない場合、
人間が見てもthisを付けるべきかの判断がそもそも困難なので
コードレビューをしてもミスを残す危険がある。
(問題をおこす場面というのは同一の名前の場合なわけだからね)

しかし名前ルールで分割する場合、宣言をレビューした時点で
誰もが違反を指摘できる。
0535 NGNG
>>534
宣言を見た時点で、その名前の付け方は違反だと指摘できる、ということですね。

問題は無意識にメンバ変数と同じ名前のローカル変数を使ってしまっても、
コンパイラにはそれを検出するすべがないということだと思うんです。
まぁコンパイラによっては警告を出してくれるものはあるみたいですけど。

ん?もしかしたら -Wall で g++ は警告出してくれるんじゃないか?
んなことないか。
0536デフォルトの名無しさんNGNG
>>535
組織でやってるのなら確実にレビューをすればそういうチェックと共に
多くの問題を発見できるんだが脳。

ちなみに名前を隠蔽する場面ってのは、メンバ変数以外にも
引数やらローカル変数同士ですらあるし、 namespace + usingも罠だな。
0537 NGNG
>>536
ですね、特にヘッダファイルの中に using かかれた日にゃぁ。
それが与えられたライブラリのヘッダファイルだったりすると…最悪。
0538デフォルトの名無しさんNGNG
ちょっとくだらない質問なのですが、お願いします。
shared_ptrが使える場合は、徹底的に使った方が良いでしょうか?

使わない方が良いっていう場面が、あったら教えてください。
0539デフォルトの名無しさんNGNG
値でいい場合
0540デフォルトの名無しさんNGNG
もう少しこう……いえ、いいです
0541デフォルトの名無しさんNGNG
>>538
間違いなくatd::auto_ptrより速度が遅いと思うので、コンテナに入れる時
以外は使わなくていいんじゃなくて?
0542デフォルトの名無しさんNGNG
std::auto_ptrのTYPOですたスマソ
0543デフォルトの名無しさんNGNG
shared_ptrを一回参照はがししてしまった上でもう一回別のshared_ptrに入れたときには
カウンタが分裂してしまうこともあったりするかもね。

そういう使い方をしなきゃならんときはオブジェクト自身にカウンタを持たせて
intrusive_ptrのほうがいいかも、とか。
(メモリ効率もいいし)
0544デフォルトの名無しさんNGNG
//hoge.hh
#if __cplusplus
extern "C++"{
#endif //__cplusplus
class Hoge{
Hoge();
~Hoge();
printHoge();
};
#if __cplusplus
}
#endif //__cplusplus

というようなclassを作った時に、
Hoge(), ~Hoge, printHoge
をC言語から呼び出して使う方法はあります?
0545デフォルトの名無しさんNGNG
muri
0546デフォルトの名無しさんNGNG
>>538
new は代表的な重い処理のひとつで、shared_ptr は参照カウンタの為に余分に
new が行われるから shared_ptr を多用し過ぎするとそこそこパフォーマンス影響がでるハズ。
だから、沢山作られるオブジェクトなら shared_ptr を使わずにその本体のオブジェクトに
参照カウントを内臓するような設計にしたほうがいい。
とは言っても例によって最近のマシンはパワフルだからフツーは shared_ptr を
使いまくっても問題ナッシングだとは思う。
0547デフォルトの名無しさんNGNG
>>544
そもそも C では class が作れんし。

まぁ、無理やりそれっぽいことをすることはできる。
IDirectDrawSurface とかの COM のヘッダファイルが
ある程度参考になるのではないかと。
0548デフォルトの名無しさんNGNG
>>541-543
あれから自分でソース読んでたのですがさっぱりで…助かりました。

速度はやはり落ちるのですね。ちょっと特殊な用途なので
参照はがしもありそうで…intrusive_ptrは初耳、勉強しておきます。
やっぱり訊いて良かった…。

ひとまずコンテナのみに使用しておきます。レスありがとうございました。
0549デフォルトの名無しさんNGNG
>>546
書いているうちにすいません。なるほど、生成にかなりコストが…。
ちょっと貧弱なマシンも考えなければなので、これは根本から見直さないと…。

いやはや本当に助かります。レスサンクスです。
0550 NGNG
C は sizeof を使わないとビット幅が確定しないのがなぁ。
あと、符号{つき|無し}{右|左}ローテートとかもあったら便利なのになぁ。
ビット演算やりたければアセンブラつかっていう話もあるけど、
そういう低レベルのところを言語仕様に入れてくれてもいいのになぁ。

歴史的には高級言語としてそういうのを隠蔽しようとしてきたんだろうけど、
いまの C の価値はむしろそういうレベルのコード生成の透明性にあるからなぁ。
0551デフォルトの名無しさんNGNG
ビットフィールド
0552デフォルトの名無しさんNGNG
つまり、shared_ptr だの、smart_ptr だのをあまり利用せず、
IUnknown 継承して、CComPtr つかえってことですね。
0553デフォルトの名無しさんNGNG
>>550
ローテイトもってる CPU じゃないと
実装が面倒になるというのもあったのではなかろうか。多分。
0554 NGNG
>>553
ははぁ、そうなのかもね。でもなぁ 8bit の時代からあったからなぁ。
ところで、皆さん整数の桁あふれとかはちゃんと対処しています?

加算命令で int の幅を超えちゃっても、
C の言語仕様上は検出するすべがありませんよね。
多くのプロセッサは桁あふれを検出することができると思うんですが、
C からも使えたら便利だとは思いませんか?
0555デフォルトの名無しさんNGNG
ローテイトを何に使いたいんだ?
それが気になる
0556デフォルトの名無しさんNGNG
C言語の生い立ちから考えるとやっぱりその辺は
「アセンブラを使用汁」ってことに尽きるんでしょうなぁ。
0557 NGNG
>>555
要素が0と1だけからなり、加算がXORで表現される、
激しく巨大な行列の演算。

グラフ理論なんかでよく出てくる。
0558デフォルトの名無しさんNGNG
>>加算命令で int の幅を超えちゃっても、C の言語仕様上は検出するすべがありませんよね

計算量増えるけど先に確かめておけばいい
C++なら検出つきの整数クラスでも作ればいいだろう
それならすぐ元に置き換えられるし
0559デフォルトの名無しさんNGNG
>>557
やはりローテイトの出番がよく分からんなあ
0560デフォルトの名無しさんNGNG
C# だとオーバーフローを検出できるんだっけ?
0561デフォルトの名無しさんNGNG
Effective STLに書いてあった等価と同値の違いがいまいち分かりません。
詳しく説明して欲しいな。
0562デフォルトの名無しさんNGNG
>>561
んー、あれが一番詳しい(というかわかりやすい)説明だと思うが・・・。
0563デフォルトの名無しさんNGNG
C++でXMLやるのに良いサイトありますか?
そもそもXMLは仕様が固まったのでしょうか?
0564デフォルトの名無しさんNGNG
>>563
http://pc2.2ch.net/test/read.cgi/tech/1017641205/
0565デフォルトの名無しさんNGNG
>>560
できるよ。
コンパイラオプションに -checked つけるか、
checked(式) ってやると例外が発生するようになる。
0566デフォルトの名無しさんNGNG
XMLは仕様が固まったのでしょうか、っていつの時代の人なんだ。
0567デフォルトの名無しさんNGNG
c++で端末を直接制御するためのライブラリって
ncursesであってます?
0568 NGNG
>>567
まぁそれが一般的だろうね。
■ このスレッドは過去ログ倉庫に格納されています