C++相談室 part54
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v
2006/10/30(月) 22:34:08ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
テンプレその他 >>2-15 付近参照
前スレ
C++相談室 part53
http://pc8.2ch.net/test/read.cgi/tech/1159340181/
0002v(^・^)v
2006/10/30(月) 22:34:41[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
http://www.cppreference.com/ (英語)
http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない)
[禿 Stroustrup]
http://public.research.att.com/~bs/
[C++ International Standard]
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/
ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
0003v(^・^)v
2006/10/30(月) 22:35:03amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
ttp://www.amazon.com/exec/obidos/ASIN/0201700735/
ttp://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
ttp://www.amazon.com/exec/obidos/ASIN/0201824701/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
ttp://www.amazon.com/exec/obidos/ASIN/0201379260/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
ttp://www.amazon.com/exec/obidos/ASIN/0201924889/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
ttp://www.amazon.com/exec/obidos/ASIN/020163371X/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
ttp://www.amazon.com/exec/obidos/ASIN/0201615622/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
ttp://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
ttp://www.amazon.com/exec/obidos/ASIN/0201760428/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)
C++ Coding Standards
ttp://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716860/ (翻訳)
0004v(^・^)v
2006/10/30(月) 22:35:30Effective 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/
0005v(^・^)v
2006/10/30(月) 22:35:50[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
0006v(^・^)v
2006/10/30(月) 22:36:122 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
0007v(^・^)v
2006/10/30(月) 22:36:3217 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/
0008v(^・^)v
2006/10/30(月) 22:36:5332 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/
0009v(^・^)v
2006/10/30(月) 22:37:1347 http://pc8.2ch.net/test/read.cgi/tech/1139931895/
48 http://pc8.2ch.net/test/read.cgi/tech/1142423595/
49 http://pc8.2ch.net/test/read.cgi/tech/1146185570/
50 http://pc8.2ch.net/test/read.cgi/tech/1149427282/
51 http://pc8.2ch.net/test/read.cgi/tech/1153079297/
52 http://pc8.2ch.net/test/read.cgi/tech/1156525695/
53 http://pc8.2ch.net/test/read.cgi/tech/1159340181/
■関連スレ■
多すぎ。とりあえずスレタイ C++ で検索して。
以下、スレタイで見つからなさそうな関連スレ。
Boostを語れゴラァ part3
http://pc8.2ch.net/test/read.cgi/tech/1158991211/
GCCについて part7
http://pc8.2ch.net/test/read.cgi/tech/1145357824/
0010デフォルトの名無しさん
2006/10/30(月) 22:38:150011デフォルトの名無しさん
2006/10/30(月) 22:43:36もつかれ�d。
0012デフォルトの名無しさん
2006/10/30(月) 22:45:430013デフォルトの名無しさん
2006/10/30(月) 22:53:45環境によるだろ。
俺はVC++に /Yc オプションを指定して、極力
プリコンパイルヘッダを使用するようにして使っているが、例えばboost::lambdaを
使っても使わない時と比べ10秒ほどしか増えない。
0014デフォルトの名無しさん
2006/10/30(月) 23:05:370015デフォルトの名無しさん
2006/10/30(月) 23:08:52あれ?こんなのあったっけ?
0016デフォルトの名無しさん
2006/10/30(月) 23:12:16ないね
0017デフォルトの名無しさん
2006/10/30(月) 23:16:38とかいうエラーが出るんだけどこれってどうすればいいの?
0018デフォルトの名無しさん
2006/10/30(月) 23:17:47後死ね。
0019デフォルトの名無しさん
2006/10/30(月) 23:18:31まぁヒントぐらいにはなったな。
うむごくろう。
0020デフォルトの名無しさん
2006/10/30(月) 23:20:15自作パーサとSpiritじゃマジでコンパイル時間100倍になるぜ。
0021デフォルトの名無しさん
2006/10/30(月) 23:20:23環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0022デフォルトの名無しさん
2006/10/30(月) 23:32:400023デフォルトの名無しさん
2006/10/30(月) 23:36:23〜しばらくおまちください〜
0024デフォルトの名無しさん
2006/10/30(月) 23:52:44CreateFileとかCopyFile等の動作チェック用です。
自分で作ってもいんですが、既に多機能な機能やグラフィカルなツールがあるかもしれないので探しています。
VisualStudioパッケージあるかもしれんがようわからん。
誰か知らないか?
0025デフォルトの名無しさん
2006/10/30(月) 23:56:44スレ違い。意味が分からんからどこ行っても答えは得られないだろうが。
0026デフォルトの名無しさん
2006/10/31(火) 00:24:29メモ帳
0027デフォルトの名無しさん
2006/10/31(火) 01:57:43Σ(゚Д゚;エーッ!!
0028デフォルトの名無しさん
2006/10/31(火) 02:14:540029デフォルトの名無しさん
2006/10/31(火) 02:34:570030デフォルトの名無しさん
2006/10/31(火) 02:37:48それだけ聞くとできそうに思う。
何故不可能だと思ったのかね?
0031デフォルトの名無しさん
2006/10/31(火) 02:37:55環境による
0032デフォルトの名無しさん
2006/10/31(火) 03:19:33こういうやつのことか?
template <typename T>
class A { public: T v; };
template <typename T>
std::ostream& operator<<(std::ostream& os, const A<T>& v)
{ return os << v.v; }
0033デフォルトの名無しさん
2006/10/31(火) 15:14:17その通りです
>>31
GCCだと単純に>>32のように書くとコンパイルエラーになります
Tの型が未決定なためエラーになるようです
なんかうまい方法はないでしょうか
0034デフォルトの名無しさん
2006/10/31(火) 15:49:09gcc-3.3.6, gcc-3.4.6, gcc-4.0.3, gcc-4.1.1 on Linux でコンパイル通るぞ。
コードの別のところの問題だろう。
手元で通したコード全文はこれ。
#include <iostream>
#include <ostream>
(ここに >>32 を入れる)
int main(void)
{
A<int> a;
a.v = 1;
std::cout << a << std::endl;
return 0;
}
0035デフォルトの名無しさん
2006/10/31(火) 18:25:41逆に言うとできないわけがない。
0036デフォルトの名無しさん
2006/10/31(火) 23:29:17int a
int b
std::string str;
};
class B{
int a
int b
vector<double>v_fat;
};
class C{
int a;
int b;
map<std::string, int>num;
};
こんな似た様なメンバを持つクラスをJavaのArrayListみたいに
扱いたいときはどうするのですか?Objectクラスみたいなのを
作ってキャストすればOK?
0037デフォルトの名無しさん
2006/10/31(火) 23:34:29ttp://www.ksky.ne.jp/~seahorse/cpp/virtualbase.html
どれにしてもテンプレートを使って、1つの型に押し込んでいることには違いない。
0038デフォルトの名無しさん
2006/11/01(水) 01:42:08共通部分を基底クラスにくくりだし、その基底クラスへのポインタの配列を作ればいい。
必要に応じて dynamic_cast する。しないでいい設計のほうが好ましいんだけど。
0039デフォルトの名無しさん
2006/11/01(水) 01:49:07そこの FruitItem は
template <class T>
class FruitItem : public Fruit, T {
public:
FruitItem() {}
FruitItem(const T& y) : T(y) {}
const char* color() const { return T::color(); }
};
としたほうがよさそうだな。
0040デフォルトの名無しさん
2006/11/01(水) 18:03:37Target lexical_castSource arg)
{
std::stringstream interpreter;
Target result;
if (!(interpreter << arg) || !(interpreter >> result) || !(interpreter >> std::ws).eof()) {
throw bad_lexical_cast();
}
return result;
}
Exceptional C++ Style で上のような記述を見かけたのですが、
>!(interpreter >> std::ws).eof()
の部分は何を行っているのでしょうか?
std::wsというのは初めて見ました
検索しても関係ないページがヒットしてしまい意味がつかめません・・・
0041デフォルトの名無しさん
2006/11/01(水) 18:49:39C++標準ライブラリ
§13.1.5 マニピュレータ
wsはistreamに適用して、空白を読み飛ばす
0042デフォルトの名無しさん
2006/11/01(水) 20:45:370043デフォルトの名無しさん
2006/11/01(水) 21:12:530044デフォルトの名無しさん
2006/11/01(水) 21:37:20ttp://www.google.co.jp/
0045デフォルトの名無しさん
2006/11/01(水) 21:44:590046デフォルトの名無しさん
2006/11/01(水) 22:28:240047デフォルトの名無しさん
2006/11/01(水) 22:47:11namespace A
{
struct X {};
void *operator new (size_t n, X&) { return 0; }
void f()
{
X c;
new (c) int; // ←ここ
}
}
"ここ"で(size_t n, X&)に適合する呼出が見つかりませんと言われてしまいます。
ネームスペースAからグローバルスペース?に移すと難なく通ります。
operator new (...)で呼び出すとネームスペースから外さなくてもエラーになりません。
仕様でしょうか?
ちなみにVS2003です。
0048デフォルトの名無しさん
2006/11/02(木) 00:05:40//敵の生成時に一時的に入れる変数と、敵をまとめて管理する変数
EnemyObj* enemy;
vector<EnemyObj*> EnemyArr;
//敵の生成時に呼ばれる関数
enemy = new Enemy1(arg_x, arg_y);
EnemyArr.push_back(enemy);
このようにした場合、例えばこれで敵を三体生成したとして、
(EnemyArr[0], EnemyArr[1], EnemyArr[2])
この中から
delete EnemyArr[1];
としてもオブジェクトが破棄されないので困っています。
一番最後に生成した物(この場合EnemyArr[2])なら破棄できるみたいなのですが・・・。
一体どうしたらいいでしょう。
0049デフォルトの名無しさん
2006/11/02(木) 00:19:22本当か?もう一度よく考えてみろ。
0050デフォルトの名無しさん
2006/11/02(木) 00:21:32えっと、それはどういう意味でですか?
「破棄できないはずはない」のか、「根本的なミスをしている」のか
どっちの意味でしょう。
0051デフォルトの名無しさん
2006/11/02(木) 00:22:120052デフォルトの名無しさん
2006/11/02(木) 00:28:04オブジェクトが普通に表示されたり、
deleteする前の値(位置情報 xやyなど)
をそのまま持っているかどうかで確認しています。
0053デフォルトの名無しさん
2006/11/02(木) 00:29:46> enemy = new Enemy1(arg_x, arg_y);
> EnemyArr.push_back(enemy);
原因の予感。push_back(const T&)じゃなかったか。
ゆえに、push_back(new Enemy1(arg_x, arg_y))で試してみて。
0054デフォルトの名無しさん
2006/11/02(木) 00:34:07それって、破棄したオブジェクトをそのまま使ってるんじゃないか?
erase()でvectorの方も縮めておかないとだめだろ。
0055デフォルトの名無しさん
2006/11/02(木) 00:34:33deleteしたからって中のデータは直ぐに破壊されん。
そんなん何の参考にならんし確認にもなってない。
0056デフォルトの名無しさん
2006/11/02(木) 00:36:15使いやすいぞ。erase()したら自動的にdeleteしてくれるしな。
0057デフォルトの名無しさん
2006/11/02(木) 00:42:11各個別は古典的にstateパターンで処理可能なルールとして実装できると思いますが
文脈を管理するためのクラスはどのように実現するのが一般的なのでしょうか?
ルールはR0 = Aから始まるとします。
A = B | C
B = a b c
C = a | b c
a = ...
b = ...
StateパターンでR0の状態を処理する。
0058デフォルトの名無しさん
2006/11/02(木) 00:42:59ポインタが指してる部分に情報が残ってるだけでは?
デストラクタにstd::cout << "Delete Enemy" << std::endl;って行を入れて動作を確認してみて。
0059デフォルトの名無しさん
2006/11/02(木) 00:44:190060デフォルトの名無しさん
2006/11/02(木) 00:45:17成る程、そういうことでしたか。
eraseする前に破棄されてるか確認したかったのですが、
それでは意味がないですね。
>>53
結局破棄されてないと勘違いしただけだったみたいですが、
その記述で一時的な変数が必要なくなって助かりました。
>>56
そういう便利なものもあるんですね。
ちょっと調べてみたいと思います。
>>58
成る程、デストラクタに入れておけば破棄された確認になりますね。
やってみます。
0061デフォルトの名無しさん
2006/11/02(木) 00:50:43とりあえず、文法を解析するときに
個別のルールはStateパターンで処理したいけど
文脈はどうやって処理すればいいのか思いつかないから助けて
ほしいだけかもしれない
0062デフォルトの名無しさん
2006/11/02(木) 00:53:03ないなら、0を代入しておく方法もある。vectorコンテナは要素数が
大きくなると、eraseにO(N)かかるので高くつく。そこでdeleteした要素
には0を入れておき、後で必要になったらまず0の入っている要素を
再利用するという方法もある。
もちろんプログラム側で要素に0が入っていたら処理をスキップする
必要があるが。
0063デフォルトの名無しさん
2006/11/02(木) 00:54:59まずデザパタに頼らず強引に文法解析の骨子を書いてみたら。
その後でStateパターンでまとめると綺麗にまとまるというだけの話。
0065デフォルトの名無しさん
2006/11/02(木) 01:03:50push_back(new ...) はあからさまに例外安全じゃないので考え直したほうがいい。
0066デフォルトの名無しさん
2006/11/02(木) 01:20:55破棄の確認が取れました。
ちゃんと破棄できていたようです。有難う御座います。
>>62
成る程、そういった利用方法もできるのですかぁ。
勉強になります。
>>64
持たせて破棄の確認をしました。
お騒がせしました。
>>65
それは
push_back(new ...)
にするより、元のコードのままの方がいいということですか?
0067デフォルトの名無しさん
2006/11/02(木) 01:27:11コンテナに対する操作とは分離しておいた方がいいだろう。
それと、コンテナの要素にアクセスする方法が単なるラウンドロビン的な
方法のみで、ランダムアクセスをしないのであればstd::listの採用を考え
るのもよい。こちらはeraseしても反復子が無効にならない上、常にコストは
O(1)だから。
0068デフォルトの名無しさん
2006/11/02(木) 01:27:12new に対応する operator new はクラスのメンバとして宣言されたものか、
グローバルなものかのどちらかになる。 (5.3.4 9)
0069デフォルトの名無しさん
2006/11/02(木) 01:28:15問題は push_back() が例外を投げた場合なわけだが。
0070デフォルトの名無しさん
2006/11/02(木) 01:29:52元のコードも多分例外安全じゃない(いや、まcatchで適切にリソースの解体しているなら別だけど)
auto_ptr<Enemy>enemy(new Enemy(..));
EnemyAry.push_back(enemy.get());
enemy.release();
だいたいこんな感じで書けば例外安全。
0071デフォルトの名無しさん
2006/11/02(木) 01:32:33ちょwwwwそれやり過ぎww
まあ業務用ソフトならそこまでするのかもしれんけど
0072デフォルトの名無しさん
2006/11/02(木) 01:40:29うーむ、まだまだ未熟で理解できない点がありますので、
これから習熟していく上で徐々に理解していきたいと思います。
有難う御座いました。
0073デフォルトの名無しさん
2006/11/02(木) 01:42:36これくらいがふつう
0074デフォルトの名無しさん
2006/11/02(木) 01:45:22いつの日か、こんなのがリークの原因になってしまったとしたら、見つける自信が無い。
最初に書くときに安全を確保してしまうのが吉。
0075デフォルトの名無しさん
2006/11/02(木) 01:47:45これって、もしEnemyAryがptr_vectorだったら例外安全難しくない?
1.
auto_ptr<Enemy>enemy(new Enemy(..));
EnemyAry.push_back(enemy.get());
enemy.release();
→enemy.release()が例外を投げるとptr_vectorとauto_ptrによる二重delete
2.
auto_ptr<Enemy>enemy(new Enemy(..));
EnemyAry.push_back(enemy.release());
→push_backが例外を投げるとリーク
0076デフォルトの名無しさん
2006/11/02(木) 01:51:02releaseは例外を投げなーい。
だから安心安心。
0077デフォルトの名無しさん
2006/11/02(木) 01:58:46prt_vector なら push_back(new ...) でいいだろ。 >>70 みたいな
コーディングを不要にするためのものなんだから。
0078デフォルトの名無しさん
2006/11/02(木) 02:03:000079デフォルトの名無しさん
2006/11/02(木) 02:08:320080デフォルトの名無しさん
2006/11/02(木) 02:08:38auto_ptr::release()は例外投げません……
0081デフォルトの名無しさん
2006/11/02(木) 02:10:45少なくともバッファが確保出来ないときは投げるんじゃない?
0082デフォルトの名無しさん
2006/11/02(木) 02:11:44配列の拡張時にメモリ確保失敗する可能性があるから投げると思うよ。
ちょっとソース見てくる。
008382
2006/11/02(木) 02:21:02>>77のいうようにptr_*系は直接push_back呼び出して問題ない。
というか内部でauto_ptrつかって実質的に>>70と同じ処理をやってる。
だから、むしろauto_ptr使うと例外時に2重開放になるから使っちゃ駄目。
例外発生時にはpush_backは何もしないと思ってたので、
勝手に引数の開放するのは予想外だったのでちょっと驚き。
これからはptr_*系をちょくちょく使っていくか......
0084デフォルトの名無しさん
2006/11/02(木) 02:23:110085デフォルトの名無しさん
2006/11/02(木) 02:29:03言えないな。
あれー?
http://www.boost.org/libs/ptr_container/doc/ptr_sequence_adapter.html#modifiers
0086デフォルトの名無しさん
2006/11/02(木) 02:49:000087デフォルトの名無しさん
2006/11/02(木) 02:53:46new したオブジェクトの所有権が関数をまたいで頻繁に移動するならそうなるだろう。
0088デフォルトの名無しさん
2006/11/02(木) 03:22:22なるほど。忘れていました。そうですよね。所有権が移動するから使えるんですか。
ありがとうございます。
0089デフォルトの名無しさん
2006/11/02(木) 03:23:08使わんとは言わんが、結局目の届く範囲においとかないと怖くて仕方ないので
エラー処理とかでdeleteまとめんのが面倒くさいとかの時くらいしか出番ないですよ。
叩いて叩いて。
0090デフォルトの名無しさん
2006/11/02(木) 03:31:520091デフォルトの名無しさん
2006/11/02(木) 03:43:15あればあったで構わないけど積極的な使用を推奨する気にはなれん代物でFA。
0092デフォルトの名無しさん
2006/11/02(木) 03:46:02new があるところに auto_ptr あり。少なくとも new と同じぐらい使う。
boost 使ってるときは、ほとんどそっちになるけど。
0093デフォルトの名無しさん
2006/11/02(木) 03:46:45auto_ptr で増える不便って何?
0094デフォルトの名無しさん
2006/11/02(木) 04:00:22手動deleteで例外安全確保しようと思ったらauto_ptrの100倍は面倒だろ
0095デフォルトの名無しさん
2006/11/02(木) 04:08:200096デフォルトの名無しさん
2006/11/02(木) 06:42:13つか例外でたらabortせざるをえない。
0097デフォルトの名無しさん
2006/11/02(木) 09:30:17遅くなりました。
ネームスペースに入れるとクラスのメンバのような扱いになっているって事ですか??
もう少しヒントを・・・
0098デフォルトの名無しさん
2006/11/02(木) 10:44:22あー、よく聞くな。そのいいわけ。
0099デフォルトの名無しさん
2006/11/02(木) 10:45:53new を使ったときにメモリ確保に使われる operator new の決定方法は規格で
決められているわけだが、(以下 >>68 )
0100デフォルトの名無しさん
2006/11/02(木) 12:17:19始皇帝氏って奴?
0101デフォルトの名無しさん
2006/11/02(木) 15:17:56{
vector<T> array;
public:
vector<class T>::iterator getBeginIterator()
{
return array.begin();
}
};
こんなクラスを作ったのですが
main関数で
Test<unsigned char> test1;
vector<unsigned char>::iterator itr = test1.getBeginIterator();
とすると
main.cpp(37) : error C2440: '初期化中' : 'std::vector<_Ty>::iterator' から 'std::vector<_Ty>::iterator' に変換できません。
というエラーがでます。
どなたか原因がわかりませんか?
0102デフォルトの名無しさん
2006/11/02(木) 15:26:26typename std::vector<T>::iterator getBeginIterator()
0103デフォルトの名無しさん
2006/11/02(木) 15:27:00Tというclassとclass Tという先行宣言の差。
vector<class T>をvector<T>にすれば多分大丈夫
0104デフォルトの名無しさん
2006/11/02(木) 15:50:06push_back前の状態にロールバックするのが強い例外保証だからそれでいいんだよ。ていうか開放しないとリークしちゃうし。
newの戻り値をどっかに保存してたりするならそれはユーザー側の使い方が間違い。
abortするしかないとか言ってるやつは例外機構をメモリリーク防止くらいにしか思ってないんだろうなぁ。
0105デフォルトの名無しさん
2006/11/02(木) 16:05:08引数のオブジェクトの所有権を奪うという副作用を行っているんでしょ?
その副作用のロールバックが出来ていないと思うけど、俺の解釈の仕方が間違っている?
いや、ま、利便性考えればこの仕様が自然なんだけどね。
例外時にいちいち開放したくないし。
0106デフォルトの名無しさん
2006/11/02(木) 16:09:580107デフォルトの名無しさん
2006/11/02(木) 16:11:310108デフォルトの名無しさん
2006/11/02(木) 16:17:120109デフォルトの名無しさん
2006/11/02(木) 16:22:42仮想記憶無い環境だとnewできない時はもうどうしようもねぇんだよ。
0110デフォルトの名無しさん
2006/11/02(木) 16:28:14所有権の移動と配列の拡張という別個の事象を、
一つの関数で行うから、起きる問題だな。
stackのpop,topみたいに綺麗に二つに分けれると良いんだけど、
そもそも二つをくっつける為のptr_vectorというジレンマ
0111デフォルトの名無しさん
2006/11/02(木) 16:36:24vector<int> a(&(x[0]), &(a[2]) + 1);
a.sort(not2(less<int>() ) ); //
関数アダプタ not2() を入れた場合、エラーはでないのですが、実行した場合に強制終了となってしまいます。
なぜ、強制終了してしますんでしょうか?
ソフトはVC++EEです。
0112デフォルトの名無しさん
2006/11/02(木) 16:37:23&(x[0]), &(a[2])+1
0113デフォルトの名無しさん
2006/11/02(木) 17:00:17a(&(x[0]), &(x[2]) + 1);
です。
0114デフォルトの名無しさん
2006/11/02(木) 18:20:380115デフォルトの名無しさん
2006/11/02(木) 18:24:40少なくともうちのVC8には無い。
int x[3] = {3,5,1};
vector<int> a(&(x[0]),&(x[2])+1);
sort(a.begin(),a.end(),not2(less<int>()));//
ちなみにこれなら普通に実行できたが。
どこのvector使ってるんだろう?
0116デフォルトの名無しさん
2006/11/02(木) 18:43:31listです。
0117デフォルトの名無しさん
2006/11/02(木) 19:38:09もう信用できない。問題の発生するコードをコピペしろ。
0118デフォルトの名無しさん
2006/11/02(木) 19:50:31#include <list>
#include <functional>
#include <iostream>
using namespace std;
template<class InputIterator> void Display(InputIterator first, InputIterator last){
for(InputIterator i = first; i != last; i++)cout << *i << " ";
}
template<class T> struct MyGreater : public binary_function<const T, const T, bool> {
bool operator() (const T &t1, const T &t2) const { return t1 > t2;}
};
void main(){
int a[8] = {5,8,4,2,41,6,9,7};
int b[14] = {9,9,4,2,1,0,5,6,7,1,1,1,1,1};
list<int> lst1(&(a[0]), &(a[7]) + 1);
list<int> lst2(&(b[0]), &(b[13]) + 1);
list<int>::iterator w = lst1.begin();
advance(w, 3); lst1.splice(w, lst2);
Display(lst1.begin(), lst1.end());//3
lst1.sort(); Display(lst1.begin(), lst1.end());//4
lst1.sort(not2(greater<int>() ) );//-------ココです
Display(lst1.begin(), lst1.end());//5
}
0119デフォルトの名無しさん
2006/11/02(木) 20:08:02試したらデバッグモードのチェックで "invalid operator<" と言われたが、
「強制終了してします」ってのはこれのことか?
not(greater<int>()) つまり <= は比較関数に要求される
strict weak ordering の要件を満たさないってこと。
0120デフォルトの名無しさん
2006/11/02(木) 20:15:330121デフォルトの名無しさん
2006/11/02(木) 20:21:56>>120
わかりました!
ありがとうございました。
0122デフォルトの名無しさん
2006/11/03(金) 00:19:41また遅くなってしまい、スイセン
理解しました。まさしく文章通りでしたね。
確かにnew ヘッダも定義はstdの外でやっていました。
これで納得して進めることが出来ます。どうも有難う御座いました。
0123デフォルトの名無しさん
2006/11/03(金) 01:29:51Java風の命名を良く見かけるのですが、何か理由はあるのですか?
0124デフォルトの名無しさん
2006/11/03(金) 01:31:100125デフォルトの名無しさん
2006/11/03(金) 01:41:46バカは氏ね
0126デフォルトの名無しさん
2006/11/03(金) 02:12:57典型的なところで、XercesみたいにJava出身のライブラリは当然、Java風になるね。
0127デフォルトの名無しさん
2006/11/03(金) 03:43:18C++風の命名ってどういうものなんでしょう?
JavaからOOPL入ったので良くわかりません...
0128デフォルトの名無しさん
2006/11/03(金) 03:48:05class_name
func_name
Java
ClassName
funcName
確かにJavaスタイルをよく見かける。このスレ(板)でも。
0129デフォルトの名無しさん
2006/11/03(金) 04:20:340130デフォルトの名無しさん
2006/11/03(金) 04:48:46fuck_cpp
Java
fuckJava
コーディングスタイルは他でやれよ
0131デフォルトの名無しさん
2006/11/03(金) 05:14:520132デフォルトの名無しさん
2006/11/03(金) 05:21:23まあ、どうでもいいけどね
0133101
2006/11/03(金) 09:24:27>typename std::vector<T>::iterator getBeginIterator()
でいけました。
0134デフォルトの名無しさん
2006/11/03(金) 09:34:13仮の型指定がない次のような場合は通るのですが
template < typename _T > class A; // 前方宣言
typedef A< int > B;
template < typename _T > class A // 定義
{
};
main( void )
{
B b;
}
以下のケースのように定義側に仮の型指定がある場合の前方宣言の仕方がわかりません。
template < typename _T = int > class A; // 前方宣言 無理 ERROR
// template < typename _T > class A; // 前方宣言 無理 ERROR
// template < > class A; // 前方宣言 無理 ERROR
typedef A< > B;
template < typename _T = int > class A // 定義
{
};
main( void )
{
B b;
}
0135デフォルトの名無しさん
2006/11/03(金) 09:55:10> auto_ptr で増える不便って何?
頭悪い子が付いていけない。
0136デフォルトの名無しさん
2006/11/03(金) 10:37:34Moden C++とか読むと書いてあることは解るけどなんでそんなこと
思いつくのよこの変態とか思うわけで....
0137デフォルトの名無しさん
2006/11/03(金) 10:39:280138デフォルトの名無しさん
2006/11/03(金) 10:57:52いやそれだと狭い知識しかみにつかんからもし
機能を体系的に勉強できるような資料があればうれしいのよ
0139デフォルトの名無しさん
2006/11/03(金) 11:02:23lisp, Haskell, etc,,
0140デフォルトの名無しさん
2006/11/03(金) 11:07:13機能を学ぶ以前に、想像力(or創造力)を鍛えた方が医院で内科医?
0141デフォルトの名無しさん
2006/11/03(金) 11:16:17もう読んでいるのかもしれないけど、
>>4のC++ Templates
0142デフォルトの名無しさん
2006/11/03(金) 12:11:56template<int Depth, int A, typename B>
struct K17 {
static const int x =
K17<Depth+1, 0, K17<Depth,A,B> >::x
+ K17<Depth+1, 1, K17<Depth,A,B> >::x
+ K17<Depth+1, 2, K17<Depth,A,B> >::x
+ K17<Depth+1, 3, K17<Depth,A,B> >::x
+ K17<Depth+1, 4, K17<Depth,A,B> >::x;
};
template<int A, typename B>
struct K17<16,A,B> {
static const int x = 1;
};
static const int z = K17<0,0,int>::x;
0143デフォルトの名無しさん
2006/11/03(金) 12:16:47その実体化にまたK17<Depth,A,B>が必要になるから
struct A{ A a;};と同じことになるんじゃね?
0144デフォルトの名無しさん
2006/11/03(金) 12:16:58意味不明なエラーが出て困ってます。
0145デフォルトの名無しさん
2006/11/03(金) 12:22:06やっぱC++って腐りきってるよね、C#とかJAVAがいいんだろうな
0146デフォルトの名無しさん
2006/11/03(金) 12:26:355^16≒1526億回じゃなかろか?
0147デフォルトの名無しさん
2006/11/03(金) 12:31:40そうなると C++ 自体が使えないね。
0148デフォルトの名無しさん
2006/11/03(金) 13:44:380149デフォルトの名無しさん
2006/11/03(金) 15:36:240150デフォルトの名無しさん
2006/11/03(金) 15:47:270151デフォルトの名無しさん
2006/11/03(金) 17:06:07ふつうに再帰関数でもフリーズ。
関数の呼び出し回数が190734863281回にもなるから当たり前だけどな
0152デフォルトの名無しさん
2006/11/03(金) 17:09:380153デフォルトの名無しさん
2006/11/03(金) 17:42:500154デフォルトの名無しさん
2006/11/03(金) 18:08:540155デフォルトの名無しさん
2006/11/03(金) 18:49:530156デフォルトの名無しさん
2006/11/03(金) 21:43:300157デフォルトの名無しさん
2006/11/03(金) 22:13:340158デフォルトの名無しさん
2006/11/03(金) 22:16:10まったくできず挫折する人。
深く理解して高度に使いこなす人。
そして第3の勢力… 俺C++ばっちりだぜ、と言いつつ実はベターCとしてしか使ってない人。
0159デフォルトの名無しさん
2006/11/03(金) 22:17:300160デフォルトの名無しさん
2006/11/03(金) 22:19:360161デフォルトの名無しさん
2006/11/03(金) 22:22:27概略だけでいいので…
それに、すぐにソース読めというのもあまり教育的ではないでしょう…
0162デフォルトの名無しさん
2006/11/03(金) 22:22:46C++をBetter Cとして使うのってCでゴリゴリ書くより楽じゃね
0163デフォルトの名無しさん
2006/11/03(金) 22:37:040164デフォルトの名無しさん
2006/11/03(金) 22:38:35�dクス。明日本屋で立ち読みしてくる
0165デフォルトの名無しさん
2006/11/04(土) 00:08:14C++で一時オブジェクト作るからやめればっていわれるとファビョる
え?え?え?なんでなんで問題ないでしょそんなのえ?え?え?え
おいおい勝手に言うなよじゃあ証拠見せろとふぁびょります
JISのC++企画書をサルでも解る日本語でいうとふーんまぁレアケースだね
とかほざきます助けてくださいもう死にたい
0166デフォルトの名無しさん
2006/11/04(土) 00:12:45遠慮無く死んでください
0167デフォルトの名無しさん
2006/11/04(土) 00:13:06日本語学んでから書き込んでね。
0168デフォルトの名無しさん
2006/11/04(土) 00:30:16残念ながら暖房は無しだ。
0169デフォルトの名無しさん
2006/11/04(土) 00:34:46遅レスだけど、それ解決方法ないはず、
C++の継ぎはぎ構文の負の遺産の一つ。
構文解析の問題で、出来なければならないのに出来ない事例を集めたサイトがどこかにあったはず。
C言語のスーパーセットとして登場して十数年、
言語の拡張という意味ではC++はもういっぱいいっぱいです。
0170デフォルトの名無しさん
2006/11/04(土) 00:36:57歳をとるわけだ。
0171デフォルトの名無しさん
2006/11/04(土) 00:46:17甘い。まだtr1が待っている
0172デフォルトの名無しさん
2006/11/04(土) 00:50:27何を問題としているのかわからない。
宣言と定義の両方にデフォルト引数指定してるから、
再定義でエラーになるってだけじゃないの?
0173デフォルトの名無しさん
2006/11/04(土) 00:59:11自分であれを作ってみたい
0174デフォルトの名無しさん
2006/11/04(土) 00:59:18通常、定義はサードパーティーやら何やらのヘッダに書かれていて手をつけれない。
これを前提にした場合。
定義ヘッダ側に仮引数がないテンプレートクラスの先行宣言は通るけど、
定義ヘッダ側に仮引数がある場合は先行宣言そのものが出来ないってこと。
0175デフォルトの名無しさん
2006/11/04(土) 01:04:530176デフォルトの名無しさん
2006/11/04(土) 01:08:41あーそういうことか。
でかいテンプレートコンポーネントの前方宣言は <iosfwd> みたいに
実装者が提供しないといけないってことになるかな。
覚えておこう。
0177デフォルトの名無しさん
2006/11/04(土) 01:11:270178デフォルトの名無しさん
2006/11/04(土) 01:18:340179デフォルトの名無しさん
2006/11/04(土) 01:19:24×定義ヘッダ
○定義
×仮引数
○デフォルト引数
×テンプレートクラス
○クラステンプレート
△先行宣言
○前方宣言
たて続けに気になったんで、な。
0180デフォルトの名無しさん
2006/11/04(土) 01:20:33使い方の解説ならあるんだろうけど、作り方はないだろうなぁ。
ソース読めば。
0181デフォルトの名無しさん
2006/11/04(土) 02:25:11前方宣言のほうが先行宣言より正しいような気はする。
0182デフォルトの名無しさん
2006/11/04(土) 03:23:05free(*ptr); なのか
free(ptr); なのかどっちですか?
0183デフォルトの名無しさん
2006/11/04(土) 03:24:46free(*ptr) じゃコンパイル通らんだろ。 free(ptr) だな。
0184デフォルトの名無しさん
2006/11/04(土) 13:06:30ここのptrはint **なんでしょうか
0185デフォルトの名無しさん
2006/11/04(土) 13:18:47誤記だろう。
ptr は int* のはず。
0186デフォルトの名無しさん
2006/11/04(土) 13:40:280187デフォルトの名無しさん
2006/11/04(土) 14:20:540188デフォルトの名無しさん
2006/11/04(土) 14:54:02もういいよ
現場で使う言語がC++なんだから・・・
0189デフォルトの名無しさん
2006/11/04(土) 15:14:220190デフォルトの名無しさん
2006/11/04(土) 15:36:220191デフォルトの名無しさん
2006/11/04(土) 15:50:19起床時間:
就寝時間:
食事:
行動:
など
0192デフォルトの名無しさん
2006/11/04(土) 15:56:17仕様なら仕様らしく書いてください
そんなのじゃ仕事できまんせ
0193デフォルトの名無しさん
2006/11/04(土) 16:06:14正直に聞くが其れをゲットしてうれしいか?
0194デフォルトの名無しさん
2006/11/04(土) 16:35:01さーて今起きたことだし、コンビニで弁当かってC++FAQでも読みながらたべよ
0195デフォルトの名無しさん
2006/11/04(土) 16:55:150196デフォルトの名無しさん
2006/11/04(土) 18:33:490197デフォルトの名無しさん
2006/11/04(土) 19:15:200198デフォルトの名無しさん
2006/11/04(土) 19:22:04頭のテカりも良くなってきているから凶から茄子をやろう。うへへ。
0199デフォルトの名無しさん
2006/11/04(土) 19:23:00ちょっ!、意味もなく笑っちまったぢゃないか!
0200デフォルトの名無しさん
2006/11/04(土) 21:06:58News 2006-11-04: The C++ Standard Library Issues List (Revision 45) is available
0201デフォルトの名無しさん
2006/11/04(土) 22:48:26いやJavaには推奨される命名規則あるだろ。
C++には無いからどんなの?と聞いただけで。
0202デフォルトの名無しさん
2006/11/04(土) 22:49:40無いんだよ。わかってるじゃないか。
0203デフォルトの名無しさん
2006/11/04(土) 23:11:45言語仕様を覚えようと必死な俺だが、
C++は道具であって目的じゃない。と
0204デフォルトの名無しさん
2006/11/04(土) 23:44:13C++の言語仕様を完全に把握しようというのは、とても難しいよね。
自分がやりたいことを実現するために必要な範囲を覚えたら、道具としては十分使える。
それで足りなくなったらまた覚えればいい。
知識が足りないうちは、大丈夫だと分かっていることだけを使おうとしても
知らずにまずい書き方をすることもあるだろうけど、
ある程度のレベルに達すれば、自分が大丈夫だと分かる範囲の機能だけを
正しく使えるようになると思う。
0205デフォルトの名無しさん
2006/11/04(土) 23:51:15boostをまねておけばいい
STLの実装はまねちゃ駄目だぞ
0206デフォルトの名無しさん
2006/11/05(日) 02:36:48>>123にあるような、数年前以前はどうなってたの?
0207デフォルトの名無しさん
2006/11/05(日) 03:05:20数年前も十年前も今でも、 C++ で推奨される命名規則など無い。
そして標準ライブラリの命名規則はずっとある。
何か不満か?
0208デフォルトの名無しさん
2006/11/05(日) 03:10:16>>128のC/C++風がほとんどだったと思う
0209デフォルトの名無しさん
2006/11/05(日) 03:11:56C++ Coding Standards: 0項の一部を勝手に要約。
「一貫性のある規約を自分で定義し管理せよ」
まあ世の流行ってのはあるが、関連がないなら合わせる意味はない。
0210デフォルトの名無しさん
2006/11/05(日) 03:14:34>>209の言うとおり馴れたのがあればそれが一番適当だと思うな
0211デフォルトの名無しさん
2006/11/05(日) 10:48:490212デフォルトの名無しさん
2006/11/05(日) 10:50:58書く上ではShiftキーを押すのがどうも「踏み切り前の一時停止」みたいで野暮ったいw
だからアンダーバーもちょっと抵抗あって、hoge-fugaみたいに書けるLispのやり方が好き。
でもそれは、読む際の事情はまた別なんだよな。
0213デフォルトの名無しさん
2006/11/05(日) 11:01:42つまり、ほんの僅かな手間を惜しんで事故の可能性を増大させるわけですな。
0214デフォルトの名無しさん
2006/11/05(日) 12:24:37君、ちょっと読めなさすぎ。
0215デフォルトの名無しさん
2006/11/05(日) 12:47:12class foo
{
hoge *A;
void test();
}
void foo::test()
{
// Aの中身は0x00000000のまま
A->hoge_func();
}
でA::hoge_funcのなかではグローバルなりソースか、hoge_func内で宣言した
関数内のローカルなリソースしか使っていなくて、hogeクラスのメンバは一切使ってない
のですが、これってA->hoge_func読んだ時点でnull参照で落ちるんですよね???
VC2005でコンパイルしたんですが、これでずっと動いてたのですが、
デバッグで動かしてもちゃんとA::hoge_funcのなかに飛ぶので、不思議なのです。。
これは実は落ちないものなんでしょうか?
0216デフォルトの名無しさん
2006/11/05(日) 12:48:170217デフォルトの名無しさん
2006/11/05(日) 12:58:06コンパイル時にクラスhogeのメンバ関数hoge_funcは解決されるから呼び出せる、ってだけじゃね?
0218デフォルトの名無しさん
2006/11/05(日) 13:15:47ただ同じことを繰り返してるだけなので、
試行が終わるたびにテキストで出力すればあとは手作業で済ませます。
どうすれば、試行の度に出力することができますか?
ファイル名をその度に変える必要があるんどえしょうか?
0219デフォルトの名無しさん
2006/11/05(日) 13:19:47hogeの定義次第じゃね?
>>218
スレ違い。
アップローダにソースを載せて、初心者スレ辺りで質問しなおせば誰かヒントをくれるかもしれない。
0220デフォルトの名無しさん
2006/11/05(日) 13:21:04ありがとうございます
0221デフォルトの名無しさん
2006/11/05(日) 13:35:31そういうものなんでしょうか。コンパイル時の解決関係で調べてみます。
>>219
hogeはCDialogの継承クラスなんですが、そういうのも関係してるのかなあとか。。
自分が作ったんじゃないんですが、たぶんダイアログをリソースエディタで作ったときに
当時VC6.0でクラスの追加メニューで作ったんだと思います。。
0222デフォルトの名無しさん
2006/11/05(日) 13:40:33それは非仮想メンバ関数が第一引数の前にthisポインタを渡す関数として実装されることが多いからで(ry
0223デフォルトの名無しさん
2006/11/05(日) 13:58:56す、すいません、よく理解できませんでした。。
第一引数の前にthisポインタを渡す関数
というのは、第一引数を渡す前に、thisポインタを渡すので暗黙のうちに場所がわかるということでしょうか?
それはメンバ関数内で別の自分と同じクラスのメンバ関数呼ぶときに、実体を指定せずに関数名だけで呼べるみたいな
ことでしょうか?
しかし今回hogeの実体は一度も作られていないので、thisポインタすら無いように思います
fooのほうは、実体はあるのですが。。
なんか間違ってるかもしれません
0224デフォルトの名無しさん
2006/11/05(日) 14:06:21A->hoge_func()がhoge_func(A)に変わるとしたら
thisに0入ってるんじゃねーの?
0225デフォルトの名無しさん
2006/11/05(日) 14:13:49今手元にソースがないので来週試してデバッグしてみます。。
0226デフォルトの名無しさん
2006/11/05(日) 14:14:18未定義動作。修正必須。
0227デフォルトの名無しさん
2006/11/05(日) 14:23:53とりあえずロジックとしてはおかしい?とおもうのでとにかく直しておきます。
ありがとうございます。
0228デフォルトの名無しさん
2006/11/06(月) 08:29:45deleteじゃダメですか?
0229デフォルトの名無しさん
2006/11/06(月) 08:42:370230デフォルトの名無しさん
2006/11/06(月) 14:54:23deleteはnewされたオブジェクトに対してのみ。
strdup()は内部的にmalloc()を呼び出しているので、free()を使う。
0231デフォルトの名無しさん
2006/11/06(月) 15:54:540232デフォルトの名無しさん
2006/11/06(月) 16:13:57for_each()って事?
添え字がわかっているならoperator[]でアクセスできるけど
0233デフォルトの名無しさん
2006/11/06(月) 16:17:03lower_bound()も使える。
0234デフォルトの名無しさん
2006/11/06(月) 16:41:44template< class T, typename V > struct my_predicate
: public binary_function< T, V, bool > {
bool operator()( T const & t, V v ) const {
/* TODO:比較処理 */
}
};
...
vector<T> vt;
vector<T>::iterator it = find_if( vt.begin(), vt.end(), bind2nd(my_predicate<T,int>(),1) );
0235デフォルトの名無しさん
2006/11/06(月) 16:45:27出力したいのですがそのようなプログラムになるのでしょうか?よろしくお願いします。
0236デフォルトの名無しさん
2006/11/06(月) 16:47:56質問が抽象的すぎ
ある値がどこにあるのかとか。
それ以前に丸投げってやつは(ry
0237デフォルトの名無しさん
2006/11/06(月) 16:53:08たとえばある一次式のxの値に1.2.5.10.20.50.100.200・・・・と順にその答えを出したいのですが、
1.2.5.10.20.50.100.200・・・・をどうやって出力するのかってことかな?
0238デフォルトの名無しさん
2006/11/06(月) 16:54:250239デフォルトの名無しさん
2006/11/06(月) 17:06:330240デフォルトの名無しさん
2006/11/06(月) 17:10:390241デフォルトの名無しさん
2006/11/06(月) 17:13:030242デフォルトの名無しさん
2006/11/06(月) 17:15:240243デフォルトの名無しさん
2006/11/06(月) 17:25:51#include <stdio.h>
void main(void){
int x[] = {1, 2, 5};
int i;
for(i = 1; 1; i *= 10)
printf("%d.%d.%d.", x[0]*i, x[1]*i, x[2]*i);
}
0244デフォルトの名無しさん
2006/11/06(月) 18:43:29{
c(){cout << "c ctor" << endl ;}
//c( const c &obj ){cout << "c copy ctor" << endl ;}
~c(){cout << "c dtor" << endl ;}
} ;
c func( c obj )
{
cout << "func" << endl ;
return (obj) ;
}
で
func( c() ) ;
と実行すると
c ctor
func
c dtor
c dtor
c dtor
//をとってコピーコンストラクタを実装すると
c ctor
func
c copy ctor
c dtor
c dtor
コピーコンストラクタの定義の有無で
デストラクタの呼び出し回数が変わるものなのでしょうか?
0245デフォルトの名無しさん
2006/11/06(月) 18:53:08きちんとした実験結果があるのになぜ質問しているのか不明ですが、
現に変わってるでしょう?
なぜこういう動作になるかは、コピーコンストラクタがある場合と無い場合とで
引数(と戻り値)の受け渡しがどう変わるかを調べればわかると思います。
0246デフォルトの名無しさん
2006/11/06(月) 19:00:08printf("%d.%d.%d.", x[0]*=10, x[1]*=10,x[2]*=10);
}
のほうがよくね?
0247デフォルトの名無しさん
2006/11/06(月) 19:48:05コンパイラはコピーを最適化して除去できるので
変わっても不思議ではない。実際、GCCではどちらも2回だった
0248デフォルトの名無しさん
2006/11/06(月) 21:10:23"Move Semantics"
という単語がでてくるんですが、コレは
std::auto_ptrの様にオブジェクトの所有権が移動する
事を指している
という認識でいいんですか?
0249デフォルトの名無しさん
2006/11/06(月) 21:13:57文脈にもよるけど、たぶんC++0xの機能のこと。
その機能の目的はauto_ptrのような所有権の移動を楽に記述するような機能と思えば大体OK
0250デフォルトの名無しさん
2006/11/06(月) 21:25:54ありがとうございます。
具体的にどういう仕組みかわからないので、ググってきます
0251デフォルトの名無しさん
2006/11/06(月) 22:32:39それ、コンパイラ何使ってる?
コピーコンストラクタをユーザー定義するかどうかで
一時オブジェクトの有無が変わる理由がわからん。
0252244
2006/11/07(火) 01:04:15変わってるんですが、なぜかわからなかったもので。
引数と戻り値の受け渡し時のコピーがらみかなとも思ったんですが
調べてもわからなかったもんで。
デストラクタが3回呼ばれるのが謎で
コピーコンストラクタの呼び出しをチェックしようとしたら
デストラクタが2回しか呼ばれなくなってわからなくなりました…
>>247
GCCではどちらも2回なんですね。コンパイラ依存?
VS2005 C++を使ってるんですが、デバッグ用なので
最適化オプションは無効になってますが、
その最適化とは違うことだとすると
ユーザ定義のコピーコンストラクタがない場合のみ
一時オブジェクトが2個作られてるって事でしょうか。調べてみます。
>>251
VS2005 C++です。
私もその理由がわからなくて悩んでます。
>>247 の最適化による除去が濃厚そうですね。
0253デフォルトの名無しさん
2006/11/07(火) 01:23:19B = a | bc
みたなBNFをtemplate使って書いてみたいんですけどどうやって書けばいいの?
0254デフォルトの名無しさん
2006/11/07(火) 01:45:090255デフォルトの名無しさん
2006/11/07(火) 02:04:10つ[Boost.Spirit]
0256デフォルトの名無しさん
2006/11/07(火) 02:04:34ユーザー定義のデストラクタはあり、
ユーザー定義のコピーコンストラクタはない
バランスが取れてないのでVC++は除去しないと見た
ベンダに聞かないと分からんけどなw
0257デフォルトの名無しさん
2006/11/07(火) 02:18:36っていうコンテナ作りました。
これだと、Aを丸々コピーしなくても問題ないですよね?
あと格納したオブジェクトをoperator()を実装して呼び出せば
関数呼び出しのコストはかからないですよね?
0258デフォルトの名無しさん
2006/11/07(火) 02:29:13sizeof(A *)のコピーしか無いだろうが、ポインタの参照先については責任を持たなきゃならんな。
>あと格納したオブジェクトをoperator()を実装して呼び出せば
A::operator () () であろうが、void A::func()であろうが、所詮は同じ「関数」。
0259デフォルトの名無しさん
2006/11/07(火) 10:02:19ttp://p-stade.sourceforge.net/biscuit/index.html
typedef seq<
chseq<'/','*'>,
star_until< any, chseq<'*','/'> >
> c_comment;
std::string text("/* Hello, Biscuit! */");
if (biscuit::match<c_comment>(text)) {
//...
}
0260デフォルトの名無しさん
2006/11/07(火) 10:29:34News 2006-11-06: C++ Standard Core Language Issues List (Revision 44) is available
0261244
2006/11/07(火) 15:23:23ユーザ定義コピーコンストラクタありだと
c obj = c() ;
ユーザ定義コピーコンストラクタなしだと
c tmp = c() ; c obj = c ;
となるみたいです。
DEBUG版だから最適化無効になっているはずなんですけどね。
コンパイラの最適化の話ではなく、C++の言語仕様なんだろうか。
--
struct c
{
c(){ cout << "c ctor" << endl ; }
//c( const c &obj ){cout << "c copy ctor" << endl ;}
~c(){ cout << "c dtor" << endl ;}
} ;
void func2( c obj ) {cout << "func2" << endl ; }
で、以下をユーザ定義コピーコンストラクタあり/なしで実行すると、
func2( c() ) ;
ユーザ定義コピーコンストラクタあり
c ctor
func2
c dtor
ユーザ定義コピーコンストラクタあり
c ctor
func2
c dtor
c dtor
0262デフォルトの名無しさん
2006/11/07(火) 16:08:460263262
2006/11/07(火) 16:09:180264デフォルトの名無しさん
2006/11/07(火) 16:13:26template< Any>//??
Any detAnyFromIndex(int index)
{
if(index==0)
return( (char)(... ) )
if(index==1)
return( (int)(... ) )
if(index==2)
return( (double)(... ) )
}
0265デフォルトの名無しさん
2006/11/07(火) 16:45:52templateをなんだと思ってるんだ?
最近template関係の質問多くなったな
それもアホみたいなのが。
流行ってんの?
0266264
2006/11/07(火) 17:04:54関数の返す方を動的に変えたい
boost::any detAnyFromIndex(int index)
だと、データを取り出すときに結局
boost::any_cast<float>(output )
が必要になって処理が後回しにされるだけで解決にならない
0267デフォルトの名無しさん
2006/11/07(火) 17:14:170268デフォルトの名無しさん
2006/11/07(火) 17:32:39型は静的なものだから、動的に取得することは出来ません。
0269デフォルトの名無しさん
2006/11/07(火) 17:39:080270デフォルトの名無しさん
2006/11/07(火) 17:55:020271デフォルトの名無しさん
2006/11/07(火) 17:55:20その自身たっぷりんりんの発言はどこから来るんだ?
さっさとしね
0272デフォルトの名無しさん
2006/11/07(火) 18:00:22やりたいことを明確に汁
0273デフォルトの名無しさん
2006/11/07(火) 18:06:21できません。
0275デフォルトの名無しさん
2006/11/07(火) 18:10:10できません。
0276デフォルトの名無しさん
2006/11/07(火) 18:13:04できないっつってんだろうがボケww
プリプロセッサとか・・w
もう一度template勉強しろ
0277264
2006/11/07(火) 18:14:27boostのHPにあったサンプルで解決できそうです
#define ARITHMETIC_TYPE(I) ARITHMETIC_TYPE ## I
#define ARITHMETIC_TYPE0 bool
#define ARITHMETIC_TYPE1 char
#define ARITHMETIC_TYPE2 signed char
#define ARITHMETIC_TYPE3 unsigned char
#define ARITHMETIC_TYPE4 short
#define ARITHMETIC_TYPE5 unsigned short
#define ARITHMETIC_TYPE6 int
#define ARITHMETIC_TYPE7 unsigned int
#define ARITHMETIC_TYPE8 long
#define ARITHMETIC_TYPE9 unsigned long
#define ARITHMETIC_TYPE10 float
#define ARITHMETIC_TYPE11 double
#define ARITHMETIC_TYPE12 long double
0278デフォルトの名無しさん
2006/11/07(火) 18:16:05できません。
0279デフォルトの名無しさん
2006/11/07(火) 18:16:25boost使っても出来ません><;;;;
どうすればできますか???
プリプロセッサ使えばできるんですか><
0280デフォルトの名無しさん
2006/11/07(火) 18:17:11やりたいことは分かったしそれが最適だと思うなら勝手にしろ
0282デフォルトの名無しさん
2006/11/07(火) 18:19:24マクロはコンパイル時に展開されますから、動的な処理は行えません。
相談室で相談に対して正解教えてるのにその口ぶり・・・酷ス
0283デフォルトの名無しさん
2006/11/07(火) 18:23:350284デフォルトの名無しさん
2006/11/07(火) 18:23:55具体的な例がでてないから、やきもきするのはわかるが、
その態度は気にくわんな
学生さん?
0286デフォルトの名無しさん
2006/11/07(火) 18:28:420287デフォルトの名無しさん
2006/11/07(火) 19:13:330288デフォルトの名無しさん
2006/11/07(火) 19:23:51リソース管理クラスの目的で関数ポインタをメンバにしようとしてるんですが、
呼び出し規約が違うと関数ポインタに代入できないようで困ってます。
(今は各規約のポインタとコンストラクタを持ってる)
呼び出し規約ってのはtemplateで決定できないんでしょうか?
#include <windows.h>
template <typename T, typename R = void>
class AutoResource {
T resource;
R (/*WINAPIV*/WINAPI *killFunc)(T);
// ↑ここをtempleateに
public:
AutoResource(T res, R (/*WINAPIV*/WINAPI *func)(T) ) : resource(res), killFunc(func) {}
~AutoResource() { (this->killFunc)(this->resource); }
};
void f(HMODULE h) { FreeLibrary(h); }
int main() {
AutoResource<HMODULE, BOOL> res(LoadLibrary(TEXT("freetype.dll")), FreeLibrary);
//AutoResource<HMODULE> ress(LoadLibrary(TEXT("shell32.dll")), f);
return 0;
}
コンパイラはVC8です
0289デフォルトの名無しさん
2006/11/07(火) 19:48:09template< typename T, typename R > struct killer_base
: public std::unary_function< T, R > {
virtual ~killer_base() {};
virtual R operator()( T ) = 0;
};
template< typename F, typename T, typename R > struct killer
: public killer_base<T,R> {
F f;
killer( F func ) : f(func) {}
R operator()( T t ) { return f(t); }
};
template <typename T, typename R = void>
class AutoResource {
T resource;
auto_ptr< killer_base<T,R> > const killFunc; // noncopyable
public:
template< typename KillerFunc >
AutoResource(T res, KillerFunc func )
: resource(res), killFunc(new killer<KillerFunc,T,R>(func)) {}
~AutoResource() { (*killFunc)(resource); }
};
0290デフォルトの名無しさん
2006/11/07(火) 19:49:37boost::function
0291デフォルトの名無しさん
2006/11/07(火) 20:03:57>>289のkiller_baseって何で必要なの?
0292デフォルトの名無しさん
2006/11/07(火) 20:22:530293デフォルトの名無しさん
2006/11/07(火) 20:28:46boost::shared_ptr の sp_counted_base と、sp_counted_impl みたいなもの。
コンストラクタ呼び出しで渡された型を保存しておくための方法。
0294デフォルトの名無しさん
2006/11/07(火) 20:41:12(゚д゚)スゲー とりあえず意図したとおりのものになりました
ありがとうございます
内容はまだ理解できてないけどな!
0295デフォルトの名無しさん
2006/11/07(火) 21:19:13人格障害の診断をうけたほうがいいぞ
0296デフォルトの名無しさん
2006/11/07(火) 22:19:59すまん。
まったくわからん。
0297デフォルトの名無しさん
2006/11/07(火) 22:46:18ああすることによって、killer<F, T, R>型(のうち具体的にはF)がなんであっても
統一的に基底クラスであるkiller_base<T, R>型のオブジェクトとして取り扱えるようになる。
boost::functionなんかも同じようなことをやっている。
0298デフォルトの名無しさん
2006/11/07(火) 23:01:36理解した。ありがつ。
0299デフォルトの名無しさん
2006/11/07(火) 23:47:53#include <limits.h>
int _tmain(int argc, _TCHAR* argv[])
{
int n,max=INT_MIN,min=INT_MAX;
bool flag=true;
do{
printf("整数を入力してください。");
scanf_s("%d",&n);
if(n==0) flag=false;
if(n>max) max=n;
else if(n<min) min=n;
}while(flag);
printf_s("\n最大は%d 最小は%dです。\n",max,min);
return 0;
}
VC++ Proでこれを実行すると0を入力したとき
コマンドプロント閉じちゃうんですがどうしたらいいんですか
0300299
2006/11/07(火) 23:51:010301デフォルトの名無しさん
2006/11/07(火) 23:54:46ありがとう、おめでとう。
0302デフォルトの名無しさん
2006/11/08(水) 00:03:32意味不明。関数ポインタでいいじゃん
0303デフォルトの名無しさん
2006/11/08(水) 00:24:230304デフォルトの名無しさん
2006/11/08(水) 00:25:310305デフォルトの名無しさん
2006/11/08(水) 00:31:13だんだんチラシの裏っぽくなってきた。
0306デフォルトの名無しさん
2006/11/08(水) 00:34:19D&Eには、理由がない限りどの演算子も多重定義できるようにしたというようなことが書いてある。
そもそも導入された理由はその流れだろう。
>>304
Windows APIのコールバック関数ではそういう風になっているな。
だが、operator ()を使って(というよりboost::bindなんかで束縛してやって)のほうが、スマートだと俺は思う。
STLを考えた偉い人もたぶんそんなことを考えたのだろう。
0307デフォルトの名無しさん
2006/11/08(水) 00:35:190308デフォルトの名無しさん
2006/11/08(水) 00:37:450309デフォルトの名無しさん
2006/11/08(水) 00:40:02tmplateでどうやって渡すの?
サンプル教えて
0310デフォルトの名無しさん
2006/11/08(水) 00:50:37void call_funcobj(FUNC f)
{
f("hello,world") ;
}
void func(std::string const & message)
{ std::cout << message << std::endl ; } ;
class FuncObj
{
std::string header_ ;
public :
FuncObj(std::string const & header) : header_(header) { }
void operator() (std::string const & message)
{ std::cout << header_ << message << std::endl ; }
} ;
int main()
{
call_funcobj(func) ;
FuncObj f1("message : "), f2("メッセージ:") ;
call_funcobj(f1) ;
call_funcobj(f2) ;
}
0311デフォルトの名無しさん
2006/11/08(水) 01:07:07class Window
{
// ...
public:
void SetTitle(const std::string&);
// ...
};
void f()
{
Window w;
call_funcobj(boost::bind(&Window::SetTitle, w, _1));
}
0312デフォルトの名無しさん
2006/11/08(水) 02:59:48News 2006-11-07: The 2006-09 mailing is available
Working Draft の新しい奴 n2134.pdf がうpされてる。
0313デフォルトの名無しさん
2006/11/08(水) 03:45:37ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/kasumi/kasumi2/
0314デフォルトの名無しさん
2006/11/08(水) 05:02:17つ[iconv]
0315デフォルトの名無しさん
2006/11/08(水) 13:40:34関数ポインタより効率がよくなるから
0316デフォルトの名無しさん
2006/11/08(水) 18:59:29どなたかお教えいただけないでしょうか
struct sttest
{
typedef int myint;
};
typedef sttest * psttest;
typedef psttest->myint mymyint;
こんな感じのtypedefをしたいのですが構文エラーe2143などとなって
コンパイルできません
0317デフォルトの名無しさん
2006/11/08(水) 19:11:52何がしたいんだ?
typedefは型を定義するものだよ
0318デフォルトの名無しさん
2006/11/08(水) 19:16:24こういうことがやりたいのかな?
0319316
2006/11/08(水) 19:16:52psttestしか受け取れないclassの中でstruct sttest で定義した
ypedefの情報をうけとりたいのです
template<typename Ptr = psttest>
class MyClass
{
typedef Ptr::myint mymyint;
};
0320デフォルトの名無しさん
2006/11/08(水) 19:17:22typedef sttest::myint mymyint
がしたいんじゃないかと感じた。
0321316
2006/11/08(水) 19:32:45ポインターが持ってるtypedefの情報を渡すことができなくなって
しまったので、なんとか解決したい。というのがやりたいことです。
0322デフォルトの名無しさん
2006/11/08(水) 19:38:51ポインタがtypedefの情報もってるって…何か壮大に勘違いしてないか?
0323デフォルトの名無しさん
2006/11/08(水) 19:49:41typedef a+b c と同じような事だと思った。
0324デフォルトの名無しさん
2006/11/08(水) 20:02:22{ typedef typename T::myint type; };
template<typename T> struct RemovePointer<T*>
{ typedef typename T::myint type; };
typedef RemovePointer<psttest>::type mymyint;
0325デフォルトの名無しさん
2006/11/08(水) 20:08:530327デフォルトの名無しさん
2006/11/08(水) 20:53:06vectorに値を格納していって、
for(int i = 0; i < n; i++){
for(int j = 0; j < x; j++)
cout << (*v[i])[j] << endl;
}
で表示するんですけど、
(*v[i])[j] ってどういう意味なんでしょうか?
不勉強で申し訳ないのですが、ご教授をお願いできないでしょうか?
0328デフォルトの名無しさん
2006/11/08(水) 20:56:19v の i 番目 (0から数える。以下も同様) に入っているポインタが指す先にある
vector<double>型のインスタンスの、j番目の要素への参照。
0329デフォルトの名無しさん
2006/11/08(水) 20:57:57おかしくないか?
*v[i][j]だと思うが。
0330デフォルトの名無しさん
2006/11/08(水) 20:59:54vector<double*>と勘違いしてた。
0331デフォルトの名無しさん
2006/11/08(水) 21:02:34ありがとうございます!
助かりました!
>>329
参考書をそのまま写したんですが、
おっしゃる通りにやってみたところ、
エラーになりました。
0332デフォルトの名無しさん
2006/11/08(水) 21:03:060333デフォルトの名無しさん
2006/11/08(水) 22:18:37なかなかのバカ丸出しぶりでしたな
0334デフォルトの名無しさん
2006/11/08(水) 22:41:120335デフォルトの名無しさん
2006/11/08(水) 22:47:32感づくあたりだけ 316 の方がましだと思う。
文法めちゃくちゃでも一応コンパイルしてみる勇気も買うw
「ポインター」じゃなくて「ポインター型」と書いていればもっと良かったけど。
0336デフォルトの名無しさん
2006/11/08(水) 23:12:54どうアセンブラのコードとにらめっこしても
そんなコードはいてねぇよ
0337デフォルトの名無しさん
2006/11/08(水) 23:53:350338デフォルトの名無しさん
2006/11/09(木) 00:07:15template<typename Function> void call(Function f) { f(); }
Function が関数ポインタなら、おそらくインライン展開は行われない。
Function が関数オブジェクトなら、普通にインライン展開の対象になる。
0339デフォルトの名無しさん
2006/11/09(木) 01:10:02Named Template Parameterの情報って、どのへんを調べれば出てくる?
ttp://www.kmonos.net/alang/cpp/glossary.html
にさわりだけ出てるんだが、もうちょっと具体的なやつが見つからなくて。
0340デフォルトの名無しさん
2006/11/09(木) 02:03:12クラステンプレートの中にメンバ関数テンプレートがあります。
template< typename T >
class MyClass {
public:
template< typename U > void f( const U& u );
};
この関数f()をクラスの宣言外で定義する書き方が分かりません。
どなたか分かる方がいらっしゃればご教示願います。
以上、宜しくお願いいたします。
0341デフォルトの名無しさん
2006/11/09(木) 02:11:22template< typename U >
void MyClass<T>::f( const U& u ) {
...
}
0342デフォルトの名無しさん
2006/11/09(木) 02:38:280343デフォルトの名無しさん
2006/11/09(木) 03:01:56や、そのぐらいはしてある。
…といいつつ出てきたエントリをうろちょろしてたら、
わりといいのが見つかった。thx。
ttp://d.hatena.ne.jp/uskz/20060607/p1
まあ何となくはわかった気になれた。
もうちょっとちゃんと知りたいなら、"C++ Templates" を読めという感じらしい。
0344デフォルトの名無しさん
2006/11/09(木) 06:35:32これが思考停止ってやつですかorz
NTPすげー
0345デフォルトの名無しさん
2006/11/09(木) 07:34:43struct D1 :public B {};
struct D2 :public B {};
class DD1 :public D1, public D2{};
int main(){
printf( "%d\n", sizeof( DD1::H ) );
return 0;
}
これコンパイル通ったんだが、
typedefの場合はメソッドとかと違って曖昧無しにコンパイラが解決してくれるの?
0346デフォルトの名無しさん
2006/11/09(木) 09:12:40D1::H と D2::H が同じものを指すので、 DD1::H という名前の検索自体は問題ない。
曖昧な基底クラスでエラーになるのは、そっから先の使い方によるらしい。
(4.11-2, 5.2.5-5)
0347デフォルトの名無しさん
2006/11/09(木) 11:06:22その場合、関数だと曖昧だけどtypedefの場合は大丈夫らしい
NTPの場合は仮想継承を使って基底クラスのtypedefしたものをoverrideしてる。
class B; // typedef int H;
class D1 :virtual public B; //typedef char H;
class D2 :virtual public B; //なにもしない
class DD1 :public D1, D2;
で、DD1::Hはcharになる。
ただの継承だとHは名前解決失敗するっぽい
名前解決は複雑だなー、、、
0348デフォルトの名無しさん
2006/11/09(木) 12:21:06policy_category を使って、SmartPtr のポリシーを自動判別。
http://www.cuj.com/documents/s=8890/cujexp0310alexandr/
3年前にこれを見たとき、正直感動した。
smart_ptr<T, storage<_> > でもいいし、
smart_ptr<T, ref_counted<_> > でもいい。
0349デフォルトの名無しさん
2006/11/09(木) 12:58:20最近は Boost.MPL でかなり高度なTMP の土台が用意されているので,
そちらを使えばもっと直接かつ見通しの良い形で実装できるような気もします.
http://thread.gmane.org/gmane.comp.lib.boost.devel/81060/focus=81080
0350デフォルトの名無しさん
2006/11/09(木) 13:01:34この程度の単純なコールバックだと,コンパイル時評価可能な
関数ポインタ値ならインライン展開しうるコンパイラもあります. MSVC とか.
0351デフォルトの名無しさん
2006/11/09(木) 16:38:090352デフォルトの名無しさん
2006/11/09(木) 16:51:540353デフォルトの名無しさん
2006/11/09(木) 17:06:380354デフォルトの名無しさん
2006/11/09(木) 17:16:23わかんねー(´д`;
<_>とか、boost::mplがわからんです。
というかboost使ったことない・・・
0355デフォルトの名無しさん
2006/11/09(木) 17:24:32とりあえずlambdaだけ使って味噌。
笑うくらいスッゲェーとか思うから。
後は興味が354を導くはず
0356デフォルトの名無しさん
2006/11/09(木) 17:24:48ref_counted<_> は、lambda の _1 と同じく引数のプレイスホルダで、
この場合 T に展開される。
>>348 の smart_ptr< T, ref_counted<_> > は、コンパイル時に以下のように
書くのと同じ効果がある。
smart_ptr< T, ref_counted<T> >
0357デフォルトの名無しさん
2006/11/09(木) 17:59:030358デフォルトの名無しさん
2006/11/09(木) 17:59:55ありがとうございます。
boostのラムダ読んでみます
0359デフォルトの名無しさん
2006/11/10(金) 15:02:15ってVS2005では使えないのでしょうか?
何かコード中でincludepathを設定する方法はないのでしょうか
0360デフォルトの名無しさん
2006/11/10(金) 15:22:04インクルードするときにフルパスで書けばいいんでね?
例えば #include "/usr/include/stdio.h"とか。
つーか、スレ違いだがね。
0361デフォルトの名無しさん
2006/11/10(金) 23:31:20Cの構造体をC++のクラスにラップしたいんだけど
typedef stract a
struct a *next;
...
}A;
こんなかんじでnextで別のポインタ参照するような構造体を
ラップするときってどうしてる?
0362デフォルトの名無しさん
2006/11/10(金) 23:38:32こんなかんじ、といっても文法めちゃくちゃで何をしたいのか分からない。
構造体をクラスでラップするとはどういう意味?
とりあえず落ち着いて話せ。
0363デフォルトの名無しさん
2006/11/10(金) 23:41:10struct a *next;
...
}A;;
こんなのだよこんなの、
0364デフォルトの名無しさん
2006/11/10(金) 23:43:180365デフォルトの名無しさん
2006/11/10(金) 23:44:02A* next;
..
};
ってことか?
0366デフォルトの名無しさん
2006/11/10(金) 23:45:45これだけだと、どういうパターンを適用するのか判断が難しいなぁ。
単純なラップじゃなくなるけど、
自分ならstd::list + std::list::iteratorみたいに巡回と管理のクラスの二つにわけるかな。
0367デフォルトの名無しさん
2006/11/10(金) 23:48:49ふむふむそっかぁ、同じデータ構造なんだけど
全然別々の名前のリスト状のデータ構造があって
ベタにCのデータ構造操作する部分記述したくないんだけど
やっぱそうやるしかないかぁ
0368デフォルトの名無しさん
2006/11/11(土) 00:06:58言葉のニュアンスも読む人間の考えに任せるしかないのにそれは酷いだろう。
言葉を改めろよ。
0369デフォルトの名無しさん
2006/11/11(土) 00:26:42自分の事しか考えてないんだから。
0370デフォルトの名無しさん
2006/11/11(土) 00:37:53template <class T>
class Sample
{
public:
Sample(const T& t) : m_t(t){}
private:
T m_t;
};
みたいな事をやったとき、class Tには何でも指定できてしまいますが、
このclass Tをあるクラスのサブクラスのみに指定したいのです。
どうしたら、いいのでしょうか?
環境は
vs2005 WinXPPro,SP2です。
0371デフォルトの名無しさん
2006/11/11(土) 00:49:14class Sample
{
BOOST_STATIC_ASSERT(boost::is_base_and_derived<あるクラス, T>::value);
public:
Sample(const T& t) : m_t(t){}
private:
T m_t;
};
0372デフォルトの名無しさん
2006/11/11(土) 00:52:11特殊化すればいいだけなんじゃないの?
本に書いてあることだよ?
0373デフォルトの名無しさん
2006/11/11(土) 00:55:550374370
2006/11/11(土) 01:24:25どうもありがとうございます。
0375デフォルトの名無しさん
2006/11/11(土) 04:02:04クラスAのポインタでクラスの中身(int t)を比較したいんですが、
bool operator< (A *a) const{
return (t < a->t);
}
bool operator> (A *a) const {
return (t > a->t);
}
とクラスに書いてやって、
A *a1 = new A;
A *a2 = new A;
a1->t = 2;
a2->t = 1;
これで、a1 > a2
をしても真にならないのですが、どこか間違ってますでしょうか?
0376デフォルトの名無しさん
2006/11/11(土) 04:15:35ポインタ同士の比較は配列の要素間の前後関係という意味になる。オーバーロードはできない。
そのオーバーロードの宣言は *a1 > a2 としたときに使われる。
0377デフォルトの名無しさん
2006/11/11(土) 04:17:16int t;
bool operator<(const A& a) const{
return (t < a.t);
}
bool operator>(const A& a) const {
return (t > a.t);
}
};
int main()
{
A* a1 = new A;
A* a2 = new A;
a1->t = 2;
a2->t = 1;
std::cout << std::boolalpha << (*a1 > *a2) << std::endl;
}
0378375
2006/11/11(土) 05:04:06ちなみに
priority_queue<A*, vector<A*, allocator<A*> >, greater<A*> >
にAをtの昇順に入れてやろうと思ったのですが、
おそらくそれが原因で上手くソート出来ませんでした。
うまい解決策はありませんでしょうか。
0379デフォルトの名無しさん
2006/11/11(土) 05:47:04greater<A*> を専用の比較関数で置きかえれ。
0380デフォルトの名無しさん
2006/11/11(土) 06:56:53http://www.boost.org/libs/iterator/doc/iterator_facade.html#tutorial-example
0381デフォルトの名無しさん
2006/11/11(土) 09:26:35class CTest {
public:
void func(){ };
}
int main() {
CTest t;
cout << &(t.func) << endl; // エラー
cout << (CTest::func) << endl; // 問題ないが、必ず値が1となる
}
0382デフォルトの名無しさん
2006/11/11(土) 09:31:04アンドが抜けてました失礼。
0383デフォルトの名無しさん
2006/11/11(土) 10:10:560384デフォルトの名無しさん
2006/11/11(土) 11:07:10VC2005EEにてビルドしたらこのようなエラー構文が出ました。
対処方法を教えてください。
※○○はわしの名前
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: ' MessageBox' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' :
1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。
0385デフォルトの名無しさん
2006/11/11(土) 11:33:30編集⇒詳細⇒スペースの表示
0386デフォルトの名無しさん
2006/11/11(土) 12:01:04定義する場合どのように定義すればよいのでしょうか?
0387デフォルトの名無しさん
2006/11/11(土) 12:05:23&(CTest::func) じゃなくて &CTest::func じゃないと駄目らしいぜ。 (5.3.1 -3-)
0388デフォルトの名無しさん
2006/11/11(土) 12:07:28アンドって書くと条件式の論理関になるから、記号の&単体はアンパサンドと表記するのが正しかったような
0389デフォルトの名無しさん
2006/11/11(土) 12:08:20規格の 24.1 にある要件を満たすような型として定義する。
わりと面倒なんだけど boost の iterator ライブラリを使うと楽が出来る。 >>380
0390デフォルトの名無しさん
2006/11/11(土) 12:30:27ストリームに対するoperator<<に void (CTest::func*)() を取るものがないので
暗黙の型変換でboolのやつが呼ばれてるんだろ。
0391デフォルトの名無しさん
2006/11/11(土) 14:16:12うまい事言うね
0392デフォルトの名無しさん
2006/11/11(土) 14:26:31DLLで解決。
0393デフォルトの名無しさん
2006/11/11(土) 14:54:13どうもすいません
それしたあと、再度ビルドしたんですがまた同じエラー構文が出ました。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: ' MessageBox' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' :
1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。(新しい機能 ; ヘルプを参照)
使用可能なユーザー定義された変換演算子がない、または
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
0394デフォルトの名無しさん
2006/11/11(土) 14:56:19表示設定を変えただけなんだから、その後にソース見て修正しないと駄目に決まってるだろ。
0395デフォルトの名無しさん
2006/11/11(土) 14:57:39全角スペースを半角スペースにしろ!
0396デフォルトの名無しさん
2006/11/11(土) 15:00:40同じエラーなら貼らんでいい。総じて、脳みそが足りてないんじゃないか?
0397デフォルトの名無しさん
2006/11/11(土) 15:09:030398デフォルトの名無しさん
2006/11/11(土) 15:10:440399デフォルトの名無しさん
2006/11/11(土) 15:12:09もう来るな 氏ねカス
0400デフォルトの名無しさん
2006/11/11(土) 15:17:41この構文です。
どう見ても半角ですよぉ・・・
「さん、こんにちは。」は全角ですけど本に沿ってんですよぉ・・・
0401デフォルトの名無しさん
2006/11/11(土) 15:19:20~~~~~~~~~~
空 白
空 白
空 白
ほんとに >> 385 をやったのか?
0402デフォルトの名無しさん
2006/11/11(土) 15:21:42そうしたらソースコードのところに→マークがいっぱいでます
これをどうすんです・・・
0403デフォルトの名無しさん
2006/11/11(土) 15:21:53"さん、こんにちは。"を試しに"xxx"でやってみたら通る?
0404デフォルトの名無しさん
2006/11/11(土) 15:23:500405デフォルトの名無しさん
2006/11/11(土) 15:24:210406デフォルトの名無しさん
2006/11/11(土) 15:25:04頼みますよマジで
0407デフォルトの名無しさん
2006/11/11(土) 15:25:24いっそその行消してもっかい全部書き直せ。
0408デフォルトの名無しさん
2006/11/11(土) 15:25:390409デフォルトの名無しさん
2006/11/11(土) 15:29:41じゃあ
MessageBox::Show("xxx");
では?
0410デフォルトの名無しさん
2006/11/11(土) 15:32:52みんなありがとございましたぁ・・
0411デフォルトの名無しさん
2006/11/11(土) 15:33:21できれば原因も教えて欲しい
0412デフォルトの名無しさん
2006/11/11(土) 15:35:310413デフォルトの名無しさん
2006/11/11(土) 15:35:490414デフォルトの名無しさん
2006/11/11(土) 15:36:55氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
もうくんなもうくんなもうくんなもうくんなもうくんなもうくんなもうくんなもうくんな
0415デフォルトの名無しさん
2006/11/11(土) 15:37:07ドンマイです(;^^;)
0416デフォルトの名無しさん
2006/11/11(土) 15:37:230417デフォルトの名無しさん
2006/11/11(土) 15:38:30相談です。
VC++2005EEにてビルドしたらこのようなエラー構文が出ました。
対処方法を教えてください。
※○○はわしの名前
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: ' MessageBox' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' :
1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。
323 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 11:20:55
>>322
全角スペースを半角に置換する
325 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 11:25:34
すいません、なるべく煽らんで下さい
0418デフォルトの名無しさん
2006/11/11(土) 15:39:47おもしろいです。このスレにいて本当に良かったと思える一日でした
0419デフォルトの名無しさん
2006/11/11(土) 15:44:150420デフォルトの名無しさん
2006/11/11(土) 17:33:480421デフォルトの名無しさん
2006/11/11(土) 17:52:02って言ってるようなもんだからな。
0422デフォルトの名無しさん
2006/11/11(土) 18:04:100423デフォルトの名無しさん
2006/11/11(土) 20:57:160424デフォルトの名無しさん
2006/11/11(土) 20:59:17質問にすら来ないでわからないことをほったらかしにするやつのほうがやばい
0425デフォルトの名無しさん
2006/11/11(土) 21:00:350426デフォルトの名無しさん
2006/11/11(土) 21:10:030427デフォルトの名無しさん
2006/11/11(土) 21:15:010428デフォルトの名無しさん
2006/11/11(土) 21:22:53コンパイルエラーです。
0429427
2006/11/11(土) 21:23:26|i|┏┛┗━╋┻┛|i!||!|ii|| i|!i||i|┏━┓ ┏┓i|i| i┃┃i!|
i||┗┓┏┓┃||i┏━━━━┓┗━┛ ┃┃|i||!i┃┃i!|
|i |!|i┃┃┃┃i||┗━━━━┛|i|| || ||||!┃┃i|i| i┗┛!i|
i||i ||┃┃┃┃|! |||i ||i !|||!|┏━━┛┃|i||!i┏┓i|!
|i!i |!┗┛┗┛i|!i| / | / | ┗━━━┛i|i| i┗┛i!|
i| |||i|!i| ||!|i||i! /,_ ┴─/ ヽ |!i| ||| |i||!|i|i|||| ||i
|i|| ||i!i|| (_゜.,》.'(_゜,》)ミ ヽ ! | |!i||!|ii||!|ii|
i|ii / ,,__,ニ、、 ノ( | i|i!|i|
|i | Y~~/~y} `, ~ | そ、そんなー… |i
!. | ,k.,.,!,.,.,r| ,! く |
i / <ニニニ'ノ \ l
0430デフォルトの名無しさん
2006/11/11(土) 21:24:260431デフォルトの名無しさん
2006/11/11(土) 21:25:150432デフォルトの名無しさん
2006/11/11(土) 21:33:26マ板にも書き込んでるんだな
0433デフォルトの名無しさん
2006/11/11(土) 21:37:41http://pc8.2ch.net/test/read.cgi/prog/1159668078/451
0434デフォルトの名無しさん
2006/11/11(土) 21:57:25いちいちバカに答えてるの。
(軽蔑の意味じゃなくて)普通にすばらしいと思う
0435デフォルトの名無しさん
2006/11/11(土) 22:17:04ところで
> System::Windows::Forms:: ってC#じゃないの C++/CLIとか?
0436デフォルトの名無しさん
2006/11/11(土) 22:20:06C++/CLIだろう。
それにC#だったらSystem.Windows.Formsって書くし
0437デフォルトの名無しさん
2006/11/11(土) 22:25:410438デフォルトの名無しさん
2006/11/12(日) 10:54:36プログラマってのは偏屈でプライドが高いから
答えてやってるっていう意識が強いんだろう。
まぁ本来それが正しい姿勢だと思うがね
0439デフォルトの名無しさん
2006/11/12(日) 11:10:08呼び出し元の変数を弄るとき以外に場合はある?
0440デフォルトの名無しさん
2006/11/12(日) 11:12:01constくっつけて変更防止させたりして。
0441デフォルトの名無しさん
2006/11/12(日) 11:37:38計測はしてないから、どの程度効果があるか分からんが
0442デフォルトの名無しさん
2006/11/12(日) 11:41:40コピーコンストラクタとかの処理が重たいクラスは、
積極的に参照渡しにしたほうがよさげ。
0443デフォルトの名無しさん
2006/11/12(日) 11:46:15俺は呼び出し側で引数を弄りたい場合はポインタ、
弄らなくてもいいけどコピーさせたくない場合はconst参照にしてる。
0444デフォルトの名無しさん
2006/11/12(日) 15:08:55NULL渡す場合があるならポインタ。
0445デフォルトの名無しさん
2006/11/12(日) 16:21:12void func() throw();
宣言だけに付ければいいのでしょうか?
それとも実装の方にも付けなければいけないのでしょうか?
0446デフォルトの名無しさん
2006/11/12(日) 16:29:37それって「私は例外投げませんよ」って指定じゃなかった?
0447デフォルトの名無しさん
2006/11/12(日) 16:38:41そんなことは分かったうえでの質問だろう。たぶん。
0448デフォルトの名無しさん
2006/11/12(日) 17:22:25お尋ねしたいのは、それを宣言に付けさえすれば良いのか、定義の方にも
付けねばならないのかということです。
0449デフォルトの名無しさん
2006/11/12(日) 17:27:37訊く前に実験実験。
struct hoge{
void payo()throw();
};
//void hoge::payo()throw(){}
void hoge::payo(){}
//error: declaration of `void hoge::payo()' throws different exceptions
0450デフォルトの名無しさん
2006/11/12(日) 17:46:56仕様そのものを知りたいなあと。
因みに、VC8だとそのコードが通ります。
0451デフォルトの名無しさん
2006/11/12(日) 18:28:51vcとg++とbcc。
時間があるなら標準規格読む。
0452デフォルトの名無しさん
2006/11/12(日) 20:35:39http://www.jisc.go.jp/
でX3014で検索。
PDFを開いてから例外指定で検索。
0453デフォルトの名無しさん
2006/11/12(日) 22:32:40class Coordinate{
public:
Coordinate(void): x(coo.X) , y(coo.Y) {}
short& x;
short& y;
COORD coo;
};
class Recta{
public:
Recta(void): t(rec.top) , b(rec.bottom), l(rec.left) , r(rec.right) {}
long& t;
long& b;
long& l;
long& r;
RECT rec;
};
Coordinate C( int x , int y ){
Coordinate c;
c.x = x;
c.y = y;
return c;
}
Recta R( Coordinate c1 , Coordinate c2 ){
Recta r;
r.l = c1.x;
r.t = c1.y;
r.r = c2.x;
r.b = c2.y;
return r;
}
0454続き
2006/11/12(日) 22:39:33void main(){
Recta r = R( C( 1, 1 ) , C( 10 , 10 ) );
}
環境:VisualStudio.net 2002
やろうとしてること・・・
1. Windows組み込みのCOORDやRECTを、COORDやRECTとして使えるように維持しつつ機能を拡張する
(サンプルなので余計なメンバ関数は省いてますが)
2. COORD.X とかを小文字のxでアクセスできるように参照変数を付ける
3. (mainでは)頂点を二つ指定して正方形を作る
上のソースを実行すると、四角形の頂点の値が滅茶苦茶な値になっています
(初期化されてない値っぽい?)
1ステップずつ実行すると、どうやらC関数で座標を作るところまではできていて
Cの戻り値でR関数を実行する時点でおかしくなっているようなのですが
どうしてそうなるのかが判りませんです・・・
どこか根本的に無理なことをしようとしてるのでしょうか
0455デフォルトの名無しさん
2006/11/12(日) 22:53:08デフォルトのコピーコンストラクタが参照の初期化に
コピー元への参照を使ってしまうから、コピー元が
破棄されることによって不正な参照が残ってしまう。
0456デフォルトの名無しさん
2006/11/12(日) 22:54:170457デフォルトの名無しさん
2006/11/13(月) 00:19:05コピーコンストラクタって今まであまり意識していなかったのですが
今回、参照の指す先がおかしいということでしたので
Coordinate( const Coordinate& C )
:x(this->coo.X)
,y(this->coo.Y)
{
this->coo = C.coo;
}
というコピーコンストラクタを明記してみたら、意図していた通りに動くようになりました
0458デフォルトの名無しさん
2006/11/13(月) 00:21:140459デフォルトの名無しさん
2006/11/13(月) 00:51:560460デフォルトの名無しさん
2006/11/13(月) 00:57:04それによると例外指定は関数型の一部にならないってあるから
throw()は宣言にだけ付けときゃ良いわけですね。
0461デフォルトの名無しさん
2006/11/13(月) 01:14:28でも、throw指定するのは(nothrow指定含めて)時代遅れだと
なんかで読んだ気がする。
0462デフォルトの名無しさん
2006/11/13(月) 01:57:25nothrowだけは例外的に使うべきだと思ってきたが。(除テンプレート内)
0463デフォルトの名無しさん
2006/11/13(月) 02:17:43nothrowは時代遅れ。
0464デフォルトの名無しさん
2006/11/13(月) 05:00:50多分GotW
Exceptinal C++ Styleでもかかれてる
>>463
文脈嫁
0465デフォルトの名無しさん
2006/11/13(月) 05:17:08>2. COORD.X とかを小文字のxでアクセスできるように参照変数を付ける
これをする理由がわからん。
参照を返すアクセサを用意するだけでいいような希ガス。
0466デフォルトの名無しさん
2006/11/14(火) 09:48:58COORD, RECTから
0467デフォルトの名無しさん
2006/11/14(火) 18:51:04try { hoge() }
catch(Hoge){throw;}
catch( ... ){ unexpected(); }
みたいなコードを自動生成するだけだら、使えネーって話だな。
0468デフォルトの名無しさん
2006/11/15(水) 02:36:58throw() は呼び出し側の最適化に役に立つ。
nothrow については、ググッたところ、
http://www.nothrow.com/
0469デフォルトの名無しさん
2006/11/15(水) 08:06:320470デフォルトの名無しさん
2006/11/15(水) 18:32:47俺は今まで、デストラクタには必ず付けていたが。
0471デフォルトの名無しさん
2006/11/15(水) 18:45:12つけなくていいんじゃない?
Boostも例外指定はしないで決定してるみたいだし
0472デフォルトの名無しさん
2006/11/15(水) 21:10:080473デフォルトの名無しさん
2006/11/16(木) 09:34:27「throw() を付けるかどうかは好みの問題だけど、
個人的には /* throw() */ とコメントで書いておくのが好き」
と言ってるな
0474デフォルトの名無しさん
2006/11/16(木) 10:57:47#define NOTHROW throw()
#endif
0475デフォルトの名無しさん
2006/11/16(木) 20:12:280476デフォルトの名無しさん
2006/11/16(木) 21:06:03書いてるね。なんとも含蓄があるよ。
教訓#1:例外仕様を決して書いてはならない。
教訓#2:空の例外仕様は除くが、私があなたなら、それさえも避けるだろう。
0477デフォルトの名無しさん
2006/11/16(木) 21:09:10ゴメン・・
含蓄kwsk
0478デフォルトの名無しさん
2006/11/17(金) 10:39:58char型、string型でもいいのですが、
文字列から特定の文字だけを全部削除できる関数はあるんでしょうか?
aaaabbbaaaabbbaaaaa
↓
aaaaaaaaaaaaa
という風にです。
0479デフォルトの名無しさん
2006/11/17(金) 10:51:20#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
int main()
{
std::string s = "aaaabbbaaaabbbaaaaa";
std::cout << s << std::endl;
s.erase(std::remove_if(s.begin(), s.end(), std::bind2nd(std::equal_to<char>(), 'b')), s.end());
std::cout << s << std::endl;
}
0480デフォルトの名無しさん
2006/11/17(金) 10:52:46複雑な削除条件も簡単に書ける。
boost::bindで何としても一行で済まそうという傾向もありますが
0481デフォルトの名無しさん
2006/11/17(金) 10:57:17remove() でいいだろ。
0482478
2006/11/17(金) 10:59:03解決しました
0483デフォルトの名無しさん
2006/11/17(金) 11:14:02#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void main()
{
string s = "aaaabbbaaaabbbaaaaa";
remove(s.begin(), s.end(), 'b');
cout << s << endl;
}
結果:aaaaaaaaaaaabaaa
remove()だけだと削除しきれない。
0484デフォルトの名無しさん
2006/11/17(金) 11:23:45うむ。 erase() も要るな。
0485デフォルトの名無しさん
2006/11/17(金) 11:25:400486デフォルトの名無しさん
2006/11/17(金) 13:10:350487デフォルトの名無しさん
2006/11/17(金) 13:19:240488デフォルトの名無しさん
2006/11/17(金) 13:22:000489デフォルトの名無しさん
2006/11/17(金) 13:24:530490デフォルトの名無しさん
2006/11/17(金) 13:57:170491デフォルトの名無しさん
2006/11/17(金) 14:59:22remove()でもいいですね。remove_if()をわざわざ使ったのは、例えば
'b'が2回現れた後は'c'も削除せよ、というような場合に便利ですね。
今回はremove()だけでいいみたいです。
0492デフォルトの名無しさん
2006/11/17(金) 15:20:42文字列を取り出していきたいんですけど、どうしたらいいでしょうか?
0493デフォルトの名無しさん
2006/11/17(金) 16:03:51無視する文字は改行文字だけ?ホワイトスペース文字全般?
0494デフォルトの名無しさん
2006/11/17(金) 16:14:11ホワイトスペースも無視する方法のふたつをお願いします。
0495デフォルトの名無しさん
2006/11/17(金) 17:14:22#include <iostream>
#include <fstream>
#include <string>
int getsome(std::ifstream& fs, std::string& s, int n);
int getwows(std::ifstream& fs, std::string& s, int n);
int main()
{
std::ifstream fs("ws.txt");
std::string s;
int n = getsome(fs, s, 10); // 改行文字のみを無視
std::cout << n << "文字: \'" << s << '\'' << std::endl;
fs.seekg(0, std::ios::beg);
s = "";
n = getwows(fs, s, 10); // ホワイトスペース文字を無視
std::cout << n << "文字: \'" << s << '\'' << std::endl;
}
int getsome(std::ifstream& fs, std::string& s, int n)
{
char c;
int i = 0;
while (i < n && fs.get(c))
if (c != '\n') {
s += c;
i++;
0496デフォルトの名無しさん
2006/11/17(金) 17:15:32return i;
}
int getwows(std::ifstream& fs, std::string& s, int n)
{
char c;
int i = 0;
while (i < n && fs >> std::ws >> c) {
s += c;
i++;
}
return i;
}
getsome()が改行文字のみを無視、getwows()はホワイトスペース文字を
全て無視します。
0497デフォルトの名無しさん
2006/11/17(金) 17:16:17---- ws.txt ----
1234
56
78
90
[EOF]
0498デフォルトの名無しさん
2006/11/17(金) 17:26:10>>497には所々文字列の前に' 'とかタブ文字を入れて見て下さい。
0499494
2006/11/17(金) 17:29:05問題を解決する事ができました!
ありがとうございます!
0500デフォルトの名無しさん
2006/11/17(金) 18:57:470501デフォルトの名無しさん
2006/11/17(金) 22:19:280502デフォルトの名無しさん
2006/11/18(土) 00:03:240503デフォルトの名無しさん
2006/11/18(土) 01:24:380504デフォルトの名無しさん
2006/11/18(土) 01:56:270505デフォルトの名無しさん
2006/11/18(土) 02:25:43{
public:
virtual int main( int argc, char **argv );
};
0506デフォルトの名無しさん
2006/11/18(土) 03:43:05ヘッダファイルa.hひとつで
class a{
void hoge(){
return 0;
}
};
という感じで定義も記述して、a.cppファイルを作らないのってよくないんでしょうか?
修正があったときhファイルとcppファイルをいじらなきゃならないのが嫌なので…。
今ぶちあたってる問題として、お互いのstaticなメンバ関数を
お互いが使うような二つのクラスがあるときは宣言と定義を分けないとどうしようもないようなのですが。
0507デフォルトの名無しさん
2006/11/18(土) 03:51:52ヘッダファイルには宣言だけ
cppに定義部を書く
0508デフォルトの名無しさん
2006/11/18(土) 04:45:10やはりコンパイル時間は遅くなりそうだが。
ちなみにテンプレートを使ってるとヘッダファイルしか使えないよな。
0509デフォルトの名無しさん
2006/11/18(土) 05:32:09という時代だからな
boostがちょろっと更新されるだけで
pimplパターンなんて水の泡だ
やるだけ無駄
0510デフォルトの名無しさん
2006/11/18(土) 09:33:34コンパイル時間より、コードの肥大化の方を心配した方がいい
0511デフォルトの名無しさん
2006/11/18(土) 11:53:22C++的にはexportつかえばヘッダに書かなくても大丈夫だよ!
0512デフォルトの名無しさん
2006/11/18(土) 11:56:59ちゃんと使えるコンパイラってどれがあるの?
0513デフォルトの名無しさん
2006/11/18(土) 12:56:240514デフォルトの名無しさん
2006/11/18(土) 14:04:47実際のところサポートしてるコンパイラって何てやつ?
0515デフォルトの名無しさん
2006/11/18(土) 14:15:350516デフォルトの名無しさん
2006/11/18(土) 14:32:16Borlandのってどう?
0517デフォルトの名無しさん
2006/11/18(土) 14:48:10exportがあっても何も解決しないっぽいよ。
0518デフォルトの名無しさん
2006/11/18(土) 15:42:490519デフォルトの名無しさん
2006/11/18(土) 15:45:08次期C++ではどうなの?
0520デフォルトの名無しさん
2006/11/18(土) 22:38:24寡聞にして知らん。
糞GCCもずっと長いことサポートしてなかったと思うが、4.0系移行はサポートしたのか?
0521デフォルトの名無しさん
2006/11/18(土) 23:20:570522デフォルトの名無しさん
2006/11/19(日) 01:13:56c#だと楽だよね
0523デフォルトの名無しさん
2006/11/19(日) 01:18:34UMLソフトでクラスしこしこ作ればそのへんは
骨だけは作ってくれるぞ
0524デフォルトの名無しさん
2006/11/19(日) 03:00:440525デフォルトの名無しさん
2006/11/19(日) 03:17:130526デフォルトの名無しさん
2006/11/19(日) 03:29:210527デフォルトの名無しさん
2006/11/19(日) 04:26:560528デフォルトの名無しさん
2006/11/19(日) 09:51:20...
};
こういうクラスがあって、実体化するときに以下の用に書きますがが、
MYCLASS<A> myclassA;
MYCLASS<B> myclassB;
こうかける方法を教えてほしいです。
MYCLASS myclassA;
MYCLASS myclassB;
このときTは、それぞれA, Bに死体です。
0529528
2006/11/19(日) 09:57:35template <typename T> class MYCLASS {
T* a;
MYCLASS(T* t) : a(t) {}
};
こういうクラスがあって、実体化するとき以下のように書きますが、
A a;
MYCLASS<A> my1(&a);
B b;
MYCLASS<B> my2(&b);
以下のように書きたいです。
A a;
MYCLASS my1(&a);
B b;
MYCLASS my2(&b);
このときTは、それぞれA, Bに死体です。
0530デフォルトの名無しさん
2006/11/19(日) 09:59:540531デフォルトの名無しさん
2006/11/19(日) 10:12:53boost::any a;
template<typename T>
MYCLASS(T* t) : a(t) {}
};
0532528
2006/11/19(日) 10:19:01ありがとう、boostインストールしてきます。
0533528
2006/11/19(日) 12:37:45デストラクタでTが使えないってエラーがでるんですが、
これは無理なんでしょうか?
class MYCLASS
{
boost::any a;
template<class T>
MYCLASS(T* t) : a(t) {}
template<class T>
~MYCLASS() {
cout << sizeof(T);
}
}
0534デフォルトの名無しさん
2006/11/19(日) 13:52:02無理。 T を決める方法が無い。
何がしたいんだ?
0535528
2006/11/19(日) 14:29:550536デフォルトの名無しさん
2006/11/19(日) 14:30:35何もしなくても呼ばれるだろ?
0537528
2006/11/19(日) 14:44:10T*なので
0538デフォルトの名無しさん
2006/11/19(日) 14:45:38template<class T>
MYCLASS(T* t) : a(*t) {}
0539528
2006/11/19(日) 15:02:46元々渡されたtのデストラクタを呼んで解放したいです。
529の例がスタック上のインスタンスになってるんですが、
実際はこういう風には使わないで、newしたものを渡します。
0540デフォルトの名無しさん
2006/11/19(日) 15:07:05{
boost::shared_ptr< void > p;
public:
template<class T>
MYCLASS(T* t) : p(t) {}
};
型が消えてるから MYCLASS 内で有用な仕事ができないとは思うけれど
0541デフォルトの名無しさん
2006/11/19(日) 15:08:41デストラクタじゃなくて呼ぶのdeleteじゃね?
とりあえずスマートポインタだと無駄に重装備っぽいので関数ポインタ使ってみた
class MYCLASS{
MYCLASS(const MYCLASS&);
MYCLASS&operator=(const MYCLASS&);
void*ptr;
void(*delfn)(void*);
public:
template<class T>MYCLASS(T* t) : ptr(t),delfn(deleter<T>){}
~MYCLASS(){delfn(ptr);}
};
0542541
2006/11/19(日) 15:10:46template<typename T>
static void deleter(void*p){delete (T*)p;}
0543528
2006/11/19(日) 15:19:31ありがとうございます。難しそうなのでじっくり調べてみます。
>デストラクタじゃなくて呼ぶのdeleteじゃね?
そうですdeleteです。わかりずらくてすいません。
0544デフォルトの名無しさん
2006/11/19(日) 15:33:43class aaa{
int v;
class bbb{
void func(int x){
v+=x; //コンパイルエラー
}
}b;
};
0545デフォルトの名無しさん
2006/11/19(日) 15:46:30aaa のインスタンスを渡せ。
0546デフォルトの名無しさん
2006/11/19(日) 15:52:25#include <iostream>
using namespace std;
class aaa {
int v;
class bbb {
int& v;
public:
bbb(int& w) : v(w) {}
void func(int x) { v += x; }
} b;
public:
aaa(int init=0) : v(init),b(v) {}
int get_v(int e) { b.func(e); return v; };
};
int main(void)
{
aaa uho;
cout << uho.get_v(12) << endl;
cout << uho.get_v(2) << endl;
return 0;
}
0547デフォルトの名無しさん
2006/11/19(日) 15:58:05((aaa*)(reinterpret_cast<volatile char*>(this) - offsetof(aaa,b)))->v += x;
0548デフォルトの名無しさん
2006/11/19(日) 16:45:01arigatougozaimasu
0549デフォルトの名無しさん
2006/11/19(日) 17:01:04iie douitasi masite
0550デフォルトの名無しさん
2006/11/20(月) 00:17:18確実に型情報が解っているときはどのキャストで戻すべきなのですか?
0551デフォルトの名無しさん
2006/11/20(月) 00:36:440552デフォルトの名無しさん
2006/11/20(月) 00:37:14static_cast で一応可能。でも不正な関係のポインタを渡して死ぬのは
プログラマの責任。 dynamic_cast なら実行時にチェックが行われる。
0553デフォルトの名無しさん
2006/11/20(月) 00:55:040554デフォルトの名無しさん
2006/11/20(月) 01:20:210555デフォルトの名無しさん
2006/11/20(月) 01:28:160556デフォルトの名無しさん
2006/11/20(月) 02:06:390557デフォルトの名無しさん
2006/11/20(月) 02:58:09確かに>>553みたいな紹介するやつ(+>>555みたいなやつ)がよくいるけどこーゆーboost厨はうざいだけだよなぁ。
0558デフォルトの名無しさん
2006/11/20(月) 08:00:43俺もboost厨だから。
ただ
boost;;XXX使え
とかで終わる発言は投げっぱなし感が強くて嫌だわ
0559デフォルトの名無しさん
2006/11/20(月) 09:22:26痛い・うざい・キモイのレッテルを貼らないと気が済まないよね。
自助努力なんて要求してくる奴は人として許せないよね。
0560デフォルトの名無しさん
2006/11/20(月) 09:49:30どこまで取り込まれるかもわからないし、
標準で規定されたわけじゃないから、仕様の変更も充分にありうるわけ。
(仕様も改定される可能性があるけどね)
例えば、POSIXで標準化されていても、C++の標準に含まれないものは
このスレでは範囲外としているでしょ。
もちろんアドバイス的なことは出来ても
ディレクトリの一覧なんかは、「標準C++では出来ない」が答えだし。
そういうのを、「標準じゃないけど」等の前置きなしに
当然のように書き込むから、嫌がる人が居るのよ。
0561デフォルトの名無しさん
2006/11/20(月) 10:13:160562デフォルトの名無しさん
2006/11/20(月) 10:31:08お前だけ全然切り口が違うな。
「boost::XXX使え」が「標準じゃないけどboost::XXX使え」に変わっても
>>553や>>557は何も満足しないだろうし。
>>553や>>557は単に、自助努力を強いられてムカついちゃってるボクちゃん。
0563デフォルトの名無しさん
2006/11/20(月) 21:19:18テンプレに「荒れるからboostの話題禁止」って入れてもいいと思うんだが
まぁ誰も賛成しないよな
0564デフォルトの名無しさん
2006/11/20(月) 21:28:20popenが必要な時にはCのioを使わなければなりませんか?
0565デフォルトの名無しさん
2006/11/20(月) 21:34:350566初心者
2006/11/20(月) 21:53:10注:私の質問に対して煽りで返す不届き者がいるようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
ちなみに私の友達には2ch管理者さえも畏れるハッカーがおり、
あまりにも礼を欠く発言に対してはそれ相応の「処置」をとらせていただくことを
ご承知下さい。なお、質問に対して有意義な答えを下さった方には
感謝します。
0567デフォルトの名無しさん
2006/11/20(月) 21:55:44きみの友達の方が詳しいからそっちに聞いた方が良いと思うよ。
0568デフォルトの名無しさん
2006/11/20(月) 21:56:11あれ夏休みでもないしなぁうーん異常気象で頭がおかしくなったんかな
0569デフォルトの名無しさん
2006/11/20(月) 22:00:22再帰やSTL勉強しなさい。
0570初心者
2006/11/20(月) 22:01:10やはり自力でやらなければ意味がないのでここで質問しました。
出来ればもっと有意義なレスを期待します。
>>568
現れましたね、私が質問しているのに関係ない雑談を始める人が。
私は心が広いので寛容な心で許容しますが、今後このようなことが
あった場合当方では責任を負えませんのでご了承お願いします。
0571デフォルトの名無しさん
2006/11/20(月) 22:02:44さてさてどうなることやらw
0572デフォルトの名無しさん
2006/11/20(月) 22:03:280573デフォルトの名無しさん
2006/11/20(月) 22:04:25こちらへどうぞ↓
【初心者歓迎】C/C++室 Ver.32【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1160893851/
0574デフォルトの名無しさん
2006/11/20(月) 22:06:02おめぇにはVip板がお似合いじゃ
さっさと消えろ
0575初心者
2006/11/20(月) 22:07:39初心者と名乗っているのはあくまでも謙遜してのことであり、
そのスレッドは私の質問に対してはレベルが低すぎると判断して
このスレに書き込んだわけですが・・・
その辺を出来れば察してくれるとうれしいです。
>>574
VIP板はレベルが低いので私には合わないと思われます。
私のレベルはこのスレの平均よりやや上なので話が合うと思いこのスレに現れました。
0576デフォルトの名無しさん
2006/11/20(月) 22:09:110577初心者
2006/11/20(月) 22:10:16皆さんにはそれなりの制裁を下すのでそのつもりでいてください。
0578デフォルトの名無しさん
2006/11/20(月) 22:11:15>自力でやらなければ意味がない
いや、だからこそ、その友達に色々聞いて自分でプログラム組めばいいんじゃない?
0579デフォルトの名無しさん
2006/11/20(月) 22:12:180580デフォルトの名無しさん
2006/11/20(月) 22:12:46「制裁を下してもらう」の間違いだろwww
0581初心者
2006/11/20(月) 22:13:19さっきは脅しのつもりでしたがもう容赦しません。
0582デフォルトの名無しさん
2006/11/20(月) 22:14:04自力でやれよ
0583デフォルトの名無しさん
2006/11/20(月) 22:15:00「ふざけないで下さい」と言っているわりには人に物を頼む態度じゃないね。
0584デフォルトの名無しさん
2006/11/20(月) 22:16:17おまえズボン脱がしてトイレに頭突っ込むぞ?(笑
0585初心者
2006/11/20(月) 22:16:40インターネット上においてこのスキルがどういう意味を持つか、
多少なりとも知識のあるみなさんにはわかることでしょう。
ぜひ、賢明な判断をお願いいたします。
0586デフォルトの名無しさん
2006/11/20(月) 22:16:44折角 >>578 が有意義なレスをしてくださっているのに、無視しましたね。
ふざけないで下さい。もういいです。
0587初心者
2006/11/20(月) 22:17:11祖国にはあなた達のパソコンをハッキングする人が沢山居ます。覚悟していてください。
0588デフォルトの名無しさん
2006/11/20(月) 22:18:040589デフォルトの名無しさん
2006/11/20(月) 22:18:050590初心者
2006/11/20(月) 22:18:390591デフォルトの名無しさん
2006/11/20(月) 22:19:24まさか釣りだったとは。
0592デフォルトの名無しさん
2006/11/20(月) 22:19:290593デフォルトの名無しさん
2006/11/20(月) 22:19:55明らかに釣りじゃん。
0594デフォルトの名無しさん
2006/11/20(月) 22:20:010595デフォルトの名無しさん
2006/11/20(月) 22:23:17>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
0596デフォルトの名無しさん
2006/11/20(月) 22:23:420597デフォルトの名無しさん
2006/11/20(月) 22:23:45どうすれば生き返るんでしょうか。
0598デフォルトの名無しさん
2006/11/20(月) 22:24:440599564
2006/11/20(月) 22:29:300600デフォルトの名無しさん
2006/11/20(月) 22:32:58でいいじゃん
0601デフォルトの名無しさん
2006/11/20(月) 22:34:240602デフォルトの名無しさん
2006/11/20(月) 22:36:380603557
2006/11/20(月) 22:45:30「標準だけじゃできないんだけど、boost::XXXならなんとかなるよ」的な回答なら気にしないけどなぁ。
>>558 も言ってるように投げっぱなし感の強い発言であり、且つ
>>560 も言ってるように標準でもないものをさも当然のように言うから引っかかる。
boostが標準なら「boost::XXX使え」でも全然気にならない。
0604デフォルトの名無しさん
2006/11/20(月) 23:00:52しゅーりょー。
次の話題いこうぜ
0605デフォルトの名無しさん
2006/11/20(月) 23:04:30popen()ということで、UNIX限定でいいのかな?
popen()すると、FILE *が返ってくる。
多くのC++ iostream library@UNIXでは、
FILE *を引数に取るコンストラクタが用意されているので、それを使えばいい。
int(file descriptor)を引数に取る物しかなければ、fileno()でFILE *→intすればいい。
0606デフォルトの名無しさん
2006/11/20(月) 23:05:31UNIX板か、Linux板の。
0607デフォルトの名無しさん
2006/11/20(月) 23:20:000608デフォルトの名無しさん
2006/11/20(月) 23:27:25vector<...>::iterator i = hoge.begin();
advance(i, index);
確か、こんなんでできなかった?
0609デフォルトの名無しさん
2006/11/20(月) 23:27:41begin() + n
0610デフォルトの名無しさん
2006/11/21(火) 00:24:30切るのは勘弁してくれ……
0611デフォルトの名無しさん
2006/11/21(火) 00:55:180612デフォルトの名無しさん
2006/11/21(火) 01:17:11だからそこからして意見が食い違ってんだって。
boost厨からしたらboostは事実上標準なのかもしれんが、
boost厨以外のヤツからしたらboostは標準でもなんでもないの。
0613デフォルトのヘビーboostユーザさん
2006/11/21(火) 01:20:210614612
2006/11/21(火) 01:21:20boost厨じゃないヤツからしたら標準でもないものをひとつやふたつの問題を
解決するためだけに導入するのは馬鹿げてることなの。
0616デフォルトの名無しさん
2006/11/21(火) 01:26:370617デフォルトの名無しさん
2006/11/21(火) 01:27:21なんかいいことあるのか?
0618デフォルトの名無しさん
2006/11/21(火) 01:29:120619デフォルトの名無しさん
2006/11/21(火) 01:31:57その点には別に異論はない。
0620デフォルトの名無しさん
2006/11/21(火) 01:42:18仕事などでboostを導入できない環境というのもあるんじゃない?
0621デフォルトの名無しさん
2006/11/21(火) 01:44:360622デフォルトの名無しさん
2006/11/21(火) 01:45:210623デフォルトの名無しさん
2006/11/21(火) 01:49:250624デフォルトの名無しさん
2006/11/21(火) 02:01:42確かにboost以外NGとかいうboost厨は要らんな。
0625デフォルトの名無しさん
2006/11/21(火) 02:07:55魅力的なコンポーネントが多いのは確かなので使い倒したくはあるも、
中にはアカデミックなばかりで実用性皆無な変態ハッタリコンポーネントなんかも
跳梁してたりするわけで、業務で使うには慎重になりたいところだが、
そうなると相応に現在の実装状況その他boost内部事情に詳しくならねばならず、
そんな暇あったら仕事しろやゴルァと怒られることしきり
まー、あれだよ。
時間のあるスキモノの人は、気の乗った範囲で構わんので
知識を還元してくれると、ちょっぴり嬉しいですよ。
ウザがられない程度に。
0626デフォルトの名無しさん
2006/11/21(火) 02:09:12つまみ食いすればいいのに。
0627デフォルトの名無しさん
2006/11/21(火) 02:09:18まだあんのかよw
0628帰ってきた初心者
2006/11/21(火) 02:24:30注:私の質問に対して煽りで返す不届き者がいるようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
ちなみに私の友達には2ch管理者さえも畏れるハッカーがおり、
あまりにも礼を欠く発言に対してはそれ相応の「処置」をとらせていただくことを
ご承知下さい。なお、質問に対して有意義な答えを下さった方には
感謝します。
0629デフォルトの名無しさん
2006/11/21(火) 02:27:41不可能
0630デフォルトの名無しさん
2006/11/21(火) 02:33:38うん。確かに不可能だw
0631デフォルトの名無しさん
2006/11/21(火) 03:22:22BoostするにはPanstが必要だ。
0632デフォルトの名無しさん
2006/11/21(火) 08:22:45個々の局面で適切な答えかどうか判断するしかないんじゃないの?
>>625のいうようにboostの中にはトンデモなやつから、
滅茶便利なものまであるからさ。
解答者が「標準で」と限定している場合は除いて、
boostならこういう風に簡単に解決できるというレスがあるのは、
質問者にもスレ住民にも有益だと思う。
0633デフォルトの名無しさん
2006/11/21(火) 09:02:45boostはこういう風に標準の上に実装しているというのを示すのは有意義だと思う。
boostは単に便利なだけじゃなくて、ソースを見て勉強するのにも使えるわけだし。
ただ、教科書を渡して「これ見て一人で勉強して」と言い放つようなレスばっかりだと見ている側としてもつまんないよね。
結局>>554 >>557 の言うように紹介の仕方が不味いということなんだと思うんだけど、どうよ。
0634デフォルトの名無しさん
2006/11/21(火) 09:41:52>「これ見て一人で勉強して」と言い放つようなレスばっかり
そんなレスどこにもないぞ
0635デフォルトの名無しさん
2006/11/21(火) 10:22:51同じコンポーネント紹介するのにいちいち解説書き込んでたら
おんなじレス繰り返すことになるのがわからんのかね?
公式のドキュメントのほうが詳細で正確なんだし、読むために特別なコストが
かかるわけでもない。コンポーネントの名前を落としてさえ行けば十分だろ。
0636デフォルトの名無しさん
2006/11/21(火) 11:07:08議論したいなら別だが、そうでないなら少し工夫するだけでいいだろ。
と思ったが、>553で充分ジャマイカ。それ以上何が要るんだ?
0637デフォルトの名無しさん
2006/11/21(火) 11:12:42コンポーネントの詳細な解説なんてそりゃ要らないだろ。
今の話題とそのコンポーネントがどう関係するのかくらいは書けって話じゃね?
それにしてもpolymorphic_downcastはコードの意味を明確にするのにはいいかもね。
ttp://boost.cppll.jp/HEAD/libs/conversion/cast.htm
0638初心者
2006/11/21(火) 11:26:59質問する人、答える人が双方高度な意識を持ち、有意義な質疑応答
をすることが必要だと考えます。そのための啓蒙文をVer2
にアップグレードしました。今後は各自の発言の最後にコピーアンドペスート
することが要求されます。
以下、啓蒙文Ver2.0
注:有意義な質問に対して煽り、1行レスで返す方が多いようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
また質問者に対するあまりにも儀礼を欠いた回答レスもお断りいたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、質問に対して有意義な答えを下さった方には
ちゃんと評価しますので安心しましょう。
0639デフォルトの名無しさん
2006/11/21(火) 11:29:370640デフォルトの名無しさん
2006/11/21(火) 11:40:39誰が誰に要求されてるんだろう?
>質問に対して有意義な答えを下さった方にはちゃんと評価しますので安心しましょう。
なんで質問してる方が偉そうなんだよ。
「初心者」ってのは「(日本語の使い方が)初心者」ってことなんだろうな。
0641デフォルトの名無しさん
2006/11/21(火) 11:43:23だ〜か〜ら〜
1行レスで
返すなって
言ってん
だろうが!
↓これも付けてね
以下、啓蒙文Ver2.0
注:有意義な質問に対して煽り、1行レスで返す方が多いようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
また質問者に対するあまりにも儀礼を欠いた回答レスもお断りいたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、質問に対して有意義な答えを下さった方には
ちゃんと評価しますので安心しましょう。
0642デフォルトの名無しさん
2006/11/21(火) 11:46:280643デフォルトの名無しさん
2006/11/21(火) 11:52:44馬から落馬すると同レベルだなw
0644デフォルトの名無しさん
2006/11/21(火) 11:54:300645デフォルトの名無しさん
2006/11/21(火) 12:00:32これからはboostなら一発でおkという場面は全部
「無いから自作しろ」と回答しよう。
0646デフォルトの名無しさん
2006/11/21(火) 13:01:58なんだってこうなるんだ……
0647デフォルトの名無しさん
2006/11/21(火) 13:59:290648デフォルトの名無しさん
2006/11/21(火) 18:10:130649デフォルトの名無しさん
2006/11/21(火) 20:34:420650デフォルトの名無しさん
2006/11/21(火) 22:12:100651デフォルトの名無しさん
2006/11/21(火) 22:52:320652デフォルトの名無しさん
2006/11/21(火) 22:54:45どうです、釣れてますかな?
0653デフォルトの名無しさん
2006/11/21(火) 23:38:220654デフォルトの名無しさん
2006/11/21(火) 23:43:570655デフォルトの名無しさん
2006/11/22(水) 00:03:17今来た俺に3行で頼む。
0656デフォルトの名無しさん
2006/11/22(水) 00:04:46へ
池
0658デフォルトの名無しさん
2006/11/22(水) 01:20:200659デフォルトの名無しさん
2006/11/22(水) 14:47:31注:有意義な質問に対して煽り、1行レスで返す方が多いようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
また質問者に対するあまりにも儀礼を欠いた回答レスもお断りいたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、質問に対して有意義な答えを下さった方には
ちゃんと評価しますので安心しましょう。
これテンプレに入れよう
0660デフォルトの名無しさん
2006/11/22(水) 14:58:56ウザ('A`)
それ答える側も全く同じなんだけど。
0661デフォルトの名無しさん
2006/11/22(水) 15:19:31もうちょっと日本語の勉強をしましょうね。
突っ込みどころが満載。
0662デフォルトの名無しさん
2006/11/22(水) 18:54:48BOOTSを語れゴラァ part2
http://pc8.2ch.net/test/read.cgi/tech/1139266461/
0663デフォルトの名無しさん
2006/11/22(水) 19:08:350664デフォルトの名無しさん
2006/11/22(水) 19:34:320665デフォルトの名無しさん
2006/11/22(水) 19:47:580666デフォルトの名無しさん
2006/11/22(水) 22:09:300667デフォルトの名無しさん
2006/11/22(水) 22:11:17生std::auto_ptr様の生ポインタ.geeeeeettttt()!!!!
0668デフォルトの名無しさん
2006/11/22(水) 23:35:030669デフォルトの名無しさん
2006/11/22(水) 23:50:25ニホンジンはドウシテイツモ、冷え込みますねッテイウカナ?
モウ十二月チカイカラ、ヒエルノアタリマエデスネ!ハハハハハ!
って隣のパキスタン人が言ってた。
0670デフォルトの名無しさん
2006/11/23(木) 00:34:260671デフォルトの名無しさん
2006/11/23(木) 00:59:250672デフォルトの名無しさん
2006/11/23(木) 09:46:00using 靴::sprits::adidas
0673デフォルトの名無しさん
2006/11/23(木) 10:12:09ネットを漂っていても、class内に直接書くものしか見ません。
=== header ===
class foo{
inline static int x2(int val);
};
=== cppfile ===
int foo::x2(int val){
return val*2;
}
とした所"inline static int x2(int)は定義されていません"とwarnigをくらいました。
0674デフォルトの名無しさん
2006/11/23(木) 10:14:370675デフォルトの名無しさん
2006/11/23(木) 10:46:200676デフォルトの名無しさん
2006/11/23(木) 13:13:10/´. _, -―-、ヽ、
./ l´[☆ィTfヘマ、 ヽ
| | |ィケリノ |ト}!l|
| _| レァ予 伝yリ| ,..、 /
| fr| 《{_丿 Ljハ‖ _,ノ/`il /
| ゞ| |、'' r-ァ ,ツ イイ´ ハ il お前らまだC++なんて化石使ってるのかよ
| | | ,フ 云'I「|{ {::::{ V リ \
|| N {`ヽー弋イノ`衣√`ヾノ \
从 |、 ハ Y.Qヘ\,イ乍}
`ヽVリ'| ! Y´ア´
,| | 「´
/ヒニリ `、
ん{,,,,'〉,、,、,、ゝ
┝━┿┥
0677デフォルトの名無しさん
2006/11/23(木) 13:23:14なぜかワラタ
0678デフォルトの名無しさん
2006/11/23(木) 13:53:110679デフォルトの名無しさん
2006/11/23(木) 13:55:29typedef struct _Vec
{
float x, y, z;
_Vec(float x=0, float y=0, float z=0)
{this->x=x;
this->y=y;
this->z=z;}
} Vec;
と言うように宣言して、
Vec v = Vec(1.0,2.0,3.0);
みたいな感じで使うと
typedef struct {
float x, y, z;
} Vec;
Vec v = {
0680デフォルトの名無しさん
2006/11/23(木) 13:57:110681679
2006/11/23(木) 13:59:11間違ってENTER押してしまいました。
Vec v = {1.0, 2.0, 3.0};
に比べてかなり速度が落ちます。
何故なのでしょうか?
operatr *等でも速度が落ちました。
よろしく御願いします。
0682デフォルトの名無しさん
2006/11/23(木) 14:02:08あと初期化リスト使え。
0683デフォルトの名無しさん
2006/11/23(木) 14:03:550684679
2006/11/23(木) 15:35:42expression templateについていろいろググってたのですが、
複雑で分からない・・・。
ヒント頂けませんか??
0685デフォルトの名無しさん
2006/11/23(木) 15:53:45expression template の前に、最適化かけて差が問題になってるかどうか確認しろ。
0686デフォルトの名無しさん
2006/11/23(木) 15:54:38× typedef struct _Vec {} Vec;
○ struct Vec {};
0687679
2006/11/23(木) 16:01:42vs2003使ってるのでReleaseではき出したところ早くなりました。
しかし、Debugモードでも早く動くようにしたいです。
>>686
実行速度は変わりませんでした。
0688デフォルトの名無しさん
2006/11/23(木) 16:04:24コンパイルオプション弄れば
0689デフォルトの名無しさん
2006/11/23(木) 16:12:55Vec v(1.0, 2.0, 3.0);だとどうなる?
0690デフォルトの名無しさん
2006/11/23(木) 16:26:26そ、それはちょっと、、、
>>689
変化有りませんでした><
0691デフォルトの名無しさん
2006/11/23(木) 16:49:54>しかし、Debugモードでも早く動くようにしたいです。
なんで?
>>コンパイルオプション弄れば
>そ、それはちょっと、、、
何が「それはちょっと」なの?意味がわからん
0692デフォルトの名無しさん
2006/11/23(木) 16:51:55float三要素の構造体にexpression templateなんか使ったら余計に遅くなるよ。
expression templateで出来る一時オブジェクトと大きさが変わらんから。
0694デフォルトの名無しさん
2006/11/23(木) 17:32:370695デフォルトの名無しさん
2006/11/23(木) 17:32:550696デフォルトの名無しさん
2006/11/23(木) 17:45:02上の質問にも答えろ低脳。
0697デフォルトの名無しさん
2006/11/23(木) 17:46:01実行速度が遅くなるよバカ
0698デフォルトの名無しさん
2006/11/23(木) 17:47:05いや、冗談だ。
0699デフォルトの名無しさん
2006/11/23(木) 17:48:560700679
2006/11/23(木) 17:54:04大量のソースをいちいちデバッグとリリースを繰り返しビルドするのは時間の無駄なんですよ、、
だから、デバッグビルドでも通常の動作をさせたいんです。
0701デフォルトの名無しさん
2006/11/23(木) 17:59:48まずデバッグビルドとリリースビルドがどう違うのか、その違いによって
それぞれどんな用途に使われるのか知ってればそんなことを望むはずはない。
0702デフォルトの名無しさん
2006/11/23(木) 18:03:19んなことできるんだったら「デバッグビルド」なんて存在しねーんだよ。
もうすれ違いだから出て行け。
0703デフォルトの名無しさん
2006/11/23(木) 18:06:57サイズ固定のVectorじゃなければな
0704デフォルトの名無しさん
2006/11/23(木) 18:26:360705679
2006/11/23(木) 18:47:130706デフォルトの名無しさん
2006/11/23(木) 18:58:590707デフォルトの名無しさん
2006/11/23(木) 19:03:350708679
2006/11/23(木) 19:51:250709デフォルトの名無しさん
2006/11/23(木) 19:55:070710デフォルトの名無しさん
2006/11/23(木) 20:02:17してないお
0711679
2006/11/23(木) 20:03:170712初心者
2006/11/23(木) 20:57:20以下のレスについては、必ずこの啓蒙文を付け加えましょう。
また、もし啓蒙文がない場合は、暗黙のうちにこの啓蒙文が了承されていると
みなされます。
以下、啓蒙文Ver3.0
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答を
するように。
0713デフォルトの名無しさん
2006/11/23(木) 20:58:390714デフォルトの名無しさん
2006/11/23(木) 21:06:25('A`)STLスレにまで感染したらどうする気だよ
0715デフォルトの名無しさん
2006/11/23(木) 21:08:13うるせー朝鮮人
祖国に帰れ!
0716デフォルトの名無しさん
2006/11/23(木) 21:15:070717679
2006/11/23(木) 21:27:170718デフォルトの名無しさん
2006/11/23(木) 21:27:550719デフォルトの名無しさん
2006/11/23(木) 21:28:090721デフォルトの名無しさん
2006/11/23(木) 23:40:150722デフォルトの名無しさん
2006/11/24(金) 02:49:360723デフォルトの名無しさん
2006/11/24(金) 02:51:05どのあたり?
俺にはkusak○b○っぽい書き込みは見当たらないが…
0724デフォルトの名無しさん
2006/11/24(金) 09:38:53そういうことにしたいのですね:)
0725デフォルトの名無しさん
2006/11/24(金) 11:19:51クラスなら C
メンバ変数なら m_
ポインタなら P
文字列なら状況により str
って付けてるけど、構造体は S だと文字列みたいだから、
とりあえず全て大文字にしているけど、おもいらどうしてる?
0726デフォルトの名無しさん
2006/11/24(金) 11:24:19すれ違い。↓逝け。
コーディング規約 第2条
http://pc8.2ch.net/test/read.cgi/tech/1068752664/
0727デフォルトの名無しさん
2006/11/24(金) 12:08:59逝ってくる
0728デフォルトの名無しさん
2006/11/24(金) 12:15:57そんなものつけない。
0729デフォルトの名無しさん
2006/11/24(金) 16:19:56long longって32ビットマシンだと32ビットのintとして振舞うんでしょうか?
遅くても64ビットintとして動いてくれたりはしないのですか?
0730デフォルトの名無しさん
2006/11/24(金) 16:21:57あり得ないだろ
0731デフォルトの名無しさん
2006/11/24(金) 16:42:520732デフォルトの名無しさん
2006/11/24(金) 20:15:130733デフォルトの名無しさん
2006/11/24(金) 21:15:050734デフォルトの名無しさん
2006/11/24(金) 22:14:11int a;
int b;
} INT_STRUCT;
というのと、
typedef struct _int_struct {
int a;
int b;
} INT_STRUCT;
の、どちらが良いのでしょうか。
後者を使うメリットはございますでしょうか。
0735デフォルトの名無しさん
2006/11/24(金) 22:25:03あえて
struct _int_struct hoge;
と宣言したい時に使え
0736デフォルトの名無しさん
2006/11/24(金) 22:28:30それ長くて美しくない、却下
0737デフォルトの名無しさん
2006/11/24(金) 22:29:55メリットはない、プログラミング言語Cによれば
古いバージョンの互換性を保つために残してあるが使うべきではないと書いてある。
0738デフォルトの名無しさん
2006/11/24(金) 22:59:110739デフォルトの名無しさん
2006/11/24(金) 23:01:28>>738 スレ違いだった、、、Cです。
でわでわ!
0740デフォルトの名無しさん
2006/11/25(土) 00:54:46最近boostと同じ名前をつけるようにしてる
0741デフォルトの名無しさん
2006/11/25(土) 01:08:42typedef struct _int_struct {
int a;
struct _int_struct *next;
} INT_STRUCT;
0742デフォルトの名無しさん
2006/11/25(土) 01:15:13struct INT_STRUCT {
int a;
struct INT_STRUCT* next;
};
で十分
0743デフォルトの名無しさん
2006/11/25(土) 01:15:42スレ違いに亀レスつけてんじゃねーよ。
あと、タグ名に奇怪な名前使うのは即刻やめていただきたい。
0744デフォルトの名無しさん
2006/11/25(土) 01:16:11C++ではnextの部分のstructも不要だっ!!!!
0745デフォルトの名無しさん
2006/11/25(土) 02:03:16そうだったのか、
でも自分は、PODな(あるいはそれに近い、メンバだけの)structには、
慣れで、そういう風に書くだろうけど。
0746デフォルトの名無しさん
2006/11/25(土) 02:17:020747デフォルトの名無しさん
2006/11/25(土) 02:26:49で、C++では typedef, struct をつけるとエラーになるの?
0748デフォルトの名無しさん
2006/11/25(土) 02:28:060749デフォルトの名無しさん
2006/11/25(土) 02:49:44注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答を
するように。
0750デフォルトの名無しさん
2006/11/25(土) 02:51:20でも付けないほうがすっきりしてるね。今後 C++流に簡潔に書くことにするよ。
他の処理系ではどうなのかな?
0751デフォルトの名無しさん
2006/11/25(土) 07:03:16つまり、必要な処理系があればそれはc++ではないということだ(ぉぃ
0752デフォルトの名無しさん
2006/11/25(土) 10:05:08必要かどうかを聞いているのではなく、つけても問題ないかということじゃない?
つけても問題ないがつける意味は無い。
0753デフォルトの名無しさん
2006/11/25(土) 12:06:37何もしないNULLstreamがほしいんですけど。。。
0754デフォルトの名無しさん
2006/11/25(土) 12:11:36どこかにあったからそれ参考にするとか
いくつかのメンバを実装するだけだから難しくないかと
0755デフォルトの名無しさん
2006/11/25(土) 12:12:030756753
2006/11/25(土) 13:12:33なぜほしいかというと、クラスにiostreamのポインタを持たせて、コンソールにだしたりファイルにだしたりしたかったからです。
>>754
なるほど!できるかなー。
ちょっと探してみます。
>>755
いやー、ウインドウズなんですよ。提案は感謝。
0757デフォルトの名無しさん
2006/11/25(土) 14:04:33つ iostreamで使えるかしらんが、nullデバイスはあるぞ。
echo "hoge" > nul
('A`) さて、javaにもどるか
0758デフォルトの名無しさん
2006/11/25(土) 14:08:32('A`) ええのあったで
ttp://www.kab-studio.biz/Programing/Codian/iostream/06.html
0759デフォルトの名無しさん
2006/11/25(土) 14:37:38もし Boost を許容できるなら Boost.Iostreams を使って以下のようにできる
boost::iostreams::null_sink snk;
boost::iostreams::stream< null_sink > os( snk );
os << "hoge";
0760デフォルトの名無しさん
2006/11/25(土) 14:59:55Windowsなら>>757というわけでnulが/dev/nullに相当する。
0761デフォルトの名無しさん
2006/11/25(土) 15:04:53およ、そんなことできたんですね。何に使うんだろ??
>>758
よさげですね。ちょっと読んでみます。
>>759
Boostは見るたびにスゲーっておもうんですが、なんせ範囲がでかいもんだから、僕の許容量こえてるんですよね。TT
次期標準になってコンパイラについてくるようになったら覚えようと思ってます。
今回は見送りますが、提案には非常に感謝。
0762デフォルトの名無しさん
2006/11/25(土) 15:15:43用途が良くわからないけど便利なんですかね。
--
うんで、
>>758を流して読んでみたんですけど、streambufをがりがり書くかiostramに委譲すればできそうな感じですね。
ご協力感謝!
0763デフォルトの名無しさん
2006/11/25(土) 16:15:02コマンドラインレベルで作業しない人にはイメージが伝わりにくいけどこんなとき便利。
・余計な出力は見たくない
make > /dev/null
・空の入力を与えたい
awk 'BEGIN {print sqrt(2);}' /dev/null
0764デフォルトの名無しさん
2006/11/25(土) 17:00:280765デフォルトの名無しさん
2006/11/25(土) 17:17:33std::ostream nullstream(&g_dummybuf);
俺、こんなんでやってた。もうどうでもいいね。じゃぁ
0766デフォルトの名無しさん
2006/11/25(土) 18:13:45多すぎです。
取りあえず Exceptional C++ は読んだんだけど、次に読むとしたら
何がお薦め?
0767デフォルトの名無しさん
2006/11/25(土) 18:18:140768デフォルトの名無しさん
2006/11/25(土) 18:47:41なるほど。 template 周りも一冊読んでおくべきかな。
あんまり深入りする気はないけど、最近の変態 C++er のコードを読める程度には
なりたいしなぁ。 C++ Templates 良さげだけど…分厚いな…。
落し穴に嵌まらないためのノウハウ的な方向は Exceptional C++ で
足りてるのかな。なんかあれ読んだら無性に不安になって…。
0769デフォルトの名無しさん
2006/11/25(土) 23:33:54重複は気にしない。重要だから繰り返されているということですな。
0770デフォルトの名無しさん
2006/11/25(土) 23:36:070771デフォルトの名無しさん
2006/11/25(土) 23:53:110772デフォルトの名無しさん
2006/11/26(日) 01:01:23実際にどこか1ヶ所にみんなが集まっているわけではないだろうけどね。
0773デフォルトの名無しさん
2006/11/26(日) 01:45:040774デフォルトの名無しさん
2006/11/26(日) 01:57:24hoge(aaa, "aaa"); を、HOGE(aaa) か HOGE("aaa") みたいに、
aaa を1度しか書かなくていいようにマクロ化したいんだけど、無理かな?
文字列連結とか # 連結マクロとか考えたけど思いつかず・・・
0775デフォルトの名無しさん
2006/11/26(日) 01:58:58#define HOGE(expr) hoge(expr, #expr)
これじゃ駄目なのか?
C++ 関係ないな。
0776デフォルトの名無しさん
2006/11/26(日) 02:00:280777デフォルトの名無しさん
2006/11/26(日) 02:01:27それはこれで済む話か?
0778デフォルトの名無しさん
2006/11/26(日) 02:05:070779774
2006/11/26(日) 02:09:45ありがとうございました。
連結マクロでぐぐってもいいのが見つからなかったんですが、
これ何か名前ついていますか?
0780デフォルトの名無しさん
2006/11/26(日) 02:21:31# は連結じゃねーしマクロじゃない。文字列化演算子。
0781デフォルトの名無しさん
2006/11/26(日) 02:25:06そんなに好きならLispさんちの子になっていいんだよ
0782デフォルトの名無しさん
2006/11/26(日) 02:29:18この流れに和んだ
0783774
2006/11/26(日) 02:37:43ありがとうございます、文字列化演算子#、トークン連結演算子## が見つかりました。
デバッグなどで、列挙体を表示するのに使いたかったのです。
#define HOGE(word) E_##word
enum TYPE {
HOGE(aaa),
HOGE(bbb),
};
#undef HOGE
#define HOGE(word) #word
static char* COMMAND[] =
{
HOGE(aaa),
HOGE(bbb),
};
こんな感じにやっといて、
HOGE(aaa) HOGE(bbb) の部分だけ別ファイルにして #include で取り込めばいいかなーと。
そうすれば、COMMAND[E_aaa] で "aaa" が取り出せるって寸法です。
後はスクリプトなどで、コマンド ⇔ ID の変換とか。
0784デフォルトの名無しさん
2006/11/26(日) 02:41:44常套手段だ。
× static char* COMMAND[] =
○ static char const* cons COMMAND[] =
0785デフォルトの名無しさん
2006/11/26(日) 02:42:310786デフォルトの名無しさん
2006/11/26(日) 09:02:280787デフォルトの名無しさん
2006/11/26(日) 09:16:020788デフォルトの名無しさん
2006/11/26(日) 09:30:17More Effective C++
Effective STL
は必ず読むべきです。読みやすいですし。
以上を読んで理解ししたら、
C++ Coding Standards
を手元に置いといて眺めてください。
余力があれば、
More Exceptional C++
Exceptional C++ Style
C++ Templates
この他は読む必要ない。
0789デフォルトの名無しさん
2006/11/26(日) 10:26:190790デフォルトの名無しさん
2006/11/26(日) 10:40:350791デフォルトの名無しさん
2006/11/26(日) 10:54:320793デフォルトの名無しさん
2006/11/26(日) 17:27:19できれば日本語のほうがいいのですが、どうでしょう
0794デフォルトの名無しさん
2006/11/26(日) 20:01:440795デフォルトの名無しさん
2006/11/26(日) 22:22:43クラスのインライン関数についての質問なんです。
関数を頻繁に使う場合はクラスの定義の中に書くって参考書には書いてたんですけど、
実際どれくらいの頻度ならインラインを使うべきなんでしょうか?
また、頻繁に使うけど中でのループする処理が多い場合はインラインを使わない方がいいんでしょうか?
初歩的質問だとは思いますが、よろしくお願いします。
0796デフォルトの名無しさん
2006/11/26(日) 22:31:47今は「気にするな」ということらしい。
inline指定の有無にかかわらず、コンパイラは勝手にインラインにしたりしなかったりするんだって。
0797デフォルトの名無しさん
2006/11/26(日) 22:32:55クラス定義外に書いても inline とつけた定義をヘッダに置けば
インライン関数にできる。分けて書いたほうがクラス定義がすっきりする。
インラインにしたい場合はヘッダに実装を晒さないといけないんで、
実測に基づいて効果があると確認できたときだけにしておいたほうがいいと思う。
0798デフォルトの名無しさん
2006/11/26(日) 22:38:09気にしないことを勧める。
VC7以降は「リンク時コード生成」というのがあって、
パフォーマンス向上のためのインライン宣言が無駄になる。
gccにはまだないけど、まあそのうちはいるでしょ。
むしろ、見易さを優先したほうがいい。
たとえば、メンバ変数の単純なgetterをインラインで書いておくと、
.h/.cppを往復する回数が減る。
0799デフォルトの名無しさん
2006/11/26(日) 23:05:46ありがとうございました!
勉強になりました!!
0800デフォルトの名無しさん
2006/11/26(日) 23:07:400801デフォルトの名無しさん
2006/11/26(日) 23:19:12実装が単純な getter であっても、インターフェースと混ぜてしまうのには
抵抗があるな。その getter が単純な変数の読み取りであることをユーザーに
認識させてしまって良いのかどうかによって、答えは変わるだろう。
0802デフォルトの名無しさん
2006/11/26(日) 23:21:260803デフォルトの名無しさん
2006/11/27(月) 02:45:480804デフォルトの名無しさん
2006/11/27(月) 04:30:49整数:a = 10; b = 20; を 文字列に変えて結合したいんですけど、
このときに、文字列はstring型で扱いたいんですが、どうしたらいいでしょうか?
char型は使いません。
0805デフォルトの名無しさん
2006/11/27(月) 04:33:000806デフォルトの名無しさん
2006/11/27(月) 04:33:250807デフォルトの名無しさん
2006/11/27(月) 04:33:25toString してたせばいいんじゃないんだっけ?
0808デフォルトの名無しさん
2006/11/27(月) 04:55:28boost::formatがまさにそれだが。
0809デフォルトの名無しさん
2006/11/27(月) 05:05:02ありがとうございます。
いくつもあるとは・・・ちょっと驚きですw
0810デフォルトの名無しさん
2006/11/27(月) 05:25:010811デフォルトの名無しさん
2006/11/27(月) 06:25:59stringstreamやsprintfは標準だけどな。
0812デフォルトの名無しさん
2006/11/27(月) 06:33:150813デフォルトの名無しさん
2006/11/27(月) 06:50:580814デフォルトの名無しさん
2006/11/27(月) 06:57:50俺様ライブラリに
toString()というのを正しいC++規格で書けば良い
というお話ですよね?
0815デフォルトの名無しさん
2006/11/27(月) 08:47:13いいたかったのだったといったのだったがそれがすでに手遅れだったので
だっふんだをしたかったのだったがそれも手遅れだったのだったのだっふんだ
と言ったのだった
0816デフォルトの名無しさん
2006/11/27(月) 14:58:10, イ)ィ -─ ──- 、ミヽ
ノ /,.-‐'"´ `ヾj ii / Λ
,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
ノ/,/ミ三ニヲ´ ゙、ノi!
{V /ミ三二,イ , -─ Yソ
レ'/三二彡イ .:ィこラ ;:こラ j{
V;;;::. ;ヲヾ!V ー '′ i ー ' ソ
Vニミ( 入 、 r j ,′
ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ
ヽ ヽ -''ニニ‐ /
| `、 ⌒ ,/
| > ---- r‐'´
ヽ_ |
ヽ _ _ 」
ウプレカス [ uBLAS ]
( 西暦一世紀前半 〜 没年不明 )
0817デフォルトの名無しさん
2006/11/27(月) 18:10:07クリップボード内のデータの履歴を取り,再利用するものを想定しています.
テキストだけでなく,画像やリンクなどを含めたデータをクリップボードから取り出し,
保存するにはどのようにしたらよいでしょうか?
0818デフォルトの名無しさん
2006/11/27(月) 18:17:46OLE使え。IDataObjectを取り出してそれを保存するんだ。
Windowsのスクラップオブジェクトもたぶんそうしている。
スレ違いだから、詳しくはよそ行け。
0819デフォルトの名無しさん
2006/11/27(月) 18:28:55WindowsってX-Windowsのことですか?
0820デフォルトの名無しさん
2006/11/27(月) 18:33:130821デフォルトの名無しさん
2006/11/27(月) 18:38:380822デフォルトの名無しさん
2006/11/27(月) 18:40:52/ \
,/ \
/ ― ― ヽ
lヽ - 、 ! , _ |
|r――-、_⊥ ,――'-、 |,-,
|::::::::::::::::/ |ヽ:::::::::::::::|-|'イ!|
ト、__,,/: |: `、__,,/ ,|ソ/
.| 、_ j| _,、 ,|-'
| /lll||||||||||l`、 ,|
`i ,|||' ̄= ̄`|||、 / ト、
「|ヽ|ll||||||||||||||||| /i |::::\
/:::::\`!!||||||||||||!!' |::::::::\
/::::::::::::::`ー-、.._ i |::::::::::::::\
/:::::::::::::::::::::::::::::::::::`ー-、. |::::::::::
ハンツキー・ロムッテロ[Handski Romtteroo]
(1955〜 アメリカ)
0823デフォルトの名無しさん
2006/11/27(月) 18:56:020824デフォルトの名無しさん
2006/11/27(月) 22:55:25doubleより大きな実数値を表せる形ってありますか?
0825デフォルトの名無しさん
2006/11/27(月) 22:58:45long double == double か long double > double かは環境依存
0826デフォルトの名無しさん
2006/11/27(月) 23:06:18それとも有効桁数が多いって意味?
0827824
2006/11/27(月) 23:22:22>>825
xp home,borland 5.5無料版です。この場合long double の方がよくなるんでしょうか?
>>826
有効桁数です。100行100列くらいの逆行列を陰解法によって解いてて
それで有効桁数がネックとなり、逆行列の精度がすこぶる悪いんです…
0828デフォルトの名無しさん
2006/11/27(月) 23:28:28100x100程度の逆行列求めるのにdoubleで足りなくなるのは演算の仕方が悪いだけ。
0829デフォルトの名無しさん
2006/11/27(月) 23:30:43ちゃんとピボット選択してるのか。
0830デフォルトの名無しさん
2006/11/27(月) 23:42:17すみません。初心者なもんで…本当にシンプルなプログラムで
何も工夫してないので計算の仕方は当然悪いっちゃ悪いですw
>>829
知りませんでした…ピボット??なんじゃそりゃ??ってことで今大至急ググった結果
http://www.isc.meiji.ac.jp/~re00108/ch6/index.html
なるホームページが出てきました。
これを読んでもう一度プログラムを書き直して見ます!
0831デフォルトの名無しさん
2006/11/28(火) 01:02:360832デフォルトの名無しさん
2006/11/28(火) 01:03:430833デフォルトの名無しさん
2006/11/28(火) 01:26:580834デフォルトの名無しさん
2006/11/28(火) 06:38:55ついでに行列式を求めてくれないんだよな。
いまいち使えん。
0835デフォルトの名無しさん
2006/11/29(水) 01:18:13例えば int 型を渡すと、4バイトそのままの形で流し込むイメージです。
出力先はファイルだったりメモリだったり色々です。
0836デフォルトの名無しさん
2006/11/29(水) 01:20:57operator<<を自分で定義すればいいだろ。
但しoperator<<(std::ostream&, int)は既に定義されているので、
ラッパークラスを作る必要はあるだろうが。
0837デフォルトの名無しさん
2006/11/29(水) 01:30:33用意されているものを使った方がいいと思ったのです。
うーん、諦めて作りますか・・・ありがとうございます。
0838デフォルトの名無しさん
2006/11/29(水) 01:31:49いけないけどな。
0839デフォルトの名無しさん
2006/11/29(水) 01:33:450840デフォルトの名無しさん
2006/11/29(水) 02:41:23std::map<string, A *> &get(){}
void set(std::map<string, A *> &m){}
こんな受け渡しでOKなのでしょうか?何故かAのポインタだけ
あってAの中身がないのですが困った助けて
0841デフォルトの名無しさん
2006/11/29(水) 03:16:18boost::ptr_map使えよ
0842デフォルトの名無しさん
2006/11/29(水) 03:17:22FuncA(){
for(...){
hoge *h;
....
}
}
もし、このhogeをループが終わってからもポインタアドレスとその中身を保存したい場合は
オブジェクトをコピーしないとダメなのでしょうか?
0843デフォルトの名無しさん
2006/11/29(水) 03:18:32アドレスをコピーしても意味がない。それはローカル変数だから
スコープを抜けると同時に消滅する。
中身はコピーしてとっておける。
0844デフォルトの名無しさん
2006/11/29(水) 03:33:16C++始めたばかりで解らないのですが
JavaみたいにClose()みたいなAPを呼んでコピーすれば
いいのでしょうか?
よろしければ、上の問題でコピーをどのように行えばいいのか
議事コード的なものを示していただけないでしょうか?
0845デフォルトの名無しさん
2006/11/29(水) 04:10:01C++にはClone()なんて気の利いた関数は用意されていないから、
自分で代入演算子やコピーコンストラクタを定義しなければならない。
もしクラスhogeにポインタを含んでいないのなら、デフォルトの代入演算子
やらコピーコンストラクタで十分。
そしてFuncA()の戻り値をhogeにすればよい。
0846デフォルトの名無しさん
2006/11/29(水) 04:24:22気になったのでやってみた。特に問題はないようだが
struct A {
void print() const {
std::cout << "A" << std::endl;
}
A(int j = 0) : i(j) {}
private:
const int i;
};
class T1 {
std::map<std::string, A*> m1;
public:
std::map<std::string, A*>& get() { return m1; }
void set(std::map<std::string, A*>& m) { m1 = m; }
};
int main()
{
T1 x;
std::map<std::string, A*> m, m2;
m["abc"] = new A(1); m["def"] = new A(2);
x.set(m);
m2 = x.get();
m2["abc"]->print(); m2["def"]->print();
}
0847デフォルトの名無しさん
2006/11/29(水) 04:26:56void print() const {
std::cout << "A" << i << std::endl;
}
0848デフォルトの名無しさん
2006/11/29(水) 09:05:03ポインタは、
FuncA(){
hoge *h;
for(...){
....
}
}
でいいけど、その指している先をどうすればいいかはそのプログラムだけでは分からない。
0849デフォルトの名無しさん
2006/11/29(水) 10:41:16大丈夫かどうかはnewしたAの寿命次第だな。
多分>>840は、コンテナをコピーした後Aがdeleteされたんだろ。
0850デフォルトの名無しさん
2006/11/29(水) 10:56:43どのような本がお薦めでしょうか?一応「独習C++」は注文しましたが…。
0851デフォルトの名無しさん
2006/11/29(水) 10:58:340852デフォルトの名無しさん
2006/11/29(水) 11:06:19それでも>>3-4を読むべきですか?
0853デフォルトの名無しさん
2006/11/29(水) 12:14:31プログラミング言語C++第3版
0854デフォルトの名無しさん
2006/11/29(水) 13:12:160855デフォルトの名無しさん
2006/11/29(水) 14:48:50独習C++を読んで、それに気付きました。独習C++って、Cを理解していることを前提に書かれていますね…。
CをやらずにC++を勉強することが出来る…というか基本的な部分も記載されているC++の本ってないでしょうか…。
「C++ ⊃ C」らしいですから、Cを勉強するってことがそのままC++の基本を勉強するってことなんでしょうけど…。
0856デフォルトの名無しさん
2006/11/29(水) 14:59:25俺Cやらずに独習C++でC++から入ったよ。
難しい事なんて何も無い。
0857デフォルトの名無しさん
2006/11/29(水) 15:07:35int main()
{
}
の「int」が何を意味しているのかも分かりませんし、
void hogehoge()
{
}
の「void」の意味も曖昧です。hogehoge(void)とか。<iostream.h>の「.h」の意味も分かりませんし。
なのでやはりCの基本も記載している本が必要だと思います。
とりあえず独習Cも注文してみました。少し慣れてきたら、プログラミング言語Cとプログラミング言語C++も手元に置くことにします。
Cの基本からC++を学べる本がありましたらご教示ください…。
0858デフォルトの名無しさん
2006/11/29(水) 15:08:07他言語で何か作れるならプログラミングの素養だけはあるって事だ。
あとは言語の仕様書(っていうとC++の場合悲鳴が上がるかもしれんくらいでかいけど)と
首っ引きで習うより慣れろでやっちまうのも手だよ。(>>853の出した書籍がそう)
0859デフォルトの名無しさん
2006/11/29(水) 15:09:240860デフォルトの名無しさん
2006/11/29(水) 15:14:37分かりました。やってみます
>>859
「型」という概念が分からないのではなくて、intやdouble、char、longなど、
出てきたことのないものを完全には把握してないということです。
各型(クラス?)の、Rubyでいうところのクラスメソッドのようなものも知りませんし…。
0861デフォルトの名無しさん
2006/11/29(水) 15:15:54しつこくレスして申し訳有りませんでした。
独習C/C++とプログラミング言語C/C++でやってみます。
0862デフォルトの名無しさん
2006/11/29(水) 15:28:08決して初心者向きの入門書とかではないぞ。
もっと噛み砕いた本はいくらでもあるし、その本読んでからC++へ行こうなんて
考えるくらいなら、はじめからストラップのハゲのC++第三版読んでも変わらない。
難易度的には大差ないし、内容としては包含されている。
独習〜は正直好みも分かれると思う。
入門書として悪い物ではないかもしれないが、読み終わってみて
自分の中に残っているものの少なさに愕然としたりもする。
アンチも多いが柴田〜の本を立ち読みしてみて、合いそうならそっちを選ぶのも有りかもしれん。
中の人がとんでもなくイタい人なんで、その辺を気にしだすとまったく読む気がなくなる本でもあるが、
入門書の類には素直な良著も多い。
0863デフォルトの名無しさん
2006/11/29(水) 15:32:400864デフォルトの名無しさん
2006/11/29(水) 15:43:48参考までに、
http://72.14.235.104/search?q=cache:Wf0hnrvG1J4J:www.ascii.co.jp/bookmart/pdf/47561/475611895X.pdf+C%2B%2B%E3%81%AE%E5%89%8D%E3%81%ABC&hl=ja&gl=jp&ct=clnk&cd=3&lr=lang_ja&client=firefox
原典では直接C++の学習を始めることを進めている。
>C++の前に C を学習する必要があるかどうかについては、未だに議論が分かれるところ
>だが、私は C++に直接行くのがベストだと確信している。
>C++が直接サポートしている高水準のテクニッ
>クの一部を知ったあとなら、C が高水準機能を持たないために必要になってくる C の難し
>い部分も学習しやすくなるだろう。
あとは、こことか
http://www.asahi-net.or.jp/~yf8k-kbys/c0.html
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html
入門はこのへんのページをさらっと回して、
>>2-3に入って、先人のソースを読み始めるのが上達の近道。
C++の前にCをやれと言う人の多くは
自分がCをもともと知っていたという主観が多分に入ってるからそんな気にすることもないと思う。
俺もCから入ったが、これからの人はむしろJavaを先にやってからC++に入ったほうが
パラダイム循環としてはわかりやすいと思うし。
C++から始めてなんら問題ないと思うよ。独習C++では読者の前提条件が違うってだけ。
0865デフォルトの名無しさん
2006/11/29(水) 15:51:060866デフォルトの名無しさん
2006/11/29(水) 15:52:40さすがにそれは無いと思う……
他の書籍ならともかく、独習C++は独習C読んでることを前提として書かれてる。
1章(C++の概要)から、いきなり
オブジェクト指向とは
CとC++の相違点(ヘッダとか名前空間とかコンソール入出力とか)
2章・3章で、すぐにクラスの説明
まあ Perl の文法知ってればあんまり問題ないだろうけど。
あとは型をちゃんと使い分けるくらい?
0867デフォルトの名無しさん
2006/11/29(水) 15:53:57必然的にメモリ周りがおかしい。穴あけ過ぎ
最近は初めての言語がjavaってのが増えてるんだろうなー
0868デフォルトの名無しさん
2006/11/29(水) 15:55:59そうでもないよ。
分からない事は断片的に現れるくらいだし、それが出てきたとしても
数分ネットで検索するか考えるかすれば簡単に読み進めれるよ。
まぁCやらずにって言っても、ネットのC言語の資料を嫌と言うほど読み漁ってたからね。
0869デフォルトの名無しさん
2006/11/29(水) 16:04:48最近読んだなんかの本に、
「Javaはハード側の問題を隠しすぎ。やるならより低級のCとかからやるべき」
って書いてあった。
それはつまり、>>867が指摘してることなのかな
いや俺もプログラム初級者だからあんまわかんないけど。
0870デフォルトの名無しさん
2006/11/29(水) 16:12:21>自分がCをもともと知っていたという主観が多分に入ってるからそんな気にすることもないと思う。
これはテンプレに入れてもいいくらいだと思う。
C++がCの「反省を踏まえた上での」スーパーセットだということを皆忘れすぎ。
Javaについては、こちらも「C++における諸々の問題点についての反省を踏まえた上での」言語なので、
ある意味退化言語に戻ってくる点については重々把握してもらっておかないと
>メモリ周りがおかしい。穴あけ過ぎ
には確実に陥るだろうなー。
そういう人にはC++/CLIとかC#って選択肢もあるとは思うけど。
0871デフォルトの名無しさん
2006/11/29(水) 16:39:46Cの学習を始める前にアセンブリ言語やれって言われてた時代と状況は変わらんってことな。
0872デフォルトの名無しさん
2006/11/29(水) 17:20:46VC2005 Expressとか落として、ぐぐりながら思考錯誤で十分。
3ヶ月もあれば基礎は理解出来るだろ。
0873デフォルトの名無しさん
2006/11/29(水) 17:26:28どの世界でもそうだが、自分がやって来た方法をそのまま押し付けることが教えることだと勘違いしてる奴多いよな。
0874デフォルトの名無しさん
2006/11/29(水) 17:59:43ARMでも読めば一週間もかからずに学べるのに、なんで三ヶ月もそんなことしなきゃならんの?
0875初心者
2006/11/29(水) 18:34:55初心者にお勧めなのはVisualC++入門等でしょう。私レベルなら1日ほどで
読み終わりますが、不慣れなあなたたちでも1ヶ月もあれば読めると思います。
その後C++の最新のバージョンであるVisualC#入門等を読むことをおすすめします。
0876デフォルトの名無しさん
2006/11/29(水) 18:42:290877デフォルトの名無しさん
2006/11/29(水) 18:47:11C#厨の言葉に惑わされてはいけません
彼らは破滅と絶望を分かち合うことを楽しんでいるのです
0878デフォルトの名無しさん
2006/11/29(水) 19:00:540879デフォルトの名無しさん
2006/11/29(水) 19:37:200880デフォルトの名無しさん
2006/11/29(水) 19:38:04ほんとにわかっていらっしゃるでしょうか?C言語+アルファ=C++言語なようにC++言語+アルファがC#というのは
常識です。あえていえばC++にはStandaad Template LibraryというVisualBasicライクな開発補助ツールが
付属する程度でしょうか。また最近はC#の更に発展としてD言語というものも開発されており、
D++、D#と今後C++は発展していくことでしょう。
注:現在、私は公私ともに多忙を極め、スレを見ることが困難な状況です。
しかしその中でも何とか時間を作り、このスレに出向いて質問をしています。
そのような貴重な質問者に対し、1行レス、煽り、罵倒で返す愚か者がいるようですが
私のような質問者がいなければそもそもあなたたちの知識をひけらかす場が
存在しないことをよく認識し、身の程をわきまえるべきであります。
よって、私のような貴重な質問者に対し、見下した回答、儀礼を欠いた回答
(例:質問してくれてありがとうございました等のお礼がない、である調で答える、
様をつけない、w等の意味不明な言葉を発する)を禁止いたします。
ましてや自分の立場もわきまえず逆にお礼を強要したり、各人の目に触れやすくなるよう
多数のレスに同様の質問をしているのを「マルチポスト」呼ばわりするような輩は
当然加害対象として私のリストに載ることになります(賢い方は意味がおわかりでしょう)
この規則は2chの精神にものっとっており、強制的に施行されます。もし違反した場合には
2ch管理人への通報、加害届けの提出、プログラムのハッキング(私には
2ch専門のハッキング部隊と契約を結んでおり、銀行の口座のハッキングから
FBIのコンピュータのハッキングまでこなす例のあれと親密な関係です)等断固たる処置
を取らせていただきます。また、形式的にはちゃんとした回答であっても、知識不足のため
不正確な知識を回答することも禁止いたします。よく考え、よく調べ、正確な回答を
するように心がけましょう。なお、当方が質問に対し多少は役に立つと判断した場合は
それなりに評価するのでご安心下さい。なお、確認はこの啓蒙文を読んでいることを
前提としており、読んでいない、理解できない等のいいわけは一切通用しません。
また、有識ある諸君は今後自分の発言に対しこの啓蒙文をコピペすることが義務になります。
0881デフォルトの名無しさん
2006/11/29(水) 19:43:210882デフォルトの名無しさん
2006/11/29(水) 20:00:31そもそも何を持ってマスターしたと言っていいのか決めようが無い罠。
0883デフォルトの名無しさん
2006/11/29(水) 20:07:57きっと、本人が「俺様はもう完璧」と思った時点。
だからマスターしているというのは大抵あてにならない。
0884デフォルトの名無しさん
2006/11/29(水) 20:12:27そういうのって中二病の症状のひとつだろ。
身に覚えがあるから恥ずかしい。
0885デフォルトの名無しさん
2006/11/29(水) 20:21:13未だに初めて知る事が年に数回あるから困る。
0886デフォルトの名無しさん
2006/11/29(水) 20:28:590887デフォルトの名無しさん
2006/11/29(水) 20:32:22それ才能無いよ。
死ねばいいのに。
0888デフォルトの名無しさん
2006/11/29(水) 20:47:15それが終わったらテンプレート行くのがいいんじゃね?
失敗しまくって無理やり覚えるならどんなルートでもいいんだろうけどな
0889デフォルトの名無しさん
2006/11/29(水) 20:48:19俺も才能ないにしても、仕事で10年ぐらい使ってても>>885でいってること分かるよ。
まあC++がどんどん変わってるってのもあるけどやっぱり奥の深い言語だ。
0890デフォルトの名無しさん
2006/11/29(水) 20:54:36仕様書読まないヒトなら、仕様の全貌が分からないのだから「大抵のことは知っている」なんて言えるわけがない。
よって>>885は嘘。
0891デフォルトの名無しさん
2006/11/29(水) 20:58:35C++の言語仕様だけならそりゃ数ヶ月触ってればほとんどわかるだろう。
だけどライブラリやらデザインパターンやらって使わなきゃ知らないままのものって
多いしね。ちょっとしたテクニックにしてもしかり。
0892デフォルトの名無しさん
2006/11/29(水) 21:01:34仕様書が分かればその言語を全て知ったことになるのかよw
激しく日曜大工プログラマだなw
0893デフォルトの名無しさん
2006/11/29(水) 21:07:14仕様書も読まないずに、単に経験が長いからってだけで
「大抵の事は知ってる」なんて言う奴がいるわけねーwってのが骨子だよ。
0894デフォルトの名無しさん
2006/11/29(水) 21:08:26それは同意だが、それって新知識が年に数回程度で済むかな。
0895デフォルトの名無しさん
2006/11/29(水) 21:13:45それなりに長いことやってたら実際に現場でばりばりコード書く時間は少なくなってくるからねぇ。
単に勉強不足になったともいうが。
0896デフォルトの名無しさん
2006/11/29(水) 21:30:140897デフォルトの名無しさん
2006/11/29(水) 21:35:390898デフォルトの名無しさん
2006/11/29(水) 22:15:24templateをこんな風に使うとsingletonができるなんて驚き
0899デフォルトの名無しさん
2006/11/29(水) 22:36:470900デフォルトの名無しさん
2006/11/29(水) 22:39:12○規格に完全に準拠したコンパイラ書いた
0901デフォルトの名無しさん
2006/11/29(水) 22:41:42惜しい
マスターする=禿げた
0902デフォルトの名無しさん
2006/11/29(水) 22:42:41templateをこんな風に使うとsingletonができるのは当然
0903デフォルトの名無しさん
2006/11/29(水) 22:43:120904デフォルトの名無しさん
2006/11/29(水) 22:58:17そのころにはC++1x位になっていると思う。
0905デフォルトの名無しさん
2006/11/29(水) 23:04:550906デフォルトの名無しさん
2006/11/29(水) 23:07:42str = L"string";
とLをつければいいみたいですが,単なる文字のときはどうすればいいですか?
wchar_t a = 'a';
wchar_t a = L'a';
どっちもコンパイルは通るみたいですが・・・
0907デフォルトの名無しさん
2006/11/29(水) 23:08:55L'a'が正しいです。
'a'は暗黙の変換が働いているだけ。たぶん'あ'などはうまくいかないでしょう。
0908デフォルトの名無しさん
2006/11/29(水) 23:15:01規格書を完全に暗記してても
変態テンプレート書けるとは限らん罠
0909デフォルトの名無しさん
2006/11/29(水) 23:19:25人が書いたものが全て理解できれば(難読化されてるものを除く)
「マスターした」と言ってもいいような気がするが・・・
0910デフォルトの名無しさん
2006/11/29(水) 23:20:49もしそうなら,マスターなんて単語いらない
0911デフォルトの名無しさん
2006/11/29(水) 23:23:35「飼い馴らす」とかいうニュアンスがあるからねぇw
0912デフォルトの名無しさん
2006/11/29(水) 23:32:20そっから先の「どれ程のものを書けるか」ってのは、
特定の言語をマスターするとかの話ではなくて
プログラミングの才能みたいなものだからなぁ・・・
0913デフォルトの名無しさん
2006/11/29(水) 23:52:45フォースとか使えるようになるぜきっと。
0914デフォルトの名無しさん
2006/11/30(木) 00:04:290915デフォルトの名無しさん
2006/11/30(木) 00:25:470916デフォルトの名無しさん
2006/11/30(木) 03:06:14俺様定義や言葉尻に関するディスカッションになると元気だよね。
敷居が低くて、各人のレベルが曖昧にしか見えてこないテーマには
すぐ飛びつくからわかりやすいw
0917デフォルトの名無しさん
2006/11/30(木) 03:53:340918デフォルトの名無しさん
2006/11/30(木) 04:00:510919デフォルトの名無しさん
2006/11/30(木) 04:34:480920デフォルトの名無しさん
2006/11/30(木) 04:44:530921デフォルトの名無しさん
2006/11/30(木) 04:45:580922デフォルトの名無しさん
2006/11/30(木) 06:38:10C#厨は最初からお呼びでないことをうっかり忘れていた。
0923デフォルトの名無しさん
2006/11/30(木) 06:53:44うっかりじゃなくてしっかりだろ
0924デフォルトの名無しさん
2006/11/30(木) 07:19:33しっかりじゃなくてちゃっかりだろ
0925デフォルトの名無しさん
2006/11/30(木) 08:32:57ヲナニーのやり過ぎだ(;´Д`)ハァハァ
0926デフォルトの名無しさん
2006/11/30(木) 08:50:180927デフォルトの名無しさん
2006/11/30(木) 08:51:16今でもマイナー/字句修正提案が行われているくらいなのに。
http://www.open-std.org/jtc1/sc22/wg21/のpaper読んだことあるヤツなら、
>>891なんてこと言えるわけがない。
0928デフォルトの名無しさん
2006/11/30(木) 08:54:020929デフォルトの名無しさん
2006/11/30(木) 09:12:440930デフォルトの名無しさん
2006/11/30(木) 11:38:07言いたそうなやつ。見てて痛い。
0931デフォルトの名無しさん
2006/11/30(木) 12:12:33「完全」の意味がよくわからないけど、
規格書を読んで理解してる人がいるからこそ、
修正の提案がなされたり議論されたりされてるんじゃない?
0932デフォルトの名無しさん
2006/11/30(木) 12:29:32じゃない。
0933デフォルトの名無しさん
2006/11/30(木) 12:33:30「読んでないけど捏造に決まってる!修正汁!謝罪と賠償を」とか
「読んでも全く意味がわからないけどこういう意味に決まってる!修正しろ!」とか
言ってるわけか。病んでるな。
0934デフォルトの名無しさん
2006/11/30(木) 12:44:43そっくりそのまま>>933にお返しする
特に「読んでも全く(ry」
0935デフォルトの名無しさん
2006/11/30(木) 12:49:25私にはスルー力がありません><
0936デフォルトの名無しさん
2006/11/30(木) 12:52:33全部理解しないと使えないってのはむしろ言語としての欠陥かと。
0937デフォルトの名無しさん
2006/11/30(木) 12:58:18はぁ?お前が不勉強なだけだろうが。規格ってのは最低限度の知識なんだよ。
趣味でHelloWarld(笑)やってるぐらいならいいが>>927も読んでないような奴は
プログラマと自称するべきじゃないな。
0938デフォルトの名無しさん
2006/11/30(木) 13:01:52もちろん参照頻度は少しずつ減っていくけどね。
0939デフォルトの名無しさん
2006/11/30(木) 13:02:540940デフォルトの名無しさん
2006/11/30(木) 13:07:36+ +
∧_∧ +
(0゚・∀・) ワクワクテカテカ
+. (0゚∪ ∪ +
と__)__)
0941デフォルトの名無しさん
2006/11/30(木) 13:13:52俺様定義や言葉尻に関するディスカッションになると元気だよね。
敷居が低くて、各人のレベルが曖昧にしか見えてこないテーマには
すぐ飛びつくからわかりやすいw
0942デフォルトの名無しさん
2006/11/30(木) 13:18:010943デフォルトの名無しさん
2006/11/30(木) 13:25:210944デフォルトの名無しさん
2006/11/30(木) 13:27:56燃料投入乙
0945デフォルトの名無しさん
2006/11/30(木) 15:28:32ちんこすうに見えた。
ここの人たちは変なことばっかり言うって先入観でもあるんかな。
ちんすこうはうまいね。
味の想像は付くけど今度牛乳と一緒に試してみる。
0946デフォルトの名無しさん
2006/11/30(木) 15:37:120947デフォルトの名無しさん
2006/11/30(木) 16:05:150948デフォルトの名無しさん
2006/11/30(木) 16:32:520949デフォルトの名無しさん
2006/11/30(木) 17:15:220950デフォルトの名無しさん
2006/11/30(木) 19:16:19「プログラミングなんていくら上手くても無駄、言語ヲタ脂肪wwww」
とかやたら必死になって力説する理由が分かるスレですね
0951デフォルトの名無しさん
2006/11/30(木) 19:18:23プログラミングなんていくら上手くても無駄、言語ヲタ脂肪wwww
0952デフォルトの名無しさん
2006/11/30(木) 19:55:270953デフォルトの名無しさん
2006/11/30(木) 20:44:38「大学で数学ちゃんと習ってデスマーチと縁の無い職場に行くのが勝ち組」
が根拠らしい。
0954デフォルトの名無しさん
2006/11/30(木) 20:49:000955デフォルトの名無しさん
2006/11/30(木) 21:13:38スレ違い。だけど誘導先が見当たらないんで答えてしまう。
昔はシングルスレッド用とマルチスレッド用とをオプションで選択できたけど、
今はマルチスレッド用しかなくなってる。いちおうマルチスレッドに対応したもの
ってことになってるから、ほぼ問題ないと思われる。
0956デフォルトの名無しさん
2006/11/30(木) 21:20:120957デフォルトの名無しさん
2006/11/30(木) 21:40:30言語オタクはマジキモいから早く死んでね。
でも家畜さんが居なくなると困るから、奴隷のように働くしか道が残ってないかわいそうな人は死なないでね。
0958デフォルトの名無しさん
2006/11/30(木) 21:45:030959デフォルトの名無しさん
2006/11/30(木) 21:58:51BoostだのSTLだの偉そうにしゃべりやがってオタクがwwwww
まあたまにはよくこんなコードかけるなあって感心することもあるけどさ
正直難しいよね。
俺なんかHello Worldがせいっぱいでさ・・・
できたらiostreamの使い方を教えていただけませんでしょうか先輩方。
0960デフォルトの名無しさん
2006/11/30(木) 22:02:160961デフォルトの名無しさん
2006/11/30(木) 22:59:030962デフォルトの名無しさん
2006/11/30(木) 23:57:53libにしたのですが、このlibを呼び出そうとすると
mallocが見つかりませんなど、Cの関数の呼び出し部分が
参照できないようです。
C++のプログラムの中にCの関数を呼び出す記述が含まれる場合に
このソースをlibにする場合には他に何をすればよいのでしょうか?
0963デフォルトの名無しさん
2006/12/01(金) 00:01:37extern "C" が抜けてるんじゃない?
コンパイラ付属の stdlib.h を使えば malloc() では問題ないはずなんだが。
0964デフォルトの名無しさん
2006/12/01(金) 00:41:03externCは
char *hoge = malloc()ってな感じで使ってる場所でexternすればいいの?
組み込み系でなんかライブラリ標準じゃないのがちらほら.....
0965デフォルトの名無しさん
2006/12/01(金) 00:51:490966デフォルトの名無しさん
2006/12/01(金) 01:11:050967デフォルトの名無しさん
2006/12/01(金) 01:16:370968デフォルトの名無しさん
2006/12/01(金) 01:18:17そうなんだよね。知っている人同士の会話なら問題ないんだけど、
職場で使うと変に誤解されそうで口にできない。
まあ使う機会なんてほとんどないんだけど。
0969デフォルトの名無しさん
2006/12/01(金) 01:26:040970デフォルトの名無しさん
2006/12/01(金) 01:41:070971デフォルトの名無しさん
2006/12/01(金) 01:44:01たしかに、音だけ聞いたら分からんな。
あと、プロセスを殺すとか、死んでとか。
つい電車の中で同僚と話してしまったことがある。
0972デフォルトの名無しさん
2006/12/01(金) 01:46:51>>971「で、そしたら(プロセスを)殺して(kill関数)、返り値が無ければ(ゼロであれば)、成功だな」
0973デフォルトの名無しさん
2006/12/01(金) 02:01:340974デフォルトの名無しさん
2006/12/01(金) 02:31:590975デフォルトの名無しさん
2006/12/01(金) 06:25:55Cの標準関数の場合は、ファイルの終わりにSEEKして位置情報取得すればいいんですけど。
fstream::size()みたいなメソッドがあれば一番なんですけどねぇ…
0976デフォルトの名無しさん
2006/12/01(金) 06:35:54ファイルの終わりにseekして位置情報を取得する
0977デフォルトの名無しさん
2006/12/01(金) 08:17:200978デフォルトの名無しさん
2006/12/01(金) 08:21:06でもなんでC/C++の場合ってことごとくそれ系の関数/メソッドが無いんでしょうか?
何か、予め実装しておくと不都合な事でもあるんでしょうかねぇ…
io.hには_filelength()ってのがありましたけど…
0979デフォルトの名無しさん
2006/12/01(金) 08:32:20バイナリファイルをバイト単位で管理しない(できない)環境とかね。
(バイナリファイルでは書き込んだ終わりに余計なヌル文字がついていることがあってもよいというような記載もCにはあったはず)
Boostには、boost::filesystem::file_sizeという正にファイルの大きさを返す関数がある。
0980デフォルトの名無しさん
2006/12/01(金) 08:47:12なんで、実際にファイルのケツまで読んでEOFを確認しないと正確なファイルサイズがわからなかった。
0981デフォルトの名無しさん
2006/12/01(金) 08:50:00入力中にサイズが変わるかもしれないし、そもそも動的な入力デバイスかも知れん。
0982デフォルトの名無しさん
2006/12/01(金) 09:03:09まぁBoostに関数があるんならいいや。
0983デフォルトの名無しさん
2006/12/01(金) 10:15:30管理してないのではなくて、
バイト単位ではなく、ブロック単位の管理だった。
Text fileはそれでは不便なので、最後にCtrl-Zを置くことでバイト単位管理。
これがstdioのtext modeとbinary modeの由来の一つ。
CP/M上のstdioは、text modeでCtrl-Zを見たらEOFを返す。
binary modeはそうではない。
WindowsもCP/M互換で出発したのでこのCtrl-Zの扱いを引き継いでます。
上のような関係でiostreamにもその名残りが。
0984デフォルトの名無しさん
2006/12/01(金) 11:24:49よくわからんけど、なんであんなインデントめちゃくちゃなの?
嫌がらせ?気持ち悪すぎて吐き気して来たんだけど…
まったく読めない…
0985デフォルトの名無しさん
2006/12/01(金) 11:28:39元のソースからVC++6用に機械的にコンバートされたものとか
0986デフォルトの名無しさん
2006/12/01(金) 11:55:11bool _Lt(const _Myt& _X) const
{return (lexicographical_compare(begin(), end(),
_X.begin(), _X.end())); }
void swap(_Myt& _X)
{if (allocator == _X.allocator)
{std::swap(_First, _X._First);
std::swap(_Last, _X._Last);
std::swap(_End, _X._End); }
else
{_Myt _Ts = *this; *this = _X, _X = _Ts; }}
friend void swap(_Myt& _X, _Myt& _Y)
{_X.swap(_Y); }
protected:
void _Destroy(iterator _F, iterator _L)
{for (; _F != _L; ++_F)
allocator.destroy(_F); }
iterator _Ucopy(const_iterator _F, const_iterator _L,
iterator _P)
{for (; _F != _L; ++_P, ++_F)
allocator.construct(_P, *_F);
return (_P); }
void _Ufill(iterator _F, size_type _N, const _Ty &_X)
{for (; 0 < _N; --_N, ++_F)
allocator.construct(_F, _X); }
void _Xran() const
{_THROW(out_of_range, "invalid vector<T> subscript"); }
_A allocator;
iterator _First, _Last, _End;
};
0987デフォルトの名無しさん
2006/12/01(金) 11:55:160988デフォルトの名無しさん
2006/12/01(金) 11:57:280989デフォルトの名無しさん
2006/12/01(金) 12:09:52まあ他のDLLファイルもソースコードは似たような感じなんだろうけど
0990デフォルトの名無しさん
2006/12/01(金) 12:21:14彼は雑誌に良くコードを出すし、STLのソース本も出しているから、
行数が少なくてすむスタイルを好むんだと思う。
コーディングスタイルのスレがあるから続きはそっちで。
0991デフォルトの名無しさん
2006/12/01(金) 13:14:43になってたからそうみたい。
0992デフォルトの名無しさん
2006/12/01(金) 13:27:02↓よろしく
0993デフォルトの名無しさん
2006/12/01(金) 13:37:030994デフォルトの名無しさん
2006/12/01(金) 13:47:530995デフォルトの名無しさん
2006/12/01(金) 14:32:23C++相談室 part55
http://pc8.2ch.net/test/read.cgi/tech/1164951094/
0996デフォルトの名無しさん
2006/12/01(金) 14:38:460997デフォルトの名無しさん
2006/12/01(金) 15:20:030998デフォルトの名無しさん
2006/12/01(金) 15:21:30埋めよう
0999デフォルトの名無しさん
2006/12/01(金) 15:22:071000デフォルトの名無しさん
2006/12/01(金) 15:22:4210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。