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

C++相談室 part21

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v NGNG
C++に関する質問はこちらへどうぞ。
ただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。

過去スレ、関連スレ、関連リンクなどはこちら>>2-10
0002デフォルトの名無しさんNGNG
2get...?
0003v(^・^)vNGNG
■基本■
[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++日本語リンク集があります。
0004v(^・^)vNGNG
■Document■

C++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
0005v(^・^)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/
0006v(^・^)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]
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
0007v(^・^)vNGNG
■Libraries■
Boost 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
0008v(^・^)vNGNG
Part1 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/
part20 http://pc2.2ch.net/test/read.cgi/tech/1055162298/
0009v(^・^)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
0010v(^・^)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
0011v(^・^)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
0012デフォルトの名無しさんNGNG
オツカレーション
0013デフォルトの名無しさんNGNG
>>1
乙。
0014デフォルトの名無しさんNGNG
インスタンス化された関数テンプレートのポインタを取得したいのですが、以下の書き方ではエラーになります。
template<typename T> void func() { hoge };
void (*ptr)();
ptr = func<A>; // error: void(void) から void (__cdecl*)(void) に変換できません。
ptr = &func<A>; // 同上

どのように書けばよいでしょう?
VC++6.0 SP5 です。
0015デフォルトの名無しさんNGNG
>>14
func<A>とかfunc<B>とかは全部オーバーロードされた関数として
扱われるので、明示的にキャストなどが要るはず。
 ptr = (void(*)()) &func<A>;
0016デフォルトの名無しさんNGNG
>>15 ありがとうございます。
しかし、駄目でした。
error: '' から 'void (__cdecl *)(void)' に変換することはできません。

空欄の型とはいったい。コンパイラのせいなのかな。
駄目そうだったらおとなしく仮想関数を使います。
0017デフォルトの名無しさんNGNG
>>16
これは
typedef void pf();
pf p= fn<int>;
p();
0018oisnNGNG
>>1
また前スレの1さんでつか?
乙でし!
またよろしくおながいいたしますm(__)m
0019デフォルトの名無しさんNGNG
>>18
ふざけんな!
0020デフォルトの名無しさんNGNG
pf *p = fn<int>の間違い
002118NGNG
>>19
どこがふざけとるん?
0022デフォルトの名無しさんNGNG
VC7で
void (*pf)();
pf=func<int>;
これはコンパイルできないけど

void (*pf)()=func<int>;
これはコンパイルできる。なんで?
0023デフォルトの名無しさんNGNG
>>21
> また前スレの1さんでつか?
0024デフォルトの名無しさんNGNG
>>17
駄目でした。
最初のエラーと同じ 'void(void)' から 'void(__cdecl *)(void)' に変換できません。

特殊化を定義しておくと通ったりしてちょっと謎。
template<> func<A>() { hage }
ptr = func<A>; // OK
コンパイラのせいかな?
002521NGNG
>>23
勝手な思い込みでした。気分害してスマソ。
新スレありがとう。。。
0026デフォルトの名無しさんNGNG
>>25
ネタだけどな。
つーかなんでそう思ったん?
名前欄か?
0027デフォルトの名無しさんNGNG
>>24
確実にコンパイルできる方法

template <class T> struct foo{ static void bar(){/*hoge*/} };

void (*pf)();
pf=foo<int>::bar;
002826NGNG
>>25
v(^・^)vさんをコテハンだと思いますたTT
いつもこのスレには本当にお世話になり、頼りに
しています。(自分は会社勤務ではないため
聞く人がいないのです。といってMLは恥ずかしくて聞けないTT)
これからもよろしくです。。。
0029デフォルトの名無しさんNGNG
v(^・^)v←決まり事だと思ってた
0030名無し@沢山NGNG
ヌヒよ、おれを頼りにしろ。
0031デフォルトの名無しさんNGNG
VBの質問スレはv(^・^)bなのになんでここはc(^・^)c
とかc(+・+)cじゃないの?
0032デフォルトの名無しさんNGNG
>>27
無事通りました。この方法でいってみたいと思います。
ありがとうございました。
0033c(^p^)pNGNG
0034デフォルトの名無しさんNGNG
c(pp^)
0035デフォルトの名無しさんNGNG
STLつかうと一気に実行ファイルサイズが10倍に?!
0036デフォルトの名無しさんNGNG
>>35
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0037デフォルトの名無しさんNGNG
>>36
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0038デフォルトの名無しさんNGNG
あれ、このやりとりどっかで見たような気が……deja vu?
0039デフォルトの名無しさんNGNG
>>38
恒例のやりとりですね。
0040デフォルトの名無しさんNGNG
ヌヒよ、STLぐらいでガタガタいってたら
boostはどうすんだよ。
0041デフォルトの名無しさんNGNG
>>40
ドタドタする
0042デフォルトの名無しさんNGNG
VC7.1にしたらwarning C4244が大量に出てきて鬱だよママン…
0043デフォルトの名無しさんNGNG
>>39
ああ。なんか前にもあったな。
0044デフォルトの名無しさんNGNG
>>42
すげえ。VC7.1にしといてwarning C4244が大量に出てきたとかいってるよ。この人。
0045デフォルトの名無しさんNGNG
>>44
そんな事言われても出たもんは出たんだよヽ(`Д´)ノ ウワァァァン
まぁあんまりその辺気にせずにVC6を使ってた漏れが悪いが…
0046デフォルトの名無しさんNGNG
http://me.bird.to/hakoniwa/files/hakowai020.lzh

一応C++
0047名無し@沢林NGNG
しまった。デジャブーにのりおくれた・・・
0048名無し@沢森NGNG
沢○が大量発生だな。おい。
0049デフォルトの名無しさんNGNG
僕の名前はエンポリオです。
0050デフォルトの名無しさんNGNG
次作「ラン・タイム・エラー」でお会いしましょう。(飛呂彦)
0051デフォルトの名無しさんNGNG
          Z
_____(-∀- )__
_│_│_│_│_│
│_│_│_│_│_          ポイント♪
_│_│_│_│_│
│_│_│_│_│_     (・∀・ )⌒ヽ⌒ヽ⌒ヽ


           
          
_____Σ(-∀・ )_
_│_│_│_│_│
│_│_│_│_│_        ポイントカード オモチデスカ?
_│_│_│_│_│
│_│_│_│_│_    (・∀・ )⌒ヽ⌒ヽ⌒ヽ



_____Σ(;・Д・)_
_│_│_│_│_│
│_│_│_│_│_        
_│_│_│_│_│        ・・・ポイント10バイ!
│_│_│_│_│_    □⊂(・∀・ )
0052デフォルトの名無しさんNGNG
糞スレ化の危機により緊急age
質問カモ〜ン
0053デフォルトの名無しさんNGNG
質問:C++って死滅しちゃうの?
0054デフォルトの名無しさんNGNG
じゃあ俺が問題を出してやる

0<x<2などの複数回比較を可能にするクラスmulticomparisonと
そのヘルパ関数mcompを作成しろ。これによって次の例が可能になる
0<mcomp(x)<3、mcomp(x)==y==z
0055デフォルトの名無しさんNGNG
>>54
http://pc2.2ch.net/test/read.cgi/tech/1047970129/814-825
0056デフォルトの名無しさんNGNG
>>54
http://www.trickpalace.net/cxx/dagger/tips.h
0057デフォルトの名無しさんNGNG
あったよ♪

http://akipon.free-city.net/page003.html

http://endou.kir.jp/betu/linkvp/linkvp.html
0058デフォルトの名無しさんNGNG
いつからかわからんけど、ム板つまんなくなったよね。
0059デフォルトの名無しさんNGNG
>>58
スレタイを10000回復唱汁。
0060デフォルトの名無しさんNGNG
ちと教えてたもー。
基本クラスAとその派生クラスBがあったとします。
A* p = new B;
delete p;
という風に書きたい場合はAのデストラクタを仮想関数にするのでいいのでしょうか?
0061デフォルトの名無しさんNGNG
>>60
Yes
0062デフォルトの名無しさんNGNG
>>60
その通り。

というか、特殊な事情がない限り
デストラクタは仮想関数にしておいた方が無難。

特殊な事情ってのは、
派生クラスを作る予定が全くない、
よほどパフォーマンスやデータサイズが気になる、
とか。
006360NGNG
>>61-62
ありが�d。

勉強になりました。
派生する価値のあるクラスが書けるかどうかはおいておくとしてとりあえず癖につけておきます。
0064デフォルトの名無しさんNGNG
>>60
そうしないと未定義
0065デフォルトの名無しさんNGNG
>>60
Aのサイズでヒープを開放しようとするのでヒープ領域が破壊される
ヨカーン。
0066デフォルトの名無しさんNGNG
>>62
えーやだなー
0067デフォルトの名無しさんNGNG
質問お願いします。

あるデータに関するクラスAがあり、
そのクラスのオブジェクトを集約リストとして持っているクラスBが別にあります。
クラスAのオブジェクトは、全てそのリストで管理されています。
クラスBは他に妥当なクラスがないという消極的な理由から、クラスAのリストを保持してます。

そこでお尋ねしたいのですが、このリストに対する操作(ソートや全検索など)を
実装する場合、それをクラスBのメンバ関数とするのと、クラスAの静的メンバ関数に
するの、どちらが妥当でしょうか?
0068デフォルトの名無しさんNGNG
えっと別スレで聞いたのですが説明なしで自己満足で終わられたみ
たいなのでこのスレに投げます。

SYOTI_F( char * ) test_time SYORI_P(( const time_t *tp, char *buf ));

とGCCで書いてあるヘッダをC++Builderでコンパイルすると
[C++ エラー] test.h(38): E2293 ) が必要

となるのですがこれはSYOTI_F( char * ) を返り値とした関数
の宣言と考えて良いでしょうか?
0069デフォルトの名無しさんNGNG
>>67
そのリストがどこに所属しているかによる。

クラスAの設計の一部として(クラスAが成り立つために必須)存在しているのならクラスAのメンバにすべき。

それとも、クラスAは単独で存在できるけど、たまたま今回のプログラムではそれをリスト上で管理しているのならクラスBのようなコレクションクラスのメンバにすべき。
0070デフォルトの名無しさんNGNG
>>68
おそらくSYOTI_FとSYORI_Pはマクロだと思うが、それが定義されていないためのエラーってことはない?
0071デフォルトの名無しさんNGNG
>>68
× SYOTI_F
○ SYORI_F
のタイプミスが原因に 1000 ガバス。
007267NGNG
>>69
レスありがとうございます。なるほど、
リストというデータの帰属を問えば良いのですね。

今回の私のケースは、69さんの二行目に反するようです。
(二行目の様にリストの内包が必須なクラスを、今ちょっと想像出来なくて、少しだけ不安ですが)

ですのでBのメンバにしようと思います。御陰で吹っ切れました。重ね重ね感謝です。
0073デフォルトの名無しさんNGNG
>>70
定義って#define以外に?
0074デフォルトの名無しさんNGNG
>>68
こっちにも書いとく。

>えっと別スレで聞いたのですが説明なしで自己満足で終わられたみ
>たいなのでこのスレに投げます。

回答してくれる人をなんだと思ってるんだ?
おまえの質問に答えてやるためだけに常駐してるとでも思ってるの?
0075デフォルトの名無しさんNGNG
>>74
意味の通らないことを散々書いておいて、突然はたと居なくなるのが
自己満足以外のなんだというんですか?w
質問者に礼儀が必要なのはもちろんですが、回答者にだって必要かと..ww
0076デフォルトの名無しさんNGNG
C++には、VBのStrConv関数のようにSHIFT-JISをUnicodeに変換する関数はないのでしょうか?
以下のような関数を自作できないこともないとは思いますが。
if((fi=fopen(source,"rb"))!=NULL)
if((fo=fopen(target,"wb"))!=NULL){
printf("Start conversion\n");
fputc(255,fo);
fputc(254,fo);
while((c = fgetc(fi))!=EOF){
後略
0077デフォルトの名無しさんNGNG
分かっている事ばかり答えてもらってもしかたなか(-.-)
分かっている事ばかり答えてもらってもしかたなか(-.-)
分かっている事ばかり答えてもらってもしかたなか(-.-)
0078デフォルトの名無しさんNGNG
俺は68がまったく意味不明なんだが
0079デフォルトの名無しさんNGNG
相互リンク
http://pc2.2ch.net/test/read.cgi/tech/1054280736/491-
0080デフォルトの名無しさんNGNG
>>75
あのね質問に全部答えても解答がでてないの〜^^;
0081デフォルトの名無しさんNGNG
ウンコ野郎にマジレスしちまった・・・鬱

>>79
被害の拡大を防いでくれてありがとう
0082デフォルトの名無しさんNGNG
>>75
>突然はたと居なくなるのが

あたりまえ。おまえみたいに暇な人ばかりじゃない。
0083デフォルトの名無しさんNGNG
>>80
みすだ
0084デフォルトの名無しさんNGNG
>>81
答える事ができないのに偉そうなのがむかつく
0085デフォルトの名無しさんNGNG
>>81
分からないのに偉そうにあれを調べろこれを調べろ
って時間の無駄〜他の人にしないで下さいね
0086デフォルトの名無しさんNGNG
>>76
標準C++には無いよ
ライブラリかOSの機能をつかうべし
0087デフォルトの名無しさんNGNG
>>86
行いたい機能から関数を逆にたどるのがむずかしいのですが、
Borland C++ Compiler 5.5のライブラリの中にはSHIFT-JISをUnicodeに変換する関数などはないのでしょうか?
0088デフォルトの名無しさんNGNG
>>76
mbstowcs 関数というのがある。
ヘッダファイルは cstdlib 。
ただし、Shift-JIS を使っている OS に限る。
0089デフォルトの名無しさんNGNG
>>88
wchar_tがうにコードとは限らな(略
0090デフォルトの名無しさんNGNG
>>88
mbstowcs()とwcstombs()がありました。ありがとうございました。
0091デフォルトの名無しさんNGNG
Cを始めて勉強するのにお勧めな本はありますか?
0092デフォルトの名無しさんNGNG

昔、私がTemplateすれに貼り付けたもの。
C++ でワイド文字をマルチバイト文字列に変換

std::localeloc( "japanese" );
std::locale::global( loc );

std::wstring source( L"(・∀・)" );
std::string result( source.size()*2, char() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.narrow( &*source.begin(),&*source.end(),'?',&result[0]);

std::wcout << L"wide : " << source << std::endl;
std::cout << "narrow : " << result << std::endl;

結果
wide  : (・∀・)
narrow : (・∀・)

マルチバイト文字列からワイド文字列へは、

std::string source( "(・∀・)" );
std::wstring result( source.size(), wchar_t() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.widen( &*source.begin(),&*source.end(),&result[0]);

VCで確認済みだが、他の環境(UNIXとか)では知らん
009392NGNG
こぴぺミス。

×std::localeloc("japanese");
○std::locale loc("japanese");

他にもミスあるかも…
0094デフォルトの名無しさんNGNG
>>92
VC++7.0 では期待通り動くけど、
VC++7.1 じゃ表示がおかしくなるね。

なんか違うのかな?
0095デフォルトの名無しさんNGNG
前スレ>>944
http://pc2.2ch.net/test/read.cgi/tech/1055162298/944
亀レスだけど

typedef Typelist<class1,Typelist<class2,Typelist<class3,NullType> > > ClassList;

class Base{
public:
    virtual int GetID()=0;
    virtual ~Base(){}
};
template <typename classname>
class BaseImpl:Base{
    int GetID(){
        return IndexOf<classname>::value;
    }
};
class class1:public BaseImpl<class1>{
};
0096デフォルトの名無しさんNGNG

class AbortType{
public:
    AbortType(){abort();}
};
class Factory{
public:
    Base * Create(int ID){
        switch(ID){
        case 0:return new TypeAtNonStrict<ClassList,0,AbortType>::Result;
        case 1:return new TypeAtNonStrict<ClassList,1,AbortType>::Result;
        case 2:return new TypeAtNonStrict<ClassList,2,AbortType>::Result;
        //...
        }
        //static Base * (*Funcptr[ClassList])()={TypeAtNonStrict<ClassList,0,AbortType>::Result::operator new(),
        //TypeAtNonStrict<ClassList,1,AbortType>::Result::operator new()};
        abort();
    };
};
Factoryはperlとか使って出力しておく。
templateスレへ行けとか言われそうな気もするけど思いついたので。
typelistとかTypeAtとかも書くと長くなりそうなので省略
0097デフォルトの名無しさんNGNG
>68
そう考えてよい。以上。
0098デフォルトの名無しさんNGNG
UTF8でファイルの読み書きしたい場合、C++標準ライブラリとかありますか?
0099デフォルトの名無しさんNGNG
標準には存在しない。
0100デフォルトの名無しさんNGNG
>>96
そういうときこそpreprosessor-metaprogrammingだ
0101デフォルトの名無しさんNGNG
>>98
あつかっている文字が始めから最後までUTF8なら
通常の読み書きの関数をそのまま使えば済む話だけど、
具体的にどういうことがしたいの?
0102デフォルトの名無しさんNGNG
初心者の質問ですみませんが、以下のコードがg++でコンパイル時にエラーとなります。
何故でしょうか?static をはずすか、又はコンストラクタ内で static メンバ
にアクセスしないようにすると問題無くコンパイルが通ります。

% g++ a.cpp
/tmp/ccC2TuDO.o: In function `Hoge::Hoge(void)':
/tmp/ccC2TuDO.o(.Hoge::gnu.linkonce.t.(void)+0x5): undefined reference to `Hoge::x'
collect2: ld returned 1 exit status

0103102続きNGNG
#include <stdio.h>

class Hoge {
static int x;
public:
Hoge() { x = 0; }
void SetHoge(int a) { x = a; }
int GetHoge() { return x; }
};

class Hoge2 {

Hoge hoge;
int y;
public:
Hoge2() { y = 0; }
Hoge2(int b) { y = b; }
void SetHoge2(int a) { y = a; }
int GetHoge2() { return y; }
};
main()
{
Hoge2 hoge2;
printf("%d\n", hoge2.GetHoge2());
}
0104デフォルトの名無しさんNGNG
どこにもプログラムコードが無いんだが
0105104NGNG
すんまそ、勇み足ですた。
0106104NGNG
>>103
Hoge() { Hoge::x = 0; }
void SetHoge(int a) { Hoge::x = a; }
int GetHoge() { return Hoge::x; }

こうすればOK
0107デフォルトの名無しさんNGNG
>>104-106
もちつけ(;´Д`)とりあえずニラ茶でも飲んでだな・・・

>>103
Hoge クラスを宣言し終わった後らへんに
int Hoge::x = 0;
としてやるべし。静的メンバは,クラスの外のどこかで
実体とでも言うべきモノを定義してやる必要がある。
0108名無し@沢山NGNG
>>102
ヌヒよ、それはコンパイル時のエラーちゃうやん。コンパイルは通ってるやん。
0109102NGNG
どもです。

>>104さん
そのようにやってみた所、やはり同様のエラーがでてしまいますた。(;;)

>>107さん
確かに外側で初期化したら通りました!ありがとうございました。
しかし何故外で再?定義してやらないといけないのか今一分かりません。

>>108
正確でなく、すみません。リンカーの方ですた。
0110102NGNG
あうっ

誤
>>108

正
>>108さん
0111デフォルトの名無しさんNGNG
>>109
クラス定義の中に書いてるのは変数の定義じゃなくてただの宣言。
これがもし定義だったらどうなるか考えてみれ。
軒並みシンボルの重複でリンクエラーになるぞ。
0112デフォルトの名無しさんNGNG
VC++ .NET + DirectXの質問ですが、適切なスレが無さそうなのでここで質問させて頂きます。

VC++ .NETでDirectX 9.0 SDKについていたサンプルプログラムをビルドしようとしているのですが
DirectPlayを使用するプログラムはビルドすることが出来ません。
その際表示されるエラーメッセージが
「ChatPeer fatal error LNK1181: 入力ファイル 'dplay.lib' を開けません。」
というようなものです。

VC++ .NETの方ではインクルードファイル、ライブラリファイルともパスは通してあります。
ただパスを通したディレクトリに 'dplay.lib' ファイルはやはり無いんですよね。
'dplayx.lib' とは全く別物のようですし。

どなたか分かる方がいましたらよろしくお願いします。
0113デフォルトの名無しさんNGNG
> 適切なスレが無さそうなので
ハァ?
0114デフォルトの名無しさんNGNG
無くてもリンクできる。以上。
0115112NGNG
>>114
しかし実際エラーが出てしまいます。
IDEのバージョンを一応記載しておきます。
VC++ .NET Standard 2003です。
0116デフォルトの名無しさんNGNG
削れといっている。以上。
0117デフォルトの名無しさんNGNG
いいよもう、すれ違いなんだから、無視しようよ。
0118デフォルトの名無しさんNGNG
もしかしてやり方がまずいのでしょうか。
IDE起動後、
ファイル→
開く→
プロジェクト→
(例えばaddressoverride.vcprojを選択後)開く

その後
ビルド→
ソリューションのビルド

ここでコンパイルエラーになります。

>>116
もう少し詳しく言ってくださるとありがたいです。
0119デフォルトの名無しさんNGNG
厚顔無恥とはよくいったもんだ( ´∀`)
0120デフォルトの名無しさんNGNG
>>118
鬱だ氏のう DirectX (Part 9)
http://pc2.2ch.net/test/read.cgi/tech/1054553472/
0121112NGNG
>>120
こんなスレがあったのですね。誘導ありがとうございます。
どうもご迷惑をおかけしました。
0122デフォルトの名無しさんNGNG
>>119
葉夏至区同意。
0123デフォルトの名無しさんNGNG
>>100
#define MAX_FACTORY_SIZE 100
#define MACRO01(dummy,i,arg2) case i:return new TypeAtNonStrict<ClassList,i,AbortType>::Result;
//template <int i>struct int2int{
//    enum{value=i};
//};

class Factory{
public:
    Base * Create(int ID){
        switch(ID){
        BOOST_PP_REPEAT(MAX_FACTORY_SIZE,MACRO01,arg2_dummy)
        //BOOST_PP_REPEAT(int2int<100>::value,MACRO01,arg2_dummy)
        }
        abort();
    };
};
さらに手を加えればより使いやすくなるだろうけど
ただ、Factoryのサイズをdefineで定義しないといけないけど。
0124デフォルトの名無しさんNGNG
PP最高!!!
0125デフォルトの名無しさんNGNG
Cを勉強せずにC++をマスターすることは可能ですか?
0126デフォルトの名無しさんNGNG
>>125
マスターすることは不可能。
でも使うことはできる。
0127デフォルトの名無しさんNGNG
完璧なマスターは不可能だけど
C++でプログラムを組むことは可能ということですね?
ありがとうございました。
がんばります。
0128デフォルトの名無しさんNGNG
結果的にC++を熟知する頃にはCをかなり深く理解しているだろうね。
CとC"++"だけあって、C++の勉強が、そのままCの勉強ことであったりするだろうし。
個人的には、Cをある程度かじってからのほうが近道のように感じる。
0129デフォルトの名無しさんNGNG
C++は初心者が引っかかりそうな事項が多いからなぁ
0130デフォルトの名無しさんNGNG
でも一方で、初心者が引っかかりそうなポインタなんかを後回しに勉強出来る
から良いって見方もあったりもするわけで。
0131デフォルトの名無しさんNGNG
参照は便利だよなぁ。
0132デフォルトの名無しさんNGNG
参照とポインタの違いは?
0133デフォルトの名無しさんNGNG
>>132
知らないのか?
納豆にネギを刻むと美味いんだ。
0134デフォルトの名無しさんNGNG
山椒とボニータの違いは??
0135デフォルトの名無しさんNGNG
>>131
今年は7/25が土用丑か
0136デフォルトの名無しさんNGNG
梅干も食わねえとな
0137デフォルトの名無しさんNGNG
関数ポインタを参照(゚д゚)ウマー
0138デフォルトの名無しさんNGNG
土用丑の日に鰻なんて、
平賀源内の思惑に乗っちゃだめだ!
0139デフォルトの名無しさんNGNG
int main() {
int *p;
int a=100;

p=&a;

func(p);

return 0;
}

void func( int &aaa ) {
cout << aaa << endl;
}

error C2664: 'func' : 1 番目の引数を 'int *' から 'int &' に変換できません。

参照にポインタを渡す方法はありますか?
0140デフォルトの名無しさんNGNG
func(*p);
0141デフォルトの名無しさんNGNG
>>140
あ、うまくいきましたー。
あれー?
さっき同じ事やった時はコンパイラとおらなかったんだが
勘違いだったかな
ありがとうございました
0142デフォルトの名無しさんNGNG
class Test{
public:
    //...
    Test & operator=(int arg){
        //...
        return *this;
    }
};

まあこれも同じことで。
0143バッファNGNG
winsock2 を使っているのですが
struct Request {
int v;
char *n;
char *a;
} req = {1,"sample","sample"};

という構造体を送信データバッファとして

send(s, (char*)&req,sizeof(Request), 0);

と書いて送信するのは正しいでしょうか?


0144デフォルトの名無しさんNGNG
>>143
ポインタを送信しても意味が無いと思われ。
0145デフォルトの名無しさんNGNG
>>144
スレッド間通信に使ってるのかもしれないじゃん(和良
0146デフォルトの名無しさんNGNG
'あ' みたいな2バイト長の文字定数って、やっぱり、標準ではみとめられて
ないのかな? 実際には(警告はでるけど)たいていのコンパイラで使える
みたいだけど。これを使って、

// 文字列コンバータのファンクタ
template<int C> struct Converter {
string operator()( const char* s );
};

// ソースがEUCで書かれている場合
template<> struct Converter<0xa4a2> { // 0xa4a2 == EUC('あ')
string operator()( const char* s );
};

// このソースの文字コード用のコンバータ
typedef Converter<(unsigned short)'あ'> ConverterT;

int main()
{
string s = ConverterT()( "あいうえお" );
}

みたいなことをやりたいんだけど…
0147デフォルトの名無しさんNGNG
>>146
L'あ' (wchar_t型)だべ
0148デフォルトの名無しさんNGNG
visual studio 2003は
C++の例外指定に対応した?
0149デフォルトの名無しさんNGNG
ANSI C++ 規格と
ISO C++ 規格はなにが違うの?
0150デフォルトの名無しさんNGNG
>>148
どういうこと?
例外指定ってexception-specificaation?
void hoge() throw(std::runtime_error) {...}とかこういうやつ?
記述はVC6の頃から通ったと思うが。

記述されていない例外を投げるとunexpected()が呼ばれる動作とか
してなかったんだっけ?
0151デフォルトの名無しさんNGNG
windows環境での最強のC++コンパイラは
実質 VS .net 2003に付属する
コンパイラってことになっちまった?
0152デフォルトの名無しさんNGNG
>>151
exportは無いけど、総合的にはそうなってしまったようだ
0153デフォルトの名無しさんNGNG
>>150

いや、warningだよ。
文法的に解釈はしてくれてるようだけど、
実装はされていないよ。
0154デフォルトの名無しさんNGNG
throw(type)
The function can throw an exception of type type. However, in Visual C++ .NET, this is equivalent to throw(...).

まだ対応してない模様
0155デフォルトの名無しさんNGNG
VS.NET 2003のmsdn library見ると:

Function exception specifiers other than throw() are parsed but not used. For example:

void f() throw(int); // parsed but not used
void g() throw(); // parsed and used
For more information on exception specifications, see Exception Specifications.

ほんとだ。
0156デフォルトの名無しさんNGNG
>>155

thanx
0157デフォルトの名無しさんNGNG
>>149
昔は ANSI(アメリカ国内) だけでやってたのを ISO(国際) で標準化するようになったってだけ。
ISO/ANSI C++ とかいう言い方することもあるし。
0158146NGNG
>>147
> L'あ'
g++ 3.2.2 だと warning: character constant too long とかいわれますね。
それに、L をつけると元の EUCなりSJISなりではなくなってしまう気が。
0159デフォルトの名無しさんNGNG
>>158
g++で比較すんな!
0160デフォルトの名無しさんNGNG
柴田望洋の「プログラミング講義 C++」を買ってきました。
明日からちょっとづつ読むことにします。
0161デフォルトの名無しさんNGNG
望洋さんはいいよねー。
「Cのエキスパート」感があって、安心できる。
俺も奴の本で勉強した。

0162デフォルトの名無しさんNGNG
>>161
「望洋さん」と「奴」の組み合わせにワラタ
0163デフォルトの名無しさんNGNG
class A
{
public:
 virtual ~A();
 int x;
};
A a[2];

↑という定義がある( A はPODではない)とき、↓の式の結果は定まりますか?

reinterpret_cast<int*>(reinterpret_cast<char*>(&a[0].x) + sizeof(A)) == &a[1].x
0164デフォルトの名無しさんNGNG
>>163
定まる。
パディングとか考慮しても
sizeof (A) は a[0] と a[1] の距離と等しくなることが
確か保証されてた筈だから、
その要素間の距離も sizeof (A) で OK 。

int* → char* の変換でアドレスが変わるような特殊な環境でも
char* → int* の変換でちゃんと元に戻される...と思うので大丈夫。
こんな変な環境を使ってる人が今いるのかどうか知らんが。
0165163NGNG
1.8 -5- に、
"An object of POD type shall occupy contiguous bytes of storage."
って書いてあるので、保証されてるのはPODだけだったりしませんか?
0166デフォルトの名無しさんNGNG
int*とchar*でポインタ表現が異なる環境でもreinterpret_castで問題はないのですか?
0167デフォルトの名無しさんNGNG
ポインタ表現が異なるの意味が分からんが、reinterpret_castはビット変化しないよ。
0168166NGNG
ポインタ表現 -> 内部表現
でした。つまりソース表記上では同じアドレスでもint*とchar*とで内部表現が異なる環境で
reinterpret_castしても問題は起こり得ないのでしょうか?
0169デフォルトの名無しさんNGNG
> ソース表記上では同じアドレス
やっぱり意味がわからん。
0170デフォルトの名無しさんNGNG
俺も分からん。
>>166は「内部表現が異なる」の具体例を明示して説明すること。
0171デフォルトの名無しさんNGNG
ageとこう。
0172166NGNG
すまそ、寝ぼけてNULLポインタ周りの話(0の内部表現の話)とごっちゃになってます。頭冷やしてこよう。
0173デフォルトの名無しさんNGNG
その調子じゃNULLポインタ周りも理解して無さそうだな。
0174デフォルトの名無しさんNGNG
こういうことだろ

char *pc = hogehoge;
int *pi = reinterpret_cast<int *>(pc);
if ( sizeof(char *)!=sizeof(int *) && memcmp( &pc, &pi, sizeof(char *) ) )
{
piとpcは同じアドレスをさすが内部表現は違う
}
0175174NGNG
すまん
&& -> ||
0176デフォルトの名無しさんNGNG
それを内部表現というのか
0177166NGNG
確認したいのですが>>174氏の例で、sizeof(char*)==sizeof(int*)を満たしているときは
memcmp(&pc,&pi,sizeof(char*))は常に0を返すと考えて良いのでしょうか。
0178166NGNG
あれ何か違うな。memcmp確認。
0179166NGNG
勘違いでした。
失礼。
0180デフォルトの名無しさんNGNG
>>165
これは、例えば int の 4 バイト(の環境として)が
連続する 4 つのバイトに確保される、ということでは?

○ xxxxooooxxxxxxxx
× xxxxooxxoxxxoxxx

で、規格見つけた。

5.3.3 -2- より抜粋
When applied to a class, the results is the number of bytes
in an object of that class including any padding
required for placing objects of that type in an array.
クラスに(sizeof を)適用した場合の結果は、
配列として配置した場合に要求されるあらゆるパディングを含めた、
そのクラスのオブジェクトのバイト数になる。
0181山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0182デフォルトの名無しさんNGNG
CTest test;
test.method();

と書いても

CTest pTest;
pTest = new CTest();
pTest->method();
delete pTest;

と書いても

結果おんなじですよね。

newする必要性を教えて下さい。
0183デフォルトの名無しさんNGNG
>>182
その場合は new する必要性は無い。

>>177
http://www.catnet.ne.jp/kouno/c_faq/c5.html#6
> データの型が異なるとポインターの内部表現が異なるマシンがある
ので、常に 0 を返すとは限らない。
0184182NGNG
おお。
やっぱり、単純な奴は必要ないのですね。

newの
必要性があるのは、
どんな時でしょうか?

内部パラメータが大きい時とかですか?
結局確保するんだから、さいしょから CTest test;でも、
いいような気がするんですが。
0185デフォルトの名無しさんNGNG
>>184
そのオブジェクトを作る必要がそのときどきで異なるとき
0186デフォルトの名無しさんNGNG
>>184
> 内部パラメータが大きい時とかですか?
CTest test; とすると(普通は)スタックに確保され、
new CTest; とすると(普通は)ヒープに確保される。
(普通は)スタックは小さく、ヒープは潤沢なので、
確かに巨大なものを確保する時には new を使う。
0187デフォルトの名無しさんNGNG
今風に言えばフリーストアか? >ヒープ
律儀にフリーストアって言葉使ってる人いるけ?
0188 NGNG
テキストファイルをバッファに一度に読み込みたいのですがバッファのサイズはどうやって知るの?

char filename[] = "\C\Hello.txt";
std::ifstream f(filnename,std::in);

char* buf = new char[?];
int readsize = f.readsome(buf,?);
buf[?] = \0;

というのを考えたんですけどサイズ(?)はどうやって知るの?
Win32APIにファイルサイズ知るのがあるらしいけどファイルハンドルとか要求してきてよくわかりません。
なんか良い方法ありませんか?
0189デフォルトの名無しさんNGNG
>>188
最後に seekg して tellg 。
0190デフォルトの名無しさんNGNG
>>188
std::stringとか使えば?

#include <iostream>
#include <fstream>
#include <string>
#include <boost/lexical_cast.hpp>

main(){
std::ifstream ifs("Hello.txt");
std::string s=boost::lexical_cast<std::string>(ifs.rdbuf());
std::cout << s;
}
0191デフォルトの名無しさんNGNG
>188
ファイルのサイズじゃなくて、バッファのサイズ?
ヘッダに書かれていると思う。


0192188NGNG
>>189 >>190 >>191
みなさん、どうも有り難うございます。

>>189
なるほど、そうやればいいんですね。感謝。
>>190
すいません。boostライブラリはまだ自分にはちょっと無理なようです。
>>191
ファイルの内容を全部読み込みたいんです。
テキストファイルの場合は\nが2文字から1文字になる?とかあるとか読んだので
確かにファイルサイズじゃなくて全部読み込めるだけのバッファのサイズのほうが無駄がないのかな?
でもちょっとだけ大きくてもいいのでファイルサイズでもいいけど。
あとヘッダてファイルのヘッダという意味?ただのテキストファイルにもあるの?
それとも違うヘッダのことかな。
0193デフォルトの名無しさんNGNG
バッファとは、「需要側と供給側の間に挟まって、緩衝の役目を果たすもの」を
指します。よって、「バッファのサイズ」とは、「緩衝用途に幾らメモリが割り当て
られているか」であり、「(iostreamの)バッファサイズ」なら、iostreamヘッダを
調べれば判る、という話でしょう。
0194デフォルトの名無しさんNGNG
>>192
std::ifstream ifs("Hello.txt");
std::ostringstream ost << ifs.rdbuf());
std::string s=ost.str()
std::cout << s;
0195188NGNG
>>188
std::inじゃなくてstd::ios::inだった。
0196デフォルトの名無しさんNGNG
普通こうする
#include <iterator>
#include <fstream>

int main(int,char **av)
{
    ifstream in(av[1]);
    string s((istreambuf_iterator<char>(in)),
             istreambuf_iterator<char>() );
    cout<<s;
}
0197名無し@沢山NGNG
>>196
ヌヒよ。そのコードは想像を絶するほど遅いぞ。
0198  NGNG
>>191 >>193
すいませんでした。自分の言葉遣いがおかしかったですね。
特にC++の場合はバッファといえばストリームクラスが使ってるバッファのクラスになりますよね。
readやreadsomeの第2引数で指定する、ファイルのデータを読み込んで書き込む領域のこととして誤って使ってました。

>>194 >>196
charの配列に読み込むよりこっちの方がC++らしいですね。
参考にさせていただきます。ありがとうございました。
0199デフォルトの名無しさんNGNG
>>197
想像を絶する遅さってどのくらいよ。
そんな低スペックな処理系でC++でプログラム組むんじゃねーよ。
それに、そんなBIGなファイルを一気に読みこもーなんて、ふつう、しないよ。
0200デフォルトの名無しさんNGNG
C/C++でパフォーマンスを否定しちゃいかんよ
0201デフォルトの名無しさんNGNG
>>197
istream_iteratorじゃなくてistreambuf_iteratorだぞ。
0202スタパ風NGNG
>>200
最近はそーでもない。

と思ったが C/C++ ですか…。
俺は C++ で飯食ってますが、 C/C++ なんて言語の事は知らないしな。
とりあえず C++ は「ここは可読性低くていいからとにかく速く」と
「ここはメンテしやすくいこうっと」の使い分けが大事な言語だと思った。
逆にいえばその使い分けができる言語だと思った。
そして求人広告によく載っている C/C++ ってどんな言語なんだろうと思った。
0203163NGNG
>>180
> 配列として配置した場合に要求される

こういう限定があるってことは、
非PODオブジェクトのメンバが、配列として配置したバイト列内に
存在する保証はないということになりませんか?
0204デフォルトの名無しさんNGNG
>>201
freadでのsetvbufに相当するのはistreambuf_iteratorではどうやればいいの?
0205デフォルトの名無しさんNGNG
>>204
streambufのpubsetbufでする。
0206デフォルトの名無しさんNGNG
実際windows環境じゃ役にたたない罠。
0207名無し@沢山NGNG
>>199
おれの想像を絶したぐらいの遅さだよ。

>>201
分かってるよ。
0208デフォルトの名無しさんNGNG
>>203
んー。言ってる意味がよく分からん。

例えば
struct AB {
 int a;
 short b;
};
とした時、単独では別に b の後のパディングは必要ないかもしれない。
AB ab;
short c;
としたときに、ab.b と c がくっついてても問題なさそうに見える。

でも、配列にしたとき int, short, int, short となるから、
5.3.3 -2- の仕様から AB::b の後にはパディングが入る
(パディングの入れ方は環境依存だけど、こうなることが多い)。
sizeof (AB) が 8(の環境とする)になるわけだから、
単独で確保してもやっぱり 8 バイトじゃなくちゃまずいということになる。
だから、AB ab; short c; でもパディングは入るし、
そのパディングのサイズは AB のサイズの中に織り込み済みである。

と、そういうことを表した仕様だと思われ。
0209163NGNG
>>208
メモリレイアウトについての規格が軒並みPOD型についてに限定してあったりするので、
非POD型については、メンバごとに全然違うメモリ領域に配置するような実装を
許そうとしているような気配を感じたのです。
(そのような実装が有利になるような環境は、現状では存在しないとは思います。)
0210名無し@沢山NGNG
おまいらよ。どれくらい想像を絶するかおまいらにも体験してもらおうと思って
実際にプログラムを書いてみたよ。Windows専用ですまんよ。
適当なfileという名前のファイルを用意してくれよ。

//前半

#include  <windows.h>
#pragma  comment(lib,"winmm.lib")
class  Timer{
public:
  Timer(){  start();  }  
  void  start(){  prev_time_=timeGetTime();  }
  unsigned  long  get()  const{  return  timeGetTime()-prev_time_;  }
private:
  unsigned  long  prev_time_;
};
0211名無し@沢山NGNG
//後半

#include  <iterator>  
#include  <fstream>  
#include  <iostream>  
using  namespace  std;
int  main(){  
  {
    Timer  t;
    ifstream  in("file",ios_base::binary);
    char  buf[10000];
    string  s;
    while(in){
      in.read(buf,10000);
      s.append(buf,buf+in.gcount());
    }
    cout<<t.get()<<endl;  
  }

  {
    Timer  t;
    ifstream  in("c",ios_base::binary);
    string  s(istreambuf_iterator<char>(in),istreambuf_iterator<char>()  );  
    cout<<t.get()<<endl;  
  }
}  
0212名無し@沢山NGNG
おまいら二つ目のifstreamに渡すファイル名を変え忘れたよ。
"c"から"file"に替えてくれよ
0213デフォルトの名無しさんNGNG
>>209
確か POD 型のメモリレイアウトは宣言順+パディング可だったはずです。
他にも仮想関数テーブルやら継承した場合やら色々仕様はあると思いますが、
基本的にはそんなもんかと。

1.8 -5- で POD 型を含めていないのは POD 型はパディング可だということを
言いたいのだと思います。
でも、パディング込みで考えれば連続領域(別の変数が割り込まない)で、
そのサイズは sizeof で得られる、
というようなことは、多分仕様に書いてあると思います(まだ調べてませんが)。
0214213NGNG
POD 型と非 POD 型を逆に書いてしもた。すまん。
たまにしか使わない用語なので。
0215名無し@沢山NGNG
ちなみにおれの環境では約300kbのファイルを読むのに

おれバージョンだと108ミリ秒
>>196バージョンだと23694ミリ秒かかるよ

300kbをBigなファイルだといったり
230倍の差を気にしないとかいうならもうプログラマやめたほうがよいよ。
0216名無し@沢山NGNG
おまいらよ、わざわざコードまで書いてやったのに反応がまったく無いとさみしいよ。
0217デフォルトの名無しさんNGNG
名前が悪いと思われ
0218デフォルトの名無しさんNGNG
>>217
うん、うん、沢山だもんね
もう、君のネタは、沢山だよ
0219デフォルトの名無しさんNGNG
荒らしは完全放置
0220デフォルトの名無しさんNGNG

沢山の話し方は煽りが入っていて気に入らないが、同意せざるを得ないな。
0221デフォルトの名無しさんNGNG
セレロン2GHで3MBくらいのファイルをよみこんでみたら

vc6 stlport使用
リリース mt
沢山バージョンだと46ミリ秒
>>196バージョンだと110ミリ秒かかるよ

デバッグ mt
沢山バージョンだと203ミリ秒
>>196バージョンだと27820ミリ秒かかるよ

12MBだと
リリース mt
沢山バージョンだと203ミリ秒
>>196バージョンだと453秒かかるよ
0222221NGNG
> デバッグ mt
> >>196バージョンだと27820ミリ秒かかるよ
2782ミリ秒の間違いです。
0223デフォルトの名無しさんNGNG
ちなみに最速はmemory mapped fileで、ファイルサイズ以上のバッファを
確保して一気に読み込みがほぼそれに近い時間で終わる。
以下、ループ実行回数に比例して実行時間が長くなり、1byteのバッファでの
読み込みとistreambuf_iteratorがほぼ同等。
0224名無し@沢山NGNG
おまいらよ。どうや最適化オプションを忘れてたようだよ。
正直すまんかったよ。
0225名無し@沢山NGNG
おまいらよ、恥かいたのでこの名前も捨てようとおもうよ。短い間だったけどありがとうよ。
0226名無し@沢山NGNG
と、書いたけど、もう一度ちゃんと確かめた結果は

おれバージョンは110ミリ秒
>>196バージョンは23655ミリ秒

なんでだよ?VC7に標準で付いてるSTLは死ぬほど遅いのかよ?
0227デフォルトの名無しさんNGNG

とりあえずC#相談室よりは上にいてほしいので
age
0228デフォルトの名無しさんNGNG
バカじゃねーの…
0229デフォルトの名無しさんNGNG
age
0230デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1051842450/475
> http://pc2.2ch.net/test/read.cgi/tech/1057580107/227
> > とりあえずC#相談室よりは上にいてほしいので
> > age
>
> 必死に対抗するか見てみよう
> age

マジで反応してやがる。にゃははは。
0231デフォルトの名無しさんNGNG
バカだなバカ
0232デフォルトの名無しさんNGNG
>>229
釣れた!(w
0233229NGNG
>>230-232
俺がオマエラ釣ってるんだって
227と無関係だし
0234ゼーレ01NGNG
IPの隠し方知ってますか?パス抜きされて困ってます。
誰か助けてください!!お願いします

0235デフォルトの名無しさんNGNG
>>233
諦めれ(w
0236デフォルトの名無しさんNGNG
クソスレ上げんな
0237デフォルトの名無しさんNGNG
すれたいがにていてまぎらわしい
0238デフォルトの名無しさんNGNG
>>237
ここにも顔つければいいんだよ。
c(+_+)とか。
0239デフォルトの名無しさんNGNG
>>233
何のために釣っているんだよ。
なにも内容が無い釣りは
何かに反応したとしか思えないぞ(w
0240デフォルトの名無しさんNGNG
>>238
それ採用!
具体的な顔募集します。
0241デフォルトの名無しさんNGNG
v(・∀-)b
0242デフォルトの名無しさんNGNG
こうして又一人C++盲信者が潰されましたとさ。
0243デフォルトの名無しさんNGNG
c(P_P)
0244229NGNG
>>239
釣れればなんでもいいし
今回は「age」って書けば十分釣れると思った・・・悪かったよ
0245デフォルトの名無しさんNGNG
C(+ω+`)
0246デフォルトの名無しさんNGNG
(c +_+) < cの部分は耳だよ
0247名無しNGNG
(c +_+)
0248デフォルトの名無しさんNGNG
(c +∀+)アーヒャヒャヒャ
0249デフォルトの名無しさんNGNG
ends<<endl;
0250デフォルトの名無しさんNGNG
1000/4
0251デフォルトの名無しさんNGNG
perlとかのsplitみたいにstringを複数のstringに分割する関数はないですか?
0252デフォルトの名無しさんNGNG
>>251
boost::tokenizerがいいと思う。
#include <boost/tokenizer.hpp>だけで使えるし
0253デフォルトの名無しさんNGNG
>>251
split みたいなのは知らんなぁ。
文字列の切り出しは substr くらいかな?

あとはここでも読んでちょ。
http://www.wakhok.ac.jp/~sumi/stl/index.html
0254デフォルトの名無しさんNGNG
>>252
> #include <boost/tokenizer.hpp>だけで使えるし
だと良いね
0255デフォルトの名無しさんNGNG
>> #include <boost/tokenizer.hpp>だけで使えるし
>だと良いね

良いよぉ。まさかお前C++を使っていてboostを
構築はともかくインストールしていない訳じゃああるまい
0256デフォルトの名無しさんNGNG
その言い訳は苦しい
0257デフォルトの名無しさんNGNG
まあインストールしていないのは英語が分からない奴くらいだろうな
0258デフォルトの名無しさんNGNG
言えば言うほど見苦しい
0259デフォルトの名無しさんNGNG
芳ばしい臭いがするので、ちょっと晒し上げておこう
0260デフォルトの名無しさんNGNG
>>257
コンパイラがしょぼいのも無理ぽ。
0261デフォルトの名無しさんNGNG
むしろラインセンス
0262デフォルトの名無しさんNGNG
ちょっと指摘されただけで英語云々持ち出さんでも・・・
「boostにはこんなのあるよ」の一言を忘れただけなんだから次回から気をつければいいだけだろ・・・
0263デフォルトの名無しさんNGNG
>>262
なんだお前は英語が読めないのか?
>「boostにはこんなのあるよ」
そう言う内容なのは明らかだろ。お前は読解力ゼロ
0264デフォルトの名無しさんNGNG
boostつかうと保守に問題が出るよな。
0265デフォルトの名無しさんNGNG
英語厨のおでましか
0266デフォルトの名無しさんNGNG
>>264
お前は今後一切使うな
0267デフォルトの名無しさんNGNG
>>263
読解力無いのはオメーだろ。
内容が明らかなのとboostがインストール済みかどうかはまったく別問題だ。
boostにケチはつけんが、boostスレじゃない場所でboostがインストール済みであることを前提に話す奴は逝ってよい。
相手は初心者かもしれん。
0268デフォルトの名無しさんNGNG
必死なのがいるなぁ。俺も晒し上げておこう。上から2スレ目だけど。
0269デフォルトの名無しさんNGNG
まぁ煽り文句で「英語が読めないのか」は王道だよな
0270デフォルトの名無しさんNGNG
どっかの会社が、boostを商用ライブラリとして出してくれないかなぁ
0271デフォルトの名無しさんNGNG
>>268
ワロタ
0272デフォルトの名無しさんNGNG
つーか、boostのライセンスのどこが問題なんでしょう?
regex使ったら、使ったこと書いてね!!
以外になんか不満あるようなもんあるんでしょうか?
0273デフォルトの名無しさんNGNG
完全にboostスレ向きの質問だと思うが
0274デフォルトの名無しさんNGNG
そしてboostスレでもライセンスの話題は何度か出ている。
0275デフォルトの名無しさんNGNG
stringstream の中身をクリアするにはどうしたらいいんですか?
clear()を呼んでも残っているみたいなんですが。
0276デフォルトの名無しさんNGNG
>>275
たぶんそれは、basic_ios::clear()を呼んでいる。
中身をクリアするってのはないけど、
str(string const&)で文字列を割り当てることができるので、
空の文字列を割り当てればよい。つまり
str(string());
0277デフォルトの名無しさんNGNG
>>275
eraseしろ!!

>>273
boostスレではライセンスに(商用でも)問題ない(らしい)という結果だったはず。
でも、問題があるよといわれれば、どこが問題なのかやはり気になるもんでね。
0278デフォルトの名無しさんNGNG
ttp://www.tietew.jp/cppll/archive/5777
0279277NGNG
>>278
大変ありがたいのだが、すでにそのページは拝見しております。
私が気になるのは、問題があるという人は何をもってしてそう判断したのか?ということです。
新しい発見(?)したとか。何かの特許に抵触したとか・・・。
0280デフォルトの名無しさんNGNG
>>279 英語を読めない人の妄言です。
0281デフォルトの名無しさんNGNG
C++自体の質問なのでスレ違いかもしれませんが、よろしければご教授ください。


A.cppというファイルからB.hとC.hをIncludeして使おうと思っています。
C.hではクラスの宣言をしています。
そして、A.cppではそのインスタンスを作成しています。

しかし、B.hで作成したインスタンスのメンバーを読み込もうとすると、
コンパイル時に、そのインスタンスが『未定義』とされエラーがでてしまいます。
その後、A.cppでインスタンスを作成する場所でも『再定義』というエラーがでるので、
きっと、宣言の順番の問題なんだろうと思うのですが、何かよい解決策はないでしょうか。

わかりにくい文章ですみませんが、よろしくおねがいします。
0282281NGNG
すみません。
最初にこのスレを見つけられずに、他のスレッドに書き込もうとしていたので、
その時書いた文章の残骸が残ってしまいました。
スレ違い云々は気にしないでください。
申し訳ありませんでした。
0283デフォルトの名無しさんNGNG
いつもいつも思うんだが
質問したいならageろ!
よろしくお願いしたいならageろ!
あほか。なにがメール欄に「sage」だよ。
きどってんじゃねーよ。
0284デフォルトの名無しさんNGNG
B.h には何が書いてあるの?
0285デフォルトの名無しさんNGNG
癖でsageちゃうことはよくあるよね。
0286デフォルトの名無しさんNGNG
yes
0287デフォルトの名無しさんNGNG
いつもいつも思うんだが
スレ違いの事を書き込むならsageろ!
晒し上げじゃないならsageろ!
あほか。なにがメール欄に「nuge」だよ。
荒らしてんじゃねーよ。
0288デフォルトの名無しさんNGNG
代わりに上げてやってるんじゃないか。
しかもアドバイスしてさ。
親切じゃない。
0289デフォルトの名無しさんNGNG
余計な御世話じゃないの?
漏れなら、アドバイスだけして、本人に揚げさせる
0290デフォルトの名無しさんNGNG
まぁ、こういうどうでもいいレスで
ちゃんとしたレスを埋もれさせるのが一番不本意なので、
ちゃんとしたレスにアンカーを貼っておこう。

質問 >>281

レス >>284

0291デフォルトの名無しさんNGNG
余計な御世話
0292デフォルトの名無しさんNGNG
クラス内で定義されている名前を
クラス外で::なしで使うにはどうすればよいですか?
class A
{
public:
typedef int type;
static const size_t SIZE;
};
みたいなときに
A::type i; size_t n = A::SIZE;
とかではなく
type i; n = SIZE;
とか書く方法はないでしょうか。
using A::type;
とかはだめみたいです。
0293デフォルトの名無しさんNGNG
クラス外で定義しろ
0294292NGNG
>>293
ごめんなさい。よくわかりません。
0295デフォルトの名無しさんNGNG
>>292
出来るが、そんなことして欲しくないので教えない。
0296デフォルトの名無しさんNGNG
>>292
typedef A::type type;
const int SIZE=A::SIZE;

と事前に書いとく
0297292NGNG
>>295
いじわるしないでぇ
そんなことして欲しくない理由と共に教えてください。
ちっちゃな翻訳単位ローカルに使うんだったら
そんなに悪くないとおもうんですが。
0298デフォルトの名無しさんNGNG
何のためにそんな事するのか小1時間・・・
0299292NGNG
>>296
なるほど。っていうかそんなことも思いつかん褐炭か>俺
ありがとうございます。
0300デフォルトの名無しさんNGNG
やるのかよ。
いや、別にいいけどさぁ・・
0301292NGNG
いやぁん♥
冷たくしないでぇ
0302デフォルトの名無しさんNGNG
(c +_+) なんだかなあ……
0303292NGNG
はじめて自分の偽者とであいました。
こんにちは>>301
0304281NGNG
>>281 です。

>>284
わかりにくくてすみません。
B.hでは別のクラスが宣言されています。
簡単に書くと、こんな感じです。

[B.h]
class CHuman
{
int Speed;
void SetSpeed(void)  { Speed = Ball.Spin; } ●1
};
-------------------
[C.h]
class CBall
{
int Spin;
};
-------------------
[A.cpp]
#include "B.h"
#include "C.h"
CHuman tanaka;
CBall Ball; ●2
main()
{ tanaka.SetSpeed(); }

●1が、未定義のエラーが出るところ、●2が再定義のエラーが出るところで、
それぞれの変数はpublicで宣言されていて、コンストラクタで数値が代入されていると考えてください。

たびたびの長文すみませんが、よろしくおねがいします。
0305デフォルトの名無しさんNGNG
そりゃ出るわな
0306デフォルトの名無しさんNGNG
>>281
ポインタで宣言してコンストラクタで new すれば?
0307デフォルトの名無しさんNGNG
>>304
B.hで
#include "C.h"
extern CBall Ball;
とするか、SetSpeed の実装をcppに分ける。
0308デフォルトの名無しさんNGNG
印来るドのジュンバン

#include "C.h"
#include "B.h"

CBall Ball; はいらない。



と思う漏れは実はC++なんてよく知らないのだが(w
0309デフォルトの名無しさんNGNG
継承したクラスのコンストラクタについての質問です。
CParentと、それを継承したCInheritedがあります。
CInheritedのコンストラクタで、
1.
CInherited::CInherited():CParent(){
}
2.
CInherited::CInherited(){
  CParent::CParent();
}
は何が違うのでしょうか。
0310デフォルトの名無しさんNGNG
>>304
#include "C.h"
CBall Ball;
#include "B.h"
CHuman tanaka;
こんなかんじにしたら
0311デフォルトの名無しさんNGNG
>>309
初期化の優先順位が違う。
こんな感じ
0312デフォルトの名無しさんNGNG
>>281
もしやとは思うが、
ヘッダを
#ifndef HOGE
#define HOGE
//ここに本文
#endif
でくくる方法は知ってるよな?
0313デフォルトの名無しさんNGNG
プリプロセッサで再定義を防げばインクルードの順番なんて関係ないはずだぞ。
0314281NGNG
>>312
すみません、知りませんでした。
調べてみる事にします。

結局>>307のやり方でやってみたら、なんとかできました。
こたえてくださったみなさん、ありがとうございました。
0315デフォルトの名無しさんNGNG
>>309
struct A{
A(){
std::cout<<this<<" A"<<std::endl;
}
};

struct B : public A{
B():A(){
std::cout<<this<<" B"<<std::endl;
}
};
/*
struct B : public A{
B(){
A::A();
std::cout<<this<<" B"<<std::endl;
}
};*/

Bの定義を入れ替えて実行結果を見てみろ。

>>311はアホ
0316デフォルトの名無しさんNGNG
CParent::CParent(); は一時オブジェクトってこった。
0317デフォルトの名無しさんNGNG
標準C++ではコンストラクタには名前がないから
CParent::CParent()などとして呼ぶことはできない
0318デフォルトの名無しさんNGNG
map<int,int> hoge;
return hoge[0];

とかやったら、intにコンストラクタはないから返り値は未定ですよね。
int型とかにコンストラクタをつけたい場合は新しくクラスを作るしかないですか?
0319デフォルトの名無しさんNGNG
>>318
intはデフォルト初期化で0になるので返値は0です。
0320デフォルトの名無しさんNGNG
template<typename Iter>
class Value_iter : public Iter
{
public:
    Value_iter(const Iter &it): Iter(it){}
    typedef typename Iter::value_type::second_type value_type;
    value_type operator*()
    {
        return Iter::operator*().second;
    }
    value_type operator->()
    {
        return Iter::operator->().second;
    }
};

こういう感じで、一部の関数を上書きするために公開継承を使っても問題はないでしょうか。
std::map<A,B>::iterator 辺りを渡されることを期待するテンプレートです。
0321320NGNG
考えてみれば operator-> は要らなかった…
0322デフォルトの名無しさんNGNG
>>318

int n = int();  // デフォルトコンストラクタ
          // 0で初期化
assert(n == 0);
0323デフォルトの名無しさんNGNG
>>320
ほとんどの場合、問題「ある」。例えばその例なら、

Value_iter<map<key,val>::iterator> i;
val x = *i++; // error
0324デフォルトの名無しさんNGNG
>>323
ああ、なるほど。理解しました。有難うございました。
0325デフォルトの名無しさんNGNG
クラスメンバのconstな関数ポインタ変数って初期化できんのー?

class CMoe {
const void (*pFunc)();
public:
CMoe(void (*func)()):
pFunc(func) // だめぽ
{
}
};
0326デフォルトの名無しさんNGNG
void (* const pFunc)();
だろ
0327デフォルトの名無しさんNGNG
const void型って何だ(笑)
0328デフォルトの名無しさんNGNG
>>323
何ゆえ *i++ ←(increment operator)関数どこ?
>>320
意味ない。何のためのiteratorがあるのかわかる?
>>327
const void はそのままじゃんか。何か?
0329デフォルトの名無しさんNGNG
>>328
キミ、会話の意味がわかってないなら黙ってた方がいいと思うよ。
0330Error 改行が多すぎますNGNG
>>325
#include <iostream>
using namespace std;
const void test(){
    cout << "test" << endl;
}

class CMoe{
protected:
    const void (*pFunc)();
public:
    CMoe(const void (*func)());
    void Do();
};

CMoe::CMoe(const void (*func)()){
    pFunc = func;
}

void CMoe::Do(){
    (*pFunc)();
}

int main(){
    CMoe moe(test);
    moe.Do();
    return 0;
}

0331325NGNG
>>326
なーる。サンクス!

スマソ、も1つ。
class CHoe {
 // うにょにょ〜(operator=なし)
};
int main() {
 CHoe hoe;
 vector<CHoe> Moe;
 Moe[0] = hoe;  // CHoeにoperator=が定義されてない。
 return 0;
}

ちゃんと定義しないとダメ?
0332325NGNG
>>325
そう、まさにそれがやりたかった。ありがと。
0333デフォルトの名無しさんNGNG
>>332
0334328NGNG
>>329
意味わかんないかな?
こんなのは使わんけど。
#include <iostream>
#include <map>
#include <string>

template<class T,class U>
struct TorU : std::map<T,U>::iterator
{
  typedef typename std::map<T,U>::iterator base;
  TorU(std::map<T,U>& m) : base(m.begin()){}
  operator T(){ return base::operator ->()->first; }
  operator U(){ return base::operator ->()->second; }
};

int main()
{
  using namespace std;
  map<int,string> cs;
  cs.insert(pair<int,string>(0,"ring 0")) ;
  cs.insert(pair<int,string>(1,"ring 1")) ;
  TorU<int,string> tu(cs);
  while(tu != cs.end()){
    cout<<(int)tu<<' '<<(string)tu<<'\n';//castめんどくせー
    ++tu;//ここがポイントなのよ
  }
}
0335デフォルトの名無しさんNGNG
>>334 黙ってた方がいいと思うよ。
0336const void???NGNG
誰か>>328を日本語に訳してくれないか?
0337328NGNG
沈黙・・・・・・
0338328NGNG
なんだconstのほうかよ
これで納得いかないか?
#include <iostream>

template<class T> struct Imitation;

template<>
struct Imitation<void>
{ static void fun(){ std::cout<<"Variant"<<std::endl; } };

template<>
struct Imitation<const void>
{ static void fun(){ std::cout<<"Constant"<<std::endl; } };

int main()
{
  Imitation<const void>::fun();
  Imitation<void>::fun();
}

0339328NGNG
おおっと
>>320よみなおしたら意味違ったすまん。
0340デフォルトの名無しさんNGNG
むしろ>>332の>>325を日本語に訳して欲しいわけだが…
0341331NGNG
ごめ。
単にCHoeのメンバがconstだったり参照だったりしてただけだった。
代入演算子が生成されないんだね。
0342_NGNG
http://homepage.mac.com/hiroyuki44/
0343デフォルトの名無しさんNGNG
template <class T> void foo(T){}
template <class T> struct bar{};
template <class T> void foo(bar<T>){}

int main(){
bar<int> b;
foo(b);
}

以上のプログラムがコンパイル通りません。
そこで以下のようにしたら無事とおりました。下のプログラムはC++的に正しいですか?

template <class T> void foo(T){}
template <class T> struct bar{
friend void foo(bar<T>){}
};

int main(){
bar<int> b;
foo(b);
}

0344デフォルトの名無しさんNGNG
うわー、びっくりした。
0345デフォルトの名無しさんNGNG
static 変数をメンバに持つクラスから、幾つかのクラスを派生させ、
それぞれの派生クラスのインスタンスを作った場合、
ベースクラスから継承した一つの static 変数をそれらで共有することになりますか?
厨でスマソ。
0346デフォルトの名無しさんNGNG
>>345
なる
0347デフォルトの名無しさんNGNG
>>343
上の通るなあ。bcc32
0348343NGNG
>>347
VC7では通らなかったのですが、、、

上の例は関数の部分的特殊化に当たるから不可、なのではないのですか?
0349345NGNG
>>346 つまらない質問に付き合って下さって、ありがとうございます。
0350デフォルトの名無しさんNGNG
>>348
ISOのドキュメントによると関数テンプレートのオーバーロードに相当して
より特殊化したものが選ばれる。事になっていて問題ないようだけど…

より詳しい人よろしく
0351デフォルトの名無しさんNGNG
>>348
関数があいまいてVC7(VC6も?)はエラーがでるから
おしえてあげればいいのでは?
foo<int>(b);
しってたらごめん。
0352343NGNG
>>350
なるほど thx!
ってことはVC7はそこラ変がまだまだだったってことでしょうか

>>351
明示的に指定せずに上手くいく方法を探してます。すいません。
0353デフォルトの名無しさんNGNG
void func()関数で宣言したclassHogeクラスのオブジェクトcHogeを
グローバル変数に渡したいのですが、どのようにすればよいのでしょうか?
(ローカル変数のスコープをグローバルに変換したい)

自分がやってみたのは以下のとおりです。
おかしな点があったらご指摘頂けないでしょうか。

// グローバル
classHoge* global_ptr_cHoge;

//
void func()
{
  classHoge cHoge; // オブジェクト作成
  global_ptr_cHoge = &cHoge; // オブジェクトのアドレスをグローバルに格納
  test(global_ptr_cHoge); // テスト用関数
}

void test(classHoge* ptr_cHoge)
{
  ptr_cHoge->Method();
  ...
}
0354デフォルトの名無しさんNGNG
>>343
VC7.1では上ので通る
0355デフォルトの名無しさんNGNG
>>353
funcを抜けてからアクセスしなければ大丈夫
0356デフォルトの名無しさんNGNG
>>353
> ローカル変数のスコープをグローバルに変換したい
ここがおかしい。
0357デフォルトの名無しさんNGNG
>>353
諦めてグローバルにインスタンス置いと毛
0358353NGNG
>>355
func外からも使いたかったんですが、
funcを抜けるとやっぱりまずいですよね・・・

>>356
う、確かに・・・

>>357
はい、そうしときます。
変な質問してしまいすみませんでした。

0359デフォルトの名無しさんNGNG
みんなちゃんと理由を説明してやれよ。かわいそうに。
>>353
func を抜けたら func の auto 変数の cHoge は destruct されるから
それ以降に触るのは危険。
というか cHoge を func 内の static にしておけばいいんだけど
それだとやりたい事と意味があっているかどうかはわからん。
0360デフォルトの名無しさんNGNG
>>359
かわいそうも何も明らかに普通でない質問だろう。
「変な質問」と自覚していて、それでもやりたいというならば、
それこそその理由を述べるべきだ。
0361sageNGNG
//
void func()
{
  global_ptr_cHoge = new classHoge; // オブジェクトのアドレスをグローバルに格納
  test(global_ptr_cHoge); // テスト用関数
}
0362デフォルトの名無しさんNGNG
template <class T> struct bar;

classと指定してるとvc6だと組み込み型の宣言ができない。
組み込み型も宣言したいときはtypenameで指定すればよかったと思われ。

template < typename T> struct bar;

もう解決してるかね?
0363362NGNG
上のレスは
>>343 へのレスですー。

2重カキコすまそ。
0364デフォルトの名無しさんNGNG
using namespace std;
とネームスペースを一括?指定するのはよくないことなの?
0365デフォルトの名無しさんNGNG
>>364
俺は .cpp でやるんなら別にいいと思うが、
.h でやるのはお行儀悪いと思う派。
0366デフォルトの名無しさんNGNG
そのことで前揉めてたな
モミモミ
0367364NGNG
>>365
それはなぜなんでしょう?
0368デフォルトの名無しさんNGNG
>>367
名前のバッティングを防ぐためにわざわざnamespaceに入れたのに、それをあえて同じ名前空間にインポートして無意味にしてしまうusingを、複数のソースファイルで共有されうるヘッダーファイルで使うのは問題だろ?
0369デフォルトの名無しさんNGNG
そういう理由なら.cppでやるのも同じように問題な気もするが・・・
(複数のソースファイルから共有されるという点は別だけど)
0370デフォルトの名無しさんNGNG
>>369
>複数のソースファイルから共有されるという点は別だけど
これは重要な違いだと思うがね。
まぁ、それでも using が嫌いという人がいるのも分かるし、
usign 使わないのを止(と)めようとは思わんが。
0371デフォルトの名無しさんNGNG
>>369
> (複数のソースファイルから共有されるという点は別だけど)
大きなポイントじゃないすか? 衝突の可能性を広い範囲に作っちゃうのは
やっぱ怖いというか、安心できないですよ。
自分(cppファイル)の中だけで「曖昧だ」とかコンパイラに怒られるだけなら
屁でもないですから。

些細なことかもしれないけど、この程度のことで未来に何かを課したくはないです、俺は。
0372デフォルトの名無しさんNGNG
using 論争ですが、
ヘッダファイルは公共の場所、
実装ファイルは家の中などのプライベートな場所、
っていう雰囲気があると思う。

家の中で素っ裸になるのは個人の自由だけど、
表でやったらタイーホの予感。

実装で using を使って怠けるのは自由だけど
ヘッダで using を使うのは(明日の自分も含めた)他人への迷惑をかえりみない行為。
0373デフォルトの名無しさんNGNG
かわいいおにゃにょこの裸ならお外でも・・・・・ハァハァ
0374デフォルトの名無しさんNGNG
>>373
つまりそれは std と boost だけはヘッダで using してもいいという事ですか?
0375デフォルトの名無しさんNGNG
>>374
ネタです
0376デフォルトの名無しさんNGNG
>>375
いや、「わたしかわいいおにゃにょこだからだいじょうぶね♪」といって
ネカマデブ、ババア、破壊的ブスどもが裸で街を跳梁跋扈する闇の時代がくるという予言です。
0377デフォルトの名無しさんNGNG
>破壊的ブス

ワラタ
0378デフォルトの名無しさんNGNG
>>369
あほ。全然違うだろ。
0379378NGNG
あ、>>369の言いたいことが分かった。
普段
#include "hoge.cpp"
とかやってるだろ?1から勉強し直した方がいいぞ。
0380デフォルトの名無しさんNGNG
久しぶりだな、半角?くん。
0381デフォルトの名無しさんNGNG
>>380
久しぶりだな、半角?くんを半角?くんと呼ぶお前。

つーか半角で?を打つ奴が一人しか居ないと考え
決め付けるお前の浅はかさには閉口してしまうよ?
0382デフォルトの名無しさんNGNG
ヴァカが紛れ込んできたようですね
0383デフォルトの名無しさんNGNG
どうでもいいけどどこに半角?があるんだ?誤爆?
0384デフォルトの名無しさんNGNG
>>2だな
0385>>378NGNG
天然?
0386デフォルトの名無しさんNGNG
>>364
スコープ内でusing使ってください。
あと名前のバッティングなんて別に怖いもんでないような?
エラーが出たら一括に名前付けて置換すりゃーいいんだし。
0387デフォルトの名無しさんNGNG
>>385
>>369読んで出直して来い。

>>384
ありがと。
そんな2週間も前のやつにレスしてたのか。
0388デフォルトの名無しさんNGNG
??????????
0389デフォルトの名無しさんNGNG
>>386
シグネチャがほとんど同じだどエラーが出なくて通ってしまい、
挙動のおかしさ悩むこともある
0390デフォルトの名無しさんNGNG
かなりお馬鹿な質問ですが、
C++で作った関数をC言語プログラムに組み込む方法はないでしょうか?
0391デフォルトの名無しさんNGNG
絵x手rん ”C"
0392デフォルトの名無しさんNGNG
>>390
#if cplusuplus
extern "C"
{
#endif
 void MyCPlusPlusFunc(void);
#if cplusuplus
}
#endif

どぞー
0393デフォルトの名無しさんNGNG
マングリ返し
0394デフォルトの名無しさんNGNG
>>392
__cplusplus をデフォルトでサポートしてくれているコンパイラが殆どなので、
__cplusplus と書いておいた方が楽っぽ。
あと、#ifdef な。
0395デフォルトの名無しさんNGNG
>>394
__cplusplusは規格で必要とされている。
0396デフォルトの名無しさんNGNG
>>395
あ、ホンマや。
昔は規格外だったと思ったけど。
199711L で定義されてるってことは、
1997 年 11 月の規格で導入されたんだろうな。
0397デフォルトの名無しさんNGNG
C++ のソースファイルの拡張子が .cpp とか .cxx とか色々ある歴史的理由を教えて下さい。
0398デフォルトの名無しさんNGNG
#ifdef じゃあ
C で
#define __cplusplus (0)
と定義されたらやヴぁくない?
0399デフォルトの名無しさんNGNG
>>398
#define __cplusplus (1)
と定義され(ry
0400デフォルトの名無しさんNGNG
#ifdef じゃあ

エラー
0401390NGNG
#if __cplusplus
#endif

でできました。ありがとうございます。

0402デフォルトの名無しさんNGNG
普段Javaですが、都合でC++初めて使っているのですがかなり参ってます。
例えばデストラクタの使用で、

...
Test::~Test(){
printf("%d",0);
}
...
Test *t;
t = new Test();
for(int i=0;i<100;i++) delete(t);

これで0が100回出力されてしまうのが謎です。
tが指しているオブジェクトは1回deleteを行った時点で
破棄されているはずじゃないのでしょうか?
どうして100回デストラクタが働くのでしょう?
0403_NGNG
http://homepage.mac.com/hiroyuki44/
0404デフォルトの名無しさんNGNG
C++では、ポインタの指しているオブジェクトの生き死にには、
自分で責任を持たないといけない。以上
0405デフォルトの名無しさんNGNG
クソ言語だな。おい。
0406デフォルトの名無しさんNGNG
( ´,_ゝ`) プッ
0407デフォルトの名無しさんNGNG
boost::shared_ptrとかstd::auto_ptrとかあるからその辺使えばdeleteのタイミングをあまり気にする必要なし。
例外対策にはほぼ確実に必要だし。
0408402NGNG
>>404,407
えーと、つまり
こんなふうにdelete100回書いちゃっても問題ないのでしょうか?
それともこの場合たまたま0が100回出力されただけで
2回目以降は偶然って考えのほうがよいでしょうか?

うーん、Javaよりむずい。
0409デフォルトの名無しさんNGNG
>>408
> こんなふうにdelete100回書いちゃっても問題ないのでしょうか?

大問題。
0410デフォルトの名無しさんNGNG
同じポインタを複数回deleteした場合、どうなっても知らない。ただそれだけだ。
それがいやならdelete後に0でも代入しておくという手もないではないが、
複数回deleteが呼ばれうるという時点で設計が間違ってる。

メンバ変数に触らない非仮想のメンバ関数はthisの値がどうなっていてもエラー
にならないことが多いから動いているように見えただけ。
0411デフォルトの名無しさんNGNG
デストラクタを呼ぶ部分はともかく、
メモリ解放処理がなぜエラーにならないか無気味だな。
0412デフォルトの名無しさんNGNG
template<typename T>
inline void safe_delete(T*& ptr ){
delete ptr;
ptr = 0;
}

0413デフォルトの名無しさんNGNG
オブジェクトは1度目のdeleteで破棄された(無くなった)
 ↓
デストラクタも無くなった
 ↓
無くなってるはずのデストラクタが呼ばれる
 ↓
なんで???

って疑問なんじゃないの?
0414デフォルトの名無しさんNGNG
>>413
デストラクタなんぞ、
メンバ変数(仮想関数テーブル含む)使わん限り
普通の関数と大して変わらんじゃんかよ。
0415402NGNG
>>413
そういうことです。

>>414
なるほどと思って
別の関数を作ってdeleteした後に呼んでみた、すなわち

for(int a=0;a<10;a++)
delete(t3);
printf("%d\n",t3->test2());

これでもエラー起きないんだね。
deleteってのは振る舞いを未定義にするだけで
解放するって認識はやめたほうがいいのかな・・・
0416デフォルトの名無しさんNGNG
>>415
違う
一度削除されたオブジェクトへのアクセスは未定義だから、
プログラムがクラッシュすることもあれば、
突然ディスプレイが火を噴くこともある。
アドレス帳の全メアドに添付ファイルつきメールを送りつけることもある。

もちろん一見うまく行っているように見えることもある。
0417デフォルトの名無しさんNGNG
複数回deleteした時の振る舞いが未定義なんじゃないの?
資源の解放という認識でいいと思うけど。
0418416NGNG
紛らわしくてスマン
「削除されたオブジェクトへのアクセス」は>>417の意味
0419デフォルトの名無しさんNGNG
正直、一見何事もないかのように見えるのが一番やっかい。
0420デフォルトの名無しさんNGNG
俺は同じメモリを100回deleteしてみる奴始めてみた。
動作を確認してみようという姿勢は悪くは無いが。
0421デフォルトの名無しさんNGNG
死体に鞭打つような真似はやめようよ...。> delete 100 回
0422デフォルトの名無しさんNGNG
100回加熱殺菌とか
0423デフォルトの名無しさんNGNG
ただ、deleteによって対象のポインタがNULLになると勘違いしてる奴は沢山いる。
こういう奴は「NULLをdeleteしても問題ないから」と考えるかもしれない。
0424デフォルトの名無しさんNGNG
たまたま開放したままで誰もヒープをいじってないから
残骸のアドレスは空き領域で、再度開放は単にこっそり失敗してるだけだろうな。
デストラクタ自体は単なる関数だからオブジェクトがいなくなっても消えないが。

...もしデストラクタが仮想関数だと少し事情が違うかもしれないが
これも呼び出し時点で対象オブジェクトのクラスが明らかな場合は
最適化で直接呼び出しになってるかもしれんか。
0425デフォルトの名無しさんNGNG
template<class T>void del(T *&p){delete p;p=0;return;}
0426デフォルトの名無しさんNGNG
メモリ管理嫌ならJava使え。
0427デフォルトの名無しさんNGNG
safe_deleteみたいに2回目以降も安全なのと、
2回目以降は例外投げてくれるのとどっちがいい?

前者の方が楽だけど、後者の方が鬱陶しい代わりに
バグの温床を早めに発見できるので。
0428デフォルトの名無しさんNGNG
>>427
どっちも使わないのが良い。
ポインタなんて複数箇所から同じオブジェクトを指すんだから、一箇所だけ0クリアしたって焼け石に水。
でもそれをわかった上で使うなら前者がいいと思う。
複数回deleteするかもしれないからこそわざわざsafe_delete使うんだし、それがダメなら自分でチェックすれば良い。
0429デフォルトの名無しさんNGNG
早い話、生のポインタなんか使うなってこった
0430デフォルトの名無しさんNGNG
>>428
なるほど参考になります。
そうすると下手に自作するより、Boost等のスマートポインタが
うまくやってくれるのに任せるのも安全&&楽ちんで良いですね。
0431デフォルトの名無しさんNGNG
結局GCになるのか。
0432デフォルトの名無しさんNGNG
ループで集中してdeleteしてるから、無事に動いてるように見えるけど、

delete p;
.
ヒープを扱う処理
.
delete p;

みたいに、間をおいて実行すると、すごいことになる予感。
0433デフォルトの名無しさんNGNG
boost::shared_ptrみたいにすでにあるもの使うこともできるし。
機能に不満があったら自作することもできるし。
選択肢が多いのはいいことだと思う。
0434デフォルトの名無しさんNGNG
> 選択肢が多いのはいいことだと思う。
勉強用としてはね。
実用としては悪いことになりえる。
0435デフォルトの名無しさんNGNG
実用としては選択肢が少ない方が良いとでも?
馬鹿じゃねぇのか?
お前はBASICでも使ってろ。選択肢少ないぞ
0436デフォルトの名無しさんNGNG
選択肢が多い方がいいのは応用の部分じゃねーかな。
基礎の部分で多いのは困るぜ。
たとえばライブラリごとに使ってるスマートポインタが違かったりする。
コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。
0437デフォルトの名無しさんNGNG
C++は設計からしておかしいからね。
クソと言われてもしかたないよ。
0438デフォルトの名無しさんNGNG
> コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。
ATLは言語に依存しないCOMのため。
MFCはSTLがVC++にまともに搭載される前からのもの。
0439デフォルトの名無しさんNGNG
>>435
少ない方がいいとはいわんが
必要ないものはいらん。
0440デフォルトの名無しさんNGNG
>>437
どこが?
0441デフォルトの名無しさんNGNG
>>440
いつもの荒らしだろ
放置しろよ。
0442デフォルトの名無しさんNGNG
>>436
例えば文字列ですかね>応用

C由来 : char*, wchar_t*
C++由来 : std::string, std::wstring
SourcePro由来 : RWCString, RWWString
Xerces由来 : DOMString, XMLString
Xalan由来 : XalanDOMString
ICU由来 : UnicodeString
SGI由来 : std::rope
MFC由来 : CString
0443デフォルトの名無しさんNGNG
>>436
VCの不満はマイクロソフトに言え
C++に文句言うのはお門違いだ
0444hogeNGNG

(*hoge)->hoge_f
って()で囲んで*つけると普通の構造体参照とどう異なるの?
0445デフォルトの名無しさんNGNG
>>444
hogeはstruct tag **hoge
ここまで言えば分かるでしょ。
0446デフォルトの名無しさんNGNG
(*hoge).hoge_f
の間違いじゃないのか
0447hogeNGNG
>>444
ポインタのポインタを指す場合は()で囲んで*をつけるのですね@@;
ありがと
0448デフォルトの名無しさんNGNG
>>446
それならhoge->hoge_fとかくだろ
0449_NGNG
http://homepage.mac.com/hiroyuki44/
0450教えてくださいNGNG
VC++で、Waveでデータを波形にし、サンプリング周波数を出すプログラムはできたのですが、
波形の高い部分を見つけ、それをテキストに変換し保存するプログラムが分かりません。
どなたか、教えてくれませんでしょうか?
参考URLなどご存知でしたらお願いします。
せめて、WAVEデータをテキスト変換するプログラムを教えてください。

お願いします。
0451デフォルトの名無しさんNGNG
↓次の質問ドゾー
0452教えてくださいNGNG
煽ってないでお願いします。
0453デフォルトの名無しさんNGNG
↑次の質問キター
0454デフォルトの名無しさんNGNG
>>450
テキストに変換、の意味がわからん
音声認識じゃないだろうし
0455教えてくださいNGNG
>>454
音声認識です。
0456デフォルトの名無しさんNGNG
音声認識ソフト作ってる会社に金払って教えてもらえ
0457デフォルトの名無しさんNGNG
音声認識ならMicrosoftのSpeechエンジンが無料で使えるぞ
0458デフォルトの名無しさんNGNG
void printf2(const char *str, ...)
{
  printf(str, ...);
}
可変個数で受け取った引数を、さらに別の関数の可変個数の引数として
渡すことってできますか? ↑のような感じに。
0459デフォルトの名無しさんNGNG
>>458
void myprintf( const char* str, va_list args ) { ... }
void printf2(const char *str, ...)
{
 va_list args;
 va_start( args, str );
 myprintf(str, args);
 va_end( args );
}
とかなんとか。標準(だったけ?)ライブラリにvprintf関数
ってのがあるから、そのソース見るとかすればわかると思う。
0460459NGNG
あー、つまりその、printf に対する vprintf みたいなのが用意されてれば、
そっちに va_list を渡せばいい。そういうのが用意されてないと、無理。
0461デフォルトの名無しさんNGNG
通常は反則技だが。

__declspec(naked)
void printf2(const char* str, ...)
{
 __asm {
  jmp printf
 }
}
0462163NGNG
あれ(>>163)から幾度か規格を漁るうちに、また妙な記述を見つけました。

offsetof@cstddef が引数として受け取る型は、
POD structure か、 POD union だと規格に書かれていました。(18.1 -5-)

やっぱりC++の規格は、非POD型オブジェクトについて何か想像を絶するメモリレイアウトを受け入れる余地を
意図的に残しているのだろうか?誰か知らないですか?
0463hogeNGNG
if ( au & kddi )
の&ってどういう処理?
0464デフォルトの名無しさんNGNG
byってゆー処理
0465デフォルトの名無しさんNGNG
>>463
ビットAND
0466デフォルトの名無しさんNGNG
C++ 始めたばかりだけど、std::string spaces(10, ' '); って構文はどうなのよ?
C では () が付くと関数というルールがあると思うけど、上のはどう解釈すれば良いのかな?
0467デフォルトの名無しさんNGNG
コンストラクタに引数を渡しているだけでは・・・
0468デフォルトの名無しさんNGNG
コンストラクタとクラス名は違っても良いんだ? なるほど。
コンストラクタが「インスタンス名()」って変なの。
0469hogeNGNG
>>465
ありがと^^

ちなみに sig = (num < 0)
はnumが0未満だったらsigに代入するって事?
0470hogeNGNG
もひとつ^^;
ハイビットセット処理って何?
0471_NGNG
http://homepage.mac.com/hiroyuki44/hankaku10.html
0472デフォルトの名無しさんNGNG
>>468
え??
std::string型のspacesを定義してコンストラクタには(10,' ')を渡すんだと思っていたけど違うの??
0473デフォルトの名無しさんNGNG
>472
下のコードの sharp(10, '#'); の部分ってどう理解したら良いのやら検討が付きません。
sharp は変数名なのに引き数を取っている?

#include <iostream>
#include <string>
int main()

    std::string sharp(10, '#');
    std::cout << sharp << std::endl;
    return 0;
}
0474デフォルトの名無しさんNGNG
編集中に int main() の次の行の { が抜けてしまいました。
0475デフォルトの名無しさんNGNG
>>473
そういう仕様だからしかたないんだよね・・・・
どうしても気になるならstd::string sharp=std::string(10, '#');と書きなよ。
std::string sharp(10, '#'); は上記の省略形。
0476デフォルトの名無しさんNGNG
>>473
コンストラクタはその型のインスタンスが構築される際に働く関数で、
変数の定義時に変数名の右に引数を書いて渡すのは、まぁ、そういう決まりってこと。

ちなみにintとかの組み込み型でも
int hoge(100);
っていう書き方ができるよ。この場合はint型の変数hogeを100で初期化してる。
0477476NGNG
かぶって候
0478デフォルトの名無しさんNGNG
>>475-477
レスありがとうございます。
今まで色々な言語を見てきましたが、難解ですね。ある変数を初期化、代入するのには型、変数名、
初期値があれば良いと言うのは分かりますが、「型 変数名(初期値)」という構文は脳が異次元に
ワープしそうです。
0479デフォルトの名無しさんNGNG
>>478
それのどこが難解なんだよ。本当に色々な言語を見てきたのか?

つーか難解さで言えば関数ポインタ型の変数の方がもっと上だろ。
0480デフォルトの名無しさんNGNG
>>478
 × 型名 変数名(初期値);
 ○ 型名 変数名(コンストラクタへ渡す引数のリスト);
だ。あと、std::string(10, '#') なんかも
 型名(コンストラクタへ渡す引数のリスト)
とそのまんまに解釈すべき文であって
 コンストラクタ関数(コンストラクタへ渡す引数のリスト)
という意味ではないので誤解せん方がよい。

() が関数呼び出し、という固定観念から離れた方がいいと思うが、
まあ、関数と紛らわしいってのはその通りで、
 string s( istream_iterator<char>(cin), istream_iterator<char>() );
と書いて変数定義をしたつもりが関数の宣言とみなされて困ったりはするのだが。
0481デフォルトの名無しさんNGNG
コンストラクタも関数なんだから、()は関数呼び出しという認識でも、つじつまは合う?
0482デフォルトの名無しさんNGNG
関数の戻り値を参照で返すとき、関数内でreturn Class1(arg1, arg2);という
具合に引数つきコンストラクタで初期化したクラスで値を返すとします。
このとき、Class1の実体が保持されているタイミングはどこまでなのでしょうか。
0483デフォルトの名無しさんNGNG
>>482
関数内まで。
というか、エラーも警告もなしにコンパイル通る?
0484デフォルトの名無しさんNGNG
>>483
警告を出してくれないコンパイラも困りものだが、
これでエラーがでたらそれはコンパイラのバグ。
0485デフォルトの名無しさんNGNG
>>484
非 const の場合、g++ だとエラーになったよ。
0486デフォルトの名無しさんNGNG
>>485
確かにこの場合、非 const だとエラーにはなるだろうが、
それは右辺値・左辺値の問題なのでオブジェクトの寿命の問題とはまた別。
0487デフォルトの名無しさんNGNG
今、ファイルへ書き込みするプログラム作ってるんだけど、
複数あるクラスのデータを、基本クラスのtypeプロパティを読み込んで
switchで派生クラスのデータをそれぞれ書いてるんだけど、
なんか、あまり綺麗じゃないんです。
ちなみに、基本クラスから派生しているクラスは5種類くらいあって
中身がそれぞれ違うんで、switchみたいなの使わないといけないんですが
なんか他にいい方法ないですかね?
0488_NGNG
http://homepage.mac.com/hiroyuki44/
0489デフォルトの名無しさんNGNG
>>487
元クラスを弄れないと仮定して、MixJなら楽勝なんだが…Visitorかな?
0490デフォルトの名無しさんNGNG
Siralizableとかいうインターフェースを保存したいクラスに実装してそれぞれでSirializeをオーバーライドしたら?
0491デフォルトの名無しさんNGNG
>>489
とりあえず、Visitorで検索したけど、
これで、いいんですかね?
http://member.nifty.ne.jp/yamazaki/doc/cpp_design_pattern.html#Visitor

>>490
それ、書き込んだ後に思いつきました。
とりあえずやってみます。
0492デフォルトの名無しさんNGNG
>>486
いや、だから寿命の話じゃなくて
エラーがでないってことはないよってことで...。
0493hogeNGNG
malloc()で動的にメモリ領域を確保して

構造体を格納してその後にprintfで内容を出力、
実行するとprintfの所で

Segmentation fault (core dumped)

gdbでデバッグしてみると
#0 0x610ba041 in strlen () from /usr/bin/cygwin1.dll
で落ちている...

strlenで落ちる(しかもprintf)のはどうしてでしょうか?
0494デフォルトの名無しさんNGNG
>>493
訳が分からんが、普通strlen()で落ちるのは'\0'がないからでは?
0495hogeNGNG
>>494

返答ありがとう^^
調べたのですが多分\0がないからと思います。
なぜならcharに数値を代入しているみたいです(こんな事ありえますか?)
0496デフォルトの名無しさんNGNG
ワケワカラン。
一体どんな状況なんだ?
0497hogeNGNG
new->s_pt = new->s_ft + BYTE_LEN;

charで定義されたs_ptに数値が代入されている恐怖の構造体みたいっす
最初は構造体の宣言に沿ってprintfの書式を決定していたのですが...w
0498デフォルトの名無しさんNGNG
char は整数型だから、普通の整数値として扱うこともあるが。
まぁ、その場合は普通 singed か unsigned か付けるけど、
0 〜 127 しか扱わんなら問題になることはまれだと思う。

それにこれは C じゃないのか?
0499hogeNGNG
>>494
ゴメ C言語なら俺に聞け! Part 62 が適当でしたね^^;;

charの謎が解けました^^;ありがと
0500デフォルトの名無しさんNGNG
500
0501デフォルトの名無しさん NGNG
質問です。
下のコードで、メモリは正常に解放されるのでしょうか?

int* np;
np = new int;
void* vp = np;
delete vp;
0502デフォルトの名無しさんNGNG
>>501
そのコードがうまくいったとして、
void*をdeleteすんのはまずいだろ
0503デフォルトの名無しさんNGNG
>>501
メモリは正常に解放されることが多いと思うが、未定義かな。
あと、デストラクタがある場合はデストラクタが呼ばれなくなってしまう。
delete をオーバーライドしてた時も、それが正常に呼ばれなくなってしまう。
ってところか。
まぁ、兎に角そんなことはすんな、と。

何をしたいのか分からんが、
テンプレートを使ったら良さそうなことを
したがってるような気がする。
0504デフォルトの名無しさんNGNG
オーバーロードだった。不覚。
0505デフォルトの名無しさんNGNG
>>593
レスありがとうございます。
動的に確保したいろいろな型のメモリアドレスを
リストかなんかで 持って置いて、あとで全ていっぺんに
解放できるかどうかためしていました。
void*で デストラクタが呼ばれないんじゃ使いもんにならないですね。
0506デフォルトの名無しさんNGNG
待てよ?
POD 型だけなら大丈夫なのか?
デストラクタないし。
規格じゃどうなってる?
0507デフォルトの名無しさんNGNG
>505
素直にスマートポインタを使ったほうがいいかと
0508デフォルトの名無しさんNGNG
X (int i = 0) : m_i(i) { }
これってどういう意味?
0509デフォルトの名無しさんNGNG
アハァ?
0510デフォルトの名無しさんNGNG
ゴメソ全部書かないとわからんわな
struct X
{
X (int i = 0) : m_i(i) { }
int get() const { return m_i; }
int m_i;
};
で、どういう意味?
0511デフォルトの名無しさんNGNG
クラスXのintを引数にとるコンストラクタで、メンバm_iをiで初期化します。
引数を指定しなかった場合iは0になります。
0512デフォルトの名無しさんNGNG
>>511
510じゃないが、そういう意味なのか。わかりにくいな・・・
X (int i = 0){m_i=i } これじゃだめなのか
0513デフォルトの名無しさんNGNG
m_iがクラスだったらどうすんだよ。
0514デフォルトの名無しさんNGNG
>>512
初期化リスト( コロンから { まで )で書かれたものは初期化になるが
コンストラクタの関数ブロック内( { から } まで )に書かれたものは
普通のコードとして処理され、代入文は初期化ではなく代入になる。

int相手なら違いは無いが、メンバ変数がクラスインスタンスならこの違いが
いろいろ問題になることがある
0515512NGNG
あ、なるほど。
intと書いてあったからintでしか考えていなかった。
0516デフォルトの名無しさんNGNG
>>512
あと、m_i が const だとこの構文が必須。
0517デフォルトの名無しさんNGNG
教えてください。
当方、solaris環境でプログラムを作っております。
すると作ったプログラムが、動かすマシンによって動作が異なるのです。
具体的には、Blade100なら問題なく動きますが、Ultra2だとたまーに
Bus Errorにてあぼーんです。
OSはSolaris8ですが、両マシンともリビジョンは同じ。環境も同じ。
違うのはOBPのバージョンくらいでしょうか。
プログラムはマルチスレッドとDBアクセスを実装してます。
なにか、ここが怪しいみたいなことありませんか?
0518デフォルトの名無しさんNGNG
>>517
core拾ってデバッグしなはれ
0519517NGNG
>>518
core吐かないのでしゅ
0520デフォルトの名無しさんNGNG
>なにか、ここが怪しいみたいなことありませんか?
おまいのプログラム
0521デフォルトの名無しさんNGNG
>>519
ulimitみたいなのはないのか?
0522デフォルトの名無しさんNGNG
BusErrorってコア吐かないんだ。へぇー
0523デフォルトの名無しさんNGNG
>>522
意外だろ?w
0524 NGNG
「たまーに」の頻度によるけど、core が得られない場合には strace しとくと
原因究明の手助けになることがありますよ。Solaris だと truss? ってのかな。
0525デフォルトの名無しさんNGNG
ここは最高♪

http://www3.free-city.net/home/akipon/page001.html
0526デフォルトの名無しさんNGNG
>>511
structとして宣言してるのに、クラスとして扱えるんですか?
構造体ってメンバ関数なんて搭載できたっけ?
0527デフォルトの名無しさんNGNG
>>526
classとstructの違いはデフォルトのアクセス指定子だけ。
(class=private, struct=public)
0528デフォルトの名無しさんNGNG
>>527
細かい事言うと、
template<class A> ...
はできるけど
template<struct A> ...
はできないという違いもある。
0529デフォルトの名無しさんNGNG
template<ほげほげ> のほげほげに
class 〜 と typename 〜 両方を使えるようにしたのはどういう意図があるのかな?
教えて偉い人。
0530デフォルトの名無しさんNGNG
最初は class しかなかったけど、
class じゃないものにも class を使うのもなんだってんで
後から typedef を仕様に加えた、ってんだったと思う。

細かい事言うと、
テンプレート引数にクラステンプレートを使う場合には
class しか使えない。

例)
template<template<typename T> class C> ....     // OK!
template<template<typename T> typename C> ...  // Illegal!
0531デフォルトの名無しさんNGNG
typedef じゃなくて typename だって。
0532デフォルトの名無しさんNGNG
> テンプレート引数にクラステンプレートを使う場合には
> class しか使えない。

こっちは、classじゃないものは型テンプレートにできないからそのまんま、
ってことなんだろうなあ。……と思ったけど、もし将来的にtypedefテンプレートが
規格に入ったら、typenameも使えるようになったりするのだろうかね。

template<typename T> typedef T size255array[255];
template<template<class> class> TCls {};
TCls<size255array> ...;
0533デフォルトの名無しさんNGNG
3つほど。

cstdioヘッダはstdio.hをstd名前空間に移したもの。っていう認識でいいんですかね?

標準 C++ ライブラリには、Cの標準ライブラリも含まれるんですか?

それで、C++ソースでcstdioを(っていうかCの関数ライブラリを)利用することは
なんの格好悪さも無い。という認識でいいんですかね?
0534デフォルトの名無しさんNGNG
>なんの格好悪さも無い
とは言えんけど別にいいんじゃないかな。
0535デフォルトの名無しさんNGNG
>>527
字も違うよ!!!
0536デフォルトの名無しさんNGNG
vector <vector <CEnmMissile*> > m_pEnmMissile0;
クラスのメンバとしてこの様に宣言したら、警告がでたんですけど。
何がいけないんでしょうか?
0537デフォルトの名無しさんNGNG
>>536
コレだけの情報じゃ和歌欄
0538536NGNG
警告の内容はこれです。

d:\program files\microsoft visual studio\vc98\include\vector(39) : warning C4786:
'std::vector<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >::vector<std::vector

<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >' :
デバッグ情報で識別子が 255 文字に切り捨てられました。

d:\program files\microsoft visual studio\vc98\include\vector(60) : warning C4786:
'std::vector<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >::~vector<std::vecto

r<CEnmMissile *,std::allocator<CEnmMissile *> >,std::allocator<std::vector<CEnmMissile *,std::allocator<CEnmMissile *> > > >' :
デバッグ情報で識別子が 255 文字に切り捨てられました。
0539デフォルトの名無しさんNGNG
ああいつものやつね
0540デフォルトの名無しさんNGNG
>>536
お前プログラマ向いてないよ。今すぐそのソース消してやめちまえ。
普通warning C4786でドキュメント見るか検索するだろ。
0541536NGNG
>>540
原因がわかりました。ありがとう。
0542デフォルトの名無しさんNGNG
>>533
>なんの格好悪さも無い
格好悪いけどどうしようもない時はある。
(プログラムの終了処理をメッセージ出力しながらデバッグしている時は
std::cout などがもうデストラクトされてて printf 系を使うしかなかったりする)

あくまで補助、あくまで利便と互換性の為。
0543デフォルトの名無しさんNGNG
BorlnadC++5.5で以下のようなコードをコンパイルすると
「push_backに一時変数を使っている」というような警告が出ます。
しかし、これは警告の方がおかしいのではないでしょうか?
仮想関数を持たないクラスなら、こんな警告はでません。
それとも、なんか勘違いしてるでしょうか。どなたかお願いします。

#include <iostream>
#include <vector>
using namespace std;
class Hoge{
public:
virtual void func() const = 0;
};
class SubHoge : public Hoge{
void func() const{};
};
int main(){
vector<Hoge*> v;
v.push_back(new SubHoge());
}
0544デフォルトの名無しさんNGNG
push_back の引数の型は const T& だから、
テンポラリオブジェクトを渡すことは規格では可能
(例えば const int& に 4 とかを渡して構わない)。
この規格がいつ追加されたか分からないけど、
BC++ がこの規格に対応してないってことだけは確かみたいだね。
0545デフォルトの名無しさんNGNG
警告だから対応してはいるだろ
0546デフォルトの名無しさんNGNG
うーん。拡張機能として扱われてるのかな。
BC++ 5.5 は古いからなぁ。
0547デフォルトの名無しさんNGNG
言い訳必死。
0548デフォルトの名無しさんNGNG
一時変数を渡してるからじゃなくて(それはできる)、
暗黙に一時変数が作られてるっていう警告だよ。確か。
0549デフォルトの名無しさんNGNG
>>548
>暗黙に一時変数が作られてるっていう警告だよ。確か。
よくわからんのだが、それは悪いことなの?
0550デフォルトの名無しさんNGNG
>暗黙に一時変数が作られてるっていう
関数の値返しでは普通の方法。
通常bcc32でその警告は非const参照で一時変数を
参照する(標準規格外の利用)時に出るんだが
なぜそのプログラムでも出るのか不明
0551デフォルトの名無しさんNGNG
コンパイラがしっかりしてれば問題ないはず。
これに警告を出すというのがちょいと気になるところではあるけど...
多分対応してくれてると思う。
0552デフォルトの名無しさんNGNG
push_backにnew SubHogeの参照じゃなく、そのコピーの参照を渡してるみたいだナー
cl(VC7)もそう。gcc2.95はコピーを作らなかった。
0553デフォルトの名無しさんNGNG
new SubHogeの結果はポインタだからコピーで問題ないのでは?良く分からんのだけど。
0554デフォルトの名無しさんNGNG
いまさらだけど、>>543のプログラムをbcc32やったら、警告でますた。
不思議でつ。
0555デフォルトの名無しさんNGNG
SubHoge* から Hoge* への変換で一時オブジェクトが発生。
0556デフォルトの名無しさんNGNG
>>555
ビンゴ!
あんたは偉い!

しかし、文法的には、それでも間違いではないよねえ。
なんで警告出すんだろ。
0557デフォルトの名無しさんNGNG
>>552
今、近くに環境がないんだけど、clでやるとうじゃうじゃ警告が出るのに、
IDEでやるとうそのように警告0になるってことない?
俺はSTLがらみでよく経験したような気がするんだが。
0558デフォルトの名無しさんNGNG
>>555>>556
ふーん。そうなんだ。キャストじゃなくてポインタの一時オブジェクトなのか。・・・うーん。
0559デフォルトの名無しさんNGNG
>>556
コンパイラが古いからじゃね?
0560デフォルトの名無しさんNGNG
> これは,参照変数またはパラメータが,ユーザーの期待するものではなく,
> 一時変数を参照していることを意味する警告です。 ←BCBのヘルプ

おまいが渡したと思った変数の参照は、実は渡されて無いぞ!ってことかな。
仮に受け取った関数側でconst外してNULLとか代入しても(そんなことしないだろうけど)、
それはコピーだからコピー元は変更されてないぞと。
0561デフォルトの名無しさんNGNG
コピー元はどうせ単なる値であって変数じゃないから
それで問題ないんだけどね。
0562デフォルトの名無しさんNGNG
小4くらいのとき、マンコが穴だなんて思いもしなかった。
が、年の離れた兄貴のいる加戸は
「ヤッターマンコーヒーライター」
などという言葉を知っているいわば勇者的存在であった。
で、穴があることを知った俺たちだが、どうしてもそれが信じられない。
で、むしろ逆にガキであることを利用して調べようと思った。
ターゲットは音楽の教師である。美人だった。今にして思えば
20歳くらいだったのではないだろうか。短大出てすぐだったように思う。
実行はいたって単純。ガキ特有のカンチョーというあれである。
あれを前に突き刺すというのだ。
ガキなら許されるであろうという勝手な発想だが、
たしかにマンコすら知らない奴がほとんどだったからナイスな判断だったろう。
で、実行は加戸だった。
加戸はなんの躊躇もなくやった。
思い切り。
思い切ってやっちゃいかんだろ、と思った。なぜにおまえはフルパワーなのだ、と。
音楽教師は泣いた。20歳前後という年齢を考えればギャグでもきつい。
ガキからすれば大人だったのだが、今思うと娘だ。
むしろ、処女だった可能性すらある。すまん先生。
が、加戸も泣いていた。
両手人差し指骨折だった。第2関節より下で折れていた。
もろに刺さったんだと感心した。やはり勇者だ。
しかも、救急隊員に、マンコに指が刺さって折れましたと泣きながら事情を説明していた。
あの姿も相当かっこよかった   
0563デフォルトの名無しさんNGNG
変数渡しても一時オブジェクト作られるけどね
0564デフォルトの名無しさんNGNG
仮引数のことけ?
0565デフォルトの名無しさんNGNG
SubHoge* a;
v.push_back(a);
としても、aの参照じゃなくて、aのコピーの参照が渡されるって話。
0566デフォルトの名無しさんNGNG
別にコピーなんて作られんと思うが。
0567デフォルトの名無しさんNGNG
作られてるよ
0568デフォルトの名無しさんNGNG
SubHogeのコピーじゃなくてSubHoge*のコピーな。
0569デフォルトの名無しさんNGNG
まあ、そいういうことが起こってるってのを頭の隅に入れておけばいいんじゃない >>543
0570デフォルトの名無しさんNGNG
あ、やっと分かった。
コピーされるわ。
0571デフォルトの名無しさんNGNG
コピーされるのは当然だが
なぜその警告が出るのかが分からない
0572デフォルトの名無しさんNGNG
>>571
俺も
0573デフォルトの名無しさんNGNG
当然なのか。gccはされないけど。
0574デフォルトの名無しさんNGNG
gccは最適化か知らんが時々変わったことをするからな
rvalueをconst参照する時は一時変数が作られることになっている
0575デフォルトの名無しさんNGNG
言葉のアヤかもしれんが、(だったらすまん)
>>565
>aの参照じゃなくて、aのコピーの参照が渡されるって話。
は、少し変だと思う。
SubHoge*であるaが直接、参照Hoge*&が渡されるか、
Hoge*にキャストされたものが渡されるんだよね。
(正直よくわからんのだが。)
キャストで内部的にコピーを作ることがあるのかもしれないが、
絶対コピーされるということはないんでは?
0576575NGNG
×参照Hoge*&が
○参照Hoge*&に

鬱。
0577デフォルトの名無しさんNGNG
>>575
コンパイラ依存の挙動をここで語るべきではないと。

a = b;
のような代入ですらコンパイラによっては最適化で消滅してしまうのだから何も言えなくなってしまう。
0578デフォルトの名無しさんNGNG
>>574
そうなんだ。ごめん。ちゅうことは、処理系依存じゃなくて規格で決まってるのか。
それじゃ確かに警告はおかしいね。
0579575NGNG
>>577
まあ、つまり、俺も
>コンパイラ依存の挙動をここで語るべきではないと。
と言いたかったんだが。
それで、「コピーされる」は規格にはないのでは?と。
(これは>>578と同じ趣旨かな?)

なんか難しくなりすぎたな。
>>543はどっか逝っちゃったか?
0580543NGNG
543です。みなさんありがとうございます。
でも、びびってちびりそうです。
>>543で書いた「仮想関数を持たないクラスなら」って大嘘でした。
継承関係がある場合、同じ症状がでるようです。すみません。
それと、VC7(コマンドではなく)でやったら、警告は出ないという
話を友人から聞きました。未確認ですが。

もうROMになります。
0581デフォルトの名無しさんNGNG
例外を使わずに、失敗し得るオブジェクトの生成を行う方法にはどんなものがあるでしょうか?
さしあたって、Embedded C++ です。泣けます。
0582デフォルトの名無しさんNGNG
くだらんレスですまんが、
>泣けます。
しみじみ。

ということで、誰か助けてやってくれ。
0583581NGNG
>>582
ありがとう。

Embedded C++ って、破綻してるような気がしてきた。
コンストラクタの失敗を伝える唯一の手段を削っておいて、
代替手段はどうするつもりなんだろう。
0584デフォルトの名無しさんNGNG
class PossiblyFail {
 ...
public:
 static PossiblyFail* Create() {
  PossiblyFail* p = new PossiblyFail;
  if( FAILED == p->Init() ) { delete p; return 0; }
  return p;
 }
};

か、あるいは

class ShippaiSurukamo {
 ...
public:
 ShippaiSurukamo() {
  ...
  m_bSuccessFully_Constructed = 異常なし?true:false;
 }
 operator bool() const {
  return m_bSuccessFully_Constructed;
 }
}

として if( ShippaiSurukamo obj ) { ... } else { /*エラー処理*/ } か、
じゃないか?よくある手としては。
0585デフォルトの名無しさんNGNG
>>580
C++のテンプレはよくは知らんので勘違いだったらすまんが、
引数渡しの方法がどうこうとか、push_back(arg)が引数の更に
コピーを登録しているとかなんて問題じゃなくて、543のコードは
実際不味いだろ。

 v.push_back(new Hoge());

の v.push_back()の引数にオブジェクトそのものじゃなくて、newで
生成したオブジェクトへのポインタを渡しているが、メイン側では
そのポインタをどの変数でも受けてないだろ。

コンパイラはポインタを渡している関数の素性や、その先でちゃ
んとpop、delete しているか迄は関知しないから、プログラム的に
は、参照が残るがどうか分からない行方不明候補のオブジェクト
が生成された事になる。

(要は、 new Hoge(); ってのを単体でやっているのと同じ状態)

だから、「本当にいいんかい、ワレ? テメェ、この関数はちゃんと
先で責任取っているんだろうな?」ってワーニング出しているんだよ。
ワーニング吐く吐かないは、単なるワーニングレベルオプションの
設定の違いかと思われ。
0586デフォルトの名無しさんNGNG
>>585
その理屈だと new Hoge(); と書いたら同じ警告が出ることになるのかね?
0587デフォルトの名無しさんNGNG
>>585
> ポインタをどの変数でも受けてないだろ。
vが受け取ってるだろ
0588デフォルトの名無しさんNGNG
もっともらしくデタラメぶっこくなや
0589デフォルトの名無しさんNGNG
>>585
申し訳ないが、でたらめかと。
0590デフォルトの名無しさんNGNG
>>585
ん?これでたらめじゃない?
0591デフォルトの名無しさんNGNG
>>585
おっとこいつぁでたらめだ。
0592hina ◆IqUyIbTXck NGNG
sprintfのバグ発見してしまいました。
__int64型の数字を%dで二つ入力すると二つ目の数が0になります。
char buf[32];
__int64 iTest1 = 30000, iTest2 = 20000;
sprintf(buf, "%d\t%d\t\n", iTest1, iTest2);

ちなみに環境はVC++.NET
0593hina ◆IqUyIbTXck NGNG
age
0594デフォルトの名無しさんNGNG
>>592
intが4バイトなら当然かと。
一番目の%dでiTest1の4バイト分をintとして表示し、二番目の%dで残りの4バイト分をintとして表示するんだから。
0595デフォルトの名無しさんNGNG
%d指定しといて何言ってんの
sprintf(buf, "%I64d, %I64d", iTest1, iTest2);
0596594NGNG
「表示」はしてないか。
0597hinaNGNG
やはりそうだったんですか。
釣りではないんですが、intの他にdoubleぐらいしか指定できなかったもので・・。
この場合はdoubleを指定すればいいんでしょうか
0598デフォルトの名無しさんNGNG
いるよね、592みたいな奴。
自分でミスっといてコンパイラやライブラリのせいにする奴。
0599デフォルトの名無しさんNGNG
>>597
はぁ?変換指定子のことか?
それなら595が%I64dと書いているだろ。__int64も含め移植性は低いが。
0600hinaNGNG
>>599
あっすみません。
しかし、VSのヘルプにはI64なんて載ってないよ(;´Д`)
0601デフォルトの名無しさんNGNG
>>600
バージョンは?
VS.NETのヘルプには書いてあります。
0602hinaNGNG
printf 関数の型フィールド文字
↑ここみてました
0603デフォルトの名無しさんNGNG
コンパイラのせいにした挙句ヘルプにも載ってないとほざく
0604デフォルトの名無しさんNGNG
* printf 関数と wprintf 関数の書式指定フィールド
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_format_specification_fields_.2d_.printf_and_wprintf_functions.asp?frame=true
0605デフォルトの名無しさんNGNG
C++でクラス(仮にAとします)のstaticメンバの初期化は
Aのグローバルなインスタンスのコンストラクタよりも先に呼ばれることは
保証されているんでしょうか?↓こんな感じです。

class A{
  static int m_val;
public:
  A(){/*m_valを参照するようなコンストラクタ。m_valが初期化されている必要あり。*/}
};

int A::m_val = 0;//スタティックメンバの初期化

A a;//グローバルインスタンス

int main()
{
  //処理
}

一応、上のコードでテストしたらうまくいっているようなのですが、本当にいつでもうまく行くか
よく分かりません。
教えてくださいスゴイ人!
0606デフォルトの名無しさんNGNG
>>543

#define STRICT
#include <windows.h>
#include <vector>

class nurupo : public IUnknown
{
public:
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, void **);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
};

std::vector<IUnknown*> mona;

HRESULT fucktory()
{
mona.push_back(new nurupo);
return S_OK; // ( ´_ゝ`)< ふーん
}
0607デフォルトの名無しさんNGNG
>>605
グローバル変数&関数外のスタティック変数は忘れれ。
仕様としてあるだけでどっちも使い物にならん。
スタティック関数を使ってシングルトンにしな。
0608デフォルトの名無しさんNGNG
シングルトンをマルチスレッド対応するのは
結局どうするのが正しい(安全)んだろ?
0609デフォルトの名無しさんNGNG
アクセスしない
0610デフォルトの名無しさんNGNG
>>608
インスタンス生成でちゃんとロックしとけばええんでないの?
0611581NGNG
>>584
ありがとう。

コンストラクタの失敗に関する問題を中心に話し合った結果、
Embedded C++ しか使えないのであれば、むしろ C のほうがマシという結論に至りました。

ぐぐって見つけた↓のような個人的な見解は的を得ていると思う。
「彼らは『実装するのが難しい』という判断に基づいて勝手な制限を提唱している」
(ttp://gcc.gnu.org/ml/gcc/1998-12/msg00984.htmlより、意訳)

仕様を決めたのは誰だろうと見てみれば、これ、日本の企業が主導してたんだな・・・
0612デフォルトの名無しさんNGNG
CPUクロック周波数と、メモリ搭載量、システムリソースの残量、IPアドレスの取得をしたいのですが、どうすればいいでつか?
0613デフォルトの名無しさんNGNG
>>612
環境に依存するのでココで聞いても無駄
0614デフォルトの名無しさんNGNG
×的を得る
○的を射る
○当を得る
0615デフォルトの名無しさんNGNG
>>611
Embedded C++ とやらがどんなもんかはよー分からんが、
C でできることは C++ でできるんだから
わざわざ C にすることはないんじゃないの?
0616デフォルトの名無しさんNGNG
>>614
> 文例
> この作品に対する彼の批評は的を得たものとはとうてい言いがたい.
> I really must say that his criticism of this work is wide of the mark.
> New College Japanese-English Dictionary, 4th edition (C) Kenkyusha Ltd. 1933,1995,1998

時代の流れです
0617デフォルトの名無しさんNGNG
第4版でそれか...。
0618デフォルトの名無しさんNGNG
>>616
その辞書だけだろ。
0619581NGNG
>>614
あぃ、すんません。
>>615
基本的には、C++のフル仕様から以下のものを削除したものになります。
mutable・例外・実行時型情報・template・namespace・
多重継承・仮想継承・C++スタイルキャスト・
wchat_t・long double・ファイル操作・ロケール

C++プログラムとして相当中途半端なソースにならざるを得ないのです。
特に痛いのは、例外・templateですね。
これが有るのと無いのとでは根本的なソースの書き方が違ってしまいます。

うーん、それでも、たしかにC++のほうがいい場合も十分多くありますねぇ。
0620デフォルトの名無しさんNGNG
>>611
なんだか悲惨そうな話ですね。

組み込み系ってよく知らないんですが、
普通のC++を使うという選択もあるんですか?
>>611を見ただけで、EC++嫌って気がしてきたので。
0621デフォルトの名無しさんNGNG
>>619
C から削られた機能がないなら EC++ でいいんじゃない?
C++ として中途半端だろうが、C より組みにくいってことはないやろ。
参照、inline 関数、クラス、bool 。
これがあれば EC++ にも十分アドバンテージあるんじゃない?

例外は昔ながらの goto + bool でいい。
どうしようもなく面倒になる場合は exit してしまったんでいいし。
template はマクロを駆使するか、使わないでなんとかするか、
どうしようもない場合は自前でソースをコンバートするか。

昔は「template は将来のために予約されています」とかヘルプに書いてあったもんじゃー。
Turbo C++ 1.0 ...懐かしい。
0622605NGNG
>>607-610 サンクス

とりあえず、グローバル変数はやめにして実装し直すことにします。
0623デフォルトの名無しさんNGNG
弓道をイメージすれば、「的を得る」のおかしさは自明。
0624デフォルトの名無しさんNGNG
あんた、よくクドイって言われるだろ。
0625デフォルトの名無しさんNGNG
>>624
涙目ですね。
でもそれだけ悔しい思いをすればもう間違いませんよね?
0626デフォルトの名無しさんNGNG
え?弓道って優勝者への景品として的が持ち帰れるのとちごたん?
0627デフォルトの名無しさんNGNG
このスレはいつから会社でウザがられてるウンチクおやじの
ストレス発散場になりましたか?
0628デフォルトの名無しさんNGNG
一般常識レベルの日本語能力もないんじゃなあ。
「的を射る」は就職試験とかでも頻出してるのに。
0629デフォルトの名無しさんNGNG
みなさんC++の基礎を覚えるのにどれくらいかかりました?
SDKやMFCじゃなくて初心者本で良くあるdos窓のプログラムです。
0630デフォルトの名無しさんNGNG
operatorから仮想関数が呼べるようになるまで3ヶ月だったかな...
TCPLの初版で。
0631デフォルトの名無しさんNGNG
>>623-628
オマエラこのスレ的にゼンゼン的を得ない発言だな
言葉として知っていても意味を知らない馬鹿ドモハケーン

>>629
基礎がいったいドコまでを指すのかわかんね

0632デフォルトの名無しさんNGNG
exportが実装できるぐらいまでが基礎とか(無茶)
0633デフォルトの名無しさんNGNG
的を得るはあるよ。意味は「射る」とは別だけどね。
0634デフォルトの名無しさんNGNG
get a target
0635デフォルトの名無しさんNGNG
肉壷げっちゅ〜
0636デフォルトの名無しさんNGNG
バグを得る
0637デフォルトの名無しさんNGNG
的を得るは的を射るや当を得るの間違いから生まれたという説が多いが、俺はそうは思わない。
というのも、的を得るからは的を射るとは異なったニュアンスを受けるからだ。
的を射るは要点をずばり突いているという感じだが、的を得るは要点を正しく把握したうえで発言しているという印象を受ける。
つまり誤用ではなく、異なった意味を持つ造語だ。
この場合の「得る」は要領を得るの「得る」と共通するものがあると思う。
0638デフォルトの名無しさんNGNG
必死だな
0639デフォルトの名無しさんNGNG
「的を得る」は弓道から派生してきてないよ。
「景品をならべておき、それを鉄砲で撃ち、当たったら景品をお持ち帰り」
の、テキ屋からきている。
 この、「鉄砲のタマを当てようとする景品」は「的」に他ならず、
「景品にタマが当たったら、お持ち帰り」なのだから、それは
「的を得る」と表すより他にない。
 意味としては、「UFOキャッチャーで品物を巧くGetできて
うれしいね」という状態を表す。
0640デフォルトの名無しさんNGNG
>>639
的を射ると同じ意味で使ってるのはおかしいと言ってるんだYO!!
つーかそろそろスレ違いだからやめようぜ。言葉は進化する厨が出てくるし。
0641デフォルトの名無しさんNGNG
>>639
UFOキャッチャーに的は有りません。
0642デフォルトの名無しさんNGNG
>640
同じ意味で使っているとどうして分かる?
>641
あるわけねーだろが。比喩なんだからよ。
0643デフォルトの名無しさんNGNG
>>641
ならラッキーショットだ。
0644デフォルトの名無しさんNGNG
>>640
>つーかそろそろスレ違いだからやめようぜ。言葉は進化する厨が出てくるし。

そろそろじゃねーよ馬鹿、てめー自分が再燃さしといて何抜かしてやがる、死ねキチガイ
0645640NGNG
>>644
正直すまんかった。

んじゃやめよう(´・ω・`)ションボリック
0646デフォルトの名無しさんNGNG
頭が悪い奴はすぐキレる
0647デフォルトの名無しさんNGNG
おまいらC++の話してくださいよ
0648581NGNG
>>621
たしかに言語機能の面だけで比較すればC++に移行するほうがいいです。
でも、現在の環境に特有のデメリット・導入コスト(ここらへんは詳しく説明するつもりはありません)
をあわせて天秤にかけた結果、Cのままでいくことになったわけです。

そして、みなさま、ごめんなさいでした。
0649デフォルトの名無しさんNGNG
ぶっちゃけtemplateがなかったらC++は廃れてた気がするよ。
0650デフォルトの名無しさんNGNG
>>648
まぁ、そういうことならしゃーないわな。
0651デフォルトの名無しさんNGNG
>>649
同意。もしtemplateが無かったら俺はC++を支持してない。
JavaやC#の方を支持してるだろうな。

ただ、Cよりかは遥かにマシ。
0652デフォルトの名無しさんNGNG
C++ と Java/C# は
ネイティブコンパイラがメインか否かという大きな違いがあるので、
一概に比べることはできんと思うが、
純粋な言語仕様的にというなら分かる気もする。
C# は魅力的なところも多いけど、
template(generic)が無かったのには落胆した。
generic を追加するという話は聞いたことあるけど、どうなることやら...。
0653スカトロ初心者NGNG
C++について最近勉強を始めたごくごく初心者です。
今ひとつポインタについて理解することができません。
そこで、動的オブジェクトの割り当てとその開放について質問させてください。

int *t;
t = new int;*t=1;
t = new int;*t=2;
t = new int;*t=3;

上記のようにして動的オブジェクトを3回割り当てた場合、
ポインタtは一番最後のアドレス(値3が格納されたメモリ)のみ記憶しています。
この状態で、
質問1:
値1や値2の格納されたメモリエリアに簡単にアクセスする方法はありますか?
(言い換えれば、値1や値2のポインタを取得する方法はありますか?)
質問2:
delete t;では値3の格納されたエリアしか開放できません。
値1や値2の格納されたメモリを開放する簡単な方法はありますか?
質問3:
ポインタを使ったポピュラーなデータ構造として「リンクリスト」がありますが、
このデータ構造は上記のプログラムと本質的に同じ部分があると思われます。
つまり、リストの各要素を格納しているメモリエリアに固有の識別名が与えられていません。
(例えば、配列なら、a[0],a[1],a[2]・・・のように、それぞれのメモリエリアの識別ができます)
リストのn番目の要素のポインタや値を簡単に取得する方法はありますか?
また、リスト全体を簡単にdeleteする方法はありますか?

これらの質問の真意は、
確保したメモリについてプログラマはどこまで責任を持たなければならないのか?ということです。
質問2が不可能だとすると、このようなプログラムは「書いても文法上エラーにはならない」が、
やがてはメモリ不足でエラーを起こす「書いてはいけない」プログラムだということになりますよね?
よろしくお願いします。m(__)m
0654デフォルトの名無しさんNGNG
>>653
メモリリークという言葉を知っている?
0655デフォルトの名無しさんNGNG
回答1:ない
回答2:ない
回答3:ない
0656デフォルトの名無しさんNGNG
>>653
std::vectorを使いなさい
0657スカトロ初心者NGNG
>>654
えぇ、意味は知っています。
要するに、これはメモリリークを起こすプログラム例だということですね?
こういうプログラムは書いちゃいけない、と。

>>655
ひゃっほう。
ってことは、リンクリストを削除する場合、
ここの要素をひとつずつたどりながらdeleteしていくしかないわけですか・・・かっふん。
0658スカトロ初心者NGNG
>>656
現在はまだ初心者なのでその言葉の意味がわかりませんが、
頭の隅にとどめておきます。ありがとうございました。m(__)m
0659デフォルトの名無しさんNGNG
>>653
名前が...まぁいいけど。

回答1:
ない。1 や 2 の格納されたアドレスを保持していた変数 t は
新しいアドレスで書き換えられてしまったので、
1 や 2 の格納されたアドレスにアクセスする手段は失われてしまった。
アクセスしたいなら、そのアドレスを保持するポインタ変数を作るべし。

回答2:
ない。従って、1 や 2 の格納されたメモリエリアはプログラム終了まで永遠に開放されない。
これをメモリリークといって、厄介なバグのうちの1つである。
少量なら気づかないが、ずっとプログラムを実行しておくと溜まり溜まって
メモリを圧迫してしまうなんてこともある。
バグがあることに気づきにくいってところが厄介なわけね。

回答3:
n 番目の要素を得るには、順番に n 回辿っていかなくてはならない。
リスト全体を delete するには、普通に巡回して delete していけばいい。

回答4:(最後の話に対して)
プログラマはきちんとメモリを管理しなくてはならない。
それが面倒な場合、スマートポインタというのを使うことができる。
標準では auto_ptr 、別のライブラリには boost::shared_ptr とかある。
これでも使用法に注意する必要があって、
完全に気にしなくて良いという状態にはならない。
0660デフォルトの名無しさんNGNG
一般的な双方向リンクリストならstd::listを使え。
0661デフォルトの名無しさんNGNG
C++はCほどじゃないがメモリに関する注意(リークだbッじゃなく)は怠るなってことだな。
0662デフォルトの名無しさんNGNG
回答2は、「ある」だよ。ガベコレ使えばいいんでないか。
簡単かどうかは、ま、何ともいえないけどサ、、
0663スカトロ初心者NGNG
>>659
詳細にありがとうございます。

BASICから入ったせいでしょうか、
そもそも値の保持されている領域になんの名前もついていないことが
今ひとつしっくりこなくて・・・。
回答4に関してはまだ理解できませんが、覚えておきます。
深夜にどうもありがとうございました。

>>660
はい、これも記憶しておきます。
ありがとうございました。
0664デフォルトの名無しさんNGNG
>>662
よく見ろ。
> この状態で、
0665デフォルトの名無しさんNGNG
std::vector    動的配列
std::list      双方向リスト
std::deque    .双方向キュー。配列とリストを融合したようなもの(要素の追加が楽な配列のようなもの)
std::queue    キュー(std::priority_queue というのもある)
std::stack    .スタック
std::set      高速探索可能なコンテナ(std::multiset というのもある)
std::map     .連想配列(std::multimap というのもある)
std::hash_set  ハッシュ表+set
std::hash_map .ハッシュ表+map
0666デフォルトの名無しさんNGNG
ガベコレはふつー、newを乗っ取る。
0667デフォルトの名無しさんNGNG
>>666
よく見ろ。
> 簡単な方法
0668デフォルトの名無しさんNGNG
>>649
うむ
0669デフォルトの名無しさんNGNG
こんなコードを見ました。
enum col{red, black, white};
int a[3];
a[red] = 0;
a[black] = 0;
a[while] = 0;
これはまちがってないのでしょうか。
それならどういう意味なのでしょうか。
0670デフォルトの名無しさんNGNG
a[0] = 0;
a[1] = 0;
a[2] = 0;
0671デフォルトの名無しさんNGNG
>>670
教科書でenumの定義を見ました。
確かにそんな感じですが、ほんとうにいいんでしょうか?
なんかenumと整数は違うとも書いてあるんです。
0672デフォルトの名無しさんNGNG
心配なら
enum col{red=0, black=1, white=2};
とすればいい
0673デフォルトの名無しさんNGNG
>>671
enum の普通の使い方だけど。

enum col{ red, black, white, col_size };
int a[col_size];
a[red] = 0;
a[black] = 0;
a[white] = 0;

のように、サイズを enum で定義するテクニックもある。
まぁ、列挙子としては不正な値を1つ増やしてしまうというデメリットもあるけど。
0674669 == 671NGNG
>>670 >>672 >>673
なんとなく、なっとくいきました。
ありがとうございます。
0675デフォルトの名無しさんNGNG
>>674
その調子でガンガレ。
0676デフォルトの名無しさんNGNG
いつもこうしちゃう、小心なオレ
enum col{red=0, black, white};
0677デフォルトの名無しさんNGNG
>>676
兄貴と呼ばせてください。
0678デフォルトの名無しさんNGNG
>>653
struct IntList{
  int i;
  IntList * prev;
  IntList * next;
};
IntList * pstart=new IntList;
pstart->i=0;
pstart->next=NULL
pstart->prev=NULL;
pstart->next=new IntList;
pstart->next->prev=pstart;
pstart->next->next=NULL;
pstart->i=1;
pstart->next->next=new IntList;
pstart->next->next->prev=pstart->next;
pstart->next->next->next=NULL;
pstart->next->next->i=2;
for(IntList p=pstart;p!=NULL;p=p->next){
  std::cout << p->i << std::endl;
}{
  IntList p;
  for(p=pstart;p!=NULL;p=p->next){
    delete p->prev;
  }
  delete p;
}
手抜きだがこんな感じでポインタ使わないと簡単には実現できないようなものを作ってみるとポインタの理解が深まるかもね
使うだけならstd::listを使うけど
追記:bad_allocとかの例外を考えると素直にスマートポインター使いましょう。
0679デフォルトの名無しさんNGNG
配列を関数に渡すだけでポインタ使うんだけどね。
0680デフォルトの名無しさんNGNG
参照で渡せる
0681デフォルトの名無しさんNGNG
>>680
固定長か vector ならね...。
0682デフォルトの名無しさんNGNG
可変長の配列などC++にはない。
0683デフォルトの名無しさんNGNG
>>682
渡せる配列のサイズが固定という意味で言ったのだが...。
0684デフォルトの名無しさんNGNG
可変固定とは別に静的に対する動的な配列はnew構文の中だけに
存在するが、配列長が実行時に決まる場合、可変な型が存在しない以上
これをポインタ以外で受け取る方法はない。
結局、サイズが固定でない配列はない。
0685デフォルトの名無しさんNGNG
new int[10]はint(&)[10]を返して、参照(又はポインタ先)に
限って動的型を許すのは出来ないのかね。
int (&a)[n]=new int[n];//動的配列への参照
int *a=new int[n];//標準変換によって合法
それで配列でないnewも参照を返す方がエレガントだ。
int &i=new int;
int *p=&new int;
0686デフォルトの名無しさんNGNG
見た目は綺麗だけど、多分不便。
0687デフォルトの名無しさんNGNG
>>681
#include <iostream>
template <int size>
void func(int (&buf)[size]){
    for(int i=0;i<size;i++){
        std::cout << buf[i] << std::endl;
    }
}
int main(){
    int buf[]={0,1,2,3,4,5,6,7,8,9};
    func(buf);
    return 0;
}
templateスレだと既出っぽ
0688デフォルトの名無しさんNGNG
まあ、同じことだが、

void func (int buf, int size) {
for (int i = 0; i < size; ++i) {
std::cout << buf[i] << std::endl;
}
}

template <int size>
void func(int (&buf)[size]){
func(buf, size);
}
0689デフォルトの名無しさんNGNG
>>688
どうせなら template のほうには inline の指定をしとけ。
0690デフォルトの名無しさんNGNG
stringをincludeしていないのにstrlenが使えるんですがなぜなんでしょうか?
やさしいC++という本にはインクルードしなければいけないと書いてありました。
環境はVC.NET2003です。
0691デフォルトの名無しさんNGNG
>>690
Cとしてコンパイルしているだろう?
0692デフォルトの名無しさんNGNG
>>689
そういう話をしているんじゃないだろ。
0693デフォルトの名無しさんNGNG
>>692
だから「どうせなら」からレスが始まってるんだろ。
0694690NGNG
ソースファイルの拡張子はcppなのでC++だとおもいますが、、
Cとしてコンパイルとはどういうことでしょうか?
0695デフォルトの名無しさんNGNG
>>693
>>688等はinlineぐらい知ってるだろ。
今回の話に関係ないから敢えて言及していないんだろうが。
それを何が偉そうに「しとけ」だ。
ようやく自分の知識が生かせると思って意気揚揚とレスしたのか。おめでてーな。
0696デフォルトの名無しさんNGNG
>>694
C++としてコンパイルしてても、別のヘッダ経由で間接的にインクルードしてるかも
0697デフォルトの名無しさんNGNG
>>690
cstringかstring.hをインクルードしているから
0698デフォルトの名無しさんNGNG
>>695
なにこの人キレてんの?
0699690=694NGNG
プロジェクトのフォルダの中にはcppファイルが一つと
空のコンソロールプロジェクトを作成した時に自動で作られたファイルだけです。
*.hのファイルはありません。
インクルードしているのはiostreamだけです。
#include <iostream>
using namespace std;
でこの後にmain()関数を書いています。
0700デフォルトの名無しさんNGNG
C++で\nとendlはどう使い分けるんですか?
0701デフォルトの名無しさんNGNG
>>700
endl は改行+フラッシュ。
0702デフォルトの名無しさんNGNG
>>699
じゃあiostreamが中でインクルードしてるんだろ
0703デフォルトの名無しさんNGNG
コンストラクターで変数(char* name )を(Null、1Byte)初期化したい。
この場合
A::A()
:name( 0 )
{

}
で良いのでしょうか?

0704デフォルトの名無しさんNGNG
>>703
1byteってのが謎だ
0705デフォルトの名無しさんNGNG
>コンストラクターで変数(char* name )を(Null、1Byte)初期化したい
失礼しましたNullをセットするときになんとなく
口癖でNULL1Byte(=(Null、1Byte))と言ってしまうので。
0706デフォルトの名無しさんNGNG
>>705
やっぱり意味わからんが。
NULLポインタは1バイトということはないはずだが。
null文字1バイトを指すポインタということなら 0 ではなく "" と書かねばいかんが
まさかそういう話?
0707デフォルトの名無しさんNGNG
このスレは703の口癖NULL1Byte(=(Null、1Byte))をはやらすスレに
なりますた。

一応突っ込んどくが…
ポインタは1バイトじゃないぞ。
ついでに1バイトのNULLは '\x00'。
0708デフォルトの名無しさんNGNG
>>707
NULLと大文字で書いた場合はポインタ。
'\0'はヌル文字であって、ポインタではないわけだが
0709デフォルトの名無しさんNGNG
>>708
707の言うNULL(ラテン語)と708の言うNULL(識別子)がかみ合ってないだけと思う。
0710デフォルトの名無しさんNGNG
>>708はCプログラマ。プ
0711デフォルトの名無しさんNGNG
>>708
NULLも\0も0だろ
0712( ● ´ ー ` ● )NGNG
707必(ry
0713デフォルトの名無しさんNGNG
> ポインタは1バイトじゃないぞ。

そうなの?
0714デフォルトの名無しさんNGNG
>>713はJava厨もしくはDel厨、C#厨による
スレが荒れることを狙ったネタレスです。放置してください。
0715デフォルトの名無しさんNGNG
クラスのメンバ変数をコンストラクタで初期化する方法で質問です。

例えば

Hoge::Hoge(int a, int b)
{
aa = a;
bb = b;
}

これを、

Hoge::Hoge(int a, int b)
:aa(a), bb(b)
{}

この様に書けると聞いたんですけど、

Hoge::Hoge(int a, int b)
{
rect.ra = a;
rect.rb = b;
}

この様に構造体を初期化したいときはどうすれば良いんでしょうか?
0716デフォルトの名無しさんNGNG
Hoge::Hoge(int a, int b) : rect(a, b) {}
0717715NGNG
>>716
レスありがとうございます。

そのやり方でやってみたんですけど、(構造体のメンバの数が4個なので、引数を4個渡しました)
こんなエラーがでてしまいました。

error C2661: 'tagRECT::tagRECT' : 4 個の引数を持つオーバーロードされた関数はありません。

何でだろう?
0718デフォルトの名無しさんNGNG
NULL(ポインタ)とNUL('\0')は区別しよう。
0719デフォルトの名無しさんNGNG
>>718
脳内語を他人に強制するなよ
0720デフォルトの名無しさんNGNG
>>717
tagRECT構造体に4 個の引数を持つオーバーロードされたコンストラクタがないからだろ。
もしVC++でRECT構造体使ってるならCRectクラスに変更すれ。
0721デフォルトの名無しさんNGNG
>719
NUL SOH STX ETX EOT ENQ ACK BEL BS HT NL VT FF CR SO SI
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

NULは使わなくてもBS,CR,LF,ESCなら使ったことあるだろ。
0722デフォルトの名無しさんNGNG
NULはNULLの略語じゃん
0723デフォルトの名無しさんNGNG
用語辞典にも載っている用例を脳内といわれても、困るんだが、、
http://www.atmarkit.co.jp/icd/root/67/130299067.html
>また、文字コード場合はNULと表記される
0724デフォルトの名無しさんNGNG
MSDNは'\0'のことを普通にNULLと呼んでるぞ
まったく不毛だからその辺でやめとけ
0725715NGNG
>>720
解りましたありがとうございました。
0726デフォルトの名無しさんNGNG
だめぢゃん。MSDN
0727デフォルトの名無しさんNGNG
NUL is a null character っていうのならOKだけど。
小文字のnullは一般名詞。
0728デフォルトの名無しさんNGNG
>724
普通に NULL と呼んでいないと思うぞ。
terminating null character というときの null は NULL じゃない。
0729デフォルトの名無しさんNGNG
>>724
よくみろ。NULLじゃなくてNULL文字だ。
0730デフォルトの名無しさんNGNG
さすがじゃん。MSDN
0731デフォルトの名無しさんNGNG
>>714
いやまじで聞いているんだが。
1バイトなんて環境は滅多にないだろうが、規格でもそう決まっているのかと。
0732デフォルトの名無しさんNGNG
>>714は知ったかぶりをしたアフォです。放置してください。
0733デフォルトの名無しさんNGNG
NULLポインタはポインタだ。
NULL文字は文字だ。

さてなぜNULLはポインタであると断言できよう。
0734デフォルトの名無しさんNGNG
>>733
ガッ
0735デフォルトの名無しさんNGNG
NULLという定数は整数
NULLポインタはポインタ(当たり前だが)
0736デフォルトの名無しさんNGNG
Cでは、
#define NULL (void*)0
だったから、Cの文脈では明らかにポインタだった。
C++では
#define NULL 0
となったが、
char *p = (void*)0;
がエラーになるから (void*)0 を 0 にしただけで、
気持ちの上ではCのNULLとなんら変わるところはない。

CのNULLがポインタである以上C++のNULLもポインタである。
0737デフォルトの名無しさんNGNG
>>687
固定長の関数を関数テンプレートでいくつも作ってるだけじゃん。
inline ならともかく、inline じゃなかったら無駄に関数が大量に作られる可能性があるぜ。

>>695
ということを言いたいんだと思われ。
0738デフォルトの名無しさんNGNG
>>736はCプログラマ。プ
0739デフォルトの名無しさんNGNG
for(int i=NULL;i<10;i++)
0740デフォルトの名無しさんNGNG
>>738
ウワァァァン
0741デフォルトの名無しさんNGNG
void foo(char*);
void foo(int);
void foo(char);

foo(NULL);

NULLはint
0742デフォルトの名無しさんNGNG
>>731
JIS X3010 5.2.4.2.1
および
JIS X3010 6.3.4
を参照されたし

規格票を所有すべきであると進言する
0743デフォルトの名無しさんNGNG
NULLは単にマクロを意味する大文字なだけで、元のnullはゼロという意味で、C++ではNULLが0なのだから。

str[end] = NULL;
とするのも、意味論的に間違いではないと思う。

俺はしないけどさ。


ってゆーか
>>741それ悲惨すぎるw
0744742NGNG
ISO/IEC14882
だった

逝ってきます
0745デフォルトの名無しさんNGNG
>>742
JISか。CみたいにPDFを落とせるかもしれないから探してみよう。
0746745NGNG
JISの3010ってCじゃん ウワァァァン
0747デフォルトの名無しさんNGNG
なんだこのぬるぬるしたスレは!
0748デフォルトの名無しさんNGNG
>>747
ガッ
0749デフォルトの名無しさんNGNG
>>747>>747>>747
ガッガッガッ
0750714NGNG
案の定荒れますた。
0751山崎 渉NGNG
(^^)
0752デフォルトの名無しさんNGNG
C++の演算子や関数、クラスなどがまとめられているような本はないでしょうか?
ヘルプから探すの苦手なんです(ノД`)
0753デフォルトの名無しさんNGNG
>>752
C++第3版
0754デフォルトの名無しさんNGNG
マジレス
>>753に同意

ど初心者でなくなったら所有しろ
真面目に読むかどうかは別だが
辞書としてイチオシ
0755デフォルトの名無しさんNGNG
ヘルプから探すの苦手って時点で終わってる気がするんだが。
0756デフォルトの名無しさんNGNG
C++第3版はあまりおすすめしないが。
索引がおかしいせいで、調べたい情報がなかなか出てこない。
0757デフォルトの名無しさんNGNG
ふぁふぁふぁふぁ
0758デフォルトの名無しさんNGNG
そらよ。本物か知らんが
ce.sharif.edu/~bateni/download/else/cpp3rd.zip
0759デフォルトの名無しさんNGNG
定義したクラスってメモリ(仮想)上のどこに配置されますか?
やっぱりコード(テキスト)領域?
0760デフォルトの名無しさんNGNG
>>759
クラス自体にはこれといった場所は無い。
コードはコード領域だし、インスタンスはそれぞれのために割り当てたメモリだし・・
クラス固有なのはtypeinfo, vTableぐらい? これは定数領域かも。
0761デフォルトの名無しさんNGNG
vテーブルは、ふつうインスタンスメンバと同じとこだけどな。
0762デフォルトの名無しさんNGNG
クラスの各メンバが一箇所にまとまってるんじゃなくて
データメンバならデータ(定数)領域
メンバ関数なら実行コード領域という感じですか?
0763デフォルトの名無しさんNGNG
メモリレイアウトは環境依存でどうにでもなるんじゃないの?
0764デフォルトの名無しさんNGNG
浦東戸新鳩南川赤志王王西駒本東後飯市四永溜六麻白高五戸荏旗長洗石雪御久千池蒲京糀大穴天羽羽
和川塚井が鳩口羽_子_が_駒大楽田がつ田池本布金輪反越原の_足川谷嶽が鳥__浜_鳥守空田田
美口安宿谷が元岩_神_原_込前園橋谷谷町山木十高台田銀中台_池台大山原町__蒲_居稲橋空西
園_行__谷郷淵茂谷子_込_______王一番輪__座延_原__塚___上田田谷_荷_港タミ


●――――――●――――――――●●●●●――――●―――――――――――●―――――●●空特
●――――――●――――●―――●――●―――――●――●――――――――●―――――●●特快
●●――●――●――●―●――●●●●●●●―●―●――●―――●――――●●―――●●●快速
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●各停

←――――――→←――――――――――――――→←→←――――――――――→・←――――→
.     ↑                 ↑           ↑         ↑        ↑    ↑    
.     埼                 営           営         東        京    京    
.     玉                 団           団         急        急    急    
.     高                 南           池         池        蒲    空    
.     速                 北           上         上        田    港    
.     線                 線           線         線        線    線    
0765デフォルトの名無しさんNGNG
【徹底的】プログラマーが語るviとemacs 4【バトル】
http://pc.2ch.net/test/read.cgi/prog/1059814696/
0766デフォルトの名無しさんNGNG
仮想関数テーブルはインスタンスの先頭ってきまってなかったっけ?
0767デフォルトの名無しさんNGNG
>>752
母数が大きいと756のようなアンチの数も比例するが
TCPL3は辞書としての使い勝手は悪くない
現に漏れがそういう使い方をしている

別な話バイブルや規格票は良し悪しに関係なく用意すべき
TCPLが\7Kくらい、ISO/IEC14882は\30Kくらいするが
完全に遊びならともかく「ちゃんと」取り組むなら
やむを得ない出費と割り切るべし
0768752NGNG
C++第3版は検索ですぐ見つかりましたがISO/IEC14882
とは本の名前でしょうか?検索しても書籍名として出てきませんでした。

0769デフォルトの名無しさんNGNG
stringをインクルードして文字を代入するのと配列に代入するのはどうちがいますか?
使い分けあるんですか?
0770デフォルトの名無しさんNGNG
>>768
http://www.jsa.or.jp
0771デフォルトの名無しさんNGNG
そらよ。本物か知らんが
www.rgai.hu/~beszedes/munka/ISO+IEC+14882-1998.pdf
0772デフォルトの名無しさんNGNG
つーか>>3くらい読めよ
0773デフォルトの名無しさんNGNG
class storage
{
  T a[N];
public:
  T* get(); // a の中のある要素を指すポインタを返す
  bool contains( T const* p ) const; // p が a の中の要素を指しているかどうか判定
};
bool storage::contains( T const* p ) const
{
  return ( p != 0 ) && ( &a[0] <= p ) && ( p <= &a[N] );
}

↑この storage::contains のような判定は有効ですか?
「同じ配列内のポインタ以外の比較は無効」という話を見かけたので心配になりました。
0774773NGNG
あぁ・・・。
修正です。
bool storage::contains( T const* p ) const
{
  return ( p != 0 ) && ( &a[0] <= p ) && ( p < &a[N] );
}
0775デフォルトの名無しさんNGNG
多分動くだろうが、規格では
細かいことは色々あるがポインタの比較で==,!=以外は
(同じ配列であっても)不定と思っていいようだ。
同じ配列である時に限ってマイナス演算子は
期待通り働くがそうでなければ未定義だから使わないほうがいい
かも知れない。
だからそれは標準C++で組みたければ一つ一つ==で
比較するということになるだろう
0776773NGNG
では、こんな感じ、ということですね。

bool storage::contains( T const* p ) const
{
#if defined( USING_RELATIONAL_OPERATORS_OF_POINTERS )
  return ( p != 0 ) && ( &a[0] <= p ) && ( p < &a[N] );
#else
  if( p != 0 )
    for( T const* q = &a[0] ; q != &a[N] ; ++q )
      if( p == q )
        return true;
  return false;
#endif
}

あと、5.9 -2- を読む限り、同じ配列内の要素ならちゃんと定義されてるっぽいですよ。
0777デフォルトの名無しさんNGNG
>>773
<= とか < でなく、std::less と std::less_equal を使えば
任意のポインタについて比較ができることが保証されてる。(20.3.3.8)

ただ
 std::less_equal()(&a[0],p) && std::less()(p,&a[N]);
は、pが配列内を指すならtrueなのは確かだが、外の時必ず
falseになる、と定められているかどうかはわからん。。。
0778773NGNG
>>777
おぉ、有益な情報をどうもありがとう。
しかし、ほんとに微妙ですね。

boost::pool::is_from に同様のコードを発見しました。
が、結局は、単純な結果を返すことはできないようで、戻り値の仕様は微妙です。
0779773NGNG
ん?ということは、同様のことをCでやろうとすると、
全要素比較以外の方法は標準では不定ってことですかね?
0780デフォルトの名無しさんNGNG
そういう場合はポインタを整数になおせばいい
p - a
0781デフォルトの名無しさんNGNG
if ((unsigned)(p - a) < N) return trure;
0782デフォルトの名無しさんNGNG
なんか改行で送信される・・IMEが変になった
0783デフォルトの名無しさんNGNG
で、普通に書くと
return (p && (unsigned)(p - a) < N);
どの環境でも問題なさそうなのは
return (p && (unsigned)((char*)p - (char*)a) < N*sizeof(T));
0784773NGNG
>>780-783
その'-'演算子が問題なわけですよ。
ttp://www-ccs.ucsd.edu/c/express.html#Subtract
0785デフォルトの名無しさんNGNG
アーキテクチャ上、問題は起こらないと思うけど。
0786デフォルトの名無しさんNGNG
>std::less と std::less_equal を使えば
>任意のポインタについて比較ができることが保証されてる。(20.3.3.8)

マジで?またヘンチクリンな事しよって…
勘弁してくれ
0787デフォルトの名無しさんNGNG
>>766
vTableへのポインタならインスタンス中だが、先頭かどうかはわからん。
多重継承のときには複数並ぶしな。
vTable自体はインスタンスとは別に同一のクラスのすべてのインスタンスから
共有されるようにどっか別のところに配置されるだろ。
0788デフォルトの名無しさんNGNG
おまえら完全に誤解してる様だが、
C/C++では「移植性のある」コードを書けると期待してはいけない。
今回のケースがまさにそうだ。潔癖症な奴はこの場合、
#define is_array_ptr(〜)
でも定義しておき、環境毎に適切な処理に置き換える。
この置き換えが効く事が、「移植性が良い」といわれる所以。
>>776みたいなコードを見ると泣けてくる・・・
0789初心者NGNG
CかC++の入門書より少し難しいソースコードが記載されているサイトを知りませんか?
0790デフォルトの名無しさんNGNG
Cはコンパイラの仕様を熟知していないと(他の環境のソースを)
正しくビルドできないことが多々あるから泣けてくる。
>>776の試みには賛同する
0791デフォルトの名無しさんNGNG
>>789 >>7
0792デフォルトの名無しさんNGNG
>>788
> おまえら完全に誤解してる様だが、
> C/C++では「移植性のある」コードを書けると期待してはいけない。
いやここまでのところ、誰もそんなことは期待してないと思うぞ。
どの部分が「移植性があっ」て、どの部分が環境毎に
書かねばならんのか、切り分けようとしているだけで。

>>786
set<T*> やら map<T*,U> を作れるように…って苦肉の策だろうね。
0793デフォルトの名無しさんNGNG
おまえらの場当たり的なコードを見ると泣けてくる。
実際、誰かは気を付けても、他の誰かは守らない。
延々これの繰り返しだ。
ということだよ。>>792
絶望するか、鈍感になるか、潔癖になるか、業界から去るか・・
0794777NGNG
自己レス。
> は、pが配列内を指すならtrueなのは確かだが、外の時必ず
> falseになる、と定められているかどうかはわからん。。。

よく考えたら配列は contiguously allocated なので (3.3.4/1)、
&a[0] と &a[N] の間に配列の要素でないものを指すアドレスは
存在しない。ゆえに boost::pool::is_from の方法でOk、だ。
0795デフォルトの名無しさんNGNG
ふむ。
std::less の定義が std::set< T* > を有効にするためのものだとすれば、

#include <functional>
bool storage::contains( T const* p ) const
{
  std::less< T const* > lt;
  return !lt( p , &a[0] ) && lt( p , &a[N] );
}

これで十分ということになりますね。ちょっとキモいけど。
Cの場合は>>776のようなアプローチが最善策である、と。

そうなると、boost::pool::is_from の仕様がやたら複雑に記述してあるのは
どういうわけなんでしょうか?
0796初心者NGNG
日本語のサイトはないのでしょうか?
英文が全然駄目で。
0797デフォルトの名無しさんNGNG
C++も英単語ですが。
0798初心者NGNG
ひまわりを使うことにしました。
C++なんて糞!!
0799デフォルトの名無しさんNGNG
JavaのpackageみたいなのをやりたいときC++ではnamespaceですか?

my; //ルート
my.util;
my.math;

たとえば↑みたいなのは、

//util.h
namespace my {
  namespace util {
    //class ...
  }
};

//math.h
namespace my {
  namespace math {
    //class ...
  }
};
ってやらないとだめなのでしょうか・・・。
0800768NGNG
レスいただいた皆さんいろいろ情報ありがとうございました。
アマゾンでC++第3版注文することにしました。
0801デフォルトの名無しさんNGNG
図書館で借りる→返せと電話が来るまで借りる→返す→また借りる
俺はこの繰り返し。
0802773NGNG
あ、>>795==>>773でした。
0803デフォルトの名無しさんNGNG
つーかよ、お前ら
標準にアクセスする方法知らないの
致命的じゃねえかよ
0804デフォルトの名無しさんNGNG
ほんとC++の参照はクソだな
参照をベースに多態を書こうと思ったら思わぬ縛りがわんさか
0805デフォルトの名無しさんNGNG
初期化死が書けないだけ
constを激しく誤解している
未だにコストが0だと強弁している
以上は、ただ恥ずかしいだけ

配列が作れないのはイヤだけど
0806デフォルトの名無しさんNGNG
class A{
int a;
;

class B : public A{
int b;
};

A *p = new B;

?????
0807デフォルトの名無しさんNGNG
馬鹿がいます
0808デフォルトの名無しさんNGNG
>>807 それはお前だ。
0809807NGNG
馬鹿はボクでした

アホがいます
0810デフォルトの名無しさんNGNG
クラスをnewで作成して、deleteする可能性のあるものには、必ずデストラクタをつけたほうがいいですかね?
0811デフォルトの名無しさんNGNG
>>809
自他共に認める馬鹿。そしてアホ。
0812デフォルトの名無しさんNGNG
>>810
そこまでわかってて何が聞きたい?
0813809NGNG
馬鹿でアホはボクでした

この中に一人、侍がおる オマエやろ>>814
0814デフォルトの名無しさんNGNG
>>812
自信から確信にしたいので・・・
0815デフォルトの名無しさんNGNG
>810
new し delete することと、デストラクタの要不要はまったく無関係だ。
0816デフォルトの名無しさんNGNG
ていうかデストラクタは、全部のクラスにつけとけよ馬鹿
0817デフォルトの名無しさんNGNG
不要な仮想関数テーブルを持ちたくない場合もあるのだよ
0818デフォルトの名無しさんNGNG
・・・( ゚Д゚)ポカーン
0819デフォルトの名無しさんNGNG
・・・( ゚ポ゚)Дカーン
0820おまいらも折りませんか?NGNG
平和記念公園の焼けた折り鶴14万羽折らないか?4
http://off.2ch.net/test/read.cgi/offmatrix/1059911297/l50
0821デフォルトの名無しさんNGNG
そういえば、鶴の折り方忘れた
0822デフォルトの名無しさんNGNG
intじゃなくてINTを使ったり、voidじゃなくてVOIDを使ったりする
メリットってありますか?
0823デフォルトの名無しさんNGNG
その昔は #define VOID int という処理系があったりしたものじゃ
0824デフォルトの名無しさんNGNG
ちょっと疑問に答えてくれ

struct test1{
int &x;
test1(int &i):x(i){}
};

struct test2{
const int &x;
test2(const int &i):x(i){}
};

int i;
//new int&(i);//(a)これはもちろん出来ない
new test1(i);//(b)これが出来る
new test2(1);//(c)これも出来てしまう

まず、(b)(c)はできるものなのか。出来るのならば
(a)が出来ないのに(b)が出来るのは不思議である。
というのも実際に参照を生成しているのと同等に見える。それはいいのだが
次に(c)が出来てしまうのはどう考えよう。この時int型の一時変数が
出来るとして、その寿命はどうなるのた?
0825デフォルトの名無しさんNGNG
int i;
int &r1 = i; // (b)
const int &r2 = 1; // (c)

単純化するとこういうことだよね。(b)も(c)も可能。
C++の参照ってのは別名と考えるといいんでない?
(b)の場合、r1はコンパイルの便宜上iにつけられた別名。
(c)のr2は、無名インスタンスにつけられた名前。
r1やr2という「参照型のインスタンス」が存在するわけではない。
0826824NGNG
>>825
>const int &r2 = 1; // (c)
上とtest2*p=new test2(1);が同じだとすると
このp->xの参照先の一時変数の寿命はどうなるのだろう?
縛っている*pと同じで長寿か、それともそのローカルのスコープで
一時変数だけ死んでしまうのか?それがわからない。
0827デフォルトの名無しさんNGNG
>>824-826
12.2 -5- より、引用。
"A temporary bound to a reference member in a constructor's ctor-initializer persists until the constructor exits."

コンストラクタを抜けるまで有効らしい。
0828825NGNG
というより、この場合「p->xの参照先の一時変数」というものは存在しないのでは。
test2 *p = new test2(1);
というコンストラクタ呼び出しは、「p->xは1の別名である」と言っているにすぎない。
p->xが出てきたら、その都度リテラル1に置き換えられるだけ。
って、すげー勘違いしてる?
0829827NGNG
あー。微妙にずれてるな。
コンストラクタの呼び出しに一時オブジェクトへの参照を渡すんだから、
この場合はこっちか?(同じく 12.2 -5- より)
"A temporary bound to a reference parameter in a function call persists until the completion of the full expression containing the call."
0830827NGNG
> p->xが出てきたら、その都度リテラル1に置き換えられるだけ。
それはすげー勘違い。
0831824NGNG
>>827
それだ!
という事はそういう事をするとメンバ自体が無意味になってしまうのか…
つまり結局参照をメンバに持つクラスはnewで生成する物ではなく
(同じくnewで生成された寿命を持つオブジェクトを参照するなら
ポインタでいいわけだし)
しかも一時変数は値を得るだけでメンバに参照させてはならないということか

言われてみれば当然だが、俺の中で参照の株が急落中
test2 t(1);程度はしていいものと思っていた。
const int i=1;同じ寿命の物を用意して
test2 t(i);としなければならないわけか。参照意味なし
0832デフォルトの名無しさんNGNG
この場合、コンストラクタである必要はなく、ただの関数引数でも一緒でしょ。
void f(int& r);
void g(const int& r);
int i;
ここに、f(i), g(i), g(0)は可能だけど、f(0)は無理。

同様に、
void f(string& r);
void g(const string& r);
に対して、g("ABC")は可能だけどf("ABC")は不可能。
もちろん、関数呼び出しの間だけ有効なstring型の一時オブジェクトが作られる。
0833デフォルトの名無しさんNGNG
あ、良く読んだら参照の生存期間の問題も絡んでるのか。
ポインタもそうだけどエイリアスの問題だね。

大昔はconstでない参照にも勝手に一時変数が作られたから
参照の生存期間と一時変数の生存期間の違いによるバグも多かったんだろうな。
0834デフォルトの名無しさんNGNG
オマエバカジャネーノ?
0835デフォルトの名無しさんNGNG
↑
0836デフォルトの名無しさんNGNG
あるクラスにint型のデータメンバが二つあるとします。(仮にaとb)
このクラスのオブジェクトXをaとbの値が0で初期化して作成します。
このXにint型の値3をたしてaとbの値を3にするには+演算子をオーバーロードしないといけないのですが、
クラスのメンバ関数として
X X::operator +(int n)
{
a+=n;
a+=n;
return *this;
}
というようにするかフレンド関数として
X operator+(X x,int n)
{
X tmp;
tmp.a = x.a + n;
tmp.b = x.b + n;
return tmp;
}
とするのはどちらがいいのでしょうか?
0837デフォルトの名無しさんNGNG
前者は operator + ではなく operator += をオーバロードすべし。
その上で、両方とも定義して可。
0838デフォルトの名無しさんNGNG
>このXにint型の値3をたしてaとbの値を3にするには+演算子をオーバーロードしないといけないのですが、
別に演算子オーバーロードにしなくてもいいです。

>X X::operator +(int n)
>{
> a+=n;
> a+=n;
operator + なのに += しちゃ意味違うだろ。しかも a に2回足してるし
(誤植だろうけど注意力30000過ぎー)

質問の本来の答えは、Effective C++ あたりを読んでくだちい
0839836NGNG
レスありがとうございます。
誤植すいません。
まだプログラム初めて一週間ぐらいなんでって言ってもいいわけですね。

0840デフォルトの名無しさんNGNG
>>839
プログラムはじめて1週間で演算子オーバーロードですかおめでてえな。
もっと先に覚えなきゃいけない事イパーイあるよ。
というか演算子オーバーロードは使い方難しいからもう少し後にしな。
0841デフォルトの名無しさんNGNG
>>839
プログラム初めて一週間なら、誤植は仕方ないな。

ンナワケネーダロ
0842デフォルトの名無しさんNGNG
質問
あるアドレスが 動的確保されているかどうかチェックできるような
標準関数ってない?


0843デフォルトの名無しさんNGNG
「標準」では存在しないはず。
0844デフォルトの名無しさんNGNG
>>840
一週間もたっていればそれくらい進んでいてもおかしくない。


…とマジレスしてみるテスト
0845839NGNG
プログラムの入門書でやっているのですが
winアプリを作るときは入門書に書いてあることは
すべて必須なんでしょうか?
今使っている入門書はやさしいC++です。
0846デフォルトの名無しさんNGNG
(´-`).。oO(世の中の大半は無駄なことだよ・・・・・・・・・)
0847デフォルトの名無しさんNGNG
>>839
今すぐ本を読むのを止めて以下のキーワードでググれ。
RegisterClassEx
CreateWindowEx
ShowWindow
UpdateWindow
GetMessage
TranslateMessage
DispatchMessage
0848デフォルトの名無しさんNGNG
>>847
…情けない
0849847NGNG
>>848
何が情けないの?
「今やってる事って役に立ちますか?」とか甘っちょろい事言ってるから、
とりあえず自分の目で見て眩暈の一つもおこして見ろって言ってんの。
0850848NGNG
>>847
スレタイを暗唱してはどうか。
0851デフォルトの名無しさんNGNG
WTLかMFCにしろって事?
0852デフォルトの名無しさんNGNG
>>851
gtkmmにしろって事だろ
0853847NGNG
このスレは誘導禁止らしいです。>>850 がそう言っています。
皆さんもスレ違い君がきても、絶対にこのスレに引き止めるように!
0854デフォルトの名無しさんNGNG
俺は何が情けないのかが分からん。
>winアプリを作るときは
>>847でいいだろ。

ただ>>847は最後に誘導すべきだったと思う。
Win32API質問箱 Build13
http://pc2.2ch.net/test/read.cgi/tech/1059549320/
0855デフォルトの名無しさんNGNG
MFCじゃなくてWin32APIをつかえってこと?
>>847
0856デフォルトの名無しさんNGNG
今からMFC覚えるヤシなんているわけないじゃん
0857デフォルトの名無しさんNGNG
>>845
マジレス致しますと内容は無駄ですが頑張って学んだ事実は今後に生きてきますのでがんがれ!
0858デフォルトの名無しさんNGNG
このスレって怖いよね・・・
0859デフォルトの名無しさんNGNG
>>858
この臆病も飲め!
0860デフォルトの名無しさんNGNG
operator[] で
operator[](uint index)
operator[](uint index) const
という風に、constが付くか付かないか、と言う違いだけというのは、
問題ないですか?
0861デフォルトの名無しさんNGNG
nai
0862デフォルトの名無しさんNGNG
書き込み用、読み込み用で問題ないかと
0863デフォルトの名無しさんNGNG
>>860
わかってるとは思うが、順番を間違えんようにな。
0864デフォルトの名無しさんNGNG
みなさんは標準ライブラリのテンプレートや関数をどのくらい覚えているんですか?
量がかなり多いと思うんですが。
0865デフォルトの名無しさんNGNG
STLは一般的なアルゴリズムとデータ構造を知ってればおぼえなくていい。
stringは直感的に使えるからおぼえなくていい。
iostreamはおぼえないといけないかも。

「おぼえなくていい」というのは、わかんなくなったときだけリファレンス引けばいいってことな。
0866デフォルトの名無しさんNGNG
>>864
関数名にしろ引数の取り方にしろ、共通している部分が非常に多いから、
関わっていくうちにあまり多いとは思わなくなるし、片っ端から覚える必要を
感じなくなるよ。
基本がわかってれば、いつでもすぐ調べて使えるって感じ。

最初はアルゴリズムの数にちょっと圧倒されたけど、あれ結局数個しか使ってないし。
0867865NGNG
STLも、やっぱりおぼえないといけないことはけっこう有るかな。

言い換えると、
おぼえないといけないことがライブラリの総量に比例しているわけではない
ってこと。
0868デフォルトの名無しさんNGNG
Cの標準ライブラリよりは覚える量は少ないかも>STL
0869デフォルトの名無しさんNGNG
今言っている「覚える」とはスペルや引数、使用条件を覚えるということなのか、
「こういう機能を持っているものがある」ということを知っているのとどっちですか?
0870デフォルトの名無しさんNGNG
後者でしょ。前者は利用しているうちに自然と覚えてくる。
0871デフォルトの名無しさんNGNG
>863
順番てconstの位置と言うことですか?
それなら理解してると思います。
0872デフォルトの名無しさんNGNG
Accelerated C++という本が入門にいいときいて本屋で立ち読みしたんですがいきなり標準ライブラリとかメンバとかでてきてややこしく感じました。この本でプログラムを始めるのには向いてないんでしょうか?
0873デフォルトの名無しさんNGNG
人には向き不向きがあるよ。別に無理してプログラマになる必要はないと思われ。
0874デフォルトの名無しさんNGNG
STLやクラスは中盤以降だよ( ´ー`)y-~~
0875デフォルトの名無しさんNGNG
stringがいきなり出てくる本は珍しいとおもわれ。
他の入門書はchar型の配列やポインタに代入しているが
0876GET! DVDNGNG
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★ 新商品 ゾク・ゾク 入荷 ☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com.tw      
☆★  激安アダルトDVDショップ        
★☆    お買い得!! 1枚500円〜 急げ!   
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com.tw      
★☆        スピード発送!        
☆★      http://www.get-dvd.com.tw      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com.tw      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
0877デフォルトの名無しさんNGNG
でもC++で文字列としてchar配列使ったら馬鹿だよ。
0878デフォルトの名無しさんNGNG
>>877
なこたーない(AA省略)
0879デフォルトの名無しさんNGNG
>>877
適材適所と思われ。
0880デフォルトの名無しさんNGNG
stringがUNICODEだったら乗りかえるのになぁ。
0881デフォルトの名無しさんNGNG
>>880
std::wstring
0882デフォルトの名無しさんNGNG
>>872
独学なら興味あるところから始めれ
誰も引っ張ってくれないし客のプレッシャーもない
自分のやる気が全て

因みに漏れはoperatorから始めたyo
TCPLの初版とZortec C++ 1.06で
0883デフォルトの名無しさんNGNG
stringは廃止してwstringにしろ。
0884デフォルトの名無しさんNGNG
そこでアメリカ人ブチキレですよ。
0885デフォルトの名無しさんNGNG
邪婆厨か...
0886デフォルトの名無しさんNGNG
そこでJava厨ブチギレですよ。
0887デフォルトの名無しさんNGNG
おれはC・C++のワイド文字列の仕様は失敗だと思ってる。
だって、おれ自身全然使わないもん!
0888デフォルトの名無しさんNGNG
localeがちょっと面倒だね
0889デフォルトの名無しさんNGNG
初心者質問なのですが、
gcc.exeやcl.exe等で、GUI実装したWIN32アプリケーションを
作ることはできますか?
0890デフォルトの名無しさんNGNG
できますよ。
0891デフォルトの名無しさんNGNG
初心者質問ですが、
int array[2];
のような配列を宣言する時、
std::vectorを使いますか?

配列の操作としては、
swap( array[0], array[1] )
しかしません。

C++の本を読んだときに、
「ポインタはなるべく使うな。配列もまた体の良いポインタである。
 C++では配列を使わずにvectorを使う。」(かなり適当かつ出典忘れました。)
見たいな事が書かれていたので、他の方はどうされているのか
気になっています。
0892デフォルトの名無しさんNGNG
> 配列の操作としては、
> swap( array[0], array[1] )
> しかしません。

それなら配列は使わない。
int a,b;
0893デフォルトの名無しさんNGNG
>>889
という事はVC++買わなくても、
Win32SDKやMFCを入手してそのままコンパイラで使えるという事ですか?
そうだったら余計な出費が減りますね。
0894デフォルトの名無しさんNGNG
>>891
自分でデータ型を定義するかstd::pairやboost::tupleなどを
使うといい

>>893
統合環境がいらないならその通り
0895デフォルトの名無しさんNGNG
MFCはどうやって手に入れるのだろう。
というよりGUIプログラム作成の可否とMFCは直接は関係ないような。
0896893NGNG
すみません、MFCじゃなくてWin32SDKでした。
しかしGUIプログラムは総合環境無しでは難しそうですね。
やっぱり買いますか…
0897デフォルトの名無しさんNGNG
ソースあるやん
0898893NGNG
>>897
ソースとは?

Frameのデザインとか数値だけで指定するのは面倒ですね。
あと今更ですが893だったのに気づきました。
0899891NGNG
レスありがとうございます。
なんかC++以前の問題だったようですみません。
これを機にboostにも手を出してみようと思います。
0900デフォルトの名無しさんNGNG
>>898
MFCだろ
0901デフォルトの名無しさんNGNG
Accelerated C++
は読んでみたけどなかなかいいとおもいました。
0902_NGNG
http://homepage.mac.com/hiroyuki44/
0903デフォルトの名無しさんNGNG
VCなのですが、epsilonより小さい数値が0にならないみたいなのですが、
良いのでしょうか?

#include<iomanip>
#include<cfloat>
#include<cstdio>
int main(){
float ffff = FLT_MIN*FLT_EPSILON;
printf("\n%.8f\n",ffff);//0.0000000
std::cout << std::setprecision(8) << ffff << std::endl;//1.4012985e-045
}
0904_NGNG
http://homepage.mac.com/hiroyuki44/jaz08.html
0905デフォルトの名無しさんNGNG
Accelerated C++の話が出でいるので聞きたいのですが各章の最後にある課題の答えはどこかにあるのでしょうか?
ソースコードや落とせる場所や解説しているページがあればお願いします。
0906デフォルトの名無しさんNGNG
フォームのTextが空欄だと、ShowInTaskbarがtrueでもタスクバーに表示されないのはバグですか?
0907デフォルトの名無しさんNGNG
>>906
スレ違い
0908デフォルトの名無しさんNGNG
全角スペースを入れてください
0909デフォルトの名無しさんNGNG
>>906
すれ違い
0910デフォルトの名無しさんNGNG
女房がどこへ逝ったか知りませんか?
0911デフォルトの名無しさんNGNG
俺の横さ
0912デフォルトの名無しさんNGNG
”タスクバーに”じゃなくて、”タスクバーが”だった。
0913デフォルトの名無しさんNGNG
タスクバー自体は制御しねーよハゲ
0914デフォルトの名無しさんNGNG
ミロバーは?
0915デフォルトの名無しさんNGNG
http://www.nekopla.com/nnk/mono/mono/006_2.jpg
むむぅ。
0916デフォルトの名無しさんNGNG
Blake Stowell: C++ is one of the properties that SCO owns
today and we frequently are approached by customers who wish
to license C++ from us and we do charge for that. Those
arrangements are done on a case-by-case basis with each
customer and are not disclosed publicly. C++ licensing is
currently part of SCO's SCOsource licensing program.

http://mozillaquest.com/Linux03/ScoSource-02_Story03.html

C++もおしまいですね。
0917デフォルトの名無しさんNGNG
http://jbbs.shitaraba.com/computer/bbs/read.cgi?BBS=5651&KEY=1049123895&START=13
0918デフォルトの名無しさんNGNG
>>905誰かしらないですか?
0919_NGNG
http://homepage.mac.com/hiroyuki45/jaz09.html
0920デフォルトの名無しさんNGNG
>>916
SCOって基地外だな。
0921デフォルトの名無しさんNGNG
実はSCOの幹部の中身があの民族に変わってたりしないよな?
0922デフォルトの名無しさんNGNG
あげ
0923デフォルトの名無しさんNGNG
>>921
ビジニュー水戸家
おまいの推測どおりあの法則だ
0924デフォルトの名無しさんNGNG
なんだかんだいってSCOの主張が棄却されないところをみると
正当な主張なのだろう。
0925デフォルトの名無しさんNGNG
またか・・・またあいつらか・・・いい加減にしろよまったく
0926デフォルトの名無しさんNGNG
プログラムを勉強し始めようと思ってるんですが
CとC++どちらから勉強するのがベターですか?
0927デフォルトの名無しさんNGNG
>>926
Windowsが好きならC#、そうでなければJava。
C/C++は実務・教養どちらにもあまりお勧めできない。
0928デフォルトの名無しさんNGNG
>>927
Cの基本的な内容を含むC++参考書で勉強するといいと思われ。
0929デフォルトの名無しさんNGNG
ディレクトリを開いて中のファイル名をすべて読み込みたいのですが
C++に特有な方法ってありますか?
0930デフォルトの名無しさんNGNG
なんでC++標準のstringってわざわざSTLなんかを使っているのですか?
MFCのCStringやVCLのAnsiStringをみれば分かるとおり
クラスで実装できるでしょ。

使いたいだけちゃうんかと小一時間
0931デフォルトの名無しさんNGNG
>>930
君頭いいね。
0932デフォルトの名無しさんNGNG
あまりにも正当な意見で反論の余地が無いのか?
だとしたら本当に>>930は頭がいいのだろう。
0933デフォルトの名無しさんNGNG
解読が難しいだけ
0934デフォルトの名無しさんNGNG
>>930
すごいすごい。おまえ知能指数10000000はあるよ。
もうプログラミングやめろ。
0935デフォルトの名無しさんNGNG
>>929
ディレクトリの扱いは C, C++ 標準規格には入ってない。OS 非依存、
例外安全にしたければ boost 使うのが良いと思うぞ。
0936デフォルトの名無しさんNGNG
>>930
string が STL ですか。そうですか
0937デフォルトの名無しさんNGNG
>>936
「stringがSTL」とは言ってない。
0938デフォルトの名無しさんNGNG
Cマガの「C++基礎講座」という連載でC++の勉強をしています。
2003/02号の記事のlist4を、cygwinのgcc version 3.2 20020927 (prerelease)でコンパイルすると、

binder1st< less<int> > b1st( less<int>(), 3 );

という部分で「type specifier omitted for parameter」というエラーが出ます。
これはgccが悪いのでしょうか?
ちなみに、

binder1st< less<int> > b1st = binder1st< less<int> >( less<int>(), 3 );

とやると上手くいきますが、これはあまり美しくないですよね?
0939デフォルトの名無しさんNGNG
Cマガなんて読むな
0940デフォルトの名無しさんNGNG
>>935
ありがと、boostにあるのしらなかたよ
0941デフォルトの名無しさんNGNG
boost, lokiってまともなプロジェクトでの実績ってあるの?
なんかお遊びツールにしか思えないんだが。
0942デフォルトの名無しさんNGNG
>>941
何を以って実績と言うかが問題だ。
std::copyを使ったからといってSTLの実績とはいえないからな。
0943実績とはこういうことさNGNG
自社プロジェクトでの採用率
STL: 100%
boost: 0%
loki: 0%
0944デフォルトの名無しさんNGNG
まず、boost のコードがちゃんとコンパイルできる
コンパイラを用意しないとな。
0945デフォルトの名無しさんNGNG
VC7.1が普及するこれからってことか
0946デフォルトの名無しさんNGNG
じゃあさっさとVC7.1をクロスプラットフォームにして下さい。
0947デフォルトの名無しさんNGNG
>>938
多分 gcc のバグだと思う。
0948デフォルトの名無しさんNGNG
ヤレヤレ、まだC++は枯れてないのか。
0949デフォルトの名無しさんNGNG
>>941
http://www.boost-consulting.com/about.html
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=boost+c%2B%2B+site%3Asourceforge.net+build

てゆーかうちの会社では普通に使ってるが、まともってどの程度よ?

↓次スレよろ
0950デフォルトの名無しさんNGNG
>>938
http://pc2.2ch.net/test/read.cgi/tech/1033830935/862-868n
に似てる気がする。gccのバグじゃないかなぁ。
0951950NGNG
> ↓次スレよろ
ふが。わかった。ちょっと待ってて。
0952デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1060361082/
0953デフォルトの名無しさんNGNG
保守
0954デフォルトの名無しさんNGNG



みなさんもこの問題をといて見てはいかが?
C言語の問題です。
http://jbbs.shitaraba.com/game/bbs/read.cgi?BBS=1314&KEY=1060147851&START=115&END=200&NOFIRST=TRUE
0955938NGNG
>>947
>>950

バグですか。
実は同じ号のlist7,8も上手くコンパイルが通らず、こっちは調べて
解決出来たのですが、938の件では自分・記事・コンパイラの
どれが悪いのか悩みました。

その後の号でも訂正記事は載ってないと思うのですが、やはり
Cマガを読んで勉強する人はあまりいないんですかね?

とりあえずバグということで納得して、次に進みたいと思います。
どうも有難うございました。
0956デフォルトの名無しさんNGNG
>>955

http://www.cmagazine.jp/bugs/index.html
ここにもないね。
0957デフォルトの名無しさんNGNG
映画が本当になったぞ!!
レインボーブリッジが封鎖されてるよ!!
0958デフォルトの名無しさんNGNG
>>957
うそつけー。
0959デフォルトの名無しさんNGNG
レインボーブリッジが光ってるよ!!
0960デフォルトの名無しさんNGNG
レインボーブリッジの制御プログラムはC++で書かれている。
0961デフォルトの名無しさんNGNG
                        / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     /\      /\        < 糞スレ
     /  \    /  \        |  おめでとうございまーす
    /     \_/    \      \_______
    /               \
   /                ヽ___  ___
  /  /  ヽ__/  \    /     ゙Y"     \
 |         │  /      /               \
 |       丶/     /                 \
 \         / ̄ ̄ ̄ ̄)        *      ( ̄ ̄ ̄ ̄)
   ヽ_____|    ─<         |\      >─   (
           |      )     /  (|ミ;\    (      )
           ヽ    ̄ ̄)    /(___人|,iミ'=;\  (  ̄ ̄   )
           /" ̄ ̄ ̄ ̄   /    《v厂リiy\  ̄ ̄ ̄ ̄\
           /        /        ゙|,/'' v:,,、.¨)z,_       \
          /       /         ミ/ .-─ .゙》z、      \
          /      /           〔」″ノ‐ 、u ¨\      )
         (      /             ゙|, ..冫 .rー    ̄\_   |
          |      〔              ミ./′   ..r-ー __,,ア┐ |
          |      |              {. .,,,,   .′ .´′ .¨\|
0962デフォルトの名無しさんNGNG
          |       |              ∨   ノ冖′=vvvvvv¨\
          |     /               ミ.  ,i'          .゙\_
          |     /                .{. ノ  ,r¬″       .¨\
          |     /                 ゙|, |  ノ      ー'''''''''''  .ーミz
          |     |                  ミ.     .,、 ._,,,、、r   ,,,,_____ ゙┐
      _/"     |                  .ミ.   ./′ ´′      ̄⌒'h..¥
     (______)                  {.  }  ._,,,、  ,ノ冖''^¨    ″〕
                                 ゙|, .,| ./`  ,r'′  vvvv、   |
                                  .ミ、.` |    二、      〔  、 ,|
                                  .〔  |  .、 〔  rーー   |  |.,}
                                   .ミ .′ .|  〕  .} ─-「  y-リ
                                   .\   |,  ´v,,,]、、、v-  ..,/′
                                     ゙\ .\、    .  _/
                                      ¨'ーvu,,____''工レ-'″
0963デフォルトの名無しさんNGNG
VC7.1でstlportを使うメリットはありますか?
0964デフォルトの名無しさんNGNG
教えてください。
仮想関数テーブルはすべてのクラスのインスタンスにコピー
されていると聞いたのですがなぜですか?
1つのテーブルを共有すればいいと思うのですが。。。
0965デフォルトの名無しさんNGNG
>>964 安心されよ。
0966デフォルトの名無しさんNGNG
つーか、仮想関数テーブルはクラスに1つだろ。
インスタンスは、そいつへのポインタを持つのがふつう。
0967964NGNG
>>966
ですよね。僕もそうだと思っていたのですが
最近読んだ書籍に、継承を多用するのは各インスタンスの
仮想関数テーブルを増大するから良くないみたいに書かれて
いたのです。
0968デフォルトの名無しさんNGNG
>>967
> 継承を多用するのは各インスタンスの仮想関数テーブルを増大するから良くない
その書籍は捨てた方がいいかもな。
0969デフォルトの名無しさんNGNG
その書籍の題名とISBNをたのむ。
0970964NGNG
>>968
ネットでいろいろ調べてみたのですが...

>その書籍は捨てた方がいいかもな。


みたいですね。。。(−−);;
0971デフォルトの名無しさんNGNG
多重継承を多用するってんならともかく。
0972デフォルトの名無しさんNGNG
>>971 ハァ?
0973デフォルトの名無しさんNGNG
Cを初めて触る初心者に適したマニュアルありますか?
0974デフォルトの名無しさんNGNG
>>970
その書籍の題名を。
0975デフォルトの名無しさんNGNG
>>972
多重継承する場合は、1 インスタンス中に vptr (vtbl を指してるポインタ)
が複数格納されるっつー話なら、正しいぞ。
0976デフォルトの名無しさんNGNG
>>975
それは普通にサブオブジェクトとして格納された結果だろ。
vtblは関係ない。
0977964NGNG
>>974
いちおう...
「MFCインターナル」のP185です
0978964NGNG
969さんも聞いてくれていたのですね。
同時刻書き込みで見忘れてますた。
結構メジャーな本なのですが。。。
0979964NGNG
んで関連質問なのですが、今基本クラスで仮想関数として
定義されている関数foo()を派生クラスでオーバーライド
しているとき、両クラスはもちろん別のvtblを持つと思いますが
テーブル内のfoo()の場所は同一のオフセットと考えていいですよね。
0980デフォルトの名無しさんNGNG
>>979
そう考えてあながち間違いではないが、
その考えに基づいたプログラムを書いてはいけない。
0981979NGNG
>>980
具体的にどんなミスがでるのですか?
0982デフォルトの名無しさんNGNG
>>981
処理系依存のプログラムになる。
このスレで聞くからには処理系依存は良しとされないだろう。
0983979NGNG
>>982
あ、なるほど。
もっともです。。。(--);;
0984デフォルトの名無しさんNGNG
>>967
継承を多用するとそのクラスごとに仮想関数テーブルが作製される。
仮想関数の数が途方も無く多いと弊害がでる。

MFCってことはウインドウメッセージをそれぞれすべて仮想関数化すると?って感じの前フリがあったのでは?
0985デフォルトの名無しさんNGNG
仮想関数エントリの数百〜数千くらい無視できるほど小さいと思う俺は贅沢すぎですか?
0986デフォルトの名無しさんNGNG
C++プログラマはみな無視します
0987デフォルトの名無しさんNGNG
継承多様による弊害は仮想関数テーブルの増大なんかよりも別にあると思うが
0988デフォルトの名無しさんNGNG
>984
「各インスタンスの仮想関数テーブルを増大」
つまり、クラスとインスタンスの区別の付かないくらい
著者が莫迦だといいたいんだね?
0989デフォルトの名無しさんNGNG
>>987
それはまた別の話。インターフェース継承なら、ふつー多重継承する
ものだし。

>>985
たとえエントリが 1 万個あったとしても、32bit マシンだと 40KB
程度でしょう。誤差、誤差。
0990デフォルトの名無しさんNGNG
>>941
boost のスマートポインタ系や bind, compose, mem_fn, call_traits,
それに文字列処理に関して format, regex あたりは仕事で使ってるけど。
さすがに lambda, mpl なんかは、使ってる処理系のバージョンが古い
ためもあって使ってない。
0991デフォルトの名無しさんNGNG
C++のRTTIについて質問なのですが、これってC++は
どうやって実現しているのですか?
文字列で各インスタンスに埋め込んでいるのでしょうか?
0992次スレ案内NGNG
C++相談室 part22
http://pc2.2ch.net/test/read.cgi/tech/1060361082/l50
0993991NGNG
次スレに質問移動しますた。
0994デフォルトの名無しさんNGNG
ウメ〜
0995デフォルトの名無しさんNGNG
1000鳥合戦はいつ始まるの?
0996デフォルトの名無しさんNGNG
スレが立てられた時に始まっています
0997デフォルトの名無しさんNGNG
1000
0998デフォルトの名無しさんNGNG
記念カキコ v(^-^*)
0999GET!DVDNGNG
☆★ 新商品 ゾク・ゾク 入荷!! 急げ〜!! ☆★☆
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★ 送料激安!  スピード発送!  商品豊富!   
★☆      http://www.get-dvd.com        
☆★ 激安DVDショップ 「GETDVDドットコム」 
★☆      http://www.get-dvd.com        
☆★ 今すぐアクセス Let’s Go!   急げ! 
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。