C++相談室 part47
レス数が1000を超えています。これ以上書き込みはできません。
00011 ◆u3CudPDzYA
2006/02/15(水) 00:44:55ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part46
http://pc8.2ch.net/test/read.cgi/tech/1136690107/
00021 ◆u3CudPDzYA
2006/02/15(水) 00:45:252 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
00031 ◆u3CudPDzYA
2006/02/15(水) 00:45:4417 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
00041 ◆u3CudPDzYA
2006/02/15(水) 00:47:4832 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/
37 http://pc5.2ch.net/test/read.cgi/tech/1098543578/
38 http://pc5.2ch.net/test/read.cgi/tech/1101473340/
39 http://pc5.2ch.net/test/read.cgi/tech/1106466303/
39(実質40) http://pc8.2ch.net/test/read.cgi/tech/1106527792/
40(実質41) http://pc8.2ch.net/test/read.cgi/tech/1113408957/
41(実質42) http://pc8.2ch.net/test/read.cgi/tech/1120190961/
43 http://pc8.2ch.net/test/read.cgi/tech/1124113879/
44 http://pc8.2ch.net/test/read.cgi/tech/1128512737/
45 http://pc8.2ch.net/test/read.cgi/tech/1133007604/
00051 ◆u3CudPDzYA
2006/02/15(水) 00:48:15[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[禿 Stroustrup]
http://www.research.att.com/~bs/
[C++ International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21
[C/C++ Users Journal]
http://www.cuj.com/
[cppll (ML)]
http://www.trickpalace.net/cppll/ (日本語)
00061 ◆u3CudPDzYA
2006/02/15(水) 00:48:31amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
http://www.amazon.com/exec/obidos/ASIN/0201760428/
00071 ◆u3CudPDzYA
2006/02/15(水) 00:48:51http://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
http://www.amazon.co.jp/exec/obidos/ASIN/4894716860/(翻訳)
■Books(Templateまわり)■
Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
http://www.amazon.com/exec/obidos/ASIN/0321227255/
00081 ◆u3CudPDzYA
2006/02/15(水) 00:49:10[Boost]
Boost http://www.boost.org/
(日本語) http://www.kmonos.net/alang/boost/
(日本語) http://shinh.skr.jp/boost/
[STL]
STLport http://www.stlport.org/
STLport http://stlport.sourceforge.net/
SGI-STL http://www.sgi.com/tech/stl/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
(日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
http://www.moderncppdesign.com/
LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0009デフォルトの名無しさん
2006/02/15(水) 00:50:39↓↓↓↓↓↓↓↓↓
テンプレその他 >>1-10付近参照 これ重要
↑↑↑↑↑↑↑↑↑
0010デフォルトの名無しさん
2006/02/15(水) 00:50:50乙
00111 ◆u3CudPDzYA
2006/02/15(水) 00:53:21【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/
【C++】STL(Standard Template Library)相談室 4
http://pc8.2ch.net/test/read.cgi/tech/1130680264/
C/C++の宿題を片付けます 60代目
http://pc8.2ch.net/test/read.cgi/tech/1139053955/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc8.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/
【.NET】 C++/CLI について語ろうぜ 【最適】
http://pc8.2ch.net/test/read.cgi/tech/1126450441/
ATL/WTL Part4
http://pc8.2ch.net/test/read.cgi/tech/1134388951/
00121 ◆u3CudPDzYA
2006/02/15(水) 00:54:02環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後氏ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0013デフォルトの名無しさん
2006/02/15(水) 00:56:15テラワロス
0014デフォルトの名無しさん
2006/02/15(水) 00:56:300015前スレ979
2006/02/15(水) 00:57:17せっかくテンプレまとめてたのに、規制で立てられなかったんだ。
ゴメンよ。
>>5-8 にいくらか修正入れたんで、貼っとく。
>5
禿サイト URL 変更。
- http://www.research.att.com/~bs/
+ http://public.research.att.com/~bs/
[JTC1/SC22/WG21 - C++]の URL 末尾に / 追加
- http://www.open-std.org/jtc1/sc22/wg21
+ http://www.open-std.org/jtc1/sc22/wg21/
>6-7
"C++ Coding Standards" を 6 に移動。
>8
全体的に書き換えたんで次のレスに貼る。
0016前スレ979
2006/02/15(水) 01:00:09[STL] を [標準ライブラリ] に変更。
STLport は sourceforge に移動して2番手に降格。
標準ライブラリ実装とドキュメントの参照先として
GNU libstdc++ と Apache STDCXX を追加。
Loki のリンク先を sourceforge に変更。
MSVC7 への LokiPort は本家に取り込まれたので削除。
■Libraries■
[Boost]
Boost http://www.boost.org/
(日本語) http://www.kmonos.net/alang/boost/
(日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
SGI-STL http://www.sgi.com/tech/stl/
STLport http://stlport.sourceforge.net/
GNU libstdc++ http://gcc.gnu.org/libstdc++/
Apache STDCXX http://incubator.apache.org/stdcxx/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
(日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
http://sourceforge.net/projects/loki-lib/
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0017前スレ979
2006/02/15(水) 01:02:38あ、 >9 も大事だと思うので次スレ立てる人は、何卒よろしく。
0018デフォルトの名無しさん
2006/02/15(水) 01:02:54スルーよろ
0019デフォルトの名無しさん
2006/02/15(水) 01:04:48>union {int *upi; char *upv;} u;
>
>int *pi;
>char *pv;
>
>pi = static_cast<int *>(pv); /* ok */
>pi = reinterpret_cast<int *&>(pv); /* ng */
>u.upv = pv;
>pi = u.upi; /* ng; 上と同じ */
ng とは何を指す? ( ill-formed でも undefined-behavior でもない)
助け船: reinterpret_cast の写像は implementation-behavior
0020デフォルトの名無しさん
2006/02/15(水) 01:06:01-implementation-behavior
+implementation-defined-behavior
0021デフォルトの名無しさん
2006/02/15(水) 01:07:15>ng とは何を指す? ( ill-formed でも undefined-behavior でもない)
もともとint *だったものをその変換でint *に戻したとき、元の値が復元されることが保障されていない、ということがいいたかった。
>助け船: reinterpret_cast の写像は implementation-behavior
さんくす。俺もさっき気づいた。
0022デフォルトの名無しさん
2006/02/15(水) 01:08:50なんで引用部分の void が char に置換されてんの?
0023デフォルトの名無しさん
2006/02/15(水) 01:12:08>>19 の頭がおかしいから
0024デフォルトの名無しさん
2006/02/15(水) 01:13:08implementation-defined-behavior は「保証される」ぞ
>>22
いかん、説明忘れた
void* とビット表現とアラインメントが /必ず/ 同じ char* で話した方が通じやすいと判断してそうした
0025デフォルトの名無しさん
2006/02/15(水) 01:18:17>implementation-defined-behavior は「保証される」ぞ
ごめん。よく分からん。
もちろん実装によって保障されることはあるだろうけど。
「実装にかかわらず保障される」と言えばよかったか?
>void* とビット表現とアラインメントが /必ず/ 同じ char* で話した方が通じやすいと判断してそうした
それならintをcharに置換するべきじゃないか?
0026デフォルトの名無しさん
2006/02/15(水) 01:20:21> それならintをcharに置換するべきじゃないか?
それじゃもっと意味がわからん。
置換するべきじゃなかった、が正解。
0027デフォルトの名無しさん
2006/02/15(水) 01:20:27> それならintをcharに置換するべきじゃないか?
それだと no good にならんじゃん。
0028デフォルトの名無しさん
2006/02/15(水) 01:22:09文書化の義務がないのは undefined-behavior と unspecified-behavior
>それならintをcharに置換するべきじゃないか?
からかう気なら当然そうしていたけどね
フェアじゃないから
0029デフォルトの名無しさん
2006/02/15(水) 01:24:010030デフォルトの名無しさん
2006/02/15(水) 01:27:01{
int* pi;
pi = (int*)pv;
pv = pi; // 元の値に必ず戻る
pi = (int*)pv;
pi++;
pv = pi; // 今の論点はこれ
}
0031デフォルトの名無しさん
2006/02/15(水) 01:29:540032デフォルトの名無しさん
2006/02/15(水) 01:36:11>それだと no good にならんじゃん。
なんで?「reinterpret_castの結果は実装依存であって、結果の表現は元の値の表現と同じであるかもしれないし、
そうでないかもしれない」と書いてあるけど。
unionの方は記述を見つけられなかった。
>文書化の義務がないのは undefined-behavior と unspecified-behavior
それは知ってる。だから処理系はint * -> void * -> int *の変換が元に戻るかどうかを
文書化しないといけない。
でもそれは、処理系によらずこの変換が元に戻るということを意味しない。
0033デフォルトの名無しさん
2006/02/15(水) 01:42:40>文書化しないといけない。
(-_-)zzzz ISO がすでに文書化していることを処理系の実装者が文書化する必要はないムニャムニャ
0034デフォルトの名無しさん
2006/02/15(水) 01:56:43おいおい、大丈夫か?
ここまでの流れ
>>19 : ngってなんだ
>>21 : その方法でvoid * -> int *の変換を行うと、もとの値に戻ることが保証されないってことだ。
>>24 : implementation-defined-behaviorは保証される。
>>25 : でも「実装にかかわらず保障される」とは言えない。
>>28 : implementation-defined-behaviorは文書化されなければいけない。
>>32 : そうだけど、それは無関係
だから、
>だから処理系はint * -> void * -> int *の変換が元に戻るかどうかを
>文書化しないといけない。
と言ったのは、>>19でngと書かれている変換についてであって、
static_castや暗黙の型変換についてではない。
0035デフォルトの名無しさん
2006/02/15(水) 02:35:10まとめ乙。でもよく分からん。
まだ結論に達していないってことで、議論している
命題を示してもらえるといいのだろうか?
「〜が〜であることは処理系依存か?」っていう感じで。
0036デフォルトの名無しさん
2006/02/15(水) 04:16:47boost のところには cppll の翻訳されたヤツも入れたほうがよくね?
0037デフォルトの名無しさん
2006/02/15(水) 16:20:54・static_castと違ってreinterpret_castの結果は、元のタイプにキャストバックする以外の安全な使い方がない。
・reinterpret_castは低レベルの操作であり、通常は実装系依存の変換だけに使う。
(from D&E)
0038デフォルトの名無しさん
2006/02/15(水) 16:42:090039デフォルトの名無しさん
2006/02/15(水) 16:53:57型わからんので適当に
b[10][10]=a[10][10];
0040デフォルトの名無しさん
2006/02/15(水) 16:58:37型はintでつ
説明足りなかったみたいなので補足します。
aの0.0〜10.10までを丸ごとbに代入したいんですけどできますかね?
0041デフォルトの名無しさん
2006/02/15(水) 17:02:500042デフォルトの名無しさん
2006/02/15(水) 17:14:46やっぱり一つずつ入れてくしか無いのかな
0043デフォルトの名無しさん
NGNGのほうが安全かと。
0044デフォルトの名無しさん
2006/02/15(水) 19:36:21そういう風に書くときはdestinationのサイズでsizeofすべきじゃないのかい?
0045デフォルトの名無しさん
2006/02/15(水) 19:55:58いやどっちか一方にあわせるのが間違いなのではないかと
0046デフォルトの名無しさん
2006/02/15(水) 20:02:26>文書化しないといけない。
ISO/IEC14882 5.2.10 Reinterpret cast の 7 を一読されたい
つまり、いくら union の代わりに reinterpret_cast を使っても
結局 implementation-defined-behavior に依存するか unspecified-behavior に依存するかを
選択するのみであり、http://pc8.2ch.net/test/read.cgi/tech/1136690107/943-944 よりも
処理系依存についてアドバンテージのあるコードが書けるわけではなく、
よって http://pc8.2ch.net/test/read.cgi/tech/1136690107/952 の指導を具体化するコードは
前スレ〜このスレでは現在のところ示されていない
・・・と主張しているのだが、いかがだろうか
0047デフォルトの名無しさん
2006/02/15(水) 20:04:12(int)&a + sizeof b 番地が未実装の場合は?
0048デフォルトの名無しさん
NGNGaとbの大きさが違うかも知れないと仮定したら危険度はどっちも同じ。
どうしても気になるなら
if (sizeof(a) == sizeof(b)) {
memmove(a, b, sizeof(a));
}
とでもすればよい。
0049デフォルトの名無しさん
2006/02/15(水) 20:48:26どうも議論がかみ合っていないと思ったが、やっと理解できた。
俺の主張は、あるint *の値をvoid *に暗黙に変換した後、
そこから元のint *の値を処理系に依存せずに復元するには、
unionやreinterpret_castではなくstatic_cast(またはCスタイルのキャスト)を
使わなければならない、というもの。
http://pc8.2ch.net/test/read.cgi/tech/1136690107/943
は(俺の主張では)処理系依存ではない。
http://pc8.2ch.net/test/read.cgi/tech/1136690107/944-945
は処理系依存。
0050デフォルトの名無しさん
2006/02/15(水) 20:54:01了解
0051デフォルトの名無しさん
2006/02/16(木) 00:38:24え? 49 じゃないけど、了解じゃねぇだろ。あんた >46 なんだよな?
「 void* vp の指すメモリ位置に int の 10 を書き込み、
書き込んだ int 型オブジェクトに続くメモリ位置を指すように
vp を更新する」
という処理を対象として。以下の3つの実装が提示されている。
1: ip = static_cast<int*>(vp); *ip = 10; vp = ip + 1;
2: union { void* vp; int* ip; } u; u.vp = vp; *u.ip++ = 10; vp = u.vp;
3: *reinterpret_cast<int*&>(vp)++ = 10;
ここで
1 は http://pc8.2ch.net/test/read.cgi/tech/1136690107/943
2 は http://pc8.2ch.net/test/read.cgi/tech/1136690107/944
3 は http://pc8.2ch.net/test/read.cgi/tech/1136690107/945
という対応になる。
さて、未定義でも処理系依存でも不定でも無い実装を「ポータブル」と呼び、
ポータブルを O ポータブルでないものを X として順に並べると、
>>46 は XXX
>>49 は OXX
と言っていると思う。
まだ「 1 はポータブルか?」という命題が残ってるんじゃね?
ちなみに俺はポータブルだと思う。
0052デフォルトの名無しさん
2006/02/16(木) 00:52:32+ 1
^^^
ISO/IEC14882 5.2.10 Reinterpret cast の 7 を一読されたい
0053デフォルトの名無しさん
2006/02/16(木) 01:04:175.2.9 static cast の 10
005453
2006/02/16(木) 01:06:35reinterpret_cast が絡んでいないように思うのですが。
0055デフォルトの名無しさん
2006/02/16(木) 01:18:24template <typename T, typename P>
T static_cast(P p){ return reinterpret_cast<T>(p) ; }
0056デフォルトの名無しさん
2006/02/16(木) 02:12:43template <typename T, typename P>\
inline T NAME##_cast(P p) { return (T)(p); }
CAST_DEFINITION(static)
CAST_DEFINITION(reinterpret)
CAST_DEFINITION(const)
CAST_DEFINITION(dynamic)
#undef CAST_DEFINITION
0057デフォルトの名無しさん
2006/02/16(木) 02:32:25何のつもりか知りませんが、コンパイルできませんよ。
コンパイルできても意味無さそうだし。
0058デフォルトの名無しさん
2006/02/16(木) 03:23:58マジ
0059デフォルトの名無しさん
2006/02/16(木) 04:03:370060デフォルトの名無しさん
2006/02/16(木) 05:01:27> グローバル スコープを持ち、_ で始まる名前
が、予約されているとあるんですが、
ここで言うグローバルスコープとは
ネームスペース内のグローバル変数も入りますか?
0061デフォルトの名無しさん
2006/02/16(木) 05:05:36入ろうが入るまいが関係ないと思うんだが?
0062デフォルトの名無しさん
2006/02/16(木) 05:29:06入らない。
0065デフォルトの名無しさん
2006/02/16(木) 05:33:23その通り。17.4.3.1.2の1
0066デフォルトの名無しさん
2006/02/16(木) 05:33:460067デフォルトの名無しさん
2006/02/16(木) 05:37:430068デフォルトの名無しさん
2006/02/16(木) 05:42:48006960
2006/02/16(木) 05:55:53テンプレートクラスで参照される static const な感じにしたいデータの配列があるんですが
テンプレート引数に関わらず固定なのでクラス外に出しちゃえばうまくいくかなと思い出したのですが
インタフェースとしての変数じゃないよという意味をこめて _ が付いてます。
0070デフォルトの名無しさん
2006/02/16(木) 06:08:14処理系によっては、_で始まるシンボルを#defineしてたりするから
使わないほうが良いと思うよ。
偶然同じ名前だったときに、エラーが意味不明になるし。
ctype.hとか覗いてみそ。
0071デフォルトの名無しさん
2006/02/16(木) 07:53:090072デフォルトの名無しさん
2006/02/16(木) 09:48:21_で始まる名前は規格で全予約にせず、わざわざ一部だけを予約するよう明記してあるので
私はクラスメンバーにだけ使用している。
コーディング規約で禁止されていない限り、堂々と使用していいと思う。
名前の付け方は規格・規約違反をせず、かつ一貫していることが重要。
0073デフォルトの名無しさん
2006/02/16(木) 16:00:270074デフォルトの名無しさん
2006/02/16(木) 16:25:37例えば、格子点を表すために
typedef std::pair<int,int> point;
としたとき、point::first を point::x の名前でアクセスしたいんですが、
どうすればいいんでしょう?
それなりに大きなプログラムならラッパーを書く気になるんですが、
数百行くらいの小さなプログラムでそれをやるのもなんだかなあという気がして。
0075デフォルトの名無しさん
2006/02/16(木) 16:31:220076デフォルトの名無しさん
2006/02/16(木) 16:33:41とか
int std::pair<int, int>::*const x = &std::pair<int, int>::first;
とか。
0077デフォルトの名無しさん
2006/02/16(木) 16:35:04座標を扱いたいならstd::complex<int>の方がいい希ガス。
0078デフォルトの名無しさん
2006/02/16(木) 17:10:240079デフォルトの名無しさん
2006/02/16(木) 17:10:30std::pairを使うのが悪いと言ってみる。それくらい自作の構造体でいいだろ。
0080デフォルトの名無しさん
2006/02/16(木) 17:21:15おいまてまて、確かに困るのは自分だけかもしれんが
グローバルネームスペースに予約されてるってことは
>>63とやるといつ_fugaが衝突起こしても知りませんよ?
って意味だぞ?
using namespace hoge;を一切やらないならいいかも
しらんが、まあ無難にいくなら使わない方が良い
0081デフォルトの名無しさん
2006/02/16(木) 17:29:01衝突を起こしたら修飾すればいいだろ。そのための名前空間だ。
というか、言語の話とスタイルの話は分けて考えたほうが良くないか?
008274
2006/02/16(木) 17:38:57いまはこれでお茶を濁してるんですが、これだと std::pair<int,int> に関係ない部分にある
int x, first; というコードも通らなくなるので、他の方法が無いものかと思って質問しました。
>>77-79
typedef std::pair<int,int> point; としたのはあくまで例です。
不適切でしたら適当なものを想定してください。
>>76 int std::pair<int,int>::*const x = &std::pair<int,int>::first;
すみません、これの使い方がよくわかりません。教えていただけないでしょうか?
他になんかないでしょうか?
0083デフォルトの名無しさん
2006/02/16(木) 17:43:50C++ の例外処理の「スタックの巻き戻し」という項目について,
具体的にコンパイラがやっていることがつかめません.
教科書的には...
「“スタックを上にたどって”例外ハンドラを探す処理」
と書いてあるのですが, その「スタックを上にたどって」という部分が
いまいちつかめません.
(つづく)
008483
2006/02/16(木) 17:52:56return 文に似ているということまでは解るのですが,
例外処理機構は, どうやって該当する例外ハンドラを見つけ出しているのか...
例外処理は手間のかかる処理だとよく言われているのと,
どのように関連しているのか...
が, 私の中で特に謎めいております.
0085デフォルトの名無しさん
2006/02/16(木) 17:55:50>>>76 int std::pair<int,int>::*const x = &std::pair<int,int>::first;
>すみません、これの使い方がよくわかりません。教えていただけないでしょうか?
それを定義しておいて、
point pt;
pt.*x = 5;
などと使う。
0086デフォルトの名無しさん
2006/02/16(木) 18:25:210087デフォルトの名無しさん
2006/02/16(木) 18:27:59適当なデバッグ環境が使えるなら、コールツリーを見たことがあると思う。
VisualStudioなら「呼び出し履歴」かな。
それを辿るのと(ほぼ)同じことをやっているんでないかな。
どうしても気になるなら、適当な関数に入ったところでスタックをダンプしてみればいい。
プログラムの配置されたアドレスが順に入っているのが見えるはずだ。
つーか、アセンブラ出力を読むのが一番か。
008983
2006/02/16(木) 19:29:58てことは, やっぱり BCC 5.5.2 が吐く
call @__InitExceptBlockLDTC
ていうのは,関数の呼出しごとに, どこかに状態情報を記録してると言うわけですか.
# 関数の入り口でいつも呼ばれてるのね.
そして...
push 0
push 0
push 0
push 0
push 0
push 0
lea eax,dword ptr [ebp-52]
push eax
push offset @@$xt$14MyString@Error
call @_ThrowExceptionLDTC$qpvt1t1t1uiuiuipuct1
add esp,36
これでスローと. orz
0090デフォルトの名無しさん
2006/02/16(木) 19:30:56>>52 で示すべきだった条項は確かにそれで、この点の誤りは認める
そのうえで >>30 を一読されたい
ところで規格を引用して議論しているときの「処理系依存」という用語は曖昧なので
・不適格
・処理系定義
・処理系限界
・文化圏固有
・未定義
・未規定
・拡張
の、どれを指しているのかをはっきり示していただきたい
>>55
そのサンプルにはクラス型でない T へのポインタに対する
static_cast<void*>(T*) と reinterpret_cast<void*>(T*) の相違および
static_cast<T*>(void*) と reinterpret_cast<T*>(void*) の相違のうちの
どれを主張する意図があったのかを拝聴できれば幸いである
現状、あなたの意図は伝わっていない
0091デフォルトの名無しさん
2006/02/16(木) 19:31:21御意
0092デフォルトの名無しさん
2006/02/16(木) 20:07:43>>53じゃないけど、>>30が何を論点だと主張してるのかが分からん。
>の、どれを指しているのかをはっきり示していただきたい
少なくとも俺は、そのうち「不適格」「拡張」以外の何れか一つを満たすものを「処理系依存」と呼んでいた。
「不適格」ってill-formednessのことだよな。
「拡張」という用語は知らないのでなんともいえない。
>現状、あなたの意図は伝わっていない
static_castについての議論にreinterpret_castの項を持ち出した>>52を単に茶化しているだけかと。
0093デフォルトの名無しさん
2006/02/16(木) 22:08:29>>30 の主張は、2つの型 T と U のいずれか一方が void で他方が void でないとき、
(1) 一旦 T* を U* にキャストした後で
(2) T* にキャストし直した
場合の動作が、翻訳処理系もしくは実行環境のいずれの特徴にも依存しないのは
(1) - (2) 間で値を変更していない場合に限るため、
http://pc8.2ch.net/test/read.cgi/tech/1136690107/934 の要求を「ポータブル」に満たす解はなく、
このことに限らず void* が必要となる処理の多くが本質的に処理系に依存するということだ
用語「拡張」については JIS X3014 1.4 処理系の適合の 8 を参照されたい
0094デフォルトの名無しさん
2006/02/16(木) 22:28:38>>30 のどの部分の動作が処理系依存なんですか?
最後に pv = pi を行っている部分ですか?
4.10-2 によると、void* への変換自体は動作が規定されていると思うのですが。
0095デフォルトの名無しさん
2006/02/16(木) 22:35:34その手前でpi++していることが問題。
0096デフォルトの名無しさん
2006/02/16(木) 22:37:45そう
あのコード片に書いた限りの用事なら void* を使う必要はない
0097デフォルトの名無しさん
2006/02/16(木) 22:38:07pi の型は int* なので、インクリメント自体は問題がないですよね。
その前の void* -> int* の結果が問題だということでしょうか?
0098デフォルトの名無しさん
2006/02/16(木) 22:39:41まあ、それはその通りなんですけど、
今問題にしているのは本当に処理系依存なのかどうかということなので・・。
0099デフォルトの名無しさん
2006/02/16(木) 22:40:03-翻訳処理系
+翻訳環境
0100デフォルトの名無しさん
2006/02/16(木) 22:42:38今問題にしているのは http://pc8.2ch.net/test/read.cgi/tech/1136690107/952 の「指導」の妥当性
0101デフォルトの名無しさん
2006/02/16(木) 22:52:30>>>30 の主張は、2つの型 T と U のいずれか一方が void で他方が void でないとき、
void *に対して有効なポータブルな操作は実質的にstatic_cast(とNULL判定)だけだから、
void *と非voidへのポインタを対等に扱ってもしょうがない。
つまり、次のような関数があったとき、
void *func(void *pv)
{
return (int *)pv + 1;
}
この関数のまともな使い方は、有効なint *を渡して、結果をint *にキャストして使うことだけだ。
この使い方は一般に次のように書ける。
int *a = /* something */;
void *b = (int *)func(a);
そして、
assert(b == a + 1);
このassertがポータブルに成立することを確かめてほしい。
>用語「拡張」については JIS X3014 1.4 処理系の適合の 8 を参照されたい
さんくす。
0102101
2006/02/16(木) 22:53:38訂正
int *b = (int *)func(a);
0103デフォルトの名無しさん
2006/02/16(木) 23:02:22int i = 0;
int* pi1 = &i;
void* pv = pi1;
// ここから 30 の後半と同じような処理
int* pi2 = pv;
// pi1 と pi2 の値が同じになることは 5.2.9-10
// pi1 の値は正常な int* の値であるので、pi2 も同様
++pi2;
// pi2 の値は問題なくインクリメントされる
pv = pi2;
// ここで 30 終了
あとは、pv の使い方に依存するだろうけど、
pv を int* にキャストして使うのは問題ないよね。
何か見落としある?
0104デフォルトの名無しさん
2006/02/16(木) 23:03:09「このassertがポータブルに成立する」のは、
「この使い方は一般に次のように書ける」からに過ぎない
すでに >>96 で述べたように、>>101 のコード例には void* を使う必要性が全くない
void* を使う必要性のある例を示さないと、問題の核心をつかないまま
不毛なやり取りから脱却しえないと予言する
0105デフォルトの名無しさん
2006/02/16(木) 23:10:44今この場にいる人は、
純粋に標準を見ながらポータブルかそうじゃないかを吟味してる人と、
>>104 や >>100 のように必要性、妥当性を絡めている人がいると思う。
で、大体前者の人は、後者の言う必要性等をどうでもいいと思ってる(多分)。
だから話がかみ合わないんじゃないかと思うのですが。
あと、どうしても void* が必要になる場合として
operator new 関連があるのではないでしょうか。
0106デフォルトの名無しさん
2006/02/16(木) 23:13:46>「この使い方は一般に次のように書ける」からに過ぎない
「過ぎない」って…
俺が言った「一般に」は「必ず」という意味だが。
>すでに >>96 で述べたように、>>101 のコード例には void* を使う必要性が全くない
そんなことはない。
前すれでも指摘したが、>>101のfuncをコールバックとして渡すことを考えてみてくれ。
逆に言うと、ある種のコールバック(templateと組み合わされて静的に解決されるものを含む)以外に
void *をポータブルに使える(かつ、void *を使う必要がある)例を俺は知らない。
0107デフォルトの名無しさん
2006/02/16(木) 23:17:31>前すれでも指摘したが、>>101のfuncをコールバックとして渡すことを考えてみてくれ。
それを考えるのは主張者であるあなた自身の領分であって、
こちらは具体例を示して頂かないとあなたが何を主張しているのかは決定できない
0108106
2006/02/16(木) 23:18:37でも、その場合も同じことかと。
void *a = operator new(100);
void *b = (int *)a + 1;
のとき、
assert((int *)b == (int *)a + 1);
0109デフォルトの名無しさん
2006/02/16(木) 23:23:23void *b = (int *)a + 1;
/* この間に複数の型の sizeof やバウンダリに依存する処理がない */
assert((int *)b == (int *)a + 1);
同じもの同士をいくら比べても例になっていない
0110デフォルトの名無しさん
2006/02/16(木) 23:32:30了解。forループを一般化するgeneric_forを考えよう。
この関数は、void *の初期状態とbool (*)(void *)の継続判定関数とvoid *(*)(void *)の状態更新関数と
void (*)(void *)のループ本体を取って、void *型のループ変数を使ったforループをエミュレートする。
void generic_for(void *init, bool (*pred)(void *), void *(*update)(void *), void (*body)(void *))
{
for(void *data = init; pred(data); data = update(data)) body(data);
}
generic_forを使って、intの配列の各要素(0が終端)を表示する関数printを書くことができる。
bool print_pred(void *pv) { return *(int *)pv; }
void print_body(void *pv) { std::cout << *(int *)pv << ' '; }
void print(int *a)
{
generic_for(a, print_pred, func, print_body); /* funcは>>101のもの */
}
これが「void *が必要で、かつポータブル」な例になってると思うがどうだろう。
この例自身は相変わらず役に立たないけど、書き換えて意味のある例を作るのは難しくないはず。
0111デフォルトの名無しさん
2006/02/16(木) 23:38:50いろいろ問題あるだろうが
とりあえず良く頑張った
そろそろスレの流れ戻そうぜ
0112デフォルトの名無しさん
2006/02/16(木) 23:46:02議論は詰めていかないと。
0113デフォルトの名無しさん
2006/02/16(木) 23:53:46残念ながら、これも void* は必要ない
単一のメモリ領域上に int 以外の型が混在しない以上、
回避〜改善すべき処理系の特徴に依存する動作が存在しない
0114デフォルトの名無しさん
2006/02/16(木) 23:54:18てっきり水掛け論してるんだとおもったよ (´・ω・`)
いっぱい置いておきますね っ
(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・`)
(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・`)
(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・`)
(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・`)
(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・(´・ω・`)
0115デフォルトの名無しさん
2006/02/17(金) 00:04:11>残念ながら、これも void* は必要ない
>>110のgeneric_forは一種の「アルゴリズム・ライブラリ」のコードで、
print_pred, prent_body, print, funcがそのユーザのコードだと考えてくれ。
「アルゴリズム・ライブラリ」の作者は、ユーザがforループの状態変数として
どんな型(この場合はint *)の変数を望むか知らない。
「アルゴリズム・ライブラリ」をポータブルにしたいのなら、変数をvoid *で扱うしかない。
(テンプレートを使えば話は別だが、コードの膨張を押さえるために
テンプレートを使わずにvoid *を使うのは一つのテクニックだ)
>単一のメモリ領域上に int 以外の型が混在しない以上、
>回避〜改善すべき処理系の特徴に依存する動作が存在しない
単一の領域上に一つの型しか存在しなくても、void *を使う必要があることもある。
この例もそうだし、qsortもそうだ。
0116デフォルトの名無しさん
2006/02/17(金) 00:05:430117デフォルトの名無しさん
2006/02/17(金) 00:11:34C の qsort はテンプレートがないからああなっただけ
テンプレートによる C++ のみからなるコードの膨張対策には継承やインラインを使う
(逆効果になりやすいので注意を要するが、それこそ処理系の特徴に依存する部分が大きい)
0118デフォルトの名無しさん
2006/02/17(金) 00:13:53「ポータブルかどうか」の話を済ませてから必要性について考えてくれないか?
前者の議題が核心に近づくたびに必要性の話題にすり変わってしまって
正直ウザイ。
0119デフォルトの名無しさん
2006/02/17(金) 00:15:39途中から参加した人に過去ログ全部読んでこいとまでは言いたくないが
そもそもの発端くらいは押さえてきて欲しい
だからこそ前スレでの発言へのリンクを意図的に多用している
0120デフォルトの名無しさん
2006/02/17(金) 00:16:23どう書くのが、「好ましい」かは、また別の話かと。
>テンプレートによる C++ のみからなるコードの膨張対策には継承やインラインを使う
Boostはtype erasureと称してvoid *を使っている。
0122デフォルトの名無しさん
2006/02/17(金) 00:22:21必要性について言われても無視すればいいだけでは。
というわけで、ポータビリティについて。
http://pc8.2ch.net/test/read.cgi/tech/1136690107/934の問題は
>>103 のようにやればポータブルなのでは。
要するにはじめの vp の値が、正常な int* の値から変換されたものであれば特に問題なし。
0123デフォルトの名無しさん
2006/02/17(金) 00:27:12俺は http://pc8.2ch.net/test/read.cgi/tech/1136690107/952 だよ。
「 void* を使う必要性」や「 qsort の現在の有用性」なんかは興味無い。
個人的には議論の余地さえ感じない。
0124デフォルトの名無しさん
2006/02/17(金) 00:28:33void* を使うのをやめろと言っていいなら当然そうしていた
それができない理由に根本的な処理系依存がある ・・・と読んだが、違うだろうか
0125デフォルトの名無しさん
2006/02/17(金) 00:39:59何を言いたいのかよくわからないのですが、
前スレの 934 が void* を使わざるを得ない理由に
処理系依存があるということ?
それでも何が言いたいのかよくわからないので
もう少しわかりやすく書いてもらえませんか?
0126デフォルトの名無しさん
2006/02/17(金) 00:41:40じゃあ、お前の主張をまとめるとこれでいいか?
http://pc8.2ch.net/test/read.cgi/tech/1136690107/934 がvoid *を使っているのは根本的な処理系依存のためであろう。
したがって、これへの回答として提示されたどの方法を使ったとしても、結果として処理系依存は免れ得ない。
0127デフォルトの名無しさん
2006/02/17(金) 00:46:08int オブジェクトに対して int 以外の型のポインタでアクセスまたはその逆を行い
あるいは他言語とリンクする場合などが C++ ポインタから型を取り除く主な理由で
共用体の抱える問題と根は同じ
ここで共用体を持ち出す根拠は
http://pc8.2ch.net/test/read.cgi/tech/1136690107/944
0128デフォルトの名無しさん
2006/02/17(金) 00:46:26そのとおり
0129デフォルトの名無しさん
2006/02/17(金) 00:57:28それなら異論はない。
もつかれ。
0130デフォルトの名無しさん
2006/02/17(金) 00:57:29「正常な int* の値から変換されたものであれば」という
条件付けは無くても、ポータブルであると言えると思う。
void* vp = malloc(sizeof(int)*2); // int[2] を動的確保
int* ip = static_cast<int*>(storage); // 確保した配列の先頭を指すポインタを作成
vp = static_cast<int*>(vp) + 1; // void* から作成した int* に + 1 という演算を加えて void* に戻す。
assert(vp == (ip + 1)); // 常に成り立つ
この後、 short* sp = static_cast<short*>(vp) などとして sp を使用しても、
ip と同等に正当だと言えるだろう。
これがポータブルでないと言うのなら、このような malloc() による
オブジェクトの動的確保をすべてポータブルでないと言うことになると思う。
C/C++ プログラマが十分なサイズを持つメモリ領域を void* として取得し、
その領域に int なり int[2] なり short なり、好きな型のオブジェクトを配置することは
認められており、 malloc() の存在意義でもある。
0131130
2006/02/17(金) 00:58:31- int* ip = static_cast<int*>(storage); // 確保した配列の先頭を指すポインタを作成
+ int* ip = static_cast<int*>(vp); // 確保した配列の先頭を指すポインタを作成
0132デフォルトの名無しさん
2006/02/17(金) 01:02:12sp++; をお忘れかな? それとも故意?
0133デフォルトの名無しさん
2006/02/17(金) 01:03:19無論、知らなければ自分の無知ということで、何も書か無くて結構。
対象はANSI-Cでいいよ
ポインタ変数の実体とは何か?
ポインタ変数に"メモリ上における大きさ"は存在するか?
この2点、分かっている人がいたら、たとえ嘘でもいいから書きなぐってください
0134デフォルトの名無しさん
2006/02/17(金) 01:06:39static_cast よりも軽い型変換(boost::implicit_castレベル)しか
行っていないのに、共用体(より強力な型変換)を持ち出す根拠がわかりません。
> ここで共用体を持ち出す根拠は
> http://pc8.2ch.net/test/read.cgi/tech/1136690107/944
共用体の場合どうなるかということを言っているだけで
ここで共用体を持ち出す根拠には全くなっていません。
また、http://pc8.2ch.net/test/read.cgi/tech/1136690107/944
がポータブルか否かも議論の余地が残っているように思います。
>>132
インクリメントに関しては >>103 のコメント部分に反論をお願いします。
0135デフォルトの名無しさん
2006/02/17(金) 01:07:01> ポインタ変数の実体とは何か?
その答えはポインタで無い変数と同じ。
> ポインタ変数に"メモリ上における大きさ"は存在するか?
その答えはポインタで無い変数と同じ。
0136デフォルトの名無しさん
2006/02/17(金) 01:07:02整数
>ポインタ変数に"メモリ上における大きさ"は存在するか?
存在する
0137デフォルトの名無しさん
2006/02/17(金) 01:08:03意味がわからん。
あんた、ずーっとそうだが、相手のエスパー能力に依存しすぎ。
自分以外が読んだときのことを考えて書いてくれ。
0138デフォルトの名無しさん
2006/02/17(金) 01:08:360139デフォルトの名無しさん
2006/02/17(金) 01:11:25現在に危機を感じてくれ。
0140デフォルトの名無しさん
2006/02/17(金) 01:19:06>対象はANSI-Cでいいよ
よくない
C スレへどうぞ
>>134
型情報を除去することの何が「軽い」のかが説明されていないので答えようがないが
とりわけ C++ に於いて型システムを騙すことは危険度の最も高い部類に属することであると主張する
void* vp = malloc(sizeof(int)*2); // int[2] を動的確保
int* ip = static_cast<int*>(storage); // 確保した配列の先頭を指すポインタを作成
vp = static_cast<int*>(vp) + 1; // void* から作成した int* に + 1 という演算を加えて void* に戻す。
assert(vp == (ip + 1)); // 常に成り立つ
/*この後、*/ short* sp = static_cast<short*>(vp); /* などとして sp を使用しても、 */
vp = static_cast<short*>(vp) + 2; // void* から作成した short* に + 2 という演算を加えて void* に戻す。
assert(vp == (sp + 2)); // 常に成り立つ
assert(vp == (ip + 1)); //ip と同等に正当だと言えるだろう。
か
0141デフォルトの名無しさん
2006/02/17(金) 01:19:52> ポインタ変数の実体とは何か?
アセンブラでもシコシコやってろ
> ポインタ変数に"メモリ上における大きさ"は存在するか?
アドレスを保存する必要があるとしればそりゃコンピュータに関係する罠
アドレスがオフセット位置で分かるってんなら、わざわざポインタにメモリ使って保存なんてしない
配列なんかそうだろ?
> 対象はANSI-Cでいいよ
ANSI-Cって実装まで含んでいたっけか
0142デフォルトの名無しさん
2006/02/17(金) 01:30:070143デフォルトの名無しさん
2006/02/17(金) 01:31:28…それは見なかったことにしてやろうぜ…
0144デフォルトの名無しさん
2006/02/17(金) 01:33:00後半のコードは sp + 2 が malloc() で確保したサイズを
超えたメモリ位置を指すことになるので不正と言えるだろう。
でもそれは void* についての議論とは何の関係も無いよ。
>>142-143
new だと void* が出てこないからサンプルにならないだろ。
あと >>137
0145デフォルトの名無しさん
2006/02/17(金) 01:33:20入門書的にはメモリ上の記憶位置を示す値を格納する入れ物.
>ポインタ変数に"メモリ上における大きさ"は存在するか?
アドレス用の入れ物の大きさはホストマシンに依存する.
大きさというのを位置の差として考えると,
ptrdiff_t 型というので測れる.
C++ でも ptrdiff_t 型が存在するから, 言葉上, それで通用する.
私だけかもしれないけれど.
0146デフォルトの名無しさん
2006/02/17(金) 01:35:38>でもそれは void* についての議論とは何の関係も無いよ。
あなたが指摘したことが関係ないだけ
0147デフォルトの名無しさん
2006/02/17(金) 01:36:30実はちょっとだけ関係あるが、あの重箱の隅を見事言い当てられるだろうか
0148デフォルトの名無しさん
2006/02/17(金) 01:37:36>超えたメモリ位置を指すことになるので不正と言えるだろう。
番兵アドレスだから, 読んだり書いたりしなければオッケ.
0149デフォルトの名無しさん
2006/02/17(金) 01:38:24処理系依存の例は良くないと思う。
0150デフォルトの名無しさん
2006/02/17(金) 01:38:46ご名答
0151デフォルトの名無しさん
2006/02/17(金) 01:39:21それは、>>122 でいう
> 要するにはじめの vp の値が、正常な int* の値から変換されたものであれば
という前提に反している。
だから、正当かどうかはわからん。
僕の主張はこの部分のみです。
> void* vp = malloc(sizeof(int)*2); // int[2] を動的確保
> int* ip = static_cast<int*>(storage); // 確保した配列の先頭を指すポインタを作成
> vp = static_cast<int*>(vp) + 1; // void* から作成した int* に + 1 という演算を加えて void* に戻す。
> assert(vp == (ip + 1)); // 常に成り立つ
>>140 の前半
様々なキャストの中で一番危ない、reinterpret_cast の例を出されても・・・
ということだったのですが、忘れてください。
0152デフォルトの名無しさん
2006/02/17(金) 01:40:330153デフォルトの名無しさん
2006/02/17(金) 01:42:51>>130 は「 >>51 の 1 はポータブルである」という命題が真であると言うための論拠だよ。
あんた結局この命題についてはどういう立場なのさ?
>>147,148,150
は?これが「ご名答」?
sizeof(int) == (sizeof(short) * 2) である場合に限るんじゃないの?
0154デフォルトの名無しさん
2006/02/17(金) 01:42:57その引用の範囲のみに限定すると void* を使うこと自体が異常
非常に悪いスタイルの strictly conforming program というだけ
0155デフォルトの名無しさん
2006/02/17(金) 01:44:50ポータビリティの議論がしたい人には無視されるだけ。
0156デフォルトの名無しさん
2006/02/17(金) 01:47:00これ以上の無駄は無い
どんどんスレを消化していってくれたまえ
0157デフォルトの名無しさん
2006/02/17(金) 01:50:03同じものをいくら比べても自明なだけで
このやりとりの中で問題になっていることに
何ら影響しない
「ご名答」は 148 氏のように瞬殺できる人には
説明がいらないと判断して端折っているもので
いわば将棋の投了図のようなもの
0158デフォルトの名無しさん
2006/02/17(金) 02:02:48うまく会話になってないな。
「同じもの」って何と何?
「自明」って、何が?
「このやりとり」って、どこを指してるの?
で、 >>148 は sizeof(int) == (sizeof(short) * 2) の場合に限るんじゃないの?
ポータビリティの話をしてるときにその前提は無いと思うんだけど。
0159デフォルトの名無しさん
2006/02/17(金) 02:05:04同じ変換経路を通ったもの同士が同じことを「ポータビリティの例だ!」と噛みつかれても・・・
0160デフォルトの名無しさん
2006/02/17(金) 02:07:53質問されたことには答えるのが会話の基本です。
あなたにはその基本が欠けている。
0161デフォルトの名無しさん
2006/02/17(金) 02:10:03ちゃんと答えています
期待した答えと違う事実を否定することこそ非難されるべき人格上の特徴だが
その方面を始めるなら即座に離脱する
0162148
2006/02/17(金) 02:10:09よく見てみるとそうでした. すみません.
にしても, キャストの嵐は見づらい;;
0163デフォルトの名無しさん
2006/02/17(金) 02:10:11皆さんくれぐれもご注意してください
m9(`・ω・´)9m そこのオマエだ そうそう
0164148
2006/02/17(金) 02:13:10(亀レス)
たしかに.
0165デフォルトの名無しさん
2006/02/17(金) 02:16:070166デフォルトの名無しさん
2006/02/17(金) 02:20:10超えたメモリ位置を指すことになるので不正と言えるだろう。
超えたメモリ位置を指すことになるので不正と言えるだろう。
0167デフォルトの名無しさん
2006/02/17(金) 02:20:410168デフォルトの名無しさん
2006/02/17(金) 02:24:010169午後の紅茶
2006/02/17(金) 02:25:39ソースコードにDirectX8.0のヘッダファイルが使われているのですが、
ヘッダファイルが入手できません。
DirectX8.0が使われているソースコードをコンパイルする方法がありましたら
教えてください。
0170デフォルトの名無しさん
2006/02/17(金) 02:26:26お前、SDKって知ってるか?
0171午後の紅茶
2006/02/17(金) 02:34:05d3d8.hやd3dx8.hが見つからないとエラーが出てしまいます。
0172デフォルトの名無しさん
2006/02/17(金) 02:41:56スレ違い。↓逝け。
【C++】 DirectX初心者質問スレ Part7 【C++】
http://pc8.2ch.net/test/read.cgi/tech/1132216611/
0173デフォルトの名無しさん
2006/02/17(金) 02:45:43http://pc8.2ch.net/test/read.cgi/tech/1136690107/952
にイチャモンつけてるのは一人だったの?
会話の難しい彼意外に居たら意見を述べて欲しいんだけど。
0174デフォルトの名無しさん
2006/02/17(金) 03:12:11好きな絵を描いて右下の送信&交換ボタン(Submit drawing)を押すだけ
国内 http://rakugake.ninja-x.jp/
海外 http://www.sketchswap.com/
Un Do、消しゴムは無し。交換した絵が手抜きだったとしてもヘバらないでいこう
0175デフォルトの名無しさん
2006/02/17(金) 09:16:22金ができたんで手元に置いときたくなったら、第三版(の翻訳?)がでるせいかAmazonじゃもう買えないんですね。
どこか買える所しりませんかorz
0176デフォルトの名無しさん
2006/02/17(金) 12:48:450177デフォルトの名無しさん
2006/02/17(金) 14:10:57家が極貧とかだったらスマン。
0178デフォルトの名無しさん
2006/02/17(金) 14:25:29世の中にはそういう奴もいるよ。
俺も学生時代は貧乏だったから、お前らの書き込みにカチンときた。
0179デフォルトの名無しさん
2006/02/17(金) 15:11:17「買えない」って話になるんじゃないかと。
学費とかと同じカテゴリで考えて払えないならご愁傷様
0180デフォルトの名無しさん
2006/02/17(金) 15:20:38コンピューター関連は親には完全に趣味と思われてたな
0181デフォルトの名無しさん
2006/02/17(金) 15:56:12貧乏でも月1冊ぐらいは買えると思うけど。
0182デフォルトの名無しさん
2006/02/17(金) 15:59:34必要性があるかどうかや、望ましいコード例かどうかは論点から除外した上で
適宜ISO/IEC 14882:1998等の仕様書を参照しながら
誰かまとめてもらえると嬉しいな。
できれば、int*ではなく、基本型・関数・POD型・クラス型・派生クラスのメンバ関数
などのポインタの場合で分けてもらえると神です。
0183デフォルトの名無しさん
2006/02/17(金) 16:46:03それでも買えないよ。毎月 8000 円に食費抑えてやっと生活できてたのに。
そういう人間だっているんだよ…。
0184デフォルトの名無しさん
2006/02/17(金) 16:48:210185デフォルトの名無しさん
2006/02/17(金) 16:57:19,r'" `ヽ.
__,,::r'7" ::. ヽ_
゙l | :: ゙) 7
| ヽ`l :: /ノ )
.| ヾミ,l _;;-==ェ;、 ,,,,,,,,,,,,,,,_ ヒ-彡|
〉"l,_l "-ー:ェェヮ;::) f';;_-ェェ-ニ ゙レr-{ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ヽ"::::''  ̄´.::;i, i `'' ̄ r';' } | 8000円は喰い杉
. ゙N l ::. ....:;イ;:' l 、 ,l,フ ノ | 2000円で食いつなぐ
. |_i"ヽ;:...:::/ ゙'''=-='''´`ヽ. /i l" < のが昔のカメラ小僧なんだよな今のデブヲタは昔の
.| ::゙l ::´~===' '===''` ,il" .|'". | カメラ小僧を知らないから困る
.{ ::| 、 :: `::=====::" , il | \________
/ト、 :|. ゙l;: ,i' ,l' ノト、
/ .| \ゝ、゙l;: ,,/;;,ノ;r'" :| \
'" | `''-、`'ー--─'";;-'''" ,| \_
0186デフォルトの名無しさん
2006/02/17(金) 17:12:00俺も学生のころとかは貧乏人だったんで技術書が買えんかった。
でも、当時はコンピュータ関係の書籍の絶対量も少なかったし
学校の図書室でコンピュータ関係の本を入荷希望したら
かなり高い確率で買ってもらえたし、他に借りるヤツが
いなかったから連続で借り続けても苦情が来なかったし
ほぼ独占状態だったなぁ。
・・・同じ手が使えるかもしれんし、駄目もとで図書室行ってみ?
0187デフォルトの名無しさん
2006/02/17(金) 17:34:58ただ同じコードを書く手間が減るだけ?
0188デフォルトの名無しさん
2006/02/17(金) 17:45:24インタフェイス((純粋)仮想関数とか入ってるクラス)の実装は名前と意味を示すことが出来る
クラスの継承は名前と意味と機能を引き継ぐことが出来る
もっと言えば、継承は一つの識別子の様に働く(あるclassを継承している⇒あるclassの様に扱える、他)
0189デフォルトの名無しさん
2006/02/17(金) 17:45:47いろんな理由があるけど、せめて
「ただ同じコードを書く手間が減る」
↓
「同じコードを同じように修正する手間が減る」
ぐらいは連想してくれ。
0190デフォルトの名無しさん
2006/02/17(金) 20:22:09#include <stdio.h>
#include <string.h>
class A {
public:
char m_str[10];
};
class B {
public:
A m_data;
inline A getData( void ) const{ return m_data; }
};
int main(void)
{
B classB;
strncpy( classB.getData().m_str, (char*)"123456789", 10 );
printf("%s\n", classB.getData().m_str);
return 0;
}
以上のコードで詰まってるんです.
どこが悪いのかわからないのですが教えていただけないでしょうか.
0191デフォルトの名無しさん
NGNG>strncpy( classB.getData().m_str, (char*)"123456789", 10 );
>printf("%s\n", classB.getData().m_str);
ヒント: コピーコンストラクタ
0192デフォルトの名無しさん
2006/02/17(金) 20:31:260193デフォルトの名無しさん
2006/02/17(金) 20:32:130194190
2006/02/17(金) 20:33:24A getData( void ) const{ return m_data; }
を実行したときに, コピーコンストラクタが起動されるのに,
コンストラクタらしきものが無いからコピーされない,
という解釈でよろしいでしょうか??
0195190
2006/02/17(金) 20:40:13症状は, 上記のコードを実行しても何も表示されないというものです.
A* getData( void ) const{ return &m_data; }
の方では上手くいくんだけどなぁ(ぶつぶつ).
0196デフォルトの名無しさん
NGNGまあこの件に関して言えば、コピーコンストラクタを定義するのも解法の一つ。
一般的には
>inline A getData( void ) const{ return m_data; }
ここを何とかするべきのような気がしないでもない。
0197デフォルトの名無しさん
NGNGヒント: 参照
0198190
2006/02/17(金) 20:49:01inline A& getData( void ) const{ return m_data; }
とすると
エラー E2357 test.cpp 13: 参照は 'const A' で初期化されているが
'A' 型の左辺値が必要(関数 B::getData() const )
と. 今度はエラーの意味がわからなくて困ってます.
0199デフォルトの名無しさん
NGNGあーめんどくせえ。
ヒント: const
0200デフォルトの名無しさん
2006/02/17(金) 21:01:13A getData( void ) const{ return m_data; }
だと、m_dataをコピーした一時オブジェクトが返される。
その返された一時オブジェクトに変更を加えてもm_dataには反映されない。
0201190
2006/02/17(金) 21:02:12const 除ければ良かったのか.
…というかこんな浅い解釈でいいのかな.
問題がまだ残ってますが,
ともかくありがとうございました.
0203デフォルトの名無しさん
2006/02/17(金) 21:04:06C言語ポインタ完全制覇という本に
C++は奥が深く、こんな言語をプロジェクトで採用するとプログラマーがついて来れない。
こんな言語の全貌を理解できる人がいるのか。とにかく厄介な言語である。
という感じのことが書いてあったんですが、C++を使って開発するプロジェクトはマイナーなのですか?
今のところクラスを一通り勉強しただけですが、そんなに難解な言語だという印象はないのですが・・・
0204デフォルトの名無しさん
NGNG若干不安だ・・・
A& const getData()
const A& getData()
A& getData() const
がそれぞれどういう違いがあるのか勉強しる。
0205デフォルトの名無しさん
2006/02/17(金) 21:05:12>>51 OXX で決まり。
これじゃ不満か?
0207デフォルトの名無しさん
2006/02/17(金) 21:09:36C++の全てを理解する必要はないよ。
0208デフォルトの名無しさん
2006/02/17(金) 21:12:19不満だけど同じ説明を繰り返すのが面倒なんでやらない
0209デフォルトの名無しさん
2006/02/17(金) 21:14:590210190
2006/02/17(金) 21:15:49何気に気になったので, 気づいた事をカキコ.
> A getData( void ) const{ return m_data; }
>だと、m_dataをコピーした一時オブジェクトが返される。
>その返された一時オブジェクトに変更を加えてもm_dataには反映されない。
この原則は, inline 指定した関数に対しても変わらないと...
0211デフォルトの名無しさん
2006/02/17(金) 21:17:43inline指定したからって挙動が変わったら大変だ罠。
ついでにつっこんでおくと、inlineをつける場所が違うし、
クラス宣言の中に直接定義を書いたメンバ関数は、自動的にインライン扱いされる。
(インライン化されるかどうかはコンパイラの判断だけど)
0212デフォルトの名無しさん
2006/02/17(金) 21:22:32inline ってつける必要あるんですか?
0213190
2006/02/17(金) 21:23:09わたしゃてっきり
inline A getData( void ) const{ return m_data; }
ってのは
m_data
みたく置き換わるのかと...
0215デフォルトの名無しさん
NGNGinline修飾は#defineのようにプリプロセスとして動く物ではない。
「インライン化される」というのはコンパイルされたコードが出現のたびに埋め込まれる
(スタックを消費する呼び出し手順なしに実行される)ことが期待されるということ。
実際にそうなるかならんかは処理系依存だし、そうしなければならないわけでもないし
そうなったかどうかを通知する義務も無いのでinlineと付けたからって挙動が変わって
たら大変だ。
0216デフォルトの名無しさん
2006/02/17(金) 21:41:06確かに馬鹿でかくて所々無駄に難しい箇所が見られる言語だが
そんなんでビビってちゃ何も手につかないよ
何屋になっても OS やバスの仕様みたいに強烈複雑なのが出てくるのに
たかが C++ 程度でってのが正直なところ
また新しいのを憶えなきゃってときは確かにガクブルだけど
及び腰じゃ何も動かせない
腹くくって正面から向き合うだよ
>>209
>おまえはもういい。
はいはい
>しゃべるな。今日は早めに寝ておけ。
しゃべろうが寝ようが
あなたの指図は受けない
0217デフォルトの名無しさん
2006/02/17(金) 21:43:130218190
2006/02/17(金) 21:47:49納得いたしました.
inline 修飾子(?)の効用については,
一昔前の register 程度だと言うことですね.
そのうち inline も使われなくなるときが来るのだろうか.
わかりやすい説明ありがとうございました.
0219デフォルトの名無しさん
2006/02/17(金) 21:50:44漏れがかつて書いたメモリプールのコードはポータブルでないと確定した(死
0220デフォルトの名無しさん
2006/02/17(金) 21:54:39なんか変
ポータブルではないからこそデフォルトの実装やサードパーティのライブラリがなくて
あなたが書くことになったんじゃないの?
0221デフォルトの名無しさん
2006/02/17(金) 21:55:12どんなコード?
0222デフォルトの名無しさん
2006/02/17(金) 21:56:54あと、現状でも手動でインライン展開しやすくするよう実装をコピペして増やしていると
実にばからしいと思う。
処理系によっては、事実上強制する指定もできるが。
0223デフォルトの名無しさん
2006/02/17(金) 22:27:53C++ でも C でも、ある程度は実装レベルを想像しながら書いていけるのは
安心感があっていいけど、何か特定のシーケンスを強く期待する場合は
その部分はアセンブラで書いたほうがいいとも思う
あくまでトンデモなコードを吐かれないように気をつけて書くってだけで
それ以上の期待は俺はしてないけど、どうかな
0224デフォルトの名無しさん
2006/02/17(金) 23:04:000225デフォルトの名無しさん
2006/02/17(金) 23:24:560226190
2006/02/17(金) 23:28:39const A& getData( void ) const{ return m_data; }
とすると上手くいった. ということは,
const{ ... }
とすると, 戻り値が const 扱いになるってことだろうか.
inline キーワードをつい付けたくなるところといえば, Set, Get 関数.
それ以外の関数にはインライン展開して欲しくない.
てのは言いすぎか;;
>>255
__forceinline てのが, サクラエディタのコードで使われてたのは
それのことか...
0227デフォルトの名無しさん
2006/02/17(金) 23:34:10そのあたり(204)の話は、ググってもすぐ見つかるし、まともな本なら
調べればすぐわかるよ。
0229デフォルトの名無しさん
2006/02/17(金) 23:48:30多くのコンパイラでなにがしかオプション指定があるのは知ってるけど
>>222 が言ってるのはそういうことじゃないだろ
最後の一行はもちろん読んでるよな
0230デフォルトの名無しさん
2006/02/18(土) 00:07:52メンバ関数の括弧の後のconstはメンバを書き換えないということから、
thisがconstなポインタとして扱われるという効果がある。
0231190
2006/02/18(土) 00:35:21>thisがconstなポインタとして扱われる
納得いたしました.
const T *foo;
とするとコンパイラは,
*foo, foo->
という記述に対してエラーを出すということと併せて.
>>204 の最初の二つは,
ポインタ * の読み方に似てるからどうにか自力で解りそう.
0232デフォルトの名無しさん
2006/02/18(土) 01:25:06その本の著者が、
「そんなに難しい言語を解説しちゃう俺って天才w」
って読者に偉ぶってるだけ
0233デフォルトの名無しさん
2006/02/18(土) 01:43:31っていう意味だろとマジレス
0234デフォルトの名無しさん
2006/02/18(土) 01:45:05それだけのこと
0235デフォルトの名無しさん
2006/02/18(土) 01:48:13今読んでるけど、その辺のことも書いてあった。
0236デフォルトの名無しさん
2006/02/18(土) 01:49:52は、inlineキーワードについてです。
0237デフォルトの名無しさん
2006/02/18(土) 01:58:34VCだけ?
それとも俺の勘違(ry
0238デフォルトの名無しさん
2006/02/18(土) 02:04:41規格では何も決まってない。
0239デフォルトの名無しさん
2006/02/18(土) 02:32:010240190
2006/02/18(土) 05:11:05Effective C++ って,
『Accelerated C++』 + 『プログラミングC++第3版』
のペアを放っておいてでも読むべき!
といわれるほど内容が濃いのかなと,
半信半疑な私なのですが, 世間的にはどうなんでしょう.
0241デフォルトの名無しさん
2006/02/18(土) 05:49:52Effective C++は「C++でより良いプログラムを組む方法」を学ぶための本であり、
「C++そのもの」の基礎については既に読者が理解している前提で書かれている。
だから「まだ自分は言語の基礎からして怪しいな〜」と思うなら、
その「ペア」をまずこなすべきかと。まぁ俺なりの意見として。
0242デフォルトの名無しさん
2006/02/18(土) 12:06:10それともstd::copyに統一してたりするんでしょうか?
0243デフォルトの名無しさん
2006/02/18(土) 12:44:58放っておいてなんて言わずに全部読め
0244デフォルトの名無しさん
2006/02/18(土) 13:29:55本読むの遅いか読む時間が無いと勘違いしてる人?
とりあえず流し読みでいいから全部目を通して、その後熟読するようにすると時間節約できるよ。
通勤通学の時間とかはあんまりおすすめじゃないけど、寝る前の1時間を読書だけに当てればその3つなら流し読みで
1週間かからないし。(全部理解するのでなくて何となくこんな事がこの辺りに書いてあったと覚える程度でいい)
0245デフォルトの名無しさん
2006/02/18(土) 15:05:27memcpy()などのレガシーな関数は、ポインタを生で扱わないといけないようなとき以外は封印している漏れガイル。
0246デフォルトの名無しさん
2006/02/18(土) 15:09:34迷ったらstd::copy。
std::memcpyは組み込み型やPODにしか使えない。
いいトコ取りする方法もある。
http://www.kmonos.net/alang/boost/classes/enable_if.html
0247190
2006/02/18(土) 16:46:49たしかに本読むの遅い方です.
PG本を買うときに不安になることで,
持ってる本に書いてあることとか, 熟読すれば気づけることとか,
「使ってりゃわかるでしょ」的なこととかが
つらつらと書かれてある本なのかもというのがある.
# とはいえさすがに 「プログラミング作法」を買うときは即買いだった.
『時間ねぇー!』とかそういうんじゃなくて.
0248デフォルトの名無しさん
2006/02/18(土) 19:51:30//Primary Class
template <typename T>
class C
{
T value ;
public :
C(T const &val) : value(val) {}
void print(void) { std::cout << "Generic value : " << value << std::endl ; }
} ;
//C<int>::print()だけを特殊化、ただし、わざとtemplate<>をコメントアウト
//template <>
void C<int>::print() { std::cout << "Specialized value : " << value << std::endl ; }
main()
{
C<int> c(100) ;
c.print() ;//問題なし
}
C++ Templatesという本によると、
メンバの特殊化にも、template<>プレフィクスをつけなければならないと書かれているのですが。
0249デフォルトの名無しさん
2006/02/18(土) 22:17:38のようにnewしたインスタンスを参照で受けることはできますか。
0250デフォルトの名無しさん
2006/02/18(土) 22:49:19俺のところではこういうことができた。
Hoge& foo = *new Hoge;
delete &foo;
だが、これがやっていいことなのかどうか分からない。
0251デフォルトの名無しさん
2006/02/18(土) 22:54:11多分問題ないと思う。
0252デフォルトの名無しさん
2006/02/19(日) 00:14:28動作に問題は無いだろうが、可読性に問題があると思う。
std::auto_ptr<Hoge> p(new Hoge);
Hoge& foo = *p;
こんなんじゃダメなの?
0253デフォルトの名無しさん
2006/02/19(日) 00:18:37g++ ではコンパイルできなかったので、よくない。
本題ではないが main() の戻り値を省略してるのもコンパイルエラーになった。
0254248
2006/02/19(日) 00:25:19やはりそうですか。
main()はもちろん、貼り付けるための省略です。
return書くと、一行増やさないと読みづらいですし。
VC++どうなっているんだろう。
メンバの特殊化には、template<>を省略してもおk
クラスの特殊化には、省略できない(でも、ちゃんと意図を認識できているようなエラーメッセージを吐く)
template<>がなくても受け付けるような、
文法のルールを実装していそう。
なんでメンバでは省略を許しているのか不明ですが。
0255248
2006/02/19(日) 00:36:49VCは以下が全部、問題なく通る……。
main() {} //まあ、K&Rだし
main() { return 0 ; } //これは、まあ、Cという歴史的理由で通るというのも分かるかな。
void main() {} //これはありえない。
int main() {}
ただこれは、禿の解説を見るに、問題なさそうなんですが。
ttp://www.research.att.com/~bs/bs_faq2.html#void-main
>In C++, main() need not contain an explicit return statement. In that case, the value returned is 0, meaning successful execution. For example:
0256デフォルトの名無しさん
2006/02/19(日) 00:48:23戻り値の省略は規格で認められていない。 VC が緩いようだ。
return の省略は禿の言うように規格で認められていて、動作も決まっている。
0257デフォルトの名無しさん
2006/02/19(日) 00:49:03VC8.0 では、/Za で言語拡張をキャンセルすると、template<> のないメンバの特殊化体定義はエラー(C2906)になる。
0259デフォルトの名無しさん
2006/02/19(日) 00:57:360260デフォルトの名無しさん
2006/02/19(日) 01:02:41今のところ無かったはずだが
まだ店頭在庫で改訂2版置いてるところ結構あるから探して買うが吉
0261・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/19(日) 02:24:400262デフォルトの名無しさん
2006/02/19(日) 12:08:23原文(英語)のも買えば解決。もしくは(ry
0263デフォルトの名無しさん
2006/02/19(日) 13:15:57(Boostの紹介があるのがすげえとか見たけど
Boostとあろうものがそれくらいで歓喜するなよと)
C++すっかり変わってしまったから
0264デフォルトの名無しさん
2006/02/19(日) 14:00:26英語版を見る限り、boostに関する内容はないようだ。
templateに関する項目は確かに増えているが、これだけなら、
C++ Templatesの方がずっと詳細だし、やっぱりEffective
シリーズは初心者向けという色合いが強いように思える。
もちろん日本語版が出たらそれも買うつもり。
0265デフォルトの名無しさん
2006/02/19(日) 21:31:20・クライアントがVCで、サーバがC++の時に、
どうやってデータのやりとりを行うのか。
・なぜ、C++でOracleとの連携が取れるのか。
そういう情報が載っているサイトや本を教えて下さい。
0266デフォルトの名無しさん
2006/02/19(日) 21:36:120267デフォルトの名無しさん
2006/02/19(日) 22:31:46http://www.google.co.jp/search?hl=ja&q=visual+C%2B%2B+oracle&lr=
0268265
2006/02/19(日) 23:12:34本当にわからないので、知りたいんです。
ですから、勉強できる本やサイトが知りたいんです。
0269デフォルトの名無しさん
2006/02/19(日) 23:21:52>>268
> C++で作ったプログラムをUNIXでシステム化
「プログラムをシステム化」って何だ?
> クライアントがVCで、サーバがC++の時にどうやってデータのやりとりを行うのか。
今まで一度も「クライアントがVC」なんて条件聞いたことないわけなんだが、
ま、普通にTCPとかUDPとかでいいんじゃない?
> なぜ、C++でOracleとの連携が取れるのか。
Oracleが外部にプログラムインタフェイスを公開してるからじゃない?
サイト調べるよりまずググり方学んできた方が・・・
0270デフォルトの名無しさん
2006/02/19(日) 23:26:33・質問が複数ある。
・どの質問も微妙にスレ違い。
・VCとC++を違うものとして扱ってる。
・一見、明確な質問のようだが、
よく見ると自分がどの程度わかっていて、
どういったことが疑問なのかさっぱりわからない。
0271デフォルトの名無しさん
2006/02/19(日) 23:28:09エンジニア視点ではなく、ユーザ視点で見てる
ってことかな・・・
0272デフォルトの名無しさん
2006/02/19(日) 23:31:21だね。
>>265
意地悪するつもりはないが、俺たちじゃ君の力にはなれそうにありません。
まずは、書店にでも行って自分がわかるレベルの書籍を探してください。
0273デフォルトの名無しさん
2006/02/19(日) 23:48:56たとえばこんなの
typedef int Int;
typedef int Int;
VCだと全く何も言われないんだけど。
0274デフォルトの名無しさん
2006/02/19(日) 23:53:02宣言なら何度でもOK
定義なら一回だけ。
0275265
2006/02/20(月) 00:22:28自分は、ライブラリを作っているだけなのに、
何で動いているのかを知りたいんです。
0276デフォルトの名無しさん
2006/02/20(月) 00:22:59ktkr!!!!!!!!!!!11111111111
トリつけろ、お前面白いwwwww
0277デフォルトの名無しさん
2006/02/20(月) 01:09:04http://www.amazon.co.jp/exec/obidos/ASIN/4822281493/
http://www.amazon.co.jp/exec/obidos/ASIN/4822281019/
とりあえず、このへんの本でも読んどけ。
>>276
おちつけw
0278デフォルトの名無しさん
2006/02/20(月) 01:12:25そんなことも知らないでプログラム動かしてたのかよ・・
仕方ないから教えておいてやる
一回しか言わないからな、しっかり記憶しておけよ
これで動いています
ttp://www.amazon.co.jp/exec/obidos/ASIN/B000059HU5/qid%3D1140365474/503-1346873-8247132
0280デフォルトの名無しさん
2006/02/20(月) 01:16:38まずはUNIXがなぜ動くのかから疑問に思え。
0281デフォルトの名無しさん
2006/02/20(月) 01:35:050282デフォルトの名無しさん
2006/02/20(月) 03:19:54std::vector buf;
void f(char* s, int n) {
typedef std::istream_iterator<char> input_iterator;
std::copy( input_iterator(source), input_iterator(), std::back_inserter(buf) ); // これと
std::copy( buf.begin(), buf.end(), s ); // これを一回で済ませたいです
}
がんばれば自分で作れなくもないと思うのですが、標準やboostとかで用意されてるものがあればそちらを使いたいです
0283デフォルトの名無しさん
2006/02/20(月) 03:24:40標準にはない。
Boostにもその機能そのものはなかったと思う。
0284デフォルトの名無しさん
2006/02/20(月) 09:04:48boostにzip_iteratorというのを見つけた
0285デフォルトの名無しさん
2006/02/20(月) 09:09:44std::vector<char> buf なら、別に char* にコピーする必要無いと思う。
0286デフォルトの名無しさん
2006/02/20(月) 13:34:45zip_iteratorは282がやりたいことには使えない
0287デフォルトの名無しさん
2006/02/20(月) 16:19:44その例ならそもそもsource.readを使ったら駄目なのか?
0288デフォルトの名無しさん
2006/02/20(月) 17:16:25multi_iteratorを書けばいいかもしれない。
boost/iterator_facadeあたりを使えば多少は楽に。
class multi_iterator : public boost::iterator_facade<...> {
typename some::iterator& s;
typename other::iterator& o;
increment() { ++s; ++o; }
...
};
クラステンプレートにすれば任意のイテレータを複数持てる。
イテレータの数を任意にしたければ、mpl/BOOST_PPでの自動生成で。
dereference()等ではstd::map()で返すとか。問題多そうだが。
0289デフォルトの名無しさん
2006/02/20(月) 17:18:450290デフォルトの名無しさん
2006/02/20(月) 17:23:31istream_iterator<char>は空白を読み飛ばすから、readじゃ代用できない。
0291デフォルトの名無しさん
2006/02/20(月) 18:06:37template <typename T> inline void output(boost::tuples::null_type, const T &) {}
template <typename Cons, typename T> inline void output(Cons &c, const T &x)
{
*c.get_head() = x;
++c.get_head();
output(c.get_tail(), x);
}
template <typename Tuple> struct replicator
{
replicator(const Tuple &t) : iters(t) {}
template <typename T> void operator()(const T &x) const { output(iters, x); }
private:
const Tuple iters;
};
template <typename Tuple> boost::function_output_iterator<replicator<Tuple> > make_broadcast_iterator(const Tuple &t)
{ return boost::function_output_iterator<replicator<Tuple> >(replicator<Tuple>(t)); }
int main()
{
char *s = new char[1000];
std::vector<char> v;
typedef std::istream_iterator<char> iic;
std::back_insert_iterator<std::vector<char> > ins(v);
char *p = s;
std::copy(iic(std::cin), iic(), make_broadcast_iterator(boost::tie(ins, p)));
}
0292デフォルトの名無しさん
2006/02/20(月) 18:14:380293デフォルトの名無しさん
2006/02/20(月) 19:15:520294デフォルトの名無しさん
2006/02/22(水) 17:06:17sql_alias x1, x2;
sql_expr expr =
select( x1["a"], "b", "c", "d" )
.from[ inner_join( x1 = "table1" ), ( x2 = "table2" ), x1["a"] == x2["a"] ]
.where( x1["a"] == _1 && between( "b", 1, 10 ) )
.order_by( desc( x1["a"] ) );
string sql4ora = gen_oracle( expr );
string sql4mssql = gen_sqlserver( expr );
みたいな、C++によるλライクなSQLジェネレータを作るとしたら
需要あるのだろうか?
0295デフォルトの名無しさん
2006/02/22(水) 18:13:05(PHPでいうPEAR::DBのような)フリーのC++用データベースライブラリはほしいな。
>>294お願い(*'-')人
0296デフォルトの名無しさん
2006/02/23(木) 01:30:01これでいいじゃんw
BOOST_FOREACH(char ch, boost::make_iterator_range(input_iterator(in), input_iterator()))
{
buf.push_back(ch);
*s++ = ch;
}
0297デフォルトの名無しさん
2006/02/23(木) 01:51:30これでもいいじゃん?
using namespace boost::lambda;
for_each(input_iterator(source), input_iterator()
, (bind(&std::vector<char>::push_back, &buf, _1), *var(s)++ = _1));
0298デフォルトの名無しさん
2006/02/23(木) 03:26:56foreach.hppはどこで手に入る?
0299デフォルトの名無しさん
2006/02/23(木) 05:46:48CVS の HEAD
0301デフォルトの名無しさん
2006/02/23(木) 14:34:45俺にはさっぱりわからんw
0302デフォルトの名無しさん
2006/02/24(金) 23:20:48std::sprintf()だけあればいいよ。って思うの俺だけ?
0303デフォルトの名無しさん
2006/02/24(金) 23:22:28お前だけじゃないだろうが、自分の知らないことが世の中には
たくさんあることだけは忘れないようにしよう。
0304デフォルトの名無しさん
2006/02/24(金) 23:30:49あなたがC++の何を使おうが、それはあなたの自由。
テンプレートやSTLを使う人間を否定さえしなければ問題ない。
0305デフォルトの名無しさん
2006/02/24(金) 23:33:58せめてboost::formatにしようぜ。
0306デフォルトの名無しさん
2006/02/24(金) 23:39:28>>302
勝手にすれば?
ウゼェからとっとと消えろ
0307デフォルトの名無しさん
2006/02/24(金) 23:49:360308デフォルトの名無しさん
2006/02/24(金) 23:49:400309デフォルトの名無しさん
2006/02/24(金) 23:54:59それはさておき、いつも迷うのだが文字列処理する関数は次のどれを引き数にとるべきかな?
・const char *
・std::string
・const std::string &
0310デフォルトの名無しさん
2006/02/24(金) 23:59:43だれも必死になんかなってないだろ。
const std::string& がデフォルトだろうな。
std::string 渡すときもコストが低いし、
const char* のインターフェースを兼ねることもできる。
ただ、動的なメモリ確保に制限がある場合は const char* に
したほうがいいだろう。
std::string による値渡しは参照渡しに比べてメリットがあるとは思えない。
0311デフォルトの名無しさん
2006/02/24(金) 23:59:45公に晒すならconst char*以外に有り得ない。
0312・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/25(土) 00:01:550313デフォルトの名無しさん
2006/02/25(土) 00:08:480314デフォルトの名無しさん
2006/02/25(土) 00:28:16最近というのならLPCTSTR(もしくはLPCWSTR決め打ち)じゃないのか?
つまり、
普通はconst std::wstring &
訳ありの時はconst wchar_t *
となる時代はいつの事やら。
0315・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/25(土) 00:44:330316309
2006/02/25(土) 00:52:49THX!
0317デフォルトの名無しさん
2006/02/25(土) 01:13:260318デフォルトの名無しさん
2006/02/25(土) 04:36:08既に書かれているわけですな。
0319デフォルトの名無しさん
2006/02/25(土) 08:52:22void hoge(const char*);
inline void hoge(const std::string& s)
{
hoge(s.c_str());
}
0320デフォルトの名無しさん
2006/02/25(土) 10:05:58{
public:
StringOrPtr(const char* p) : p_(p) {}
StringOrPtr(const string& str) : p_(str.c_str()) {}
operator const char*() const { return p_; }
private:
const char* p_;
};
なんてのを作ったが、見た目が気持ち悪かったので使わなかった。
0321デフォルトの名無しさん
2006/02/25(土) 11:42:03stringの寿命がわからんところで使って死にそうなコードじゃね。
0322デフォルトの名無しさん
2006/02/25(土) 13:56:09こういう場面で必要。
http://www.tietew.jp/cppll/archive/8082
http://www.tietew.jp/cppll/archive/8098
0323デフォルトの名無しさん
2006/02/25(土) 14:58:49vargsって過去互換以外でつかうか?
0324デフォルトの名無しさん
2006/02/25(土) 16:15:490325デフォルトの名無しさん
2006/02/25(土) 18:05:31紀伊国屋のサイトで購入できました。(店舗から取り寄せ)
私の検索時であと3店舗、今はあと1店舗しか残ってなさそうなので
他に興味がある方はお早めに。
0326デフォルトの名無しさん
2006/02/25(土) 18:26:480327デフォルトの名無しさん
2006/02/25(土) 18:37:22「boost は」なんて一括りにして評価するのは
バカか悪意を持ったものとしか思えない。
0328デフォルトの名無しさん
2006/02/25(土) 18:40:18Javaでも後から追加になったくらいで
便利な機能だと思うけど・・
0329デフォルトの名無しさん
2006/02/25(土) 18:46:170330デフォルトの名無しさん
2006/02/25(土) 18:53:17Boostを語れゴラァ part2
http://pc8.2ch.net/test/read.cgi/tech/1139313234/
0331デフォルトの名無しさん
2006/02/25(土) 19:05:56http://pc8.2ch.net/test/read.cgi/tech/1139266461/
0332デフォルトの名無しさん
2006/02/25(土) 19:10:170333デフォルトの名無しさん
2006/02/25(土) 19:34:32これをグローバルで確保せずにSTL使ってnewで確保しようと思ってます。
newの速度はどうなんでしょうか?
0334デフォルトの名無しさん
2006/02/25(土) 19:43:310335デフォルトの名無しさん
2006/02/25(土) 19:48:220336デフォルトの名無しさん
2006/02/25(土) 20:15:550337デフォルトの名無しさん
2006/02/25(土) 20:20:28STL はライブラリ
STL は new の応用例
0338デフォルトの名無しさん
2006/02/25(土) 20:27:56速度なんぞ気にせず使って良いと思う。
それが問題になることはまず無いはず。
>>336
newした構造体をvectorかなんかに突っ込むんでしょ。
…とすると
> STL使ってnewで確保しようと思ってます。
ってのは表現がおかしいな。
0339デフォルトの名無しさん
2006/02/25(土) 20:37:24ってことできっと>>333は未曾有の大天才なんだろう
0340デフォルトの名無しさん
2006/02/25(土) 20:55:57そんなことするのって設計としてあり?
0341デフォルトの名無しさん
2006/02/25(土) 21:00:050342デフォルトの名無しさん
2006/02/25(土) 21:00:310343デフォルトの名無しさん
2006/02/25(土) 21:10:140344デフォルトの名無しさん
2006/02/25(土) 21:10:20constなポインタならまあありかもしれん。
0345デフォルトの名無しさん
2006/02/25(土) 21:21:540346デフォルトの名無しさん
2006/02/25(土) 21:23:03はらわた曝す設計になってる時点で外部でconst外しがされると思われ。
0347デフォルトの名無しさん
2006/02/25(土) 21:25:50(もちろんメンバへのポインタでもない通常のポインタ
0348デフォルトの名無しさん
2006/02/25(土) 21:30:23正直そんな腐った奴の面倒までは見なくて良いような気が。
0349デフォルトの名無しさん
2006/02/25(土) 21:31:430350デフォルトの名無しさん
2006/02/25(土) 21:31:530351デフォルトの名無しさん
2006/02/25(土) 21:34:11はらわた曝す設計になってる時点で外部でconst外しがされると思われ。
0352デフォルトの名無しさん
2006/02/25(土) 21:36:13class test {
private:
int test1[10];
public:
int *GetTest(){
for ( int i=0; i<10; i++)
{
if ( test1[i] == -1 ) return &test1[i];
}
return NULL;
}
}
どうでしょうか?
0353デフォルトの名無しさん
2006/02/25(土) 21:37:56わざわざポインタ取り出せば、外せるけど
それこそ、そんな奴の面倒まで見切れない
0354デフォルトの名無しさん
2006/02/25(土) 21:38:27>340よ、誓うんだ。二度とそんなことはしないと!
0355デフォルトの名無しさん
2006/02/25(土) 21:41:19それだけなら別に可かと
test1[10]がお互いに・若しくは他のメンバと関係しあっているのなら不可
0356デフォルトの名無しさん
2006/02/25(土) 21:44:47理解力不足ですいません。ほかのメンバと関係しあっているのならってのは
どういうことですか?
0357デフォルトの名無しさん
2006/02/25(土) 21:46:18残念ながら外せます。
#include<string>
#include<iostream>
class human{
std::string name_;
public:
const std::string&name(){return name_;}
human(const std::string&name):name_(name){}
};
int main(){
human a("test");
const_cast<std::string&>(a.name())="a";
std::cout << a.name();
}
まぁconst外しする奴は腐ってるから面倒見なくても良いと思うけどなー。
0358デフォルトの名無しさん
2006/02/25(土) 21:47:37>>355の言ってる以外にも、
「空き」を意味するために、NULLと-1の両方を使ってるのが邪悪。
半年もたったら自ら使い方を間違ってささりそう。
0359デフォルトの名無しさん
2006/02/25(土) 21:50:10それをconst_castする香具師がボケなのであって、クラス自身は問題なしなはず
0360デフォルトの名無しさん
2006/02/25(土) 22:44:58この使い方自体はconstでポインタを渡せば特に問題ということでいいでしょうか?
ちなみに-1とNULLを使ってるのは意味があります。
class test {
private:
int test1[10];
public:
const int *SetTest(int i_num){
for ( int i=0; i<10; i++)
{
if ( test1[i] == -1 )
{
test[i] = i_num:
return &test1[i];
}
}
return NULL;
}
}
Test test;
int *pNum;
pNum = test.SetTest(10);
if ( pNum != NULL )
{
// 操作するときはこんな感じ
}
のような使い方をしようと思っているのですがどうでしょうか?
この中のintをSTL・newとかを使って管理しようかなと思ってます。
0361デフォルトの名無しさん
2006/02/25(土) 22:52:34全体が分からないからなんだけど
その「操作」ってやつをTest内で実装すれば内部を晒すこともない
設計が良くない感じはするね
0362デフォルトの名無しさん
2006/02/25(土) 23:00:02わかるけど、後々使い方を間違えやすい実装だよ、と言ってるわけ。
もし、test.SetTest(-1)ってやったらどーなるの?
悪いこと言わないから、せめて、アサーションくらい入れときましょう。
const int *SetTest(int i_num){
assert(i_num != -1);
for ( int i=0; i<10; i++)
もっと言うなら、空きがあるかどうかを記録するための配列を、
値を保持する配列とは別個に持った方が良いと思うよ。
そうすれば、使ってる側は、格納する値が-1かどうかは気にせずに済むから。
0363デフォルトの名無しさん
2006/02/25(土) 23:00:23pNum = test.SetTest(10);
if ( pNum != NULL )
{
// 操作するときはこんな感じ
}
はどこでも行われる可能性があると思っていただいたほうがいいです。
Test testはシングルトンで扱っていろんなとこから値がセットされて
いろんなとこからいじる可能性があります。
0364デフォルトの名無しさん
2006/02/25(土) 23:18:05例えば、class testがメンバ変数「int a」を保持していたとして
aとtest1[10]が依存しあっているのなら・・・・の意です。
0365デフォルトの名無しさん
2006/02/25(土) 23:21:42ここには具体的には何が入るの?
0366デフォルトの名無しさん
2006/02/25(土) 23:38:08private:
typedef struct {
int flag;
int point;
}T_TEST test1[10];
public:
const T_TEST *SetTest(int i_num){
for ( int i=0; i<10; i++)
{
if ( test1[i].flag == -1 )
{
test[i].point = i_num:
return &test1[i];
}
}
return NULL;
};
};
Test test; // これはシングルトンで扱う
// 以下はいろんなところで使う-----------
int *pTest;
pTest = test.SetTest(10);
if ( pNum != NULL ){ pTest.point++; }
いろいろ変更してこんなかんじにしましたがどうでしょう?
0367デフォルトの名無しさん
2006/02/25(土) 23:38:40素直に、vector<int>じゃダメ?
0368デフォルトの名無しさん
2006/02/25(土) 23:44:070369デフォルトの名無しさん
2006/02/25(土) 23:46:03うんこ臭いんだよ
0370デフォルトの名無しさん
2006/02/25(土) 23:52:18フラグを用意したのはOK。でも、なぜフラグまで外部にさらす?
あと、値を変更させるつもりならconstポインタは使えないから・・・
それと、pTestの型はどっちみち間違い。
俺に3行変えさせてくれ。
int *SetTest(int i_num){ ← ここ
と
return &test1[i].point; ← ここ。
と
if ( pNum != NULL ){ *pTest++; }
>>360
STLのvectorを使うなら、サイズ変更でメモリの再割り当てが起きたときのことも考えておかないとダメ。
0371デフォルトの名無しさん
2006/02/25(土) 23:58:403つめは
if ( pTest != NULL ){ *pTest++; }
の間違い。
0372デフォルトの名無しさん
2006/02/26(日) 00:04:30class test {
public:
typedef struct {
int flag, point, money;
}T_TEST;
private:
T_TEST test1[10];
public:
T_TEST *SetTest(int i_point, int i_money){
for ( int i=0; i<10; i++) {
if ( test1[i].flag == -1 ) {
test1[i].point = i_point;
test1[i].money = i_money;
return &test1[i];
}
}
return NULL;
};
};
Test test;
T_TEST *pTest;
pTest = test.SetTest(10);
if ( pNum != NULL ){ pTest.point++; }
フラグまで外部に晒すのは構造体のメンバが複数あるので結果的にフラグも
見えてしまう状況はいたしかたないと思ってます。
0373デフォルトの名無しさん
2006/02/26(日) 00:13:12すまそ。
> フラグまで外部に晒すのは構造体のメンバが複数あるので結果的にフラグも
> 見えてしまう状況はいたしかたないと思ってます。
いたしかたなくない。
typedef struct {
int point, money;
} T_TEST;
typedef struct {
int flag;
T_TEST data;
} T_DATA;
ついでを言えば、flagの型もintよりboolの方がよいとは思うが。
0374341
2006/02/26(日) 00:20:42SetTestがダサい。メソッド名から
・未使用のT_TESTを検索する
・それにi_numをセットする
と二つのことをしていることが読み取りにくい。(Testをセットしているんじゃないし)
0375341
2006/02/26(日) 00:23:31やるならせめて
class test {
private:
typedef struct {
int flag;
void setPoint(int i_num){
point = i_num;
}
private:
int point;
}T_TEST test1[10];
public:
const T_TEST *getTest(int i_num){
for ( int i=0; i<10; i++){
if ( test1[i].flag == -1 ){
return &test1[i];
}
}
return NULL;
};
};
Test test; // これはシングルトンで扱う
T_TEST *pTest = test.getTest();
if ( pNum != NULL ){ pTest->setPoint(10);}
くらいしなきゃ。コンパイルしてないしかなり詰めも甘いけど。
0376341
2006/02/26(日) 00:27:08T_TEST *pTest = test.getTest();
if ( pTest != NULL ){ pTest->setPoint(10);}
だな。なんかいつの間にかパラメータも増えてるけど…。
0377デフォルトの名無しさん
2006/02/26(日) 00:36:21private:
int point;
}T_TEST test1[10];
の部分なんですがこのところでメンバが多くなって10個ぐらい増えた場合に
単純にセッターを10個増やすことになると思いますがそれはC++では普通にやる
ことなんですか?
0378デフォルトの名無しさん
2006/02/26(日) 00:37:040379341
2006/02/26(日) 00:46:19外部からset、getとか頻繁にし過ぎるようだったら設計が悪い。
あまり多くのメンバが追加されるようなら
T_TESTがする仕事が多すぎないかとか、
分割した方がいいか検討しなきゃな。
0380デフォルトの名無しさん
2006/02/26(日) 10:39:20検索でもあんまりひっかからないので教えて
0381cccc
2006/02/26(日) 10:47:51アドレス、A、Bが分かっていて、AからBまでをファイルに書き出す方法は、
ありませんか?
0382デフォルトの名無しさん
2006/02/26(日) 10:57:28copy((char*)A,(char*)B,std::ostreambuf_iterator<char>(stream));
0383デフォルトの名無しさん
2006/02/26(日) 12:31:120384デフォルトの名無しさん
2006/02/26(日) 12:35:37News 2006-02-26: The C++ Standard Library Issues List (Revision 41) is available (.tar.gz)
News 2006-02-26: C++ Standard Core Language Issues List (Revision 40) is available, also committee version
0385デフォルトの名無しさん
2006/02/26(日) 16:41:15なんでわざわざわかりづらいコード書くんだよ。
VCって言ってるんだからWin32のAPI使えばいいだろ。
WriteFile(fileHandle, A, B-A, &bytesWritten, 0);
複雑なマクロが書けるとかテンプレートが使いこなせるとか、
マニアックなコードで短い行数で書ける奴が偉いなんて時代は
2002年頃までに終わってるんだよ。
0386デフォルトの名無しさん
2006/02/26(日) 16:46:220387デフォルトの名無しさん
2006/02/26(日) 16:46:46お願いだからスレタイと>>1を読んでくれ。
0388デフォルトの名無しさん
2006/02/26(日) 17:13:32たしかに382-383は不親切な回答だと思ったかもしれないが、
ここはC++のスレなんだからC++の標準ライブラリでの方法を答えるのが筋だろ。
0389デフォルトの名無しさん
2006/02/26(日) 17:38:47荒れる原因作ってるだけだろ。どのヘッダをインクルードすればいいのかとか
また質問しに来たらどうすんだか
0390デフォルトの名無しさん
2006/02/26(日) 17:55:43低能同士仲良くしろよ
0391デフォルトの名無しさん
2006/02/26(日) 18:01:04よそのスレで馬鹿にされたからって
八つ当たりすんなよw
0392デフォルトの名無しさん
2006/02/26(日) 18:13:350393デフォルトの名無しさん
2006/02/26(日) 18:26:030394デフォルトの名無しさん
2006/02/26(日) 18:36:10【C++】STL(Standard Template Library)相談室 4
http://pc8.2ch.net/test/read.cgi/tech/1130680264/
Boostを語れゴラァ part2
http://pc8.2ch.net/test/read.cgi/tech/1139313234/
今後、この2つをどうするか語らないか。
0395デフォルトの名無しさん
2006/02/26(日) 18:36:28プログラミングしようと思ってるんですが、ナカナカ上手くいかないっす(涙
基本的には、
1. 各機能オブジェクト間で状態遷移を通知し合う。
2. 各機能オブジェクトは上位のオブジェクトに保持されるが、上位のオブジェクトがすることは、各機能オブジェクトに、さらに上位から送られてきた命令を分散するだけで一切実際の処理はしない。するとしても初期値設定ぐらい。
boost::signalあたりで実装はしてみたんですがイマイチスマートに書けないんですよね。
…わけわからんこと言ってすいません。
0396デフォルトの名無しさん
2006/02/26(日) 18:42:41STL スレは統合していいと思うけど Boost はなあ。
時期標準といっても案件によっては使わせてくれない場合も多いし・・・。
0397デフォルトの名無しさん
2006/02/26(日) 19:06:12もうちょい「上手くいかない」の内容とか
各機能がなんなのか書けば誰か助けてくれるかもよ。
…>390みたいなやつも紛れ込んでるけどさ。
0398デフォルトの名無しさん
2006/02/26(日) 19:17:43class A {
B b;
};
ってするか、
class A {
A() {b = new B:}
~A() {delete b;}
B *b;
};
ってするか。
上の方が簡単だけど、Bのコンストラクタに引数があると困る。
0399デフォルトの名無しさん
2006/02/26(日) 19:20:270400デフォルトの名無しさん
2006/02/26(日) 19:20:42BOOTSを語れゴラァ part2
http://pc8.2ch.net/test/read.cgi/tech/1139266461/
0401デフォルトの名無しさん
2006/02/26(日) 19:21:53class A {
B b;
A() :b(...) { ... }
};
0402デフォルトの名無しさん
2006/02/26(日) 19:26:53・値オブジェクトなら先の方、
・参照オブジェクトなら後の方
でやっちゃうかな。まぁケースバイケースだけど。
0403402
2006/02/26(日) 19:39:46>352の彼は問題解決したのかなぁ。
どうなったか書いてくれんと落ち着かない…
0404デフォルトの名無しさん
2006/02/26(日) 19:59:41それってBがAの基底クラスじゃなきゃおかしくね?
0405デフォルトの名無しさん
2006/02/26(日) 20:01:09ただのメンバの初期化の構文だが。
0406デフォルトの名無しさん
2006/02/26(日) 20:10:40test1の定義を、int *test1にして
コンストラクタでtest1 = new int[10];すればOK。
インスタンス1つならstatic int test1[10];でもいい。
セッタなんてマンドクセ
0407デフォルトの名無しさん
2006/02/26(日) 20:36:46メモリの解放ってどうやればいいんでしょうか?
なんか呼び出すたびにメモリ使用容量が増えている気が・・
0408デフォルトの名無しさん
2006/02/26(日) 20:39:16#include <functional>
#include <boost/function.hpp>
struct SomeObject{
void Do(int) { std::cout << "hogehoge" << std::endl; }
};
int main(){
SomeObject t;
boost::function<void (int)> g = std::bind1st( std::mem_fun(&SomeObject::Do), &t );
g(0);
return 0;
}
だとコンパイル通って、
struct SomeObject{
void Do(void/* ここと */) { std::cout << "hogehoge" << std::endl; }
};
int main(){
SomeObject t;
boost::function<void (void/* ここと */)> g = std::bind1st( std::mem_fun(&SomeObject::Do), &t );
g();/* ここを変更 */
return 0;
}
だと通らなくなるんだけど…理由わかる人がいたら教えてもらえませんか?
環境はVC2005Express + boost 1.33.1です。
0409デフォルトの名無しさん
2006/02/26(日) 20:54:41std::bind1stは二引数の関数オブジェにしか使えない。
0410デフォルトの名無しさん
2006/02/26(日) 20:55:01boost::bindを使いましょう
0411デフォルトの名無しさん
2006/02/26(日) 21:00:58マジthxですm(_ _)m
bind1stは二引数関数オブジェクト専用だったんですね(汗
一応動いたコード
#include <iostream>
#include <functional>
#include <boost/bind.hpp>
#include <boost/function.hpp>
struct SomeObject{
void Do(void) { std::cout << "hogehoge" << std::endl; }
};
int main(){
SomeObject t;
boost::function<void (void)> g = boost::bind( std::mem_fun(&SomeObject::Do), &t);
g();
return 0;
}
0412デフォルトの名無しさん
2006/02/26(日) 21:10:52-boost::function<void (void)> g = boost::bind( std::mem_fun(&SomeObject::Do), &t);
+boost::function<void (void)> g = boost::bind( &SomeObject::Do, &t);
でいいよ
0413デフォルトの名無しさん
2006/02/26(日) 21:14:27本当だ、普通にコンパイル通った…。
mem_funまでやってくれるんだ…すごい…。
0414デフォルトの名無しさん
2006/02/26(日) 21:25:52オブジェワロタ
0415デフォルトの名無しさん
2006/02/26(日) 22:16:26座標を示すx,y,zという値があり、場合によってはdata[0]〜[2]のように
配列っぽくアクセスしたい場合があります。
x,y,zはPOTではなく、関数なども持つクラスだとして、以下のように
unionを使うのはOKでしょうか?
union {
{
foo data[3];
};
{
foo x,y,z;
};
};
unionがメモリの内容を複数の解釈をするっていうものであるならば、
問題はない様な気がしますが。
0416デフォルトの名無しさん
2006/02/26(日) 22:28:58構造体の各要素の配置は規定されてなかったと思う。
だからおそらくだめ。
0417デフォルトの名無しさん
2006/02/26(日) 22:34:52配置以前に、規格上「コンストラクタを、デスクトラクタ、コピー代入演算子を定義したクラス型はunionのメンバにできない」となっているから、
基本的にはPOD型じゃないとダメかと。
0418デフォルトの名無しさん
2006/02/26(日) 22:55:26foo data[3], &x = data[0], &y = data[1], &z = data[2];
あるいは
foo x, y, z, *data[] = { &x, &y, &z };
*data[0] のように * がつくが、
「配列っぽく」という要求は満たす
0419デフォルトの名無しさん
2006/02/26(日) 23:09:54struct
{
foo x,y,z;
foo& operator[](int i)
{
switch(i)/*以下略
0420プリプロセッサ
2006/02/26(日) 23:27:260421デフォルトの名無しさん
2006/02/26(日) 23:31:15いや、俺だ。雑魚は引っ込んでろ。
0422デフォルトの名無しさん
2006/02/26(日) 23:39:34わりと普通じゃんと思ってしまう俺はもうJavaには移れませんか、そうですか
0423デフォルトの名無しさん
2006/02/26(日) 23:49:30(・∀・)人(・∀・)
0424デフォルトの名無しさん
2006/02/27(月) 00:24:48名前にちょっとかっこが付くけど、普通にこんなんじゃ駄目か?
struct bar
{
foo data[3]
foo &x() {return data[0];}
略
0425デフォルトの名無しさん
2006/02/27(月) 00:30:340426デフォルトの名無しさん
2006/02/27(月) 00:36:080427デフォルトの名無しさん
2006/02/27(月) 00:44:33⊂⌒( `Д´) < だって括弧ヤダヤダ!
`ヽ_つ ⊂ノ
0428デフォルトの名無しさん
2006/02/27(月) 00:50:060429デフォルトの名無しさん
2006/02/27(月) 00:59:28struct bar
{
foo x,y,z;
foo& operator[](int i)
{
static foo bar::* hage[] = {&bar::x,&bar::y,&bar::z};
return this->*(hage[i]);
}
};
0430デフォルトの名無しさん
2006/02/27(月) 01:01:17ツルッパゲのオッサンにあやまれ!
0431デフォルトの名無しさん
2006/02/27(月) 01:19:29ツルッパゲのオッサンの方に、私は不遜な対応をし、同氏の名誉を傷つけ、
またご迷惑をおかけしました。心よりお詫びいたします。
自身の軽率で傲慢な言動を恥じ、深く反省しております。
今後は、常に自分の立場をわきまえ、念頭に置いた行動をとりますことをお誓いいたします。
二度とこのような失態を招かない所存にございますゆえ、
このたびに限り、寛大なるご措置をお願い申し上げます。
0432デフォルトの名無しさん
2006/02/27(月) 01:24:090433デフォルトの名無しさん
2006/02/27(月) 01:28:21const 忘れてるよ。付けても最適化してくんないみたいだけどね。
- static foo bar::* hage[] = {&bar::x,&bar::y,&bar::z};
- return this->*(hage[i]);
+ static foo bar::* const bjarne[] = {&bar::x,&bar::y,&bar::z};
+ return this->*(bjarne[i]);
0434・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/27(月) 01:29:530435・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/27(月) 01:56:18struct Point3D {
float &x, &y, &z;
float data[3];
Point() : x( data[0] ), y( data[1] ), z( data[2] ) { }
//以下略
};
0436デフォルトの名無しさん
2006/02/27(月) 01:57:480437デフォルトの名無しさん
2006/02/27(月) 08:53:00>>419, >>429のやつだと、
data[0], data[1], data[2]が順に等間隔で並ばない可能性があるから、
いつかハマりそう。
0438デフォルトの名無しさん
2006/02/27(月) 09:33:59みたいにstaticを使って動的にメモリを確保できないのでしょうか?
つまり
x=60;
static int hoge[x];
みたいなことがしたいんですが
0439デフォルトの名無しさん
2006/02/27(月) 09:45:35staticがどの意味のstaticなのかわからん。
0440デフォルトの名無しさん
2006/02/27(月) 13:41:57どの意味でも無理。
0441デフォルトの名無しさん
2006/02/27(月) 13:54:31ソースコードを書き換え→コンパイラを起動→実行
0442デフォルトの名無しさん
2006/02/27(月) 15:15:03ほんとだ。
C99の
> static int (*p_sum_h)[h] = sum_h; //OK static を使っているけどこれは OK
(http://seclan.dll.jp/c99d/c99d04.htmから引用)
と混乱してたよ。
0443デフォルトの名無しさん
2006/02/27(月) 16:40:58typedef struct{
char* txt[16];
}TS, *LPTS;
void testcode( void ){
TS ts;
char* smptxt = "abcdefghijklmn";
ts.txt[0] = smptxt;
ts.txt[1] = smptxt;
ts.txt[2] = smptxt;
}
みたいなコードで、ts.txt[0]への代入後、どうもts.txt[1]以降の内容も変化
変化した内容は[1]が0x68676665、[2]が0x6c6b6a69とのことなので、
どうやらsmptxtの文字列が突っ込まれているようです
VC++2003の問題だとは思うのですが、もしかして何か俺の方でやっちゃってます?
0444デフォルトの名無しさん
2006/02/27(月) 16:56:38なんだかわかんないのだけれども、
[0]のところにブレークポイントしかけて、
その時点で[1]と[2]の中身も変化してしまうということ?
0445デフォルトの名無しさん
2006/02/27(月) 17:02:16そのテストコード、VC++2003で試してみたけど、正常に動作したよ。
(testcode(void)の最後にprintfで表示させてみた)
ts.txt[]の参照文字列を表示させても同じだし、ts.txt[]の指しているアドレスを
確認したけど同じだった。
別のところに問題があるんじゃないの?
0446443
2006/02/27(月) 17:23:29その通りです
[0]への代入のところにブレークポイントを置いてチェックすると
[0]への代入時に[0]にはsmptxtのアドレス、[1]以降に変な値が入ってます
今確認してみたところ、[1]への代入、[2]への代入時には[1]以降のデータは変化してないっぽいです
>>445
うーん…
新しいプロジェクトで同じことやっても同じ結果が出てるんですよね…
(=ビルドオプションの類の問題じゃなさそう)
となると、バージョンか開発環境の設定?
0447445
2006/02/27(月) 17:38:38ちなみに、コンパイラのバージョンは最適化コンパイラで13.10.3077(for 80x86)
コンパイルは、コンソールからなにもオプションつけないで、clでやっている。
(コマンドラインアプリとして、mainくっつけて実行)
0448デフォルトの名無しさん
2006/02/27(月) 18:16:19ts.txt[0]への代入直後、ts.txt[1], [2]の(初期化および)代入以前の状態だと
ts.txt[1], [2]の値は不定だから。
…なわけないよな…。
参考までに、g++3.4.2では、ts.txt[0]代入前後で[1], [2]の値に変化はなかったよ。
0449415
2006/02/27(月) 21:24:51クラスはunionにできないんですね。
x,y,zへのアクセスとdata[0]〜[2]へのアクセスのコストが等しくなる
方法がいいんですが、>>419ならインライン展開されると見て大丈夫ですか?
初期化の際に多少コストがかかるのは問題ないです。
0450デフォルトの名無しさん
2006/02/27(月) 22:05:210451デフォルトの名無しさん
2006/02/27(月) 23:15:55インライン展開を使用するようにして使っているが、例えば>>435を
使っても使わない時と比べ5clockほどしか増えない。
0452デフォルトの名無しさん
2006/02/27(月) 23:18:260453デフォルトの名無しさん
2006/02/27(月) 23:32:12重いんだよ。絶対継承される自信があるときだけにしてくれ。
0454デフォルトの名無しさん
2006/02/27(月) 23:44:16どこからも継承されていないクラスは、
コンパイラの最適化で、virtualを外せないものなのかな。
というか、デフォルトでvirtualで、必要のないものだけ、
コンパイラが判断してvirtualを外すという仕様はどうだろう。
Dが確か、そういう仕様だったはず。
0455454
2006/02/27(月) 23:45:000456・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/27(月) 23:47:280457デフォルトの名無しさん
2006/02/27(月) 23:51:51その D の仕様では virtual テーブルまで消えるのか?
単に呼び出し時に virtual テーブルを経由せずに呼び出すことを
「virtualを外す」って言ってるだけじゃないの?
もしそれだけなら、 C++ でも最適化の範囲内で可能。
0458デフォルトの名無しさん
2006/02/27(月) 23:57:47Dの仕様書ではこうなってた。
>コード生成時にDはクラス階層を全て把握していますので、
>オーバーライドされていない関数への呼び出しは全て最適化されて non-virtual になります。
こういう言語ではvtableは常に作るのかな。デストラクタは常にオーバーライドされるし。
0459454
2006/02/28(火) 00:26:42自分の考えとしては。
vtableがあるというだけでは、vtable分のサイズと、
vtableへの参照だけなので、
int型のメンバ変数ひとつのクラスを何十万と作るわけじゃなければ、
別に気にしなくてもいいんじゃないか、などと思えてしまいます。
それでも、JAVAや.NETまで、思い切ることができない性格ですが。
0460デフォルトの名無しさん
2006/02/28(火) 01:37:56Win32コンソールアプリケーションからWin32DLLを動的に明示リンクした際に、
なぜかReleaseでのみ問題が発生します。
DLL側は
__declspec(dllexport) int LL_OpenArchive(LPCTSTR szFilePath)
{
return s_osaArcEx.OpenArchive(szFilePath);
}
の様に宣言しており、もちろん定義ファイルでエクスポートを定義しております。
アプリケーション側は
typedef int (__stdcall *LL_OpenArchive)(LPCTSTR);
の様にプロトタイプ宣言を行いLoadLibary, GetProcAdressを用い関数のアドレスを取得しています(そこまでは問題有りません)
取得した関数に引数としてchar s[512]の様な固定長CHAR配列にgetsで文字列を取得したものを当てています。
が、Releaseビルドでその処理を行うと、sのアドレスが4バイト引かれるのです。Debugではおこりません。
ためしにDLL側の関数の中身をreturn 0;のみにしたりもしましたが状況は変わりませんでした。
このようなことはあり得るのでしょうか?
またどう対処すればよろしいのでしょうか? ご教授お願い致します。
0461デフォルトの名無しさん
2006/02/28(火) 01:43:29よくある。対策は↓
コンパイラの、プログラム全体の最適化 (/GL) を一回はずしてリビルド。
終わったらもう一回有効にして再度リビルド。
0462デフォルトの名無しさん
2006/02/28(火) 03:54:49>460
回れ右して初心者スレかWin32APIスレにGo!
0463デフォルトの名無しさん
2006/02/28(火) 03:59:37お前のちっぽけな価値観だけで、
偉大なるC++をどうこうしたいと妄想するなんて片腹痛い。
0464デフォルトの名無しさん
2006/02/28(火) 05:45:17virtualは付け外しできるのかな。
そのオブジェクトファイルは、他の(CやFortranなどの)言語でも使用される一般的なツールでリンクできるという条件で。
可能なら、継承されててもnon-virtualにできる選択肢を残した上で、virtualは自動化してもらえれば便利だね。
0465デフォルトの名無しさん
2006/02/28(火) 07:03:11そういうのは北朝鮮でやってね(プ
0466デフォルトの名無しさん
2006/02/28(火) 08:02:45ASCIIの「C++言語入門」は持ってますが古い規格なので
最近新しく探しているのですが、これはと思ったのは分厚く
7000円もするので買うのを躊躇しています。
リッチー&カーニハンの「プログラミング言語C」のような
解説書を探しています。
よい本がありましたら教えてください。
0467デフォルトの名無しさん
2006/02/28(火) 08:12:18プログラミング言語C++がC++版K&Rと言われてる
俺が他にお勧めするのは、Accelerated C++
後はもう店頭在庫のみだがEffective C++
0468デフォルトの名無しさん
2006/02/28(火) 09:10:58古い規格での標準C++の勉強は終わっていて、7000円は高すぎて禿げてしまうというのなら
標準規格はIS、FDIS(>>5)を参照するという手もある。
0469デフォルトの名無しさん
2006/02/28(火) 09:14:23スレ違いだがあえて答えてやろう。
エクスポートしてる関数にも_stdcall付けやがれ。
0470460
2006/02/28(火) 11:04:01結果的には__stdcallのつけ忘れでした
初歩的orz
相談室と書いてあったので早とちりしてしまいましてご迷惑おかけしました。
ありがとうございました。
0471デフォルトの名無しさん
2006/02/28(火) 12:16:14多くの C++ コンパイラはコンパイル単位でしか最適化しないので
そーゆー、複数のコンパイル単位間での最適化は
望むべくもなく。
0472466
2006/02/28(火) 21:12:31ありがとうございます。
教えていただいたタイトルを頼りに本屋を渡り歩いてみます。
レスが遅くなりましてすみませんでした。(今帰宅しました)
International Standard は詳しくて良さそうですね。
あんまり英語得意じゃないんですが、日本語版の本を購入
するまでは頑張ってこちらで勉強してみます。
0473デフォルトの名無しさん
2006/02/28(火) 22:40:46標準規格を見るだけならhttp://www.jisc.go.jp/のJIS検索から規格番号X3014でいける。
0474デフォルトの名無しさん
2006/02/28(火) 23:31:340475デフォルトの名無しさん
2006/03/01(水) 01:11:46http://www.open-std.org/jtc1/sc22/wg21/prot/
規格とかダウンロードできて、便利だなーとか思ってたんだけど、
よく見るとトップに "members' pages" って書いてある。
これ、ダウンロードしてもいいの?
0476デフォルトの名無しさん
2006/03/01(水) 01:20:26内部向け ってだけで「会員専用」の意ではない。
0477デフォルトの名無しさん
2006/03/01(水) 02:26:40とりあえずVC++2005EE的にはアリのようです
#include <iostream>
#include <typeinfo>
template<class char_t> int main(int argc, char_t* argv[])
{
std::cout << typeid(char_t).name() << std::endl;
return 0;
}
namespace startup{
//int main(int argc, char* argv[]) コメントアウトとかして切り替える
//{
// return main<char>(argc, argv);
//}
int wmain(int argc, wchar_t* argv[])
{
return main<wchar_t>(argc, argv);
}
}
mainとかwmainをnamespaceとかにいれてイイノカナー
0478デフォルトの名無しさん
2006/03/01(水) 02:39:51#if defined(UNICODE) とかで切り分けろバカw
あと、main や wmain はnamespaceいれちゃダメ。
0479デフォルトの名無しさん
2006/03/01(水) 10:06:07UNICODEって標準じゃなくてWindowsSDKで使われてる識別子じゃなかったっけ?
0480デフォルトの名無しさん
2006/03/01(水) 14:12:17そうだけど、_UNICODEだって独自のものだから、どっちもどっち。
0481デフォルトの名無しさん
2006/03/01(水) 16:14:490482デフォルトの名無しさん
2006/03/01(水) 19:35:230483デフォルトの名無しさん
2006/03/01(水) 19:53:32base() {}
virtual ~base() {}
};
template <typename T> struct derived : public base {
typedef T member_type;
T value;
derived(T value) : value(value) {}
};
template <typename T> base* derived_generator(T value) {
return new derived<T>(value);
}
base* tmp = new derived_generator(1);
このとき、tmpからmember_typeがintであることを知る方法はないじゃろうか…。
int value = dynamic_cast<derived<int>*>(tmp)->value;
とすればvalueはとれるんじゃが、型がintだと明示したくないのじゃ。
TYPE obtain() const { return dynamic_cast<derived<TYPE>*>(tmp)->value; }
このTYPEはderived<TYPE>::member_typeと等しいのじゃが、どうにかして取り出せんもんかのう。
爺にはとんと見当がつかんのじゃ…。
0484デフォルトの名無しさん
2006/03/01(水) 19:54:54じゃった。書き写さずコピペすればよかったのう…。
0485デフォルトの名無しさん
2006/03/01(水) 19:58:51member_typeの型情報が必要な処理はderivedの中に入れるしかないよ
0486デフォルトの名無しさん
2006/03/01(水) 20:02:38それができないからこそ、boost::anyにはany_castがあり、次期C++にはautoが導入される
0487デフォルトの名無しさん
2006/03/01(水) 20:06:38typedef int My_Type;
struct base {
base() {}
virtual ~base() {}
};
template <typename T> struct derived : public base {
typedef T member_type;
T value;
derived(T value) : value(value) {}
};
template <typename T> base* derived_generator(T value) {
return new derived<T>(value);
}
typedef derived <My_Type> My_Derived;
int main ()
{
base* tmp = derived_generator(1);
My_Type value = static_cast<My_Derived*>(tmp)->value;
return 0;
}
爺さんこんなのはどうだい?
0488デフォルトの名無しさん
2006/03/01(水) 20:13:19これはautoで解決できる問題じゃないと思う。
0489デフォルトの名無しさん
2006/03/01(水) 20:22:00その辺詳しい人いたら教えてけれ(´・ω・`)
struct Hoge {
auto value_;
template <class T>
Hoge(T v) : value_(v) {}
};
こんな構造体を書いた時、
Hoge h(int(10)), h(double(1.0));
な風に使ってしまうと、テンプレートのようにHogeに複数の実体が作られるのかどうか…
0490デフォルトの名無しさん
2006/03/01(水) 20:24:51struct base{
struct inner_base{
virtual inner_base*clone(){return new inner_base;};
virtual ~inner_base(){}
};
template<typename T>
struct inner_derived : inner_base{
typedef T member_type;
T value;
inner_derived(const T&value):value(value){}
inner_derived*clone(){return new inner_derived(value);}
};
inner_base*value;
template<typename T>base(const T&value):value(new inner_derived<T>(value)){}
base(const base&value):value(value.value->clone()){}
base&operator=(base b){swap(b);return *this;}
base():value(new inner_base){}
~base(){delete value;}
void swap(base&b){inner_base*p=value;value=b.value;b.value=p;}
template<typename T>operator T&(){return dynamic_cast<inner_derived<T>&>(*value).value;}
};
#include<iostream>
int main(){
base tmp=1;
int value = tmp;
std::cout << value;
}
0491デフォルトの名無しさん
2006/03/01(水) 20:46:37爺に教えてくれて感激じゃ…。じゃが、やはり標準C++では無理なことかのう。
>>487のようにしてしまうと、
derived_generator(1);
この関数テンプレートは、引数の型を判別して derived<int> のインスタンスを生成するのに
別の場所でintだと明示しないとならないのは厳しいのう。
と思うたら
>>490
これはすごいことじゃ…天狗じゃ…天狗が現れおった…!!
爺の用途には暗黙の型変換でも十分じゃ。じっくり読むだえ。
0492デフォルトの名無しさん
2006/03/01(水) 21:09:45要らないと思う。
クラステンプレートとそれを生成するテンプレート関数でいいだろ。
0493デフォルトの名無しさん
2006/03/02(木) 18:45:41void change( HogeState* new_state );
class HogeState{
int ahe, uha;
public:
void foo(){
change( new HogeState );
ahe = 777;
}
void foo2(){
ahe = 888;
change( new HogeState );
}
};
HogeState* state = 0;
void change( HogeState* new_state ){
if( state ) delete state;
state = new_state;
}
int main(){
HogeState hoge;
hoge.foo();
hoge.foo2();
return 0;
}
foo()では、自分がdeleteされた後にaheに代入し、しかもエラーが出ませんが、これはOKなんでしょうか?
foo()が駄目だとしたら、foo2でも危うい気がするのですが、実際どうなんでしょう。
無理矢理1ファイルに書いたら意味のないコードになってしまいました。ご容赦を。
0494デフォルトの名無しさん
2006/03/02(木) 18:54:01> change( new HogeState );
newで新しく確保して、それを渡しているだけ。hoge関係なし。
> if( state ) delete state;
deleteにNULL渡しても問題ないからif(state)は意味ない。
deleteで開放しているのはさっき新しく確保したHogeStateであってhogeではない。
> state = new_state;
仮引数に代入した所で意味はない。
なんか大混乱コードだなぁ。
0495493
2006/03/02(木) 19:18:19class Hoge{ //Hoge.h--------------------------------
HogeState* state;
public:
Hoge(){ state = new HogeState; }
void changeState( HogeState* new_state ){ delete state; state = new_state; }
void foo(){ state->foo( this ); }
void foo2(){ state->foo2( this ); }
};
class Hoge; //HogeState.h---------------------------
class HogeState{
int ahe;
public:
void foo( Hoge* hoge );
void foo2( Hoge* hoge );
};
#include "HogeState.h" //HogeState.cpp---------------
#include "Hoge.h"
void HogeState::foo( Hoge* hoge ){
hoge->changeState( new HogeState );
ahe = 777;
}
void HogeState::foo2( Hoge* hoge ){
ahe = 888;
hoge->changeState( new HogeState );
}
#include "HogeState.h" //main.cpp--------------------
#include "Hoge.h"
int main(){
Hoge hoge;
hoge.foo(); hoge.foo2();
}
0496デフォルトの名無しさん
2006/03/02(木) 19:24:20仮引数?
> さっき新しく確保したHogeState
ちがわね?
0497デフォルトの名無しさん
2006/03/02(木) 19:44:44> ahe = 777;
deleteされたインスタンスに対してメンバ変数に変更を加えてるのでダメ
> ahe = 888;
deleteされる前に触ってるからOKだけど
直後のchangeStateで触ったインスタンスはdeleteされるので意味なし
じゃないかな?
0498493
2006/03/02(木) 19:50:12デリート済みインスタンスの関数であっても、
メンバにアクセスしなければ大丈夫、という結論でよろしいのでしょうか。
メンバ関数であっても、所詮は関数という感じでよさそうなのですね。
0499デフォルトの名無しさん
2006/03/03(金) 03:24:13メンバ関数にはthisポインタが渡されるだけで、あとは確かに通常の関数とほぼ同じだが
thisポインタが無効になった時点でそれ以上そのクラスオブジェクトは仕事を続けるべきではないと思う。
0500475
2006/03/03(金) 03:43:39やっぱりダメだったんだろうな。
0501デフォルトの名無しさん
2006/03/03(金) 15:57:560502デフォルトの名無しさん
2006/03/03(金) 16:45:00wchar版はなぜ提供されないのでしょうか?
std::wexceptionとかstd::wruntime_errorとか
0503デフォルトの名無しさん
2006/03/03(金) 17:30:43俺はwcerrなんかのワイド文字ストリームがマルチバイト文字へ変換する仕様だからだと思っている。
その変換処理の最中に例外を投げたくなるようなことになったら、どうしようもなくなるだろうと。
0504デフォルトの名無しさん
2006/03/03(金) 18:03:360505503
2006/03/03(金) 18:34:00俺は例外が発生している最中に例外が投げられることを問題に思っているのではなく、
エラーメッセージが表示できないことだと思っている。
もちろん画面への表示という行為も失敗するかもしれないけどさ。
0506デフォルトの名無しさん
2006/03/03(金) 20:57:48wchar_t 版がない理由は知らんが、char版でもUTF-8をブチ込むことは許されてるからそれで我慢汁カウパー。
0507デフォルトの名無しさん
2006/03/04(土) 00:28:50デストラクタは、virtual で public に
というクラス定義がありますが、これは
どういう理由でこのようにしているのでしょうか?
0508デフォルトの名無しさん
2006/03/04(土) 00:33:03インターフェースとして使うように設計されていて、
実際に new などで生成されるのは派生クラスだけ
ということが想像できるが、作った奴に聞いてコメント書かせるのが正解。
0509デフォルトの名無しさん
2006/03/04(土) 00:33:19継承して使え。と書いた人が主張している。
0510デフォルトの名無しさん
2006/03/04(土) 00:34:14コントラはそのクラス変数の作成時に呼ばれる関数だから
作成されていないのに外部から勝手に呼ばれたら困る。だからプロテク。
デストラはそのクラス変数が破棄されるときに呼ぶものだが
途中で破棄したい場合に外部から呼ぶため。だからパブリ。
0511デフォルトの名無しさん
2006/03/04(土) 00:35:360512デフォルトの名無しさん
2006/03/04(土) 00:59:170513デフォルトの名無しさん
2006/03/04(土) 01:12:05事前条件が厳しいときのファクトリーパターンであってますか?
0514デフォルトの名無しさん
2006/03/04(土) 01:20:45それだとコンストラクタは private だろ。
0515デフォルトの名無しさん
2006/03/04(土) 01:56:15const char *とか書いてる自分は駄目なんじゃないか
と怖くなる今日この頃、皆様はいかがお過ごしでしょうか?
0516デフォルトの名無しさん
2006/03/04(土) 02:21:470517デフォルトの名無しさん
2006/03/04(土) 03:38:580518デフォルトの名無しさん
2006/03/04(土) 03:40:420519デフォルトの名無しさん
2006/03/04(土) 08:36:01WindowsがUTF-16を使っているので、Windowsの処理系ではまず間違いなくsizeof (wchar_t)は2です。
0520デフォルトの名無しさん
2006/03/04(土) 13:08:53さんくす。
sizeof(wchar_t)を4にするオプションがないかと期待したんだけど。
wchar_tを使っても可変長エンコーディングからは逃れられないのか。
0521デフォルトの名無しさん
2006/03/04(土) 14:10:37仕様:「本ソフトウェアはサロゲートペアに対応していません。将来的にも対応する気はありません。」
0522デフォルトの名無しさん
2006/03/04(土) 14:55:52確か、CodeWarriorなら Windows でも 4 == sizeof(wchar_t) だよ。
0523デフォルトの名無しさん
2006/03/04(土) 16:00:14サロゲートペアが理解できないユーザーからクレームが来るくらいなら、
可変長エンコーディングを我慢したほうが精神衛生上良いかと。
>>522
クロス開発環境だからWindowsアプリは作れないけど、ってオチ?
0524デフォルトの名無しさん
2006/03/04(土) 16:49:18フツーにWindowsアプリが作れますがなにか?
0525デフォルトの名無しさん
2006/03/04(土) 16:58:56ttp://www.metrowerks.co.jp/information/2005/info0323.html
0526デフォルトの名無しさん
2006/03/04(土) 17:10:21いや、そんくらい知ってるって。
0527デフォルトの名無しさん
2006/03/04(土) 17:29:400528デフォルトの名無しさん
2006/03/04(土) 23:48:49俺まぢでメモ帳。
0529デフォルトの名無しさん
2006/03/04(土) 23:50:34そんなのもお構いなしで押し付けるのが信者という物です。
0530デフォルトの名無しさん
2006/03/05(日) 00:22:16xyzzy。とても快適。
0531デフォルトの名無しさん
2006/03/05(日) 00:24:16VSのIDEマンセー!
まあ、もうすこしインテリセンスがインテリになればいいんだけど。
0532デフォルトの名無しさん
2006/03/05(日) 00:27:34普段はVSのIDE
味気ないなぁ
0533デフォルトの名無しさん
2006/03/05(日) 00:29:37ファイル閉じるのに5秒くらいかかるよ・・・
複数ファイル一気に閉じると1分以上待たされる
というわけで、xyzzyに一票
0534デフォルトの名無しさん
2006/03/05(日) 00:33:180535デフォルトの名無しさん
2006/03/05(日) 00:37:300536デフォルトの名無しさん
2006/03/05(日) 00:39:09逆に言えばメモリに常駐してる部分が大きいってことかね。
0537デフォルトの名無しさん
2006/03/05(日) 00:41:53ハァ?
ドトネトで、ネイティブコードのキャッシュが残るから、
二回目から起動が早くなるんだろう。
0538デフォルトの名無しさん
2006/03/05(日) 01:16:24ちょっと編集するときはvi、
腰据えて作業するときはXyzzy、
他人に見せるときは桜エディタ。
0539デフォルトの名無しさん
2006/03/05(日) 01:24:550540デフォルトの名無しさん
2006/03/05(日) 01:25:45なぜなんだか、とても気になる
0541デフォルトの名無しさん
2006/03/05(日) 01:27:27そうだよな
お前らマでやれよ
emacs
0542デフォルトの名無しさん
2006/03/05(日) 01:33:220543デフォルトの名無しさん
2006/03/05(日) 01:58:12だって過疎化が進んで寂しんだもん。
0544デフォルトの名無しさん
2006/03/05(日) 02:00:12って話はSTLスレ向きかな。
>>540
Xyzzyはフォントを小さくしているしタブや2バイト空白が見える設定にしているから
他人には(特に老眼入ってる連中には)激しく読みにくいらしいから。
どうせ普段使わないからってことで、キーワードの色付けも自分の好みよりも派手にしてある。
0545デフォルトの名無しさん
2006/03/05(日) 05:59:12そこには
typedef struct tagStructName : public tagHogehoge{ /* tagHogehogeは構造体です */
public:
tagStructName(){};
void memberFunction();
}
などとありました。構造体の継承?何それって状態なんですが
考え方としてはクラスと同じ考え方でいいんですか?
0546デフォルトの名無しさん
2006/03/05(日) 06:02:150547デフォルトの名無しさん
2006/03/05(日) 06:03:32すみませんでした
0548デフォルトの名無しさん
2006/03/05(日) 13:03:200549デフォルトの名無しさん
2006/03/05(日) 13:28:280550デフォルトの名無しさん
2006/03/05(日) 13:43:43釣られておく。
ttp://public.research.att.com/~bs/bs_faq.html#pronounce
0551デフォルトの名無しさん
2006/03/05(日) 14:09:10秀丸の人が開発者コミュニティでも作ったのかなと思ったじゃねーか
0552デフォルトの名無しさん
2006/03/05(日) 14:54:56たった今>>5のページ初めて開いて禿の意味がわかったwww
0553デフォルトの名無しさん
2006/03/05(日) 15:11:24ハーブサッター=髭
メイヤーズ先生=ふさふさ
と言われている
覚えておくといいぞ
0554デフォルトの名無しさん
2006/03/05(日) 16:48:17変数が静的か動的かを調べる方法はないでしょうか?
具体的には、以下のようなことがしたいと思ってます。
list<int *> List;
// 静的な変数を追加
int a=0;
List.push_back(&a);
// 動的な変数を追加
int* b = new int(0);
List.push_back(b);
// 全開放
list<int *>::iterator itr;
for (itr=List.begin(); itr!=List.end(); itr++) {
if ( (*itr) が動的に確保された変数 )
delete (*itr);
}
List.clear();
よろしくお願いします。
0555デフォルトの名無しさん
2006/03/05(日) 16:49:150556554
2006/03/05(日) 17:15:41ありがとうございました。
0557デフォルトの名無しさん
2006/03/05(日) 17:20:120558デフォルトの名無しさん
2006/03/05(日) 17:28:42動的な変数へのポインタのみを保持したコンテナをListとは別に作って
deleteはそちらのコンテナのイテレータを介して行うとか?
0559デフォルトの名無しさん
2006/03/05(日) 17:41:23コンパイラはVC8で, cl code.cppとコンパイルしています。
現在とある画像ファイル形式(パレット方式、\0をランレングス圧縮)を
BMPに変換するコードを書いているのですが、
byte *cdata = new byte[ihead.length];
ifs.read(reinterpret_cast<char*>(cdata),ihead.length);
if(!ifs){
cout << "file read failed" << endl;
return 0;
}
string data = Decode(cdata,ihead); // \0をデコード
delete[] cdata;
この流れで ihead.length==655 にもかかわらず、
ifs.tellp() で読み込みバイト数を調べると、 7000 バイトも読み込んでいるようなのです。
Decode 内で cdata を全て表示させて、ファイルと比較してみたところ、
読み込み位置が 639 バイト目から突然 4000 バイト以上後方にジャンプしていました。
seekg したわけでもないのに read 中にファイル読み込み位置がずれることはあるんでしょうか。
0560デフォルトの名無しさん
2006/03/05(日) 17:42:10operator new / deleteのオーバーライドで
ヒープオブジェクトの一覧を作っちゃうとか。
まあ、そこまでするのもあれだけど。
0561デフォルトの名無しさん
2006/03/05(日) 17:44:16おとなしいところで、フラグを使うとか。
typedef pair<bool/* dynamic? */, int *> flag_ptr;
list<flag_ptr> List;
// 静的な変数を追加
int a=0;
List.push_back(flag_ptr(false, &a));
// 動的な変数を追加
int* b = new int(0);
List.push_back(flag_ptr(true, b));
// 全開放
list<flag_ptr>::iterator itr;
for (itr=List.begin(); itr!=List.end(); itr++) {
if (itr->first)
delete itr->second;
}
List.clear();
0562デフォルトの名無しさん
2006/03/05(日) 17:44:53バイナリモードで開いてないとか
0563デフォルトの名無しさん
2006/03/05(日) 17:45:36Effective C++だとそれだったな。
>>559
画像ファイル等等の話は余計じゃね?
0564559
2006/03/05(日) 17:50:03お早い返信ありがとうございます。
std::ios::binaryを指定したら、嘘のように成功しました。
お騒がせしました。
>>563
お恥ずかしながら、原因がまったく見当がつかなかったので……。
今思うと処理の内容は関係なかったですね。申し訳ありませんでした。
0565デフォルトの名無しさん
2006/03/05(日) 18:02:44VisualStudio.NET ATL/WTL で開発しています。
バイナリから、JScriptの関数を呼びだすコードを書いております。
関数の呼び出しはできるのですが、JScript上の関数に引数を渡さなければいけない
場合に、どのように渡せばよいかわからないことがあります。
現在はまっているのは、JscriptのArray型です。
SAFEARRAY で CComVariantに渡してみましたが、
JScript上の関数内で、Arrayのlengthプロパティを使用できませんと
言われてしまいます。
この場合は、どのように渡せばよいのでしょうか?
また、 参考になるようなページはありませんでしょうか?
JScriptの関数呼び出しには、Invokeを使用しています。
よろしくおねがいします。
0566デフォルトの名無しさん
2006/03/05(日) 18:33:23つhttp://pc8.2ch.net/test/read.cgi/tech/1134388951/
0567565
2006/03/05(日) 19:30:230568デフォルトの名無しさん
2006/03/05(日) 21:37:45この class を引数で受け取る関数があります
void func( const set< A >& va );
この関数の中で、それぞれのAのインスタンス用に一時的な記録領域を設けたいんです。
引数にはconstで受け取りますから、class定義に含めることは出来ません。
解法として2つ考えたんですが、どっちもベストな方法には思えません。
皆さんならどう実装しますか?
1. mapを使う
map< A*, A_Temp > tempMap;
A_Temp at = *temp.find( &*va.begin() ).first;
2. class A に作業領域を含める
class A{
public:
void* pTemp;
...};
A_Temp at = (A_Temp*)va.begin()->pTemp;
0569デフォルトの名無しさん
2006/03/05(日) 21:48:49func内で完結するデータなら1。
Aのインスタンスのある限り必要なデータなら2。
1だとしたらポインタでなくconst_iteratorをキーにすればよいと思う。
0570デフォルトの名無しさん
2006/03/05(日) 21:52:38この意味がわからないんだが。具体的な例きぼん。
0571デフォルトの名無しさん
2006/03/05(日) 22:12:35例えば、funcの中で、AとTempAの情報を受け取るfunc1を呼ぶとすると
func1の定義は以下のようになってしまい、なんだか複雑さが伝播してしまいます。
元々の設計が悪いのでしょうか?
void func1( const set< A >& va, map< A*, A_Temp >& tempMap );
>>570
何でもいいんですが、例えばプリンタの情報を収めるクラスがあるとします。
class Printer;
void main(){
Printer p;
// ユーザがPrinterオブジェクトに対しいろいろな操作を行う
p.set_XXX();
p.method_XXX();
// ・Printerの集合を受け取るfunc関数があるが
// この関数は、Printerに対し直接的な変更を加える訳ではないので
// const属性で受け取りたい
// ・内部では、ソートなど集合に対し操作を行うので
// 個々のインスタンスに関連付けされた領域が必要
set< Printer* > setp;
setp.insert( &p );
func( setp );
};
0572デフォルトの名無しさん
2006/03/05(日) 23:08:28public:
PrinterWithSomeInfo(const Printer *printer) : printer_(printer) {}
const Printer *getPrinter() const {return printer_;}
private:
const Printer *printer_;
[その他必要ないろいろ]
};
のsetを渡すとか。
0573デフォルトの名無しさん
2006/03/05(日) 23:33:56じゃなくて
void func(set<const A>& va);
にしたいって話?
0574デフォルトの名無しさん
2006/03/05(日) 23:53:55それでいってみます。
ありがとうございます。
>>573
そうですね、
その他いろいろ間違ってます。
こういう適当な性格なんで、PGには向いてないです。
0575デフォルトの名無しさん
2006/03/05(日) 23:54:590576デフォルトの名無しさん
2006/03/06(月) 00:02:47試す前に聞いておきたいのですが、
テンプレートな、可変引数の関数というのは作れるのでしょうか?
template <typename T>
void func(T t, ...)
{
0577デフォルトの名無しさん
2006/03/06(月) 00:03:39それ、そのまんまでなにも問題はありませんが、なにか?
0578デフォルトの名無しさん
2006/03/06(月) 00:04:33シネヨ
0580デフォルトの名無しさん
2006/03/06(月) 00:10:000581デフォルトの名無しさん
2006/03/06(月) 00:15:090582デフォルトの名無しさん
2006/03/06(月) 00:16:23template<typename T>
class A {
void func(const T& );
}
のように宣言したメソッドfuncをcppファイルで実装しようとするとうまくいかないんだけど、
そもそもできないものだったりします?
template<T>
void A<T>::func(const T& ){}
だと、外部からコールしたときに
外部参照が未解決だとコンパイラに怒られてしまう。
0583デフォルトの名無しさん
2006/03/06(月) 00:18:450584デフォルトの名無しさん
2006/03/06(月) 00:20:26標準仕様に、完璧に準拠したコンパイラならいける。
つまり、exportキーワードを使えばいい。
まあ、VCもGCCもサポートしていないわけだが。
0585デフォルトの名無しさん
2006/03/06(月) 00:25:41ありがとうございます。
大人しく全部ヘッダに書きます。
0586デフォルトの名無しさん
2006/03/06(月) 00:51:11テンプレート引数に渡す型が予め分かってるなら
明示的実体化という手もある
例えばintとdoubleで実体化するのであればcppファイルに
template class A <int>;
template class A <double>;
と書いておく
0587デフォルトの名無しさん
2006/03/06(月) 00:52:13templateの使いすぎなのか
デバッグビルドだと重くて、まったく試運転出来ないのですが
そういうものですか?
VisualC++7.1 リリースビルドで30FPSなものが、デバッグだと0FPSになります。
0588デフォルトの名無しさん
2006/03/06(月) 01:08:340589デフォルトの名無しさん
2006/03/06(月) 01:42:40それを期待して inline 重ねまくったコードが
デバッグビルドでボロボロになるんだよ。
0590デフォルトの名無しさん
2006/03/06(月) 01:48:040591デフォルトの名無しさん
2006/03/06(月) 02:03:50それはないが589はinline展開について言ってるのでは?
0592デフォルトの名無しさん
2006/03/06(月) 06:42:100593デフォルトの名無しさん
2006/03/06(月) 07:39:45ヘッダファイルからcppファイルをインクルードしれ。
最初は違和感あるかもしれんけど、
template の時だけはこのスタイルがベスト。
0594デフォルトの名無しさん
2006/03/06(月) 07:43:370595デフォルトの名無しさん
2006/03/06(月) 10:54:030596デフォルトの名無しさん
2006/03/06(月) 11:00:390597デフォルトの名無しさん
2006/03/06(月) 11:23:07コンパイルして使うものは *.cpp コンパイルしないで使うものは *.hpp ってしてる
0598デフォルトの名無しさん
2006/03/06(月) 11:52:48別ファイルに分けたいときは
拡張子はcppじゃなくhppにしてる。
0599デフォルトの名無しさん
2006/03/06(月) 11:54:33{
while(1)
{
/* 処理 */
if (条件) return 1;
}
return 0;
}
この条件で抜けるとネストが深くなるとか、そういった問題は起きないのでしょうか?
break;で抜けるのしか見たことがないので不安です。
0600デフォルトの名無しさん
2006/03/06(月) 11:59:59無問題
ネストが深くなるってどんな意味で使ってる?
0601599
2006/03/06(月) 12:05:46ありがとうございます。
>ネストが深くなるってどんな意味で使ってる?
繰り返しの中に繰り返しとかです。
もし return 1; で抜けていなければ、何回もこの関数が呼ばれてこの条件で抜ける度に
while(1){
while(1){
while(1){
/*中略*/
}
}
}
みたいな感じに処理されてるのかと思ったんです。
昔HSPを使っていたときに、
repeat〜loopからちゃんと抜けずにgotoを使うとそういった現象に見舞われましたもので。
0602デフォルトの名無しさん
2006/03/06(月) 12:31:20[2] 何回もこの関数が呼ばれてこの条件で抜ける度に
抜けていなければ、抜けるたびに……?
ネストが深くなる、というより、スタックの処理が適切になされるかという意味かな。
0603デフォルトの名無しさん
2006/03/06(月) 14:06:35「関数が呼ばれるたびに、whileが増えていく」ってことか?
ぶっちゃけありえない。
0604デフォルトの名無しさん
2006/03/06(月) 14:08:37悪いことは言わないから、HSPのことは、きれいさっぱり忘れろ。
0605デフォルトの名無しさん
2006/03/06(月) 14:15:03returnでいきなり関数を抜けると、whileブロックの「終了処理」が行われずに関数処理が終わってしまう。
だから、次に同じブロックに処理が来たときに、前回の中途半端な状態が残っていて、おかしな動作に
なってしまうんじゃないか、てことだろ?
そういうアセンブラチックなことをしなくてすむのが高級言語なんだよ。
HSPはほんとうに低級なんですね。
0606デフォルトの名無しさん
2006/03/06(月) 17:38:58DirectXのユーティリティなどで、
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
と定義されているのは、何故なのでしょうか
0607デフォルトの名無しさん
2006/03/06(月) 17:43:46そのdefineと、NULLをdeleteするのとは、違うだろ〜。よく見なされ。
0608デフォルトの名無しさん
2006/03/06(月) 18:34:09いやいや、deleteにNULL渡してもOKなら
このマクロもifチェックいらないはずなのに何故、という話です
0609デフォルトの名無しさん
2006/03/06(月) 18:42:54問題ないのと、コストがかからないのとは違う
0610デフォルトの名無しさん
2006/03/06(月) 18:51:360611デフォルトの名無しさん
2006/03/06(月) 19:09:320612デフォルトの名無しさん
2006/03/06(月) 19:10:34そのifは必要ないし、inline+templateでも書けるところを
わざわざマクロを多用してるし、newが例外投げることすら
知らないし、C++初心者が書いてるようなレベルだ
0613デフォルトの名無しさん
2006/03/06(月) 19:13:030614デフォルトの名無しさん
2006/03/06(月) 19:21:55高いからじゃねーの?
0615デフォルトの名無しさん
2006/03/06(月) 19:32:550616デフォルトの名無しさん
2006/03/06(月) 19:38:350617デフォルトの名無しさん
2006/03/06(月) 19:52:040618デフォルトの名無しさん
2006/03/06(月) 19:56:440619デフォルトの名無しさん
2006/03/06(月) 19:58:42自分で例外投げるようにハンドラすげ替えたりして。
0620デフォルトの名無しさん
2006/03/06(月) 20:03:020621デフォルトの名無しさん
2006/03/06(月) 20:32:390622デフォルトの名無しさん
2006/03/06(月) 21:07:26new の回数と delete の回数が一致してないと気持ち悪い、とか
new していないものを delete するのは気持ち悪い、とか。
0623デフォルトの名無しさん
2006/03/06(月) 21:14:46C++のこと、これからは「しーぷらら」って呼ばない?
0624デフォルトの名無しさん
2006/03/06(月) 21:18:46newしてないものをdeleteしちゃまずいぢゃないか!
0625デフォルトの名無しさん
2006/03/06(月) 21:34:59断る
0626デフォルトの名無しさん
2006/03/06(月) 21:41:180627デフォルトの名無しさん
2006/03/06(月) 21:47:170628デフォルトの名無しさん
2006/03/06(月) 21:54:460629デフォルトの名無しさん
2006/03/06(月) 21:56:560630デフォルトの名無しさん
2006/03/06(月) 22:00:450631デフォルトの名無しさん
2006/03/06(月) 22:02:370632デフォルトの名無しさん
2006/03/06(月) 22:07:30C卐卐
シーダブルハーケンクロイツだッ!!
0633デフォルトの名無しさん
2006/03/06(月) 22:07:430634デフォルトの名無しさん
2006/03/06(月) 22:08:200635デフォルトの名無しさん
2006/03/06(月) 22:17:270636デフォルトの名無しさん
2006/03/06(月) 22:19:200637デフォルトの名無しさん
2006/03/06(月) 22:20:480638デフォルトの名無しさん
2006/03/06(月) 22:21:000639デフォルトの名無しさん
2006/03/06(月) 22:22:390640デフォルトの名無しさん
2006/03/06(月) 22:26:300641デフォルトの名無しさん
2006/03/06(月) 22:26:420642デフォルトの名無しさん
2006/03/06(月) 22:27:190643デフォルトの名無しさん
2006/03/06(月) 22:28:020644デフォルトの名無しさん
2006/03/06(月) 22:28:100645デフォルトの名無しさん
2006/03/06(月) 22:28:440646デフォルトの名無しさん
2006/03/06(月) 22:28:510647デフォルトの名無しさん
2006/03/06(月) 22:29:10C++
C#
C##
C####
0648デフォルトの名無しさん
2006/03/06(月) 22:29:56C言語できないやつに取れる
0649デフォルトの名無しさん
2006/03/06(月) 22:31:03test.cxx←テスト点シーダメダメって読んでた
0650デフォルトの名無しさん
2006/03/06(月) 22:58:43びじゅある しーだめだめ
0651デフォルトの名無しさん
2006/03/06(月) 23:38:530652デフォルトの名無しさん
2006/03/06(月) 23:44:55答え:DirectXはC言語でも扱えるように作られている
0653デフォルトの名無しさん
2006/03/06(月) 23:53:290654デフォルトの名無しさん
2006/03/06(月) 23:56:400655デフォルトの名無しさん
2006/03/07(火) 00:05:520656デフォルトの名無しさん
2006/03/07(火) 00:08:400657デフォルトの名無しさん
2006/03/07(火) 00:14:43そんな言い切れるほどの根拠はないだろ。
ちなみにプリプロセッサディレクティブ #include の機能は
"Source file inclusion" と言われる。
0658デフォルトの名無しさん
2006/03/07(火) 00:56:21windows.hがいつまでたっても古臭いマクロとか#define定数とかに頼ってるのも、そう考えれば納得がいくな。
0659デフォルトの名無しさん
2006/03/07(火) 01:23:43いくらなんでももうCでDirectXプログラミングとか無いと思うんだが
0660デフォルトの名無しさん
2006/03/07(火) 02:20:01DirectXをCで使う必然性って何よ?
0661デフォルトの名無しさん
2006/03/07(火) 06:19:050662デフォルトの名無しさん
2006/03/07(火) 07:08:000663デフォルトの名無しさん
2006/03/07(火) 07:23:540664デフォルトの名無しさん
2006/03/07(火) 07:43:340665デフォルトの名無しさん
2006/03/07(火) 07:47:20『Cで書いてんの?』
『いや たすたす。』
0666デフォルトの名無しさん
2006/03/07(火) 07:54:320667デフォルトの名無しさん
2006/03/07(火) 09:00:300668デフォルトの名無しさん
2006/03/07(火) 09:08:160669デフォルトの名無しさん
2006/03/07(火) 09:54:430670デフォルトの名無しさん
2006/03/07(火) 12:02:050671デフォルトの名無しさん
2006/03/07(火) 12:21:210672デフォルトの名無しさん
2006/03/07(火) 13:39:04>617でFAっぽくないか?
0673デフォルトの名無しさん
2006/03/07(火) 15:01:29が正解。
だからdelete (p); (p) = NULL;だけでもよいが、不安になる人がいるのでifを付けている。
0674デフォルトの名無しさん
2006/03/07(火) 15:45:38#define SAFE_DELETE(p) do { delete (p); (p)=NULL; } while (0)
と書き換えれ。
0675デフォルトの名無しさん
2006/03/07(火) 15:49:42自分には回ってきて欲しくないんだが・・・
0676デフォルトの名無しさん
2006/03/07(火) 16:10:06template<typename T>
void safe_delete(T*& p)
{
delete p;
p=0;
}
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
2006/03/07(火) 16:33:44throw() もよろしく
ついでにsafe_delete_arrayとsafe_deleterとsafe_array_deleterも
0679デフォルトの名無しさん
2006/03/07(火) 16:49:26template<typename T>
void safe_delete(T*& p)
{
typedef refuse_incomplete[sizeof(T)];
delete p;
p=0;
}
0680679
2006/03/07(火) 17:23:21template<typename T>
void safe_delete(T*& p)
{
typedef char refuse_incomplete[sizeof(T)];
delete p;
p=0;
}
0681デフォルトの名無しさん
2006/03/07(火) 17:28:53template<typename T>
void safe_delete(T*& p)
{
checked_delete(p);
p = 0;
}
ってこと?
0682デフォルトの名無しさん
2006/03/07(火) 17:36:15フレーム処理でちょっとてこずってます。
さまざまなサイトを参考にして、
メッセージループでフレーム制御をやってるのですが、
どうもうまく行きません。なぜかキーボードのキーを叩くと
アニメーションが停まってしまいます。
半日くらいgoogleほっつき回ったのですが、原因はついに分からず。
どなたか知恵を貸していただけないでしょうか?
一応ソースコードをアップロードしておきます。
環境はWinXP、VS.NET theSpoke Premiumです。
ttp://gamdev.org/up/img/4892.zip
0683デフォルトの名無しさん
2006/03/07(火) 17:40:210685デフォルトの名無しさん
2006/03/07(火) 18:40:00バイト単位で読み込んでからビットに刻む
0686デフォルトの名無しさん
2006/03/07(火) 19:49:28わたくしはVisualStudio2003 VC++を使っております。
DebugかReleaseかはDebugを使っています。
現在VS上でプログラムを実行してるのか、できたEXEを直接動かしてるのか
プログラムで判断することはできますか????
GetCurrentDirectory()を使ってカレントフォルダを表示させるプログラムを作りました。
VS2003上でF5を押すときとは、カレントフォルダの最後に\Debugがつかないで
直接EXEを実行させるとそれがつくという違いがあるのはわかったのですが、
別な方法で正しくVS上で動作させているかプログラムで判別する方法はある
のでしょうか?
0687デフォルトの名無しさん
2006/03/07(火) 19:59:34日本語でOK
後、1も読めない文盲は氏ね
0688デフォルトの名無しさん
2006/03/07(火) 20:40:44質問があります。C++でCGIのプログラムは終わって、テスト鯖でのコンパイル→実行→テストも終わったのですが、いざ、これを無料鯖に載せて公開しようとしたところ・・・SSHの使えない鯖で、コンパイルできません。
鯖環境がどういうものか書いていない鯖なもので、ウィンドウズかBSD系でのコンパイル済みファイルをアップしても動作しない為、鯖は別環境と推定されます・・・。
っが、なんとか簡単に鯖でコンパイルすることは可能でしょうか?
他のプログラムを使う事もできるのですが、個人的に、C/C++が好きということもあり、できる限り上記の方法での解決をしたいと思っております。
ちなみに、以前、どこかでそのようなスクリプトを見た事があるのですが、どうも思い出せません。
CGIファイルに・・・スクリプトで・・・G++をECHOで呼び込んで・・・・ってのはわかってるのですが・・。自分の知識の範囲外です。
お手数とは思いますがよろしくお願いします。
(ウェブプログラミングはPerl、PHP、JSP等の方が良いとわかっていても、C/C++やJavaなどのオブジェクト指向系(あくまで系)の方がいいっすb
0689デフォルトの名無しさん
NGNG#/bin/sh
echo Content-type: text/plain
echo
make hoge
0690デフォルトの名無しさん
2006/03/07(火) 21:01:420691デフォルトの名無しさん
2006/03/07(火) 21:02:09さっそく回答ありがとうございます!
これです!昔見たやつです!!
早速、試させていただきます。ありがとうございましたb
0692デフォルトの名無しさん
2006/03/07(火) 21:13:17スクリプト言語を使いたいなら、
Ruby や Python を鯖でコンパイルするといいよ。
容量圧迫するけど。
0693デフォルトの名無しさん
2006/03/07(火) 21:18:37クラスがメンバー変数として配列を持っていた場合、どうやって初期化すれば良いのでしょうか?
class Class
{
public:
int array[10];
}
Class:: Class () : /* ここでarrayを初期化したい */
{
}
;
0695デフォルトの名無しさん
2006/03/07(火) 21:48:39ムリ
コンストラクタの中で初期化。
0696デフォルトの名無しさん
2006/03/07(火) 21:51:03コンストラクタ内で初期化代入するしか。
Class::Class() {
static const int arrayInits[] = {0, 1, 2, 3, 4,};
std::copy(arrayInits, arrayInits + sizeof(arrayInits) / sizeof(*arrayInits), array);
}
0697デフォルトの名無しさん
2006/03/07(火) 22:31:24カレントフォルダは好きに変えられる。
たとえばショートカットを作れば、ショートカットのプロパティで設定できる。
もしもEXEの存在するフォルダを知りたいのであれば、
EXEへのパスを取得し、それを加工してEXEファイルのあるフォルダへのパスを取り出すようにすべき。
(書き終わってからスレ違いだと気づく_| ̄|○)
0698デフォルトの名無しさん
2006/03/07(火) 22:48:03実行時に渡すパラメータを決めるオプションがあるから、
自分で何かパラメータ渡すように設定しておいて、
そのパラメータがあるかどうかで判定すれば良さげ。
直接動かす場合でもそのパラメータ渡せば誤認させられるけど、
どうせ Debug バージョンでしか有効じゃない処理だろうから、
そのくらいいい加減でもいいっしょ。
0699デフォルトの名無しさん
2006/03/08(水) 00:31:060700デフォルトの名無しさん
2006/03/08(水) 02:05:100701デフォルトの名無しさん
2006/03/08(水) 03:57:45テンプレートクラスは下記のような記述で明示的なインスタンス化ができたのですが、
template class Hoge<Moge>;
テンプレート関数の場合は、明示的なインスタンス化はできないのでしょうか?
環境は、VS2005です。
0702デフォルトの名無しさん
2006/03/08(水) 04:17:30似たようにしてできない?
あるいは template の後に <> を書くか。
0703デフォルトの名無しさん
2006/03/08(水) 04:17:33template<class T>
void func(const T &) {
...
}
void func<int>(const int &);
たしか、こんなんでいけたと思う。
0704デフォルトの名無しさん
2006/03/08(水) 05:20:45template<class T>
void func(const T &) {
...
}
template void func (const int &);
0705デフォルトの名無しさん
2006/03/08(水) 05:36:440706デフォルトの名無しさん
2006/03/08(水) 05:48:26どんな風に?
0707701
2006/03/08(水) 06:08:49レスありがとうございます。
参考にさせて頂いて、手探りでいじってた所、
↓これで、一応コンパイルは通りました。
template void func<int>(const int&);
0708デフォルトの名無しさん
2006/03/08(水) 06:20:570709デフォルトの名無しさん
2006/03/08(水) 08:12:430710デフォルトの名無しさん
2006/03/08(水) 09:13:35まあ、俺は typename のが好きだけど。
template <typename> class T とかだと
typename 使えないけどね。
0711デフォルトの名無しさん
2006/03/08(水) 09:16:53ん?なんだその構文?
0712デフォルトの名無しさん
2006/03/08(水) 09:46:24テンプレート・テンプレート・パラメータ
0713デフォルトの名無しさん
2006/03/08(水) 09:59:20テンプレート引数にテンプレートを渡すためのもの。
template<typename T>
class Foo {};
template<template<typename U> class T>
class Hoge
{
T<int> Bar;
};
Hoge<Foo> ahya;
Uは使わないから710のように省略できる。
0714デフォルトの名無しさん
2006/03/08(水) 10:05:12普通「引数」というと「実引数」のことじゃね?
0715デフォルトの名無しさん
2006/03/08(水) 10:18:01実と仮のどちらかがデフォってことはない
あくまで「不明」もしくは周りの文脈から推定するのみ
0716デフォルトの名無しさん
2006/03/08(水) 11:17:460717デフォルトの名無しさん
2006/03/08(水) 13:37:29>あくまで「不明」もしくは周りの文脈から推定するのみ
過去の経緯からそうなってしまった、ってのは理解ってるんだが……
一つの文章の中で argument と parameter をどちらも「引数」と表現するのはやめてほしいなあ
0718デフォルトの名無しさん
2006/03/08(水) 13:54:25「テンプレートにテンプレートを(引数として)渡す」だろ。
0719デフォルトの名無しさん
2006/03/08(水) 14:05:010720デフォルトの名無しさん
2006/03/08(水) 16:31:23697,698さんどうも情報ありがとうです。
やりたいことは、関連してプログラムに使用したいファイルがあって
プログラムからみて相対パスで実行させようとして、
�@プログラムはC:\AAA\PROGRAM1\debug\PROGRAM1.EXEで
�A関連ファイルはC:\AAA\hogehoge\hogehoge.txt
のときに相対パスを使ってVS上かどうかで相対パスが
"..\hogehoge\hogehoge.txt"と"..\..\hogehoge\hogehoge.txt"
の2通りでてきてしまうのですが、なんとなくカレントフォルダを
現在実行しているプログラムの存在するフォルダに変更してしまえば
相対フォルダも同一になりそうな気がするので、たぶん問題解決です。
どうもありがとうございます。
0721デフォルトの名無しさん
2006/03/08(水) 17:09:17甘いな。ツーか、スレ違い。
0722デフォルトの名無しさん
2006/03/08(水) 19:22:56何の変哲もないポインタから、shared_ptr が生成される仕組みは
単純だけど、目から鱗って感じ。
0723デフォルトの名無しさん
2006/03/08(水) 20:40:160724デフォルトの名無しさん
2006/03/09(木) 00:38:48どういった場面で使うのかわからん
_internal_weak_thisがどこで初期化されてんのかよくわからん
あと、const T を T const と書いてもいいことを知りますた。
0725デフォルトの名無しさん
2006/03/09(木) 00:53:35Tがポインタだった場合に備えてじゃない?
とソースを読まずに言ってみる
0726デフォルトの名無しさん
2006/03/09(木) 00:58:32あと、boostの前スレにenable_shared_from_thisあったね。
でもそれ見てもわからんかったので寝ます。おやすみ。
0727デフォルトの名無しさん
2006/03/09(木) 01:05:35T がポインタでも const T と T const は同じだよ。
0728デフォルトの名無しさん
2006/03/09(木) 01:06:44そうか、スマソ(´・ω・`)
0729デフォルトの名無しさん
2006/03/09(木) 01:29:15>どういった場面で使うのかわからん
http://www.boost.org/libs/smart_ptr/sp_techniques.html#from_this
>_internal_weak_thisがどこで初期化されてんのかよくわからん
boost::shared_ptr の側に boost::enable_shared_from_this 用のコードがあります.
(boost::shared_ptr が保持しようとしているポインタのクラスが
boost::enable_shared_from_this から派生しているものなら
_internal_weak_this を初期化する)
0730デフォルトの名無しさん
2006/03/09(木) 01:33:25とコンストラクタA(a, b, c)
という2種類のコンストラクタを持つクラスを定義し、
それを継承したクラス class B : public A
のデフォルトコンストラクタB(), B(a, b, c)
があるとします。B(a, b, c)が呼ばれたら A(a, b, c)
が呼ばれるようにできますか?明示的に B(a,b,c)
の中で呼ぶしか無いでしょうか?
0731デフォルトの名無しさん
2006/03/09(木) 01:37:46// B(a, b, c)の処理...
}
0732デフォルトの名無しさん
2006/03/09(木) 03:06:07namespace N {
class A {
略
friend std::ostream& operator<<(std::ostream&, const A&);
略
};//class A
}//namespace N
のように宣言した場合、この operator<< は正確には N::operator<<
ということになるのでしょうか。するとその実際処理を定義する場合にも
N::operator<< として定義するべきなのでしょうか?
そもそも std::cout << "aiueo\n"; の時の operator<< は
::operator<< なのか std::operator<< なのか・・・
ちょっと混乱しています。
0733デフォルトの名無しさん
2006/03/09(木) 03:11:57もちろん、演算子も名前空間の中に入る。
こういう風に書くとわかりやすいかも。
やっていることは同じコード。
std::cout << "hello,world" ;
std::operator << (std::cout, "hello,world") ;
まあ、実際に使うときは、ADL、Koening Lookupなどと呼ばれている仕組みにより、
名前空間を明示しなくても呼び出せるんだけど。
0734デフォルトの名無しさん
2006/03/09(木) 03:27:13std::cout << "aiueo\n"; の時の << は
std::operator<< だったんですね。
その点は疑問が氷解しました。
>>722 の friend にした operator<< は、N::operator<< なのでしょうか?
というのは、class A のインスタンス a を std::cout << a; のように
ストリームに流すときの << もやはり std::operator<< なので、
friend 指定の時に
namespace N {
class A {
略
friend std::ostream& std::operator<<(std::ostream&, const A&);
略
};//class A
}//namespace N
のように operator<< の前に std:: を付けてみると、
std::operator<< should have been declared inside 'std'
とコンパイラに怒られます。そこで何も名前空間を指定せずに
>>722 のように宣言したはいいものの、その定義では
どう書くべきなのか分かりません。 N::operator<< なのでしょうか?
0736732=734
2006/03/09(木) 03:39:20フルネームでは N::operator<< ですね。
*.cpp ファイルで定義する際にも N::operator<< で行けました。
今まで N::operator<< はクラス定義のヘッダファイル中に
直接書いていたので、いざ定義と宣言を分離しようとすると
困ってしまっていました。
0737デフォルトの名無しさん
2006/03/09(木) 04:15:22自前のクラスやstd::pairなんかを食わせると、標準に正しく準拠した
コンパイラではエラーになる。
operator<< を std名前空間に入れないとだめだからだが、標準C++
はstd名前空間をいじってはいけない事になっている。
0738732=734
2006/03/09(木) 04:22:44悩むこともしばしばでした。さらに同じ g++ でも
バージョンによって挙動が違うこともあるので余計に。
0739デフォルトの名無しさん
2006/03/09(木) 08:03:46自前のクラスなら operator をクラスと同じ名前空間で宣言すれば大丈夫。
std::pair はやっぱり無理。
0740デフォルトの名無しさん
2006/03/09(木) 08:16:00friend のルールは複雑でそういう問題も発生するし、
元々がなるべく使わないで済ませたほうがいいものなんで
public な入出力メンバ関数を作っておいて、 operator では
それらを呼び出すだけにするのがいいと思う。
ちなみに gcc だと 3.4, 4.0, 4.1 と毎度 friend 周りで挙動の変更が入っている。
0741デフォルトの名無しさん
2006/03/09(木) 08:30:25ちなみにstd::cout << "aiueo\n";の<<は
std::basic_ostream::operator <<のメンバ。
基本型とマニピュレータに対するoperator <<はstd::basic_ostreamのメンバ。
0742デフォルトの名無しさん
2006/03/09(木) 09:39:27普通はスタック上のオブジェクトのデストラクタで代用する。
これは、メモリ/ファイル/コネクション等なら普通に使えるし
大抵はいろいろな処理をまとめてclassとして扱うので抵抗は無いのだけれど
これがロックとかだと、若干使いにくい気がする。
というのは、まず、ロックのためにclassを定義するというのもなんか嫌だし
unlockするタイミングを確定させるためにわざわざブロックを作って
その先頭にロックオブジェクトの宣言だけが現れる(操作がソース上に現れない)
という形になって、美しくない(気がする)。
で、operator bool()が必ずfalseを返すこんなclassと#defineマクロを使って
Synchronized(x) { } を擬似的に作ってみたのだけれど、まずいところあるかな?
class synchronizer {
LockObject& lock;
explicit synchronizer(LockObject& lock) : lock(lock) {
lock.lock();
}
~synchronizer() {
lock.unlock();
}
operator bool() const {
return false;
}
};
#define Synchronized(x) if (synchronizer ___locker = synchronizer(x)) ; else
0743デフォルトの名無しさん
2006/03/09(木) 09:50:00JLib2 ( http://www.codeproject.com/library/jlib.asp ) に、
ほとんど同じコードがあったな。こっちは operator bool が常に true を返してたけど。
ただ、注意書きのところに、
// used to be "#define synchronized(x) if ( jlib::lang::Lock l_o__c_k(x) )",
// up to the C++ standard, this seems to be incorrect, it can only be
// accepted by MSVC. See C++ Language Specification, A5.
とか書いてあったから、いいかどうかは微妙なところ。
0744デフォルトの名無しさん
2006/03/09(木) 09:57:48結局ロックのためにブロック作ってるのは変わらないし
ロックオブジェクトを先頭に置くのが美しくない?とかってのも
単に見慣れてるかどうかでは?
{
ScopedLock<LockObject> lock;
...
}
みたいなので十分分かるとは思うな
言語が synchronized構文とかサポートしてるのならともかく
オレ流マクロで構文モドキを作るのは余計説明しにくいような
0745デフォルトの名無しさん
2006/03/09(木) 09:57:55当然誰か他の人も思いついてるんだよな。
どこが引っかかるかは、よく読んでから考えてみる。
とりあえず、ifの()内の変数宣言は、大昔のコンパイラは対応してないし。
0746デフォルトの名無しさん
2006/03/09(木) 15:09:25おー、template特殊化でコンパイル時に型判断してるんですね。
template恐るべしですな。
0747デフォルトの名無しさん
2006/03/09(木) 16:17:47boost::bind(std::less<int>(), _1, 2)(x) ;
さらにこうすると、コンパイルできません。
boost::not1(
boost::bind(std::less<int>(), _1, 2)
)(x) ;
これならOKのようです。
boost::bind(
boost:not2(std::less<int>()), _1, 2
)(x) ;
これなら通るのですが。
std::not1(
std::bind2nd(std::less<int>(), 2)
)(x) ;
0748747
2006/03/09(木) 16:19:320749デフォルトの名無しさん
2006/03/10(金) 00:05:24#include "boost/lambda/bind.hpp"
(!bind( std::less<int>(), boost::lambda::_1, 2))(x)
0750747
2006/03/10(金) 00:54:56おお、boost::lambdaすごい。
これは面白い。
STLのbind1sとかbind2ndとか、キモすぎで、
今まで使おうとは思わなかったんですよ。
0751デフォルトの名無しさん
2006/03/10(金) 06:58:49これも、クラス宣言に書いたり、inlineとかつけるとか?
0752デフォルトの名無しさん
2006/03/10(金) 07:34:050753デフォルトの名無しさん
2006/03/10(金) 08:28:330754デフォルトの名無しさん
2006/03/10(金) 08:36:39普通の関数と全く同じように考えればよい。
インラインに書けばインライン展開されるだろうし、そうでなければ関数呼び出しになるだろうし。
0755デフォルトの名無しさん
2006/03/10(金) 08:43:45あり^^
0756デフォルトの名無しさん
2006/03/10(金) 15:50:50する必要がないから。あれメンバ関数よ?
加算演算子とかをfriendにするのは、
メンバ関数じゃないけど中身直接いじれると便利だから。
0757デフォルトの名無しさん
2006/03/10(金) 23:11:09その問いに対する答えはただ1つ: 規格で禁止されているから
「なぜ禁止しているのか」なら、これは想像だが
struct X { }; つまり operator = が宣言されていないクラスに対して、
const X& X::operator = (const X&); が翻訳環境によって追加され、
そこへ随伴宣言があると例えば vtable の生成則がおかしくなったりしそうだろ
0758デフォルトの名無しさん
2006/03/10(金) 23:35:46もしフレンド関数でオーバーロードを許すなら、他のoperatorとシンタックスを合わせないといけないだろうし
0759デフォルトの名無しさん
2006/03/11(土) 00:47:02場所によってコピーの方法が変わると言うまずい状況になるから
メンバとしてしか定義できないようにしたと書いてある。
ただしfriendまでは言及されていないが。
struct Hoge {/* 〜 */};
Hoge x, y;
x = y; //デフォルトのコピー
Hoge& operator =(Hoge&, const Hoge&) {/* 〜 */}
Hoge z;
z = x; //さっきのoperator =()
0760デフォルトの名無しさん
2006/03/11(土) 01:28:37757 だが・・・
あんたの勝ち
0761デフォルトの名無しさん
2006/03/11(土) 09:02:050762デフォルトの名無しさん
2006/03/11(土) 19:39:46しかし、そこでメモリが足りなかったとします。
Aがnewで作成されている場合にポインタにNULLを返したいのですが、どうすればいいのでしょうか?
#include <stdio.h>
class B{};
class A
{
public:
A()
{
B *m_pB = new B;
if (m_pB == NULL)
{
//ここでA()にNULLを返させたい。
}
}
private:
m_pB;
};
void main()
{
A *pA = new A;
if (pA == NULL)
printf("NO MEMORY\n");
}
0763デフォルトの名無しさん
2006/03/11(土) 19:54:04コンストラクタじゃ無理。newをオーバーロード汁
0764デフォルトの名無しさん
2006/03/11(土) 19:55:06class を使ってるということは C++ なんだと思うんですけど
iostream じゃなくて stdio を使う意味を教えてください。
0765デフォルトの名無しさん
2006/03/11(土) 20:00:03printfとかが使いたいから。
0766デフォルトの名無しさん
2006/03/11(土) 20:10:290767デフォルトの名無しさん
2006/03/11(土) 20:13:10iostreamはでかいんだよ。
それを静的リンクするとフロッピーディスクに入らなくなる。
動的リンクするとDLLが無いとサポートに電話がかかってくるんだよ。
0768デフォルトの名無しさん
2006/03/11(土) 20:19:06標準に準拠したコンパイラでは通常newはNULLを返さない。例外を投げてくる。
例外を投げないようにするのにはnew(nothrow) B;などと書く。
挙げている例の場合、普通は例外を使うか、正常に構築出来なかった事をメンバ関数で伝えるか、何らかの生成用関数を挟む事などが考えられる。
0769デフォルトの名無しさん
2006/03/11(土) 20:33:57newがメモリ不足で失敗した場合に、printf()とかが
まともに動く保障はあるの??
0770デフォルトの名無しさん
2006/03/11(土) 20:40:11printfは、諸悪の根源。
0771デフォルトの名無しさん
2006/03/11(土) 20:56:07聞いたことねえな
printf が内部で new を使うはずがなさそうだし、まして仕様でなどありえない
仮に malloc を使っていても new と同じ系統のサブプールを使う可能性はあっても保証はできっこない
operator new がユーザ定義される場合があるのだから
0772デフォルトの名無しさん
2006/03/11(土) 21:55:53じゃあ、boost::formatの時代だな。
0773デフォルトの名無しさん
2006/03/11(土) 22:53:05ソースはこんな感じです。
typedef struct
int a;
int b;
} WORK;
WORK* クラス名::GetWork()
{
}
ポインタの戻り値の設定ってこれでもおかしくないですよね。
0774デフォルトの名無しさん
2006/03/11(土) 22:55:360775デフォルトの名無しさん
2006/03/11(土) 23:00:00こんなことやって悩んでいる予感。
WORK* クラス名::GetWork()
{
WORK w;
return &w;
}
0776デフォルトの名無しさん
2006/03/11(土) 23:21:380777デフォルトの名無しさん
2006/03/11(土) 23:23:430778デフォルトの名無しさん
2006/03/11(土) 23:24:00WORK w;
WORK& get_w(){ return w;}
};
こうじゃダメなんか?
0779デフォルトの名無しさん
2006/03/11(土) 23:25:22WORK oma_www;
WORK& cho_ww(){ return oma_www;}
};
0780デフォルトの名無しさん
2006/03/11(土) 23:27:12ソースコード省略せずに全部挙げろ
0781デフォルトの名無しさん
2006/03/11(土) 23:44:28直接ポインタとるんじゃだめなのか?
0782デフォルトの名無しさん
2006/03/11(土) 23:44:59なんででしょうか?
0783デフォルトの名無しさん
2006/03/12(日) 00:34:07エラーメッセージ100回読んどけ
0784デフォルトの名無しさん
2006/03/12(日) 00:34:16>>780
助けたいのは山々だけど、謎が多過ぎる
0785デフォルトの名無しさん
2006/03/12(日) 01:08:54struct S {...};
S* func();
};
C::S* C::func(){}
C::が抜けてると見た。
0786デフォルトの名無しさん
2006/03/12(日) 01:19:190787デフォルトの名無しさん
2006/03/12(日) 02:01:07ちなみに内部構造体を使ってました。
0788デフォルトの名無しさん
2006/03/12(日) 02:02:210789デフォルトの名無しさん
2006/03/12(日) 02:08:060790デフォルトの名無しさん
2006/03/12(日) 02:08:27関数の中で、クラスを定義できたりする。
int main()
{
0791デフォルトの名無しさん
2006/03/12(日) 02:08:47void f() {
struct local {
static void g() { }
};
local::g();
}
0792デフォルトの名無しさん
2006/03/12(日) 02:09:10{
struct hoge{
static func() {}
} ;
hoge::func() ;
}
0793デフォルトの名無しさん
2006/03/12(日) 03:24:27(1)typedef を前方参照する裏技って無いですか?
----hoge,h
class Hoge;
class ZZ {
Hoge<int> *hoge;
};
----hoge,cpp
typedef HogeHoge Hoge ;
まともにやるとコンパイル不可
(2)テンプレートクラスの前方参照は出来ない??
0794デフォルトの名無しさん
2006/03/12(日) 03:39:40× Hoge<int> *hoge;
○ Hoge *hoge;
0795デフォルトの名無しさん
2006/03/12(日) 08:24:57HogeHogeがこうだとすると、
template <typename T>
class HogeHoge
{
/* 〜 */
};
HogeHogeの前方宣言はこうなる。
template <typename T>
class HogeHoge;
そしてクラステンプレートをテンプレート引数の指定なしにtypedefすることはできない。
typedef HogeHoge<int> HHInt;のようなことはできるけど、
typedef HogeHoge Hoge;は今のC++ではできない。
0796デフォルトの名無しさん
2006/03/12(日) 08:40:020797デフォルトの名無しさん
2006/03/12(日) 09:05:31それぐらい理解済みだと思うぞ
0798デフォルトの名無しさん
2006/03/12(日) 13:05:470799デフォルトの名無しさん
2006/03/12(日) 15:04:03namespace abcdefg
{
int result1();
int result2();
int result3();
};
もしもプログラム中どこからも int result3(); を呼び出しても参照してもいないとします。
この時実行ファイルに int result3(); の部分は組み込まれるのでしょうか?
0800デフォルトの名無しさん
2006/03/12(日) 15:11:090801デフォルトの名無しさん
2006/03/12(日) 15:13:00result1() と result()3 が同じ名前空間で宣言されていることと
result3() のコードがリンクされるかどうかは全く無関係
「result3() の部分が組み込まれるか?」というのはリンク対象
になるか?ということだと思うが、そりゃ result3() の定義を
含むオブジェクトファイルをリンカに食わせればたとえ全く
呼び出されていなくても無駄にリンクされるし、
当該オブジェクトファイルを静的ライブラリ化していたとして、
result1() の定義と result3() の定義が同じオブジェクトであれば
一緒にリンクされる。リンカの扱う単位はオブジェクトファイル単位だから。
0802デフォルトの名無しさん
2006/03/12(日) 15:13:22関すコールは直接呼ぶだけじゃなく、関数ポインタを使って間接的に
呼び出すこともあるんだから、そこまで追跡するのは無理だべ。
コールバック関数を外部モジュールへ登録するなんて場合もあるわけだし。
0803デフォルトの名無しさん
2006/03/12(日) 15:14:03あるときには警告してくれるリンカもある。
0804デフォルトの名無しさん
2006/03/12(日) 15:17:21コンパイラ、リンカの実装しだい。
0805デフォルトの名無しさん
2006/03/12(日) 15:18:370806799
2006/03/12(日) 15:19:07異なるアプリケーションで使えそうな関数を独自のライブラリとし、
複数のアプリケーションでプロジェクトに追加できるような形に
した場合、この独自ライブラリの規模が膨らむほど実行ファイルの
サイズはデカくなっていくと考えていいんですね?
0807デフォルトの名無しさん
2006/03/12(日) 15:19:56それって参照したことになるんじゃない?
result3の識別子を使わずに確実に関数ポインタ得るのは無理だろうし。
0808デフォルトの名無しさん
2006/03/12(日) 15:21:36静的リンクしてたら基本的にそうなるだろうな。
ただ、コンパイラ、リンカの実装によってはそうならない可能性もあるし、
特定の実装をターゲットにすれば回避策もいくらかはあるだろう。
0809デフォルトの名無しさん
2006/03/12(日) 15:22:50全て実行ファイルにリンクされるが
リンカによっては、それらを判断してリンクするときに除外するものもある。
つまり>>804。
「一般的なリンカ」なら、>>801-802。
0811デフォルトの名無しさん
2006/03/12(日) 15:24:50そりゃ、細かいこと言えばコンパイラ、リンカの実装次第としか
言いようがないので一般論でしか書けないけど。
静的ライブラリを作成するなら各関数ごとに異なるファイルに
定義を書くといい。100個のある関数を100個の *.cpp に書いて
コンパイルしてできた100個の *.o から libhoge.a を作って置けば、
リンクしなけりゃならない関数(を含むモジュール)だけ
リンカが取り出してリンクしてくれる。
もし100個ある関数を一つの hoge.cpp に書いてしまえば、
それをコンパイルしてできた hoge.o に100個の関数が
全部含まれているわけで、そのうち一つでもリンク対象に
なってるとリンカは hoge.o 丸ごとリンクする。
って、のがよくあるリンカの振る舞いだと思う。
0812デフォルトの名無しさん
2006/03/12(日) 15:31:00マップファイルを出力して確認しろ
0813デフォルトの名無しさん
2006/03/12(日) 15:41:52アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
http://pc8.2ch.net/test/read.cgi/prog/1140616676/
0814デフォルトの名無しさん
2006/03/12(日) 16:09:21ポインタはアドレスを格納するための変数?
0815デフォルトの名無しさん
2006/03/12(日) 16:12:07あとは、メンバ関数ポインタとか変態じみたもの。
0816デフォルトの名無しさん
2006/03/12(日) 16:16:130817デフォルトの名無しさん
2006/03/12(日) 16:22:47イテレーターが生み出されたんだろうな。
0818デフォルトの名無しさん
2006/03/12(日) 16:29:00一般の意味では間違いじゃあないんだよね。
0819デフォルトの名無しさん
2006/03/12(日) 16:59:100820デフォルトの名無しさん
2006/03/12(日) 17:18:48ポインタにアドレスを代入できるが
アドレスにポインタは代入できない
0821デフォルトの名無しさん
2006/03/12(日) 17:26:091) (型を持った)アドレス値
2) アドレス値を保持する変数
の2通りの使い方がされる。
厳密には1)なのだが、2)の意味で使われることも多いし、
人によっても使い方が違ったりする。
0822デフォルトの名無しさん
2006/03/12(日) 17:32:05なにを根拠にそんないいかげんな情報を書き込んでるの?
0823デフォルトの名無しさん
2006/03/12(日) 17:34:29コンストなポインタがアドレス
ポインタはPOD型のイテレーター
―― C++厨の解釈 ――
0824デフォルトの名無しさん
2006/03/12(日) 17:37:070825デフォルトの名無しさん
2006/03/12(日) 17:38:110826デフォルトの名無しさん
2006/03/12(日) 17:38:360827デフォルトの名無しさん
2006/03/12(日) 17:43:100828デフォルトの名無しさん
2006/03/12(日) 17:44:07ビョーン
0829デフォルトの名無しさん
2006/03/12(日) 18:00:13例えば、
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html
には、mallocが「ポインタを返す」とあるが、
mallocが返すのはアドレスの「値」であって、「変数」ではないだろ?
まあ、ぐぐってみたら、
「ポインタ」という言葉は「ポインタ変数」の意味で使われるほうが一般的
というのはわかったよ。
0830デフォルトの名無しさん
2006/03/12(日) 18:05:27値とそれを保持する変数が同じ呼ばれ方をすることがあるのは整数型でも同じ。
ただ、あの流れで「ポインタ」と「アドレス」を混同しているのが気になった。
0831デフォルトの名無しさん
2006/03/12(日) 18:06:36malloc が返してるのはポインタ.
それを int に評価すると,多くの場合,そのアドレスの値が得られる.
0832デフォルトの名無しさん
2006/03/12(日) 18:47:18「ポインタ(pointer)とは、メモリーアドレスを保持する変数のことです。」
って書いてあったよ
0833デフォルトの名無しさん
2006/03/12(日) 18:49:22「それを int に評価すると,多くの場合,そのアドレスの値が得られる」
多くの場合、ってのがポイントだよな。
0834デフォルトの名無しさん
2006/03/12(日) 18:51:49こんなページみつけた
0835デフォルトの名無しさん
2006/03/12(日) 19:55:29(書くスレ間違ったっぽい、はきだめC/C++にかいてしまった)
入力された日付(YYYYMMDD)が正しいかどうかチェックしたいのですが、
チェックする関数が見当たりません。
フォーマットが正しいかどうかなら自分でチェックすればできますが、
カレンダーにない日付もチェックしたいです。(2006/02/30はエラーみたいな)
チェック方法をしっている方おられました教えてやってください。
環境はVCでSDKです。(MFCは使ってはダメ)
0836デフォルトの名無しさん
2006/03/12(日) 20:00:48http://www.boost.org/doc/html/date_time.html
マルチだってわかってんなら元スレからリンクぐらい貼れ。
0837デフォルトの名無しさん
2006/03/12(日) 20:01:28方法も何もそのままだろ。
YYYY、MM、DDに切り分けて、
MMが1以上12以下でなければエラー。
DDはMMから最大日数を割り出して、(2月はうるう年も考えて)
1 <= DD <= 最大日数でなければエラー。
んな感じでいいんじゃないの。
0838デフォルトの名無しさん
2006/03/12(日) 20:07:20おれも>>837で十分だと思うが
うるう年の算出方法は有名だし
0839デフォルトの名無しさん
2006/03/12(日) 20:08:07そっか、スマンうるう年がいまいちわかんなくて、
便利な関数でもあればと思ったんだが、自分でチェックします。
ありがとう。
うるう年についてはここにかいてあったや。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;214019
0840デフォルトの名無しさん
2006/03/12(日) 20:08:340841504
2006/03/12(日) 20:25:041970年〜2038年までしか扱えないっぽい・・。
作ってるアプリが2038年まで使われるとは思えないが、
boost::date_timeとやらか、自作でいこうと思います。
0842835
2006/03/12(日) 20:25:530843デフォルトの名無しさん
2006/03/12(日) 20:32:34この答えはスレ違いだけど。
0844デフォルトの名無しさん
2006/03/12(日) 20:50:02俺は詳しく知らないがタブンSystemTimeToFileTimeではないか?
0845デフォルトの名無しさん
2006/03/12(日) 21:02:010846デフォルトの名無しさん
2006/03/13(月) 02:36:25};
class Dsound{
sound foo[2];
};
の様なクラスがあり、soundの読み込みはファイルを指定していました。
またDsoundは、2つの別々のファイルを指定するようになっていました。
このDsoundに1つのステレオ音声ファイルを読み込ませたいのですが、
よい方法はありませんでしょうか?
Dsoundが自前でステレオファイルを読み込むようにすると
sound2つを持っている意味がなくなるので、良い方法ではない気がするのですが。。
0847デフォルトの名無しさん
2006/03/13(月) 02:46:02Dsound がステレオ音声ファイルを受け取って
sound の読み込むファイルに変換してから渡せばいいんじゃね?
C++ 関係ないな。
0848デフォルトの名無しさん
2006/03/13(月) 11:41:041chの音声を取り扱うクラスsoundと
Nchの音声を取り扱うクラスmulti_soundにして
class multi_sound {
std::vector<sound> snd;
};
soundでは1chのみの入出力をサポート、
multi_soundではNchまとめた入出力をサポート
と思ったが、イマイチだな。
入出力は別クラスにして、音声の実データへのアクセスはfunctorを使ったらどうだろう?
0849デフォルトの名無しさん
2006/03/13(月) 12:53:19void f(const std::string&); //#2
main() { f("TEST"); }
↑
g++: error
vc7: error
bc5: #1
Borland が ぼけ ってことでいいと思う?
#2 もユーザ定義変換だと俺は思うが、
途中の厳密合致もカウントされるのかな
0850デフォルトの名無しさん
2006/03/13(月) 13:16:01errorってなんだよ。何の問題もないぞ。
0851デフォルトの名無しさん
2006/03/13(月) 14:20:060852デフォルトの名無しさん
2006/03/13(月) 15:25:56警告じゃなくエラーね、make が止まるほう
$ g++ a.cpp
a.cpp: In function 'int main()':
a.cpp:8: error: call of overloaded 'f(const char [5])' is ambiguous
a.cpp:3: note: candidates are: void f(std::string)
a.cpp:4: note: void f(const std::string&)
問題ないって、Borland が正解ってこと?
0853デフォルトの名無しさん
2006/03/13(月) 15:53:29VC++2003でも問題なかったけど
0854853
2006/03/13(月) 15:58:510855デフォルトの名無しさん
2006/03/14(火) 07:01:24タスクマネージャの該当アプリのメモリ使用量が減りません。
どうゆう事でしょうか?
0856デフォルトの名無しさん
2006/03/14(火) 07:19:27それは、コンピュータを再起動する必要があります。
0857デフォルトの名無しさん
2006/03/14(火) 07:49:43リークはないはずです><
0858デフォルトの名無しさん
2006/03/14(火) 07:56:15OSがある程度まとめて確保してプログラムの要求で小出しする感じ
0859デフォルトの名無しさん
2006/03/14(火) 07:58:06ライブラリに一任されている。
0860デフォルトの名無しさん
2006/03/14(火) 09:53:260861デフォルトの名無しさん
2006/03/14(火) 11:09:36なんでそうなる?
現にタスクマネージャから障害が報告されているんだろ?
そのアプリが意図のとおりに動かなくていいのなら心配する必要もなかろうが
0862デフォルトの名無しさん
2006/03/14(火) 11:10:060863デフォルトの名無しさん
2006/03/14(火) 11:18:20流れ読めよ。
0864デフォルトの名無しさん
2006/03/14(火) 11:32:400865デフォルトの名無しさん
2006/03/14(火) 11:51:120866デフォルトの名無しさん
2006/03/14(火) 11:54:240867デフォルトの名無しさん
2006/03/14(火) 11:58:360868デフォルトの名無しさん
2006/03/14(火) 12:09:52頭の優劣
0869デフォルトの名無しさん
2006/03/14(火) 13:07:13ttp://www.tietew.jp/cppll/archive/12614
Lambda関数とクロージャーに関する言語拡張
またぶっ壊れた案を…。(いや、あったら便利だろうけどさ)
そのうちC++言語自体が意識を持つ能動的進化を遂げるシステムとか、それなんてSF?な世界になりそうな悪寒(w
0870デフォルトの名無しさん
2006/03/14(火) 13:09:24そこかしこでコンパイラ拡張しまくってるのに
そんなにコストのかかる話なのかね。
0871デフォルトの名無しさん
2006/03/14(火) 13:33:12キーワードの追加は大きいだろうな。
文法もいじることになりそうだし。
デストラクタがあるから必要性が薄いってのもあるだろう。
0872デフォルトの名無しさん
2006/03/14(火) 13:35:21これはないな
0873デフォルトの名無しさん
2006/03/14(火) 13:40:440874デフォルトの名無しさん
2006/03/14(火) 13:43:350875デフォルトの名無しさん
2006/03/14(火) 13:45:180876デフォルトの名無しさん
2006/03/14(火) 13:47:08うるせー禿
0877デフォルトの名無しさん
2006/03/14(火) 13:48:51禿がFAQでイラネって言ってるのが障害だったりしてな。
http://www.research.att.com/~bs/bs_faq2.html#finally
まずはこれに反論するのが手始めだろう。
0878デフォルトの名無しさん
2006/03/14(火) 14:13:100879デフォルトの名無しさん
2006/03/14(火) 14:13:36その後に更に配列を増やしたい時はp = new int [5]とすれば
pには15個の配列はできるのでしょうか?
0880デフォルトの名無しさん
2006/03/14(火) 14:15:210881879
2006/03/14(火) 14:20:120882879
2006/03/14(火) 14:26:300883デフォルトの名無しさん
2006/03/14(火) 15:07:28どうやってやったの?
0884デフォルトの名無しさん
2006/03/14(火) 16:44:050885デフォルトの名無しさん
2006/03/14(火) 17:19:49その構文がもうちょっとまともなら嬉しいんだけどな。無理だろうとは思うけど。
0886デフォルトの名無しさん
2006/03/14(火) 18:57:010887デフォルトの名無しさん
2006/03/14(火) 20:56:58そんな言語として発展しつつあって、とてもうれしいです。
0888デフォルトの名無しさん
2006/03/14(火) 20:59:56"C++ Programming with STL.Lambda(Boost.lambda)"でいいけどな。
0889デフォルトの名無しさん
2006/03/14(火) 22:26:430890デフォルトの名無しさん
2006/03/14(火) 22:27:450891デフォルトの名無しさん
2006/03/14(火) 23:15:35C++勉強しようと思い、ブックオフで買った独習C++をみながら
例題見ながら打ったら、いきなりエラーが出た。
で、http://wisdom.sakura.ne.jp/みたら、標準のヘッダ宣言は
<iostream.h>じゃなくて、<iostream>なんだね
あとusing namespaceとか。
ただ、VC++6.0だと<iostream.h>で動いたので混乱した。
いつ、標準化されたの?で最近のC#もいずれ標準化されんの?
標準化されたとき、過去の定義された物に拡張された禁止事項が
増えるならわかるけど、ヘッダの宣言みたいなソースそのものを全部
書き直す事になるのって、標準化っていうの?
まぁ、俺の買った独習C++は見ると10年前出版のものだったけど
標準化ってどこの誰がしてんの、教えて。
殴りに行くから
0892デフォルトの名無しさん
2006/03/14(火) 23:17:30http://human5.2ch.net/test/read.cgi/ms/1141694640/
8 名前:可愛い奥様[] 投稿日:2006/03/07(火) 11:05:23 ID:8dtluKkp
夫の歯ブラシで洗面所の排水溝掃除。
洗面所をビショビショに汚した罰だ。
20 名前:可愛い奥様[age] 投稿日:2006/03/08(水) 00:40:17 ID:pRrk6A21
前に頭きた時あって
1度だけ歯ブラシで肛門カキカキしちゃった
22 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:27:12 ID:gU5mHc7J
よかった。どこのお宅も同じようなことしてて。
24 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:36:35 ID:SSSFsTqE
そうそう、ヘンなモノはダンナのお皿へ直行だよね。
41 名前:可愛い奥様[] 投稿日:2006/03/08(水) 11:55:18 ID:sjj+/60Q
見てるだけで気が晴れるな!
皆さん、頑張ってね!
42 名前:可愛い奥様[sage] 投稿日:2006/03/08(水) 20:33:51 ID:Ju2N1s7+
年金分割が楽しみじゃのう
63 名前:可愛い奥様[] 投稿日:2006/03/10(金) 08:55:20 ID:qLfJYpJR
家族で密かにはぶっている。
男性は肉体が汚く、精神が美しい傾向がある。(気に入らない相手に肉体的攻撃を加える⇒精神的攻撃も加える男は猛者)
女は肉体が美しく、精神が汚い傾向がある。(気に入らない相手に精神的攻撃を加える⇒肉体的攻撃も加える女は猛者)
女は隠れて悪事をする。気に入らない女子を便所でボコったり、便器舐めさせたり、男の友人を使ってレイプ、仲間外れにしたり。陰口、嫉妬。
女は対人関係において、この汚い性格を隠そうとするため、外面が非常によくなる。(猫かぶり)
男性諸君は外面に騙されないように気を付けて下さい。
0893デフォルトの名無しさん
2006/03/14(火) 23:17:47あと、C# は関係ない。
禿は殴らないであげてね。
0894デフォルトの名無しさん
2006/03/14(火) 23:19:52http://www.open-std.org/jtc1/sc22/wg21/
0895デフォルトの名無しさん
2006/03/14(火) 23:25:37ちなみに、94年に作業原案(WD)が委員会原案(CD)になっている
0896デフォルトの名無しさん
2006/03/14(火) 23:29:54クロージャは便利そうだから結構ほしかった。
Lambdaとfunctionまたは、closureを予約語にしてしまったほうが綺麗なきがする。
色付きエディタで映えるし。
安易かな・・・。
0897デフォルトの名無しさん
2006/03/14(火) 23:31:15たとえば、今までclosureという変数名を使ってた奴らのことも考えてやれよ、って。
0898896
2006/03/14(火) 23:32:430899デフォルトの名無しさん
2006/03/14(火) 23:37:17>>897
俺はそんな変数名使った事ないな。
結構、根が深い拡張になりそうだからそれ位はいいと思うけどね。
一回やっちゃうと、どんどんやっちゃうから抑制のためかねぇ。
0900デフォルトの名無しさん
2006/03/14(火) 23:46:300901デフォルトの名無しさん
2006/03/15(水) 00:15:18独習C++も新しい版は<iostream>を使っている。
金はケチるな。新しいのを買え。
0902デフォルトの名無しさん
2006/03/15(水) 00:18:170903デフォルトの名無しさん
2006/03/15(水) 00:28:260904デフォルトの名無しさん
2006/03/15(水) 00:30:320905デフォルトの名無しさん
2006/03/15(水) 00:31:09苦肉の策じゃまいか。
namespace って結構新しいと思ったし、今更名前かえても困る。
だから「.h 付き」は今までどおり、namespace なしのもの、
「.h 抜き」は namespace std に包んだものにしたとか。
標準化時の混乱が目に浮かぶわ。
0906デフォルトの名無しさん
2006/03/15(水) 00:34:090907デフォルトの名無しさん
2006/03/15(水) 00:36:21いやその時にもうちょっとマシな命名法は無かったのかって話だ。
.hppとかあるじゃん
0908デフォルトの名無しさん
2006/03/15(水) 00:40:390909デフォルトの名無しさん
2006/03/15(水) 00:43:36俺はそう思っている。
0910デフォルトの名無しさん
2006/03/15(水) 00:45:290911デフォルトの名無しさん
2006/03/15(水) 00:47:540912デフォルトの名無しさん
2006/03/15(水) 00:49:14たぶん夢ばっかり見て現実を見てなかったんだろうな。
.h を取っ払ったのはアホもとい前衛過ぎ。
0913デフォルトの名無しさん
2006/03/15(水) 00:49:15プリプロセッサがヘッダ名に拡張子を付けて実際のファイル名を決めるという実装でも問題ない。
0914デフォルトの名無しさん
2006/03/15(水) 01:01:180915デフォルトの名無しさん
2006/03/15(水) 01:04:000916デフォルトの名無しさん
2006/03/15(水) 01:04:47余所逝け、スレ違いだ。
0917デフォルトの名無しさん
2006/03/15(水) 01:06:14VB 色々楽=楽な分色々な知識が身に付かない
C 色々しんどい=しんどい分色々な知識が身に付く
0918デフォルトの名無しさん
2006/03/15(水) 01:11:00<iostream> で引用されるファイルに「拡張子がない」などと思いこんでいる奴は天然ぼけ
0919デフォルトの名無しさん
2006/03/15(水) 01:13:28だからそれがアホ・・・もとい、前衛過ぎなんだって。
0920デフォルトの名無しさん
2006/03/15(水) 01:13:51>>917
なるほど、まだ自分は初心者なのでとても為になりました。
有り難う御座いました。
>>916
すいませんでした。
0921デフォルトの名無しさん
2006/03/15(水) 01:19:270922デフォルトの名無しさん
2006/03/15(水) 01:21:54おまい、V=Rでないと前衛過ぎって手合いか?
0923デフォルトの名無しさん
2006/03/15(水) 01:25:20V→Virtual
R→Real
であってる? まぁ、そうだとしてもなにがいいたいのかよくわからん。
とにかくに俺は .h を取っ払ったのは失敗もしくは時期尚早だったと評価している。
0924デフォルトの名無しさん
2006/03/15(水) 01:27:330925デフォルトの名無しさん
2006/03/15(水) 01:32:36俺は gcc を使わないからどうでもいい。
0926デフォルトの名無しさん
2006/03/15(水) 05:53:12「今となってはあれは失敗だった」というならまだしも、
あとから見えてきたことを使って当時の決断をアホだの何だのってのは
ずいぶんと卑怯な言いぐさではあるな。
0927デフォルトの名無しさん
2006/03/15(水) 06:19:13いまとなってみれば当時の決断はアホだった、ってことだろ。
0928デフォルトの名無しさん
2006/03/15(水) 06:52:220929デフォルトの名無しさん
2006/03/15(水) 06:59:47まじれすだが、過去を振り返って決断が誤りだった
(決断の結果失敗した、ではない)と思うことはあるだろ?
それを批判するのが卑怯か?
0930デフォルトの名無しさん
2006/03/15(水) 07:38:06別に当時の人がアホだったわけじゃないだろ。
当時の誰もが分からなかったんだから。
まあやらずとも分かることなら、批判されてしかるべきだが。
0931デフォルトの名無しさん
2006/03/15(水) 08:04:090932デフォルトの名無しさん
2006/03/15(水) 09:08:480933デフォルトの名無しさん
2006/03/15(水) 09:44:05結果だけを見て批判するのは卑怯だな
0934デフォルトの名無しさん
2006/03/15(水) 09:53:140935デフォルトの名無しさん
2006/03/15(水) 11:50:170936デフォルトの名無しさん
2006/03/15(水) 11:58:260937デフォルトの名無しさん
2006/03/15(水) 12:18:170938デフォルトの名無しさん
2006/03/15(水) 12:36:26仮にその必要があったとしても、実際には拡張子ありのファイルを置いておいて
コンパイラが適当に判断して読みに行けばいいだけじゃん
0939デフォルトの名無しさん
2006/03/15(水) 12:46:420940デフォルトの名無しさん
2006/03/15(水) 12:53:33jpegで送ってほしいと頼むと、bmpの拡張子をjpgにして送ってくる人が後を絶たない。
拡張子など信用できない。
ヘッダ等に拡張子がなくて不便と思うのは、コードエディタ(具体的にはvimだが)で
構文強調表示を明示的に指定しないといけない点だな。
でも漏れテンプレートライブラリのヘッダは拡張子つけてないな。
0941デフォルトの名無しさん
2006/03/15(水) 12:54:080942デフォルトの名無しさん
2006/03/15(水) 13:03:43スレタイは「C++相談室 part48」
テンプレは>>1-16
特に>>9、>>15-16に注意
標準ライブラリ・STLについての話題もC++相談室で扱う
非標準のライブラリ(Boost, Loki等)については他の専用スレ
であってるのかな
0943デフォルトの名無しさん
2006/03/15(水) 13:34:01いわゆるハードコーディングになるから
0944デフォルトの名無しさん
2006/03/15(水) 13:35:000945デフォルトの名無しさん
2006/03/15(水) 13:56:19あるいはiostreamというファイルの内容が拡張子付きのファイルをインクルードするだけと言うようにするとか。
0946デフォルトの名無しさん
2006/03/15(水) 14:46:160947デフォルトの名無しさん
2006/03/15(水) 15:11:100948デフォルトの名無しさん
2006/03/15(水) 15:12:540949デフォルトの名無しさん
2006/03/15(水) 15:15:36コンパイルして、拡張子無しのオブジェクトファイルを生成し、
それをリンクして拡張子無しの実行ファイルを作る。
0950デフォルトの名無しさん
2006/03/15(水) 15:49:28推論規則が使えないと辛いんですが。
0951デフォルトの名無しさん
2006/03/15(水) 15:50:080952デフォルトの名無しさん
2006/03/15(水) 16:21:58気になった単語以外何も読まずにレスするのはどうかと思うぞ。
0953デフォルトの名無しさん
2006/03/15(水) 16:49:19拡張子に依存した運用形態に異常な執着を持っていたり、なんかたまんねーもんあるな
0954デフォルトの名無しさん
2006/03/15(水) 16:52:00http://www.emotiongrafix.com/my/misc/cpp.txt
0955デフォルトの名無しさん
2006/03/15(水) 17:00:21class Hello
{
public static void main(String[] args){
System.out.println("hello");
}
}
0956デフォルトの名無しさん
2006/03/15(水) 18:09:01C++でおk
0957デフォルトの名無しさん
2006/03/15(水) 18:13:230958デフォルトの名無しさん
2006/03/15(水) 21:21:18http://pc8.2ch.net/test/read.cgi/tech/1142423595/l50
0959デフォルトの名無しさん
2006/03/16(木) 01:35:49当初からアホ・・・もとい、前衛過ぎると思ってましたがなにか?
0960デフォルトの名無しさん
2006/03/16(木) 10:53:360961905
2006/03/16(木) 11:29:23全部自分でリネームしちゃえばいいじゃん。
他の人は納得してんだから、無用な労力を負うべきだとすれば君ヒトリだ。
0962デフォルトの名無しさん
2006/03/16(木) 23:24:32君の頭も相当アホ・・・もとい、前衛的だねぇ。
0963デフォルトの名無しさん
2006/03/16(木) 23:48:360964デフォルトの名無しさん
2006/03/17(金) 00:25:41一方は拡張子を取っ払ったことをアホだって言ってるだけだし、
もう一方も拡張子を取っ払ったことはアホだと認めてんだろ?
意見が同じなのになんでもめるの?
0965デフォルトの名無しさん
2006/03/17(金) 00:39:470966デフォルトの名無しさん
2006/03/17(金) 00:40:580967デフォルトの名無しさん
2006/03/17(金) 01:11:500968デフォルトの名無しさん
2006/03/17(金) 03:42:27そのファイルを作ったやつに聞け
0969デフォルトの名無しさん
2006/03/17(金) 05:47:13どいつもこいつも俺の思う通りに動かない
0970デフォルトの名無しさん
2006/03/17(金) 06:31:150971デフォルトの名無しさん
2006/03/17(金) 06:36:500972デフォルトの名無しさん
2006/03/17(金) 07:57:010973デフォルトの名無しさん
2006/03/17(金) 09:46:050974デフォルトの名無しさん
2006/03/17(金) 10:09:520975デフォルトの名無しさん
2006/03/17(金) 10:16:350976デフォルトの名無しさん
2006/03/17(金) 10:32:360977デフォルトの名無しさん
2006/03/17(金) 10:35:02え?
0978デフォルトの名無しさん
2006/03/17(金) 10:46:420979デフォルトの名無しさん
2006/03/17(金) 10:47:040980デフォルトの名無しさん
2006/03/17(金) 10:59:30JISもCP932もUCS-2もBOMも今思えば超アホなコード
0981デフォルトの名無しさん
2006/03/17(金) 11:05:040982デフォルトの名無しさん
2006/03/17(金) 11:05:07いまだに引きずってるのがあほらしい。
0983デフォルトの名無しさん
2006/03/17(金) 11:36:220984デフォルトの名無しさん
2006/03/17(金) 12:31:060985デフォルトの名無しさん
2006/03/17(金) 15:52:08クラスのメンバ関数の引数のあとにconstが付いてるんだけれど、どういう意味?
自分の持ってるC++入門書には書いてなかった
void Function() const←コレ
0986デフォルトの名無しさん
2006/03/17(金) 16:07:31constなインスタンスについてそのメンバを呼べる、ということ。
const X x;
x.Function();
0987デフォルトの名無しさん
2006/03/17(金) 16:11:51変更しませんよ、ということを宣言している。
なので変更するようなコードを書くと怒られる。
0988デフォルトの名無しさん
2006/03/17(金) 16:30:03サンクス
・・すまん、どっちですか
0989デフォルトの名無しさん
2006/03/17(金) 16:43:240990デフォルトの名無しさん
2006/03/17(金) 16:45:260991デフォルトの名無しさん
2006/03/17(金) 17:10:52うむ。>>989 が理解できれば const は一応分かったことになるが、
const はそれだけで5杯くらいメシが食えちゃうくらい味わい深いからな。
0992デフォルトの名無しさん
2006/03/17(金) 17:13:560993デフォルトの名無しさん
2006/03/17(金) 17:39:05処理
}
で、 boost::program_options を使おうとしてハマった。
なんで両方とも const とらなきゃならんのだよぉ
0994デフォルトの名無しさん
2006/03/17(金) 18:04:48ISO/IEC14882 3.6.1 Main function ではっきり非 const とされている
0995デフォルトの名無しさん
2006/03/17(金) 18:10:40argv の方で怒られてたんだろうな。
そうか、規格で非 const とされてたか。
それは知らなかった。
0996デフォルトの名無しさん
2006/03/17(金) 18:21:090997デフォルトの名無しさん
2006/03/17(金) 19:35:26たぶん人からもらったソース(笑
0998デフォルトの名無しさん
2006/03/17(金) 20:23:56おいおい,嘘いっちゃいかんよ.
3.6.1 の 2 に「It shall have a return type of type int, but otherwise its type is implementation-defined.」とあるように,戻り値だけは決まってるけどあとは実装による.const を許す実装があったってかまわない.
0999デフォルトの名無しさん
2006/03/17(金) 20:27:12多分、>>994の真意は、「規格で明示的に認められているmainの型は引数にconstがついていない」ということだろう。
1000次スレ
2006/03/17(金) 20:43:15http://pc8.2ch.net/test/read.cgi/tech/1142423595/l50
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。