C++相談室 part20
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v
NGNGただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。
過去スレ、関連スレ、関連リンクなどはこちら>>2-10
0002デフォルトの名無しさん
NGNG0003v(^・^)v
NGNG[Stroustrup]
禿 http://www.research.att.com/~bs/
C++に関するリンクの総本山でもあります。
[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/
[Object Management Group]
http://www.omg.org/
[Association of C & C++ Users]
http://www.accu.org/
[news]
news:comp.lang.c++
news:comp.lang.c++.moderated
[ML]
cppll(日本語) http://www.trickpalace.net/cppll/
メインページにC++に関する良質なC++日本語リンク集があります。
0004デフォルトの名無しさん
NGNGおつ
0005デフォルトの名無しさん
NGNG乙
0006v(^・^)v
NGNGC++FAQ Lite http://www.parashift.com/c++-faq-lite/
C++FAQ(日本語) http://www.bohyoh.com/CandCPP/FAQ/
Cとその仕様を比較しながらの解説なので分かりやすい。
*** 質問の前に必ずこの二つに目を通してください ***
[STL]
http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
Standard Template Library プログラミング on the Web
リファレンス的内容。http://www.wakhok.ac.jp/~sumi/stl/
STL Programmer's Guide http://www.sgi.com/tech/stl/
[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
news news:gmare.comp.lib.boost.devel
0007デフォルトの名無しさん
NGNGz
0008v(^・^)v
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/
0009v(^・^)v
NGNG[GCC]
http://gcc.gnu.org/
(Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
1.0 http://www.microsoft.com/japan/msdn/netframework/downloads/sdk.asp
1.1 http://msdn.microsoft.com/library/default.asp?url=/downloads/list/netdevframework.asp
[MSVC] コンパイラ以外のツール、ドキュメントです。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
(一括ダウンロードの時は上のURLに続けてこちらを入力してください
default.htm?p=/msdownload/platformsdk/sdkupdate/psdk-full.htm)
なお上記三者を組み合わせたプログラミングにおいてはこちらが分かりやすいです。
http://www.geocities.com/Tokyo/Ginza/5432/documents/winprog/index.html
[DigitalMars]
http://www.digitalmars.com/
[OpenWatcom]
http://www.openwatcom.org/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm
0010v(^・^)v
NGNGBoost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
LokiPort
MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
MSVC6.0 SP5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
ACE/TAO http://www.cs.wustl.edu/~schmidt/
Network、Thread、ORBなどのポータブルなライブラリ
Blitz++ http://www.oonumerics.org/blitz/
数値計算ライブラリとして人気がある、らしい
antlr http://www.antlr.org/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ
他ライブラリリンク集
http://www.trumphurst.com/cpplibs/cpplibs.phtml
0011v(^・^)v
NGNGPart1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
Part9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
Part10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
Part11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
part12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
part13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
part14 http://pc2.2ch.net/tech/kako/1041/10413/1041328679.html
part15 http://pc2.2ch.net/tech/kako/1043/10436/1043605481.html
part16 http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html
part17 http://pc2.2ch.net/tech/kako/1047/10475/1047560042.html
part18 http://pc2.2ch.net/tech/kako/1050/10501/1050177746.html
part19 http://pc2.2ch.net/test/read.cgi/tech/1052625846/
0012v(^・^)v
NGNG【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
0013Java!
NGNG0014v(^・^)v
NGNG[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
0015v(^・^)v
NGNGpart1 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
0016デフォルトの名無しさん
NGNGおつカレー。
0017デフォルトの名無しさん
NGNGあんがと
0020デフォルトの名無しさん
NGNGムァー、今日は夜飯ぬいて寝るつもりだったのに、激しくカレー食いたくなった。
0021デフォルトの名無しさん
NGNGワラタがいい大人なんだからこういうことはやめような。
ところで前スレの標準化うんぬんについてだが、
標準化されてないと、プロジェクトによってはライブラリ使わしてくれんなんてこともある可能性があるから
可能な限り標準化してほしい。
あと、他人のソース読むときにいかにもコンテナってライブラリのソースを何度もみる羽目になりそーなのもいやだ。
0022名無し
NGNGどうすればいいですか?Javaだとthis();でできたんだけど
0025デフォルトの名無しさん
NGNG確かに呼ぶ事はできるけど、
基底クラスのコンストラクタが二度呼ばれない?
0026デフォルトの名無しさん
NGNG>>22
答えはこちら
ttp://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3
0027デフォルトの名無しさん
NGNGだよねー。
C++ も別のコンストラクタを綺麗に呼ぶ構文くらい
作ってくれよなー、と言いたい。
基底クラスのコンストラクタが二度呼ばれるようなものか、
初期化指定子に書いてあるものが無視されるものか、
どちらか1つなんてイヤン。
0028デフォルトの名無しさん
NGNG「コンストラクタの実行完了」を以って
「オブジェクトの構築完了」とするルールがあるので、
そう簡単に作れるものではない。
0029デフォルトの名無しさん
NGNG初期化指定子のみ継承する構文と、内容を呼ぶ構文と、
両方用意すればいいんじゃないかなぁ。
0030デフォルトの名無しさん
NGNG> 初期化指定子に書いてあるものが無視される
どうやったらこんなことになるのですか?
0031デフォルトの名無しさん
NGNGA(){
hoge();
}
A(int){
〜
hoge();
}
hoge(){
}
};
でごまかしちゃダメかしらん。
0032デフォルトの名無しさん
NGNGc++は型のチェックが厳格ということで使い始めたのですが、
代入や引数の渡しでdoubleにintやcharが代入できたりして
しまうのですが、これで厳格な型チェックといえるのでしょうか?
0033デフォルトの名無しさん
NGNG003432
NGNG初心者なものでまだ不都合に出くわしてないのですが、
c++コンパイラがどんな基準で型チェックを行っているのか
が仕様がわからなかったもので。
数値型間なら上位型へは自動キャストするとかいうのなら
分かるのですが、doubleにcharを入れるときなどはキャスト
指定させるべきなのではと思いまして。
またコンパイラのオプションで型チェックの厳密性を設定
できたりするのでしょうか?
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNGcharは"1文字を表現できる値範囲を持つ数値型"っていう感じ。
C/C++は厳密な意味での"文字型"というもの自体が無いよ。
003834
NGNG003934
NGNGレスありがとうございます。
そういうことなんですネ。
0040鈴木健一郎 (NT4.0/2000/XP)
NGNG参照型っておおよそどんなものかは分かるんですが、具体的には
どのような使い方をするんですか? デバッグ専用?
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNGコピーコンストラクタ
あと、個人的(?)には引数で const xxx * の代わりに const xxx &
呼び出し側からみるとポインタで渡してる場合は内容をいじってるとか区別がつくので。
0043デフォルトの名無しさん
NGNG8進数や16進数に変換するやり方がどうしてもわかりません。
一つ一つの数値を配列に入れて表示させればイイと思うのですが・・・
教えてエロイ人(*´Д`)人
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNGG(o^−^o)gle < 検索しようね
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
(^^)
0048デフォルトの名無しさん
NGNGchar ch[9999];
while ( MyFile.getline(ch, 9999) ) {
mBuffer = mBuffer + ch + "\n";
}
だと遅いんでつよ。
なんか他に方法あると思うんだけど。
0050デフォルトの名無しさん
NGNGコンピュータの処理速度を上げる
0051デフォルトの名無しさん
NGNG思いっきり遅くなる原因が含まれているような気がするにょ。
0052デフォルトの名無しさん
NGNGfread
setvbuf
あたりで調べる
0053デフォルトの名無しさん
NGNG↓
mBuffer += ch;
mBuffer += "\n";
多少速くなるよ。
0054デフォルトの名無しさん
NGNGmBuffer = mBuffer + ch + "\n";
なかなか高度なネタですね…
0055デフォルトの名無しさん
NGNGmBuffer = static_cast<char*>map;
でok
0056デフォルトの名無しさん
NGNGクラスの関数にアクセスするのに
�@CHoge::Func()
�Athis->Func()
�BFunc()
この3つでは意味が違うのでしょうか?またパフォーマンスに
違いはあるのでしょうか?(自分はVCなのですが自動メンバ
が出てほしいので�Aで行ってしまうのですが...)
0057デフォルトの名無しさん
NGNGなるほど。いろいろ方法はあるんですね。サンクスです。
いま気付いたんだけど、mBufferをstringにしてるから最強に遅くなるぽい。
こういうところで使っちゃいかんのかな。
0058デフォルトの名無しさん
NGNGclass Test{
enum {NUM=10};
static int data[NUM];
};
このようなクラスを作ります。このとき、data[]を定義するときに
static Test::data[]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
これしか方法はありませんか?これだとNUMを変えたときに、定義も書き換える
必要がありますよね。なにか、スマートな書き方はありますか?
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGいまいちやりたいことがわかんないな。
0062デフォルトの名無しさん
NGNGもし Func が仮想関数で、
CHoge から派生したクラスでそれをオーバーライドしてた場合、
1は2&3とは違う。
2と3は多分常に同じ。
パフォーマンスは気にしなくていい。
ただ、自動的にメンバリストを出すのって、
this-> 以外でも何か方法なかったっけ?
最近 VC 使ってないんで忘れたけど。
0063デフォルトの名無しさん
NGNGstatic Test::data[]={0};
って書くと、不足分は0で初期化される。
あと、
memset( Test::data, 0, sizeof Test::data );
ってやってもいい。
最も重要なのは、スタティックメンバTest::dataが、
ほんとに必要なのかどうかを再検討することだ。
006456
NGNGレスどうもです。m(__)m
書籍の例とかはほとんど�Bで書いているので不安
だったのですが見づらいからなんですかね。
あと仮想関数があるから�@も意義があるのですね。
自動メンバはメニューとショートカットにもありました(^^);;
0065デフォルトの名無しさん
NGNG仮想関数、継承について勉強することをお勧めする。
あと、関数のスコープについても。
0067デフォルトの名無しさん
NGNGどうも、ありがとうございます。
スタティックメンバを使うのって、設計の仕方としてはだめなんですか?
あるメンバ関数の戻り値を決めるときに、自分自身のデータだけでなく、別の
インスタンスのデータも必要なときに使おうと思ったんです。例えば、自分自身の
データが作成されたインスタンスのデータの平均値よりも大きいかどうかを
返すメンバ関数とかです。
class Test{
static Test* tests[100];
int value;
public:
bool IsOverAve();
}
こんな感じで、コンストラクタは呼ばれたときに、自分自身のポインタを配列の
あいているところに登録するようにします。
こうしておけば、うまくいくように思ったんですが・・・。
0068デフォルトの名無しさん
NGNG> いま気付いたんだけど、mBufferをstringにしてるから最強に遅くなるぽい。
> こういうところで使っちゃいかんのかな。
stringが中で何をやっているかを理解すれば、
皆がキミのコード見て卒倒しそうになった(笑)理由も理解できると思うにょ。
0069デフォルトの名無しさん
NGNGstatic メンバにしたら「唯一」しか存在しなくなっちゃうから、
2 つ作りたいなー、ってときに困る。
2 つ作ることは無いな、ってものだけ static メンバにする。
その例の場合はそれが何の比喩か分からないので微妙だけど、
確かにそういう感じのことをするときに static メンバを使うことがある。
もしそういうデータの集合を複数扱いたい場合は、
データの集合とデータとでクラスを分けると良い。
0070デフォルトの名無しさん
NGNG何故それを static にする必要があるのか、というかそういう思考になってしまうのか謎だな。
クラスの汎用性も拡張性もすべてパーだ。
Test のインスタンスを保持するような別のクラスを作って、
平均値だのなんだのっていう処理はそっちに任せれば?
0071100人に1人
NGNG◎人の嫌がることをズケッと言うのはこんな奴!
<アスペルガー症候群(自閉症スペクトラム)←脳の機能的疾患(遺伝が要因)>
●変化を嫌う
http://web.kyoto-inet.or.jp/org/atoz3/kado/book1/Williams-Asp.htm
●接し方のルールがわからず無邪気に周囲の人に対して迷惑なことをしてしまうことがある。人を傷つけるということには鈍感(相手の立場に立って考えられない)。
●パターン的行動、生真面目すぎて融通が利かない
毎朝の通学電車では同じホームの同じ場所から、同じ時間の同じ号車に乗ることに決めていたりする。パターンを好むということは反復を厭わないことでもある。
●アスペルガー症候群の子どもは(大人も)感覚刺激に対して敏感。敏感さは聴覚、視覚、味覚、嗅覚、温痛覚などのいずれの感覚の敏感さもありえる(特に視覚が敏感)。
●アスペルガー症候群の子ども(大人も)は予測できないことや変化に対して苦痛を感じることが多い。
http://www.autism.jp/l-02-03-aspe3.htm
●独り言を言うことが多い(考えていることを口に出す)
●物事をいつまでも同じにしておこうとする欲求が強く、そうでないと非常に不安。いわゆる「こだわり」。
●自発的に行動することが少なく、興味の幅が狭い
●物まねをしているような不自然な言語表現
●自閉症スペクトラム全体としては一万人に91人(およそ100人に1人)。
http://www.ypdc.net/asuperugar.htm
★自閉症スペクトラムの考え方(アスペルガーに至らない気質の偏りもある(遺伝性))
http://www.imaizumi-web.com/030413.html
★アスペルガー症候群(自閉症スペクトラム)かどうかのテスト
http://twitwi.s10.xrea.com/psy/add.htm
http://www.geocities.co.jp/Beautycare/5917/as/marksheetmake.html
0072デフォルトの名無しさん
NGNGlong **Data;
try{
Data = new long *[4000];
for (int i = 0; i < 4000; i++){
Data[i] = new long [4000];
}
}
catch (bad_alloc) {
cout <<, "割り当てができません。これで終了します。";
exit (-1);
}
とすると、特に異常なメッセージは出ません。
しかし、Data[i][j] に代入するとき、死にます。なぜでしょうか?
0073デフォルトの名無しさん
NGNGVC6 だとしたら、VC6 は new が失敗した時に
bad_alloc 例外を投げずに NULL を返す仕様になっているので、
NULL を参照して死にます。
STL なんかも new が bad_alloc 例外を投げることを前提に書かれてるので、
そのまま使ってるとメモリフルの時に NULL を参照して死にます。
_set_new_handler でも使って
new が失敗した時には bad_alloc を投げるように設定するがよろし。
あと、new(nothrow) も対応してなかったと思う。
0074デフォルトの名無しさん
NGNGbad_alloc例外が出されるのは確かです。というか、上のソースは、
BCBのヘルプから、そのまま取ってきています。
変えたのは、配列の大きさだけです。
Cだと、64KB以上のメモリを確保する場合には
malloc ではなく farmalloc を使い、farポインターでアクセスする
とかいうのがありますよね。C++ のnew でもそういうことがあるのでしょうか?
0075デフォルトの名無しさん
NGNG64KうんぬんはCとかC++とかいう話ではない。
言語とは関係なく、16bit DOS用コンパイラの場合の制約だよ。
0076デフォルトの名無しさん
NGNGヘルプが常に正しいとは限らない...。
とはいえ、BCB4 を使った事無いので実際どうなのか分からない...。
try {
int* a = new int[0x7FFFFFFF];
if(a == NULL) {
cout << "NULL です" << endl;
}
} catch(bad_alloc&) {
cout << "bad_alloc です" << endl;
} catch(...) {
cout << "その他の例外です" << endl;
}
これで何て表示されるか確かめてみ。
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGどうせ失敗するしすぐに終了するからいいYO!
0083デフォルトの名無しさん
NGNGどこでエラーが出るか確かめました。
(76では、配列の大きさを[4000][4000]と書きましたが、
実際には[4097][4097]でテストしました)
その結果、16388番目までは代入可能。16389番目に死にます。
(つまり、[3][4097]まではOK、[4][0]で死ぬ。)
65552バイト以降のメモリーがおかしいようですが、なぜでしょうか?
0084デフォルトの名無しさん
NGNGsizeof(int)はいくつ?
008572
NGNG83に書いた「76のプログラムで」は「72のプログラムで」です。
あと、例外はbad_allocが出ることを確認しました。
>76で。
0086デフォルトの名無しさん
NGNGBorland C++ Ver.4の間違いじゃないよな? (笑)
008772
NGNG0088C++しらん
NGNG0089デフォルトの名無しさん
NGNGbad_alloc 捕まえた後に delete してないから
メモリが足りなくて cout や exit が
変な挙動を示してるってことはない?
>>72 の例は小分けに確保してるので、
bad_alloc 捕まえた時点ではかなりメモリが使われてるけど、
>>76 の例では一気に確保してるので
bad_alloc 捕まえた時点ではメモリの確保は行われていない。
カウンタ変数 i を try の外に確保して、
catch 内で Data[i - 1] から Data[0] まで delete [] して
Data を delete [] して、
その上で cout とか呼んでみ。
あと、cout の最後に << endl はしとこうな。
009072
NGNGコンパイラーオプションをいじる必要があるとかいうことは
ありますか? いまはデフォルトで使ってます。
BCBスレで聞いたほうがいいかなあ
0091デフォルトの名無しさん
NGNG009272
NGNG#define MAXCH 4096
long **Data;
int i;
try{
Data = new long *[MAXCH+1];
for (i = 0; i < MAXCH+1; i++){
Data[i] = new long [MAXCH+1];
}
}
catch (bad_alloc) {
for (int j = i-1; j <= 0; j--){
delete [] Data[j]; Data[j] = NULL;
}
delete [] Data; Data = NULL;
cout << "割り当てができません。これで終了します。" << endl;
exit (-1);
}
0093YUIS
NGNG↓↓↓
http://www.dvd-yuis.com/
0094デフォルトの名無しさん
NGNGj>=0 だよ。
009572
NGNG0096デフォルトの名無しさん
NGNG確保が4097なのに[4097]でアクセスしたら範囲外だべ
009772
NGNG[4096]でした。具体的には、
Data[3][MAXCH]++; printf("3MAXCHOK\n");
Data[4][0]++; printf("40OK\n");
とすると、「3MAXCHOK」表示後、死にます。
「40OK」は表示されません。
0098デフォルトの名無しさん
NGNGそのまま1ファイルでコンパイルできるコード貼ってくれると確認しやすいのだが。
貼らなかった部分に問題あるかもしれんし
手元にはBCB6ならあるから試してみるか。
0099デフォルトの名無しさん
NGNGData[i] を NULL で初期化しておいて、
Data[i] の値を後から確認してみるのも手かと。
いちいちアクセスバイオレーションするのもアレだし。
010072
NGNG解決いたしました。>98さまのおっしゃるとおり、
別のところに問題がありましたです。
プログラムは無事動きました。
車に轢かれて逝ってきます。
ノ∩
⊂ ヽ
/( 。A。 )っ
__________ U ∨ ∨
/ 000 / ・@;∴‥
/______/______:: :|
__|| ∧ ∧ .||__ |:: ::||.|
|::||. (゜Д゜ ) .||::| : :'| ||:|
.~|| ⊆⊇、 ) ||O :::: || ||:|
|| ̄゜ ̄ ̄゜|\/L~:: ̄ ̄| ̄|:|
||_=0.< ガ >.___|_/|.!ニニニニニニニニニニl
...|00| 三 三Z ン Z/⌒ヽ|__|:::::__:::::::/⌒ /⌒ヘ⊇
.〔⊆__[二]____|/\|〕_|.∴.|::| | ||::||::::| |||||.∴.||| ∴.|ヘ
~ゞゝ__ノ ̄ ̄ ̄~ ゞゝ∵ノ ̄.ゞゞゝノ ̄ゞゞゝ∵ノゝ∵ノ
0101デフォルトの名無しさん
NGNG解決してよかったね。
ところで std::vectorとか boost::multi_arrayつかうと便利かもよ
010272
NGNG恥をかいたついでに、書きますが、はじめは↓のようにしてました。
InitData()の中身をmain に書いたら、無事に動きました。
動的に確保する内容を、メイン以外の関数には書けないのでしょうか?
(←そんなことは無いと思うが)
void InitData(long **Data){
// 中身は >92
// メモリを動的に確保
}
main関数内で
{
long **Data;
InitData(Data);
// このあと、Data[i][[j]に代入する関数を呼ぶ
}
0103デフォルトの名無しさん
NGNGvoid InitData(long ***Data){
InitData(&Data);
普通は
long **InitData(void){
Data=InitData();
0104デフォルトの名無しさん
NGNG(´д`)
Dataが値渡しじゃん。結果が呼出元のDataに反映されてない。
void InitData(long **&Data){...}になってれば反映はしただろうが。
0105デフォルトの名無しさん
NGNGデバッグモードだとダイアログボックスでてきて、リリースモードだとNULLですが表示される・・・。
何がいくないんでそうか?
#include <new.h>
#include <new>
int hoge(size_t){
throw std::bad_alloc();
return 0;
}
int main(){
_set_new_mode(1);//_set_new_handlerの下に書いても同じ
_set_new_handler( hoge );
try{
int* a = new int[0x3FFFFFFF];
if(a == NULL) {
cout << "NULL です" << endl;
}
delete [] p;
}catch( std::bad_alloc& e){
cout << e.what() << endl;
return 1;
}
return 0;
}
010672
NGNG>103-104 できました! 103さんお勧めの方法で。
ありがとうございます。(よく理解できてないけど)
おなかがすいたので、今日はこれで帰ります。
おやすみなさい。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGtemplate <int n> int add(int i) { return n + i; }
とするのと同様に
template <string s> void message(void) { cerr << s << endl; }
と定義して、message<string("hello world!")>(); などと関数を
生成できそうだと思うのですが、テンプレートの定義でエラーになってしま
います。何か根本的に勘違いしているのでしょうか?教えてください。
0109デフォルトの名無しさん
NGNGtemplate パラメータになれるのは、
「コンパイル時にプログラム全体で一意に決まる情報」 だけ。
> string("hello world!")
stringクラスのコンストラクタに文字列リテラル"hello world!"を
渡して呼び出した結果、というのはコンパイル時には決まらない。
0110デフォルトの名無しさん
NGNGtemplateに使えるのは型か整数型のみなのだが。
0111デフォルトの名無しさん
NGNGあったらthrowで投げたいのですが・・・。
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG規格書を穴が開くまで読んでこい!
今はポインタと参照も可能になってるぞ。
>>111
?
0114デフォルトの名無しさん
NGNG0115自己レス
NGNGint* a = new int[0x3FFFFFFF];
ここの値(1回で得るメモリ量?)をあまり大きくしすぎると、動作不定になるっぽい。
ていうか、早くvc2003つかいてー。
0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGまずfor(;;)をwhile(1)にする
0121デフォルトの名無しさん
NGNGえ?今ってこんなのできんの。
template<typename T*>struct NonPtrType
{
typedef T nonpointee_type;
}
0122デフォルトの名無しさん
NGNGそれは出来るが、それはまた別の話
0123デフォルトの名無しさん
NGNGほんと!
特殊部分テンプレートじゃなくともできるんですか。
0124デフォルトの名無しさん
NGNG0125113
NGNG>>113 で言ったのは、
template<double* PD> struct ...
template<double& D> struct ...
ってのも可能ってこと。
0126デフォルトの名無しさん
NGNG>>108
templateに使えるのは型か整数型のみなのだが。
113 名前:デフォルトの名無しさん 投稿日:03/06/12 18:01
>>110
規格書を穴が開くまで読んでこい!
今はポインタと参照も可能になってるぞ。
ポインタと参照ってのは型じゃないのか
0127デフォルトの名無しさん
NGNG型ってのは typename の事でしょ?
型と整数型とを何で分けて言ってるのか考えれ...。
0128デフォルトの名無しさん
NGNGその規格はどこに載ってる
0129デフォルトの名無しさん
NGNG0130ぷらぷらー
NGNG};
void test(){}
A<test> a;
こういうのもできるよー テンプレート最高
0131デフォルトの名無しさん
NGNG嘘いわないで下さいよ、先輩♥
p.391ですよ(うふ♥)
0132デフォルトの名無しさん
NGNGどうりでうまくいかなかったわけね。
0133デフォルトの名無しさん
NGNG>>3 にあるやつだと >>129 の位置にあるんだけど。
モノが違うのかな?
0134デフォルトの名無しさん
NGNGごみん。Stroustrup本で見てたよ。♥
C++ Final Draft International Standard←ここね
しかもこちらの方が詳しく載ってるよ。
先輩ありがとう。
0135デフォルトの名無しさん
NGNGclass Check
{
public:
Check() const { cout << "コンストラクタが呼ばれた" << endl; };
~Check() const { cout << "デストラクタが呼ばれた" << endl; };
};
どこがだめなんでしょうか?
データないのにconstつかったから?
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG誰か教えて(つД`)
(Windows 2000 VC++6.0)
///////////////////////// ClassA.h
#ifndef CLASSA_H
#define CLASSA_H
#include "ClassB.h"
class CClassA
{
CClassB m_objB;
};
#endif
///////////////////////// ClassA.cpp
#include "ClassA.h"
///////////////////////// ClassB.h
#ifndef CLASSB_H
#define CLASSB_H
#include "ClassC.h"
class CClassB
{
CClassC m_objC;
};
#endif
//続く
0139138の続き
NGNG#include "ClassB.h"
///////////////////////// ClassC.h
#ifndef CLASSC_H
#define CLASSC_H
#include "ClassA.h"
class CClassC
{
CClassA m_objA;
};
#endif
///////////////////////// ClassC.cpp
#include "ClassC.h"
///////////////////////// main.cpp
#include "ClassA.h"
int main( int argc, char *argv[] )
{
CClassA objA;
return 0;
}
//続く
0140138の続き
NGNGコンパイル中...
main.cpp
classc.h(9) : error C2146: 構文エラー : ';' が、識別子 'm_objA' の前に必要です。
classc.h(9) : error C2501: 'CClassA' : 識別名を宣言するのに、型が指定されていません。
classc.h(9) : error C2501: 'm_objA' : 識別名を宣言するのに、型が指定されていません。
(略)
test.exe - エラー 12、警告 0
はじめ、part15の>>949と同じエラーが出ていて、
インクルードガードを書いたら別なエラーがでますた。
長々とすみません。どのような解決法でいけばいいでしょうか?m(_ _)m
0141デフォルトの名無しさん
NGNGCClassA は CClassB を持っている。
CClassB は CClassC を持っている。
CClassC は CClassA を持っている。
CClassA は CClassB を持っている。
CClassB は CClassC を持っている。
CClassC は CClassA を持っている。
CClassA は CClassB を持っている。
CClassB は CClassC を持っている。
CClassC は CClassA を持っている。
CClassA は CClassB を持っている。
CClassB は CClassC を持っている。
:
:
:
(以下無限に続く)
0142デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
templateについて詳しくやるなら。
>>138-140
プリプロセッサ・マクロを展開するとどうなるか考えてみる。
エラーの内容は'CClassA'が定義されてないことによるエラー
分割コンパイル関係ない(^^;
//class A;class B;class C;//先に型が存在することを宣言しておく
class A
{
    C o;
};
class B
{
    A o;
};
class C
{
    A o;
};
とここまで書いて>>141見て問題の本質からずれてることに気がついたり(^^;
ポインターとnew演算子などを使って管理するしかないのでは?
boost::shared_ptrとか使う場合、循環参照に注意する必要あるだろうけど。
0143デフォルトの名無しさん
NGNGああこれね。よくやる人いるんだよね。
結論これはコンパイルできない。
CClassA,B,Cはそれぞれ相手のサイズがコンパイル時にわからないから。だったかな?
解決策はポインター持たせることやね。
0144143
NGNG士ね
0145デフォルトの名無しさん
NGNG0146138
NGNG勉強なりますたm(_ _)m
0147超初心者
NGNGwhile(...) {
while(...) {
int x;
.
.
if(...) goto loopEnd;
}
}
loopEnd:;
0148デフォルトの名無しさん
NGNG多重ループからの脱出か。
goto を使わないと面倒なパターンのひとつではある。
gotoのやみくもな利用はまずいが、こういうパターンに限って使えば合理的ってことで
まあまずくはないよ。
ただ、gotoを見るだけで文句言われる場合もあるので、
gotoなしでも、そのループ全体をinline関数に分割してreturnで抜けることで
実質的に同じ形にできたりするが。
0149デフォルトの名無しさん
NGNGそれは内側のループと外側のループに強固な依存関係を作ってしまってる。
リファクタリングで内側のループを関数に切り出したりする際に大きな障害になる。
ループの結果を受け取る変数を使って
while(...){
bool found = false;
while(...){
if (...){ found = true; break; }
}
if ( found ) break;
}
とした方が良い
0150147
NGNG>149
素早い回答、どうもありがとうございます。
147の文についてあともう一つ質問したいのですが、
内側のwhileループ内で宣言している変数 x は、goto文でそのスコープを
抜けた時、無事にスタックから解放されるのでしょうか?
0151デフォルトの名無しさん
NGNGそれは仕様では決められていないんじゃないのかな。
外のスコープからでたからといって、解放されるとは限らないんじゃないの?
コンパイラ依存だと思われ。
0152デフォルトの名無しさん
NGNG逆に数字を文字列にする関数って何をつかえばいいんですか?
おねがいします
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNGatoiの反対ならitoa使えばいいんでないの?
0155デフォルトの名無しさん
NGNGやっぱり、sprintf / printfしかないですかねぇ…
0156デフォルトの名無しさん
NGNGスタックの扱いは仕様外だけど、
デストラクタはちゃんと呼ばれる(6.6.2)。
まぁ、この場合は int なんで何もしないわけだけど。
>>154
itoa はコンパイラ独自の拡張関数。
0157デフォルトの名無しさん
NGNGVC++6ではnewに失敗するとデフォでNULL。
だけども、MFCを使用の設定になってると
直接クラスライブラリ使っていなくても
newの失敗はNULLじゃなくてCMemoryException例外だよ。
AFXなんとかのプリプロセッサで決まるはず。
スレ違いといわれればそれまでだが。
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG名前が長いから
0160デフォルトの名無しさん
NGNG循環参照に対応してないから
0161デフォルトの名無しさん
NGNG0162犬すき
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNGvectorで頑張る。
固定長なら普通に配列
0165デフォルトの名無しさん
NGNGきちっと処理できんならいっぱい使ってくれ。
0166デフォルトの名無しさん
NGNGweak_ptrは仕様がイマイチ
0167デフォルトの名無しさん
NGNGかけばよいですか?主に、メモリーの不正使用によるコアダンプとかの
エラーを拾いたいです。
VBにおいては、On Error goto trap
Javaにおいては、
try{
〜
}catch(ErrException){ // <-こんな感じのメッセージ
〜
}
0168デフォルトの名無しさん
NGNGcatch(...)
0170167
NGNGありがとうございます。さっそく以下のように試して見ましたが
エラーは拾えなかったのですが、何が悪いのでしょう?
//Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
int main(int argc, char* argv[]){
int i=0,j=0;
try{
j=100/i;
printf("j=%d",j);
return 0;
}catch(...){
printf("err!");
}
}
0171デフォルトの名無しさん
NGNGC++が送出する例外を全てキャッチするわけであって
ランタイムのエラーなんか捕まえられるわけありませんがな。
VMで動いているJavaとは違う。
0172デフォルトの名無しさん
NGNGWindows なら http://hata.cc/docs/Win32Map/2-1.html
しかしVC++ならcatch( ... )でも行けるはずだが、Borlandはそうでもないのか。
0173167
NGNGなるほど。
本当に全てのエラーを拾えるわけではないんですね?
数字を0で割ったエラーはC++(BCB)では拾えない見たいですが
C++が拾えるエラーと拾えないエラーの見極めはどうしたらよいのでしょうか?
0174167
NGNGVC++で試した見たら、確かにエラーは拾えました。
どうも、コンパイラ依存のようですね。ありがとうございました。
int func(int i);
int main(int argc, char* argv[]){
int i=0;
try{
if(func(0) !=0 );
}catch(...){
printf("err!");
}
printf("exit\n");
scanf("%d",&i);
return 0;
}
int func(int i){
int j=0;
j=100/i;
printf("j=%d",j);
return 0;
}
0175デフォルトの名無しさん
NGNGBCB6up4ではちゃんとerr!って出たヨ
0176デフォルトの名無しさん
NGNGBCB(6)では拾えるってことでバージョンアップ汁
0177デフォルトの名無しさん
NGNGフリーコンパイラですもん。
バージョンアップもなにも(w
0178デフォルトの名無しさん
NGNGBCBって書いてるから誤解してたよ。
BC++5.5のことか。それはBCB(Borland C++ Builder)とは違うコンパイラだよ。
0179デフォルトの名無しさん
NGNGC++のコード内で throw std::exception("err"); とかやって投げてる
例外は catch で捕まえることができる。他のゼロ除算とか
ページ違反とかの OS が投げてくる例外は、拾い方は環境依存。
別の言い方をすると、「この関数はこの例外を投げるかもしれない」と
C++のドキュメントに書いてあればcatchで捕まえられる。それ以外は×。
0180デフォルトの名無しさん
NGNGコンパイラ(エンジン)は同じだろ
0181デフォルトの名無しさん
NGNG昔のバージョンのものみたいだから、概ね同じか。
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNGVC++が多いのだろうけど。
0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGcpp32
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG同志がいた。
0192デフォルトの名無しさん
NGNG#include <fstream>
using namespace std;
ostream &operator<<( ostream &stream, unsigned char ret ){
stream << (unsigned short)ret;
return stream;
}
int main(){
unsigned char x=62;
cout << x;
ofstream out("Result.txt");
out << x;
out << " " << x;
out.close();
return 1;
}
12行目のxのみがunsigned charで表示されてしまいます。
恐らくは12行目の<<のみがオーバーロードできていないのでしょうが、
原因と対策を教えていただけないでしょうか?
コンパイラはVC++6.0を使用しています。
宜しくお願いします。
0193デフォルトの名無しさん
NGNGchar にキャストするか、元から char に汁。
0194193
NGNG10行目と13行目は思惑通り数値で表記されるのですが、
12行目(左辺値に直接ostreamを持っていったとき)のみ、数値表示できません。
言葉足らず申し訳ありません。
0195192
NGNG0196デフォルトの名無しさん
NGNGVC++6.0のバグぽ。
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGgcc-3.3だと全てちゃんと数値表示された。
0199197
NGNG0200デフォルトの名無しさん
NGNGじゃぁ、int でキャスト汁。
規格でどちらが使われるのか決まってるかどうかは分からんが、
unsigned char でオーバーロードされてない時に char, int のどちらが使われるか
一意に決められないコンパイラがあるということだけは事実のようだし。
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGさっきから君は何を言っとるんだ?
0203デフォルトの名無しさん
NGNGスマソ。
何でだろね。
0204192
NGNGBC++の導入を検討します。
現在CからC++への移行のために勉強中なので
もしまたお世話になるときは宜しくお願いします。
0205デフォルトの名無しさん
NGNGostreamからの派生クラスofstreamへのオーバーロードができていない可能性がありますね
ofstream &operator<<(ofstream &stream, unsigned char ret){
(ostream)stream << (unsigned short)ret;
return stream;
}
を追加してはどうですか
0206デフォルトの名無しさん
NGNGvc7でも表示のしかたvc6と変わりませんけど。
>>192
わざわざコンパイラ変える必要なんてない。
>>200の言っているようにキャストすりゃオーバーロードも必要性がない
>>205
それはオーバーロード関数があいまいと表示されるかと
0207デフォルトの名無しさん
NGNG205です。
当方VC6ですが、(ostream)キャストを使うため
あいまいさはなくなります。
0208206
NGNG0209206
NGNG0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNG"error C2051: case 式は、整数型定数でなければなりません。"
というエラーが出ます。
定数の定義文をbar.cppに書くとbar.cppは正常にコンパイルされ、hoge.cppのcase文で上記エラーが出ます。両方に定義を書くと、多重定義でエラーが出ます。
どうすればいいのでしょうか?
hoge.h
class CHoge {
static const int FOO; // 定数の宣言
...
}
hoge.cpp
#include "hoge.h"
const int CHoge::FOO = 1; // 定数の定義
...
switch (i) {
case CHoge::FOO: // ここではエラーにならない
...
}
bar.cpp
#include "hoge.h"
...
switch (i) {
case CHoge::FOO: // ここではエラーになる
...
}
0212デフォルトの名無しさん
NGNGclass CHoge {
enum { FOO = 1 }; // 定数の定義
...
};
0213デフォルトの名無しさん
NGNG値が hoge.cpp で指定されているので、
bar.cpp のコンパイル時にその値を参照できないのだ。
C++ の仕様上は
class CHoge {
static const int FOO = 1;
...
};
とすればいいんだが、
VC++6.0 ではこの仕様に準拠してないので
>>212 のようにする。
0214デフォルトの名無しさん
NGNG0215211
NGNGcase文に使うような整数定数はenum使えばいいんですね。
解決できました。ありがとうございます!
0216デフォルトの名無しさん
NGNGsprintfをつかわにゃならないのですか?
0217デフォルトの名無しさん
NGNGostream::operator<<
0219デフォルトの名無しさん
NGNGもしよろしければ、わかりやすく教えてください
0220デフォルトの名無しさん
NGNG説明とか読んでも分からないと言う人にどうやって説明すればいいのかわかりません。
0221デフォルトの名無しさん
NGNG#include<vector>
#include<stdexcept>
int main()
{
try
{
std::vector<int> v(10);
v.at(10);
}
catch(std::out_of_range& out)
{
std::cout<<out.what();
}
return 0;
}
0222デフォルトの名無しさん
NGNGhttp://www1.free-city.net/home/s-rf9/page004.html
http://www1.free-city.net/home/s-rf9/page005.html
0223デフォルトの名無しさん
NGNG□□□□□□□□□□■■■■■■■□□□□□□□□□□□□
□□□□□□□□□■■■■■■■■■□□□□□□□□□□□
□□□□□□□□■■□□■■■□□■■□□□□□□□□□□
□□□□□□□■■■□□■■■□□■■■□□□□□□□□□
□□□□□□□■■■□□■■■□□■■■□□□□□□□□□
□□□□□□□■■■■■■□■■■■■■□□□□□□□□□
□□□□□□□■■■■■■□■■■■■■□□□□□□□□□
□□□■■■□□■■■■□■□■■■■■□■■■□□□□□
□□□■■■□□■■■■■■■■■■■□□■■■□□□□□
□□□■■■■□□□■■■■■■■□□□■■■■□□□□□
□□□□□■■■□□□■■■■■□□□■■■□□□□□□□
□□□□□□■■■□□□□□□□□□■■■□□□□□□□□
□□□□□□□■■■□■■■■■□■■■□□□□□□□□□
□□□□□□□□■■■□■■■□■■■□□□□□□□□□□
□□■■■■■■□■■■□□□■■■□■■■■■■□□□□
□□□■□■□□□□■■■□■■■□□□□■□■□□□□□
□□■□■■□■□□□■■■■■□□□■□■■□■□□□□
□□□■■■■□□□□□■■■□□□□□■■■■□□□□□
□□□□■■□□□□□■■■■■□□□□□■■□□□□□□
□□□■□■□□■□■■■□■■■□■□□■□■□□□□□
□□■□□■■■■■■■□□□■■■■■■■□□■□□□□
□□□□□□□□■■■□□□□□■■■□□□□□□□□□□
□□□□□□□■■■□□□□□□□■■■□□□□□□□□□
□□□□□■■■■□□□□□□□□□■■■■□□□□□□□
□□□■■■■■□□□□□□□□□□□■■■■■□□□□□
□□□■■■■□□□□□□□□□□□□□■■■■□□□□□
□□□■■■□□□□□□□□□□□□□□□■■■□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
0224デフォルトの名無しさん
NGNGださいJavaを見習え
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGぬるぽ
0227デフォルトの名無しさん
NGNG所詮C++の派生のくせして。
0228デフォルトの名無しさん
NGNGusing namespace std;
int func(){
    throw "hello\n";
    return 0;
}
int hello(){
    return func();
}
class Test{public:
    ~Test(){cout << "Test::~Test()が呼ばれました"<<endl;}
};
int main(){
    try{
        Test o;
        hello();
        Test o2;
    }
    catch(const char * p){cout << p << endl;}
    return 0;
}
0229デフォルトの名無しさん
NGNG所詮Cの(ry
所詮アセンブラの(ry
0230デフォルトの名無しさん
NGNG所詮Simulaの(ry
が抜けてるぞ
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNG配列の大きさは固定) のデータを簡単にファイルに書き込み・読み出して
変数に代入できるメソッドはC++にあるのでしょうか?
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNGfwriteとfread
0236デフォルトの名無しさん
NGNGそんなに巨大なわけでもないな。
0237デフォルトの名無しさん
NGNG構造体にしたほうがよくないか・・・?
0238デフォルトの名無しさん
NGNG10年ちょっとくらい昔ならパンクしてるけどね。
0239デフォルトの名無しさん
NGNGいろんなサンプルコードを見て勉強しているのですが、
構造体変数をコピーするのに、単に代入で済ましている
ものと、memcpy()で行っているものとがあります。
これはどんな違いがあるのでしょうか?
0240_
NGNG0241デフォルトの名無しさん
NGNG構造体の代入演算子がオーバーロードされている場合がある
0242239
NGNGあっ、なるほど!!
ありがとう。。。
0243デフォルトの名無しさん
NGNGVCなんかの場合は出力コードを見ると、メンバを一つ一つ代入処理するように展開される
よってmemcpyより遅くなる
0244239
NGNGそうなんですか!
グリッドのサンプルを見ていたら、各セルのLOGFONTを
設定するのにmemcpyを使っていたのですが、スピード
が要求されるからなんですネ。
どうもです。。。
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG分割コンパイルとか言うのをやろうと思って
ソースファイルを2つ用意して片方に関数プログラムを書いて
もう片方にその関数を実行した結果を表示するプログラムを
書いてコンパイルしてみたんですが。ソース自体にはエラーは
でなかったんですが、
bunkatu error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
とかいうよくわからないエラーが出ちゃって困ってます
分割コンパイルってC++.netでやるとき何か設定とかひつようなんですか?
0247デフォルトの名無しさん
NGNG0248246
NGNGありがとうございます。
でも、mainをWinMain()に変えてもエラーは消えませんでした・・・
なぜでしょう?
0249デフォルトの名無しさん
NGNGWindows アプリケーションから
コンソールアプリケーションに変えた方がいいんでは?
0250デフォルトの名無しさん
NGNGmainとは違うが、>>246の問題はそこに留まらないだろうから>>249のとおり
0251246
NGNG.netってコンソールアプリケーションつくれるんですか?
0252デフォルトの名無しさん
NGNG0253246
NGNGどうやって?
っていうかwinアプリから分割コンパイルってできないん?
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG新規作成⇒C++プロジェクト⇒WIN32⇒アプリケーション設定⇒コンソール
OK
0256246
NGNGごめんなさい
やっぱコンソールでやってもやっぱりできないや・・・・
なんでだろう?
やっぱ本を買ったほうが手っ取りばやいと思うんだけど
.netでプログラムするときのお勧めの本知りません?
0257デフォルトの名無しさん
NGNGexternというのを追加してますか。
extern void fun();//こんふうに使いたいcppソースに
0258デフォルトの名無しさん
NGNG0259246
NGNGソースファイルはfile1とfile2というのがあるんですが
file2.cppのほうに
extern g;
extern nibai(){
g*=2;
}
と関数を定義してみたんですがエラーがでてしまいます。
>>258
はい。ソリューションのところに2つともちゃんと追加されてます。
0260デフォルトの名無しさん
NGNG>未解決の外部シンボル _WinMain@16 が
ってリンクエラーまだ出てるなら
WinMain関数がプロジェクトの何処にも無えって言われてるんだから
>>255。
0261デフォルトの名無しさん
NGNGint f(){}
#file1.cpp
extern int f();
int main(){
f();
return 0;
}
0262デフォルトの名無しさん
NGNG#test.h
int x2(int);
#file.cpp
int x2(int i)
{
return i*2;
}
#main.cpp
#include "test.h"
int main()
{
x2(10);
return 0;
}
0263246
NGNGコンソールファイルにしたらそちらのエラーは消えたみたいです。でも
もうひとつのほうのエラーが消えないです・・・↓
error LNK2005: "int __cdecl nibai(void)" (?nibai@@YAHXZ) は既に file1.obj で定義されています。
0264デフォルトの名無しさん
NGNG定義されています。それはいけないよ。と言う事。
#file.cpp
int g = 0;
void f(int i)
{
g = i*2;
}
#main.cpp
#include <iostream>
extern int g;
extern void f(int);
int main(){
f(20);
std::cout<<g;
return 0;
}
0265デフォルトの名無しさん
NGNGどこかのサーバにupして指示を仰ぐのが一番早いと思われ
0266246
NGNGできました
ありがとうございました。
externってメインの方に書くんですね
勘違いしてた・・・
0267デフォルトの名無しさん
NGNG構造体がポインタを持っているときは、
場合によるがmemcpyはよろしくない。
0268デフォルトの名無しさん
NGNGさらに、構造体のメンバにクラスや構造体の変数があれば・・
それがスマートポインタ(auto_ptrやboost::shared_ptr)やstringだったりすると
参照数の不整合が起きるな。
0269デフォルトの名無しさん
NGNGヘッダーファイルに書くのとでは
何がどう違うんでしょうふぁ?
0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGメンバにクラスのインスタンスがあるときは問題が出るだろうけど、
ポインタの場合はmemcpyだろうが関係ない気がする
メンバを一つずつコピーする場合と動作は変わらないし
で、具体的にどのような場合に問題が出るの?
0272デフォルトの名無しさん
NGNG体系的に知っていたほうが良い
0273デフォルトの名無しさん
NGNG意味不明
0274デフォルトの名無しさん
NGNGstruct my_string{ char *buf;int length;};
struct my_string s1,s2;
s1.buf = malloc(256);
strcpy(s1.buf,src);
s1.length = strlrn(s1buf);
memcpy(&s2,&s1,sizeof(struct mystring));
strcat(s2.buf,hoge);
s2.length = strlen(s2.buf);
これでやばいことになりますた。
0275デフォルトの名無しさん
NGNGメンバが new で確保した領域を保持してるとか
struct T {
int* p;
T() : p(new int[3]) {}
~T() { delete[] p; }
};
0277デフォルトの名無しさん
NGNGcpp に書くと、他から参照しにくい。
0278デフォルトの名無しさん
NGNG>>271は何もわかってないとこ見るとCプログラマーやな。
0279デフォルトの名無しさん
NGNGコポーってなんでつか?
0280269
NGNGなぜ?
詳しく教えて。
0281デフォルトの名無しさん
NGNGその例だと代入を利用しても、memcpyと同じように問題が発生する
0282デフォルトの名無しさん
NGNGぐぐれ
0283デフォルトの名無しさん
NGNG代入する場合とmemcpyをする場合の比較の話なのに
コピーコンストラクタが存在するのが前提の話になっているんだが?
挙げられた例ではコピーコンストラクタが存在しておらず、
この場合、メンバにポインタがある時に、
代入では発生せずmemcpyでのみ発生する問題点が示されていない
で、クラスのインスタンスについては既に挙げたから、
それ以外で具体的に何が危険なの?
0284デフォルトの名無しさん
NGNGmemcpyだと、複製先と元で同じデータを共有している上に、お互い他のインスタンスがそのデータを参照していることを知らない。
だから、知らないうちにその共有データの内容を変更されたりして、処理の整合性が取れなくなる。
0285デフォルトの名無しさん
NGNG****終了****
0286デフォルトの名無しさん
NGNG挙げられた例ってどれ?
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGこの場合、コピーコンストラクタではなく代入演算子のオーバーライドの方が適切だよね?
クラスインスタンス生成時にmemcpyは使えない。
確かに代入演算子がオーバーライドされていない場合、memcpyでも代入でも同じ。
代入演算子がオーバーライドされている時には、memcpyで問題が発生する。
では最初の質問に立ち返ってみると、classを使用する場合一般に代入演算子がオーバーライドされているかどうかわからない。
それならば最悪の場合を想定して、一般にmemcpyを使わないほうがいい、ということで間違っていないとおもうよ。
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG同感。
デフォルトでmemcpyなんて使わんでも、たしか、ビットレベルでの
コピーがされる、だか、なんだか、とう言う事をどっかで読んだ。
たしか、メイヤちゃんやったような気がする。
0293デフォルトの名無しさん
NGNGだからメンバにインスタンスが含まれていた場合は除外しているんだけど、何故きちんと読まないの?
ポインタの場合はmemcpyでも代入でも結果は変わらないと言っているんだけど
>>288
>演算子のオーバーライド
オーバーライドとオーバーロードを混同してない?
>それならば最悪の場合を想定して、一般にmemcpyを使わないほうがいい
インスタンスが含まれている場合は当然memcpyを使うべきではないのは同意
0294デフォルトの名無しさん
NGNG0295288
NGNG0296デフォルトの名無しさん
NGNGC時代の代入についての挙動は処理系依存
古い規格だと根本的に構造体の代入自体が不可能だった
0297デフォルトの名無しさん
NGNG構造体のメンバにポインタがあるとき、場合によっては
memcpy()は不適切だといってるのに、それに対する君の
突っ込みが意味不明。
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG>>297
だからその問題点が示されてないんだけど
代入では発生せずmemcpyの場合のみ起こりえる問題点とは?
0300デフォルトの名無しさん
NGNGクラスをmemcpyする話はだれもしてないよ
0301デフォルトの名無しさん
NGNG問題点は示されてるから読み返したら?
それともオーバーロードされた代入演算子を使った代入は
代入じゃないとでも言いたいのだろうか。
0302298
NGNG0304288
NGNGインスタンスを持っているのか、ポインタなのか、
オーバーロードがあるのか、
そんなの外から見ても分からないでしょ?
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG>>278
>いっぱいきけんやな。
となっているんだけど他には?
0307デフォルトの名無しさん
NGNGそのソースってのは本当にC++で書かれたもの?Cじゃなくて?
0308288
NGNGインスタンスだって
struct Point {int x;int y;};
こういう構造体のインスタンスを持っているだけなら、memcpyで問題は起こらないよ?
0309デフォルトの名無しさん
NGNG実際にやるかどうかではなく、問題点の洗い出しをしてるんだけど
0310デフォルトの名無しさん
NGNGそんな無意味なことをしていたんですか・・・ばからしい・・・・
0311デフォルトの名無しさん
NGNG>>271でクラスのインスタンスと言っているんだけど、
いつから構造体のインスタンスになったの?
0314デフォルトの名無しさん
NGNG=で構造体をコピーできることをしらない頭の古いC厨の書いたコードの予感
0315デフォルトの名無しさん
NGNG少なくとも>>274-275のような頓珍漢な例は洗い出せたけど
0316デフォルトの名無しさん
NGNG仮想関数を持っていたら vtblを指すポインタまでコピーされるから
基底クラスレベルで memcpy() されればそれが書き換えられる可能性
もあり得るな。
0317デフォルトの名無しさん
NGNG本質的に同じではないんだけど
クラスのインスタンスをコピーしてはいけない理由は分かってる?
0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNGしょうがなく、memcpyつかっておりますが
やっぱりstd::copyとか使ったほうがよさげなんですかね?
0320デフォルトの名無しさん
NGNG構造体は仮想関数は持てない
0321デフォルトの名無しさん
NGNG新しいプロジェクトを作って新しいソースファイル作って
それを保存してソリューションに追加するって流れが
めんどくさくてしょうがないです。
どうにかなりませんか?
0322デフォルトの名無しさん
NGNGやっぱり勉強し直せ。
0323デフォルトの名無しさん
NGNG空気読め。質問できる雰囲気ではないだろ。
ちなみにスレ違い。
0325デフォルトの名無しさん
NGNG0326239
NGNGいちおうCodeProjectに載ってた、幾度となくバグフィクス
されたっぽいものなんですが。。。
アドレスをば
ttp://www.codeproject.com/miscctrl/gridctrl.asp
0327288
NGNGそのあとのレスのつけ方がどうもな。
まぁ、ここは2chだからいいんだけど。
どこか糞壁を思い出してしまいました。
0328デフォルトの名無しさん
NGNGoperator= をオーバーロードしても、
ソースコードを変更する必要が無い。
そのクラスが = オーバーロードしてあるかどうかも
気にしなくて良い。
0329デフォルトの名無しさん
NGNGもとろんmemcpyで問題のない構造体に限るが。
0330デフォルトの名無しさん
NGNG大量のインスタンスをコピーする時に速い。
けど、危険冒してまでやりたくない気が・・・
まあcharとかintなどなら大丈夫だけど
0332デフォルトの名無しさん
NGNGそれなら問題ない。
std::stringとか入ったりデストラクタ加わったりするとだめだけど。
0333デフォルトの名無しさん
NGNGpublic:つけろよ
0334デフォルトの名無しさん
NGNGすまんス
アクセス指定子以外、C++のclassとstructは同じと考えてよいよね?
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNGstructの方が1文字多い
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNG317、320 (=271?)は知ったかのアフォです。
0341デフォルトの名無しさん
NGNG0342341
NGNG0343デフォルトの名無しさん
NGNGPOD(Pure Old Data) typeはmemcopyでコピーできると書いてあるけど
一般のC++のクラスについては記述が見つからないんだよね。
わざわざPOD typeと限定しているところからして駄目に見えるのだが
だれか見つけられた?
0344343
NGNG0345デフォルトの名無しさん
NGNG例えば class Point { int x, y; }; とか
class Hoge { Point* ptr; } とかは POD だが。意味わかってる?
0346デフォルトの名無しさん
NGNG素直にoperator=とか、コピーコンストラクタとかを使え。
以上。
0347デフォルトの名無しさん
NGNGA POD class is a class that is either a POD-struct or a POD-union.
であるから、それはPODではない。分かってる?
0348デフォルトの名無しさん
NGNG>>347
どうみても >>345 の例は POD だよ。
キーワードにだまされるな。>>334->>335 のやりとりを見よ。
0349デフォルトの名無しさん
NGNGだまされてるのは藻前だ。
PODはprivate非スタティックデータメンバをもてない。
0350デフォルトの名無しさん
NGNG0351デフォルトの名無しさん
NGNGごちゃごちゃ言わず = を使え、と。
0352デフォルトの名無しさん
NGNGテンプレートを使わないで動的メモリの再確保をしたい場合(再確保前のメモリDATAも保護)
Cの方でrealloc()ってあるので使っちゃってるのですが、
別の領域にDATAコピーして、古い領域をdeleteして新たに必要な領域をnewして
そこにコピーしなおしてって感じで使える領域を増やすのを思いついたのですが
なにか別にC++ならではの良い方法はあるのでしょうか?
0353デフォルトの名無しさん
NGNG>そこにコピーしなおして
普通は、新たに必要な領域をnewしてそこにコピーしなおして古い領域をdelete、する。
という手順を踏む。標準ライブラリなども大体そうしているはず
0354デフォルトの名無しさん
NGNGvectorのソースでも見てみれば?
ところで
http://oita.cool.ne.jp/ja6hfa/ja6hfa/dpfaq/singleton.html
↑のQ7で、staticオブジェクトはデストラクタが呼ばれないって書いてあるけどマジ?
それと同じくQ12でなぜかauto_ptrのデストラクタは呼ばれるような話してるんだけど矛盾してない?
0355デフォルトの名無しさん
NGNG生成の逆順でデストラクタが呼ばれるとなっているが
0356デフォルトの名無しさん
NGNGauto_ptrは代入つかって開放することができるし。
0357デフォルトの名無しさん
NGNGちょっと安心したよ。
0358デフォルトの名無しさん
NGNGmain終了時の話ではないと思われ
0359デフォルトの名無しさん
NGNGhttp://www1.free-city.net/home/s-rf9/page004.html
0360デフォルトの名無しさん
NGNGstatic objectつくって実験してみればいいと思われ
0361デフォルトの名無しさん
NGNGファイル内での#Includeファイルがダブってしまいコンパイル
できません。
間接的にすでにインクルードされているかをチェックして
されてない場合のみインクルードするディレクティブって
ないのでしょうか?
#ifdef ならぬ #ifinclude みたいなの...
わかりにくい説明ですみません。
0362デフォルトの名無しさん
NGNG標準ヘッダのソース見てみ
0363デフォルトの名無しさん
NGNG-----------------------------
#ifndef HOGEHOGE_INC
#define HOGEHOGE_INC
定義
#endif
-------------------------------
ただし、includeファイルがお互いをinludeしていると上手くいかない。
0364デフォルトの名無しさん
NGNGVCなら#pragma onceで一発
0365デフォルトの名無しさん
NGNGお互いをincludeするのは論理的におかしいからうまくいかなくてもかまわないと思うぞ
0366デフォルトの名無しさん
NGNGぶっちゃけC++の話題ではない。
0367デフォルトの名無しさん
NGNG0368361
NGNG初心者なものですんませんでした。m(__)m
0369デフォルトの名無しさん
NGNG双方向関係が具体的に何を意味するのか知らんが
ヘッダの相互インクルードは全然必要ないとおもうぞ。
実装は普通ヘッダじゃなくてソースファイルに書くんだから。
0370デフォルトの名無しさん
NGNGもしかして >>363 のようにしててもうまくいかない処理系とかあんの?
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGいや、だからそれを防ぐ意味ためのインクルードガード(>>363のようなコード)だろ。
0373372
NGNG正:それを防ぐ為の
スマソ。
0374デフォルトの名無しさん
NGNGクラステンプレートの場合にはこうやる。
// test1.h
#ifndef TEST1_H
#define TEST1_H
class Test2;
class Test1 {
// Test2* や Test2& を使って何やらする
};
#include "test2.h"
// Test2* や Test2& の実体を参照するインライン関数の実装
#endif
// Test2.h
#ifndef TEST2_H
#define TEST2_H
class Test1;
class Test2 {
// Test1* や Test1& を使って何やらする
};
#include "test1.h"
// Test1* や Test1& の実体を参照するインライン関数の実装
#endif
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNGint Func( arg1)
ARGTYPE *arg1;
{
.....
}
はどのように書き直せばいいのでしょうか?
int Func(ARGTYPE *arg1){
}
のように書き直してみましたが、別の箇所で引数の数が一致しないとコンパイラに
怒られます。何かキーワードのようなものがあれば教えてください。
0377_
NGNG0378デフォルトの名無しさん
NGNGそれでいいはず。
0379デフォルトの名無しさん
NGNGテンプレート引数が double の時だけ
diagonalize(対角化)メンバ関数を定義する、ってことをしたい。
int とか char とかの時には diagonalize を定義したくない。
でも、うまく出来なくて困ってる。
1. partial specialization を使う。
partial specialization を使って
double 用のクラスを別に定義する方法でとりあえずは可能だけど、
その他の定義も全部やり直さないといけないのはエレガントじゃない。
2. diagonalize をデフォルトで無効にする。
デフォルトで例外を投げるとか。
あまり美しくない。
3. 継承して partial specialization する。
実体を返す関数は基底クラスを返すようになってるので、
これを再定義しないといけない。
あとはコンストラクタと代入演算子も。
また、その関数を呼んでいる関数も再定義する必要がある。
これなら 1. を使った方がすっきりして良い。
他に何かいい方法はない?
0380デフォルトの名無しさん
NGNGmapに格納したデータをイテレータで全て表示させると、
キーをもとにして勝手にソートされるのって無効にできないのかな。
0381デフォルトの名無しさん
NGNGデフォルトで無効にするのが一番すっきりしてわかりやすいと思うけど。
0382デフォルトの名無しさん
NGNG試してないんでうまく行くかどうかわからんが
デフォで diagonalize の宣言だけ提供して
double 用の実装だけ書くって出来ないかな?
double 以外で使おうとするとリンクエラーではじけるかも
0383デフォルトの名無しさん
NGNGキー以外に順序づける方法が無いのにそれ以外でいったいどんな順番で表示しろと
0384デフォルトの名無しさん
NGNG迂闊!
それ試してなかった。
diagonalize 使わない限りはエラーにならないみたいね。
で、diagonalize 使うとリンクエラーになる、と。
double だけはうまくいく。
ありがとやんした。
0385デフォルトの名無しさん
NGNG格納した順に表示させることはできないだろうか。
0386デフォルトの名無しさん
NGNGmapは格納した順番を保持しているという保証はないよ。
0387デフォルトの名無しさん
NGNGPolicyでも使ってみれば?
0388デフォルトの名無しさん
NGNG4. static_assert を使う。
diagonalize() {
// ここに型がdoubleでないとコンパイルエラーになる式を書く
// 対角化の計算
return *this;
}
5. CRTP を使う。
template<class TriM> class typespecific_impl {};
template<typename T>
class TriMatrix : public typespecific_impl< TriMatrix<T> > {
public: // 共通の関数いろいろ
//...
private: // 特定の型に限りたい関数色々
friend class typespecific_impl< TriMatrix<T> >;
TriMatrix& diagonalize_impl() { /*対角化*/ return *this; }
};
template<>
class typespecific_impl< TriMatrix<double> > {
typedef TriMatrix<double> Self;
public:
Self& diagonalize() {
return static_cast<Self&>(*this).diagonalize_impl();
}
};
0389デフォルトの名無しさん
NGNGこれって、C言語の半音アップ版でつか?
シー が セィー って読む?
0390デフォルトの名無しさん
NGNGC#はせめて半音だけでもいいものをと考えられた。
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNGとどうでもよいレスをしてみるtest.
0393デフォルトの名無しさん
NGNGvector に pair 代入すればいいではないか?
必要なときに、sort。
find遅そうだけどな。
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNGpass
0396デフォルトの名無しさん
NGNG{
throw;
}
0397デフォルトの名無しさん
NGNGスレ違い
と今更レスをしてみるtest.
0398デフォルトの名無しさん
NGNGCはツェーと読むぞ<ちなみに音階はドだ。
だからC#はドの斜め上にある黒い鍵盤だ。
いいかおまえら、C#はD(レ)になり損ねた黒い鍵盤だ!ワカッタカゴラァ!
激しく板違いなレススレtest
0399デフォルトの名無しさん
NGNG例えば、
class POINT { int X , int Y , … } ってのがあって、
Draw (POINT p) ってのがあるときは、
Draw ( POINT(10,20, …) )
で呼び出せますよね?
この場合 POINT クラスのデストラクタはいつ呼び出されるんですか?
0400デフォルトの名無しさん
NGNGfoo(){
POINT P(10,20,・・・);
Draw ( P );
}
とおなじ。
0401デフォルトの名無しさん
NGNGできれば P(オブジェクト)は生成したくないんです。
相当数のオブジェクトが必要になりそうなんで、new 〜 delete の
繰り返しになりそう・・・。
0402デフォルトの名無しさん
NGNG沢山のインスタンスを持つならvecterとか使えばいいんじゃないの?
0403デフォルトの名無しさん
NGNGfor(int x=0;x<1000;x+=10){
Draw(Point(x,10));
}
とか。
スコープを抜ければ、インスタンスは解放されてデストラクタは呼ばれる。
0404デフォルトの名無しさん
NGNGおせてくさい。
typedefですが、これはなんのために
あるのですか?
#defineで十分だと思うのですが。。。
0405デフォルトの名無しさん
NGNG関数ポインタの型はどうしましょう。
0406デフォルトの名無しさん
NGNG#defineはいろいろ問題がある。
C++的には、More Exceptional C++のItem 35(#DEFINITION)と38(Typedef)を読むべし、
とかいってみたり
0407デフォルトの名無しさん
NGNG#defineでどうやって、typedefの代わりをするの?
ちょっと例を書いて見せろ。
0408デフォルトの名無しさん
NGNGtypedef unsigned int uint;
を#defineで定義するのは無理だね。
0409デフォルトの名無しさん
NGNG引数に指定した一時オブジェクトは関数の呼び出し前に構築されて
呼出し後に解体される。ただし解体のタイミングが厳密にいつであるかは
規定されてない。
0410デフォルトの名無しさん
NGNG一時オブジェクト自体はスタック上に配置され、別にnew/deleteはされないよ。
コンストラクタ、デストラクタも、それが定義されてるなら呼ばれるけど
単なる構造体みたいにそれらを記述してないならオーバーヘッドは無い。
まあDrawに値渡ししてる点でコピーコンスとラクトされるのが気になる程度?
0411404
NGNG0412デフォルトの名無しさん
NGNG解体のタイミングは、その文を最後まで実行し終えた瞬間だろ?
0414デフォルトの名無しさん
NGNGなるほど。確かに。
0415デフォルトの名無しさん
NGNGなぜ?
0416デフォルトの名無しさん
NGNGなんのこと?
0417デフォルトの名無しさん
NGNG#define uint unsigned int
って書けないか、ってことだろ。たぶん。
(本人じゃないんで勘違いしてたらスマソ)
0418デフォルトの名無しさん
NGNGマクロに渡した時のトークン結合での挙動が
マクロと typedef で違うね。
0419デフォルトの名無しさん
NGNGんーと、たしか、完全式の終了までは生存しているはず。
たとえば、
struct A {
int x_;
A(int x) : x_(x) {}
int operator+(const A& a) const {
return x_ * a.x_;
}
};
const A& foo( const A& a ) {
return a; // ※良い子はこんなコードを書いちゃいけません
}
int main()
{
cout << foo(A(2)) + foo(A(3)) << endl;
}
0420デフォルトの名無しさん
NGNG0421413
NGNG>>399 の例では Draw(一時オブジェクトの生成を含む)の末尾までが
完全式になるので、保証されるのは Draw()の終了時までということに
なると思います。言葉足らずでした。
0422デフォルトの名無しさん
NGNG+ 演算子を実行する時に A(2) と A(3) の
両方のオブジェクトが生存してることが保証されてるよ、
ってことでしょ。
0423デフォルトの名無しさん
NGNGようなコンテナクラスってどこかにあります?
ようするにオンメモリで動くちょっとしたデータベース的なコンテナというか、
Excelなんかが一番イメージに近いんだけど。
要素の数が予めわかっていれば構造体のvectorとかでもいいんだけど、実行時に
要素数が変更されるような場合はどうしようって感じ。
0424デフォルトの名無しさん
NGNG実行時に要素数が変更されるような場合でも、vectorは使えると思うが、
なんかvectorが使えない理由があるの?
0425r
NGNGメンバ変数がどの順番で初期化されるのかわかんねぇです。
1. 初期化子の順に初期化される
漏れが最初に読んだC++の本、柴田望洋先生の
「CプログラマのためのC++入門(softbank)」には、そう説明してある。
ただし、これは C++ Release2.0の頃の本。
2. クラス内での、メンバ変数の宣言の順に初期化される。
ぐぐって見つけた「ttp://www.kab-studio.com/Programing/Codian/Cpp/07.html」
では、初期化子の順序は関係ないと書いてある。
3. 初期化子の逆順に初期化される。
cygwinのg++で実験したところ、どうも初期化子の逆順に
初期化されてるっぽかった...
なにがなんだかわかんねーよ!
この辺の事情に詳しい人、レスお願い。
0426r/425
NGNG#include <iostream>
class Elem {
public:
Elem( int i ) { std::cout << "create : " << i << std::endl; }
};
class Col {
Elem e1;
Elem e2;
Elem e3;
public:
Col() : e3(3), e2(1), e1(2) { }
};
int main() {
Col c;
return 0;
}
実行結果は
constructed : 2
constructed : 1
constructed : 3
あと、
%g++ --ver
gcc version 3.2 20020927 (prerelease)
ですって。
0427r/425
NGNGcreate だよ。てへっち。
0428デフォルトの名無しさん
NGNGC++仕様書 12.6.2.5
初期化の順番は以下の通りである。
1.(仮想継承の場合の仕様。省略)
2. 直接の基底クラスのコンストラクタは、
継承宣言リストに書いた順番で呼び出される。
初期化指定子の順番は無視される。
3. 静的でないデータメンバはクラス宣言に登場した順番で初期化する。
初期化指定子の順番は無視される。
4. 最後に、自分自身のコンストラクタが呼ばれる。
註:デストラクタはこの逆順で実行される。
0429デフォルトの名無しさん
NGNGvectorが使えないんじゃなくて、構造体が使えないってことです。
要素毎に型が違うから、vectorのvectorというわけにもいきませんし。
(同じ基底クラスから派生させとけばいいんだけどさ)
自分で作るのは大して難しいわけじゃないけど、既に効率的な実装があれば
知りたいなぁと。そこそこ需要のあるコンテナだと思うし。
0431r/425
NGNG...だったら別にvectorのvectorとかでもいいんじゃねーの?
0432r/425
NGNGありがと〜
そか...しかし何で宣言順、とかなんだろう....
自分のコード、コンストラクタでこゆの良く書いてる。
危険っぽいので、修正しヨット。
class HanageArray {
int lim;
Hanage* body;
HanageArray::HanageArray( int aLim ) : lim( aLim ), body( new Hanage[lim ] ) {}
};
limとbodyの宣言順が異なると死ぬはず。
...いや、g++ の動きはいいのか?
0433デフォルトの名無しさん
NGNGg++ 使ってるという事なので、
-Wall 付けてコンパイルしてみ。
宣言順に初期化子書いてないと警告されると思う。
0434デフォルトの名無しさん
NGNGそうそう。g++はそういう点で助かるよね。
0435r/425
NGNG俺>...いや、g++ の動きはいいのか?
とか書きましたが、g++は、ちゃんと>>428の解説どおりに動いてますね。
>>433
-Wallだと警告してくれるんですねぇ。
ありがたき★
0436デフォルトの名無しさん
NGNGどういうことができますか?
0437デフォルトの名無しさん
NGNGmapで言うところのpairの1番目と2番目の型が違うって意味だよ?
1番目の要素は全て同じ型だからソートは普通にできるかと。
0438デフォルトの名無しさん
NGNGboost::graph とかは違うかな・・・。
やっぱ違うか・・・。
0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNGWindows では両方使える API と
片方しか使えない API とがあった気がするし、
パスを返す API はバックスラッシュ(円記号)使って返してくるので、
バックスラッシュを使うので統一しておくのがよろしい。
利便性からユーザがスラッシュも使えるようにしたい、
というのであれば、
それなりのカラクリを使ってバグの出にくいようにすべし。
0441デフォルトの名無しさん
NGNGターゲットがまだ手に入らなくて、とりあえず Windows 上で
最低限機能が正しいかどうかテストしたいんだけど
アドレスとサイズをテンプレート引数にしちゃったから
ソースにアドレスを埋め込まなきゃいけない。
だけど Windows なので利用できるアドレスは実行時までわからない。
こんな時どうすればいい?
テスト環境でがっぽりメモリ確保して、そのアドレスをメモして
それをハードコートして再コンパイル以上にいいアイディアってありますか?
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNGVC++の__basedとかみたいな、コンパイラ拡張で頑張るとか。
0444デフォルトの名無しさん
NGNGアドレスとサイズを実行時引数ではなくて
テンプレート引数にすることによるメリットが思いつかないんだけど、
どんなのがありますか?
0445441
NGNGいや、そういう事じゃなくて
>>443
そんなのあるんですね。知らなかった。ちょっと便利かも。
でも VC もってないし、たとえそれでもベース位置が決められない以上は
状況は変わらないですよね。
>>444
アドレスの方は安心感だけですかね。構築もちょっとだけ速くなるでしょうけど
それは些細すぎますしね。
サイズの方は最大サイズのチェックの値がコンパイル時の定数にできるので
微量ですが割り当て時のコストが減らせるはずです。
まぁ総じて「安心感」というメリットがあるっていう感じですが
それを「くだらない」という人は C++ じゃなくて C か汗使えって事で。
0446444
NGNG実行時引数にした場合のどんな危険に対する安心感が得られるのか
全然わからないのですが・・・。
> サイズの方は最大サイズのチェックの値がコンパイル時の定数にできるので
> 微量ですが割り当て時のコストが減らせるはずです。
実際に割り当て可能なサイズは結局実行時にしか決まらないのだから、
これもメリットとは思えません。
0447デフォルトの名無しさん
NGNGそこの先頭アドレスからのオフセットでいろいろすれば
0448デフォルトの名無しさん
NGNGきっと445みたいなやつが増えるんだろうなあ。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG0451441
NGNG> 実際に割り当て可能なサイズは結局実行時にしか決まらないのだから、
いや、なんか話誤解してると思う。
自分で物理アドレス切ってメモリ管理するって話なんですけど。
標準的な malloc の実装でいう所の初回の sbrk の戻り値を固定にするっていう意味ですよ。
(もちろん足りないからって OS から追加のメモリがもらえるわけではない)
>>447
その「がばっと取る領域」が決められないから困ってるんです。
>>448
Java の generics は駄目だね。あれこそ彼らの言う所の「シンタックスシュガー」そのもので
generic の先にある generative に対応してないね。
>>449
オブジェクトコードに展開された後の姿を思い浮かべてごらん?
0452デフォルトの名無しさん
NGNG0453441
NGNGつまりこういう事。
template <byte* addr, std::size_t size>
class CStaticHeap
{
public:
void* Alloc(std::size_t reqSize);
void Free(void* obj);
};
CStaticHeap<0x80000000, 1024> chibiHeap;
void Hoge()
{
int* p = chibiHeap.Alloc(sizeof(int)); // 0x80000000 にあるヒープ領域から int の為の領域か切り分けられるんだろうなぁ
chibiHeap.Free(p);
}
0454デフォルトの名無しさん
NGNGchar buffer[10000] ;
とかしといて、実際のときは
const char *buffer = 0x0f0f0f ;
とかに変えればいいんではないの
0455441
NGNGあとキャスト忘れてたけど気にすんな。
>>454
いや >>453 に晒した擬似コード見てもらえれば
ぜんぜん違う話だってわかってもらえると思う。
0456デフォルトの名無しさん
NGNGconst buffer_size=10000 ;
char buffer_temp[buffer_size] ;
const char *buffer_prac=(const char*)0x0f0f0f ;
template<char *p,int size> class hoge {} ;
hoge<buffer_temp,buffer_size> temp ;
hoge<buffer_prac,buffer_size> prac ;
のような話ではない?
0457454==456
NGNGそれともWindows環境では動的に確保するというのが441の要請なのか
0459441
NGNGみんなが「インスタンス確保時のサイズをテンプレート引数にしたがってる」と誤解していると誤解してたから
素直に読んでなかったみたい。
ごめんね、そしてありがとう。
0460441
NGNG「インスタンス確保時のサイズをテンプレート引数にする」は妙案な気がしてきた。
これで実行時コストなしで大きなオブジェクト用のヒープと
小さなオブジェクト用のヒープを分けられるかも。
「なんでそんな事すんねん」って言われるかもしれないけど
マルチスレッド時の直列化部分を別にできるとか、ヒープの分断への対応としては
なかなかいい考えかも。なんて。
0461456
NGNGconst char *buffer_prac=(const char*)0x0f0f0f ;
のところは多分
extern char * const buffer_prac =...
に違いない
0463デフォルトの名無しさん
NGNG引数の型名が違う時は、
aa(int n=10);
aa(char nn=20);
のようにデフォルト引数は使えないのでしょうか?
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNG0466444
NGNG453と↓を比べたときの利点が未だにわからないのですが、解説お願いできますか?
class CHeap
{
public:
CHeap(void* addr, std::size_t size);
void* Alloc(std::size_t reqSize);
void Free(void* obj);
};
CHeap chibiHeap(reinterpret_cast<void*>(0x80000000), 1024);
0467デフォルトの名無しさん
NGNGメモリ管理はアロケータでやってください。
そして、手持ちのコードは捨てて。おねがいだから。
0468デフォルトの名無しさん
NGNGstd::string str;
size_t pos;
で、pos >= str.size() のとき、str.find("hoge", pos); は正しく動作(nposを返す)しますか?
それとも未定義な動作でしょうか。
0469_
NGNG0470デフォルトの名無しさん
NGNGnposを返す、と定義されている。
0471デフォルトの名無しさん
NGNG> 「インスタンス確保時のサイズをテンプレート引数にする」は妙案な気がしてきた。
いやたぶんそれ、7,8年前からの常識だと思う。
0473デフォルトの名無しさん
NGNGヘンな納得の仕方すんなよ。
0474デフォルトの名無しさん
NGNG会社勤めの人ご苦労さまですm(__)m
質問おながいします。
c++のdeleteオペレータですが、
char* psz=new char[10];
と宣言、初期化した場合
delete [] psz;
で破棄するとのことですが
これってコンパイラがpszには配列が入っている
と分かっているのになんで[]なんて書く必要が
あるのですか?
また
char* tmp;
tmp=psz;
delete [] tmp;
と書いてもちゃんと走りました。
コンパイラはポインタ変数を見たら
それが配列か配列でないかどうやって
わかるんですか?
長文スマソ。。。
0475デフォルトの名無しさん
NGNG> それが配列か配列でないかどうやって
> わかるんですか?
それがわからないからdelete[]があるんだよ。
まぁそんなもん使わずになるべくvectorで済ましとけ。
0476デフォルトの名無しさん
NGNG動いたのはたまたま。
0478デフォルトの名無しさん
NGNG次元は型からわかるだろ。
最も次元がわからなくてもdeleteは正しく動くだろうけど
0479デフォルトの名無しさん
NGNG次元じゃなくて大きさだろう?
0481デフォルトの名無しさん
NGNG配列形式で new した場合、
本当に確保される領域は (クラスのサイズ)×(要素数)+α だ。
単体で new した場合にはこういう余分なものは付かない。
このαがいくつかはコンパイラ依存だけど、
大抵は確保した数を保存するための領域のサイズ
(多分4バイト)になると思う。
これはデストラクタを呼ぶときに必要になる。
+αを許している仕様は、こういうことができるようにするためらしい。
実際に new から返されるアドレスは、確保されたメモリの先頭+αになる。
ここで重要なのは、ポインタ変数を見ただけでは+αがあるか分かんないってことだ。
だから+αがあるものとないもので解放処理は変わってくるので、
delete [] と delete をきちんと使い分ける必要が出てくるわけだ。
そのコードがたまたま動いてるのは、多分基本型でデストラクタがないからだと思う。
そのコンパイラは基本型の場合はα=0にしてるんじゃないかな。
でもこういうのはコンパイラ依存なんで、それに頼ったコードは書いちゃダメ。
一応+αをつけるコンパイラがあったら、
メモリを解放させる位置がαだけずれるので変になる。
0483デフォルトの名無しさん
NGNG>tmp=psz;
>delete [] tmp;
>と書いてもちゃんと走りました
無問題。
0484デフォルトの名無しさん
NGNG俺もすっきりした。
あんたみたいな良い人がいると本当助かるよ。
0485デフォルトの名無しさん
NGNGそういう知識ってどこで手に入れるのですか?
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGm(__)m
0488デフォルトの名無しさん
NGNG> return a; // ※良い子はこんなコードを書いちゃいけません
> }
この関数を抜けた時点で、デストラクタが呼ばれてaがあぼーん
( ̄Д ̄;)
0489デフォルトの名無しさん
NGNG実体持ってないのにデストラクトするの?
0490デフォルトの名無しさん
NGNG>c++のdeleteオペレータですが、
>char* psz=new char[10];
>と宣言、初期化した場合
>delete [] psz;
>で破棄するとのことですが
>これってコンパイラがpszには配列が入っている
>と分かっているのになんで[]なんて書く必要が
>あるのですか?
仕様です。
>また
>char* tmp;
>tmp=psz;
>delete [] tmp;
>と書いてもちゃんと走りました。
>コンパイラはポインタ変数を見たら
>それが配列か配列でないかどうやって
>わかるんですか?
>長文スマソ。。。
たぶん区別せずに解放しちゃって、後々バグの元になると思います。
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNGC#の方が勢いがあるような・・・
0493デフォルトの名無しさん
NGNG参照元のデストラクタが呼ばれる。
コピーコンストラクタと言う物を調べてください。
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNGいいかげんなこといってんじゃねぇよ。
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNGコピーコンストラクトされる場所がないような・・
0498デフォルトの名無しさん
NGNGどういう意味ですか?
コピーされてないので、問題だと言ってるのですが?
0499デフォルトの名無しさん
NGNGどんな問題が発生するのか、実例だしてくんろ
0500デフォルトの名無しさん
NGNGconst A* foo( const A* a ) {
return a;
}
激しく問題ねーじゃねーか。
0501デフォルトの名無しさん
NGNG> return a; // ※良い子はこんなコードを書いちゃいけません
> }
a は参照だからコピーコンストラクタは呼ばれないし、
だからこの中でデストラクタも呼ばれない。
ここで問題になるのは、a が一時オブジェクトかもしれないということだ。
0502デフォルトの名無しさん
NGNGconst A& a = foo( A() );
この実行後、aの実体はデストラクトされてるかもしれんね。
対して
const A& a = A();
このときはaのスコープの範囲まで一時オブジェクトの生存が延長されるんだっけ。
そういう意味では落とし穴ではあるか。
0503デフォルトの名無しさん
NGNG一時オブジェクトでもfooには何も問題ないと思うんですけど。
0504デフォルトの名無しさん
NGNGその通り。
0505500
NGNG0506デフォルトの名無しさん
NGNG{
...
}
とあって
func(string("aaa"));
という風に呼んでいるコードがある。
stringオブジェクトって名前無しオブジェクトになるのでしょうか?
このスコープから抜けたらデストラクタが呼ばれるのでしょうか?
関数を呼び出したときにはコピーコンストラクタが呼ばれている?
0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNGvoid func(const string& s){}
void test()
{ func("test"); }
こうする。
0509デフォルトの名無しさん
NGNG0510506
NGNGthanks!
うちの処理系だと "test" は const char * と認識されて
コンパイル通らないんです。
0511506
NGNGpublic:
Test()
{ cout << "Test::Test()" << endl;
}
Test(const Test& test)
{ cout << "Test::Test(const Test& test)" << endl;
}
virtual ~Test()
{ cout << "Test::~Test()" << endl;
}
};
とありまして
func(Test test)
{ ...
}
とあります。
test()
{ func(Test());
}
と呼び出すと
オブジェクトが途中で消失してしまいます。
コピーコンストラクタが呼ばれない。
なぜ string だと上のようなことがOKなのでしょうか?
0512デフォルトの名無しさん
NGNG511のコードはコンパイルできないはずだが、関数の引数の話に限れば、
それで問題ないはず。
まともな処理系じゃないんじゃないの?
0513デフォルトの名無しさん
NGNGC++ でこういうのあり?
これデーモンプログラムなんだけど。
どこにも delete がないんだよね。
0514デフォルトの名無しさん
NGNGそれだけの情報で判断できるヤツなどいないと思われ。
0515デフォルトの名無しさん
NGNG俺様がいる
0516515
NGNG0517デフォルトの名無しさん
NGNG処理系によりけりかな?
0518デフォルトの名無しさん
NGNGどういうこと?
0519デフォルトの名無しさん
NGNG昔BorlandのOWLだか(いやもっと前か?)では
new TWindow(parent, ...);
とかいうふうにnewの戻り値を受け取らない構築が普通なやつがあったような。
とにかく受け取り手が開放の責任を持つとかなってるんじゃないの。
0520513
NGNG190MB越えている・・・
0521デフォルトの名無しさん
NGNGで、ここで何を答えて欲しいんだ?
0522デフォルトの名無しさん
NGNGmethod(B* obj) {
...
delete obj;
}
}
A->method(new B());
0523513
NGNG引き継いだプログラムなんですが
明示的に delete するべきですよね。
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG必ずしもそうとはいえないけど。
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG自分で delete する必要性があるのかなんて分からん。
method の引数の型が auto_ptr<B> だったり、
内部で delete してたり、
A 内にポインタを保持しておいて、
別のタイミングで勝手に delete してくれたりする場合は
何もしなくていいわけだし。
0529デフォルトの名無しさん
NGNGauto_ptrのコンストラクタはexplicitだからあそこではマッチしないけどな(笑)
0530デフォルトの名無しさん
NGNG0531441
NGNGもう書いてある。もう一度書いてもあなたはそれを利点だとは思わないから理解してもらえない。
一つだけあるのは >>446 であなたが否定した事。これはここまでのやりとりで
あなたが誤解してただけで、微かな利点である事はわかってもらえるかなとも思う。
>>467
あれがメモリーアロケータですが何か?
っていうか、sbrk も HeapAlloc もない環境なんだよ。
自分でヒープ管理書かなきゃ駄目なの。
メモリー無尽蔵な PC での富豪的プログラミングの経験しかない香具師はすっこんでろ。
>471
おじいちゃん。ぼく最近まで C++ 知らなかったんだ。
てんぷれーとっていうのも最近つかいはじめたばっかりなんだお。
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG0x9FFFFまでは俺様の領域
0534デフォルトの名無しさん
NGNG0535444
NGNG> 一つだけあるのは >>446 であなたが否定した事。これはここまでのやりとりで
> あなたが誤解してただけで、微かな利点である事はわかってもらえるかなとも思う。
「わからない」と言って解説お願いしたのに、「わかってもらえるかなとも思う」とは、
勝手な妄想の激しい方ですね。
安易にテンプレートを使うことによるデメリットを受け入れた上で、
その微かな利点を優先させるほどの理由がわからない。
と、こういうわけで、解説お願いしたいのですが、いかがでしょうか?
0536ひよこ名無しさん ◆ZCZKn7MbRM
NGNG・structure
・structural
どちら?
随分マニアックな質問ですが、よろしくお願いします。
0537デフォルトの名無しさん
NGNGC言語より英語を勉強したほうがいいぞ
0538デフォルトの名無しさん
NGNG中学校の英語のレベル。
品詞ってわかりますか?
0539441
NGNG煽りには煽りで応じるのが2ちゃんの礼儀だと思ってたんだけど。
>>533
0xA0000 からは何がはじまるのですか?
>>534=>>467
おまえの脳内の事なんて知るかばか
>>535
>「わからない」と言って解説お願いしたのに、「わかってもらえるかなとも思う」とは、
勝手な妄想の激しい方ですね。
ワケワカラン。「おまえのいってる事が全部わからない」に対して「これだけはわかってもらえるか?」は
受け答えとして何かおかしいですか?
> 解説お願いしたいのですが、いかがでしょうか?
だってあなた実利主義者でしょ?
「ここの具合がこう美しい」とか(目に見えない心理的な利益を)説明しても
共感してくれないって、今までのやりとりから感じられるんだもん。
あとヒープ管理なんて一度書いたら滅多に直さないからテンプレートにするデメリットはたいしてないという罠。
0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNGの「安易に」って部分に
「俺はテンプレートの利点も欠点も分かってるんだ」って雰囲気が読み取れる。
単純に煽ってるだけだな。
0545デフォルトの名無しさん
NGNG何のためにつかうんだろ?
>>466じゃダメなの?
0546デフォルトの名無しさん
NGNGヒープ管理?ああOSが勝手にやってるだろってなレベルしかいないから。
こいつらじゃ標準入出力程度のコードも書けないだろ。
0547デフォルトの名無しさん
NGNGだから偉そうにいうなら教えてくれよ。FreeBSDのソース嫁とか言うなよ
0548デフォルトの名無しさん
NGNG>>546はFreeBSDなんて知りません。
0549444
NGNG> 受け答えとして何かおかしいですか?
535でそう受け答えしたつもりなら、文章にもっと気をつけてください。
少なくともあの文章では、どうやっても「わかってもらえるか?」などという解釈には至りません。
で、「わかってもらえるか?」に対する答えは「それはわかります」です。
> だってあなた実利主義者でしょ?
> 「ここの具合がこう美しい」とか(目に見えない心理的な利益を)説明しても
> 共感してくれないって、今までのやりとりから感じられるんだもん。
あなたの勝手な観察結果などどうでもいいですから、解説してもらえませんか?
実利面で共感してもらえないと自覚している実装を
(おそらく実際の仕事で)選択する理由もわかりません。
> あとヒープ管理なんて一度書いたら滅多に直さないから
> テンプレートにするデメリットはたいしてないという罠。
テンプレートを使った場合のデメリットが
ソースの修正時にしか発生しないということですか?
そんなことはないと思いますよ。
0550441
NGNG正直、スンマソンかった。
>>543
趣味同じだね。
>>544
俺やっぱ煽られてますか?
>>545
心理的な物。その方が生成物が美しそうな気がするだけ。
>>546
って言えるくらいラベルの高いあなたがいるじゃないですか。
ラベルの高い人ハッケソしたので質問ー。
日本で買える本でヒープ管理とかについての良本ってないかな?
Modern C++ design のは遅すぎだし(サイズについては最適化されてる?)、
Efficient C++ のは事実上のリーク(プール管理オブジェクトの解体まで一切解放しないじゃねーかばかぁ)だし、
みんなもっともらしい嘘ばっかりなんだよね。
Efficient C++ の参考書籍の Secrets of C++ Master ってのを買おうと思ったら
Amazon では品切れだし、他では売ってないし、Amazon 以外で洋書買ったことないし…。
非 PC な世界では日常的なテーマな気がするんだけど、なんでこんなに参考書がないんだろう?
0551441
NGNG> 535でそう受け答えしたつもりなら、文章にもっと気をつけてください。
すまんすまん。お互い文章にはもっと気を使わなきゃいかんね。
> (おそらく実際の仕事で)
ごめんこれ趣味。仕事の時はもっと気を使ってます(そもそもテンプレート使ったコード読めない人も多いので)。
> あなたの勝手な観察結果などどうでもいいですから、解説してもらえませんか?
> 実利面で共感してもらえないと自覚している実装を
うまく言葉にはし難いんだよね。あえて言うなら
オブジェクトコードみた時に、専用に見えるような(汎用性がないように見える)美しさ。かな。
まさしく実利とはまったく関係ない「おいらの(おいらの)世界(せかい)やっほ(やっほ)やほほほ(やほほほ)」てな感じなわけですが。
> テンプレートを使った場合のデメリットが
> ソースの修正時にしか発生しないということですか?
> そんなことはないと思いますよ。
似たようなコードの重複やそれが回避された時の最適化の抑制を心配してる?
最近のコンパイラだとできるだけ重複しないようにしてくれるし、
最適化も既知の型の部分には他と変わらないようにかかるはずだけど。
0552デフォルトの名無しさん
NGNG趣味で組み込み用?・・・某携帯ゲーム機でしょうか。
> テンプレートを使った場合のデメリット
exportをサポートしない処理系では、ほとんどの実装をヘッダに晒す羽目になる。
メモリ管理アルゴリズムとして再利用しようと思っても、コンパイル時に決定する引数しか渡せない。
など。
> オブジェクトコードみた時に、専用に見えるような(汎用性がないように見える)美しさ。かな。
なるほど。共感しかねます。
ヒープ管理の自作なら、本なんか買わなくても、
googleで十分な記事が拾えると思いますよ。
参考書が無いのもそのせいではないでしょうか?
0553デフォルトの名無しさん
NGNG>Modern C++ design のは遅すぎだし(サイズについては最適化されてる?)、
おまえはばか?これはtemplateを使うための入門本だよ。
まさか、Lokiをそのまま使って喜んでないよな。
0554デフォルトの名無しさん
NGNG真面目な話は大いに結構だが、煽りながらやる必要もあるまい。
0555デフォルトの名無しさん
NGNGそれをクラスにするか名前空間にするかで悩んでいます。
初期化・終了処理が必要なのでクラスにしたい気もするんですが、
インスタンスを複数生成されると困るので名前空間のほうが良いような気もします。
よろしければアドバイスをお願いします。
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNGそれを引数にさらに自クラスを呼ぶってこと?Cの再帰処理みたいな感じですか?
0559デフォルトの名無しさん
NGNGサンクスです。良さそうです。検討してみます。
0560デフォルトの名無しさん
NGNGその言葉遣いで言えば、実体化するときに同じクラスの
既にあるインスタンスを参考にすること。じゃないか?
0561デフォルトの名無しさん
NGNG初期化時にしかコピーコンストラクタは呼ばれないんだから
自分自身が引数になることはあり得ませんです。
0562デフォルトの名無しさん
NGNGrealloc でメモリを再割り当てしても大丈夫なのでしょうか?
何か後々問題とか出るのでしょうか?
0563デフォルトの名無しさん
NGNGんなことやるな
0564デフォルトの名無しさん
NGNGreallocが必要なときはstd::vectorなどがあります。
C++ではどうしても必要なとき意外mallocすらつかわない。
0565デフォルトの名無しさん
NGNG>C++ではどうしても必要なとき意外mallocすらつかわない。
後学のために教えてくれ。
どういった場合に必要なんだ?
俺はそういった場面に出くわしたことがないのだが。
リソースが限られている環境とかか?
0566デフォルトの名無しさん
NGNG0567566
NGNG0568デフォルトの名無しさん
NGNG実行の中途でメモリ確保に失敗して(きちんと終了処理してまたは
何もしないで)終了するアプリケーションがあるが、
一番よいのは最初にのみ確保してみて失敗すれば実行しないことだろう。
MS Officeはメモリ確保に失敗すると遠慮なく落ちるがあれは最悪
セーブダイアログを出そうとしたタイミングとかだともうやるかたなし
0569デフォルトの名無しさん
NGNGクラスがコピーされるときに呼ばれる、コンストラクタのこと。
特別なコンストラクタがあるのじゃなくて。
引数が違うだけ。
0570デフォルトの名無しさん
NGNGたとえばへたれMFCがCWinApp::m_pszProfileNameの開放にfree()を使ってたりするときとか。
0572デフォルトの名無しさん
NGNGnew をオーバーロードしたい時とか。
0573デフォルトの名無しさん
NGNGこれ生姜ないの?
便利さの犠牲
どうしよう?
0574デフォルトの名無しさん
NGNGその点Javaのgenericsはコードを複製しないから最高だよ。
0575デフォルトの名無しさん
NGNGその代わり実行速度は(略
0576デフォルトの名無しさん
NGNGそれを補ってあまりある強力さがあるように思うが。
>>574
Javaはメモリ管理しなくていいぐらい
本体がメモリを食うからなぁ…
0577デフォルトの名無しさん
NGNG>最高だよ。
こいつ死滅系スレにいるバカだな。トレードオフのことを全然分かっちゃいない。
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNGサイズが大きいってのを補えるわけないじゃん。バカ?
0580デフォルトの名無しさん
NGNG0581デフォルトの名無しさん
NGNG1の十倍と10の十倍は違うからなぁ
0582デフォルトの名無しさん
NGNGフロッピーに収まるサイズだったらなんか気まずいよね。
0583デフォルトの名無しさん
NGNGそういう奴はWindowsもUNIXも使うな。MS-DOSでも使ってろ
0584デフォルトの名無しさん
NGNGスクリプトで加工したりしてめんどい
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNGでは何を使えと?
0588デフォルトの名無しさん
NGNGマシン語
0589デフォルトの名無しさん
NGNGマシン空間光に乗って〜
0590デフォルトの名無しさん
NGNGスクリプト言語だと、とりあえずファイル容量だけは減らせるYO!
それに意味があるかは別として。
0591デフォルトの名無しさん
NGNG0592神戸市民
NGNG当方、ボーランドC++コンパイラー(無料の物)を使用しております。
キーの入力時に、エンター(リターン)キーを押さずに、「a」を
押したらそのまま「a」と入力されるようにする事は可能でしょうか?
「DOS窓で動作するテキストベースのRPG」の「キャラクターの移動」で、
現在は「a」「エンター」「a」「エンター」「a」「エンター」・・・
とキーを打っています。
0593デフォルトの名無しさん
NGNGWin32APIのConsoleなら色々できるがWindowsProgrammingになる。
conio.hを用いればMS-DOSプロンプト用(激ノロ)になる。
#include<conio.h>
int getch(void);エコーなし一文字入力
int getche(void):エコーあり
int kbhit(void);キー入力有無のチェック
void gotoxy(int x,int y);カーソルの移動
int wherex(void);カーソル位置x
int wherey(void);y
void clrscr(void);画面消去
void textcolor(int newcolor);文字の色
0594デフォルトの名無しさん
NGNG0595神戸市民
NGNGありがとう御座います。
ウインドウズAPI使ったら出来るのですね。
週末にでも、書籍買ってきます。
0596デフォルトの名無しさん
NGNG止 め と け 。
自前でウィンドウを作って
背景を黒に塗りつぶして作るほうがはるかにマシ。
0597デフォルトの名無しさん
NGNGGUI のデバッガ付きのコンパイラで、テンプレートがイケてるのでもいいのですが。
CodeWarrior ってテンプレートはどうなんでしょうか?
ご存知の方いらっしゃいましたらよろしくお願いします。
0598596
NGNG0599デフォルトの名無しさん
NGNGgdb
0600デフォルトの名無しさん
NGNG操作をします。
次に、char型の配列の先頭アドレスを要求してくる関数にbufを渡したいん
ですが、これって普通に &buf[0] とやっちゃっていいもんでしょうか?
vector内のバッファのアドレスを取る関数とかがあれば、それを使うのが
適当だと思うんですが、見当たらないもので。
0601デフォルトの名無しさん
NGNG「vectorは引数に配列を取るようなレガシー関数との互換性がある」
って書いてあったけど本当かどうか試したことないからわからん
0602デフォルトの名無しさん
NGNGOK。
EffectiveSTLかなんかで
○ &buf[0]
× buf.begin()
って読んだ覚えがある。試したことないから漏れも知らんが。
0603デフォルトの名無しさん
NGNG> GCC でコンパイルしたプログラムを GUI でデバッグできるデバッガってありますか?
insight, ddd
> GUI のデバッガ付きのコンパイラで、テンプレートがイケてるのでもいいのですが。
文句なしに VC++.NET 2003。
> CodeWarrior ってテンプレートはどうなんでしょうか?
Lokiの開発環境であったくらいにOk。
0604r
NGNGstd::vectorって、そこまで内部構造が外に透けて見えてるのかなぁ。
charの可変長配列が、ナル終端される...つまり文字列だったら
std::stringを使いさえすれば万事OKなんだろうけど、
そうしてないのは、きっとstd::vectorを使うことになんか意味があるんだろうなぁ。
&buf[0] よりも、 ((char*)buf)[0]のほうがよさそうな気もするなあ。
あー、適当なことばっかりゆってて、信用されたら嫌だなぁ。
0606597
NGNG>>599
gdb って GUI 版もあるんですか?それよりも Windows でも使えるんでしょうか?
>>603
情報ありがとうございます。 insight と ddd というのは知らなかったので
調べてみますね。
Loki は CodeWarrior で書かれたのですかー。じゃあ十分購入候補になりそうです。
で、VC++.NET は大丈夫なのでしょうか?2003ってメジャーバージョン上がってるんでしたっけ?
cl.exe 13.x は無料のを触ってみたのですが、VC6 の頃からたいして変わってなかった印象なのですが…。
0607デフォルトの名無しさん
NGNG> ((char*)buf)[0]
それは動かない可能性が大いにあるぞっていうか意味全然ちげーし。
0608デフォルトの名無しさん
NGNGどこか感覚が狂っていると思われ。
0609デフォルトの名無しさん
NGNGbuf.begin() が返すのは iterator
>>604
> &buf[0] よりも、 ((char*)buf)[0]のほうがよさそうな気もするなあ。
意味不明
0610r/604
NGNG指摘サンクス。
つーか、すまん。
0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNG0613デフォルトの名無しさん
NGNGじゃ、みなさんどうやって固定値保存されてるんでしょう。
無理やりSTLのvectorとかに入れて、sizeやlow、highを取れるようにしたり、なんかします?
0614デフォルトの名無しさん
NGNGどういうことがしたいのか例示キボン
まあ普通そもそもlow, highなんて使わずに定数名を直接書いたりしてる気が < C/C++
0615デフォルトの名無しさん
NGNG例えば、全テーブルに操作に処理を行うとかです
for (int iCount = low(EnumTable); iCount < high(EnumTable); iCount++)
Proc(TableNameArray[iCount]);
0616デフォルトの名無しさん
NGNGテーブルなら添え字は列挙ではなく整数で、普通vectorとかなので
「無理やり」という感覚ではなく、普通に
for(Table::iterator p = table.begin() ; p != table.end(); p++ ) {
Proc(*p);
}
なかんじ
0617デフォルトの名無しさん
NGNGで、念のため確認ですが、固定値をenumじゃなくて、stl保存しててもふつー、ですか?
0618デフォルトの名無しさん
NGNG「stl保存」の意味がわからんが・・
0619デフォルトの名無しさん
NGNG保存じゃなかった、記述。
固定値をソースコードに記述する場合に、
enumじゃなくて、vectorクラスを一個用意してても、変と思われないですか?
という意味です。
0620デフォルトの名無しさん
NGNGそれが指す先がテーブルの添え字で、上下端を表すだけの意味なら
vectorとかを使うだけだな。
その定数がテーブルの添え字じゃないのてならenumかcont intなどだけど。
(添え字でもenumも使うこともあるが、あくまでも特定のインデックスに特別な意味があるとき)
0621デフォルトの名無しさん
NGNGenum TestNumber {
TestNumber_None = 0,
TestNumber_Data1,
TestNumber_Data2,
TestNumber_End,
};
for (iCount = TestNumber_None; iCount < TestNumber_End; iCount++)
Proc(TableNames[iCount]);
0622デフォルトの名無しさん
NGNG境界に使いたいなら、上下端も定数にしとけばいいじゃん。
それが一番普通と思われ。
0623デフォルトの名無しさん
NGNGじゃ、上下指定値もenumメンバにしときます。
で、TableNamesみたいなのは、
char const *TableNames[5] = {
"Table1",
"Table2",
"Table3",
};
で、良いですよね?
0624デフォルトの名無しさん
NGNGなんで[5]で中身が3つなんだ?
定数配列なら不一致を防ぐためにむしろ
((sizeof TableNames)/(sizeof TableNames[0]))を個数として使うかなー
ループは0から(個数-1)まで。
0625デフォルトの名無しさん
NGNGenum TableNumber {
TableNumber_None = 0,
TableNumber_Data1,
TableNumber_Data2,
TableNumber_End,
};
char const *TableNames[TestNumber_End] = {
"Table1",
"Table2",
"Table3",
};
for (iCount = TableNumber_None; iCount < TableNumber_End; iCount++)
Proc(TableNames[iCount]);
で、どうでつか?
0626デフォルトの名無しさん
NGNG"Table1",
"Table2",
"Table3",
0,
};
for (const char** p = TableNames; *p != 0; ++p)
cout << *p << endl;
はダメか?
0627625
NGNGそうも書けますよね。どっちが良いのかな。
実行時にTableNames[]の個数を取るにも、sizeof(*TableNames)で良さそうですしね。
0628デフォルトの名無しさん
NGNGchar *p[5]={&a,&b,&c,0,0};
のようにNULLではなくて、0を入れておくべきなんだっけ?
0629デフォルトの名無しさん
NGNG別にどっちでもいい。0かNULLかは単に表記上の問題。C FAQ読んでみ。
0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNGC++ では NULL は 0 と定義される。
>>632
可読性下がるから今すぐ NULL 使え。
0635デフォルトの名無しさん
NGNGエラトステネスのふるいを用いて配列を使った時と、
配列を使わないで作成した時との
コンピューターが必要とする変数の数、計算のかかる手間等の
違いはどのようなものですか?
0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG_
┌――─┴┴─――┐
│ セルフサービス .│
└―――┬┬─――┘
││ ./
゛゛'゛'゛ /
/
| \/
\ \
\ノ
0638デフォルトの名無しさん
NGNGまともな処理系だけ使っていればいいなら、null pointer
はNULLと書きたいけど、そうでない処理系を相手に
する場合は、やっぱり0と書くしか無い。
#if defined(__cplusplus) && defined(BROKEN_NULL)
# undef NULL
# define NULL 0
#endif
なんて荒技もあるにはあるが・・・。
0639デフォルトの名無しさん
NGNG自分で作って見れ。そして比較して考えろ。
それが一番成長する。
プログラムは作って実感していくことが大事だ。
0640デフォルトの名無しさん
NGNGおながいします。
標準ライブラリではないかもしれないのですが
関数のatoi()には_atoi()ってのもVCにはあるのですが
これってどう使い分けるのですか?
またどう違うのですか?
そもそもよく見かける_や__ってなんなんでしょう?
0641デフォルトの名無しさん
NGNG0642デフォルトの名無しさん
NGNGまともでない処理系にはどんなものがあるの?
0643デフォルトの名無しさん
NGNGVC の命名規則では
_ : 処理系依存識別子(関数、変数など)
__ : 機能拡張(キーワード)
だったと思う。
うろ覚えだけど。
0644デフォルトの名無しさん
NGNG古いコンパイラとかじゃない
0646597
NGNG>>634 >>638
-- null.h --
class NullPointer{
public:
template <typename T> operator T* () const { return 0; }
…その他こまごました便利機能は自分で考えれ…
};
extern const NullPointer null;
-- null.cpp --
#include "null.h"
const NullPointer null;
こんな感じでドゥ〜?
詳しくは effective あたりに。
0647デフォルトの名無しさん
NGNGテンプレートを、あまつさえメンバ関数テンプレートを使えるとは思えんけどね。
0648デフォルトの名無しさん
NGNGちなみにC言語の決まりで、頭に_を付けるのはライブラリやコンパイラの
製作者のために予約されていて、普通のプログラマは付けてはいけないこと
になってるゾ。
0649デフォルトの名無しさん
NGNGでも、3 つ以上ならいいんだっけ?
___a とか。
0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNG2つ以上からOKだよ。
__aとか。
0652デフォルトの名無しさん
NGNGやばいんじゃないかと思います。
char配列がconstでよいなら、stringのc_strを使えばok
0653640
NGNGサンクスコ!
ちなみにアンダバー2つ__についてはMSDNに書かれていますた。
ちゃんと読んでなくてすんまそんですた。
Microsoft 固有の仕様 →
Visual C++ では、先頭に 2 つのアンダースコアを続けた識別子を
コンパイラ処理系用として予約しています。
したがって、Microsoft 固有のキーワードの先頭にはアンダースコア
を 2 つ続けることになっています。
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG2つの連続するアンダースコア __ を含む名前か、
アンダースコアで始まりそれに大文字が続く名前は
どんな場合においても処理系のために予約されています。
グローバル名前空間内においては
アンダースコアで始まる名前全体も
処理系のために予約されています。
0657デフォルトの名無しさん
NGNGうそはよくないです。
0658600
NGNGスマソ。説明の為に変えたんだけど、実はcharじゃなくてintのvectorです。
良ければ、やばいと思う理由を教えてください。
漏れが心配したのはvectorが伸張するときなんかに、分断された領域を
確保して、[]演算子で辻褄を合わせる、なんてことが許されてたら、&buf[0]
で取るアドレスから配列が連続して続いていると仮定するのはまずいよなあ、
という点です。
で、質問させてもらったわけですが、おかげさまでその心配は解消したわけです。
0659デフォルトの名無しさん
NGNGこれって、
「2つの連続するアンダースコアを含む名前」
「アンダースコアで始まる名前全体」
ってのがアンダースコア3つ以上繋がったのを
含むのか含まないのかが曖昧な文だよねぇ。
0661デフォルトの名無しさん
NGNGここでも読んでみて
http://pc.2ch.net/tech/kako/993/993457354.html
0662デフォルトの名無しさん
NGNGISO 9899-1999ではまだそうなってはいない
やめたほうがいい
0663662
NGNG0665600
NGNG0666デフォルトの名無しさん
NGNGvectorを配列として扱える保証が今のところの最終仕様にはない。
vectorは使う限りコピーする位しかどうにもならないような
とは言っても私の知る限りvector<T>::iteratorはT*だけど
basic_stringにはconst charT *data()があるがconstだし
0667デフォルトの名無しさん
NGNG問題がないとスコット・メイヤーズの本に書いてある。
>>662
どこにのってる。みつけれなっかった。
>>666悪魔の数字
operator [] はiteratorを返すわけじゃありません。
0668デフォルトの名無しさん
NGNGあなたが心配していることが、あり得るのでやばいです。
0670デフォルトの名無しさん
NGNG>operator [] はiteratorを返すわけじゃありません。
そういうことじゃない。内部表現の話だ
0671デフォルトの名無しさん
NGNG呼び出す関数を、変えるのがいいかな。
テンプレート化して、イテレータで、最初と最後を渡すようにすれば、
どんなコンテナでも配列でも、使えるようになる。
0672600
NGNGすると、>>602 のEffectiveSTLに書いてあることや、>>601 の「何かの本」
の記述が間違っているかどうか、ということですか。
最終仕様にvectorの内部表現が言及されていない限り、vectorを配列と
して扱いたい場合は、他に用意した配列にvectorの内容をコピーするの
が最も安全、ということですね。
>>671
呼び出す関数はレガシーなライブラリだったりすると変えられないのです。
0673デフォルトの名無しさん
NGNG>の記述が間違っているかどうか
実際にそうでない処理系が挙げられないという点で間違ってはいないし
そういう著者が主張しているということは将来盛り込まれる可能性も高い。
0674デフォルトの名無しさん
NGNG「通常は問題ない。」と書いてあるね。
0675tantei
NGNG●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●別れさせ工作
あらゆる手段を使ってターゲットを別れさせます!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
その他人生相談からどんなお悩みでも解決いたします!!
直通 090−8505−3086
URL http://www.h5.dion.ne.jp/~grobal/
メール [email protected]
■グローバル探偵事務所
0676667
NGNGああ。なるほど。すみません。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNG静的にするメリットがないような気がするのですが
0680デフォルトの名無しさん
NGNGHSPプログラムコンテスト2003オンライン投票
http://www.onionsoft.net/hsp/contest2003/entryn1.html
HSPプログラムコンテスト2003に一番乗りで出展したものの
Windowsに標準でついてくるゲームを手軽に起動できるという(というかただのショートカットつめあわせ)
しょーもないプログラムでたたかれまくっているプログラミング暦3年(!)の高校生の
作品、ゲーム君をみんなの力で一位にしよう。
【【【 投票方法 】】】
http://www.onionsoft.net/hsp/contest2003/entryn1.html の一番下、エントリーNo8の「ゲーム君」
評価を「A」で選んでコメントを記入して「送信」(コメントいれるとなおよし)
http://www.onionsoft.net/hsp/contest2003/eval/eval.cgi?md=cmt&id=8
でいままで送信されたコメントが見えるよ!(けっこう笑える)
順位 http://www.onionsoft.net/hsp/contest2003/eval/eval.cgi
0681デフォルトの名無しさん
NGNG俺はシングルトンクラスのインスタンスの構築、破棄に使ったりするね。
Cxxx::CreateInstance()みたいな。
何かCで出来ないことが出来るって意味合いのもんじゃないよね、
こういうのって。
0682デフォルトの名無しさん
NGNGC++98の時にはそうなっていなかったけど、TCが出て、
現行仕様ではOKとなっている。実際には、どこのコンパイラでも
配列として扱えるでしょ。
http://std.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#69
0683デフォルトの名無しさん
NGNGシ、シングルトン・・・?
0685デフォルトの名無しさん
NGNGお前だけじゃないから、安心しろ。>>683 がアフォなだけ
だから相手にするな。
0686デフォルトの名無しさん
NGNG俺にも教えろ!
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGここはC++スレなんですが
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNG#include <stdlib.h>して。
0691デフォルトの名無しさん
NGNG環境依存でなら他にいくらでも。
でも、このスレよりも目的の環境のスレで聞くがよろし。
0692デフォルトの名無しさん
NGNG×話し
○話
0693デフォルトの名無しさん
NGNG0694690
NGNG了解。gcc逝ってきます。
0695デフォルトの名無しさん
NGNG頭の上に蝿がとまってるよ。
0696デフォルトの名無しさん
NGNG話 = 名詞
話し = 動詞(連用形)
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNG「話」で送らない形は連用形「はなし」と終止形「はなす」に多く見られる。
(名詞は連用形が名詞化するのであって特別な場合ではない。)
(〜に候(さうらふ)。〜に候(さうらひ)て、などまだしばしば見るだろう。)
あくまでも訓は借字であり、あまり国語審議会の言うことに
こだわらない方がよい。
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG用例から言っても必ずしも送りがなくなるわけではない
だから「はなし」は名詞でも連用形でも「話し」と送る場合がある
「おはなし」「お話し」「お話」、「つり」「釣り」「釣」
「あゆみ」「歩み」「歩」、「みずあび」「水浴び」「水浴」
とどのつまり、他の言葉の問題と同じく各人の慣れに帰着する。
0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNGダウト。
0705703
NGNGなぜ俺に?
ひょっとして「自然なサイズ」=「CPU のビット数」だと思ってる?
64ビット機での int サイズ問題とか知らないんかね。
最近どっちかのスレで盛り上がったと思うけど。
0706600
NGNGANSI/ISO 14882-1998中の欠陥として既に広く知られているんですか。
これが最終仕様かと思ってましたが、まだ先があったんですね。
というわけで、二転三転しましたが、vectorの要素は連続した領域に確保
されていると仮定して、配列と同じように使ってよい、と言うことですね。
どうもありがとうございました。
0707デフォルトの名無しさん
NGNG0709デフォルトの名無しさん
NGNGダウトってどっから流行ったん?
単語の意味を考えると、どうも用法がズレてる気がしないでもない。
0710デフォルトの名無しさん
NGNG同名のトランプゲームの用法ではないかな
0711デフォルトの名無しさん
NGNGおかしなところを「ダウト!」と言ってから指摘するクイズ番組があった。
0713デフォルトの名無しさん
NGNGム板でぬるぽとか言うな。鬱陶しい。
0714デフォルトの名無しさん
NGNGぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
ぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽぬるぽ
0715デフォルトの名無しさん
NGNG鬱陶しい。
0716デフォルトの名無しさん
NGNG型の順序の判定。
順番の決め方の基準は環境依存だが、とにかく
何かしら順序をつけてくれることが保証されている。
0718デフォルトの名無しさん
NGNG>>713
なぜ?
0720デフォルトの名無しさん
NGNG必要になるのかな? >before
0721デフォルトの名無しさん
NGNGclass Test {
Test *cursor;
public:
explicit Test( Test *p = 0 ) : cursor( p ) {}
ってのがあるんですが、コンストラクタ部分のcursor(p)ってのは
仮引数をそのままcursorに代入するんですか?
0722デフォルトの名無しさん
NGNG代入じゃなくて初期化。
まぁ、この場合は大した違いは無いけど。
0724デフォルトの名無しさん
NGNGちなみに、
仮に const なメンバ変数だったりするとコンストラクタの中で
cursor = p;
とかすらできなくなるので、そういうときに必須の機能なりよ。
0725デフォルトの名無しさん
NGNG> C++ 仕様書 17.4.3.1.2.1
> 2つの連続するアンダースコア __ を含む名前か、
> アンダースコアで始まりそれに大文字が続く名前は
> どんな場合においても処理系のために予約されています。
小文字ならOKだったの?
> グローバル名前空間内においては
> アンダースコアで始まる名前全体も
> 処理系のために予約されています。
グローバル名前空間ってどういうこと?
クラスのメンバ変数とかならOKってこと?
プログラミング言語C++第3版のどっかに書いてある?
0726デフォルトの名無しさん
NGNG::kore
0727デフォルトの名無しさん
NGNGメンバーなら処理系定義の識別子とかぶらないし。
0728デフォルトの名無しさん
NGNGそんなことないべ?
0729デフォルトの名無しさん
NGNG__declspec とか。
0731730
NGNG0732デフォルトの名無しさん
NGNGint _zxcv;
};
これはOKということ?
0733デフォルトの名無しさん
NGNGok
0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNG終わりはよいという罠。
ジャンガリアン嫌い派の一部が m_xxx を嫌がって xxx_ とかつける。
俺はジャンガリアン派じゃないがポインタの pXxxx とメンバの m_xxx はするね。
0736デフォルトの名無しさん
NGNGジャンガリアン? ハンガリアンじゃなくて?
0737725
NGNG0738デフォルトの名無しさん
NGNG格好悪いから駄目。
0739デフォルトの名無しさん
NGNGハムスター?
0740デフォルトの名無しさん
NGNGいつから thread ってキーワードよ?作者の気の迷い?
0741デフォルトの名無しさん
NGNG__declspec(thread) のことか?
0742デフォルトの名無しさん
NGNGアンスコ2つだと後ろでもだめね。
0743デフォルトの名無しさん
NGNG事実上のキーワードは太字にしてもかまわないというか害はないと思うが…
0744デフォルトの名無しさん
NGNGconst static int a;
public:
static const int a;
どう違う?
0745デフォルトの名無しさん
NGNG書いてる順番が違う以外に
違うところは全く存在しない。
int const statc a; でも構わない。
ただ、普通は static const int a; の順で書く。
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNGふつうは
static int constだろ
0749デフォルトの名無しさん
NGNG0750デフォルトの名無しさん
NGNG0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?num=50&q=%22static+int+const%22 ←少ないYO
0753デフォルトの名無しさん
NGNGhttp://www.google.com/search?q=%22int+const%22 → 37400
http://www.google.com/search?q=%22constant+integer%22 → 9580
http://www.google.com/search?q=%22integer+constant%22 → 26100
どっちがいいんでしょうねぇ?
0754デフォルトの名無しさん
NGNG0755デフォルトの名無しさん
NGNG中から探し出すのは厳しいな。
書いてあったとしても、そんなとこにしおり挟んであるわけじゃないし。
ところで、ポインタの*は型名に付ける派?それとも変数につける派?
(typedefする派ってのは無しの方向で)
0756デフォルトの名無しさん
NGNG型名に付けるって typedef Hoge * PHoge; とかかと思ったらtypedefなしで
すぐ意味わからんかった。
スペースを入れる場所の話ね? 一応4種類考えられるが
A) type*var;
B) type* var;
C) type *var;
D) type * var;
コーディングマナーかコーディング規約スレのネタでは。
(漏れはDだが、通常typedefの中で。)
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNGint* a, b;
見たいにする香具師が出るから、もれは
int *a, *b;
0761デフォルトの名無しさん
NGNG×
int* a, b;
○
int* a;
int* b;
0762デフォルトの名無しさん
NGNG意味的には型のはずだが、C言語からの仕様で変数宣言上では型に対する修飾は変数に
付くのでややこしいね。
type* a, b;
こうしたときにbが紛らわしくなってしまう。
これを予防するには、1行1変数方式とtypedef方式が考えられる。
1行1変数)
type* a;
type b;
typedef)
typedef int* ptype;
ptype a, b; /* 上記と意味は違うが、間違えにくい */
C++的には初期化をなるべく遅らせる観点からも1行1変数が望ましいとされてるね。
Cではtypedef方式になるか。
0763デフォルトの名無しさん
NGNGC++的には初期化をなるべく遅らせる観点からも1行1変数が望ましいとされてるね。
へー
0764760
NGNGいやいや、
int * a, b;
見たいな間違いを犯すやつが出てくるから
int *a, *b;
にしろと…
0765デフォルトの名無しさん
NGNGそのaとbはどうやって初期化するつもりだ?
0766760
NGNGう、そっか
int* a = NULL;
int* b = NULL;
0767デフォルトの名無しさん
NGNGどんまい
0768デフォルトの名無しさん
NGNGint *a = NULL, *b =NULL;
じゃダメなのか?
0769デフォルトの名無しさん
NGNGコンパイルして見
0770デフォルトの名無しさん
NGNGコンパイルした
何がダメなの?
0771デフォルトの名無しさん
NGNGa,bそれぞれの型名は何?
0772デフォルトの名無しさん
NGNG両方ともint *だと思うが?
0773デフォルトの名無しさん
NGNGかく言う俺もだが。
757の指摘はあってるかもしれん。
ちょっと考えればわかることなのにな。
class A{}* a, b;
だったら、誰がどう見てもbはA*じゃなくてAになるからな。
Aを定義済みにすれば
A* a, b; でもbがAになることくらい容易に理解できる。
0774デフォルトの名無しさん
NGNGもしかして >>768 のような書き方を知らないのか?
0775デフォルトの名無しさん
NGNG入らないのか。
0776デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNGだったら何故型名と変数名の間に区切り(空白)を入れない?
0778デフォルトの名無しさん
NGNGあと、>両方ともint *だと思うが?
だったら、
int *a, *b;
↓
型名a, *b
となるのが不自然だ。bの前の*って一体何なんだ?
int*型なら
int* a;
int* b;
↓
型名 a;
型名 b;
の方がよっぽど自然だ。
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNGそもそも、変数の宣言が
型名 変数名;
と思ってる時点で大間違いなんだが。
関数ポインタはどう書くつもりでいるんだ?
int *a;
は式*aの結果がint型という意味だ。
0781デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNG引数以外での数少ない','の出番を奪わないで下さい
0783デフォルトの名無しさん
NGNGアレって何?
0784デフォルトの名無しさん
NGNGtypedef int * pint;
int a;
const pint b = &a;
*b = 0; // 書けてしまう
b = &b; // 代入ができない
0785デフォルトの名無しさん
NGNG最後、b = &a; ね
0786デフォルトの名無しさん
NGNG0787デフォルトの名無しさん
NGNGtypedef int const ic ;
typedef ic * icp ;
typedef icp const icpc ;
icpc *a ;
こうやって、const すべき所に const しやすいから、
const する時こそ typedef 使うべきだと思うな…
0788デフォルトの名無しさん
NGNG何を当たり前のことを・・・
0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNGしれんけど、C++ は int* a, b; を int *a, *b; と等価にしたかったが C
との互換のためにやむを得なかったみたいな話、どこかになかったっけか。
0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNGconst なところは const と書いてあった方が
分かりやすくていいと思うが...。
0793デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNGそれを言ったらそもそも768は質問じゃないだろ
0796デフォルトの名無しさん
NGNGint* a, b; を int *a,*b; を等価にするなら
配列の宣言の仕方も
char[10] s1, s2; になるのだと思う…
で、こんな宣言の仕方は、Cをやってる俺にとっては、とってもキモイ…
0797デフォルトの名無しさん
NGNG0798デフォルトの名無しさん
NGNGでも関数ポインタとかが
void (*)(int,char) hoge, hage;
とかになって、初心者にもわかりやすいかもよ。
0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNGtypedef char[10] T;
なら断然後者がいい。
0802デフォルトの名無しさん
NGNGどうするのが良いんでしょうか。
戻り値、ってのは基本だと思うけれど、コンストラクタで使えなかったり、
いちいちテストするのは面倒だったりするので・・・
setjmp/longjmp なんかを使って、系統的なエラー処理ってできませんかね?
0803デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
NGNGhttp://nuts.free-city.net/index.html
0805デフォルトの名無しさん
NGNG0806貧乏脱出!これであなたはお金持ち
NGNG本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
http://www.adultshoping.com/addclickport.cgi?pid=1053353765(直リン不可)
///////// ////////
0807デフォルトの名無しさん
NGNGuは余計
0808デフォルトの名無しさん
NGNGこの期に及んで例外処理なしって
環境のほうを見直すべきな感じだが
0809デフォルトの名無しさん
NGNGはげどうです
0810デフォルトの名無しさん
NGNGISO/IEC 14882:1998(E) -- C++ -- Declarators
http://www.kuzbass.ru/docs/isocpp/decl.html
の
8.3.6 - Default arguments [dcl.fct.default]
の部分にある
> -4- ……In a given function declaration, all parameters subsequent to a parameter with
> a default argument shall have default arguments supplied in this or previous declarations.
は、part19(前スレ)の726-728
http://pc2.2ch.net/test/read.cgi/tech/1052625846/726-728
の話だよね。で、それに続く以下の文:
> A default argument shall not be redefined by a later declaration (not even to the same value).
の文は、「同じscope内では同じ引数に対してdefault値を(たとえ同じ値であって
も)複数回指定することはできない」なんだろうけど…、コンパイルできたぞ
(@_@)?!!
なんで?
0811810
NGNG0812810
NGNG----------(ここから)
#include <iostream.h>
/*
* プロトタイプ宣言
*/
//int foo ( int a , int b , int c ) ;
int foo ( int a , int b , int c=3 ) ;
int foo ( int a=1, int b=2, int c=3 ) ;/* 第3引数(c)のデフォルト値を再定義 */
/*
* 定義
*/
int foo ( int a, int b, int c )
{
return (a+b+c);
}
int main ( void )
{
cout << "foo()=" << foo() << endl ;
return 0 ;
}
----------(ここまで)
を
% g++ -o a1 a1.cpp
のようにしてコンパイルしたが全く警告・エラーが出ない。。。
0813デフォルトの名無しさん
NGNGそれはjava1.4でしょ!
Cには#if #else #ifdefがあるでしょ!
0814810
NGNG0815デフォルトの名無しさん
NGNGとりあえず、3.2ではエラー出たから、バグなんじゃない?
0816デフォルトの名無しさん
NGNGバグというか、古すぎてちゃんと仕様に準拠してないか、
昔は再定義に関する仕様が特になかったのか、
そんなところでは。
0817デフォルトの名無しさん
NGNGassert を知らないの?
<cassert> ヘッダファイルでも探してみなされ。
0818デフォルトの名無しさん
NGNGBOOL Apl::InitApp( int _ii, double _dd )
{
}
こういう「 _ 」の使い方はOK?
0819デフォルトの名無しさん
NGNG規格的にはOK。
だが、人に見せたときに要らぬ物議を醸さぬよう、
そういう使い方でもやめたほうがいい。
0820デフォルトの名無しさん
NGNG良いとはいえない。
激しく既出。
それより、sageで質問じゃ、だれも気づかねーぞ。
会議中にボソボソ独り言いってんのとかわんね。
0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNG!! ! ! ! ! !
! ! ! ! ! ! !
! ! ! ! ! ! !
! !! ! ! ! !
! ! !!!!!!! !!!!!!! !!!!!!!1;
0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNG!! ! ! ! ! !
! ! ! ! ! ! !
! ! ! ! ! ! !
! !! ! ! ! !
! ! !!!!!!! !!!!!!! !!!!!!!1;
0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNGぬ、ぬるぽ
0827デフォルトの名無しさん
NGNGガッガッガッ(ry
AAも略
0828デフォルトの名無しさん
NGNG_ は後ろに付けた方がいいと思う。
0830デフォルトの名無しさん
NGNG同じ名前にすりゃいいじゃん。
別に問題ないよ。
0831818
NGNGclass{
HWND hwnd;
〜〜
};
winapi winmain(〜〜〜)
{
gethwnd(hwnd);
}
void gethwnd(HWND hwnd)
{
hwnd=hnwd;
}
OK?
0832デフォルトの名無しさん
NGNG普通に間違ってるぞ。
void gethwnd(HWND hwnd)
{
this->hwnd = hnwd;
}
だろ。釣りか?
0834832(!=830)
NGNGもうちょっとちゃんと書け>>>831
0835デフォルトの名無しさん
NGNG問題はないがデバッグがしづらくないか?
0836デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
NGNGclass Interface
{
public:
virtual ~Interface() {}
virtual void method() const = 0;
};
class MixIn : virtual public Interface
{
public:
virtual ~MixIn() {}
virtual void method() const {
std::cout << "OK" << std::endl;
}
};
// 続く
0838デフォルトの名無しさん
NGNGclass Concreate : virtual public Interface,
private MixIn
{
public:
// using MixIn::method;
};
int main()
{
Interface *i = new Concreate;
i->method(); // OK
delete i;
Concreate c;
c.method(); // コンパイルエラー
}
GCC 3.2.2 で、Concreate::method() が private 扱いになって、
コンパイルエラーになるのは、正しい仕様なの?
using MixIn::method; をコメントアウトすると、
ちゃんと動くのはなんかわかる気がするけど。
0839デフォルトの名無しさん
NGNGなんで?
グローバル変数と同じにするわけじゃないんだから
問題ナッシングでしょ。
0841デフォルトの名無しさん
NGNGclass Concreate : virtual public Interface,private MixIn{
親クラスは全部publicなのに、ここでなんでprivateで継承するんだ?
サブクラスは全部privateになるだろ!
0842デフォルトの名無しさん
NGNG> hnwd
hwndだろ。ネタか?
0843デフォルトの名無しさん
NGNG0844デフォルトの名無しさん
NGNG#define hnwd hwnd
// (゚д゚)ウマー?
0845デフォルトの名無しさん
NGNGMixIn へのキャストを禁止したいのよ。Interface の実現に、
MixIn を利用しているかどうかは public な情報ではないので。
>>838 については、よく考えてみると、
class Concreate : virtual public Interface
{
private:
void method() {}// Interface::method() としては外部から呼べる
};
というのと同じパターンか。
0846学生C経験1ヶ月
NGNG_Tって何の処理をしているんですか?
ここでつまづいてます。
ヘルプみてもよーわかりませんのでどなたかご指導ください。
0847デフォルトの名無しさん
NGNG\(≧▽≦)丿ウマー!!
0848デフォルトの名無しさん
NGNGマズー
0849デフォルトの名無しさん
NGNGchar/char*とwchar_t/wchar_t*の切り替えを透過的に行う為の仕組み。
ヘッダファイル tchar.h を見てみな
0850デフォルトの名無しさん
NGNG#define retrun return
を忘れているからマズー
0851デフォルトの名無しさん
NGNGpublic:
typedef void (CBase::*ClassProc)(void);
ClassProc ptr;
CBase(void) {
ptr = Proc1;
}
virtual void Proc1(void) {
printf("CBase::Proc1\n");
}
};
class CFoo : public CBase {
public:
CFoo(void) {
ptr = (ClassProc)Proc1;
}
virtual void Proc1(void) {
printf("CFoo::Proc1\n");
}
};
int main(void) {
CBase* lpBase1 = new CBase();
(lpBase1->*lpBase1->ptr)(); // CBase::Proc1() の呼び出し
CBase* lpBase2 = new CFoo();
(lpBase2->*lpBase2->ptr)(); // CFoo::Proc1() の呼び出し
return 0;
}
CFoo の ptr = (ClassProc)Proc1;
このキャストは安全?
0852デフォルトの名無しさん
NGNG>>824
スパルタ斉木
0853デフォルトの名無しさん
NGNGその代入は不必要。
Proc1 は仮想関数だから、勝手に呼び分けてくれる。
0854851
NGNGうん。単純にCFoo::Proc1を呼び出すんならこんな面倒な事しないね。
やってる事がうまく伝わってなかった模様。
関数ポインタ経由で呼び出してるのは呼び出し元に修正を加えずに、
クラス内で呼び出す関数をifなどの判定なしに切り替えられるようにする為だよ。
CFoo::Proc2が定義されていると仮定して、
ptr = (ClassProc)Proc2;
とすれば次の呼び出しからCFoo::Proc2が呼ばれるようになる。
0855853
NGNGこちらの言ってる事も伝わってない気が。
メンバ関数ポインタは仮想関数の呼び分けも
ちゃんとやってくれるので、
CBase で既に ptr に代入したのに
CFoo のコンストラクタで再代入する必要は無いよ、
ということが言いたかった。
代入するメンバ関数は常に &CBase::Proc1 のように
&CBase:: というのも書かないと文句言われるけど、
CBase:: がついているからといって CBase::Proc1 しか呼ばれないわけじゃなくて、
CFoo のインスタンスから ptr を使って呼ぼうとすると
ちゃんと CFoo::Proc1 が呼ばれる。
0856デフォルトの名無しさん
NGNGCBaseコンストラクタ内ではProc1はまだCBase::Proc1を指してしまっているのでは?
0857853
NGNGコンストラクタ内で仮想関数がちゃんと呼べないのは当たり前。
まだコンストラクタが呼ばれてないクラスのメンバ関数が呼べたら大変だ。
CFoo のコンストラクタが呼ばれれば
仮想関数テーブルが初期化されて、
これでちゃんと CFoo::Proc1 が呼べるようになる。
0859デフォルトの名無しさん
NGNGの書き方サポートされていないの?
0860デフォルトの名無しさん
NGNG構文的にエラーじゃないのが痛い>default間違い
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNG見つかるまでかなり時間がかかった。
まさかdefault:がdefualt:になっているとはね。
0863デフォルトの名無しさん
NGNG仕様書にも注意しろと書いてあったっけ。
0864デフォルトの名無しさん
NGNG色が変わるからわかるけど > defualt
0865デフォルトの名無しさん
NGNG本に書いてあるだけじゃ分からないだろ
0866デフォルトの名無しさん
NGNG「defalt というラベルは使われていません」
とかいう警告が出るので大丈夫なんじゃない?
0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNG0870851
NGNGCFooでしか定義されていないCFoo::Proc2を最初の呼び出しで呼ばせたい場合にはCFooのコンストラクタで
ptr = (ClassProc)Proc2;
が必要になってくるけど、
CFoo::Proc1の場合はCBaseで既に初期化されており、インスタンスによる呼び分けがされるので必要なし、と。
なるほどご指摘の通り。
で、本題のキャストだけどこれに触れてる人が居ないって事は気にする必要なし?
本当はキャスト無しで突っ込める方法があればいいんだが。
0871デフォルトの名無しさん
NGNGCBase のメンバ関数へのポインタなんだから、
CFoo にしかない関数を突っ込もうとするのはどうかと。
どうしてもやりたければ、仮想関数にでもしとき。
0872851
NGNG戻り値、引数が一致しててもマズイんかな。
仮想関数となればCFooを拡張したらCBaseも拡張しなくては(ry
普通の関数ポインタにstaticなメンバ関数突っ込むしか・・・。
0873デフォルトの名無しさん
NGNG0874デフォルトの名無しさん
NGNGまぁ、注意して使えば一応問題は無いと思うけど。
0875デフォルトの名無しさん
NGNG0876デフォルトの名無しさん
NGNGってのがあるけどmapやlist、stringの場合はどうなんでしょ?
0877デフォルトの名無しさん
NGNGメモリが連続している必要が無いlistとmapには余分なメモリは無いかと。
stringはvectorと同じでそ。
0879デフォルトの名無しさん
NGNG0880デフォルトの名無しさん
NGNGそんな実装してあるSTLはPCごと窓から投げ捨てろ。
0881876
NGNGそうなん? じゃSTLportのstlport/stl/_hashtable.hの
# ifndef _STLP_INTERNAL_VECTOR_H
# include <stl/_vector.h>
# endif
(中略)
typedef __vector__<void*, _M_node_ptr_allocator_type> _BucketVector;
というのは無問題? それとも投げ捨てる?
0882デフォルトの名無しさん
NGNGどうやって窓から投げ捨てればいいの?
0885デフォルトの名無しさん
NGNG>whose implementation is a hash table.
何か問題あるのか?
0886876
NGNG実装違うはずだからmapではvectorは使われないのねスマンということ。
(つまりメモリ使いすぎにならないと)
であらためて聞きますがhash_mapがvector使ってる場合は全要素新しい
方へコピーとかしかないのかな?
0887デフォルトの名無しさん
NGNGコード読んでないけど、
Hash テーブルに vector 使ってるだけなんじゃないの?
もしそうなら、Hash テーブルのサイズを変えない限り
再確保なんか起こらないと思われ。
0888デフォルトの名無しさん
NGNG0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNGボッキンキン
0891デフォルトの名無しさん
NGNGboost
0892デフォルトの名無しさん
NGNGレスありがとうございます
ライブラリはコード書いて使ってみながら読まないとだめですよね
0893デフォルトの名無しさん
NGNGそんなことはない
0894デフォルトの名無しさん
NGNGみなさんどの程度手抜きしてます?
0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNGpublic:
Super(int i){}
};
class Sub1 : public Super {
public:
Sub1(string s) : Super(10) {}
};
class Sub2 : public Super {
public:
Sub2(double* d) : Super(20) {}
};
class Sub3 : public Super {
public:
Sub3(int i, double d, string s) : Super(30) {}
};
みたいにサブクラスのコンストラクタのシグネチャを変更しても問題ないのけ?
0897デフォルトの名無しさん
NGNGない
0898デフォルトの名無しさん
NGNGクラスAとクラスBとの間で相互に型変換ができるように、
キャストをオーバーロードすることは可能でしょうか?
0899デフォルトの名無しさん
NGNGstruct A{
A(B &b){...}
operator B(){...}
};
ということか?
0900デフォルトの名無しさん
NGNG// a.h
class B;
class A {
public:
operator B();
};
// b.h
class A;
class B {
public:
operator A();
};
0901デフォルトの名無しさん
NGNGstd::cout<< "zusa-" << std::endl;
}else{
throw std::exceptin("abo-n");
}
0902901
NGNGstd::cout << "鬱だ氏のう" << std::endl;
int* hoge = new int[0xffffffff];
}
0903デフォルトの名無しさん
NGNGrun(901);
} catch(std::exceptin& e) {
std::cout << e.what() << std::endl;
}
`exceptin' undeclared in namespace `std'
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG単純な言語じゃないからねえ・・・
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNGほとんど、うんこ。
0911デフォルトの名無しさん
NGNGVC++ 6.0 だとアクセスできません。
規約的にはどちらが正しいですか?
0912デフォルトの名無しさん
NGNGローカルクラスとは?
クラス内クラス、インナークラスのことかな?
0913911
NGNGレスありがとございまつ。
ファンクションローカルでつ。
int cameraPinvoke(CJoke joke)
{
struct Local
{
int hogya;
} local;
return local.hogya;
}
こんなんでつ。
0914デフォルトの名無しさん
NGNG質問とコードが矛盾してないか?
>ローカルクラスから親クラスの private メンバにアクセス
0915911
NGNGスイマセン。ローカルクラスって何?って言われたので、はしょってそれだけに対して答えました。
class CCamera {
private:
CFilm* m_pFilm;
public:
void Reject();
};
void CCamera::Reject() {
struct Guardian {
CCamera& parent;
Guardian(CCamera& camera) : parent(camera){}
~Guardian() { delete parent.m_pFilm; parent.m_pFilm = NULL; }
} guardian(*this);
}
やりたいのはこんな感じでつ。よろしくおながいします。
0916デフォルトの名無しさん
NGNGアクセスできるほうがおかしい気が
0917デフォルトの名無しさん
NGNG0918デフォルトの名無しさん
NGNGローカルクラスより先に
アクセス制御の使い方しっかり覚えて。
0919デフォルトの名無しさん
NGNGローカルにする必要性がわからない。
0920デフォルトの名無しさん
NGNGこれを問い合わせることはできる気がする
そこで一応お聞きします。
newした要素数を得る方法を教えてください
0921標準じゃないけど
NGNG0922デフォルトの名無しさん
NGNGreinterpret_cast<int*>(classvector)[-1]
0923デフォルトの名無しさん
NGNG教えてくれてありがとう。
標準であってもよさそうですけど無いんですね。
0924名無し
NGNG>これを問い合わせることはできる気がする
言われてみれば
0925889
NGNG0926デフォルトの名無しさん
NGNGいないのかのぅ。
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNGさて、どうしたものか。
0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNG> delete[]はnew[]した配列要素数を知っているのだから
そうとも限らん。デストラクタを持たない POD な構造体なんかを new[] したときは
全体のサイズだけわかっていればよいので要素数は覚えていないこともある。
>>922 が書いてるのはまさにこのことだね。
0931デフォルトの名無しさん
NGNG要求したサイズと等しいサイズを確保するとは限んないね
(多分ある数の倍数まで拡張されるやね)。
0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNG#include <iostream>
をインクルードしているのですが・・・
using namespace std;
void aaa( const string ss );
int main()
{
char ss[80]="あいうえお";
aaa(ss);
return 0;
}
void aaa( const string ss )
{
cout << ss << endl;
}
string型にchar型を渡した時にどう動作するかの確認プログラムです
0934デフォルトの名無しさん
NGNG当然 #include <string> もしとるとして...。
VC6 はそれに対応してなかった気もするなぁ。
いつも ss.c_str() 使ってた気がする。
うろ覚えだけど。
0935デフォルトの名無しさん
NGNG<string>は、この場合関係ないなーと思ってしなかった・・・(ヒンズースクワット2回の刑)
知らない方だから、<<やられてもこまるよぼけという意味だったんですね
const String ssの引数の関数にchar型の配列渡してもちゃんとうまくいきました。
自動でキャストしてくれるみたい。
この逆はうまくいかないけどね(あたりまえだ)。
0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNGc_str 使ってたの VC5 だったかもしんない。
0938デフォルトの名無しさん
NGNG別に inline 関数で getter 作っとけばいいんじゃない?
いつどのように加工して外部に公開するか分かんないんだし、
その時にコードを変えないで済むための保険になるっしょ?
0939デフォルトの名無しさん
NGNG確かにそうですね
絶対にかえないと思っても変えることはありますしね
0940デフォルトの名無しさん
NGNG↓
void aaa( const string& ss );
にしたほうがいいのでは?
0941デフォルトの名無しさん
NGNG参照っすか?
そうですね
確かにそのほうが良いかも
0942デフォルトの名無しさん
NGNGその都度文字列の複製/削除があるしな。
0943デフォルトの名無しさん
NGNGマルチスレッド対応だと参照カウント使うほうがヘタレなんだよな
0944デフォルトの名無しさん
NGNG関数を作ろうと思っていますが、
↓こんな感じ
基底クラスがあり(他にも仮想関数等がある予定。改行多くなるのでpublic等省略)
class IUnko{
IFoo(void* lpParam);
};
それを継承したクラスを複数個書く
class CTestA : public IUnko{
CTestA(void* lpParam);
};
class CTestB : public IUnko{
CTestB(void* lpParam);
};
これの生成をIDで指定したいのです。
IUnko* Make(long id,void* lpParam);
id に 1を渡すとCTestAが作られ、
id に 2を渡すとCTestBが作られる。
みたいな。
現在、生成関数を、クラス別に作り
その関数ポインタをテーブルにして、生成する方法を考えていますが
↓こんな感じ。関数の型宣言こまかいこと忘れたので、てきとうに書いた。
IUnko* MakeA(void* lpParam);//CTestAを作る
IUnko* MakeB(void* lpParam);//CTestBを作る
MakeTbl[] = { MakeA,MakeB };
IUnko* Make(long id,void* lpParam){ return MakeTbl[id]; }
他にスマートなやり方(C++チックな方法)ありませんか?
0945デフォルトの名無しさん
NGNG0947ひよこ名無しさん ◆jECjLpAzb6
NGNGPure Virtual Function でOKですよね?
0948デフォルトの名無しさん
NGNG0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNGいいえ。
Virgin virtual function
0953デフォルトの名無しさん
NGNGC++ 規格書 10.4.2 より抜粋
A class is abstract if it has at least one pure virtual function.
0954デフォルトの名無しさん
NGNG参照カウントのロックのコストがかかるのは確かだけど、
毎回コピーするより重くなるの?
mallocだってそれなりのロックが必要だし。
0955v(^・^)v
NGNG0956名無し@沢山
NGNGおまいらよ、stringの毎回コピーするような実装では何文字以下は
フリーストア領域を使わないような実装になっているものだよ。
おまいらよ、つまりmallocは使わないんだよ。
0957デフォルトの名無しさん
NGNG0958名無し@沢山
NGNG>代わりにcallocを使うだけだけどな。
>>代わりにcallocを使うだけだけどな。
>>>代わりにcallocを使うだけだけどな。
>>>>代わりにcallocを使うだけだけどな。
おまいらよ、無知とは怖いよ。
おまいらよ、今時EffectiveSTLも読まずに議論に参加しようなんてアホだよ。
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNGconst string に対する操作がほとんどなら、CopyOnWriteの方が
速いことが多い。内容を書き換える操作や、書き換えるかもしれない
操作(char& operator[] とか iterator begin() とか)が多いと
毎回素直にコピーする実装にしてallocatorをチューンした方がマシな
ことが多い、らしい。More Exceptional C++ 曰く。
0963デフォルトの名無しさん
NGNG0964v(^・^)v
NGNG新スレ
やっとコピペ終わった
連投規制も沢山もうぜーー!
0965911
NGNG俺も原則はそうだと思う。だけど例外的に認められてるんだっけ?という話です。
>>918
あなたの3倍はよく知ってるつもりですが:p
>>919
本当に? >>915 で私が示した void CCamera::Reject() が複雑な関数で
複数の return と例外の throw を含んでいるとしたら何が起こるか理解できますか?
0966名無し@沢山
NGNGヌヒらよ、これじゃダメなのかよ。
class CCamera {
private:
CFilm* m_pFilm;
struct Guardian {
CCamera& parent;
Guardian(CCamera& camera) : parent(camera){}
~Guardian() { delete parent.m_pFilm; parent.m_pFilm = NULL; }
};
public:
void Reject();
};
void CCamera::Reject() {
Guardian guardian(*this);
}
ヌヒらよ、これを踏まえた上でローカルクラスにする必要性があるか説明せよ。
0967911
NGNG沢村よ…、たしかにそれでもできる。いやこの場合は「それでしかできない。」の方が正しかろう。
だがな、まず情報が離散しすぎてる。俺がほしいのは Java でいう finally だ。
それは言ってみれば関数の実装の詳細なのだ。
たとえ前述の例の Guardian の実装を実装ファイルに書いても
ヘッダを汚している事には変わりはない。別の関数で同じような物が必要になってもまたヘッダを汚すことになる。
いいか、これは「シンタックスシュガー」ではない。
あるべきものをあるべき姿で記述しよう!という現代的プログラミングにとって必要な事だ。
だから g++ はわざとそうしているのか?または次期仕様として濃厚なのか?というあたりが知りたかった。
あとな、「ヌヒらよ」は複数形だと思うから単数に使うのは変だと思うぞ。
最後に、age ちゃったスマソだ。
0968名無し@沢山
NGNGclass CCamera {
private:
CFilm* m_pFilm;
public:
void Reject();
};
void CCamera::Reject() {
std::auto_ptr<CCamera> g(this);
}
0969名無し@沢山
NGNG0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNG0975名無し@沢山
NGNG2ちゃんに初めて来た人の心情を表したよい名の持ち主だよ。
>>970
ヌヒよ、>>968-969むかついたのか?
ヌヒよ、おれはヌヒと同じことをしたまでだよ。
>>965
>あなたの3倍はよく知ってるつもりですが:p
0976911(ちょっと電波板チックに)
NGNG沢山→宅さん→お宅さん→ヲタク→夏混み合ってるデヴ
でファイナリーアンサー?
0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG0979911
NGNG>むかついたのか?ヌヒと同じことをしたまでだよ。
違うな。>>918 は俺の能力を判断する状況もないまま「見下した表現」を使っただろ?
「あなたの3倍はよく知ってるつもりですが:p」は、それに対するメッセージだ。
ついでに言うと >>968 はもともと漏れが提示した物の意味と完全に外れた事しかしてないし、
スタックに確保されたオブジェクトだったらコアダンプ吐くだけだぞ?
もう少し勉強して出直してこいや >> 968
0981名無し@沢山
NGNGヌヒらよ、911とおれを生暖かく見守ってくれよ。
ヌヒらよ、ヌヒってなんだよ。
0982デフォルトの名無しさん
NGNG(o∀o) <おまいらええかげんにせえよと…
0983911
NGNG> ヌヒらよ、ヌヒってなんだよ。
漏れはジョンとか沢村が頭角表してた時期にリアルヒッキーしてて
ム板に入り浸ってたけど、その時の沢村の説明だと、多分標準語でいう
「おぬし等よ」みたいな意味だという事だったと思われ。
何よりちゃんとコード読んでくれたなら天才宅さんなら何かアイディア持ってるんだろ?
0984名無し@沢山
NGNG>>むかついたのか?ヌヒと同じことをしたまでだよ。
>違うな。>>918 は俺の能力を判断する状況もないまま「見下した表現」を使っただろ?
>「あなたの3倍はよく知ってるつもりですが:p」は、それに対するメッセージだ。
ヌヒよ、違うよ。>>911は>>918の能力を判断する状況もないまま「見下した表現」を使っただろ?
ヌヒよ、以下略
0985名無し@沢山
NGNGヌヒよ、精進せいよ。
class CCamera {
private:
CFilm* m_pFilm;
public:
void Reject();
};
void CCamera::Reject() {
struct Guardian {
CFilm *&p_;
Guardian(CFilm *&p) : p_(p){}
~Guardian() { delete p_; p_ = NULL; }
} guardian(m_pFilm);
}
0986911
NGNGスマソ、だけど2ちゃんなんて結局そんなもんだよ。次スレ立ったなら埋め立て必要だろうし。
>>984
沢山よ、>>918==984むかついたのか?
>>918が>>911の能力を判断する状況もないまま「見下した表現」を使っただろ?
>>918よ、>>911は>>918と同じことをしたまでだよ。
recursive....stack over flow.
0987911
NGNGいや、解放するべきメンバが複数個あった時には?解放するべきか判断する材料が他のメンバだった時には?
いちいち全部渡すのは面倒くさすぎるという話からすべて始まってるわけですよ。
0988911
NGNG興味深い解説が載ってるよ。
とかせめてもの罪滅ぼしにちょっと情報提供とかしてみた。
0989名無し@沢山
NGNGヌヒよ、おれには918はやさしいアドバイスに見えるよ。
ヌヒよ、これでおれのやさしいアドバイスもこれで最後だよ。
class CCamera {
private:
CFilm* m_pFilm;
void Reject_impl();
public:
void Reject();
};
void CCamera::Reject() {
try{
Regect_impl();
}catch(...){
}
delete m_pFlim;
m_pFlim=0;
}
void CCamera::Reject_impl() {
}
0990デフォルトの名無しさん
NGNG0991911
NGNGやさしいアドバイスをたくさんありがとう。
その手法は厨房の頃からやってるが…
・戻り値が参照やポインタではなくて大きなオブジェクトだった場合の負荷が大きい
という大問題があるのだよ。
さらにそのソースだと Reject_impl が意味のある例外を投げたけど投げなおしたい時どうする?
Reject() の catch の中に同じ事何度も書くのは無駄かつミスの元だよね?
0992デフォルトの名無しさん
NGNGScopeGuard 使おう。
0993デフォルトの名無しさん
NGNG0994911
NGNGありがとうございまふ。
ぐぐったけど英語のページしか出てこないです。
(もっと詳しく調べるために)ある程度あたりをつけたいので
何なのかさらっと教えていただけると助かります。
つたない英語力でちょびっと読んだ所は boost の一部?もしくはパターン名?
0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。