C++相談室 part53
レス数が1000を超えています。これ以上書き込みはできません。
0001(σ´∀`)σ
2006/09/27(水) 15:56:21ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
テンプレその他 >>1-15 付近参照
前スレ
C++相談室 part52
http://pc8.2ch.net/test/read.cgi/tech/1156525695/
0002デフォルトの名無しさん
2006/09/27(水) 15:59:42[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より新しい)ドラフトがダウンロードできる。
0003デフォルトの名無しさん
2006/09/27(水) 16:00:58amazon.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/
C++ Coding Standards
ttp://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716860/ (翻訳)
0004デフォルトの名無しさん
2006/09/27(水) 16:02:03Effective 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/
0005デフォルトの名無しさん
2006/09/27(水) 16:03:12[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
0006デフォルトの名無しさん
2006/09/27(水) 16:04:18フッフー
0007デフォルトの名無しさん
2006/09/27(水) 16:04:430008デフォルトの名無しさん
2006/09/27(水) 16:04:572 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
0009デフォルトの名無しさん
2006/09/27(水) 16:05:2817 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/
0010デフォルトの名無しさん
2006/09/27(水) 16:06:0532 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/
0011デフォルトの名無しさん
2006/09/27(水) 16:06:4947 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/
■関連スレ■
多すぎ。とりあえずスレタイ C++ で検索して。
以下、スレタイで見つからなさそうな関連スレ。
Boostを語れゴラァ part2
http://pc8.2ch.net/test/read.cgi/tech/1139313234/
GCCについて part7
http://pc8.2ch.net/test/read.cgi/tech/1145357824/
0012デフォルトの名無しさん
2006/09/27(水) 16:07:250013デフォルトの名無しさん
2006/09/27(水) 16:08:49俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0014デフォルトの名無しさん
2006/09/27(水) 16:09:19CreateFileとかCopyFile等の動作チェック用です。
自分で作ってもいんですが、既に多機能な機能やグラフィカルなツールがあるかもしれないので探しています。
VisualStudioパッケージあるかもしれんがようわからん。
誰か知らないか?
0015デフォルトの名無しさん
2006/09/27(水) 16:09:200016デフォルトの名無しさん
2006/09/27(水) 16:09:52とかいうエラーが出るんだけどこれってどうすればいいの?
0017デフォルトの名無しさん
2006/09/27(水) 16:10:28後死ね。
0018デフォルトの名無しさん
2006/09/27(水) 16:11:10まぁヒントぐらいにはなったな。
うむごくろう。
0019デフォルトの名無しさん
2006/09/27(水) 16:21:290020デフォルトの名無しさん
2006/09/27(水) 16:25:570021デフォルトの名無しさん
2006/09/27(水) 17:04:18www
前スレの質問だ。
0022デフォルトの名無しさん
2006/09/27(水) 17:09:26あれ、これもしやマナー違反?
0023デフォルトの名無しさん
2006/09/27(水) 18:02:340024デフォルトの名無しさん
2006/09/27(水) 18:47:36class sub_cls : public cls
{
public:
class cls{};
};
class sub_sub_cls : public sub_cls::cls{};
int main()
{
(sub_cls::cls)sub_cls::cls();//OK
(sub_cls::cls)sub_sub_cls(); //ERROR!!
(cls)sub_sub_cls(); //OK!!
return 0;
}
002524
2006/09/27(水) 18:48:48よって変わってしまいます.
継承元に使用した場合: sub_clsの基底クラスであるcls
それ以外: sub_clsの内部クラスであるcls
このような振る舞いはC++の仕様でしょうか?
また,sub_clsの内部クラスclsを基底クラスに指定
する方法はあるのでしょうか?
環境: VC++.net2003
0026デフォルトの名無しさん
2006/09/27(水) 20:10:17/* プログラム1 */
#include<iostream>
using namespace std;
void main()
{
char C[80];
cin >> C;
}
というプログラムのcharをintに変更するとエラーが出ます。
charとintは単にバイト数が違うだけの変数だと思うのですが、
なぜエラーが出るのでしょうか?cinの仕様でしょうか?
また、上記プログラム1を
/* プログラム2 */
#include<iostream>
using namespace std;
void main()
{
char C[80];
for(int i=0; i<80; i++){
cin >> C[i];
}
}
の様に書き換えてもうまくいくと思います。
しかし、プログラム1はアドレスCを、プログラム2は配列要素C[i]を
cinに作用させていますが、なぜどちらとも問題なく動くのでしょうか?
本当に初歩的な質問だとは思いますが、どなたかよろしくお願いします。
0027デフォルトの名無しさん
2006/09/27(水) 20:13:19002826
2006/09/27(水) 21:11:01回答ありがとうございます。下の質問については理解できました。
ただ、やはりchar→intへの変換でエラーがでるプログラム1の
疑問が分かりません・・・。
よろしくお願いします。
0029デフォルトの名無しさん
2006/09/27(水) 21:15:03C++においてchar配列は文字列を格納するのに使われるので、
ストリームにおいてもchar配列は文字列の入出力のために多重定義(オーバーロード)されている。
0030デフォルトの名無しさん
2006/09/27(水) 21:18:11プログラム1を
char c[80] -> int c[80]
と変更すると、
コンパイラはoperator>>(int* rhs) を探すが、
そんなもんは無いのでエラーになる。
003126
2006/09/27(水) 21:27:39回答ありがとうございます。
つまり、charとintはバイト数の違いだけではなく、C++では、
その意味も微妙に違っていて(charは多重定義されていて)、
charは色々な意味の幅を持つので、関数cinは使えるが、
多重定義されていないintは使えないということでしょうか。
0032デフォルトの名無しさん
2006/09/27(水) 21:41:06■宣言部
template<typename T>
class A {
public:
A();
int getValue();
};
■定義部
A<T>::A() {}
int A<T>::getValue()
{
return 0;
}
このテンプレートを使ったクラスの宣言部と定義部を一つの
ファイルに書くと問題ないのですが、ヘッダファイルとcppファイルの
二つに分けて書くと、リンク時にエラーになってしまいます。
書き方が悪いと思うのですが、どこが悪いのか教えていただけないでしょうか。
0033デフォルトの名無しさん
2006/09/27(水) 21:49:48テンプレートはコンパイル時に定義が見えていないとコンパイルできないのが原則。
ただし例外がある。
1. 宣言にexportを付ける。 - 正攻法だが対応しているコンパイラは絶望的に少ない。
2. ヘッダで定義したり、定義があるcppをヘッダでインクルードしたりする。 - ようするに諦めること。おそらく最もよく取られる手段。
3. cppファイルで明示的実体化を宣言する。 - テンプレート引数を使うだけ並べなければならず面倒。
0034デフォルトの名無しさん
2006/09/27(水) 22:03:36丁寧な説明、ありがとうございました。
0035(^-^) ◆MONSOON/qo
2006/09/27(水) 22:03:51普通に配列にアクセスしていく方がやりやすいんだけど
多数で開発とかじゃないといらなくない?
0036デフォルトの名無しさん
2006/09/27(水) 22:05:06それ開発じゃなくてコーディングじゃね?
0037デフォルトの名無しさん
2006/09/27(水) 22:15:59gcc 3.4.4 ではコンパイルできたんで VC のバグなのかも。
typedef sub_cls::cls sub_cls_inner_cls; で回避できない?
0038デフォルトの名無しさん
2006/09/27(水) 23:13:47趣味で一人でやっていて、誰からも求められていないなら好きなようにやればOK
0040デフォルトの名無しさん
2006/09/28(木) 17:20:06汎用アルゴリズムに投入したいのですが、
コンテナが満たさなければならない必要十分条件は何でしょうか?
0041デフォルトの名無しさん
2006/09/28(木) 17:27:02引数なしコンストラクタ
コピーコンストラクタ
代入演算子
があればいいんじゃなかったっけ。
あと
デストラクタは例外を投げない
必要があった希ガス。
0042デフォルトの名無しさん
2006/09/28(木) 17:40:18一通り機能備えたiterator持ってればいいんじゃないか?
0043デフォルトの名無しさん
2006/09/28(木) 17:45:14それはともかく、コンテナの要件はここに書くのは面倒だから規格書見ろ。
0044デフォルトの名無しさん
2006/09/28(木) 18:14:21規格書(のドラフト)見るのが面倒だから
ここに書いたのに >_<
0045デフォルトの名無しさん
2006/09/28(木) 18:30:24イテレータが対応するコンセプトを満たしていればそれでいい。
istream_iteratorとかコンテナと関連付けられてすらいないし。
0046デフォルトの名無しさん
2006/09/28(木) 18:33:07致命的に読解力がありませんね。
0047デフォルトの名無しさん
2006/09/28(木) 18:45:19http://www.jisc.go.jp/
JIS検索→規格番号 X3014
PDFの366頁(内容の365頁) 「23. コンテナ」からコンテナの要件が書いてある。
PDFの366頁「24. 反復子」から各種の反復子(イテレータ)の要件が書いてある。
0048デフォルトの名無しさん
2006/09/28(木) 19:09:00ファイルが破損していますってメッセージが出て開けないけどどうなっとるの?
0049デフォルトの名無しさん
2006/09/28(木) 19:39:40取り出すのに便利な方法ってありますか?コピー元のイテレータ動かしながら
からの vector に push_back しまくるとかですか?
0050デフォルトの名無しさん
2006/09/28(木) 19:45:30vector<int>v;
vector<int>v2(v.begin()+10,v.begin()+20);
v2.assign(v.begin()+10,v.begin()+20);
v2.clear();
copy(v.begin()+10,v.begin()+20,back_inserter(v2));
0051デフォルトの名無しさん
2006/09/28(木) 20:50:11今、マルチバイト文字列を使用する設定であるとして、
std::string hoge = "表表表";
int pos = (int)hoge.find('\\');
とすると、「表」の2バイト目を \ と認識してしまい、期待通りの動作になりません。
この場合、あくまでマルチバイト文字列を使いたいとすれば、
find を使わずに検索を自分で実装するしかないでしょうか?
それとも、find に代わる何かいい道具はないでしょうか?
よろしくお願いします。
0052デフォルトの名無しさん
2006/09/28(木) 20:58:51自前で実装しなさい。
0054デフォルトの名無しさん
2006/09/28(木) 21:36:26事情が許す無いのはわかるけど、可能な限りwchar_tに乗り換えた方がいいよ。
マルチバイト絡みの悩み一切合財から開放される。
処理効率的には微妙でも、
MB->WCへ変換->フィルタ等で処理->MBに再変換
の流れの方がいいくらいの時も多い。
バグも減るしね…
0055デフォルトの名無しさん
2006/09/28(木) 21:50:25c_str()使えば、const char*が得られる。
VC++の_mbsstrのようなマルチバイト対応の関数が使えるときにはこういう手もなくはない。
0056デフォルトの名無しさん
2006/09/28(木) 23:11:340057デフォルトの名無しさん
2006/09/28(木) 23:45:19どんなものにも、マスターしたなんて状態は存在しない。
常に上には上があり続ける。上を目指し続けなければならない。
まあC++だとそれが精神論に聞こえないというやつも多いと思うのだが、
別にC++に限ったことではないと俺は思っているよ。
0058デフォルトの名無しさん
2006/09/29(金) 00:12:47主要なライブラリ/フレムワークに精通すればC++をマスターしたといえるかもしれない。
んな奴いねーよ。
0059デフォルトの名無しさん
2006/09/29(金) 00:16:260060デフォルトの名無しさん
2006/09/29(金) 00:28:36プロフェッサーと呼ばれるかも知れない。
0061デフォルトの名無しさん
2006/09/29(金) 02:23:19http://public.research.att.com/~bs/
0062デフォルトの名無しさん
2006/09/29(金) 02:46:22ハゲとヒゲは大事だよな。
0063デフォルトの名無しさん
2006/09/29(金) 03:02:38ピント外れの正論を一所懸命書くお前みたいな奴って
ほんと馬鹿だと思う。
0064デフォルトの名無しさん
2006/09/29(金) 07:46:470065デフォルトの名無しさん
2006/09/29(金) 18:48:42彼の名前って正しく発音するとどう読むの?
びょーん?
誰かマジレスしてくれ…
0066デフォルトの名無しさん
2006/09/29(金) 18:51:39びょーんすっぽすっぽ
0067デフォルトの名無しさん
2006/09/29(金) 18:55:500068デフォルトの名無しさん
2006/09/29(金) 19:23:160069デフォルトの名無しさん
2006/09/29(金) 21:48:100070デフォルトの名無しさん
2006/09/29(金) 22:15:37Is "bjarne" an impostor? bjarneは「インポ」スターですか?
がウケた。辞書ひいたが。
まずは、>>56は、
1mm/秒くらいのものすごい勢いで禿げ上がれ。
毛穴の量を減少させよ。
次に、インポになれたら、発音しにくい名前に改名しろ。
0071デフォルトの名無しさん
2006/09/29(金) 22:43:31実装予定もビヨーンと伸びる
毛は伸びない
0072デフォルトの名無しさん
2006/09/30(土) 02:37:490073デフォルトの名無しさん
2006/09/30(土) 02:44:330074デフォルトの名無しさん
2006/09/30(土) 02:58:350075デフォルトの名無しさん
2006/09/30(土) 03:01:56環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
0076デフォルトの名無しさん
2006/09/30(土) 03:08:41>>12-
0077デフォルトの名無しさん
2006/09/30(土) 22:33:110078デフォルトの名無しさん
2006/09/30(土) 22:51:020079デフォルトの名無しさん
2006/10/01(日) 07:36:02これが書き込まれた当時は爆笑したものだ。
0080デフォルトの名無しさん
2006/10/01(日) 08:25:05解説してくれ。
しなくてもいいが。
0081デフォルトの名無しさん
2006/10/01(日) 08:43:11こういう、何て言うのかな、リアルタイムでマジ馬鹿に遭遇したおかしさは。
0082デフォルトの名無しさん
2006/10/01(日) 09:48:50最初にやっているからもういいけど。
0083デフォルトの名無しさん
2006/10/01(日) 10:50:260084デフォルトの名無しさん
2006/10/01(日) 11:28:14まあいいか。
次の話題。
0085デフォルトの名無しさん
2006/10/01(日) 12:48:360086デフォルトの名無しさん
2006/10/01(日) 14:44:31昨日今日のことなのに、当時ってなんだよ?
お前は、そろそろ現実に戻ってきた方がいいんじゃねーの?
0087デフォルトの名無しさん
2006/10/01(日) 14:56:42お前こそ早くもどってくぁw背drftgyふじこlp;@:「
0088デフォルトの名無しさん
2006/10/01(日) 15:08:39とくに>>79は嫌われてるからな・・
0089デフォルトの名無しさん
2006/10/01(日) 15:08:57?
とりあえずこのテンプレは俺がこのスレ来たときから有るが。
って言っても日が浅いからpart46からなんだけど。
0090デフォルトの名無しさん
2006/10/01(日) 15:10:13うーん、過去スレ見てみるってのはどうかな?
0091デフォルトの名無しさん
2006/10/01(日) 15:33:170092デフォルトの名無しさん
2006/10/01(日) 15:40:270093デフォルトの名無しさん
2006/10/01(日) 17:32:060094デフォルトの名無しさん
2006/10/01(日) 17:38:17( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/←>>93
(_フ彡
0095デフォルトの名無しさん
2006/10/01(日) 18:48:240096デフォルトの名無しさん
2006/10/01(日) 18:49:320097デフォルトの名無しさん
2006/10/01(日) 18:53:530098デフォルトの名無しさん
2006/10/01(日) 18:56:53(n) 相続財産。先祖、前代などから受け継いだもの。
形容詞でも副詞でも無いのに、インヘリタンス”な”はちょっとなぁ
0099デフォルトの名無しさん
2006/10/01(日) 18:57:270100デフォルトの名無しさん
2006/10/01(日) 18:58:12http://194.79.31.249:7660
0101デフォルトの名無しさん
2006/10/01(日) 19:16:40何のためにダイナミックリンクが存在するのかと。
0102デフォルトの名無しさん
2006/10/01(日) 19:41:15何分間あるのよ。もしかして、延々と続くのか。
0103デフォルトの名無しさん
2006/10/01(日) 22:33:040104デフォルトの名無しさん
2006/10/01(日) 22:39:08男が説明してるだろ。webラジオだよ。
0105デフォルトの名無しさん
2006/10/02(月) 07:17:490106デフォルトの名無しさん
2006/10/02(月) 21:23:11関数のプロトタイプ定義で、
void hoge(void)とvoid hoge()と書くのでは同じですよね?
どちらを採用すべきでしょうか
0107デフォルトの名無しさん
2006/10/02(月) 21:26:280108デフォルトの名無しさん
2006/10/02(月) 21:34:180109デフォルトの名無しさん
2006/10/02(月) 21:38:54C++では同じ。
だがCでは微妙に意味が異なり、引数を取らないという意味になるのは前者だけ。
後者はK&R流になり、引数の指定が無いということでvoid hoge(...)と同じような扱い。
ってここC++スレか、すまん。
0110デフォルトの名無しさん
2006/10/02(月) 23:50:05キニスンナ、メンテの都合でCのコード引っ張ってくる事もあらぁな。
0111デフォルトの名無しさん
2006/10/03(火) 01:03:24毎回車輪の発明を繰り返すのなんとかならんのかなぁ
C++は遅いから使えないとかいってるし使い方しらねーだけじゃんって
いいたいが上司だしいえんし
みんなこうゆうばあいどうするのよ?
0112デフォルトの名無しさん
2006/10/03(火) 01:15:07相手の目を見て真剣に何度でも言う。
ないしは上司が直接コードのメンテをするのは勘弁してもらって
進行管理や折衝仕事に回ってもらう。
ベテランプログラマの戦力は確かに馬鹿にならないんだが、
技術の新しさを伴った勉強熱心な若い子の方が役に立つ場合は
往々にしてあるのだし。
ベテランのベテランたる所以はコーディング能力ばかりによるものでもないし、
技術は若干古いが設計は優秀って人には、より上位の工程を管理してもらった方がいい。
まあ、理想論ですけっどもね。
0113デフォルトの名無しさん
2006/10/03(火) 01:19:51知識って普通に誰でも知ってるはずなのにさもすごいだろって自慢するのは
簡便して欲しい。早いといってもアセンブラレベルで比較したりしないし
はぁやれやれ、だよ例外も何もかもつかえないからエラー処理のために
全部コールバックで受け渡すとかいうきもい設計だしまじ鬱になりそう
0114デフォルトの名無しさん
2006/10/03(火) 01:26:330115デフォルトの名無しさん
2006/10/03(火) 01:30:270116デフォルトの名無しさん
2006/10/03(火) 01:31:39俺が組み込みとかばっかりで、例外飛ばされたところで
回復させられる見込みがねえ&例外処理のコストを呑めねえって
場合が多いからってだけなのかもしれんが。
0117デフォルトの名無しさん
2006/10/03(火) 01:51:070118デフォルトの名無しさん
2006/10/03(火) 02:03:24>例外飛ばされたところで回復させられる見込みがねえ
それなら返り値でエラー返しても何も出来ないんじゃないのか?
0119デフォルトの名無しさん
2006/10/03(火) 02:12:33実際その通り。
bad_alloc飛ばされてガリガリ巻き戻って「ごめん無理」って出すか
ぬるぽ祭り開催かどっちかってなもんで。
どっちも大して変わらんので、最悪ぬるぽ祭りを後ろに控えつつ、
開催阻止運動にせいを出すと。
で、首尾よく阻止できてる限りは、そもそも例外が飛ぶシチュに縁がないと。
そんなノリですよ。
0120デフォルトの名無しさん
2006/10/03(火) 02:19:56「ごめん無理」って出るのと未定義動作とでは全然違うと思うけどなぁ。
奥底で発生したぬるぽがすぐには問題として顕在化せずに潜伏してる可能性とか最悪。
バグの原因探すのに余計な気をまわさないといけない。
0121デフォルトの名無しさん
2006/10/03(火) 02:46:31それを回復できないんじゃ、
原因を例外で飛ばす意味をはじめっからやり直した方がいいだろ。
0122デフォルトの名無しさん
2006/10/03(火) 02:50:560123デフォルトの名無しさん
2006/10/03(火) 03:00:17その程度のお前じゃ、C++例外は使いこなせないがよく分かる。
0124デフォルトの名無しさん
2006/10/03(火) 03:01:41いや、頼むから日本語でおk
0125デフォルトの名無しさん
2006/10/03(火) 03:11:430126デフォルトの名無しさん
2006/10/03(火) 03:23:21・使いこなせないが分かる
言葉って日々変化しているんだなぁw
0127デフォルトの名無しさん
2006/10/03(火) 03:59:39何をそんなに怖がってるんだ?
ところで、お前が直すとどんな日本語になるのか直してやってみてよ。
0128デフォルトの名無しさん
2006/10/03(火) 04:01:09さて、ご飯炊いて弁当詰めるか。 orz
0129デフォルトの名無しさん
2006/10/03(火) 04:01:160130デフォルトの名無しさん
2006/10/03(火) 04:18:51これも(間違いとまでは言わないまでも)変だな。
留学生か?
0131デフォルトの名無しさん
2006/10/03(火) 04:23:28おかしな日本語をおかしいと感じられない人間が氾濫のは、
おかしなC++のソースが氾濫するのよりも怖いな。
0132デフォルトの名無しさん
2006/10/03(火) 04:35:380133デフォルトの名無しさん
2006/10/03(火) 04:41:33>直してやってみてよ
これは普通に通じるし、日常使うだろ。
つまり、お前が言う「変」は感じないが?
ところでいつまでもしつこいようだが、
お前は日本語の教師か何かなのか。
0134デフォルトの名無しさん
2006/10/03(火) 04:48:49>>126は「使いこなせないのが分かる」と脱字なだけと思うけど。違うのか?
0135デフォルトの名無しさん
2006/10/03(火) 05:27:230136デフォルトの名無しさん
2006/10/03(火) 05:43:02言ってることが理解できないのだが。
誰か解読を頼む。
0137デフォルトの名無しさん
2006/10/03(火) 05:49:47言ってくれない奴って最悪だよね。
0138デフォルトの名無しさん
2006/10/03(火) 05:51:510139デフォルトの名無しさん
2006/10/03(火) 06:06:52なんでくだらない言い訳に走るんだろう。
0140デフォルトの名無しさん
2006/10/03(火) 06:23:05誰か解読してくれないか?
0141デフォルトの名無しさん
2006/10/03(火) 06:27:09このままでは、みんながお前に合わせないといけないようだな。
0142デフォルトの名無しさん
2006/10/03(火) 06:44:11日本語が変とかしつこい奴だけど、たまに現れるだよ。
これじゃ友達いないようだし、一番近づきたくないタイプだ。
こんなのに係わっても疲れるだけだぞ。
0143デフォルトの名無しさん
2006/10/03(火) 06:57:29×どの当たり
○どの辺り
0144デフォルトの名無しさん
2006/10/03(火) 07:49:58「日本語の使い方について指摘されても、決して自分の非を認めてはならん」
という遺言を忠実に守っているお祖父ちゃん想いの少年なのです
そっとしておいてあげて下さい
0145デフォルトの名無しさん
2006/10/03(火) 08:28:56俺は普通に理解できたが。
0146デフォルトの名無しさん
2006/10/03(火) 08:31:510147デフォルトの名無しさん
2006/10/03(火) 09:30:02説明ったって、一体あれのどこがわからんのかわからん。
0148デフォルトの名無しさん
2006/10/03(火) 09:38:530149デフォルトの名無しさん
2006/10/03(火) 10:02:080150デフォルトの名無しさん
2006/10/03(火) 11:20:350151デフォルトの名無しさん
2006/10/03(火) 11:24:320152デフォルトの名無しさん
2006/10/03(火) 11:32:220153デフォルトの名無しさん
2006/10/03(火) 14:19:10誤字脱字で細かい奴が一人いるんからだろ。
いつからここはオレ様専用スレになったんだろうな。
0154デフォルトの名無しさん
2006/10/03(火) 15:07:55いい加減しつけーんだよ黙れクズ
0155デフォルトの名無しさん
2006/10/03(火) 15:10:210156デフォルトの名無しさん
2006/10/03(火) 15:18:30今後は釣られんじゃねーよ!
0157デフォルトの名無しさん
2006/10/03(火) 15:37:46「原因を例外で飛ばす意味をはじめっから学び直した方がいいだろ」
と書くべきでは?
>その程度のお前じゃ、C++例外は使いこなせないがよく分かる。
「その程度のお前じゃ、C++例外は使いこなせないであろう事がよく分かる」
では?
>ところで、お前が直すとどんな日本語になるのか直してやってみてよ。
「直す」が重複。
「ところで、お前が直すとどんな日本語になるのかやってみてよ」
では?
0158デフォルトの名無しさん
2006/10/03(火) 15:53:00これは>>121だけど、>>120は修正しないのか?
>>120の方が難しそうだけどな。
0159デフォルトの名無しさん
2006/10/03(火) 15:57:580160デフォルトの名無しさん
2006/10/03(火) 16:59:290161デフォルトの名無しさん
2006/10/03(火) 17:05:59こいつずいぶんと偉そうだ。
日本語勉強中のチョンだろう。
お前は嫌われてるんだからマ板にいけ。
0162デフォルトの名無しさん
2006/10/03(火) 17:19:47/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーた朝鮮人か!!
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0163デフォルトの名無しさん
2006/10/03(火) 17:23:170164デフォルトの名無しさん
2006/10/03(火) 18:25:09その「日本語勉強中のチョン」に遠く及ばない日本語を書く連中って・・・。
0165デフォルトの名無しさん
2006/10/03(火) 18:43:16これじゃ、嫌われて当然だよな。
0166デフォルトの名無しさん
2006/10/03(火) 18:47:01日本でも嫌われて、本国にも帰れず、
確かにないするかわからない危険な奴らだ。
あー、こわい、こわいwww
0167デフォルトの名無しさん
2006/10/03(火) 19:00:21誰も乗ってくれないね。
相手を「まっとうな日本人」より下に位置づければ位置づけるほど
それ未満だった自分の位置がえらいことになってしまう構図なのに、
その状況も考えず思いつきだけで抵抗しようとするからこうなる :-)
0168デフォルトの名無しさん
2006/10/03(火) 19:10:16言語野ぶっこわれた>>121が一人で必死なだけだろ?
0169デフォルトの名無しさん
2006/10/03(火) 19:15:292世か?3世か?
それよりも、もう半島人の言い訳見るの飽きたから、
だれかC++の相談ないのか?
0170デフォルトの名無しさん
2006/10/03(火) 19:27:230171デフォルトの名無しさん
2006/10/03(火) 19:38:55×デスマーチ
○デスニート
デスマーチだったらこんなところで油売ってらんない。
0172デフォルトの名無しさん
2006/10/03(火) 20:03:54{
template<typename T> struct Inner {};
};
こういう風にテンプレート引数の名前が被ってもいいんでしょうか?
0173デフォルトの名無しさん
2006/10/03(火) 20:08:03ダメ
0174デフォルトの名無しさん
2006/10/03(火) 20:13:07慣用句「油を売る」の使い方がおかしい気がする。
0175デフォルトの名無しさん
2006/10/03(火) 21:23:56色々大変なんだなぁと思った。
間違いを認めるって、結構エネルギー要るしね。余計に敷居が高いよね。
0176デフォルトの名無しさん
2006/10/03(火) 21:24:21あるオーバーロードされた関数を呼ぶ時に
どのバージョンの関数を呼ぶようにコンパイルされたかは
どうやって調べるのがいいんでしょうか
今のところcoutして実行してみる方法しか思いつかないです・・
foo(int i){ cout << "int ver";}
foo(hoge f){ cout << "hoge ver";}
0177デフォルトの名無しさん
2006/10/03(火) 21:26:19きっと>>176のところではオーバーロードを何度も繰り返す仕様の仕様書を書いちゃったんだろうな、と
オーバーロードってバージョン管理までしてくれたっけ?
完全に別個じゃなかった?
0178デフォルトの名無しさん
2006/10/03(火) 21:27:22「打ち砕かれた妄想設定の続行」という一番痛いパターン(>>169)晒しちゃったしね
0179デフォルトの名無しさん
2006/10/03(火) 21:30:54自分の事を書きたいならチラシの裏だけにしておけ。
0180デフォルトの名無しさん
2006/10/03(火) 21:32:290181デフォルトの名無しさん
2006/10/03(火) 21:33:27C++ デマングリング
でぐぐるべし。
0182デフォルトの名無しさん
2006/10/03(火) 21:33:56× は何を言いたいのか
○ が何を言いたいのか
0183デフォルトの名無しさん
2006/10/03(火) 21:36:32× 分からないけど、誰か
○ 分からないんで、誰か
0184デフォルトの名無しさん
2006/10/03(火) 21:39:000185デフォルトの名無しさん
2006/10/03(火) 22:01:58あるライブラリを使用しているんですが、
そのライブラリがテンプレートとオーバーロードを多用していて、
ソースを一見読んだだけでは何が呼ばれるのかさっぱりでして
>>181
ぐぐって来ます
0186デフォルトの名無しさん
2006/10/03(火) 22:26:32修正してニコニコしているみたいだけど、
それはスレと関係ないことだと思ってないのかな?
ねぇ、あらし君!迷惑なんだけど止めてくれるよね。
0187デフォルトの名無しさん
2006/10/03(火) 22:43:130188デフォルトの名無しさん
2006/10/03(火) 22:57:200189デフォルトの名無しさん
2006/10/03(火) 23:01:25キモイから、早くお国に帰ってくれないかなぁ…
0190デフォルトの名無しさん
2006/10/03(火) 23:04:560191デフォルトの名無しさん
2006/10/03(火) 23:27:43「自分は在日三世だ!!」ってみんなにばれたら
次の日から白い目で見られて避けられるだろうな…
細かい事ばかり気にして神経質みたいだし、そもそも友達いないかもな。
あんまり偉そうにしていると、身辺調査されて終いにばれちまうぞ。
でも、マ板だったら仲間が多いだろ。そっちにいけよ。
0192デフォルトの名無しさん
2006/10/03(火) 23:30:27この手の話題はスルーしろよ
本当にム板はこの手の耐性が低いな
0193デフォルトの名無しさん
2006/10/03(火) 23:33:37事だろ。そんな危険な存在をかくまっておくなんて、政府はどうかしている。
とっとと絞め殺せ。
0194デフォルトの名無しさん
2006/10/03(火) 23:44:21これでも俺たちは必死に生きてるんだぞ!!
給料上げて欲しい・・・・
0195デフォルトの名無しさん
2006/10/04(水) 00:34:20けど気になるので質問するぽ
「もしもdeleteされていなければdeleteする」
というようなコードを書くことって可能でしょうか
Type* t = new Type();
delete t;
こんなコードがあり、後のほうでtが削除されたか気になって
if(t)delete t;
とやってみたけど、玉砕
NULLポインタに対してdeleteは大丈夫なようですが
delete tの後に残ったものはNULLではないのですね
何かよい方法ってあるのでしょうか
0196デフォルトの名無しさん
2006/10/04(水) 00:36:34・クラスで隠蔽する。
・newを使わない。
・deleteしたらNULLを代入しておく。
0197デフォルトの名無しさん
2006/10/04(水) 00:36:59自分でgcっぽい仕組みを作る
0198デフォルトの名無しさん
2006/10/04(水) 00:37:440199デフォルトの名無しさん
2006/10/04(水) 00:50:21deleteしたらNULLを代入しておく
コレ頂きます!感謝
クラスで隠蔽する
既にクラスなんですが、なんでクラスのポインタにしているかというと
NEWを返す関数の返り値を代入したりするからです
(今の代入演算子の実装だとデストラクタが呼ばれないようなので・・)
0200デフォルトの名無しさん
2006/10/04(水) 00:54:00どもです、ただ俺のレベルでは自作は厳しいっす;
そういう方向だと
BOOSTのスマートポインタを使えば解決しそうだけど
今作っているプログラムで必要な箇所は本当に一部なんで
今回はNULL代入で乗り切ろうと思います
0201デフォルトの名無しさん
2006/10/04(水) 00:57:010202デフォルトの名無しさん
2006/10/04(水) 00:58:18この方式だと宣言時に初期化しないものにも
全てNULLを代入しとく必要がありますね
これ、クセにしようかな
0203デフォルトの名無しさん
2006/10/04(水) 01:00:120204デフォルトの名無しさん
2006/10/04(水) 01:01:55ttp://www.ne.jp/asahi/yamashita/programming/tips/smart_ptr.html
boostのshared_ptrはCOMと同じく参照カウントなので循環参照が危険かも
ところでマクロでちょっとだけ便利にするのはダメ?
#define delcls(x) delete x; x=NULL
0205デフォルトの名無しさん
2006/10/04(水) 01:05:33だいたいdeleteが散らばってる時点で設計がめちゃめちゃへたくそ
0206デフォルトの名無しさん
2006/10/04(水) 01:07:21設計と実装を混ぜるクソ発見
0207デフォルトの名無しさん
2006/10/04(水) 01:14:02>参照カウントなので循環参照が危険かも
知りませんでした、ありがとう
auto_ptrはコンテナ使ってるから避けてます
コピーが発生すると所有権が移るんでしたよね?
マクロいいですね!思いつかなかったです
0208デフォルトの名無しさん
2006/10/04(水) 01:17:06それより例外安全性の方が大きな問題だよ。
0209デフォルトの名無しさん
2006/10/04(水) 01:17:52マクロよりtemplate関数にすべきだと思う。
設計から見直すべきだとは思うけど。
0210デフォルトの名無しさん
2006/10/04(水) 01:19:24はいはい
0211デフォルトの名無しさん
2006/10/04(水) 01:20:25すみません
ヘボなんで、まだ例外とか全然使いこなせてないっす^^;
0212デフォルトの名無しさん
2006/10/04(水) 01:25:180213デフォルトの名無しさん
2006/10/04(水) 01:29:540214デフォルトの名無しさん
2006/10/04(水) 01:31:03型安全性って全く詳しくないんだけど
型安全にするか、全く型安全にしないかの2択じゃなかったですか?
そうでないならちゃんと勉強せねば・・
今の例外の知識で作ると、中途半端になりそうなので
ちょっと怖いです、アドバイス頂いたのにすみません
>>209
どもです
テンプレートは、今は可読性もあるのでできるだけ使わないようにしてます
好きなんですけどね、テンプレート
0215デフォルトの名無しさん
2006/10/04(水) 01:32:28型安全と例外安全は別物だよ。言葉からして違うし。
0216デフォルトの名無しさん
2006/10/04(水) 01:33:42どういうことだか教えてください。
0217デフォルトの名無しさん
2006/10/04(水) 01:36:050218デフォルトの名無しさん
2006/10/04(水) 01:37:59デストラクタで
if(t)delete tをやってみたところメモリリークしてました;
うーん、やっぱり例外学ばないとダメなんかなぁorz
new/deleteだけ気をつけるとかじゃ・・ダメ?w
>>213
それは初耳ですた!
調べてみます
0219デフォルトの名無しさん
2006/10/04(水) 01:38:03どこに可読性の問題が…?
マクロを奨めないのは副作用の問題があるからだけど。
0220デフォルトの名無しさん
2006/10/04(水) 01:38:51ごめん、言ってみたかっただけ、俺もまだ読んだことない。
0221デフォルトの名無しさん
2006/10/04(水) 01:44:40趣味でコーディングするならそれでもいいんじゃないか?C++始めたばかりだろうし、少しずつ覚えていけばいい。
まあスマートポインタは簡単に使えるしわざわざ生ポインタ使う理由はないと思うが。
0222デフォルトの名無しさん
2006/10/04(水) 01:45:22あ、そうですね、プログラマのくせに適当ですません・・
>>217
他に理由をあげると、きちっと動作を理解してから使いたいってのがあります
スマートポインタにも色々あるみたいだし
>>219
そういわれるとちょっと悩みます
実際そんなにたいしたテンプレートにはならないだろうけど
他の人もこのコードにふれる可能性があるので
0223デフォルトの名無しさん
2006/10/04(水) 01:48:240224デフォルトの名無しさん
2006/10/04(水) 01:49:27持ってるけど、読んでなかった・・がーん
なんかむずそうだから後回しにしてた
うーむ、読まないと
>>221
ふむふむ
一つのカンタンな解としては
基本的には循環参照ってのだけ気をつけておいて
スマートポインタを使えばええんでしょうか
循環参照は・・これから調べますw
というかみなさんすごいいっぱいアドバイスくれて
ありがとうございます!
0225デフォルトの名無しさん
2006/10/04(水) 01:52:35ってどうなります?確保されないのか1つだけ確保されるのか・・・
0226デフォルトの名無しさん
2006/10/04(水) 01:56:540227225
2006/10/04(水) 02:01:49それとも0個確保されるというのは何か意味があるのでしょうか・・・
0228デフォルトの名無しさん
2006/10/04(水) 03:22:52実装次第では仮令0個でもdelete[]しないとメモリリークする。
0229デフォルトの名無しさん
2006/10/04(水) 03:29:320 だとコンパイルエラーになっちゃうけど、
new の場合は 0 でもいいんだっけ?
0231デフォルトの名無しさん
2006/10/04(水) 03:39:29mallocにサイズ0を渡してもNULLが返ってくるわけじゃなく、
大抵の場合newもそれに倣った動作をしてよこす。
つまりヒープの管理領域だけは消費されてしまう。
newが実値を返す以上はdelete[]しないとメモリリーク確定。
0232225
2006/10/04(水) 03:43:48deleteが必要というわけですね
0233デフォルトの名無しさん
2006/10/04(水) 03:52:48例えば、こんなコードを考えれば0個確保はできないといけない。
int main(int argc, char ** argv)
{
int a = new int[atoi(argv[1])];
delete[] a;
return 0;
}
また、delete[]を実装するためには何個確保できたか記録する必要がある。
その記録をヒープ上に確保するなら、delete[]しないとメモリリークになる。
0234デフォルトの名無しさん
2006/10/04(水) 04:11:460235デフォルトの名無しさん
2006/10/04(水) 08:20:41マジで出てるし
More Exceptional の方を先にするのが道理だと思うのだが……
0236デフォルトの名無しさん
2006/10/04(水) 10:04:27new (nothrow) だったら確保の失敗と区別が出来なくなる。
それと
_
ミ ∠_)
/
/ \\
ウイーン Γ/了 | |
ウイーン |.@| | | ガッガッガッ
| / | . 人
|/ | < >_Λ∩
_/ | //. V`Д´)/ ←>>234
(_フ彡 /
0237デフォルトの名無しさん
2006/10/04(水) 10:10:170238デフォルトの名無しさん
2006/10/04(水) 11:20:52それ以外なら何もしないといった処理はどうやればいいでしょうか?
その(floatの)クラスを継承したクラスを作ればいいような気もするんですが、
出来ればfloatの時とそうでないときで、透過的に使えるようにしたいんです。
0239デフォルトの名無しさん
2006/10/04(水) 11:23:280240デフォルトの名無しさん
2006/10/04(水) 11:35:47すいません。ちょっと調べてみた所特殊化だと
同一の処理を行う部分も書き直す必要があるのではないでしょうか。
一部のメソッドのみを書き換えたり、メソッドを追加するだけのようなコトがしたいんです。
0241デフォルトの名無しさん
2006/10/04(水) 11:41:500242デフォルトの名無しさん
2006/10/04(水) 11:53:400243デフォルトの名無しさん
2006/10/04(水) 12:10:58どういうことでしょうか?
ベースとなる汎用のクラスFooがあるときに、
Foo<double>で変更部分のみ記述したら
変更部分以外は無かったことにされました。
0244デフォルトの名無しさん
2006/10/04(水) 12:13:12などの下請け関数を作り、共通部分はそこで処理する。
0245デフォルトの名無しさん
2006/10/04(水) 12:16:41そういうことでしたか、大がかりな変更になるんですね。。
一度それでやってみます。ありがとうございました。
0246デフォルトの名無しさん
2006/10/04(水) 12:19:33分岐させられないか?
0247とおりすがり
2006/10/04(水) 13:10:30さしみ
0248デフォルトの名無しさん
2006/10/04(水) 14:32:06typeinfoなんか使ったらコンパイル通せなくなるかもよ
0249デフォルトの名無しさん
2006/10/04(水) 23:16:17下のコードを VC2005express で試してみたら期待通り f2() だけ特殊化されたよ。
なかったことにされたっていうのは具体的にどういうことなのか教えて。
#include <iostream>
using namespace std;
template<class T> struct G {
void test() { f1(); f2(); f3(); }
void f1() { cout << "G::f1" << "\n"; }
void f2() { cout << "G::f2" << "\n"; }
void f3() { cout << "G::f3" << "\n"; }
};
template<> void G<double>::f2() { cout << "Special G::f2" << "\n"; }
int main() {
G<int> gi;
gi.test();
G<double> gd;
gd.test();
}
0250デフォルトの名無しさん
2006/10/06(金) 00:27:33どこから手をつければいいの?
class ustring : std::basic_string<unsigned char>{
この中に何が書けばいいのか解らない
0251デフォルトの名無しさん
2006/10/06(金) 00:32:35まずはchar_traits<unsigned char>からなんだろうけど。
しかも、basic_string<>は仮想デストラクタを持ってないし、継承されることを
前提にしてない。
0252デフォルトの名無しさん
2006/10/06(金) 00:37:46UTF-8 を扱うのに std::string に何の不満がある?
0253デフォルトの名無しさん
2006/10/06(金) 01:08:13http://piza.2ch.net/tech/kako/967/967004691.html
0254デフォルトの名無しさん
2006/10/06(金) 01:19:35char_traits も特に特殊化する必要があるものはないと思う。
後はwstringとの変換をする関数を作れば十分だろ。
0255デフォルトの名無しさん
2006/10/06(金) 01:23:06private継承して公開するメンバをusingすれば安全じゃね?
面倒だけど。
0256デフォルトの名無しさん
2006/10/06(金) 08:01:250257デフォルトの名無しさん
2006/10/06(金) 08:28:24private メンバとして持てばいいじゃないってこと?
0258デフォルトの名無しさん
2006/10/06(金) 22:48:14クラス間にis-a関係が成立しないなら
なるべくそうした方がいいらしいぞ
0259デフォルトの名無しさん
2006/10/07(土) 09:00:47悩んでいることがあります。
例えば、2次元版で、
for (Vec2D vec(0, 0); vec[0] < maxVec[0]; vec[0]++)
{
for (vec[1] = 0; vec[1] < maxVec[1]; vec[1]++)
{
foo(vec);
}
}
であった箇所が、3次元版では
for (Vec3D vec(0, 0); vec[0] < maxVec[0]; vec[0]++)
{
for (vec[1] = 0; vec[1] < maxVec[1]; vec[1]++)
{
for (vec[2] = 0; vec[2] < maxVec[2]; vec[2]++)
{
foo(vec);
}
}
}
となります。
できれば、2D/3Dのソースの2元管理はしたくないし、
大量の #ifdef をソース中にばら撒くこともしたくありません。
ループの深さの違いをうまく吸収して、
2D/3Dを共用するアイデアはないでしょうか?
(元々、巨大な計算なのでパフォーマンスに影響は与えたくありません)
0260デフォルトの名無しさん
2006/10/07(土) 09:16:45http://www.oonumerics.org/blitz/
> vec[0] < maxVec[0]; vec[0]++
とかやばすぎ
0261(^-^) ◆MONSOON/qo
2006/10/07(土) 09:50:300262(^-^) ◆MONSOON/qo
2006/10/07(土) 09:56:220263デフォルトの名無しさん
2006/10/07(土) 09:58:36{
foo(vec);
}
だけくくり出してテンプレにでもしたらいいべや
0264デフォルトの名無しさん
2006/10/07(土) 11:27:50typedef std::basic_string<unsigned char> ustring;
で十分なんだろうけど
operator<<とかこのへんは最低限実装しないとダメだよね?
0265デフォルトの名無しさん
2006/10/07(土) 14:00:13C++での実装って、どこかにない?
0266デフォルトの名無しさん
2006/10/07(土) 14:02:23>>260 問題依存のメンバー関数があったりするので blitz++ の利用は
見送りました。
それから、ご指摘の箇所がヤバイ理由はよくわからないのですが...
>>261 2Dでも十分遅いので...(涙)
>>262 最内ループの部分は、行数も含めて可変ですので template 化は
困難かと...
0267デフォルトの名無しさん
2006/10/07(土) 14:05:53>>262
class abstract
{
virtual bool Scan() = 0;
}
class VecXD: public abstractVec
{
bool Scan();
}
あるいは、
class PolicyXD{ ... }
teplate<typename DimPolicy> Vec: public DimPolicy
{
bool Scan();
}
と定義しておいて、
while(vec.Scan())
{
foo(vec);
}
て感じでしょうか?
virtual を使いたくないし、後者もfor ループではなくなると、
無駄なコードが出力されるような予感がします。
0268デフォルトの名無しさん
2006/10/07(土) 14:31:43struct Loop{
template<class T>
void calc(T& vec){
for(vec[I]=0; vec[I] < maxVec[I}; vec[i]++){
Loop<I-1>::calc(vec);
}
}
};
template<>
struct Loop<0>{
template<class T>
void calc(T& vec){
foo(vec);
}
};
Vec3D vec;
Loop<3>::calc(vec);
0269デフォルトの名無しさん
2006/10/07(土) 14:33:04template<typename T> class Test
{
public:
Test()
{
Val_[0] = 100;
Val_[1] = 1000;
}
T GetVal() { return Val_[0]; }
private:
T Val_[2];
};
0270デフォルトの名無しさん
2006/10/07(土) 14:35:34template<> double Test<double>::GetVal()
{
return Val_[1];
}
としておいて
Test<int> testInt;
Test<double> testDouble;
std::cout << "Int: " << testInt.GetVal()
<< " Double: " << testDouble.GetVal() << "\n";
とやったら、Int: 100 Double: 1000 とでましたが
0271デフォルトの名無しさん
2006/10/07(土) 14:38:42std::queue
0272デフォルトの名無しさん
2006/10/07(土) 15:02:26>とやったら、Int: 100 Double: 1000 とでましたが
で、だから何?
0273デフォルトの名無しさん
2006/10/07(土) 15:49:44もういい。くんな
0274デフォルトの名無しさん
2006/10/07(土) 17:24:02std:queue は順列コンテナSequenceを自分では実装していないし
デフォルトのSequenceであるdequeが「 「待機状態のない」FIFOキュー」だなんて話はきいたことがない。
0275デフォルトの名無しさん
2006/10/07(土) 17:26:560276デフォルトの名無しさん
2006/10/07(土) 17:48:320277デフォルトの名無しさん
2006/10/07(土) 17:50:26マルチスレッドを考慮していない現状の C++ 標準にそんなコンテナあるわけ無い。
何をどう考えたら、それが「待機状態のない」なんて表現になるんだ?
0278デフォルトの名無しさん
2006/10/07(土) 17:52:48誰が「C++標準」なんて言った?
0279デフォルトの名無しさん
2006/10/07(土) 17:52:55http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/concurrent/ConcurrentLinkedQueue.html
0280デフォルトの名無しさん
2006/10/07(土) 17:52:55アルゴリズムは紹介されてる。既存の実装はないんかいな?
0281デフォルトの名無しさん
2006/10/07(土) 17:57:260282デフォルトの名無しさん
2006/10/07(土) 17:57:490283デフォルトの名無しさん
2006/10/07(土) 17:58:28まあそれはどうでもいいか。
0284デフォルトの名無しさん
2006/10/07(土) 18:08:09http://ja.wikipedia.org/wiki/Lock-free%E3%81%A8Wait-free%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
0285デフォルトの名無しさん
2006/10/07(土) 18:09:39つーわけで C++だけではこの機能は実装できない。
0286デフォルトの名無しさん
2006/10/07(土) 18:13:23ここの "Existing source code and libraries" で、
都合のいい実装が見つかるかもしれない。
0287デフォルトの名無しさん
2006/10/07(土) 18:53:24boost::shared_ptr の参照カウンタで使われてるのが参考になると思う。
0288デフォルトの名無しさん
2006/10/07(土) 20:27:440289デフォルトの名無しさん
2006/10/07(土) 21:25:47結局誰も取らなかったのかな,あれ
0290デフォルトの名無しさん
2006/10/07(土) 21:26:26>Google Code of Summer
間違えた. Google Summer of Code だ
0291デフォルトの名無しさん
2006/10/07(土) 22:07:190292デフォルトの名無しさん
2006/10/07(土) 22:14:410293デフォルトの名無しさん
2006/10/07(土) 23:51:45モヒカン乙というか。
0294デフォルトの名無しさん
2006/10/08(日) 00:33:370295デフォルトの名無しさん
2006/10/08(日) 00:35:490296デフォルトの名無しさん
2006/10/08(日) 00:36:390297デフォルトの名無しさん
2006/10/08(日) 01:42:54クラス内クラスのアクセス制御て、クラス内クラスのメンバのアクセス制御には
影響しないんだっけ? とりあえずVC++ 8.0では通ったみたい。
class A {
private:
class B {
public:
void test() { std::cout << "test" << std::endl; };
};
B b_;
public:
B& b() { return b_; };
};
int main()
{
A a;
a.b().test(); // ok?
A::B b(a.b()); //NG
}
0298デフォルトの名無しさん
2006/10/08(日) 01:55:29影響しないよ。下は VC8 でも NG なんだよね?
0299デフォルトの名無しさん
2006/10/08(日) 01:55:32そりゃVC8のバグだ。
0300デフォルトの名無しさん
2006/10/08(日) 01:56:19あ、下はNGなのか。それでいい。
0301デフォルトの名無しさん
2006/10/08(日) 02:01:06なんだこりゃwこれ通っちまうのか、VC。見損なったわ!
0302デフォルトの名無しさん
2006/10/08(日) 02:08:09は?何いってんの?正しい動作だろ
0303297
2006/10/08(日) 02:12:33そうか、OKなのか。サンクス
何かおもしろいことできそうかな……と思ったけど、
delete &(a.b());
が通っちまうのね……
class B {
~B() {};
friend A;
public:
void test() { std::cout << "test" << std::endl; };
};
とすりゃいいけど、これはこれで面倒か……
0304デフォルトの名無しさん
2006/10/08(日) 02:14:470305デフォルトの名無しさん
2006/10/08(日) 02:19:100306デフォルトの名無しさん
2006/10/08(日) 07:51:20ややこしいこと書いているが、
> A::B b(a.b()); //NG
< A::B x; //NG
の時点で駄目だぞ。
0307デフォルトの名無しさん
2006/10/08(日) 10:33:58読解力0のクズは氏ね。去れ。
0308デフォルトの名無しさん
2006/10/08(日) 10:56:14ごめん。誤解しちまったか……
A::B b(a.b()); //NG
自体はコンパイル通らんです。コメントアウトしとけばよかったな。
>305
確かにそうか。
カスタマイズポイントに使えないかな?と思ったけど、よくよく考えたら
クラス内クラスの時点で継承できない(カスタマイズできない)よね……
0309デフォルトの名無しさん
2006/10/08(日) 11:00:52プッ
0310デフォルトの名無しさん
2006/10/08(日) 11:38:20複数のテンプレート引き数を取るテンプレート関数の、一部引き数だけの特殊化ってできるんだろか。
例えば
template<typename T, int N>inline T factrial(T s = 1){return factrial<T, N - 1>(s * N);}
template<>T factrial<T, 1>(T s){return s;}
みたいなことがしたいんだけど。
template<>double factrial<double, 1>(double s){return s;}
これなら巧くいくんだけどね。
0311デフォルトの名無しさん
2006/10/08(日) 11:51:350312デフォルトの名無しさん
2006/10/08(日) 11:53:03読解力0のクズは氏ね。去れ。
0314デフォルトの名無しさん
2006/10/08(日) 12:00:16なんで嘘をつくの?
0315デフォルトの名無しさん
2006/10/08(日) 12:02:08>template<>T factrial<T, 1>(T s){return s;}
普通に特殊化しているように見えるけど……
template<T>T factrial<T, 1>(T s){return s;}
の間違い?
0316310
2006/10/08(日) 12:15:50TとNのうちNだけ特殊化ってのはできないのかねぇ。
0317デフォルトの名無しさん
2006/10/08(日) 12:27:54typenameが抜けてますよ。(これでもダメだけど)
template<typename T>T factrial<T, 1>(T s){return s;}
テンプレート関数の部分特殊化は禁止されてるはず。
テンプレート構造体ならなんとかなる。
template<typename T,int N>
struct factorial
{
T operator()(T s=1){return factorial<T,N-1>()(s*N);}
};
template<typename T>
struct factorial<T,1>
{
T operator()(T s){return s;}
};
0318デフォルトの名無しさん
2006/10/08(日) 12:28:57関数テンプレートは部分特殊化できない。
(関数テンプレートを部分特殊化できちゃう処理系があるかどうかは知らん)
クラステンプレートなら部分特殊化できるから、
実体はクラスにして入口だけ関数にする感じでがんばれ。
0319315
2006/10/08(日) 12:52:57指摘サンクス
>310
Exceptional C++ Styleにちょうどその話題が載ってるから、買って読んどけ
そういや、More Exceptional C++の邦訳は出ないのか……?
0320デフォルトの名無しさん
2006/10/08(日) 13:29:26まだ良く分からないからやめてるんだと書いてあったはず。
頑張ってC++0xには入れてほしい。
0321310
2006/10/08(日) 14:13:47レスTHX、本も探してみる。
で、結局、>317 ではTへのキャストオペレータがなくて巧くなかったのでこうなった。
関数版と名前がぶつかるのも回避。
#include <cstdio>
#include <cstdlib>
template <typename T> inline T factorial(const int n, const T s = 1) {return n <= 1 ? s : factorial(n - 1, s * n);}
template<typename T, const int N> struct Factorial {operator T() const {return Factorial<T, N - 1>() * N;}};
template<typename T>struct Factorial<T, 1> {operator T() const {return 1;}};
int main(int argc, char ** argv)
{
printf("%d\n", factorial<int>(atoi(argv[argc - 1])));
Factorial<double, 10> foo;
printf("%.20g\n", double(foo));
printf("%.20g\n", double(Factorial<double, 21>()));
return 0;
}
テンプレート引き数だと定数性が求められるから、末尾再帰じゃなくても大丈夫ってことですかね。
0322デフォルトの名無しさん
2006/10/08(日) 14:32:42staticメンバ使ってたけどな
0323デフォルトの名無しさん
2006/10/08(日) 16:55:05C++でC言語ライクなスクリプト言語を作ろうとしているのですが
まずファイルを読み込み、string scriptに収納します。
次にscriptのコメント(/* */)を削除するのですが、
ここでbool DeleatComment(string &str);という自前の関数を使って
while(DeleatComment(script));と、コメントが全て消えるまでループさせるのですが
なぜかコメントが消えません。/*と*/が消えるだけなのです。
問題のDeleatCommentの部分は
bool DeleatComment(string &str){
string::size_type com_begin = str.find_first_of("/*");
if(com_begin != string::npos){
string::size_type com_end = str.find_first_of("*/",com_begin);
if(com_end != string::npos){
str.erase(com_begin,com_end-com_begin+2);
return true;
}
}
return false;
}
こうなってます。
0324デフォルトの名無しさん
2006/10/08(日) 16:56:130325デフォルトの名無しさん
2006/10/08(日) 17:19:40find_first_of() ではなくて find() だと思うそこは
0326デフォルトの名無しさん
2006/10/08(日) 17:24:25ありがとうございます!
なぜだかよく分かりませんが、findにしたら消えました
0327デフォルトの名無しさん
2006/10/08(日) 17:25:34どこかでdelatCommentを使っちゃったんだろ。
初心者はよくやる。察してやろうZE
0328デフォルトの名無しさん
2006/10/08(日) 17:34:11>324
0329デフォルトの名無しさん
2006/10/08(日) 17:35:04std::string::find_first_of(A, B)は文字列Aの中から
「文字列Bの中のどれか一文字が最初に見つかったindexを返す」
のでした
<algorithm>のstd::find_first_of()の説明を見るとなんとなくわかるかもしれない
0330デフォルトの名無しさん
2006/10/08(日) 17:37:17すみません、deleatではなくdeleteでしたね
今気づきました
0331デフォルトの名無しさん
2006/10/08(日) 17:38:21まじれすされた(^o^)
0332デフォルトの名無しさん
2006/10/08(日) 17:40:06ごめん俺が馬鹿
find_first_of(A, B)
を
A.find_first_of(B)
に置き換えてみると俺が救われます
0333デフォルトの名無しさん
2006/10/09(月) 13:05:57warning C4786: 'std::reverse_bidirectional_iterator<std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,
std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::iterator,std::basic_string<char,std::char_traits<char>,
std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,std::basic_string<char,std::char_traits<char>,
std::allocator<char> > *,int>' : 識別子が '255' 文字に切り捨てられました (debug 情報内)。
list<string>を定義したら出たので、その辺の警告なんだと思いますが・・・
0334デフォルトの名無しさん
2006/10/09(月) 13:07:080335デフォルトの名無しさん
2006/10/09(月) 13:07:510336デフォルトの名無しさん
2006/10/09(月) 13:13:56listの< >内が255文字以上あるということですか?
0337デフォルトの名無しさん
2006/10/09(月) 13:17:28違います。
0338デフォルトの名無しさん
2006/10/09(月) 13:21:330339デフォルトの名無しさん
2006/10/09(月) 13:25:270340デフォルトの名無しさん
2006/10/09(月) 13:28:180341デフォルトの名無しさん
2006/10/09(月) 13:40:20違います。
336の方が正解に近いな。
0342デフォルトの名無しさん
2006/10/09(月) 13:41:53俺にもさっぱりだが、
>339
を見る限り、
・VC++の環境依存っぽい
・キニスンナ
ということは解る。
0343デフォルトの名無しさん
2006/10/09(月) 13:45:00北朝鮮が核実験を実施・・・朝鮮中央通信
産経
北朝鮮が核実験を実施
毎日
北朝鮮:中央通信「核実験行った」報じる プルトニウム型
日経
「核実験を実施」中央朝鮮通信
--------------------ここまで日本の新聞----------------------
朝日
北朝鮮「地下核実験に成功」
0344デフォルトの名無しさん
2006/10/09(月) 13:52:150345デフォルトの名無しさん
2006/10/09(月) 14:42:40俺らも被爆するぞ
0346デフォルトの名無しさん
2006/10/09(月) 18:24:270347デフォルトの名無しさん
2006/10/09(月) 18:29:200348デフォルトの名無しさん
2006/10/09(月) 18:38:48思うときはある
0349デフォルトの名無しさん
2006/10/09(月) 18:58:46上司に
「関数スコープ単位での"using namespace std;"は常識なんだよ」
って言うじゃない。
・
・
・
・
そしたら、あんたクビだからぁ〜〜。
0350デフォルトの名無しさん
2006/10/09(月) 19:05:080351(^-^) ◆MONSOON/qo
2006/10/09(月) 19:24:08N=100;
int *d = new int [N]; // dには適当な数値が入る
k=13421030;
q=(int *)bsearch(&k, d, N, 4, f);
x=(int)(q-d)+1; //サーチした番号
int f(const void *a, const void *b)
{return (*(const int *)a - *(const int *)b);}
0352(^-^) ◆MONSOON/qo
2006/10/09(月) 19:26:28int f(const void *a, const void *b)
{return (*(const int *)b - *(const int *)a);}
に変更しても結果は同じになるんでしょうか?
別の番地が返ってくるのですが
0353デフォルトの名無しさん
2006/10/09(月) 19:30:470354デフォルトの名無しさん
2006/10/09(月) 19:31:45そういう時に export template<> だと実装側にusingが使いまくれて経済的
0355(^-^) ◆MONSOON/qo
2006/10/09(月) 19:34:02ばっちりしてあります 出力して確認済みです
実際にはN=57928730なんですが
数字が大きいと誤作動したりするんでしょうか
0356デフォルトの名無しさん
2006/10/09(月) 19:39:07もしかしたらsizeof(int) != 4の環境かねえ。
0357デフォルトの名無しさん
2006/10/09(月) 19:41:58C++なんだからlower_boundとか使えじゃ駄目?
0358(^-^) ◆MONSOON/qo
2006/10/09(月) 19:44:41駄目でした 4でした
どんな値でも、初めの200番代くらいまでの番号しか返してきません
>>357
つかってみます!
0359デフォルトの名無しさん
2006/10/09(月) 19:45:01int main()
{
const int N = 100;
int* d = new int[N]; // dには適当な数値が入る
int k = 13421030;
std::fill(d, d + N / 2, 0);
d[N / 2] = k;
std::fill(d + N / 2 + 1, d + N, k + 1);
int* q = (int *)std::bsearch(&k, d, N, sizeof(int), f);
int x = (int)(q - d) + 1; //サーチした番号
std::cout << x << std::endl;
}
int f(const void *a, const void *b)
{
return *(const int *)a - *(const int *)b;
}
0360デフォルトの名無しさん
2006/10/09(月) 19:47:230361(^-^) ◆MONSOON/qo
2006/10/09(月) 19:55:2210個や100個の連番で実験するとうまくいくのですが本番では失敗します
ちゃんとソートされているかどうかをプログラムで確認してみます
0362デフォルトの名無しさん
2006/10/09(月) 19:56:57んだね。std::qsortとかstd::sortの呼び出し方が間違っているのかもしれん。
0363(^-^) ◆MONSOON/qo
2006/10/09(月) 21:04:01原因解明しますた 358にヒントがありました
xがunsigned char型だったのを忘れてしまっていたようです
0364デフォルトの名無しさん
2006/10/09(月) 21:39:360365デフォルトの名無しさん
2006/10/09(月) 21:45:130366デフォルトの名無しさん
2006/10/09(月) 22:09:190367デフォルトの名無しさん
2006/10/09(月) 22:13:490368デフォルトの名無しさん
2006/10/09(月) 22:16:040369デフォルトの名無しさん
2006/10/09(月) 22:27:540370デフォルトの名無しさん
2006/10/09(月) 22:31:210371デフォルトの名無しさん
2006/10/09(月) 23:14:02あの比較関数だと a と b が取り得る全範囲の数値の組み合わせの中で
約半数の組み合わせで比較関数が期待されるのとは逆の結果を返すだろ。
0372デフォルトの名無しさん
2006/10/09(月) 23:16:190373デフォルトの名無しさん
2006/10/09(月) 23:18:190374デフォルトの名無しさん
2006/10/11(水) 20:54:230375デフォルトの名無しさん
2006/10/11(水) 23:59:340376デフォルトの名無しさん
2006/10/12(木) 00:00:09テストのカバレッジならわかるんだが。
0377デフォルトの名無しさん
2006/10/12(木) 00:27:27PureCoverageみたいなやつのことでしょ?
0378デフォルトの名無しさん
2006/10/12(木) 01:24:200379デフォルトの名無しさん
2006/10/12(木) 03:18:300380デフォルトの名無しさん
2006/10/12(木) 05:22:54オブジェクトの生成を何処ですればいいのでしょうか?
0381デフォルトの名無しさん
2006/10/12(木) 05:27:380382デフォルトの名無しさん
2006/10/12(木) 06:00:230383380
2006/10/12(木) 06:25:00>>382
レスサンクスです!質問の仕方が悪かったです、すいません。
AとBという二つのファイルでCというクラスを使用する際、オブジェクトを生成
する場所は何処でするのか?という初心者丸出しの質問なんですが。
やはり共通のヘッダで宣言するといった形でよろしいのでしょうか?
0384デフォルトの名無しさん
2006/10/12(木) 07:47:200385デフォルトの名無しさん
2006/10/12(木) 08:06:09こらこら
0386デフォルトの名無しさん
2006/10/12(木) 09:31:240387デフォルトの名無しさん
2006/10/12(木) 10:02:390388デフォルトの名無しさん
2006/10/12(木) 10:26:46てか,「生成する場所」を「ヘッダで宣言」て・・・?
0389デフォルトの名無しさん
2006/10/12(木) 10:59:19extern の使い道を考えてみるといいかもしれません
0390389
2006/10/12(木) 11:18:04誤爆に正式爆撃先がマジレス
http://pc8.2ch.net/test/read.cgi/tech/1143608073/
外国の単語にも複数の意味がついているのに
特定団体が利便性の為「だけ」で一つの日本の単語にあてはめる姿勢が駄目
だから単語の揚げ足取りばかりに終始して全く議論が進まない
Sequence という単語から複数本伸びている「枝(意味)」のうち私が選んだ一本を
私は日本の単語「連鎖」に当てました
しかし
連鎖という単語から複数本伸びている「枝(意味)」のうち貴方が選んだ一本が
Sequence という単語に当てられるかどうかまでは私には判りません
以降は上記スレで
スレ違い失礼致しました
0391デフォルトの名無しさん
2006/10/12(木) 12:02:21お前空気読めない類だな。
0393デフォルトの名無しさん
2006/10/12(木) 15:04:400394デフォルトの名無しさん
2006/10/12(木) 20:16:04いいから原文のみを貼り、変な訳語は一切付けるな。以上。
0395380
2006/10/12(木) 21:33:11まだまだ、言葉足らずで申し訳ないです。
1つのオブジェクトを複数のファイルから参照出来るようにしたい、
この場合のオブジェクトの宣言は何処でどのようにしたらいいのか。
と、この様な書き方(言い方?)でいいんでしょうか?うまく伝わるか自信ないのですが。
>>389
externを使えば出来るのですね。有難う御座います。
以前、変数に対してexternを使用した時はすんなり出来たのですが、
記述の仕方が悪かったのか、クラスの場合は出来なかったのです。
もうちょっと頑張ってみます。
0396デフォルトの名無しさん
2006/10/12(木) 22:13:30>AとBという二つのファイルでCというクラスを使用する際、オブジェクトを生成
>する場所は何処でするのか?
↓
AとBという二つのファイルでCというクラスのオブジェクトを使用する際、オブジェクトを生成
する場所は何処のファイルでするのか?
0397デフォルトの名無しさん
2006/10/12(木) 22:23:08もしかしてこーゆーことがしたかったんかな?
// C.h
class C {
public:
static C& getInstance();
};
// C.cpp
C& C::getInstance() {
static C instance;
return instance;
}
0398デフォルトの名無しさん
2006/10/12(木) 22:45:460399デフォルトの名無しさん
2006/10/13(金) 02:00:550400デフォルトの名無しさん
2006/10/13(金) 02:57:08シングルトン?
0401デフォルトの名無しさん
2006/10/13(金) 12:24:030402デフォルトの名無しさん
2006/10/13(金) 12:29:250403デフォルトの名無しさん
2006/10/13(金) 12:53:13あらゆる意味で痛いです
0404デフォルトの名無しさん
2006/10/13(金) 13:34:32取り敢えずめぼしい書籍はこれ位しかなかった。
0405デフォルトの名無しさん
2006/10/13(金) 13:35:220406デフォルトの名無しさん
2006/10/13(金) 13:42:37変態的と評される程ムズいと聞いて以来、
手に取ったことすら無いw
0407デフォルトの名無しさん
2006/10/13(金) 13:45:38Exceptional C++は読んでるんだが想像つかん
0408デフォルトの名無しさん
2006/10/13(金) 13:59:490409デフォルトの名無しさん
2006/10/13(金) 14:13:29Exceptional C++を読んでいるなら、Exceptional C++ Styleは軽い読み物
だと思う。無理に買う必要はない内容。
0410380
2006/10/13(金) 16:48:50>>396
そうですね。それ+どのようにっていうのがあると助かります。
>>397
これが>>400氏が仰っているシングルトンと言う物(?)なのでしょうか?
ちょっと調べた感じではこれで良いような気がしました。どもです。
0411デフォルトの名無しさん
2006/10/13(金) 18:38:34あれはおもしろい。役に立つかどうかは不明。
0412デフォルトの名無しさん
2006/10/13(金) 19:43:23Boost みたいに変態的な手段を使わず、基礎を知るには非常にいい本。
0413デフォルトの名無しさん
2006/10/13(金) 20:02:40もしかして以下のようなこと?
//--- foo.h ---
class C {
....
};
extern C c; // どこかにあるグローバル変数cを参照するための宣言
//--- foo.c ---
C c; // グローバル変数cの実体を定義
//----aaa.c---
#include "foo.h"
void func_a()
{
c.meber_func1(100); // cにアクセス
}
//----bbb.c---
#include "foo.h"
void func_b()
{
c.meber_func2(); // cにアクセス
}
上の例はオブジェクトcをグローバル変数で定義しているから改めて生成はしていないけど、
グローバル変数としてCのポインタを定義、宣言するなら、オブジェクトの生成(c = new C)は
aaa.cでもbbb.cでもOK.
0414デフォルトの名無しさん
2006/10/13(金) 20:44:21カッコいいネーミングしてるが。
っと使ったこと無いが言ってみる
0415デフォルトの名無しさん
2006/10/13(金) 20:48:45っと使ったこと無いが言ってみる
しかしEffectiveC++ホントに面白いな
ここ数日必携の書になってる(*´ω`)
0416デフォルトの名無しさん
2006/10/13(金) 20:54:440417デフォルトの名無しさん
2006/10/13(金) 21:09:37グローバル変数は生成されるタイミングを制御しにくい。
A a;
B b;
で、a のコンストラクタが b を使いたいときなど。
0418デフォルトの名無しさん
2006/10/13(金) 21:24:07ライブラリ利用者疑いすぎじゃないかって思えてくるな。
0419デフォルトの名無しさん
2006/10/13(金) 21:28:140420デフォルトの名無しさん
2006/10/13(金) 22:45:19::AfxBeginThread(略);
みたいな書き方で関数を使ってる部分があるんですが、「::」の意味がわかりません。
こういうのって左側にクラス名も書くものじゃないんですか?
0421デフォルトの名無しさん
2006/10/13(金) 22:50:180422デフォルトの名無しさん
2006/10/13(金) 22:50:21(でも多分実際はVSのインテリセンスを動かすため)
0423デフォルトの名無しさん
2006/10/13(金) 23:00:020424420
2006/10/13(金) 23:00:41書いた方が明示的になるし入力候補も出るから便利ってことですね。
0425デフォルトの名無しさん
2006/10/14(土) 00:05:19書かなきゃならん場合もある。てか、予めそーゆー事態も想定しての明示。
0426デフォルトの名無しさん
2006/10/14(土) 00:06:06違う。
0427デフォルトの名無しさん
2006/10/14(土) 00:08:500428デフォルトの名無しさん
2006/10/14(土) 00:17:33名前解決のやり方が変わるので、明示的にグローバルな名前空間の
関数を呼びたいときはこうすべき。
0429デフォルトの名無しさん
2006/10/15(日) 13:36:07仮想関数を持つクラスにはvtblなどの隠れたデータが挿入されますよね?
で、純粋仮想関数をもつクラスには挿入されないと思いますが、それを継承したクラスには必ず隠れデータが挿入されてしまいますか?
0430デフォルトの名無しさん
2006/10/15(日) 13:42:02純粋仮想関数を持つクラスにも vtable は要るよ。
0431デフォルトの名無しさん
2006/10/15(日) 13:48:300432デフォルトの名無しさん
2006/10/15(日) 13:56:02継承されたクラスのインスタンスには基底クラスのインスタンスが含まれる。
0433デフォルトの名無しさん
2006/10/15(日) 14:00:490434デフォルトの名無しさん
2006/10/15(日) 14:03:43では、純粋仮想関数と普通の関数のみを持つクラスにはvtableは挿入されないという解釈は正しいですか?
0435デフォルトの名無しさん
2006/10/15(日) 14:26:29普通の関数の有無に関係なく、(純粋でも、そうでなくても)仮想関数があればvtableは必要でしょ。
0436デフォルトの名無しさん
2006/10/15(日) 14:28:56純粋仮想関数を特別扱いする規定は無さそうだから、普通の仮想関数と
同じように扱う必要があるんじゃね?
実際は(vtbl含めて)実装次第だと思うけど。
というか、何でそんなにこだわるのかわからん。
0437デフォルトの名無しさん
2006/10/15(日) 14:33:03vtableは仮想関数(広く言うとメンバ関数)の実装方法だから。
つか >>429 で「隠れた」って自分でいうとるやないか。
アホじゃね?
0438デフォルトの名無しさん
2006/10/15(日) 14:55:27このときA,BをそれぞれIから継承したとすると自動的にA,Bも仮想クラスになってしまうのかと思ったのです。
つまり本来必要ない無駄なオーバーヘッドが生じてしまうのではないのかと思いまして、質問した次第です。
0439デフォルトの名無しさん
2006/10/15(日) 15:00:060440デフォルトの名無しさん
2006/10/15(日) 15:03:12A, Bに実行時多相が必要なく単に共通の実装を括り出したいだけなら
vtblのコストを払わずに実装を括り出す方法は他にたくさんある
0441デフォルトの名無しさん
2006/10/15(日) 15:10:39テンプレートってのは派生クラスをテンプレート引数にして基底クラスに渡せってことでしょうか。んで基底クラスを派生クラスにキャストすると。なるほど。
0442デフォルトの名無しさん
2006/10/15(日) 15:18:590443デフォルトの名無しさん
2006/10/15(日) 15:20:28キャストが必要になった時点で何かおかしいと気付くように。
0444デフォルトの名無しさん
2006/10/15(日) 15:22:12その方法だとインターフェースの継承には向かないと思うよ。
0445デフォルトの名無しさん
2006/10/15(日) 15:24:550446デフォルトの名無しさん
2006/10/15(日) 15:28:36#include <iostream>
using namespace std;
int main()
{
int num;
int sum = 0;
cout << "いくつまでの合計を求めますか?\n";
cin >> num;
for(int i=1; i<=num; i++){
sum += i;
}
cout << "1から" << num << "までの合計値は" << sum << "です。\n";
return 0;
}
上記コードがビルドできないんですが何故でしょうか?
0447デフォルトの名無しさん
2006/10/15(日) 15:32:27それは、インターフェースじゃないでしょ。
見かけ上の基本クラスから派生クラスのメソッドを呼び出すだけなら
それでもいいよね。
0448デフォルトの名無しさん
2006/10/15(日) 15:32:530449446
2006/10/15(日) 15:33:04Sample34.cp
error C3872: '0x3000': この文字を識別子で使用することはできません
error C2146: 構文エラー : ';' が、識別子 ' ' の前に必要です。
error C2065: ' ' : 定義されていない識別子です。
どなたか原因の分かる方がいればお願いいたします
0450デフォルトの名無しさん
2006/10/15(日) 15:36:46ああ、そっか。インターフェースっていうからまずかったのですね。すいません。
要は実行時のコストなしで共通する実装を括り出したいだけだったんです。煩わしい言い方してすいませんでした。
iterator_facadeでした今思い出しました。解決しました。
0451デフォルトの名無しさん
2006/10/15(日) 15:39:27なれないうちはエラーメッセージが出たというだけで、
何か分からないことが起きているとすぐ諦めがちだが、
とりあえずメッセージをよく読む習慣をつけるべし。
そのうち分かるようになるよ。
0452デフォルトの名無しさん
2006/10/15(日) 15:41:240453デフォルトの名無しさん
2006/10/15(日) 15:43:590454デフォルトの名無しさん
2006/10/15(日) 15:49:02ポリシークラス使え
protected 非仮想デストラクタにするのを忘れるなよ
0455デフォルトの名無しさん
2006/10/15(日) 15:49:27446
ありがとうございます!
何度見てもおかしな点がなかったので途方に暮れていたのですが、全角が入っていたとは・・・
エラーメッセージの読み方がまだわからないので、これから勉強したいと思います
ありがとうございました
0456デフォルトの名無しさん
2006/10/15(日) 15:50:58馬を水飲み場まで連れて行くことはできるが水を飲ませることはできない
0457デフォルトの名無しさん
2006/10/15(日) 15:59:31共通する実装を派生クラスにして異なる実装をポリシーとして渡してそれを基底にするってことですか?
実はコンストラクタが異なるので派生クラスにしないといけないんですよ…う〜む。
0458デフォルトの名無しさん
2006/10/15(日) 17:26:21「ミネラルウォーターじゃなきゃヤダ!」とか言って
そっぽ向く馬もネットにはたくさん居るしな。
0459デフォルトの名無しさん
2006/10/15(日) 17:38:53{
public:
void F()
{
policy_.F();
}
private:
_Policy policy_;
};
class Policy
{
public:
void F(){ /* impl */ };
};
こんなの?
>>454
protected 非仮想デストラクタにするのを忘れるなよ
ってのがよくわからんのだが。
0460デフォルトの名無しさん
2006/10/15(日) 17:51:56Policy クラスを継承することを想定しているんでしょう
継承する場合,459のような例ではEBCOが効く可能性があるという利点があります
0461デフォルトの名無しさん
2006/10/15(日) 18:22:28{
public:
void F()
{
_Policy::F();
}
};
class Policy
{
protected:
~Policy(){ /*ぷろてくてっどっと。*/ };
public:
void F(){ /* impl */ };
};
継承すれば最適化されてPolicyクラスが0Byteになることがあるよってことね>>459
0462デフォルトの名無しさん
2006/10/15(日) 18:27:37ググっても出ないし。
流れからするとEmptry byte class optimizationとかそんなの?
0463デフォルトの名無しさん
2006/10/15(日) 18:29:380464デフォルトの名無しさん
2006/10/15(日) 18:30:120465デフォルトの名無しさん
2006/10/15(日) 18:34:41トン
再びググってみる(・∀・)
0466デフォルトの名無しさん
2006/10/15(日) 18:55:47何で継承してるんだろうとか思ってたけど、そういうことだったのか…。
0467デフォルトの名無しさん
2006/10/15(日) 18:59:16身についてねえ('A`)
0468デフォルトの名無しさん
2006/10/15(日) 19:11:18empty base optimization, EBO ともいう。つーかEBOで覚えてた。
どっちの名前も使われてるっぽいね。
0469デフォルトの名無しさん
2006/10/15(日) 19:32:53assertが入ってないのはなぜなんだぜ?
マクロとかそういうオチですか?
vc8だとstd::assertでエラーだった。
gcc3.2だと通ったけど。
0470454
2006/10/15(日) 19:36:01>461のことですな。詳細はModern C++ Design参照。
カスタマイズポイントをユーザーに提供しないんだったら
単純に包含でもいいかもね?
ポリシークラスてそんなにマイナーだっけ?
>460
いや、「実行時のコストなしで共通する実装を括り出したいだけ」
つうてるから忠告しただけ。
何も言わなかったら非仮想publicデストラクタを使いそうだからね。
詳しくは C++ Coding Standards参照
0471デフォルトの名無しさん
2006/10/15(日) 19:41:130472デフォルトの名無しさん
2006/10/15(日) 22:53:29MC++D前から同じようなのはいっぱいあった
0473デフォルトの名無しさん
2006/10/15(日) 22:54:34#include <cassert>
でstd名前空間にあった気がする
0474デフォルトの名無しさん
2006/10/15(日) 22:54:450475デフォルトの名無しさん
2006/10/15(日) 22:58:07デマを流すな。確認してから書け。
0476デフォルトの名無しさん
2006/10/15(日) 23:01:18ビットマップを読み込む自作クラスに
class Bitmap
{
public :
bool readBmp( string str ) {}
bool writeBmp( string str ) {}
};
のような感じでファイルを読み込む関数を作っていますが、ファイルの読み込みエラーが起きたときに
上記のような感じでbool型のfalseを返すか、例外をthrowするかで悩んでいます。
どっちでもいいっちゃどっちでもいいんですが、どうしても気になって・・・。。。
bool型を返すと
Bitmap pic;
bool flag;
do {
flag = pic.readBmp( "xxx.bmp" );
}
while( !flag );
のような感じでファイルが読み込めるまで繰り返す、という処理をかけるのですが、
こういった記述は例外処理でも可能でしょうか?
※"xxx.bmp"は、他のプログラムでも使用していて、読み込みのタイミングによってはロックされているため
0477デフォルトの名無しさん
2006/10/15(日) 23:04:00boostでも使われているのに
ttp://www.boost.org/more/generic_programming.html
0478デフォルトの名無しさん
2006/10/15(日) 23:05:00for(;;) try { pic.readBmp( "xxx.bmp" ); break; } catch (...) {}
0479デフォルトの名無しさん
2006/10/15(日) 23:05:58すみません、VC8の環境でですが、
cassertヘッダの内部では
assert.hをインクルードしてるだけでした。
よって、std名前空間には入りません
0480デフォルトの名無しさん
2006/10/15(日) 23:06:01「なんでビットマップにファイルが関係するの?」という些細な問題は端に追いやってしまったわけね
とりあえず俺なら例外を発生させる
わざわざ例外機構があるのに利用しないで条件分岐で対応するのは分が悪い
0482デフォルトの名無しさん
2006/10/15(日) 23:07:52根本的に、 assert() はマクロだから名前空間に入れることができない。
>>471 で FA 。
0483デフォルトの名無しさん
2006/10/15(日) 23:08:55せめて必要な例外だけをcatchするようにしようよ……。
0485476
2006/10/15(日) 23:11:48他にいい設計の仕方があれば助言をお願いします。
自分としては、Bitmapを扱う際には当然、ファイルから読み込む機能がないと不便だと思ったのですが・・・
0486デフォルトの名無しさん
2006/10/15(日) 23:12:07俺もstd::assertで使った記憶がある…
何でだろ…
0488デフォルトの名無しさん
2006/10/15(日) 23:14:01readBmp() の中でループまわせ。
0490476
2006/10/15(日) 23:17:08それだと、ファイルが読み込めなかったときの処理が
読み込むまでループ
に固定されてしまいます。
読み込めなかったときの処理もある程度制御したいので・・・
とりあえず例外を発生させる形で組んで見ます
0491デフォルトの名無しさん
2006/10/15(日) 23:25:44> 他にいい設計の仕方があれば助言をお願いします。
> 自分としては、Bitmapを扱う際には当然、ファイルから読み込む機能がないと不便だと思ったのですが・・・
そりゃ当然ファイルから読み込める機能がなきゃ不便に感じる。
でもそれをそのまま実現する必要は無いだろ?
今のBitmapクラスを説明すると次の様になる。
・Bitmap.readBmp(str)=ビットマップがファイル:strから読み込む
・Bitmap.writeBmp(str)=ビットマップがファイル:strに書き込む
本来ビットマップは「Bitmapped data」だけを専門にすればいいだけで、
こういった雑事はBitmapのCreatorさんが担うべき仕事だと俺は思うわけ
つまり
・Bitmap ('utility' , 'createBitmap' , str ) : 'utility'がファイル:strからBitmapを作る
・('utility' , 'writeBitmap' , Bitmap , str) : 'utility'がBitmapをファイル:strに書き込む
みたいな
まぁ、それほど酷使しないつもりならこのままでも悪くは無いかもね、という小さなこと。
0492デフォルトの名無しさん
2006/10/15(日) 23:46:38わざわざ複雑度を上げることも無い。 YAGNI ってやつだ。
0493デフォルトの名無しさん
2006/10/16(月) 00:06:21ぉぅぃぇ
まあ小さなことだし、ぶつかって機能分割するのもよしかと思ってる
0494デフォルトの名無しさん
2006/10/16(月) 00:19:06template<IT >
Bitmap::readBmp(IT first,IT last) {}
file_bitmap.readBmp(file::iterator i,file::iterator end);
stream_bitmap.readBmp(&str[0],&str[0] + sizeof(str));
0495476
2006/10/16(月) 00:51:19ありがとうございます。
まだC++使いこなしているわけではないので、とりあえずBitmap::readBmp()で実装してみて、
使いにくいようなら
>>491さんの助言を参考にしてみます
0496デフォルトの名無しさん
2006/10/16(月) 03:15:56// hogehoge
for (int i = 0; i < 100; ++i)
delete &x[i];
こんな感じに配列として確保したメモリを要素ごとに開放した場合、
正規の動作が保障されるのでしょうか?
サンプルコードを書いて試してみたところ、vc2005では特に問題なく
動いた(ように見える)のですが、やはりdouble deleteされているのでしょうか?
0497デフォルトの名無しさん
2006/10/16(月) 03:20:16newはdelete
new T[]はdelete[]
これ以外は鼻から悪魔
0498デフォルトの名無しさん
2006/10/16(月) 03:32:380499デフォルトの名無しさん
2006/10/16(月) 03:41:14社内のヘッダー内でのtypedefを使った型定義が衝突して困ってます。
1.解決方法として社内ヘッダー側で、
サードパーティー側のヘッダーファイル内にdefineされているマクロシンボルを
チェックして定義を回避する。
しかし、相互チェックではないので、ヘッダーのインクルード順に気を使う必要がある。
2.社内用のヘッダーをnamespaceで囲い、
内部を参照する時はスコープ解決演算子を伴って使用する。
しかし、C用のソースで使用できない。
これぐらいしか対処法が思い浮かばないのですが、他に良い解決方法はないでしょうか?
0500デフォルトの名無しさん
2006/10/16(月) 03:42:550502デフォルトの名無しさん
2006/10/16(月) 14:11:06衝突したtypedefを消去すればいいじゃん。
0503デフォルトの名無しさん
2006/10/16(月) 16:43:53C使っていたところもみんなベターCに。
そんなことできるわけないだろうけどさ。
0504デフォルトの名無しさん
2006/10/16(月) 18:12:19無名名前空間内で定義するクラスを前方宣言したいんですが、
どうすればいいのでしょうか?
無名名前空間外のクラスから friend 指定したいのですが、よくわかりません。
よろしくお願いします。
0505デフォルトの名無しさん
2006/10/16(月) 18:43:32無名名前空間内で前方宣言すればいいと思うよ。
0506504
2006/10/16(月) 19:06:16あー、実際にやっていただければ、一目瞭然なのですが
namespace {
class Foo;
}
class Bar {
int i;
friend class Foo;
};
namespace {
class Foo // NG. 上記のFoo とは別物
{
// ここで Bar::i は使えない。
};
}
というわけで、アクセス違反が発生してしまいます。
0508デフォルトの名無しさん
2006/10/17(火) 07:36:59class C1
{
private:
class CSub
{
public:
~CSub();
}
};
のC1::CSubのデストラクタCSub()をcppファイルに定義したいのですが
無理なんでしょうか
C1::CSub::C1::~CSub(){}としてもコンパイル不可のようで
0509デフォルトの名無しさん
2006/10/17(火) 07:37:590510デフォルトの名無しさん
2006/10/17(火) 07:38:17C1が2回でてるぞ。
0511デフォルトの名無しさん
2006/10/17(火) 07:38:31C1::CSub::~CSub(){}
エラーメッセージ嫁。
0512デフォルトの名無しさん
2006/10/17(火) 07:48:58もちろんそれもやりましたが無理のようです。
やっぱり出来ないんでしょうか
0513デフォルトの名無しさん
2006/10/17(火) 07:50:15エラーメッセージ貼れ。
0514512
2006/10/17(火) 07:53:270515デフォルトの名無しさん
2006/10/17(火) 12:34:08サブクラスの中のどれか一つを生成するメソッドが欲しいんですが、
なにか美しい方法はないでしょうか?
0516デフォルトの名無しさん
2006/10/17(火) 12:47:40なんだか不思議な実装だけど、
サブクラスの位置にあるクラスをFactoryに見立ててみるといいかも
0517デフォルトの名無しさん
2006/10/17(火) 22:33:48美しくないと思っている方法を示してもらわないと、話にならん。
0518デフォルトの名無しさん
2006/10/17(火) 23:42:29なんだかおそろしい記事が Wikipedia に挙がっていたので、
僭越ながら削除させてもらった。
0519デフォルトの名無しさん
2006/10/18(水) 00:04:410520デフォルトの名無しさん
2006/10/18(水) 00:08:03どうせなら
> virtualにするとメモリリークにならない
っつーのも説明加えちゃえば?
これってC++の項目なんしょ?
0521デフォルトの名無しさん
2006/10/18(水) 00:08:12GCでは管理できないハンドルの類まで適切に処理できるし。
0522デフォルトの名無しさん
2006/10/18(水) 00:11:21> Bの領域分しか解放されない
ワロス
0523デフォルトの名無しさん
2006/10/18(水) 00:14:15>520
Category:C++やCategory:C言語に入っていないあたり、
C/C++以外も対象になると意図されているのではないかと思う。
0524デフォルトの名無しさん
2006/10/18(水) 00:14:450525デフォルトの名無しさん
2006/10/18(水) 01:11:32それかいた奴アホ過ぎw
0526デフォルトの名無しさん
2006/10/18(水) 01:18:55すげぇ、最新版と変更前の版がひとっつも成長してねぇww
0527デフォルトの名無しさん
2006/10/18(水) 15:43:42なお似たようなものにスマートポインタ(smart pointer)というものがあるが、これはライブラリとして提供されるガベージコレクションの一種である。
0528デフォルトの名無しさん
2006/10/18(水) 17:00:10結構あちこちの板でWikipediaスレを見かけるんだが。
0529デフォルトの名無しさん
2006/10/18(水) 19:45:160530デフォルトの名無しさん
2006/10/18(水) 19:59:480531デフォルトの名無しさん
2006/10/18(水) 20:02:57http://www.tietew.jp/cppll/archive/10658
http://www.tietew.jp/cppll/archive/10668
そこにも書いてあるが、C++ではデストラクタが非仮想なら、
それは派生するなということを意図すると捉えるのが一般的。
0532デフォルトの名無しさん
2006/10/18(水) 20:21:02int x[600][400];
と宣言して取り敢えずプリント文だけ書いたら普通に通ったんだけど、
int x[600][400], y[600][400];
と、二つ二次配列を宣言したら落ちるようになってしまった。。何故・・・?
普段はmallocとかやってるから、これを改めてやったら出来ない&分からなくて・・・。orz
0533デフォルトの名無しさん
2006/10/18(水) 20:25:360534デフォルトの名無しさん
2006/10/18(水) 20:27:470535532
2006/10/18(水) 20:45:14-----------start-----------------
void main(int argc, const char **argv)
{
int x[600][400],y[600][400];
printf("test");
}
------------end-----------------
です。
確かに試しに32とかにしてみたら、バグ吐きませんでした。。
以前もっとでかい値で出来たのは勘違いだったのかな。
かなりC++触ってなかったので、スタック不足とは初歩的なミスを。恐縮です。。
0536デフォルトの名無しさん
2006/10/18(水) 20:54:44エビステーメーうざぁ
0537デフォルトの名無しさん
2006/10/18(水) 21:03:43以前はオプションでスタックサイズ弄ってたんだろ
0538デフォルトの名無しさん
2006/10/18(水) 21:19:560539デフォルトの名無しさん
2006/10/19(木) 00:52:36> C++ではデストラクタが非仮想なら、それは派生するなということを意図する
それ古い。
多態を意図しない基本クラスはprotected非仮想デストラクタにするのが
最近の主流。C++ Coding StandardsかExceptional C++ Style読め。
0540デフォルトの名無しさん
2006/10/19(木) 01:07:50こう、多態とかがやりたいんじゃなく、
ちょっとメンバ関数を1つ増やしたい、とか言う簡単な派生もやっちゃいけないの?
そうなると、継承は多態のために存在することになっちゃうけど、どうも違う気がする。
0541デフォルトの名無しさん
2006/10/19(木) 02:02:32そのクラスのインスタンスが作れなくなりますが
0542デフォルトの名無しさん
2006/10/19(木) 02:08:50何で? 派生クラスは普通にインスタンス作れるよ。
基本クラスはインスタンス作らないほうがいいから、別にインスタンス
作れなくてもOK。
0543デフォルトの名無しさん
2006/10/19(木) 02:28:43> 基本クラスはインスタンス作らないほうがいい
この前提はどこから出てきたの?
0544デフォルトの名無しさん
2006/10/19(木) 02:33:130545デフォルトの名無しさん
2006/10/19(木) 02:49:35ごめん。 >539でずらしてた。
派生禁止ならクラス内クラスが簡単で良いと思う。
0546デフォルトの名無しさん
2006/10/19(木) 03:18:41ストール万のデコにキスしてやりたい。
0547デフォルトの名無しさん
2006/10/19(木) 03:19:28すまん、ストラップのファッキンハゲと間違えた。
0548デフォルトの名無しさん
2006/10/19(木) 03:22:20http://sourceforge.net/forum/forum.php?forum_id=624660
0549デフォルトの名無しさん
2006/10/19(木) 03:52:41「publicな実装継承は悪か?」といわれれば、yesだ。
Liskovの置換原則を満たさないクラスはバグの温床になる。
基底クラスが通常の具体クラスの場合は特に。
面倒でも、private継承して必要なメンバ関数をusingでpublicに昇格させるか、
実装クラスのオブジェクトをデータメンバにして転送関数を書くかするべき。
public継承はおよそ多態のためのものだが、他の継承はそうではない。
多態でないpublic継承の例としては、ポリシークラスが有名。
元来想定されていた使い方ではないが非常に優れたhackではある。
ほかには、STLの反復子タグとかかな。
これらを踏まえて、自分の手の届く範囲内で逸脱すればいいんでは。
もっとも、適当な期間メンテするコードなら、
筋のよいコードを書いた方が結局楽だとは思う。
間違ったコードを書いてもコンパイラにスルーされるなんて面倒だ。
0550デフォルトの名無しさん
2006/10/19(木) 04:10:27ぶっちゃけ実務上の生産性に寄与しない概念なんかシカトでぷーですよ。
そんなネタは言語屋だけでもっと清廉潔白な言語でもってやっとくれ。
0551(^-^) ◆MONSOON/qo
2006/10/19(木) 04:44:18C++の機能を勉強しない方がいいとおもうよ
なぜならたくさんあって複雑だからだ
コンパイラも大変で間違えるかもしれないからだ
簡単な、よく知られている文で書けるならそっちの方が効率がいいとおもうよ
0552デフォルトの名無しさん
2006/10/19(木) 05:57:370553デフォルトの名無しさん
2006/10/19(木) 10:18:04そうやって自分の無知を棚に上げて他人のコードを難解だとほざく馬鹿がいると面倒なんだよね。
0554デフォルトの名無しさん
2006/10/19(木) 10:45:44同感。
上で話してるような最低限のレベルまで知らないアホが多すぎ
今どきはC#とかjavaが始めての言語って奴がいっぱい入ってきて大変
0555デフォルトの名無しさん
2006/10/19(木) 11:54:35>>>540
>「publicな実装継承は悪か?」といわれれば、yesだ。
>Liskovの置換原則を満たさないクラスはバグの温床になる。
540のは明らかにLiskovの置換原則をを満たしていると思うが。
0556デフォルトの名無しさん
2006/10/19(木) 12:27:15sand-bosにもないんだな
0557デフォルトの名無しさん
2006/10/19(木) 12:47:16規格上、これができないらしい
template < typename T>
class Foo
{
friend T ;
} ;
自分には、できない理由が分からないわけだけど。
事実、多くのコンパイラで、この規格を無視しているし。
C++0xでは、規格でも、できるようになるとか聞いた気がする。
0558デフォルトの名無しさん
2006/10/19(木) 17:21:02クラスにすればそのメモリーにアクセスできなくなると聞いたんだが、
チートツールはアクセスしてるんじゃね?
0559デフォルトの名無しさん
2006/10/19(木) 17:31:530560デフォルトの名無しさん
2006/10/19(木) 19:56:540561デフォルトの名無しさん
2006/10/19(木) 20:52:13つうかできたらカプセル化も糞もなくならね?
0562デフォルトの名無しさん
2006/10/19(木) 22:05:06普通private継承じゃなくて包含(合成)じゃ……
さったーもお勧めしてるよ
0563デフォルトの名無しさん
2006/10/19(木) 22:10:59private 継承と包含は意味も効果も違うんだから、都合に応じて使い分けるだけだ。
「普通」とかいういい加減な基準は要らない。
0564デフォルトの名無しさん
2006/10/19(木) 22:12:36Foo が T のメンバにアクセスできるようになるのならそう思うが、
このコードの意図は逆なのでそうは思わない。
0565デフォルトの名無しさん
2006/10/19(木) 23:37:13class A,B;
void f(A,B);
//void f(B,A); //これでも同じことはできる
引数がもっと増えると組み合わせ数が爆発するが
良い指針ってあるだろうか
とりあえずデフォルト引数ありの引数は後ろに設定すべきだと思う
0566デフォルトの名無しさん
2006/10/19(木) 23:53:390567デフォルトの名無しさん
2006/10/20(金) 00:46:37どんな書き方だと発生しないの?ルールありますか?
0568デフォルトの名無しさん
2006/10/20(金) 00:52:21発生するケースはいろいろ。
発生するケースに応じて発生しない書き方は変わる。
ルールは規格として決められている。
ただしコンパイラの実装によって省略しても良いとされている箇所もある。
0569デフォルトの名無しさん
2006/10/20(金) 00:59:18難しいですねー
まじでどんな書き方するとコピコンと一時オブジェクトできないか見極めるの難しいよ
vector<string>::iteratorとかもコピコン走るの?
0570デフォルトの名無しさん
2006/10/20(金) 01:05:10いや、別に。普段気にしなくていいし。
vector<string>::iterator がクラスで実装されていれば、
もちろん iterator のコピーコンストラクタが使用される。
何を気にしてるのか、さっぱり伝わってこない。
0571デフォルトの名無しさん
2006/10/20(金) 01:16:08全部ポイントでやり取りしたいのに
勝手にコピーとかされると困るC言語だとそんなことないのに
C++って変ですげー困ってる
0572デフォルトの名無しさん
2006/10/20(金) 01:24:33素直にポインタ使えば?
リソース管理が面倒かもしれんけど。
0573デフォルトの名無しさん
2006/10/20(金) 01:24:50struct A {
// なんちゃらかんちゃら
} a, b;
a=b;
コピーされるぞ?
0574デフォルトの名無しさん
2006/10/20(金) 01:29:29C と同じコーディングをしてればコピーが増えることはない。
C++ 流にコーディングするならコピーコンストラクタの動作は
意識しなければならない。しっかりした知識が身に付けば、
コピーコンストラクタの動作するタイミングにはちゃんと
根拠があることがわかる。そんなに不条理なタイミングで動作はしない。
なんだか自分の知らないことを信用できないだけに見えなくもない。
「すげー困ってる」具体例を説明できる?
0575デフォルトの名無しさん
2006/10/20(金) 01:31:44コピーコンストラクタのオーバーヘッドを気にしてるのか?
コピーコンストラクタを正しく実装できないから呼ばれると都合悪いのか?
とりあえず、コピコンとかいう俺様用語を使うのをやめてくれ。
0576デフォルトの名無しさん
2006/10/20(金) 01:53:19そこんとこは C と C++ では何も変わらない。
>勝手にコピーとかされると困るC言語だとそんなことないのに
>C++って変ですげー困ってる
同じコードで C だとコピーされないのに C++ だとコピーされる
なんてあり得ない。
0577デフォルトの名無しさん
2006/10/20(金) 02:03:11OK、喪前はC++に向いてない。
縁が無かったと思って次の道に進め。
0578デフォルトの名無しさん
2006/10/20(金) 02:03:17構造体の代入が可能なCとの互換性のため
ポインタでも参照でもお好きなほうをどうぞ
0579デフォルトの名無しさん
2006/10/20(金) 02:33:44>「すげー困ってる」具体例を説明できる?
よく考えもせずに勢いで書き込んだら激しく突っ込まれてすげー困ってる>571
0580デフォルトの名無しさん
2006/10/20(金) 07:56:30--
>「すげー困ってる」具体例を説明できる?
激しく突っ込まれてすげー困ってる。
--
って書こうと思ったのに……
0581デフォルトの名無しさん
2006/10/20(金) 09:55:40出遅れて正解。
0582デフォルトの名無しさん
2006/10/20(金) 11:47:080583デフォルトの名無しさん
2006/10/20(金) 12:31:110584デフォルトの名無しさん
2006/10/20(金) 13:12:20次に行こうぜ
0585デフォルトの名無しさん
2006/10/20(金) 16:22:02Javaの静的初期化子(static { ... })に相当するC++の書きかたってありますか?
0586デフォルトの名無しさん
2006/10/20(金) 18:43:49C++で
A *objectA = new A();
.....
delete objectA;
として、Visual C++2005でデバッグしていたのですが、
delete objectAした後でもクイックウォッチでみてみるとobjectAが解放されていないっぽいのです。
それどころかdeleteした後もobjectA内の関数が呼べてしまいます。ふつうは呼ぼうとした時点でエラーが起こる物ではないでしょうか。
呼べてしまったobjectA内の関数の中の途中の処理で結局は落ちてしまうのですが、ふつう呼ぶ段階で落ちるはずのような気が。
delete objectA;
したあとは
objectA = NULL;
0587デフォルトの名無しさん
2006/10/20(金) 18:45:24delete objectA;
したあとは
objectA = NULL;
した方がいいのでしょうか。
また、
delete objectA;
した後でまたdelete objectA;してしまうとどうなるのでしょうか。
また、
objectA = NULL;
の後で
delete objectA;
するとどうなるのでしょうか。すみません、基本がわかってませんね・・・
0588デフォルトの名無しさん
2006/10/20(金) 18:51:550589デフォルトの名無しさん
2006/10/20(金) 18:55:12マネージコードか? それともアンマネージコードか?
0590デフォルトの名無しさん
2006/10/20(金) 19:01:27開放されていないんじゃなくて、開放した後にわざわざ
メンバの値を吹っ飛ばす必要がないだけ。
delete後も非仮想メンバ関数が呼べるのは、多くの処理系で
非仮想メンバ関数の呼び出しが第一引数の前に
オブジェクトのポインタを渡すように実装しているから。
0591デフォルトの名無しさん
2006/10/20(金) 20:18:05念の為言っとこう。
0592デフォルトの名無しさん
2006/10/20(金) 20:26:120593デフォルトの名無しさん
2006/10/20(金) 20:52:20ッッガ
0594デフォルトの名無しさん
2006/10/20(金) 21:36:44>ふつう呼ぶ段階で落ちるはずのような気が。
C / C++ では、解放済みのメモリを利用するのはエラーではなく、
何が書かれているか、誰が使っている場所を上書きするか、
その結果プログラムがどういう動作をするか完全に未保障なだけ。
0595デフォルトの名無しさん
2006/10/20(金) 22:33:24>VC++ は生産性が低いうえ、使用環境が WindowsOS に、ほぼ限定されてしまいます。さらに「安全性」が常に問題となります。(.NETなしの話)
>アマチュアが作った C++ アプリなど、とても自マシンで実行する気になれません。企業ブランド等の「箔付け」が必要でしょう。
C++ってそんなに危険なんですか?
0596デフォルトの名無しさん
2006/10/20(金) 22:38:42.Net でも Java でも C++ と同じくらい危険なことはできるでそ。
アプレットとか ClickOnce とかと混同してるんじゃない?
0597デフォルトの名無しさん
2006/10/20(金) 22:41:03書いたヤシは精密なデバッグをやるC++ユーザーを知らんのだろう。
もう一つはスケジュールの管理が重視される企業の製品の実態を知らんのだろう。
時間を湯水のごとく使ってリークを潰していくアマチュアの手法を企業では取れない。
0598デフォルトの名無しさん
2006/10/20(金) 22:42:160599デフォルトの名無しさん
2006/10/20(金) 23:01:51しかも企業ブランド云々とオープンソース云々が脈絡もなく続けて出てくる。わけわからん。
0600デフォルトの名無しさん
2006/10/20(金) 23:08:07たぶん、WEB見てる時の「Java アプレットは安全である」
「誰が作ったかわからんActiveXコントロールは怖くて実行できん」
という事実を使って、強引に Java >>> C++ と主張したかったんじゃ
ないだろうか。
「街中で包丁振り回してる人がいたら怖いでそ?」
「だから食事は缶詰が一番」
という理屈。
0601デフォルトの名無しさん
2006/10/20(金) 23:08:23スルーじゃないのか?
0602デフォルトの名無しさん
2006/10/20(金) 23:12:130603デフォルトの名無しさん
2006/10/20(金) 23:15:32これもどうだろう?
LinuxやGCCはJavaで作られているわけではないし(C++でもなくCだけどさ)。
あと、コメントを受け付けていないあたりがチキンだな。
0604デフォルトの名無しさん
2006/10/20(金) 23:17:20それぐらいJAVAはすばらしい技術です
0605デフォルトの名無しさん
2006/10/20(金) 23:32:13なぜC#のように新しい言語が出るのでしょう。
Javaの良さを理解できないからでしょうか?違います。
C++にはC++の、C#にはC#の良さがあるからです。
(C#を出したのは例えで深い意味は無い)
0606デフォルトの名無しさん
2006/10/20(金) 23:45:34ってじっちゃが言ってた!!
0607デフォルトの名無しさん
2006/10/21(土) 00:07:18普通の人はjavaなりc#に流れる。
でも、時に変人はc++のテンプレートに魅了されてしまって抜け出せない。
何とか抜け出そうとdを始めるが中途半端なできばえに腹が立つ。そして、c++から抜け出せないまま。
0608デフォルトの名無しさん
2006/10/21(土) 00:11:580609デフォルトの名無しさん
2006/10/21(土) 00:18:08ぜんぜん違う
0610デフォルトの名無しさん
2006/10/21(土) 00:22:280611デフォルトの名無しさん
2006/10/21(土) 01:01:52つーかゲームだとまだC++以外にほとんど選択の余地無いんすけど。
業務でC#とか使いたいッす。
0612デフォルトの名無しさん
2006/10/21(土) 01:35:35現状のJavaは初心者向けのデチューン済み言語としか思えない
0613デフォルトの名無しさん
2006/10/21(土) 01:53:44それが大事だよ。
C++はその気になれば人を殺せる言語だからなー。
0614デフォルトの名無しさん
2006/10/21(土) 01:59:11因みに、C#はJavaに毛の生えた教育用言語だと思ってるが。。。
0615デフォルトの名無しさん
2006/10/21(土) 02:16:00C++か?
えー?
0616デフォルトの名無しさん
2006/10/21(土) 02:35:370617デフォルトの名無しさん
2006/10/21(土) 02:41:420618デフォルトの名無しさん
2006/10/21(土) 02:48:250619デフォルトの名無しさん
2006/10/21(土) 02:49:00C=J.S.Bach/C++=Beethoven/Java=小○哲哉/C#=つ○く
といったところか。
0620デフォルトの名無しさん
2006/10/21(土) 03:35:12C# は違うだろ。生のポインタも自由に使えるし。
0621デフォルトの名無しさん
2006/10/21(土) 03:45:14Javaが教育用言語だと?あの豊富なライブラリをわざわざ学習用に用意
すると思うのか馬鹿。
0622デフォルトの名無しさん
2006/10/21(土) 03:48:01×Javaが教育言語だと?
○C#が教育言語だと?
0623デフォルトの名無しさん
2006/10/21(土) 08:25:23まあ趣味での話だけどな
0624デフォルトの名無しさん
2006/10/21(土) 09:28:500625デフォルトの名無しさん
2006/10/21(土) 09:49:17Cでも一緒だがメモリの管理だな、これがちゃんとできる奴以外にコード書いて欲しくない。
0626デフォルトの名無しさん
2006/10/21(土) 09:54:15その伝で行くと、世のプログラマを名乗っている香具師らの大抵は失職の憂き目に遭うな。
0627デフォルトの名無しさん
2006/10/21(土) 10:21:16大変ありがたい事だ。
0628デフォルトの名無しさん
2006/10/21(土) 11:57:450629デフォルトの名無しさん
2006/10/21(土) 13:54:18とか。
0630デフォルトの名無しさん
2006/10/21(土) 14:15:46リークが起きてても納期が来たら収めないといけないから。
0631デフォルトの名無しさん
2006/10/21(土) 14:17:260632デフォルトの名無しさん
2006/10/21(土) 14:18:32wchar_t *の文字列を渡すとどうなるんでしょうか。
うまくいかない場合は、どうやって変換すればよいのでしょうか。
0633デフォルトの名無しさん
2006/10/21(土) 14:40:57コンパイルエラー起きるだけだろ
.c_str()してchar*で渡せよ}{age
0634デフォルトの名無しさん
2006/10/21(土) 14:53:58ここまで大阿呆な回答も珍しいな。
wcstombs()あるいは類似するものを使ってワイド文字列からマルチバイト文字列に変換して食わせるのが常道。
0635デフォルトの名無しさん
2006/10/21(土) 15:11:460636デフォルトの名無しさん
2006/10/21(土) 15:43:12libxmlがさへんなxmlCharとかいうので扱ってるんだけど
これってC++のクラス作って変換したいんだけどどうやって
やるの?
サンプルあった教えてください
0637デフォルトの名無しさん
2006/10/21(土) 16:55:14なんであんなに命名規則が絶望的にわかり辛くて使いにくいの?
0638デフォルトの名無しさん
2006/10/21(土) 16:57:54ありがとうございます。うまくいきました。
しかし調べてみたらwchar_tって国際化対応には心許ないみたいですね。
それ以外に関しても、C++標準ライブラリのみで十分な国際化を目指すのは無理があるんでしょうか。
0639デフォルトの名無しさん
2006/10/21(土) 17:43:25設計されたのが10年近く前だからだと思う。
0640デフォルトの名無しさん
2006/10/21(土) 17:45:16「十分な」って具体的にどういうこと?
0641デフォルトの名無しさん
2006/10/21(土) 17:48:160642デフォルトの名無しさん
2006/10/21(土) 18:31:40具体的に国際化のどの側面が必要なのか書かないと
あまり有用な回答ができそうにない
プログラム内部で扱う文字コードが UTF-8 なのか UTF-16 なのかによっても
国際化の各々の側面についてできるできないの答えが異なるし
0643デフォルトの名無しさん
2006/10/21(土) 18:32:540644デフォルトの名無しさん
2006/10/21(土) 18:43:230645デフォルトの名無しさん
2006/10/21(土) 18:47:57失礼シマスタ
0646デフォルトの名無しさん
2006/10/21(土) 22:59:00エラー内容ですが、二項演算子 '==' : 型 'class D<class A>' の右オペランドを扱う演算子は定義されていません
どこがダメなのか、教えていただけないでしょうか?
お願いします。
#include <iostream>
using namespace std;
class A{public: virtual void f(){cout << "B::f()" << endl;}};
template<class T> class D{
T* pt;
public:
D(T *t = 0) : pt(t){}
T* operator->() const{return pt;}
T& operator*() const {return *pt;}
template<class Y>bool operator==(const Y *py) const{cout << "---非friend関数---" << endl;return py == pt;}
template<class Y>inline friend bool operator==(const Y *py, const D &pd){cout << "---friend関数---" << endl;return py == pd.pt;}
};
void main(){
A *pa = new A();
D<A> sp1 = pa;
sp1->f();(*sp1).f();*sp1 = *pa;
if(sp1 == pa)cout << "sp1 == pa" << endl;
ココif(pa == sp1)cout << "pa == sp1" << endl;
}
0647デフォルトの名無しさん
2006/10/21(土) 23:03:58gcc3.4.2(MinGW)では通ったが?
0648デフォルトの名無しさん
2006/10/21(土) 23:14:09VC++2005EE でも問題なくコンパイル、実行できた。
0649デフォルトの名無しさん
2006/10/21(土) 23:14:36すみません。初心者なもんで、わかりません。
ソフトはMicrosoft Visual C++ 6.0を使ってます。
0650デフォルトの名無しさん
2006/10/21(土) 23:18:07VC6 はメンバ関数テンプレートが使えないんじゃなかったかね?
0651デフォルトの名無しさん
2006/10/21(土) 23:21:20そうなんですか?
確かに、VC6を使うとは本には書いてませんでしたw
無理なんでしょうか?
0652デフォルトの名無しさん
2006/10/21(土) 23:49:030653デフォルトの名無しさん
2006/10/21(土) 23:53:58ところで>>650はマジ?
煽りとかじゃなくて使ったことないから信じらんない
0654デフォルトの名無しさん
2006/10/21(土) 23:57:22つーかそもそも標準に準拠してないし。
0655デフォルトの名無しさん
2006/10/22(日) 00:05:17え? VC6ってダメなんですか?
今なら何を使ったらいいんでしょうか?
0656デフォルトの名無しさん
2006/10/22(日) 00:11:47プログラミングしたくてBorland C++ Compiler 5.5をダウンロードして
解凍したんですが、そこからどうすれば使えるのか分かりません。
OSはwindowsXPです。
0657デフォルトの名無しさん
2006/10/22(日) 00:18:140658デフォルトの名無しさん
2006/10/22(日) 00:18:35bcc32.cfg と ilink32.cfg でググれカス。
0659デフォルトの名無しさん
2006/10/22(日) 00:19:56商用利用もおkなんだから ExpressEdition を使え。
0660デフォルトの名無しさん
2006/10/22(日) 00:20:38高校数学の本を買ったのですが
足し算ができないので理解できません
どうしたらいいのでしょうか
って言ってるようなもんだ
プログラムはそんなに簡単なもんじゃないよ
0661デフォルトの名無しさん
2006/10/22(日) 00:24:51現状に満足してれば無理して乗り換えなくてもいいと思うんだが。
古いBCBは
0662デフォルトの名無しさん
2006/10/22(日) 00:28:58そういえば VC6 にはあったIDE内蔵のプロファイラがその後のバージョンではなくなってるって
聞いたことがあるんだけど、いまだにプロファイラはなくなったままなん?
0663デフォルトの名無しさん
2006/10/22(日) 00:30:53それは致命的だと思うけど。
コンパイラを入れ替えるつう手もあるけど、それよりも
VC++2005 EE使う方が簡単だよね。
0664デフォルトの名無しさん
2006/10/22(日) 00:34:290665デフォルトの名無しさん
2006/10/22(日) 00:40:070666デフォルトの名無しさん
2006/10/22(日) 00:43:130667デフォルトの名無しさん
2006/10/22(日) 00:43:280668デフォルトの名無しさん
2006/10/22(日) 00:53:160669デフォルトの名無しさん
2006/10/22(日) 00:57:45という話をどこかで聞いたことが在るが、ガセだろうな
0670デフォルトの名無しさん
2006/10/22(日) 01:30:53正直現状のGCCの性能ではVCやICCには到底勝てない。
GCCが極端に劣ってるわけじゃないし、テンプレート周辺ではむしろ勝ってたりもするのだけど、
トータルではやはり金出して買う環境には…
0671デフォルトの名無しさん
2006/10/22(日) 01:36:28やっぱりUTF扱うにはiconvしかないのかな?
自作したいけどなんかいい資料ないですか?
0672デフォルトの名無しさん
2006/10/22(日) 01:37:49UNICODEコンソーシアムからコード表引っ張ってきて、片っ端からstd::mapに突っ込んでしまえ。
0673デフォルトの名無しさん
2006/10/22(日) 01:41:22>>669の=は代入演算子と考えるんだ。
つまりgccは最適化オプション満載だと判定されると
HDを走査してiccを探し出し、リダイレクトすr(ry
0674デフォルトの名無しさん
2006/10/22(日) 02:12:20http://rfc-jp.nic.ad.jp/rfc/rfc2279.txt
http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm
http://kamoland.com/comp/unicode.html
0675デフォルトの名無しさん
2006/10/22(日) 02:12:26こんなのものある。
http://tricklib.com/cxx/ex/babel/
自作するんなら >>672
Windows環境限定でいいならWindows API の MulitByteToWideChar(CP_UTF8,...) とか Mlang
0676デフォルトの名無しさん
2006/10/22(日) 02:20:48> (C++でもなくCだけどさ)
だからだろ。
0677デフォルトの名無しさん
2006/10/22(日) 11:08:110678デフォルトの名無しさん
2006/10/22(日) 13:41:450679デフォルトの名無しさん
2006/10/22(日) 13:43:320680デフォルトの名無しさん
2006/10/22(日) 14:03:52.NET Frameworkを使わずに作れば良い。
0681デフォルトの名無しさん
2006/10/22(日) 14:06:330682デフォルトの名無しさん
2006/10/22(日) 14:09:14どういうこと?
0683デフォルトの名無しさん
2006/10/22(日) 14:27:240684デフォルトの名無しさん
2006/10/22(日) 15:15:310685デフォルトの名無しさん
2006/10/22(日) 15:26:590686デフォルトの名無しさん
2006/10/22(日) 15:36:40void func1();
void func2();
}
というようなクラスがあったとしてこのfunc1とfunc2という関数をインライン・アウトラインをうまく分ける方法ありませんでしょうか?
ヘッダに上の記述があって.cppに関数本体があるとしたらそれを.inlとかの拡張子にファイルに丸々コピーして先頭にinlineつけて
マクロでUSE_INLINEとかで.inlファイルをヘッダで読み込むか判断して関数全部入れ替えるのは簡単ですが部分的にうまいこと分ける方法
ありませんか?
0687デフォルトの名無しさん
2006/10/22(日) 15:46:31その状態で cpp と inl の間で関数を移動させればいいはずなんだが、
「うまいこと」ってのはどういうことだ?何が気に入らない?
0688デフォルトの名無しさん
2006/10/22(日) 15:52:02これもExceptional C++ Styleにあったな。
必ずinline にする / inlineにしない方法はないって。
0689デフォルトの名無しさん
2006/10/22(日) 15:54:310690デフォルトの名無しさん
2006/10/22(日) 16:55:30VC6の頃からあったぞ。
0691デフォルトの名無しさん
2006/10/22(日) 17:27:190692デフォルトの名無しさん
2006/10/22(日) 17:39:31プログラマが無い知恵を絞るよりコンパイラに任せたほうがいいってことじゃない?
0693デフォルトの名無しさん
2006/10/22(日) 17:48:12そうなのか、オレは10行程度で他の関数呼ばないものはinlineに置いて
たけどやめるか
0694デフォルトの名無しさん
2006/10/22(日) 17:55:54最適化を目的としたinline宣言はほぼ無意味
0695デフォルトの名無しさん
2006/10/22(日) 18:27:26いや、それはべつの翻訳単位でもinlineできるようにするためのものだから。
もろにinlineとかかわってくるわけだが。
まあ、そもそもVCは普通のinlineを無視するがな
0696デフォルトの名無しさん
2006/10/22(日) 18:30:020697デフォルトの名無しさん
2006/10/22(日) 18:31:180698デフォルトの名無しさん
2006/10/22(日) 18:33:50implなclassとか、実装も全部その場に書いてしまいたい。
0699デフォルトの名無しさん
2006/10/23(月) 02:59:200700デフォルトの名無しさん
2006/10/23(月) 03:18:36std::wstringがあるのに...
0701デフォルトの名無しさん
2006/10/23(月) 07:16:48受け付けるのと、あと what() の型が char 固定ってのが問題だな。
なんでかっていうと、標準委員会の日本人メンバーがサボってたからじゃね?
未だにオフィシャルな議題にも挙がってないっぽい。
0702デフォルトの名無しさん
2006/10/23(月) 07:17:46http://pc8.2ch.net/test/read.cgi/tech/1142667446/358-
0703デフォルトの名無しさん
2006/10/23(月) 10:23:55例外クラスに持たせる std::string はエラーの識別子としてのみ用いて
その識別子から実際の human readable なエラーメッセージへの message catalog を
持て,ということなんじゃないですかね?
ただし標準の範疇で message catalog の機能を担当するのが
恐らく std::messages で,これがイマイチしっくりこないと気が個人的にはしますが.
あと,エラーの文脈に関する情報などもう少しリッチな情報を
例外クラスに持たせたければ実装の側で適当にフォーマット決めて,
という姿勢なんでしょう.
http://tinyurl.com/y5k8ux にある Peter Dimov 氏の投稿の Summary が明快かと.
0704デフォルトの名無しさん
2006/10/23(月) 16:43:190705デフォルトの名無しさん
2006/10/23(月) 19:34:07std::stringだと困らないの?
0706デフォルトの名無しさん
2006/10/23(月) 20:04:38メモリにとっても優しくなさそうだと思った。
0707デフォルトの名無しさん
2006/10/23(月) 21:27:590708デフォルトの名無しさん
2006/10/23(月) 22:40:18ファイル入出力関係はマルチバイト文字⇔ワイド文字で格闘してる
0709デフォルトの名無しさん
2006/10/23(月) 22:40:51"Remarks: The message may be a null-terminated multibyte string (17.3.2.1.3.2), suitable for conversion and display
as a wstring (21.2, 22.2.1.4)."
って書いてあるのを見つけた。 wstring に変換して表示できるマルチバイト文字列でもいいと
書かれている。
string を受け取る stdexcept の例外群のコンストラクタには
"Postcondition: strcmp(what(), what_arg .c_str()) == 0."
と書いてあるので、 what() と同じくこちらも wstring に変換して表示できるマルチバイト文字列でもいい
ということになる。
とりあえず、まったく失念していたわけではないようだ。
でもワイドキャラクタからマルチバイトへの変換って、標準で決まってるの?
ロケールによって決まるんだったら、 what() の戻り値にどのロケールを
適用すればいいのかわかんないよね?
0710デフォルトの名無しさん
2006/10/23(月) 23:01:500711デフォルトの名無しさん
2006/10/23(月) 23:11:380712デフォルトの名無しさん
2006/10/23(月) 23:34:04ワイド文字をネイティブで扱う処理系があったっていいじゃない。
UTF-16がネイティブなWindowsとかWindowsとかWindowsとか。
0713デフォルトの名無しさん
2006/10/23(月) 23:38:19参考になるサイトとかないですか?
0714デフォルトの名無しさん
2006/10/23(月) 23:50:04そうは言っても、stdio/iostreamはマルチバイトに変換することを前提にしているようだし……。
0715デフォルトの名無しさん
2006/10/24(火) 00:05:23codecvt
ってのもあったね。
使った事ないけど・・・
0716デフォルトの名無しさん
2006/10/24(火) 00:46:41たしかにそりゃそうだけど。
VC8だと、wcoutは事実上使えないし。
まあ、コンソールに出力するようなことはないから、どうでもいいんだけど。
0717デフォルトの名無しさん
2006/10/24(火) 01:02:06待って、まだ9xを捨てないで。
0718デフォルトの名無しさん
2006/10/24(火) 01:10:06http://www.amazon.com/exec/obidos/ASIN/0321227255/
これ読んでるだが、全然boostの使い方しか説明されてないんだけど
オレはboostと同じようなテクニックが欲しいのになんでだ?
0719デフォルトの名無しさん
2006/10/24(火) 01:11:33それはBoostを使っての説明本だし、当然。
Modern C++ DesingがLokiを使って説明しているように。
テンプレートに関する知識を身につけたいなら、
「C++ Templates」を読むことをお勧めする。
0720デフォルトの名無しさん
2006/10/24(火) 01:19:38VCってwcout使えなかったけ?(imbueすれば)
GCCだとだめんなんだが...
0721デフォルトの名無しさん
2006/10/24(火) 01:25:482バイト文字を出力しようとすると、おそろしく奇妙なことになる。
ttp://rpgincpp.cocolog-nifty.com/blog/2006/02/_1_be7f.html
ロケールって、絶対足枷になっていると思うんだ。
何かするたびに、現在設定されているロケールを見て挙動を変えないといけないんだから。
0722デフォルトの名無しさん
2006/10/24(火) 01:31:580723デフォルトの名無しさん
2006/10/24(火) 01:54:08SP1で直ってるといいな...
wcstombsで
::setlocaleじゃなくてC++のロケール使ってるけど
CのロケールとC++のロケールの関係ってどうなってんだろ...
0724デフォルトの名無しさん
2006/10/24(火) 15:46:43何か方法があったら教えてください。よろしくお願いします。
0725デフォルトの名無しさん
2006/10/24(火) 16:17:38template< bool Left = true > shift_op {
template< typename T, typename X >
T operator()( T t, X x ) { return T << x; }
};
template<> shift_op< false > {
template< typename T, typename X >
T operator()( T t, X x ) { return T >> x; }
};
shift_op<> shift; // 左シフト
int a = shift( 8, 2 );
0726デフォルトの名無しさん
2006/10/24(火) 18:24:56std::locale::globalを呼ぶと、内部で対応するようにstd::setlocaleを呼ぶと定められている。
0727デフォルトの名無しさん
2006/10/24(火) 22:58:17レスありがとうございます。
でもコンパイルが通らない…
こういうtemplateの使い方は初めてみたのですが、いろいろ弄ってみようかと思います。
0728デフォルトの名無しさん
2006/10/24(火) 23:13:54関数の中のTはtの間違いだろ。
0729724
2006/10/24(火) 23:30:51ありがとうございました。
0730デフォルトの名無しさん
2006/10/25(水) 00:13:06参照に書き換えたいんだけどどうやってやればいいのですか?
func A(){
C *c;
funcB(&c)
}
funcB(C **c){
*c = new C();
}
0731デフォルトの名無しさん
2006/10/25(水) 00:18:55void funcB(C*& c) {
c = new C();
}
0732723
2006/10/25(水) 00:37:23規格書見てみたけど(少し要約)
static locale global(const locale& loc);
の実引数が名前を持っていれば、次を実行する。
std::setlocale(LC_ALL,loc.name().c_str());
そうでない場合は、C現地特性に対する影響は、処理系定義とする。
補足:実引数(locale)に名前がないというのは
loc.name()が"*"のとき。
0733デフォルトの名無しさん
2006/10/25(水) 01:18:23あるプログラムを使用しているのを隠蔽するには
何をすればいいのでしょうか
0734デフォルトの名無しさん
2006/10/25(水) 01:27:200735デフォルトの名無しさん
2006/10/25(水) 01:35:43無理ですかorz
0736723
2006/10/25(水) 01:41:01デバッグしてわかったけど
Cのロケールをデフォルトのものから変更したときに
wcoutのストリームのサイズが0になってるみたい。
だから
std::global(std::locale(""));
std::wcout.rdbuf()->pubsetbuf(0,10000);
見たいな感じでストリームのサイズを変えてやればVC8でも動いたよ。
0737デフォルトの名無しさん
2006/10/25(水) 02:37:28ノードの深いオブジェクト探査してデータ集めるモジュール作ってるんだけど
エラー処理どうしたらいいものか悩んでる。下ようにC()の中でエラーが起きた場合
Aまでもし伝える必要があってこうゆうときって返り値をエラー番号とかにして
引数で参照渡しをするべき?
A(){
B()
}
B(){
C()
}
C(){
D()
}
0738デフォルトの名無しさん
2006/10/25(水) 02:38:570739デフォルトの名無しさん
2006/10/25(水) 02:39:100740デフォルトの名無しさん
2006/10/25(水) 02:50:12Cのデータ構造なめてるから下手にオブジェクトにしても
あんまり効率よくないし
0741デフォルトの名無しさん
2006/10/25(水) 03:14:290742デフォルトの名無しさん
2006/10/25(水) 03:24:370743デフォルトの名無しさん
2006/10/25(水) 03:30:04いや、コストも馬鹿にならんよ?
なんせ片っ端から巻き戻すわけだし。
0744デフォルトの名無しさん
2006/10/25(水) 04:01:21JavaとかC#使ったことありますか?
それを使ってみてから巻き戻るかどうか考えてみてはいかがですか。
0745デフォルトの名無しさん
2006/10/25(水) 04:12:32ガベコレつーか遅延破棄のある言語と一緒にすんなと。
0746デフォルトの名無しさん
2006/10/25(水) 04:27:41744が思いっきり外してるのは確かだけど。
0747デフォルトの名無しさん
2006/10/25(水) 04:30:16違い、ってより、コストがかかる原因だな。
0748デフォルトの名無しさん
2006/10/25(水) 07:29:39そもそも例外なんてそんな頻繁に起きるところに使わないでしょ?
そのコストを気にするものなの?
0749デフォルトの名無しさん
2006/10/25(水) 07:45:120750デフォルトの名無しさん
2006/10/25(水) 09:02:25理解できなくてどうでもよくなったり('A`)
適当な本買うのが一番なんだろうけどな
0751デフォルトの名無しさん
2006/10/25(水) 09:34:07ttp://www.microsoft.com/japan/msdn/columns/csharp/csharp07192001.aspx
0752デフォルトの名無しさん
2006/10/25(水) 10:05:140753デフォルトの名無しさん
2006/10/25(水) 10:13:30正常系のパスでコストがかからなければ、巻き戻すときに
コストがかかるのは別にいいだろ。
例外安全性は、べつに言語の例外機能を使わなくても、
まっとうなプログラムなら戻り値なりなんなり使って
確保しないといけないしね。
0754デフォルトの名無しさん
2006/10/25(水) 14:07:12どのローカルオブジェクトが構築済みか等を全部記録しなきゃ
正常に巻き戻せないのはわかるよね。
0755デフォルトの名無しさん
2006/10/25(水) 14:17:280756デフォルトの名無しさん
2006/10/25(水) 14:24:280757デフォルトの名無しさん
2006/10/25(水) 14:25:41その「多少のコスト」がどれくらいなのか説明しろよ
お前の使ってる処理系でいいから。
0758デフォルトの名無しさん
2006/10/25(水) 19:02:45.asmファイルを見たときに、
call func
のような記述がある場合、(実際はもっと複雑です)
funcはインライン化されていないのでしょうか?
0759デフォルトの名無しさん
2006/10/25(水) 19:05:440760デフォルトの名無しさん
2006/10/25(水) 19:31:17ラップしてくれるライブラリというのはありますか?
0762デフォルトの名無しさん
2006/10/25(水) 19:52:08「インライン関数」を何だと思ってる?
0763デフォルトの名無しさん
2006/10/25(水) 21:19:53call funcってinline化されてるんですか?(*><)
call funcってinline化されてるんですか?(*><)
0764デフォルトの名無しさん
2006/10/25(水) 22:18:14Windowsで動く奴ならADO・OLE DB・ODBCから好きなもの選べば?
0765758
2006/10/25(水) 22:30:16やっぱりcallは関数呼び出しのときに使われるんですね。
そもそも何故このようなことを言い出したかというと
inline int func(int a) {
return a+5;
}
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vccore/html/_core_.2f.ob.asp
これによると「/O1、/O2、または /Ox を使用するときに、/Ob2 は有効になっています」と書いてあり、
これくらい単純な関数ならインライン展開されるだろうと期待して/O2でコンパイルしたにも関わらず、
call funcが見つかりました。
VCTK付属のコンパイラで試した限り、/O2だけではダメで/Ob2をオプションに含める必要があることがわかりました。
0766デフォルトの名無しさん
2006/10/25(水) 22:41:190767デフォルトの名無しさん
2006/10/25(水) 22:41:340768デフォルトの名無しさん
2006/10/25(水) 22:49:14=演算子は継承すると、派生クラスから呼び出されていなようです。
仕様ですか?
0769デフォルトの名無しさん
2006/10/25(水) 23:09:15と思った。
0770デフォルトの名無しさん
2006/10/25(水) 23:10:07規則上の理由は、暗黙的に定義されるoperator =()が基底クラスのそれを上書きするため。
根本的な理由は、スライシング防止のため。基底クラスのoperator =()が派生クラスの分まで面倒を見れるはずが無いから。
0771デフォルトの名無しさん
2006/10/25(水) 23:10:580772デフォルトの名無しさん
2006/10/25(水) 23:13:37> どのローカルオブジェクトが構築済みか等を全部記録しなきゃ
> 正常に巻き戻せないのはわかるよね。
デストラクタにまかせちゃいけないの?
0773デフォルトの名無しさん
2006/10/25(水) 23:14:47ありがとうございます!
0774769
2006/10/25(水) 23:18:420775デフォルトの名無しさん
2006/10/26(木) 00:06:39時代遅れ。
今は(けっこう前から)正常系ではコスト(命令サイクル)がまったく不要な
テーブルアプローチによる実装が主流。ただし Windows 以外。
このアプローチでは、テーブルのぶんコードサイズが少し多めになる。
キャッシュへの影響が気になるところだが、きっちり正常系のコードと
わけて配置されていれば、そこも問題ないと思う。
0776デフォルトの名無しさん
2006/10/26(木) 00:25:05テーブルアプローチとかその辺の設計手法載ってる本ってあります?
あとテーブルアプローチって俗称で正式な名前じゃないですよね?
本当はなんて名前なのですか?
0777デフォルトの名無しさん
2006/10/26(木) 00:35:420778デフォルトの名無しさん
2006/10/26(木) 00:48:46本じゃないけど。
http://www.open-std.org/jtc1/sc22/wg21/
"ISO/IEC TR 18015:2006 C++ Performance - draft TR"
「テーブルアプローチ」はここに載ってる言葉。
これに対して try ブロックに出入りするたびに追加のコードが
挿入される方法は「コードアプローチ」と呼ばれている。
0779デフォルトの名無しさん
2006/10/26(木) 01:00:59"Table" ApproachはIEEEの論文にいろいろ乗ってねオレが無知だったよすまね
でもさ、オレ最近昇進して下のやつらのコード見るんだけどforのネストからtryで抜けたり
してるやついるんだけど、こういうやつらにどんなふうに言うのが正しいんだろうか
0780デフォルトの名無しさん
2006/10/26(木) 01:02:240781デフォルトの名無しさん
2006/10/26(木) 01:04:42もはや達観と諦めの境地
0782デフォルトの名無しさん
2006/10/26(木) 01:30:51こいつそろそろウザイな。誰かキャッチしてやれよ。
0783デフォルトの名無しさん
2006/10/26(木) 01:42:280784デフォルトの名無しさん
2006/10/26(木) 02:36:36>昇進して下のやつらのコード見るんだけど
ダウト。会社から見れば単に押し付ける仕事が増えただけで掃き溜め要員であることには変わりがない。
0785デフォルトの名無しさん
2006/10/26(木) 02:51:120786デフォルトの名無しさん
2006/10/26(木) 03:00:29乙
0787デフォルトの名無しさん
2006/10/26(木) 04:05:49誰も何も言ってない切り口を持ち出して
ダウトもなにも無いと思うが
0788デフォルトの名無しさん
2006/10/26(木) 05:38:290789デフォルトの名無しさん
2006/10/26(木) 06:15:13ついでにいえばこのダウトっての、ずいぶん前にちょっと流行ったやつだよね。
世間の世知辛さを、勝ち組の傲慢さではなく、負け組の湿気をたっぷり含んだ言い方で
妙に偉そうに語るオーラと合わせて考えるに、ちょっと可哀相な感じのオッサンが想像できる。
0790デフォルトの名無しさん
2006/10/26(木) 06:21:540791デフォルトの名無しさん
2006/10/26(木) 09:22:310792デフォルトの名無しさん
2006/10/26(木) 09:49:05お前ら随分暇そうだな
0793デフォルトの名無しさん
2006/10/26(木) 12:29:33例外なんだからさ、スルー、スルー
0794デフォルトの名無しさん
2006/10/26(木) 13:34:19>このアプローチでは、テーブルのぶんコードサイズが少し多めになる。
>キャッシュへの影響が気になるところだが、きっちり正常系のコードと
>わけて配置されていれば、そこも問題ないと思う。
少なくとも Itanium に関しては, table 自体と table のルックアップに関する
コードについてこの仕様が明文化されてますね.
http://www.codesourcery.com/cxx-abi/abi.html#unwind
ICC, g++ がすでにこれを実装済みだったと記憶しています.
あと, catch ブロックのコードですら正常系のプログラムテキストとは別の
"coldな" 場所に配置して,正常系のコードサイズを圧迫しないようにする
実装のコンパイラもあったはずです
(ICC が実装していたはずですが今手元に spec. が無いので確認できない).
0795デフォルトの名無しさん
2006/10/26(木) 13:42:53ページワンだっけ?
0796デフォルトの名無しさん
2006/10/26(木) 17:51:25for(int x = 0;x < X;x++)
p[x] = new Class*[Y];
for(int x = 0;x < X;x++)
for(int y = 0;y < Y;y++)
p[x][y] = new SubClass();
としました
これを解放するために
for(int n = 0;n < X;n++)
for(int m = 0;m < Y;m++)
delete p[n][m];
for(int n = 0;n < X;n++)
delete [] p[n];
delete [] p;
としたらエラーが出ました
何が問題なのでしょうか?教えてください
コンパイラはVC++.NET 2002を使ってます
0797デフォルトの名無しさん
2006/10/26(木) 17:59:060798デフォルトの名無しさん
2006/10/26(木) 18:04:26ソース全部貼れ
コンパイルエラーなのか実行時エラーなのかくらい書け
0799デフォルトの名無しさん
2006/10/26(木) 18:09:100800デフォルトの名無しさん
2006/10/26(木) 18:29:210801デフォルトの名無しさん
2006/10/26(木) 18:59:260802デフォルトの名無しさん
2006/10/26(木) 21:13:06http://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A6%E3%83%88%E3%82%92%E3%81%95%E3%81%8C%E3%81%9B!
0803デフォルトの名無しさん
2006/10/26(木) 22:13:450804デフォルトの名無しさん
2006/10/26(木) 22:35:39この本て詐欺っぽい?
0805デフォルトの名無しさん
2006/10/26(木) 22:55:320806デフォルトの名無しさん
2006/10/26(木) 22:59:08効率的最速学習とかよく
英会話○日で習得できるとか類の怪しい本ですか?
0807デフォルトの名無しさん
2006/10/26(木) 23:48:410808デフォルトの名無しさん
2006/10/27(金) 01:07:420809デフォルトの名無しさん
2006/10/27(金) 01:15:00ネタじゃないのかw
0810デフォルトの名無しさん
2006/10/27(金) 03:50:07クラス外部からのアクセスにはconstとして振る舞い、
クラス内部からのアクセスには非constとして振る舞う、
といったメンバ変数を作りたいのですが、どのような方法があるでしょうか。
0811デフォルトの名無しさん
2006/10/27(金) 04:16:310812デフォルトの名無しさん
2006/10/27(金) 04:21:32真面目に答える気はない。
こういうことができるというだけで……。
class Foo
{
public :
Foo(int x) : value_(x), value(value_) {}
private :
int value_ ;
public :
int const & value ;
} ;
Foo::valueは、クラス外部からはconstとして振る舞う。
クラス内部からは、Foo::value_でアクセスすること。
0813デフォルトの名無しさん
2006/10/27(金) 09:21:530814デフォルトの名無しさん
2006/10/28(土) 00:44:48何言ってるのかわからん……
メンバ変数を外部からアクセスするって、一体何のこと?
0815デフォルトの名無しさん
2006/10/28(土) 02:36:15以下の方法があった場合コピーコンストラクタが行われるのは両方それともどちから片方だけですか?
なぜか自分の環境ではクラスのコンストラクタに渡すと中のオブジェクトが空になってしまいます。
クラスメソッドtestに渡す
void test(A +a)
別クラスhogeのコンストラクタに渡す
hoge(A &a):hogeA(a){}
0816デフォルトの名無しさん
2006/10/28(土) 03:24:03その際にコピーコンストラクタは呼ばれるだろう。
中のオブジェクトが空になるのは、単にコードがバグってるだけ。
コピーコンストラクタ云々は関係ない。
0817デフォルトの名無しさん
2006/10/28(土) 08:37:46ありがとうございます。
参考になりましたが、その方法はメモリ使用量が増加してしまいました。
>>813
クラス実体がconstという訳ではないのでどうにも……
いろいろ考えましたが、
とりあえずconst_castで強引にやってみます。
0818デフォルトの名無しさん
2006/10/28(土) 08:44:570819デフォルトの名無しさん
2006/10/28(土) 08:47:040820デフォルトの名無しさん
2006/10/28(土) 09:57:470821デフォルトの名無しさん
2006/10/28(土) 10:23:02テンプレにある本でも買っとけ。
0822デフォルトの名無しさん
2006/10/28(土) 11:22:10const unsigned *charに変換したいけどどうやってするの?
0823デフォルトの名無しさん
2006/10/28(土) 12:15:130824デフォルトの名無しさん
2006/10/28(土) 15:05:51やめたほうがいい。
0825デフォルトの名無しさん
2006/10/28(土) 15:12:17共用体型の意味って何でしょうか?
同時に値を格納できないのならば、意味が無いような気がするのですが・・・
共用体型を宣言する時にint a; int b;とした場合、結局格納できる値が一つなら、単にint a;で書いてしまえばいいだけではないのですか?
0826デフォルトの名無しさん
2006/10/28(土) 15:25:26その発想で行くと全部void*でおkになるね
0827デフォルトの名無しさん
2006/10/28(土) 15:30:47カリカリにチューンしているのなら別だけど。
boost::anyの方が便利だよ。
0828デフォルトの名無しさん
2006/10/28(土) 15:31:32えっと、どういう意味でしょうか?
0829デフォルトの名無しさん
2006/10/28(土) 15:46:47違う型を共用するところに意義がある共用体の存在意義を否定するなら、
違う型へのポインタなんぞを使わずに全てvoid*で済ませばいいだろ、という話。
0830デフォルトの名無しさん
2006/10/28(土) 15:53:03char がsigned char なのか unsigned charなのかは
環境依存だからとかそういう話?
0831デフォルトの名無しさん
2006/10/28(土) 16:03:04特長もあるけど、型安全が犠牲になるんだよね。
C++には合わないよ。
0832デフォルトの名無しさん
2006/10/28(土) 16:05:20{
float f;
unsigned int n;
}; // sizeof (float) == sizeof (unsigned int)だと仮定して
f = 123.456e7;
するとnからはfのメモリ上のビットパターンが読み取れてウマーなこともあった。
まあunionがなくてもreinterpret_cast使えばいいだろと言う程度のことではあるが。
0833デフォルトの名無しさん
2006/10/28(土) 16:08:29はず
0834デフォルトの名無しさん
2006/10/28(土) 16:09:050835デフォルトの名無しさん
2006/10/28(土) 16:09:250836デフォルトの名無しさん
2006/10/28(土) 16:16:080837デフォルトの名無しさん
2006/10/28(土) 16:40:080838825
2006/10/28(土) 17:21:42何となく意味がわかりました。
とりあえず今はunionを使うのは控えておきます
まだあやふやな所もありますし。
0839デフォルトの名無しさん
2006/10/28(土) 17:22:12両方ともint型じゃん
0840デフォルトの名無しさん
2006/10/28(土) 17:24:290841デフォルトの名無しさん
2006/10/28(土) 17:33:33どうやってやるの?
0842デフォルトの名無しさん
2006/10/28(土) 17:38:58int型とdouble型共有したら2.54とか小数点だったらdouble型、2とかだったらint型で事実上格納されるの?
教えて
0843デフォルトの名無しさん
2006/10/28(土) 17:48:28static_cast<unsigned char *>(static_cast<void*>(x))
0844デフォルトの名無しさん
2006/10/28(土) 17:55:390845デフォルトの名無しさん
2006/10/28(土) 17:59:37そういう理解の仕方の人にはお勧めできません。
つーか、>832の意味が理解できていない?
そう言えばXLibのイベント構造体もunion使ってたなぁ。
あちらはイベントの種類ごとに違う構造なのを吸収するのが目的だが。
0846デフォルトの名無しさん
2006/10/28(土) 18:43:47reinterpret_cast は実装依存。 void* 経由の static_cast は動作について規定されている。
そんなことはないですか?
0847デフォルトの名無しさん
2006/10/28(土) 18:49:38unsigned long argb;
unsigned char alpha, red, green, blue;
};
ARGB color;
color.alpha = 0xFF;
color.red = 0;
color.green = 0xEE;
color.blue = 0xAA;
cout << "ARGB = " << color.argb; // "ARGB = 0xFF00EEAA"
0848デフォルトの名無しさん
2006/10/28(土) 18:52:53そんなことはないだろう。
俺の記憶では、何かポインタ型のオブジェクトをvoid*へ変換したものを、
元のポインタ型(か互換な型)以外へ変換すると、未定義だか処理系依存だかで、
結局reinterpret_castと変わらないだろということになるはず。
0849デフォルトの名無しさん
2006/10/28(土) 19:22:500850デフォルトの名無しさん
2006/10/28(土) 19:26:110851デフォルトの名無しさん
2006/10/28(土) 19:27:185.2.10 Reinterpret cast の 7 によると、 char* から unsigned char* に
reinterpret_cast で変換した値は unspecified (なんて訳すんだっけ?)となる。
4.10 Pointer conversion の 2 によると、 char* から void* への変換結果は
char 型オブジェクトの記憶域の開始位置を指すと決められている。そして
5.2.9 Static cast の 6 にこれとは「逆」の変換が可能だとされている。
記憶域を指す void* からオブジェクトを指すポインタへの変換は malloc() の
戻り値に対して必要になる変換なので問題ないと思うけど、規格中に明示的な
記述を見つけることはできなかった。記憶域の開始位置からオブジェクトへの
ポインタを作るということで、 5.2.9 の 6 にある「逆」の変換にあたるのだろうか?
どっちかというと後者のほうが移植性が高いと言えなくもない、というぐらいの違いかな。
0852デフォルトの名無しさん
2006/10/28(土) 22:39:09任意の型Tについて T* p があったとき、static_cast は
static_cast<T*>(static_cast<void*>(p)) == p を保証するんじゃなかったっけか。
正当な変換が定義されていない別の型に変換するのは、
規格上はどうやっても未定義だと思うが。
0853デフォルトの名無しさん
2006/10/28(土) 23:03:45元に戻すことができるのは 5.2.9 の最後に書いてある。
「定義されていない」のが「未定義」なのはあたりまえ。
今は正当な変換が定義されているかどうかを論じているんだろ?
0854初心者
2006/10/28(土) 23:39:43他の.exeファイル実行できるようにどうすればいいですか??
0855デフォルトの名無しさん
2006/10/28(土) 23:42:06日本語でおk
0856初心者
2006/10/28(土) 23:45:48意味わからないですけど、詳しく
0857デフォルトの名無しさん
2006/10/28(土) 23:51:25マルチは氏ね
0858デフォルトの名無しさん
2006/10/28(土) 23:51:53マルチだったのかw
0859デフォルトの名無しさん
2006/10/28(土) 23:55:010860デフォルトの名無しさん
2006/10/28(土) 23:59:40例えば
char a[20];
cin << "abcd";
とするとき 文字数が4であることを知るにはどうすれば
よいのでしょうか?
0861デフォルトの名無しさん
2006/10/29(日) 00:03:220862デフォルトの名無しさん
2006/10/29(日) 00:19:49strchr(a,'\0')-a
memchr(a,'\0',UINT_MAX)-a
strrchr(a,'\0')-a
strlen(a)
0863デフォルトの名無しさん
2006/10/29(日) 00:19:520864デフォルトの名無しさん
2006/10/29(日) 00:20:42とりあえずコンパイル通そうぜ?
0865デフォルトの名無しさん
2006/10/29(日) 00:21:24お前全然問題がわかってないw
0866860
2006/10/29(日) 00:22:19char a[20];
cin << a;
aにabcdと文字が入っているとすると文字数が4であること
知る方法について教えていただけないでしょうか?
0867デフォルトの名無しさん
2006/10/29(日) 00:22:390868デフォルトの名無しさん
2006/10/29(日) 00:23:15とりあえずコンパイル通そうぜ?
0869866
2006/10/29(日) 00:25:010870デフォルトの名無しさん
2006/10/29(日) 00:26:090871デフォルトの名無しさん
2006/10/29(日) 00:26:34一文字ずつ終端文字がくるまで数えればいいんじゃない?
0872デフォルトの名無しさん
2006/10/29(日) 00:29:510873デフォルトの名無しさん
2006/10/29(日) 00:39:58#include <string>
int main()
{
std::string s;
std::cin >> s;
std::cout << s.size() << ' ' << s << std::endl;
}
0874側近中の側近 ◆0351148456
2006/10/29(日) 00:51:51(っ´▽`)っ
もし、charでいきたいなら
strlen(a)でOK。
ただ、C++なんだからstringクラスがお勧め。>>873の通り。
charは危険がいっぱいだからね☆
>>866で、20字以上入力されたらアウトだよ。
0875デフォルトの名無しさん
2006/10/29(日) 01:02:580876デフォルトの名無しさん
2006/10/29(日) 01:08:14よよいのよいっってやつだよ
0877側近中の側近 ◆0351148456
2006/10/29(日) 01:09:22(っ´▽`)っ
どんな動きをするかわからないってことだよ。
プログラムが異常終了する、結果が不正になる。とかね。
20文字目以降が、メモリ上の予想していないところに書き込まれるから。
char a[20];と宣言しているように、aには20字(\0含む)しか入れちゃダメ。
0878860
2006/10/29(日) 01:15:57int mozisu = 0;
a[20];
cin >> a;
while (a[e] != '\0'){
e++;
mozisu++;
}
一応 文字数はわかることができました。
0879デフォルトの名無しさん
2006/10/29(日) 01:20:00とりあえずコンパイル通そうぜ?
0880デフォルトの名無しさん
2006/10/29(日) 01:24:50わざわざライブラリ使わんのもあれだがeとmozisuを分ける意味がわからん。
どっちも同じ値じゃん。
0881デフォルトの名無しさん
2006/10/29(日) 01:25:54strlenを使うようにすると、こうなる。
#include <iostream>
#include <cstring>
int main()
{
a[20];
std::cin >> a;
int mozisu = std::strlen(a);
std::cout << mozisu << ' ' << a << std::endl;
}
0882デフォルトの名無しさん
2006/10/29(日) 01:29:14察するにプログラミング自体が、初めてなんじゃね? 細かいことは大目に見てやろうぜ。
俺的には「初心者です」とかって言わないところがとっても好印象だ。
0883デフォルトの名無しさん
2006/10/29(日) 01:35:07std::stringクラス使わん理由がわからん。
マズい設計とは言え、char[]使うより100万倍マシだからな。
0884878
2006/10/29(日) 02:08:01知識がないのでstd::stringクラス
というものを知りませんでした。
もっと勉強します。
0885デフォルトの名無しさん
2006/10/29(日) 03:02:270886デフォルトの名無しさん
2006/10/29(日) 03:17:09参考になるページ教えていただけないでしょうか?
やはりCのようにポインタを繋いで
AddとかDelとそんな関数をたくさん作るイメージでOKなのでしょうか?
0887デフォルトの名無しさん
2006/10/29(日) 03:19:430888デフォルトの名無しさん
2006/10/29(日) 03:35:000889デフォルトの名無しさん
2006/10/29(日) 03:35:18http://sourceforge.jp/projects/frogger/
ファルシステムみたいにタグの親子関係のツリー作ってる。
0890デフォルトの名無しさん
2006/10/29(日) 04:39:42下記サイトのサンプルを実行したところ、出力は正しく出来ました。
ただ、終了時にcomip.hの_Release()で例外が投げられてしまいます。
CoUninitialize()をコメントアウトしたところ、滞りなく終了する事ができました。
このままで良いのでしょうか。アドバイス頂ければと思います。
http://www7a.biglobe.ne.jp/~forte/xml/xmlread.htm
0891デフォルトの名無しさん
2006/10/29(日) 04:50:09こんな感じで実行してみて、例外消えませんか?
(スマートポインタがCoUninitialize呼ぶ前に開放されるようにする)
CoInitialize();
{
処理をブロックで囲む
}
CoUninitialize();
0892デフォルトの名無しさん
2006/10/29(日) 04:51:18char data1[]="aiueokakikukekosasisuseso";
とかって出来るけど、これが、64kバイトとかでかいデータの場合、
どのように書いたらいいですか?
ファイルから読むのではなく。リソースファイルを使うのでもなく。
0893デフォルトの名無しさん
2006/10/29(日) 04:52:39まずは自分が思ったとおりに書いてみろ。何か問題があるか?
0894デフォルトの名無しさん
2006/10/29(日) 04:53:080895デフォルトの名無しさん
2006/10/29(日) 04:55:41自分が思ったとおりだと、データはバイナリなので、
char data1[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,\
0x09,0x10・・・
などと、64kの場合は、0x00 が、65536個続きます。
0896デフォルトの名無しさん
2006/10/29(日) 04:59:52ご指摘のようにしたところ無事に終了することができました。
ありがとうございました。
0897デフォルトの名無しさん
2006/10/29(日) 05:00:47http://dream.freespace.jp/perl-bin/puma/lng/joyful.cgi?print+200507/05070008.txt
0898デフォルトの名無しさん
2006/10/29(日) 05:15:12ワロス。
すげー逸材だw
0899デフォルトの名無しさん
2006/10/29(日) 05:19:22だから、それで何の問題がある?
0900デフォルトの名無しさん
2006/10/29(日) 05:21:071.ヘッダファイルサイズが異常にでかくなる。(データファイルと比較して約5倍)
2.コンパイル時間がすげー長くなる
3.仮想メモリを異常に食う
0901デフォルトの名無しさん
2006/10/29(日) 05:27:46ヘッダに定義を置くな。
0902デフォルトの名無しさん
2006/10/29(日) 05:32:34そんだけデメリットが分かってるならファイルから読めばいいのに。
0903デフォルトの名無しさん
2006/10/29(日) 06:26:21別に1行で宣言しなきゃならん理由はないんだから行末の ¥ はいらんぞ。
それとったらコンパイル時間に関しては多分改善されるぞ。
いくらなんでもコンパイラ屋もそんな糞長い(論理)行を処理することは前提としてないだろうからな。
0904デフォルトの名無しさん
2006/10/29(日) 07:06:50どゆこと?
まさか、64k個の、0x00を、全部続けて書けといってる?
それやると、テキストエディタでえらいことになるだろ
0905デフォルトの名無しさん
2006/10/29(日) 07:55:57char
data
[
]
=
{
0x00
,
0x00
,
0x00
}
;
0906デフォルトの名無しさん
2006/10/29(日) 07:59:04char data1[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x10・・・
でいいだろ、ってこった。
だがしかし、>895を読む限り全て0と言っている気がするのだが。
それなら更に簡単に、
char data1[65536] = {0,};
でAll0になる。
0907デフォルトの名無しさん
2006/10/29(日) 09:07:170908デフォルトの名無しさん
2006/10/29(日) 09:15:56メモ帳とか?w
0909デフォルトの名無しさん
2006/10/29(日) 09:31:12#include <utility>
using namespace std::rel_ops;
を追加しましたが、他の場所で使っているiteratorの演算子と衝突してしまい、
C2593エラー (operator '!='があいましです)
というエラーが出てしまいます。
そのため、自作クラス中だけにutilityのoperatorを使えるようにしたいのですが、
class A
{
public :
operator == () {}
operator < () {}
using namespace std::rel_ops;
}
とすると、今度は
C2059 構文エラー
となってしまいます。
このような場合、どういう風に記述すればよいでしょうか?
ちなみに環境はVC8です
0910デフォルトの名無しさん
2006/10/29(日) 09:51:40ほほう、そんなものがあるのか。初めて見たが・・・
http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html
"The rel_ops operators are not useful. They were a mistake."
・・・これはひどい。
0911デフォルトの名無しさん
2006/10/29(日) 09:57:310912デフォルトの名無しさん
2006/10/29(日) 09:59:57>The rel_ops operators are not useful. They were a mistake. If you
>insist on using them, you will have trouble. Nobody will care, because
>you asked for it.
わかりやすく噛み砕いて訳すと「使うな」ということでFA?
0913デフォルトの名無しさん
2006/10/29(日) 10:06:590914デフォルトの名無しさん
2006/10/29(日) 10:35:30boost::operators使え。
0915デフォルトの名無しさん
2006/10/29(日) 11:22:57おぉ!boostにもoperatorが!
さっそく調べてみます。
ありがとうございます
0916デフォルトの名無しさん
2006/10/29(日) 12:43:332 O Foo<I, O>::bar(I i1, I i2, O o, bool b) {
3 return o;
4 }
上記コードで
c:\Foo.cpp(2): error C2143: 構文エラー : ';' が '<' の前にありません。
とエラーが出ます。
お詳しい方、教えていただけないでしょうか。
0917デフォルトの名無しさん
2006/10/29(日) 12:48:500918デフォルトの名無しさん
2006/10/29(日) 12:59:41「tryで抜ける」ってどうよ?
0919デフォルトの名無しさん
2006/10/29(日) 13:25:27VC++ 2003 ProとVC++ 2005 Expで試しましたが、どちらも同じ結果でした。
0920デフォルトの名無しさん
2006/10/29(日) 13:34:54template <class I, class O> O bar(I,I,O,bool);
};
template <class I, class O> O Foo::bar(I i1, I i2, O o, bool b) {
return o;
}
ってことか?それとも、
template <class I, class O> struct Foo
{
O bar(I,I,O,bool);
};
template <class I, class O> O Foo<I,O>::bar(I i1, I i2, O o, bool b) {
return o;
}
ってことか?
0921デフォルトの名無しさん
2006/10/29(日) 13:41:53volatileをつけとけばOKでしょうか?
排他機構をつけたintラッパとか書かないとだめでしょうか?
0922デフォルトの名無しさん
2006/10/29(日) 14:01:090923デフォルトの名無しさん
2006/10/29(日) 14:06:43class MimeCoder {
public:
virtual OutputIterator filter(InputIterator first, InputIterator last, OutputIterator result, bool fin = false) = 0;
virtual OutputIterator finish(OutputIterator& result) = 0;
};
template <class InputIterator, class OutputIterator>
class Base64Encoder : public MimeCoder<InputIterator, OutputIterator> {
public:
Base64Encoder() : len(0), linepos(0) {}
virtual OutputIterator filter(InputIterator first, InputIterator last, OutputIterator result, bool fin = false);
virtual OutputIterator finish(OutputIterator& result);
private:
int linepos;
unsigned char curr[3];
int len;
void encodeCurr(OutputIterator& result);
};
template <class InputIterator, class OutputIterator>
OutputIterator Base64Encoder<InputIterator, OutputIterator>::filter(InputIterator first, InputIterator last, OutputIterator result, bool fin) {
return result;
}
ということです。
以下サイトのソースを理解してテンプレートの勉強をしようと思ってコンパイルしてみようと考えましたが、
できない理由がわからなくて質問させてもらいました。
ttp://www.s34.co.jp/cpptechdoc/misc/b2a/index.html
0924デフォルトの名無しさん
2006/10/29(日) 14:13:03それ全体をコンパイルするとエラーにならないぞ。
0925デフォルトの名無しさん
2006/10/29(日) 14:13:03コピペしたソースは gcc/VC8 で何事もなく通ったぜ?
0926デフォルトの名無しさん
2006/10/29(日) 14:34:14クラスの定義を.hに、実装を.cppに行なっていたのですが、エラーの原因はヘッダをインクルードしていないからでした。
お騒がせしました。
0927デフォルトの名無しさん
2006/10/29(日) 14:38:380928デフォルトの名無しさん
2006/10/29(日) 14:46:16sizeof(int)以下ならvolatileでオッケー。
排他するのは無駄。
0929デフォルトの名無しさん
2006/10/29(日) 14:49:070930デフォルトの名無しさん
2006/10/29(日) 15:07:22それに関してmutexは要らない。
0931デフォルトの名無しさん
2006/10/29(日) 15:19:320932デフォルトの名無しさん
2006/10/29(日) 17:14:06どうすれば良いんでしょうか。
0933デフォルトの名無しさん
2006/10/29(日) 17:19:39自前でコンストラクタを定義したらいいと思う。
(それも使われたくなければprivateでいいから。)
任煮のクラスというのが既存の改変できないクラスというなら知らぬ。
0934デフォルトの名無しさん
2006/10/29(日) 17:22:32singleton, multitonの実装で使われるテクニックなので、
詳しくはそのあたりを調査してちょうだい。
0935デフォルトの名無しさん
2006/10/29(日) 17:27:03>>934
どうもありがとうございまっすす。
0936デフォルトの名無しさん
2006/10/29(日) 17:33:1319じゃね?
0937デフォルトの名無しさん
2006/10/29(日) 17:57:580938デフォルトの名無しさん
2006/10/29(日) 18:14:430939933
2006/10/29(日) 18:18:33誤字にはそれなりに気を使ってたつもりだから、ちょっとへこんだorz
0940デフォルトの名無しさん
2006/10/29(日) 18:21:54任煮:にんに?
0941デフォルトの名無しさん
2006/10/29(日) 21:23:220942デフォルトの名無しさん
2006/10/29(日) 21:25:090943デフォルトの名無しさん
2006/10/29(日) 21:27:52難しいですかね??
0944デフォルトの名無しさん
2006/10/29(日) 21:28:330945デフォルトの名無しさん
2006/10/29(日) 21:29:48どう書き換えるかによっていろんな答えがあるわけなんだが。
0946デフォルトの名無しさん
2006/10/29(日) 21:35:52・Cはグローバル変数を何度宣言してもOKだが、C++はそうではない。
・C++はmain関数を直接的にも間接的にも再帰できない。
・C++はCで6ヶ月かかる計画に比べ、1〜2年かかる。
0947デフォルトの名無しさん
2006/10/29(日) 21:36:46・C++が使える奴は大抵ウザくてキモい。
0948デフォルトの名無しさん
2006/10/29(日) 21:39:00表向き書き換えるだけと言いながら事実上の再設計だったりと、
人をだまくらかすにもやりようはあるもんだ。
0949デフォルトの名無しさん
2006/10/29(日) 21:41:40どぉしたらいいでしょうか・・・
0950デフォルトの名無しさん
2006/10/29(日) 21:42:250951デフォルトの名無しさん
2006/10/29(日) 22:22:57とりあえずunko.cをunko.cppにすれば?
0952デフォルトの名無しさん
2006/10/29(日) 22:39:43あるあるwwww
0953デフォルトの名無しさん
2006/10/29(日) 22:42:400954デフォルトの名無しさん
2006/10/29(日) 22:50:07普通に同意できるから困る。
0955デフォルトの名無しさん
2006/10/29(日) 23:14:110956デフォルトの名無しさん
2006/10/29(日) 23:17:24ってありますか?
0957デフォルトの名無しさん
2006/10/29(日) 23:26:410958デフォルトの名無しさん
2006/10/29(日) 23:28:57あなたの思考が読めません。
なぜそんなことが出来ると考えるに至ったのか…
0959デフォルトの名無しさん
2006/10/29(日) 23:31:45デッドロックを検出できるかも・・・・?と考えたのかもしれんね。
0960デフォルトの名無しさん
2006/10/30(月) 00:00:31それを template でチェックしてコンパイル時に洗い出すってぇことも、
あながち不可能ではないかもしれん。やり方は皆目見当がつかないけどね。
0961デフォルトの名無しさん
2006/10/30(月) 00:21:410962デフォルトの名無しさん
2006/10/30(月) 00:34:530963デフォルトの名無しさん
2006/10/30(月) 00:39:36まずは、何がしたいのかを相手に分かるように質問する。
C++に書き換えるとはどういう意味か。
Cでコンパイルできるソースは多くの場合そのままC++のコンパイラでも
コンパイルできて、正しく動く。
一部の互換性が無い部分については(大抵)ちょっとした修正をすれば対応できる。
もし上記のようなことをしようとしていて駄目だったなら、とりあえずどんなソースを使って、
どう不具合があったか(コンパイル時のエラーとか、実行時の振る舞いがおかしいとか)を
具体的に書けば、答えが貰えるかもしれない。
そうではなく、C++らしいオブジェクト指向的なソースに書き直してほしいという話なら、
自分で基礎から勉強するか、金払って人でも雇え。
0964デフォルトの名無しさん
2006/10/30(月) 00:42:49(中略)
最初にこれ作った人はもう死んじゃってて・・・。
0965デフォルトの名無しさん
2006/10/30(月) 00:58:56帰れ
0966デフォルトの名無しさん
2006/10/30(月) 05:11:25実はCで書かれたものをC++として再度作り直すときの考え方として3つの
(中略)
帰れ・・・。
0967デフォルトの名無しさん
2006/10/30(月) 05:52:25S は Stroustrup の S かぁぁぁぁぁぁアッー!!
0968デフォルトの名無しさん
2006/10/30(月) 07:25:13StepanovのSかもよ
0969デフォルトの名無しさん
2006/10/30(月) 08:32:31例えば、(学校で習うような)古語を現代語に書き換える方法を教えてください!
って漠然とした問いに答えられる人が世の中にいると思うか?
0970デフォルトの名無しさん
2006/10/30(月) 09:33:500971デフォルトの名無しさん
2006/10/30(月) 09:37:13typedef typename list<int>::iterator lint_itor;
この2箇所でエラーが発生します。エラー文は、error C2899: 型名はテンプレート宣言の外側で使用できません。
使用ソフトはVC++EEです
どうしたら良いか、教えていただけないでしょうか?
0972デフォルトの名無しさん
2006/10/30(月) 09:41:17typenameの目的を理解している?
0973デフォルトの名無しさん
2006/10/30(月) 10:36:26答えが無いので、一応「どうしたら良いか、教えて」おく。
typenameを書かないこと。以上。
そのエラーメッセージは、
typename cannot be used outside a template declaration
というもので、
typename はテンプレート宣言の外側で使用できません。
とでも訳すべきだと思う。
template < typename T >
void f()
{
typedef typename std::vector<T>::iterator TIter ; //OK
//型か値かは、すでに分かる。
typedef typename std::vector<int>::iterator IntIter ; //ERROR
}
0974デフォルトの名無しさん
2006/10/30(月) 11:46:12まぁ自然な発想だとは思うが、現行の規格を恨んで >>973 に従い、次を待て。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#382
0975デフォルトの名無しさん
2006/10/30(月) 12:15:01申し遅れましたが、structを部分的にカプセル化したかったということです。
メンバに直接アクセスできる気軽さと軽さを求めていましたので……
structの延長線上にあるのでメモリ使用量が変わるのもちょっと気分のいいものではなかったんで。
0976デフォルトの名無しさん
2006/10/30(月) 14:35:460977デフォルトの名無しさん
2006/10/30(月) 15:19:55だな。デッドロック発生条件が静的に決まっているなら不可能とは断言できないが、
まあ無理だろ。
>>956
つttp://en.wikipedia.org/wiki/Deadlock
つttp://ja.wikipedia.org/wiki/%E3%83%87%E3%83%83%E3%83%89%E3%83%AD%E3%83%83%E3%82%AF
英語の方はよくまとまっていて秀逸。
日本語の方はかなーりいまいちだな…
0978デフォルトの名無しさん
2006/10/30(月) 17:08:030979デフォルトの名無しさん
2006/10/30(月) 17:10:570980デフォルトの名無しさん
2006/10/30(月) 18:26:560981デフォルトの名無しさん
2006/10/30(月) 19:48:58わけを教えて〜
0982デフォルトの名無しさん
2006/10/30(月) 19:50:530983デフォルトの名無しさん
2006/10/30(月) 19:53:02http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
0984デフォルトの名無しさん
2006/10/30(月) 19:58:10探せばある
ググれ
0985デフォルトの名無しさん
2006/10/30(月) 20:49:06--enable-utf8 を追加したいのですが、IDEのどこに設定すれば良いのでしょう?
0986デフォルトの名無しさん
2006/10/30(月) 20:54:030987デフォルトの名無しさん
2006/10/30(月) 20:57:280988デフォルトの名無しさん
2006/10/30(月) 21:02:230989デフォルトの名無しさん
2006/10/30(月) 21:03:35返事が遅れるすみませんでした。
本の通りに打ってみたのですが、本が間違ってるんですね。
typenameを消すと通りました。
ありがとうございました☆
0990デフォルトの名無しさん
2006/10/30(月) 21:05:07あれ見てると危なくて仕方ない。
ここに行って
「挙手反対」
って書き込んであげて。
http://hobby7.2ch.net/test/read.cgi/bus/1161304534/
2ちゃんで世の中動かせると思ってる挙手賛成派が、必死になってレスするから面白いよ
0991デフォルトの名無しさん
2006/10/30(月) 21:15:22pcre をUnicode 対応にしてビルドしたいのです。
ソースはVC2003用の物です。
http://www.renatomancuso.com/downloads/dpcre61_dll_src.zip
0992991
2006/10/30(月) 21:42:38configure コマンドやautoconf はVC には無いという事でOKでしょうか?
0993デフォルトの名無しさん
2006/10/30(月) 21:56:35次スレってまだでしょうか?
0994デフォルトの名無しさん
2006/10/30(月) 22:23:390995デフォルトの名無しさん
2006/10/30(月) 22:32:460996デフォルトの名無しさん
2006/10/30(月) 22:37:50C++相談室 part54
http://pc8.2ch.net/test/read.cgi/tech/1162215248/
0997デフォルトの名無しさん
2006/10/30(月) 22:42:200998デフォルトの名無しさん
2006/10/30(月) 22:57:080999デフォルトの名無しさん
2006/10/30(月) 23:05:461000デフォルトの名無しさん
2006/10/30(月) 23:07:4810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。