C++相談室 part17
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v
NGNGただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。
過去スレ、関連スレ、関連リンクなどはこちら>>2-15
0002v(^・^)v
NGNG[Stroustrup]
禿 http://www.research.att.com/~bs/
C++に関するリンクの総本山でもあります。
[C++ Final Draft International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
[JTC1/SC22/WG21 - C++]
http://std.dkuug.dk/jtc1/sc22/wg21/
規格書の重箱の隅的な話題などが読めます。
[C/C++ Users Journal]
http://www.cuj.com/
[Object Management Group]
http://www.omg.org/
[Association of C & C++ Users]
http://www.accu.org/
[news]
news:comp.lang.c++
news:comp.lang.c++.moderated
[ML]
cppll(日本語) http://www.trickpalace.net/cppll/
メインページにC++に関する良質なC++日本語リンク集があります。
0003v(^・^)v
NGNGC++FAQ Lite http://www.parashift.com/c++-faq-lite/
C++FAQ(日本語) http://www.bohyoh.com/CandCPP/FAQ/
Cとその仕様を比較しながらの解説なので分かりやすい。
*** 質問の前に必ずこの二つに目を通してください ***
[STL]
STL Programmer's Guide http://www.sgi.com/tech/stl/
日本語としてはおそらくここ。ただしリファレンス的内容。
http://www.wakhok.ac.jp/~sumi/stl/
[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~g940455/wp/
news news:gmare.comp.lib.boost.devel
0004v(^・^)v
NGNGamazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/(翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/(翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/(翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/(翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/(翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/(翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/(翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/(翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
0005デフォルトの名無しさん
NGNG21st: http://pc3.2ch.net/jisaku/kako/1027/10277/1027722910.html
22nd: http://pc3.2ch.net/jisaku/kako/1028/10289/1028907289.html
23rd: http://pc3.2ch.net/jisaku/kako/1031/10316/1031682768.html
24th: http://pc3.2ch.net/jisaku/kako/1033/10335/1033560431.html
25th: http://pc3.2ch.net/jisaku/kako/1034/10348/1034812874.html
26th: http://pc3.2ch.net/jisaku/kako/1035/10359/1035941663.html
27th: http://pc3.2ch.net/jisaku/kako/1037/10372/1037214869.html
28th: http://pc3.2ch.net/jisaku/kako/1038/10386/1038655723.html
29th: http://pc3.2ch.net/test/read.cgi/jisaku/1040485482/ (HTML化待ち)
30th: http://pc3.2ch.net/test/read.cgi/jisaku/1042546212/ (HTML化待ち)
31st: http://pc3.2ch.net/test/read.cgi/jisaku/1044299316/ (HTML化待ち)
32nd: http://pc3.2ch.net/test/read.cgi/jisaku/1045922625/ (前スレ)
0006v(^・^)v
NGNG[GCC]
http://gcc.gnu.org/
(Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
1.0 http://www.microsoft.com/japan/msdn/netframework/downloads/sdk.asp
1.1βhttp://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/MSDN-FILES/027/002/056/msdncompositedoc.xml
[MSVC] コンパイラ以外のツール、ドキュメントです。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
(一括ダウンロードの時は上のURLに続けてこちらを入力してください
default.htm?p=/msdownload/platformsdk/sdkupdate/psdk-full.htm)
なお上記三者を組み合わせたプログラミングにおいてはこちらが分かりやすいです。
http://www.geocities.com/Tokyo/Ginza/5432/documents/winprog/index.html
[DigitalMars]
http://www.digitalmars.com/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm
0007v(^・^)v
NGNGBoost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
LokiPort
MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
MSVC6.0 SP5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
ACE/TAO http://www.cs.wustl.edu/~schmidt/
Network、Thread、ORBなどのポータブルなライブラリ
Blitz++ http://www.oonumerics.org/blitz/
数値計算ライブラリとして人気がある、らしい
spirit http://spirit.sourceforge.net/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ
他ライブラリリンク集
http://www.trumphurst.com/cpplibs/cpplibs.phtml
0008v(^・^)v
NGNGPart1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
Part9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
Part10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
Part11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
part12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
part13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
part14 http://pc2.2ch.net/test/read.cgi/tech/1041328679/l50
part15 http://pc2.2ch.net/test/read.cgi/tech/1043605481/l50
part16 http://pc2.2ch.net/test/read.cgi/tech/1045746245/
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc2.2ch.net/test/read.cgi/tech/1037795348/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
STLスレッド
part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html
0011デフォルトの名無しさん
NGNG[GCC]
GCCについて http://pc2.2ch.net/test/read.cgi/tech/1007731543/l50
祝・GCC 3.0リリース http://pc.2ch.net/test/read.cgi/unix/992942337/l50
[Digital Mars]
Code of the Nerds" Digital Mars C/C++
http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[Borland]
C++Builder相談室
part1 http://piza2.2ch.net/tech/kako/969/969458279.html
part2 http://pc.2ch.net/tech/kako/997/997074601.html
part3 http://pc3.2ch.net/tech/kako/1016/10160/1016065855.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1035596146/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1045542179/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1030493157/l50
[VisualC++]
VisualC++相談室
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc2.2ch.net/test/read.cgi/tech/1036897197/l50
0012デフォルトの名無しさん
NGNG0013v(^・^)v
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1039607377/l50
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
COM の世界を斬る!
http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
ATL 相談室
http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
managed C++ やろうぜ!!
http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50
0014v(^・^)v
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG処理系とオプション書いてみ。
0019デフォルトの名無しさん
NGNGという意味なんだろ?
0020デフォルトの名無しさん
NGNG環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0021デフォルトの名無しさん
NGNGとかいうエラーが出るんだけどこれってどうすればいいの?
0022デフォルトの名無しさん
NGNG#include <stdafx.h>
後死ね。
0023デフォルトの名無しさん
NGNGすげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0024デフォルトの名無しさん
NGNG言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0025デフォルトの名無しさん
NGNGよくわからないんだけど・・・
0026デフォルトの名無しさん
NGNGデジャヴですか?
0027デフォルトの名無しさん
NGNGそれ前スレの俺の書き込みのコピペ(w。
もうBorland-C++は5.6.4になってるよ(w
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNGテンプレ
0030デフォルトの名無しさん
NGNGそうか。
じゃあ、次のスレを立てる人にはもっときっちりやって貰わないといかんな。
0031デフォルトの名無しさん
NGNG| | ガガガガガガガッ 人
| | 人 < >__Λ∩
| | 人 < >__Λ∩Д´)/
( ・∀・) | | 人 < >__Λ∩Д´)/ / ←http://pc2.2ch.net/test/read.cgi/tech/1045746245/993
と ) | | 人 < >__Λ∩Д´)/ / ←http://pc2.2ch.net/test/read.cgi/tech/1045746245/994
Y /ノ .人 < >__Λ∩Д´)/ / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/995
/ ) .人 < >__Λ ∩Д´)/ / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/996
_/し' < >_Λ∩Д´)/ / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/997
(_フ彡 V`Д´)/ / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/998
/ ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/999
0032デフォルトの名無しさん
NGNGint _id;
public:
foo(int id) : _id(id) { }
foo(foo& f) : _id(f._id) { }
foo& operator=(foo& f) { _id = f._id; return *this;}
virtual ~foo() {}
};
int main(int,char**){
foo bar(0);
bar = foo(1);
return 0;
}
以上のコードを gcc 3.2でコンパイルしたら
no match for `foo& = foo' operator
candidates are: foo& foo::operator=(foo&)
っていわれるんだけど、俺間違ってないよね?
0033デフォルトの名無しさん
NGNGまちがってる
foo(const foo& f) : _id(f._id) { }
foo& operator=(const foo& f) { _id = f._id; return *this;}
コピーコンストラクタや代入演算子はconstの参照だ
一時オブジェクトは非const参照できない
0034デフォルトの名無しさん
NGNG>>33 より厳密に言うなら一時オブジェクトというより
右辺値の非 const 参照できないってこと。
0035デフォルトの名無しさん
NGNGint x,y,z,a,b,c;
};
void *p:
p=new Unko();
delete p;
これはメモリリークしますか?
0036デフォルトの名無しさん
NGNGメモリリーク以前に、コンパイルが通りません。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGpがどんな型情報を持っているのかと小一時間。
0042デフォルトの名無しさん
NGNG俺のPCにはVisual Studioと検証用の使い捨てプロジェクトが常に立ち上がっているわけだが。
0043デフォルトの名無しさん
NGNGウンコが処理されないようなコード書くなよ。
0044デフォルトの名無しさん
NGNG実は渡されたモノはうんこだという事実を知る由も無く
処理を要求されるoperator deleteが不憫だ。
0045デフォルトの名無しさん
NGNG1つの関数で2つ以上のオブジェクトをnewして返したいんですが、
void func( ObjectA* a, ObjectB* b )
{
a = new ObjectA;
b = new ObjectB;
}
とやってもできないんです。引数じゃなくて、返値でやればできるんですが、
そうすると1つしかnewできません。
何がいけないのか教えてください。
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGvoid func( ObjectA* &a, ObjectB* &b )
{
a = new ObjectA;
b = new ObjectB;
}
0049デフォルトの名無しさん
NGNGvoid func(ObjectA*& a, ObjectB*& b )
{
a = new ObjectA;
b = new ObjectB;
}
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNG美しくない実装だ。
0053デフォルトの名無しさん
NGNG複雑なパラメータの受け渡しにはclassやstructを使うのが定石だろ。
pairは見たことない。
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGそれぞれの長所、短所、どっちにしろ同じこと、ぐらいにしようよ
0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNGCのfreadでまとめて読み込む方がずっと速いと聞いたことがあります。
実際、単純に考えるとそうなりそうですが、ifstreamを使って、
ファイルの読み込みを高速化する方法はないのでしょうか。
前に2チャンネルのどこかのスレで見た気もするのですが、
今どこにあるかわからなくなってしまいました。
お願いします。
0061デフォルトの名無しさん
NGNGまずは実際にどのくらい遅くなるのか計ってから書きこもうな
0062デフォルトの名無しさん
NGNGよくわからんが、ifstreamのバッファを大きくするとか?
0063デフォルトの名無しさん
NGNG>Cのfreadでまとめて読み込む方がずっと速いと聞いたことがあります。
取り合えず本当に早くなるのか結果を見せて下さい。
0064デフォルトの名無しさん
NGNGifstream - 1052[ms]
cstdio - 991[ms]
std::ifstream fs;
for(int i= 0; i< 1000; i++) {
fs.open("test.txt", std::ios::in);
fs.read(ch1, 290);
fs.close();
}
FILE* f;
for(int j= 0; j< 1000; j++) {
f = fopen("test.txt","r");
fread(ch2, sizeof(char), 290, f);
fclose(f);
}
0065デフォルトの名無しさん
NGNGあまり変わらないのかもね
0066デフォルトの名無しさん
NGNGつーかそれが普通だとおもってたんだが違うのかな?
0067デフォルトの名無しさん
NGNGおれはそれが普通だと思ってた
0068デフォルトの名無しさん
NGNGおれは普通だと想ってる
0069デフォルトの名無しさん
NGNG0070名無しさん
NGNGおれは普通だと思ってる
0071デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>70
0072デフォルトの名無しさん
NGNGclass FilePtr
{
public:
explicit FilePtr(const char* text,const char *wr){ pfile = std::fopen(text,wr) ; if(!pfile) throw int( 0 ); }
~ FilePtr() { if(pfile) std::fclose(pfile); }
operator std::FILE* () { return pfile ; }
private:
std::FILE* pfile;
};
int main(){
try{
FilePtr fptr("test.txt","r");
}
catch(int){
std::puts( "Non File" );
}
return 0;
}
0073デフォルトの名無しさん
NGNGだまってこういうコード書いてもいいですか。
int main() {
FilePtr fptr("test.txt","r");
FilePtr fptr2 = fptr;
}
0074デフォルトの名無しさん
NGNG>>64
Cのfreadだと何バイト読み込んだかわかるけど、
C++のreadだと、何バイト読んだかわからないですよね。
それとも、方法があるのでしょうか?
0075デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNGそんなもんだめ
コピー、代入は自分で考えて下さい。
おれはprivateに放り込みますけどね
0079デフォルトの名無しさん
NGNG}
上のように書いたらVC6.0でコンパイル通っちゃったのですが、
C++的にはこれはアリなのでしょうか?
今まで一度もこういう記述を見たことが無いので・・・
0080デフォルトの名無しさん
NGNGありあり大辞典
0081デフォルトの名無しさん
NGNGあり。寿命は if のスコープ。
0082デフォルトの名無しさん
NGNGprivateに放り込むよりメンバをconstにするほうがいいぞ。
class FilePtr
{
public:
explicit FilePtr(const char* text,const char *wr) : pfile( std::fopen(text,wr) ) { if(!pfile) throw int( 0 ); }
~FilePtr() { std::fclose(pfile); }
operator std::FILE* () const { return pfile ; }
private:
std::FILE* const pfile;
};
0083デフォルトの名無しさん
NGNGreadとかwriteのメンバ関数はないの?
0084デフォルトの名無しさん
NGNGえ? コピーコンストラクタがとおるのでは?
0085デフォルトの名無しさん
NGNG組込型が引数な場合はどうすれば良いのでしょうか。
こんな風では当然あいまいだと言われてしまって…。
#include <fstream>
std::ostream &operator <<( std::ostream &s, int d )
{
++d;
return s << d;
}
int main(){
std::ofstream f;
f.open("hage.txt");
f << 777;
f.close();
return 0;
}
0087デフォルトの名無しさん
NGNGclass noncopyable
{
noncopyable(const noncopyable &);
void operator =(const noncopyable &);
protected:
nocopyable(){}
};
を用意し
class FilePtr : noncopyable
{ /*...*/ };
とすればいい
ちなみにboostに同名のクラスがある
0088デフォルトの名無しさん
NGNG○ >>86
008982
NGNGclass noncopyableの定義も、boost/noncopyable.hppのインクルードも
同じくらいにめんどくさいと思ったのデスヨ。
「その場で」「直接」な手段と思ったのですがねぇ。無念。
0090デフォルトの名無しさん
NGNG無理
普通に関数でも作って
0091デフォルトの名無しさん
NGNGありがとうございます。
しょうがないのでostreamをオーバーライドすることにします。
0092デフォルトの名無しさん
NGNG何を言っているのですか? 意味が…
0093デフォルトの名無しさん
NGNG組み込み型をラップするクラスを作り、それについてオーバーロードすればよい
0094デフォルトの名無しさん
NGNGなんで
std::ostream &operator <<( std::ostream &s, int d )
{
++d;
return s << d;
}
こんなことがしたいんだ?
s<< 777 + 1;
でいいじゃん
0095デフォルトの名無しさん
NGNGあ、90さんのおかげで無理だと分かったので、
ostreamのオペレータ<<をオーバーライドしたようなの作るしかないかなと。
ここの一番下を参考にしているのですが、
継承元の<<呼び出しがどうも上手く行きません…。
ttp://www.microsoft.com/japan/developer/library/vclang/_iostream_ostream.htm
>>93
ありがとうございます。そういう手もあるんですね。
<<を全書き換えするのと、どっちが楽だろう…選択肢が増えて助かります。
>>94
例えなので…。
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNGいやはや、長引いちゃってすいません。
目的は2つありまして…。まず、いま既に<<を膨大に使って
txt出力しているソースがあるのですが、これを全て
別の注釈付きな書式で書き出す必要がありまして…。
1度出来れば良い&手書きで直していると、
ミスも出そうなので、一気に根本を乗っ取れたらなと。
もう1つはまだ、与しやすいのですが、
doubleやfloat型の「0.0」という数字を、<<にて小数点が付いたままtxt出力したいなと。
(普通にやると「0」になってしまうので)
0099デフォルトの名無しさん
NGNGchar_traits::lengthで両方の長さ調べて短いほうでchar_traits::compareして・・・
っするしかないの?
0100デフォルトの名無しさん
NGNGclass wrapstream
{
ostream *os;
public:
wrapstream(ostream &p):os(&p){}
template <class T>
wrapstream &operator<<(const T &a)
{ (*os)<<"--- "; (*os)<<a; (*os)<<endl; return *this; }
};
cout<<fixed;
wrapstream ws(cout);
ws<<10.0<<20.0;
これでどうでしょうか?
小数点がついたまま出力したりするのはios_baseで設定することができるのでそれを参照してください
0101デフォルトの名無しさん
NGNGstrcmp
0102デフォルトの名無しさん
NGNGす、素晴らしいコンポジションであります_| ̄|○
もはや、手作業による長く地味な書き換えしか無いと思ってたのが、
出力先を置換するだけで、一瞬にして作業が終わってしまいました。
いやはや、いくら感謝してもし足りません。ありがとうございました。
0103デフォルトの名無しさん
NGNGウヒョ! いい男・・・
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGtellg?
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG外で宣言したときの違いを教えてください。
中で宣言すると、メンバ関数の戻り値に
宣言した構造体を用いることができないようなのですが、
それ以外に違いや制限はあるでしょうか?
// ↓中で構造体を宣言
class c {
struct s {
// 〜
};
// 〜
};
// ↓外で構造体を宣言
struct s {
// 〜
};
class c {
// 〜
};
0110デフォルトの名無しさん
NGNG返せるよ。
class A {
struct B {
int i;
} b;
public:
B func() {
return b;
}
};
0111デフォルトの名無しさん
NGNG0112109
NGNGありがとうございます。
インライン関数にするとエラーがなくなりました。
インライン限定なんですね。
クラス内部情報の管理に使う構造体なので
宣言を外部に見せたくなかったのですが、
インライン関数ばかりにするわけにもいかないので、
もう宣言を外に見せるようにするしかないですかね。
0113デフォルトの名無しさん
NGNG悪いけど...
> インライン関数にするとエラーがなくなりました。
と言うことから...
> インライン限定なんですね。
と結果を出す奴は、プログラマには向いてないと思う。
class A {
struct B {
int i;
} b;
public:
B func();
};
A::B A::func()
{
return b;
}
0114デフォルトの名無しさん
NGNGぶっちゃけ処理系は何よ?
0115デフォルトの名無しさん
NGNG>と結果を出す奴は、プログラマには向いてないと思う。
>>114 もな。
0116デフォルトの名無しさん
NGNG構造体を見せたくないなら、構造体へのポインタをメンバにすればよかれ。
0117デフォルトの名無しさん
NGNGstruct B {
int i;
B(int j) : i(j) {}
} b;
public:
A(int i) : b(i) {}
B func() {
return b;
}
};
int main()
{
A a(123);
std::cout << a.func().i << std::endl;
}
0118デフォルトの名無しさん
NGNGその方法でうまくいきました。
自クラスで宣言した構造体なので、スコープ演算子を
使わなければいけないとは思いつきませんでした。
>>114
VC++6.0を使ってます。
>>116
class A {
struct B {
friend class A;
// 〜
};
// 〜
};
とやってみたのですがエラーでした。
(>>111はこういう意味ではない?)
0119デフォルトの名無しさん
NGNGBはAのスコープ内にあるから、言ってみれば A::B だからfriend class
宣言なんて不要だよ。
0120デフォルトの名無しさん
NGNGint (*p)[10];
として、
p = new (int [10]);
なら、 new int[10]と解釈されるみたい。
無理矢理、new[]を使って、
p = new [1][10];
なら出来るけど・・・
0121111
NGNG0122デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
new int[10] の何が不満なんだ?
0123デフォルトの名無しさん
NGNGp = reinterpret_cast<int (*)[10]>(new int[10]);
0124デフォルトの名無しさん
NGNGその悲しみはよく分かるが配列型を基本型と同じには扱えないのが
C/C++の悪しき特長だ
0125124
NGNGtypedef int array[10];
main(){
int *ip=new int;// OK!!
array *ap=new array;// Error!!
}
0126120
NGNG規格読んでたんだけど、よく分からなかった・・・
>>122
いや、ただの疑問。
>>123
これだと、delete時にもキャストしなければならない罠。
>>124-125
なるほど、つーことは配列へのポインタは必ずnew[]を
使わなければならないってことか・・
0127デフォルトの名無しさん
NGNGstate post office abbreviations, and the population's size(you should find these data on-line
,or in some reference book). the program should prompt the user to enter
a state name. let the program do a sequential search to find the corresponding state postalcode
and population size. the program should display these data.
0128bloom
NGNG0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG{
GUID *pGUID;
GUID GUID;
} VMRGUID;
g++でコンパイルするとGUID GUID でエラーになるんですが
何か間違っているんでしょうか?
0134133
NGNGtypedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID, *REFGUID, *LPGUID;
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNGGUID は構造体の名前なんだから
変数の名前として宣言しちゃだめ。。。
0137133
NGNGstrmif.h:27642: declaration of `GUID tagVMRGUID::GUID'
winnt.h:1167: changes meaning of `GUID' from `typedef struct _GUID GUID'
>>136
レスありがとうございます。
そうなんですか。これはMicrosoft製のヘッダなんですけど・・
回避できないものでしょうか…。
0138デフォルトの名無しさん
NGNGハァ?適当なこといってんじゃねーよ。
struct S
{
};
struct X
{
struct S S;
};
>>133
ということで、struct GUID;として定義されてれば、
structを付ければ曖昧さが無くなるんだが、
typedefだとどうしていいのかわからん。
回避ってんなら、
typedef struct tagVMRGUID
{
GUID *pGUID;
struct _GUID GUID;// 適当なコメント
} VMRGUID;
これくらいか?
0139133
NGNGありがとうございます。修正してみたのですが
同じエラーになってしまいました。
138 のコードをコンパイルしてみると同じエラーになるようです…。
名前を変更したら通ることは通るんですが…。
struct S {
int a;
};
struct P {
S S; // エラー
};
int main( void) {
P p;
p.S.a = 1;
0141デフォルトの名無しさん
NGNGうそ?????????????????????
typedef struct A{ const static int n = 5;}C ;
struct B
{
::C C;
struct A A;
};
0142133=139
NGNG何度もレスをいただき、誠にありがとうございます。
141さんのコードのようにグローバルスコープに合わせると
コンパイル通りましたー。
GUID GUID の部分ばかり修正していて *pGUID; の修正を
忘れていました。ここもエラーになっていたようで…。
うつけものです。すみません。。基本知識が不足しているので
規格書を読み直してみます。
今回は皆様にご助言をいただきとても助かりました。
ありがとうございます。
↓修正結果はこうなりました。
typedef struct tagVMRGUID {
::GUID *pGUID;
::GUID GUID;
} VMRGUID;
0144デフォルトの名無しさん
NGNG俺の仕様書にわざとコーヒこぼしただろ!!
ココならいえる。
0145デフォルトの名無しさん
NGNG板違いです。
0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNGCがそれなりに分かっているなら「憂鬱な〜」がイイって聞いたのですが。
それともチャンと「Effective〜」のような教本読まないとイクナイ?
0149デフォルトの名無しさん
NGNGEffective〜のような本はどっちにしろ読むべし
0150デフォルトの名無しさん
NGNGありがとうございます。
Effective読んだ後に憂鬱摘み食いしながら
MoreEffective読むことにしてみます。
0151デフォルトの名無しさん
NGNG{
vector3_t(float x, float y, float z) : x(x), y(y), z(z) {}
vector3_t(const vector3_t &v) : x(v.x), y(v.y), z(v.z) {}
vector3_t() : x(0.0f), y(0.0f), z(0.0f) {}
.
.
.
union
{
struct
{
float x;
float y;
float z;
};
float v[3];
};
};
ベクトルを表す構造体&共用体なんですが、いまいちやってる事の意味が分かりません。
共用体によって扱いを楽にしてるのはなんとなく分かるんですが、上の3行って一体・・
0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNGスレ違いだから来ただけだろ。失せろボケ
0154デフォルトの名無しさん
NGNGunion
{
struct
{
float x;
float y;
float z;
};
float v[3];
};
とりあえず、死ね。
処理系依存互換性皆無
0155デフォルトの名無しさん
NGNGあの、151の通りであってるんですが。共用体が構造体に入ってるんです。
もう少し勉強してくらさい。
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGコンストラクタの初期設定子
ようは、構築時にメンバの初期設定してるだけ。
vector3_t v(1.0, 2.0, 3.0);
とされると、v.x = 1.0; v.y = 2.0; v.z = 3.0; となる。
vector3_t v1(v);
とされると、v1.x = 1.0; v1.y = 2.0; v1.z = 3.0; となる。
vector3_t v2();
とされると、v2.x = 0.0; v2.y = 0.0; v2.z = 0.0; となる。
俺も、極めてわかりにくい構文だと思う。
後、無名共用体、無名構造体は >>154 の言う通り処理系に依存する。
0158デフォルトの名無しさん
NGNGおまえら見当違いもいいとこだな
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGCEOのAndre LaMothe氏がOpenGLのパーティクルシステム用に書いたコードの一部なんですが、
この人のコードはとってもワイルドな感じです。
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG必然的にその構文に頼らざるを得ないな。
0164デフォルトの名無しさん
NGNGクラスがあるとして、やっぱりメンバメソッドの頭で
エラーコードのメンバ変数を初期化する
処理を入れてあげるのって普通?
もっと格好いいやり方ですかね?
ようするに、エラーコードを持ったクラスの設計で
もっといいやり方ないでつかね?
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNGもうちょっと知恵をわけてくれたっていいじゃんよ。
例外じゃないよな?って思うときだってあるじゃん。
エラーと例外って意味違うジャン。
0167デフォルトの名無しさん
NGNGここに質問したら、おまいが抱えてる問題を手取り足取り
解決してくれると思ってますか?
しかも質問内容に見合う回答内容もらってると思うが。
掲示板てのは基本的に情報収集&交換の場、
ヒントを得られれば上等と思ってくれたまい。
それが質問スレであっても、だ。
ヒントがあって考える、それすら出来ないヤツは(略
0168デフォルトの名無しさん
NGNG情報少なすぎ。あの情報量では、>>165 が妥当。
0169デフォルトの名無しさん
NGNGお前らの知識を試してみたんだが、この程度だったか。
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGそう、お前に対してはこの程度が妥当。
0172デフォルトの名無しさん
NGNGそのクラスの性質とかいろいろな状況考えないと一概に言えないと思うのよ。
んで、一般論を言えば165じゃねーのってことじゃん?春厨君。
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
0175デフォルトの名無しさん
NGNG□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
0176デフォルトの名無しさん
NGNG例えばこんな感じ。
class Hoge
{
private :
int m_ErrCode;
public :
Hoge() : m_ErrCode(0){}
bool Method1( void )
{
m_ErrCode = 0; //←全てのメソッドの頭でこれを入れるのが
//なんか格好悪いような気がするんです
・
・
・
}
・
・
・
int GetErrorCode( void )
{
return m_ErrCode;
}
};
もっといいやり方とかパターンとか、ないかなと。
0177デフォルトの名無しさん
NGNG可愛そうになるほどすっとこどっこいだな。
0178デフォルトの名無しさん
NGNGもういいから失せなよ。
0179デフォルトの名無しさん
NGNGどうせ、各々のメソッドが成功かどうかを返すんだろ ?
だったら、失敗した時だけエラーコードをセットすれば良いと思う。
(当然、メソッド成功時は GetErrorCode() の値は保証しないことをドキュメントに書いとく。)
0180176and166
NGNG0181デフォルトの名無しさん
NGNGそれだったら、その場で例外投げるとかエラーコード返すなりすればいいじゃん。
何もエラーコードを保存する必要はないような気がするが。
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNGGetErrorCode内で初期化してしまう
0186デフォルトの名無しさん
NGNGそんな汚いプログラムは書くなよ。
0187176
NGNGもうちょっと足してみると
bool Method1( void )
{
m_ErrCode = 0; //←全てのメソッドの頭でこれを入れるのが
//なんか格好悪いような気がするんです
・
・
if( なんか失敗 ){
m_ErrCode = 失敗コード;
return false;
}
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGWindowsみたいにGetLastErrorとでもしておけば辻褄があうだろ
0191デフォルトの名無しさん
NGNG{
if( なんか失敗 ){
m_ErrCode = 失敗コード;
return false;
}
よし、これでどうだ
0192176
NGNGなるほど。そういう手もありかな?
>>181
戻り値をboolと書いてしまったのが
まずかったですね。
boolじゃなくてたとえばstringが戻り値だったとして
失敗して空のstringが返ったとき、なぜ空だったのか
GetErrorCode()で取得みたいな場合も。
0193176
NGNGあ、そっか。あったですね。
std::fstream strm( "Data.txt", std::ios::out | std::ios::in| std::ios::trunc );
if( strm.fail() == true )
fail()ってどうなってんだろ?後で見とこっと。
あれstd::ios::trunc ってどんな意味?
0194デフォルトの名無しさん
NGNGこういうのはマルチスレッドに弱かったりするからなぁ
戻り値はエラーコード専用として使い
引数でstringもらったら?
0195デフォルトの名無しさん
NGNGこの根底の仕方は駄目でしょ
0196176
NGNGあ。こか。
0197176
NGNGするのって、悲しいコードな気もするんですね。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNGCOMは規約としてそうなっている
重要なのは一貫性だと思う
0200Addicted to C++ ◆CPP8mJMMbA
NGNG{
private :
int m_ErrCode;
public :
Hoge() : m_ErrCode(0){}
bool Method1( void ){
//処理
if( なんか失敗 ){
m_ErrCode = 失敗コード;
return false;
}
//処理
return !(m_ErrCode = 0);
}
//…
int GetErrorCode( void )
{
return m_ErrCode;
}
};
0201176
NGNGCOMなってるね。
見えた。一貫性だね。
一貫して全てのメソッドの頭に書いとけば
それはそれでいいね。
別のクラスでは例外投げ使ってたりとか
したらこのクラスは、やっぱよくないしね。
これも例外投げで統一するべきだしね。
catchでエラー取得って、使う側にしたら
スンゴイ使いズらい気がするんだよね…
0202デフォルトの名無しさん
NGNG{
if(!FAILED(p->foo()))
{
if(!FAILED(p->foo()))
{
}}}
こんなのよりマシだと思う、例外は
実際COMのエラーはVBとかJとかでは例外として送出されてた
0203176
NGNGMethod1の前にMethod2が失敗してたとしたら
Method1は常に失敗してしまうじゃん?
だからメソッドの頭にm_ErrCode=0が
必要だと思っちゃうわけですよ。
その頭に書いちゃうことは格好がいいか?ってこと。
話がもどっちまった。
0204Addicted to C++ ◆CPP8mJMMbA
NGNGハァ? マルチスレッド? んなInternational Standardに
ないもんは知らねーYO! ちなみに
if(strm.fail())
は、格好にこだわるならむしろ
if(!strm)
の方が格好がいいかと。
std::ios_base::out | std::ios_base::truncは
ファイルを切り詰めるんじゃなかったかな。
0205デフォルトの名無しさん
NGNGtrue が返るときは必ず m_ErrCode == 0 が保証されるんじゃない?
トリッキーだけど。俺は return m_ErrCode=0, true; と書きたい。
0206205
NGNG0207Addicted to C++ ◆CPP8mJMMbA
NGNGすまぬ、マルチスレッドなどと訳のわからぬことを書いた。
てっきりMethodをマルチスレッドで同時実行するのかと。
逝ってきます y=-( ゚д゚)・∵ ターン
とまではいかないまでも(w、
>Method1の前にMethod2が失敗してたとしたら
>Method1は常に失敗してしまうじゃん?
これはなぜに?そういうクラス仕様?そうでなければ
このコードは自動的に最新のエラーコードに更新されると
思うのだが。
0208デフォルトの名無しさん
NGNG別にマルチスレッドの話ではないと思う
>>203
同じクラスのメソッドが失敗したということは
その状態のまま他のメソッドを呼んではだめでしょ
0210176
NGNG200のコードは満たしてます。
問題ないでつ。
0211デフォルトの名無しさん
NGNGもう・・・ポインタ一本で行っていいかな・・・?
0212デフォルトの名無しさん
NGNGい
と
も
0213デフォルトの名無しさん
NGNG楽ができるやり方ありませんか?
class Test
{
Test ()
{
if (m_instance) throw Error ();
m_instance = this;
}
~Test () { m_instance = 0; }
static Test* m_instance;
};
0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNGうちの環境ではそんなコマンドないけど・・・
C-h k C-c C-v
C-c C-v is undefined
0216213
NGNGC-M-a C-p C-@ C-M-e M-w で C-y
って、マジレスキボン……
templateっぽいけど、さっぱりわからんかった
0217デフォルトの名無しさん
NGNGあのさ、何がしたいんだかわかんないよ。
class Test の微妙にそれぞれ違うバージョンを作りたいって事なんだろうけど、
どう微妙に違うのかわかんないと案の出しようが無いだろう。
0219デフォルトの名無しさん
NGNG…これってAPIスレの方が適切だったりしますか?
0220219
NGNG0221213
NGNG>>213のTestみたいに、好きな時に作れるけど同時に一つしか存在できない
クラスを、いくつか作りたいんです。なのでboostのはちょっと。
今は、すべてのクラスでTestみたいなのを個別に書いてるんですが、
もうちょいなんとかならんのかなと思いました。
Testには書けてませんが、デフォルトコンストラクタ以外のも使いたいです。
>>219
そうみたい。
0222デフォルトの名無しさん
NGNG{
static SubClass *inst_;
public:
singleton()
{
if (inst_) throw Error();
inst_=static_cast<SubClass *>(this);
}
~singleton()
{ inst_=0; }
static SubClass &instance()
{ return *inst_; }
};
template <class SubClass>
SubClass *singleton<SubClass>::inst_=0;
//使い方
class Test : public singleton<Test>{};
0224デフォルトの名無しさん
NGNGそれとも自作が基本ですか?
0225デフォルトの名無しさん
NGNGよくわからんが、ACE とかはどうだろう?
0226デフォルトの名無しさん
NGNG.NET風の薄いラッパを自作して使ってる。
0227デフォルトの名無しさん
NGNGどこか良い開設サイトをご存知ありませんか?
0228デフォルトの名無しさん
NGNGする時、オーバーロード関数はstdに入れちゃう?Koenig lookup
させる?そもそもオーバーロードなんてしない?
0229デフォルトの名無しさん
NGNG>> GetErrorCode()で取得
> こういうのはマルチスレッドに弱かったりするからなぁ
煽り ? 単なる無知 ?
エラーコードがスレッド毎に保存されることぐらい常識だと思うが...。
0230デフォルトの名無しさん
NGNGstd に入れるのは規格違反。
0231デフォルトの名無しさん
NGNG煽り? 周囲の文を読んでいるか?
クラスのメンバ変数だぞ?スレッド毎に保護されるわけ無いだろ…。
0233名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNGノ∩
⊂ ヽ ←>>233
/( 。Д。 )っ
U ∨ ∨
・@;∴‥
∧_∧ ∩ :: :.
( ・∀・)/ :: ::
(つ / :: :'
人⌒l ノ :: :: ガッ
し(_)
0237デフォルトの名無しさん
NGNGこれ、良いんじゃね?
0238名無しさん@Emacs
NGNGそれ何?説明読んだけどイマイチ分からんかった。
C++の文法を拡張した物のC++へのトランスレーターって事?
0239デフォルトの名無しさん
NGNG・fを呼び出す
・fのアドレスを取る
の2つだけである、ってのは正しいかな?
0240228
NGNGnamespace myns {
class Class1 { ... };
swap(Class1 &x, Class1 &y) throw();
...
namespace junk {
using std::swap;
}
template <class Iter> void foo(Iter s, Iter e) {
using namespace junk;
Iter i1, i2;
...
swap(*i1, *i2);
}
}
なんて絶対やりたくないんだけど。
やっぱりオーバーロードしようとするのが間違い?
0241230
NGNG俺は常に.cppの頭でusing namespace std;する人なので
それは考えたことがなかった。。。けど、そんな複雑にせんでも
template <class Iter> void foo(Iter s, Iter e) {
using std::swap;
Iter i1, i2;
...
swap(*i1, *i2);
}
だと何か問題あるのか?
0242デフォルトの名無しさん
NGNGすまん書き間違えた...
×: エラーコードがスレッド毎に保存されることぐらい常識だと思うが...。
○: (マルチスレッドを考慮に入れるなら) エラーコードをスレッド毎に保存することぐらい常識だと思うが...。
まさかやり方知らないとか ?
0243デフォルトの名無しさん
NGNGリフレクションが使えるC++
0244デフォルトの名無しさん
NGNGgccだとどうやるの?
0245デフォルトの名無しさん
NGNG0246228
NGNGそれだとmyns::swap()が見えない。
ちなみに単にswap()だけ、あるいはusing namespace stdだと、
*i1,*i2がprimitive型の時にstd::swap()が見えなくなる。
0247デフォルトの名無しさん
NGNGだからメンバ変数だっていってんだろ!!
オブジェクト一つずつにそんなことする気か?
>threadハンドルをキーにmapする。
これじゃ足りねーよ
0248デフォルトの名無しさん
NGNGスレッドは C++ の標準じゃねーから、単に gcc と書かれても困る。
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNGJavaだったらスタティックイニシャライザでクラスに属するリソースの初期化処理をやりますよね。
でも、C++では言語としてそのような機能はないみたい(あるのかも知れないが、私は知らない)。
そこで、以下のようにグローバル変数で初期化しているのですけど、
namespace _hoge {
pthread_mutex_t mutex;
class Initializer {
public:
Initializer(){
pthread_mutex_init(&mutex, NULL);
}
};
Initializer initializer;
};
なんかダサい気がします。もっとよい方法を識者の方に伺いたいです。
(ちなみに、mutexをクラスのメンバにしてPTHREAD_MUTEX_INITIALIZERで初期化すると
「インテグラルじゃない値を初期化しようとしてる」みたいな警告が出るのでもっとダサい)
0251デフォルトの名無しさん
NGNG二回目以降はスキップ。
ダサいのがいやならカエレ!
0252デフォルトの名無しさん
NGNGpthread_mutex_t を、initするクラスでラップしといてから
template<class T>
inline CMutex& common_mutex_of() {
static CMutex mutex;
return mutex;
}
0253250
NGNGコンストラクタ内で初期化する方法だと、mutexを初期化するのは、メインスレッド
でやらないと駄目。でもメインスレッドから hoge::init() みたいなのを呼ぶのはダサい(呼び忘れるから)。
で、コンパイル時か、実行時でもmain関数より前に初期化を行いたい。
0255デフォルトの名無しさん
NGNGほら
pthread_mutex_t mutex;
bool pinit(){ pthread_mutex_init(&mutex, NULL); return true; }
bool pinitialized=pinit();
これでどうよ?
0256デフォルトの名無しさん
NGNGそれ一般的に使われてんの?
学究的な興味なんざ小指の爪の先ほどもない。
職業プログラマとして必要な技術?
0257デフォルトの名無しさん
NGNG0258250
NGNGあ、それでいいのか。
でもやっぱグローバル変数使わざるを得ない?
staticなメンバ変数と関数だけで済ませられないでしょうか。
(駄目なら、グローバル変数での初期化が定石ってことでいいのでしょうか)
>>256
標準ライブラリで使われている気が、、、
0259デフォルトの名無しさん
NGNGstaticなメンバ変数はほとんどグローバル変数と同じようなもんだぞ?
0260デフォルトの名無しさん
NGNGうーむ、ぐぐっても解説等出てこないから比較的新しい技術なのかと思っていたが、
C++の標準的な「何か」なのかな・・・
CからC++へ、なんとなく体で移行してきたんでわからんことが大杉。
本腰入れて勉強しないと限界みたい・・・
0261デフォルトの名無しさん
NGNGさてどうする?
0263デフォルトの名無しさん
NGNG無名ネームスペースに閉じ込めたら?
0264デフォルトの名無しさん
NGNG正しくない。
意味のある使い方がまだある。
0265250
NGNGなるほど。っていうか、無名namespaceってのは初めて知りました。
mutex を、それを利用するクラスのメンバにして、
初期化は無名namespaceのグローバル変数を使ってやると。
それが一番かもしれないですね。
0266名無しさん
NGNGるいじの質問もあるし…
ぽんと,いい考えがうかばないのか?
0267デフォルトの名無しさん
NGNGそういう人はとっくにC#に以降済みだし。
0268デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>266
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNGユーザー定義型を使って標準ライブラリのテンプレートを特殊化することは認められている。
17.4.3.1 -1- (ttp://www.kuzbass.ru/docs/isocpp/lib-intro.html#lib.reserved.names)
オーバーロードの追加が認められているという記述は見当たらなかった。
0272デフォルトの名無しさん
NGNGテンプレートライブラリを作成するときにstd::swap(a,b)を使うことを考えると、
自前のswap処理を作ったならstd::swapの特殊化をしておくべきだと思うんだが、
boost::scoped_ptrなんかは、boost::swapが定義されてるな。
これだと、
scoped_ptr<T> a,b;
std::swap(a,b);
と書いても、a.swap(b)にはならないな。
0273272
NGNG↑によると、
namespace std
{
template<typename T>
class X {};
template<typename T>
void swap(X<T>& rhs, X<T> lhs);
}
これは特殊化ではなく、オーバーロードの宣言になるので、規格違反になるそうだ。
結果として、
自前のクラスについてstd::swap等の特殊化はできるが、
自前のクラステンプレートについては(規格に従う限り)不可能らしい。
0274デフォルトの名無しさん
NGNGその static なデータメンバの定義を行っても、リンク時に一つにまとめられてしまうよう
なのですが、これは規格に則った動作でしょうか。
-- X.h --
template<class T> class X {
static T x;
};
template<class T> T X<T>::x;
-- Foo.cpp --
#include "X.h"
void foo()
{
X<int> a;
}
-- Hoge.cpp --
#include "X.h"
void hoge()
{
X<int> b;
}
ここで Foo.cpp と Hoge.cpp をコンパイルしてリンクしても、とくに X<int>::x の
多重定義にはならず、正常にリンクされます。(g++ と VC++ で確認)
しかし、C++第3版の 13章7節によると「非inline の static メンバは、どこかの翻訳単位に
ユニークな定義を持たなければならない。」とあり、上のような動作は保証されていない
ようなのです。
0275デフォルトの名無しさん
NGNG14.5.1.3にX.hの内容と同じ例があげられている。
その挙動を疑うなら、以下のソースも疑うことになると思うのだが・・・。
-- X.h --
template<class T>
void f();
-- Foo.cpp --
#include "X.h"
void foo()
{
f<int>();
}
-- Hoge.cpp --
#include "X.h"
void hoge()
{
f<int>();
}
0276275
NGNG-- X.h --
template<class T>
void f(){}
0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNGを元に戻すテーブルかなにかはありませんか?
0279デフォルトの名無しさん
NGNGWinならUnDecorateSymbolNameというのがある
0280デフォルトの名無しさん
NGNG?HogeHoge@@YAHG@Z == int __cdecl HogeHoge(unsigned short)
0281278
NGNGすばらしいですぞ、このような時間に!!!
はげしくあげしく、感謝します。
0282デフォルトの名無しさん
NGNGこういう場合は、2つのクラスを、同じヘッダにまとめるしか無いのでしょうか?
----------------A.h
#ifndef A_H
#define A_H
#include "B.h"
class A(){
A( B* b );
};
#endif
----------------B.h
#ifndef B_H
#define B_H
#include "A.h"
class B(){
B( A* a );
};
#endif
----------------
0283デフォルトの名無しさん
NGNG#ifndef A_H
#define A_H
#include "B.h"
class B;
class A(){
A( B* b );
};
#endif
----------------B.h
#ifndef B_H
#define B_H
#include "A.h"
class A;
class B(){
B( A* a );
};
#endif
----------------
0285デフォルトの名無しさん
NGNGint x=0;
int *a = &++x; // OK
int *b = &x++; // エラー
bの初期化でエラーになるのはなぜでしょうか?
コンパイラによれば'&'に左辺値がないとのことですが・・・。
自分のイメージとしてはxのアドレスでbを初期化した後、
xをインクリメントするという感じなのですが・・・。
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGエラーですよ
0288デフォルトの名無しさん
NGNG下は&xが評価された後にインクリメントされるから、
一時領域のインクリメントはできないのか、あいまいさではじかれてるのかどっちかでしょう。
エラーコードを見ればどっちかわかる。
0289285
NGNG動かせるかではなく、なぜエラーになるのかです。
結合順位からいえば、もともとインクリメント演算子の方が強いのですが・・。
0290デフォルトの名無しさん
NGNG>論理的に可能であれば、左辺値の被演算子を取る演算子の処理結果は、
>その左辺値被演算子を示す左辺値になる。
(略)
>int *p = &++x; // p は x を指す
>int *q = &(x++); // エラー: x++は左辺値(xに格納されている値)ではない
x に副作用が発生するタイミングは前置でも後置でも ; に至るまでの
いつかでしかないと思うのだけど前置のみ左辺値になるのはどうして
だろう。
0291デフォルトの名無しさん
NGNGまあ ++x は、極論すれば、{x = x + 1, x} と同じだからアドレスがとれる。
でも、x++ は、{(x = x + 1)} と言う式になるから、アドレスが取れない。
0292デフォルトの名無しさん
NGNG0293285
NGNGあくまで&に対する左辺値が無いということが原因みたいですね。
ちなみに
int *r = &(x += 1); // OK
これはOKでした。これが前置と同じことなんですかね・・・。
後置だとカッコの中身が先に評価されないとか(超適当)。
0294デフォルトの名無しさん
NGNG0295デフォルトの名無しさん
NGNG前置の場合 x の副作用が式の評価前に行われるのは保証されてるの?
0296デフォルトの名無しさん
NGNGa = 0;
b = a++;
c = ++a;
bは0、aは1になるのはわかってんだよね?
0297デフォルトの名無しさん
NGNG○ bは0、cは1
0298デフォルトの名無しさん
NGNGこのままじゃcは2になるやん。
まぁ雰囲気だけ味わってくれ・・鬱だ死のう。
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNGint  operator++(int&,int);
int  x = 0;
int* a = &(operator++(x));
int* b = &(operator++(x,0));
0301デフォルトの名無しさん
NGNGT operator++(int) { T temp=m_nakami; m_nakami+=1; return temp; }
後者の返り値は値(一時変数だから参照を返せない)だから
アドレスがとれないってことじゃなくて?
0302デフォルトの名無しさん
NGNG得ないということ? template とか。本末転倒な気もするけども。
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNG↑こんなコード、コンパイルできるようにしてもなんのメリットもないだろ。
0307デフォルトの名無しさん
NGNGだからなんなんだ?
勉強のできないやつってのは、なぜそうなるか?どういう原理なのか?
といったことにはまったく興味をしめさず、できればいい、動けばいい
的な考えなんだよな。だから応用もきかないし、所詮そこ止まりの人間。
そういう奴はベーシックでもやってりゃいい。
0308300
NGNGオーバーロード可能な演算子のシグネチャとして、
C++では演算子'++'を>>300のように定義した。
この定義には「基本型でない型の振る舞いと対称性を保つ」目的があったかもしれない。
その結果、Cではコンパイルできなかった式'&++x'はコンパイル可能になった。
ここは「コンパイル可能にせざるを得ない」という話になるだろう。
だが、'&x++'「エラーにせざるを得ない」なんて話には、どうにもつながらない。
ちなみに、300==305。
>>307
何のメリットも無いのに、Cと異なる挙動とする意味でもあるのか?
0309デフォルトの名無しさん
NGNGもし>>302の疑問が正しいのであればそもそもC言語でも駄目なのはどうしてだ?
C言語では基本型以外にoperator ++は定義できない
0310デフォルトの名無しさん
NGNGそういうこと言っているわけじゃねぇだろって
もっと一般的な話だろ(プログラムに限らずな)
0311306
NGNGCと比較すると解釈が逆になることが分かるな。
でもメリットて話だとしたら、&++x にどんなメリットがあったのか
疑問だ。Cと同じように左辺値になり得ないとしたら問題が起こる
のだろうか。
0312デフォルトの名無しさん
NGNG意味がわかりません!!メリットなんて別にないだろ!!
0314306
NGNG++x も
0315デフォルトの名無しさん
NGNGfor(int i = 0; ... ; ...)
このiのスコープもデフォルトではforブロック外だよな、.netは。
ほかにも、標準C++に沿ったコーディングでエラーにもなるし。
標準C++のコンパイラってあんの?
0316デフォルトの名無しさん
NGNG0317300
NGNG> &++x も C と同じように左辺値にならなければよかったんでは
左辺値にならないとしたらオーバーロード可能なシグネチャの定義が、
int operator++(int&)
というようなものになり、
ユーザー定義型で効率のよい実装が難しくなる。
>>310
あれ?外してた?あんた>>307か?
何を突っ込まれたのかわからない。ごめん。
0318デフォルトの名無しさん
NGNG++x ←これは左辺値になるけど
x++ ←これは左辺値じゃない
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNGとかできてもうれしくないしな・・・
0321デフォルトの名無しさん
NGNGこうしたのかもしれないね・・・。なにを基準に決めたのか知らんけど。
0322デフォルトの名無しさん
NGNG今議論されてることって一貫性の問題?
0323322
NGNG0324デフォルトの名無しさん
NGNG読者をなやますようなコードをちりばめるね・・・。
参考書というよりは教科書チックだな。
0325デフォルトの名無しさん
NGNGエラー。
0326デフォルトの名無しさん
NGNG*++x = *++y;
こうじゃないの?
++x = y++
は何が起こるの?
0327デフォルトの名無しさん
NGNGってけっきょく???で上書きされるから
インクリメントを事前にしても意味ないんじゃ・・・。
0328306
NGNGなんだかな・・・。
0329デフォルトの名無しさん
NGNG勘違いしているだけでしょう。
0330デフォルトの名無しさん
NGNGint y = 5;
++x = y++;
cout << x << endl;
cout << y << endl;
result:
5
6
0331デフォルトの名無しさん
NGNG++xは意味がないですね
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGそれは x = x++; と同じで結果が未定義なのでは。
0334デフォルトの名無しさん
NGNG++x = x++;
cout << x << endl;
result:
2
(VC++.net)
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNGresult:
2
(BCC5.6)
2
(MingGW 3.2.2)
0338デフォルトの名無しさん
NGNG0339ハンバーグフートーハルコーギョーコーコー
NGNG0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNG#include <cstdio>
とすれば、<stdio.h>で定義されている関数がstd名前空間内に入っている形で
利用できると理解していたのですが、
std::puts("俺");
が、「'std'はクラスでも名前空間でもない」と言われます。また、
::puts("誰");
だとコンパイルが通ります。私の勘違いなのでしょうか。
環境はVC6.0です。
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNGVC6.0を窓から投げ捨てろ
それかSTLportをインストロール
0344デフォルトの名無しさん
NGNGそういうことでしたか。
VCを投げ捨てる決心がつくまでの間は、namespace std{ と } で
何とかやっていけそうです。有難うございました。
0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNG例外的なことが起きた時
0348デフォルトの名無しさん
NGNGハァ
0349デフォルトの名無しさん
NGNG実はその「例外的」の例外の定義について深く知りたかったり…。
0350デフォルトの名無しさん
NGNG0351デフォルトの名無しさん
NGNG例外でもなんでもなく、ごく自然にあり得るエラーでも、
すぐ例外投げて責任転嫁する糞な設計のライブラリを
嫌々渋々使わされるとき。
0352デフォルトの名無しさん
NGNG人によって例外の定義は変わる。
ファイルが開けないというのを例外だという人もいれば
それは非常によくあることだから例外ではない、戻り値で知らせるべきだという人もいる
だからごめんなちゃい、わかんないよ
0353デフォルトの名無しさん
NGNGそんなライブラリ使うの止めて、あんたがすばらしいライブラリつくりゃ委員で内科医 ?
0354デフォルトの名無しさん
NGNGハァ
0355デフォルトの名無しさん
NGNGrun();
done();
と失敗することを全く考えずに正常系の処理をとりあえず書く。
で、後から判明した失敗する要因をすべて例外として投げる。
0356デフォルトの名無しさん
NGNGiostream系もEOF(やその他エラー)で例外投げるようにできなかったっけ?
0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGワラタ。
ありがちな泥縄設計だね〜
一部の人にはシャレにならなかったりw
0360デフォルトの名無しさん
NGNG正常系-例外の分離が本質じゃないのか、C++の例外は?
たとえばWindowsのSEHですらcontinueがあるのに、
それすらもない例外なんだから、それ以外の用途は無いだろ
0361デフォルトの名無しさん
NGNGbool T::operator==(U const & b) があればいらないですよね?
0362デフォルトの名無しさん
NGNGユーザー定義の変換がある場合は、そうとも言い切れない。
0363デフォルトの名無しさん
NGNGどんな変換の場合でしょうか?
T型への変換があった場合でも T::== が呼ばれますよね?
0364362
NGNG↓MEMBERの定義を変えてコンパイルして見れ。
#define MEMBER 1
struct S;
struct T
{
    T();
    T(const S&);// S to T
#if MEMBER
    bool operator==(int) const;
#endif
};
#if !MEMBER
bool operator==(const T&,int);
#endif
bool f(const S& s,int i)
{
    return s == i;
}
0365デフォルトの名無しさん
NGNG全て例外投げてます。
って安易な考えじゃだめなのかなぁ。
0366デフォルトの名無しさん
NGNGなるへそ。サンクス。
0367デフォルトの名無しさん
NGNG「復帰が不可能または復帰する必要無し」とかいう用件は、
ライブラリを使う側、使う場所で決まると思うが。
0368デフォルトの名無しさん
NGNGiostream の exceptions みたいにすればいいじゃん。
0369デフォルトの名無しさん
NGNGで実際は>355的な発想でちゃんと設計していくんだけど
例外的な使い方としてgoto的な例外(処理中止例外みたいなの)も織り交ぜるのが通のやり方。
0370デフォルトの名無しさん
NGNGエラーが発生した状態を保持できるようにするのは
そう簡単に決心がつくものじゃない。
全ての処理の前にその状態を問い合わせる必要が出てくる。
0371デフォルトの名無しさん
NGNGもちろん、エラー後の処理を判断しかねる場所では、戻り値でエラーを返します。
特にループ内でも頻繁に使用されるような関数であれば、例外処理のようなコスト
の高い処理を毎回行ってその都度判断を行う事は避けた方が良いと思います。
でも、判断できる場所では、例外無く例外を投げてます。
ってやり方をしてたら、部下に
「例外処理は本当の例外が発生したときのみ使用した方が良いのでは?
想定できるエラーで例外処理を行うのは邪道だと思うんですが」
と意見されてしまいますた…。
0372デフォルトの名無しさん
NGNG想定できないエラーってなに?という線引きの話だけど
メモリが足りない、ファイルがオープンできない、
他のプロセスが書き込んだあるべきデータが存在しない。
ライブラリにおかしな引数が渡された。
といった自分は悪くないけど発生しうるエラーはすべて例外にするかな。
自分が悪い=バグはそれ専用の例外を投げる。
偶数はスキップして奇数のみを処理する。
という普通にあり得るケースはコスト以前に例外にはしない。
0373デフォルトの名無しさん
NGNGこの手のどっちでもいいことって、宗教戦争になるからなぁ。
> ファイルがオープンできない、
これ1つとっても、ユーザーがファイル名を入力していたなら単なるエラー処理とも言えるし。
自分が作成したファイルだったりしたら、例外とも言えるし。
ようは好みの問題だろ。結論なんか出ないよ。
0374デフォルトの名無しさん
NGNGその場合は悪あがきせずにabort()するべきだと思うが。
ネットワークアプリだったら、バグっているのに実行続けたら、
セキュリティホールになるだろ。
0375デフォルトの名無しさん
NGNGthrowって書いた本人は間違いなくエラーを予測しているだろうが。
俺は、自分自身を復旧させる気が無くて、デストラクタ以外の
今後の動作を保証したくない時か、単にprivate関数の中での
エラーを一番外のpublic関数でまとめて処理したい時に例外にしてる。
0376371
NGNG同じくそういう手法を用いてます。
逆に、値オブジェクト系のクラスを設計する時は、
なるべくエラー処理を例外処理で行わないよう気をつけてます。
パフォーマンス的な問題で…。
ちなみに、私の部下が言った「想定できないエラー」とは
>>372さんが中段に書かれているような事でした。
実はその部下に正直に「私は例外処理に詳しくないので、休日使って調べてみる。ごめん」
と言ってしまいましたが、上司として言っちゃダメな事なんだろうなぁ…。
0377デフォルトの名無しさん
NGNG俺は比較的良い上司に思える
0378デフォルトの名無しさん
NGNGhttp://www.boost.org/more/error_handling.html
http://www.boost.org/more/generic_exception_safety.html
ディヴィッド エイブラハム:「↓嫁」
http://boost.cppll.jp/HEAD/more/error_handling.html
http://boost.cppll.jp/HEAD/more/generic_exception_safety.html
0379デフォルトの名無しさん
NGNG理想の上司とは「これは仕様だ」といって突きすすむような人のことだよネ。
0380デフォルトの名無しさん
NGNGありがとうございます。とても勉強になりました。
(もしかしてここに書いてある内容は常識だったりしますか…?)
>>379
正しい知識を基に(環境要因を含めて)妥当な判断を下せて
(多少強引でも)突き進める人、が私的に理想の上司かなぁ。
ネタにマジレスと知りつつも。
0381デフォルトの名無しさん
NGNG0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG(void **)&pDirectInput
という表記は一体どういう意味なのでしょうか。void型って型が指定されてないんですよね?
それの2次元配列?にキャスト?ポインタのアドレスを2次元配列にキャスト?意味わからないです。。
0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNGvoid ** はvoidへのポインタのポインタ。但し、void *型はオブジェクトの
大きさがわからないので、アドレス演算をしようとしたり、実体化しようと
するとエラーになる。明示的なキャストが必要。それ以外は普通の
ポインタへのポインタと同じ。
0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNG具体的な例って言うと、ポインタ配列をソートしたりする必要がある時
かなあ。
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG動的二次元配列の代用
0391デフォルトの名無しさん
NGNGその場合はこのAA貼れ。かっこいいぞ。
┌─┐
|も.|
|う |
│来│
│ね│
│え .|
│よ .|
バカ ゴルァ │ !!.│
└─┤ プンプン
ヽ(`Д´)ノ ヽ(`Д´)ノ (`Д´)ノ ( `Д)
| ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄ . ̄◎ ̄  ̄◎ ̄ ◎−>┘◎
ヽ(`Д´)ノ モウコネエヨ!!
( ) ウワァァン!!
/ ヽ
0392デフォルトの名無しさん
NGNG|あ.|
|り |
│が│
│と│
│よ .|
│っ .|
バカ ゴルァ │ !!.│
└─┤ プンプン
ヽ(`Д´)ノ ヽ(`Д´)ノ (`Д´)ノ ( `Д)
| ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄ . ̄◎ ̄  ̄◎ ̄ ◎−>┘◎
ヽ(`Д´)ノ オレイヲイウノガテレクサイゼ!!
( ) ウワァァン!!
/ ヽ
0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNGC++的にはstd::vector<std::string>だろ。
文字列の配列ごときはコードに直接表現できる。
Cとは違うのだよ、Cとは。
0396デフォルトの名無しさん
NGNGCを馬鹿にするな
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG事はC++でも大抵できる。敢えてそれをしないのは、それに替わる
もっといい手段が提供されてきたから。
0399デフォルトの名無しさん
NGNGフルスクリーン動作のゲームをWindowで動作させる監視プログラムを作りたいのですが
ゲームそのものの画面の解像度は変えずに
ディスクトップが1280x1024動作、ゲームが640x480動作を考えてまして
監視しているプログラムだけの画面を切り替えるようにするにはどうすればよいのでしょうか?
ちょっと、わかり難い質問でスミマセン。。。
0400デフォルトの名無しさん
NGNG2.該当アプリのDirectX呼び出しを乗っ取る
3.こんな質問をしているようじゃ絶対作れない
4.そもそもスレ違い
0401デフォルトの名無しさん
NGNGやっぱりDirectXの機能を使うしかないですか・・・
仮想的に画面を作るという方法が楽なのかな・・・
0402デフォルトの名無しさん
NGNGstd::stringのcopy constructorとoperator=がnothrowだと
保証してくれるなら使ってやるよ。
0403デフォルトの名無しさん
NGNG強い保証が欲しいなら自分でラップすればいい。
コピーしてswap使うとか、boost::shared_ptr使うとか、いろいろあるだろ。
0404デフォルトの名無しさん
NGNG(ファイル"A.h")
namespace Aspc {
class Aclass {
Bspc::Bclass Bobj;
};
};
----------------------------------
(ファイル"B.h")
namespace Bspc {
class Bclass {
Aspc::Aclass Aobj;
};
};
こんな関係のヘッダをインクルードしようと思ったのですが
どうしたものだかと悩んでしまいました。
ご教授お願い致します。
0405デフォルトの名無しさん
NGNGヘッダでインスタンスを定義しちゃダメ
0407デフォルトの名無しさん
NGNGnamespace Aspc {
class Bclass;
class Aclass {
Bspc::Bclass Bobj;
};
};
----------------------------------
(ファイル"B.h")
#include "A.h"
namespace Bspc {
class Bclass {
Aspc::Aclass Aobj;
};
};
0408405
NGNGあぁあ、classの中でもやっぱりインスタンスには前方参照は効かんぞ。
そのクラス定義は、論理的にムリだ。
前方宣言+auto_ptrくらいにしとけ。
スレ汚し、まことにもうしわけない。
0410デフォルトの名無しさん
NGNGBの中には必ずひとつのAを入れてください。
さぁ、Aをひとつ、くださいな。
0411デフォルトの名無しさん
NGNGワラタ
sizeof(Aclass)はいくつになるんだよ。
0412459
NGNGclass Bspc::Bclass;
class Aclass {
Bspc::Bclass& Bobj;
};
};
----------------------------------
(ファイル"B.h")
namespace Bspc {
class Aspc::Aclass;
class Bclass {
Aspc::Aclass& Aobj;
};
};
実体はコンストラクタで作られ
0413404
NGNG結局、どっちみち相互依存が大きいので
独立させる意味なしと判断しますた。
namespace Aspc {
class Aclass;
namespace Bspc {
class Bclass {
Aclass Aobj;
};
};
class Aclass {
Bspc::Bclass Bobj;
};
};
とりあえず今回はこれで回避。
>>412
試してみましたが、やはりどうしても
先に読まれるほうの class Bspc::Bclass; のあたりで
Bspcが未定義になってしまうかと思われます。
>>410
あー、上記は例を簡略しすぎてアレな関係になってますが
実際はクラス同士を持ち合っているわけではないのでご心配なく。
0414デフォルトの名無しさん
NGNGほんとは AclassとBclassって、
お互いのポインタか参照を持ち合ってるのか?
0415404
NGNG>>414 もちょい正確にすると、
("A.h")
namespace Aspc {
class Aclass {
void UpdateA();
void FromBclass( データ );
Aspc::BaseClass* pBase;
};
class BaseClass { //実体保持
void Update(); //AobjとBobjの更新ループ
private:
Aspc::Aclass Aobj[n];
Bspc::Bclass Bobj;
};
};
--------------------------------------
("B.h")
namespace Bspc {
class Bclass {
void UpdateB(); //任意のpAclassにデータを投げる
Aspc::Aclass* pAclass[n];
};
};
がんばって要約するとこんな関係ぽ。
名前空間とかおぼえたてで プロトタイプ宣言で
どうにかするのかなと思い。
やっぱりBclassはAspcなしでは動かさないので、
Aspcに内包することにしました。お騒がせしましたー
0416デフォルトの名無しさん
NGNGclass mycl{
public:
static int i1;
};
----ファイルcmycl.cpp-----
#include"mycl.h"
int mycl::i1 = 1;
----ファイルtest1.cpp----
#include"iostream.h"
#include"mycl.h"
int main(){
mycl c;
cout << c.i1 << "\n";
return 0;
}
とやって、
bcc32 test1.cpp cmycl.cpp
とコンパイルしたのですが、エラーが出てしまいます。
静的メンバ変数を使えるようになりたいのですが、ご教授お願いします。
0417デフォルトの名無しさん
NGNGどんなエラーが出たのか書け。
あと、インクルードするファイル名を確認しろ。
0418デフォルトの名無しさん
NGNGインクルードガード。散々ガイシュツ。
0419デフォルトの名無しさん
NGNGオフスクリーン描画、WM_PAINTで転送がメジャーだろうけど
もっとかんたんな方法ない?フラグ立てるだけ、とか。
0420名無しさん
NGNG0421デフォルトの名無しさん
NGNGレス違い
0422デフォルトの名無しさん
NGNGれすじゃないすれ
0423デフォルトの名無しさん
NGNGnullっぽい って言う意味?
0424デフォルトの名無しさん
NGNG0425423
NGNGヌルポインタのことか
あまり使わない単語だから気づかなかった(汗
0426デフォルトの名無しさん
NGNG(゚Д゚)ハンパネー!!!
0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG(゚Д゚)ハンパネーガッ!!!
0429国語が足りない奴
NGNGstruct BMP BP;
};
この構造体をエラーなしにしたい時はどうすれば
いいですか?
でるエラーは「struct BMPは未定義」です。
0430デフォルトの名無しさん
NGNGメンバ変数をstruct BMP *BP;にする。
0431デフォルトの名無しさん
NGNGコンパイルすると次のようなエラーが表示されます。
致命的エラー F1003 c:\Boland\Bcc55\include\stdcomp.h 5:
error 指令: Must use C++ for STDCOMP.H
凄く簡単な下記のようなソースでもコンパイルする際にエラーになります。
一度再インストールしてみましたが、無理でした。
何か対処法はないのでしょうか?
#include <iostream>
using namespace std;
int main()
{
cout << "Hellow world!\n";
return 0;
}
よろしくお願いします。
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG解決しました。本当にありがとうございます。
ついCの癖でそのまま.cにしていました。
0434デフォルトの名無しさん
NGNGご意見が伺えればと思います。
たとえば、
class Hoge {
public:
hoge_t value() const {
// 初期化してないときは、ファイルから読み込んだりして
// メンバを初期化したい。
// でも、いつ使うか分からないのでコンストラクタでは
// 初期化したくない。
// でも、意味的には絶対にconst なのに。。。
}
};
みたいな、メンバを作りたくなったことってないですか?
そんな場合ってどうしてます?
1. しょうがないので、constをはずす。
2. Hoge* h = (Hoge*)this;
3. グローバルな領域に、いつも触れるオブジェクトをおいておいて、
それを参照する。
4. その他
くらいですかね?
1. は、そのためにconstを使わないというのが、のちのち別の弊害を
呼びそうで嫌です。
2.や3.は、このクラスのconstが信用できなくなりそうで嫌です。
結局、オーバヘッドが気になるけど、コンストラクタで初期化して
しまったのですが、なにか良い解決方法ってありますか?
よろしくです。
0435デフォルトの名無しさん
NGNG// 初期化してないときは、ファイルから読み込んだりして
// メンバを初期化したい。
// でも、いつ使うか分からないのでコンストラクタでは
// 初期化したくない。
// でも、意味的には絶対にconst なのに。。。
constの意味解ってますか?
0436デフォルトの名無しさん
NGNGキャッシュ要素やレイトバインディング用には
mutableキーワードが使えるけど
0437デフォルトの名無しさん
NGNGちゃんと読んでくれ。
>>436
そんなものがあるとは、しりませんでした。
なかなか、知らないことってあります。
でも、使い方は難しそうですね。
コーディング規約で使うなとか、書かれそう。
非const のメンバ関数の評価を必要があるまで行わない、みたいな
機構をコンパイラがサポートしてくれたら、、、
とつくづく思います。
0438デフォルトの名無しさん
NGNGそんな便利なものが、、、と思ったが使い方が難しいですね。
結局、コーディング規約で使用不可になるのも時間の問題かと、、、
必要なときだけ評価してくれるメソッドが作れる仕様になって
くれないかな。と思うよ。
0439デフォルトの名無しさん
NGNGいまいちいみがわからn。
ちょっと解説してくれ
0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNGたとえば、円周率の1万桁目を返すメソッドがあったとする。
毎回、1万桁を計算するのは嫌なので、必要なときに計算したい。
これは、意味的にはconstであると考えられる。
もちろん、コンストラクタで計算するというのもありだが、
もし使わないとしたら、計算時間がもったいない。
どうしよう、、、、
という話です。
0442デフォルトの名無しさん
NGNG使い方が難しいといったのは、constという指定では、本来メンバに
副作用があってはいけないと思います。
が、mutableでは、それができることになります。
ちょうど、friendのようなもので、よほどドキュメントが整備されて
居ない限り、動作を追うのが難しくなります。
本来、副作用を極小化することによって、想定できない動作を防ぐために
classやconstというのはあるはずですから。
そこで、たとえば副作用があってもいい、コンストラクタや非constの
メソッドを呼び出したときに、その動作のうち、時間がかかってしかも
使われないかもしれない初期化のコードなどの評価を必要があるまで
遅延させることができたなら、より安全に記述できるんじゃないかな
って思ったって訳です。
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNGmutableが最も威力を発揮するような場面なら
使うのが吉かと。
0445デフォルトの名無しさん
NGNG442=441=.... です。
確かに、素直に使うのが吉なような気はしますが、、、、
friendと同じように、禁止されるんでないかなーという
一抹の不安が。
0446444
NGNG禁止されたら邪悪な方法を使え!
class AAA {
int a;
int* p;
public:
AAA() : a(0), p(&a) {}
void asd(int i) const { *p = i; }
};
素人さんにはお勧めでき(以下略
0447444
NGNGp = new int;
ってやれば邪悪でも何でもないんだけどね、、、
0448デフォルトの名無しさん
NGNGというか、
int* p => int const * const p;
という型に変換されないあたりが、なんか仕様的に嫌に思えてきました。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNGvoid *って何につかうの?
通常目的の型のポインタを使うと思いますが。
0451デフォルトの名無しさん
NGNGint f( int* p )
{
int const * const q = p;
return *q;
}
変換できるぞ。
0452デフォルトの名無しさん
NGNG禁止までされてる場合の理由ってどうなってんですか?
0453デフォルトの名無しさん
NGNGclass Hoge {
public:
hoge_t value() const {
return GetHogeT();
}
private:
hoge_t& GetHogeT(void){
static hoge_t tmp;
return tmp;
}
};
じゃだめなのか?
(メンバの変わりに常にGetHogeTを介して操作する)
0454デフォルトの名無しさん
NGNGHogeインスタンス複数作ってあぼーん
0455デフォルトの名無しさん
NGNGそういう場合は
Hoge* pThis = const_cast<Hoge*>(this);
pThis->メンバ = 値
なんてするのがセオリーかな。
第2の選択肢として変更するメンバをmutable宣言する、ってのもある。
mutableは「決してconstではない」という意味で、全てのメンバ関数から
変更できてしまうので、今回の例では適切ではないだろう。
要約すると、概念的にはconstだが、メンバ変数の値を変更する必要がある場合
1.1部のメンバ関数でしか値を変更しない、または値の変更が例外的な場合は
const_cast<Hoge*>(this) を使う。
2.それ以外、つまり多くの関数で値を変更する場合や値の変更が例外的でない
場合は該当メンバ変数をmutable宣言する。
0456デフォルトの名無しさん
NGNGなぜなんでしょうか?
#include<iostream>
using namespace std;
void test(char*)
{
cout << "char*" << std::endl;
}
void test(bool)
{
cout << "bool" << std::endl;
}
int main()
{
test(static_cast<char*>("a")); //char*
test(static_cast<volatile char*>("a")); //bool
test(static_cast<const volatile char*>("a")); //bool
}
0457デフォルトの名無しさん
NGNG引数を明示的にvolatile char*と宣言するとちゃんと呼び出されるので、
volatileを付けたことによりchar*とはマッチしなくなり、次にポインタが
暗黙的にboolに変換されたためと思われる。
void test(char*)
{
std::cout << "char*" << std::endl;
}
void test(bool)
{
std::cout << "bool" << std::endl;
}
void test(volatile char* p)
{
std::cout << "volatile char*" << std::endl;
}
void test(const volatile char* p)
{
std::cout << "const volatile char*" << std::endl;
}
int main()
{
test(static_cast<char*>("a")); //char*
test(static_cast<volatile char*>("a")); //volatile char*
test(static_cast<const volatile char*>("a")); //const volatile char*
}
0458デフォルトの名無しさん
NGNGスレッドへの引数に使う。
Cでもいえることだが。
0459456
NGNG暗黙的な変換に関しては
なんかしっくりこないことが多い気がする。
一般の関数で行われる標準変換も便利といえば便利だが、
ときには必要もない時もあるし、
動作を変更したいときだってあるはずだと思う。
となるとtemplateと関数オブジェクト使えってことになるわけだが、
それはそれで面倒な訳だが...。
0460デフォルトの名無しさん
NGNGvolatileが勝手に外れるのがしっくりくるのか?
0461456
NGNGそれもそうだねw
勝手にはずれて一見正常に動いてるように見える恐さと
見当違いなものが呼ばれてる恐さの攻めぎあい...。
0462デフォルトの名無しさん
NGNG★☆★☆★☆★☆★☆★☆★☆★☆
0463デフォルトの名無しさん
NGNG{
int f();
int f() const;
int f() volatile;
int f() volatile const;
};
int f( X volatile const & x )
{
return x.f();
}
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNG『FNS最高視聴率祭り国民のチャンスライン電話でもらえる1000万』
という番組が放送されるわけだが、この番組は解答者(ゲスト)が
クイズに答えるのだが、どの解答者がその問題を正解してるか視聴者が
スタジオに電話し答えるわけだ。そして、そこに2ちゃんねらーを出演させようじゃないか!
■手順■
1.番組中に公表される番号に電話する。
2.運良くつながる(つながらない場合は根気よくかけ直す)
3.司会者が「もしもし〜」などと切り替えしてくる。
4.大声で「オマエモナー」と叫ぶ。
5.あとは賞金ゲットのために頑張ってください。
※このレスを見かけたら、できれば5つ以上のスレに貼り付けてください。
【企画本部】
http://that.2ch.net/test/read.cgi/event/1048752014/l50
0466デフォルトの名無しさん
NGNGたとえば、標準ライブラリでhoge.hというヘッダがあってもchogeがない場合は、
extern "C" {
#include <hoge.h>
}
とするのでよいでしょうか?
0467466
NGNG○ 標準っぽいライブラリ
0468デフォルトの名無しさん
NGNGextern "C" は主にC++の名前マングリングを防止するためにある。
Cで書かれたライブラリをリンクする場合はインポートする関数を
extern "C" で囲まないとリンカエラーになる。
0470デフォルトの名無しさん
NGNGこのドスケベ男め
0471デフォルトの名無しさん
NGNG#ifndef __cplusplus
extern "C" {
#endif
// 本体をここに書いてある
#ifndef __cplusplus
}
#endif
としてあることが多いような。
されてないなら>>466のようにするしかない。
0472デフォルトの名無しさん
NGNGすまん。
0474デフォルトの名無しさん
NGNGまんぐりんぐ違い
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGここは卑猥なインターネットですね!!!
0477デフォルトの名無しさん
NGNG(-_-)ウツダシノウ ダンッ ──< ===E∩三⊂∀・ )
0478デフォルトの名無しさん
NGNGメソッド(いろいろなクラスのインスタンスを管理するクラスで)
を作る方法を教えてください。
0479デフォルトの名無しさん
NGNGクラスAのデストラクタはvirtualでなければならないのでしょうか?
0480デフォルトの名無しさん
NGNG意味が良くわからん
0481デフォルトの名無しさん
NGNGclass A{};
class B : public A{};
A *a=new B;
delete a;
とするようなことがあるのならvirtualにする必要がある
0482478
NGNGこんな感じのものを作ってみました。
Factoryクラスがオブジェクトを管理しています。
クライアントがcreateメソッドを呼び出すと、
指定したインスタンスが得られます。
ifの羅列になってしまうのですが・・・
class Factory{
private:
std::list<Object*> m_obj_list;
public:
Object* create(const type_info& a_type){
Object* nobj;
if(a_type == typeid(Integer)){
nobj = (Object*)new Integer;
}else if(a_type == typeid(Symbol)){
nobj = (Object*)new Symbol;
}else{
throw new UExceptionNotSupportType;
}
m_obj_list.push_back(nobj);
return nobj;
}
}
0483デフォルトの名無しさん
NGNGまだいまいちよくわからないのだが
class Factory{
private:
std::list<Object*> m_obj_list;
public:
template <class T>
Object* create(){
Object* nobj=new T;
m_obj_list.push_back(nobj);
return nobj;
}
}
Factory f;
f.create<Integer>();
これじゃだめなのか? なんの役に立つんだこれ?
0485デフォルトの名無しさん
NGNGn個のクラス C0, C1, C2 〜 C(n-1)があり
クラスCm(1<=m<n)はクラスC(m-1)より派生しているとする
また、クラスCmのデストラクタはvirtual宣言されていないものとする
0 <= a < b < nのとき以下のポインタpaがあるとき
Ca* pa = new Cb;
delete pa; によって
C0のデストラクタがvirtualであるときは
クラスCbから継承ツリーを逆にたどりC0までのデストラクタが順に呼び出される
C0のデストラクタがvirtualでないときは
クラスCaのデストラクタのみ呼び出される
オブジェクトCx(0<=x<n)がデストラクトされるとき
デストラクタがvirtualであるときは
クラスCxから継承ツリーを逆にたどりC0までのデストラクタが順に呼び出される
デストラクタがvirtualでないときは
クラスCxのデストラクタのみ呼び出される
デストラクタを正しく呼び出したいのであれば、virtualを付けなければならない。
0486479
NGNGまさしく481の例のようなことをしたかったわけです。
なるほど、よくわかりました。
ありがとうございました。
0487デフォルトの名無しさん
NGNG関数をこうしたほうが使いやすいかな
template <class T>
T* create(){
T* nobj=new T;
m_obj_list.push_back(nobj);
return nobj;
}
0488デフォルトの名無しさん
NGNGstd::string::c_str() は例外を出す可能性があるから、
きちんと例外処理したほうが良いというのは本当ですか?
0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNGconst修飾子について教えて下さい。
やりたいことはMAX.cppのMAX_SIZEを1個変更する事で
すべてのクラスのMAXサイズを変更できるようにしたいのです。
[AAA.cpp]
extern const int MAX_SIZE ;
class AAA
{
chars[MAX_SIZE];
};
[BBB.cpp]
extern const int MAX_SIZE ;
class BBB
{
char s[MAX_SIZE] ;
};
[MAX.cpp]
const int MAX_SIZE=256 ;
んでこれらのソースをコンパイルすると
「定数式が必要です。」でエラーになります。
#defineを使う方法もあるのですがデバッガに
かけた時に変数名が消えてしまうのでやりたくないのです。
constとexternの使い方まちがってますか?
環境はVC++6です。
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNGこりゃ無理だろ
[max.h]
const int MAX_SIZE=16; // or enum { MAX_SIZE = 16 };
[a.cpp]
#include "max.h"
class A { char chars[MAX_SIZE]; };
[b.cpp]
#include "max.h"
class B { char chars[MAX_SIZE]; };
これでどう?
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNGpublic:
static int c;
};
int Hoge::c = 100;
int main () {
Hoge *pHoge = NULL;
cout << "c = " << pHoge->c << endl;
return 0;
}
これ動くのだけれど保証されていますか。
お願いします。
0495デフォルトの名無しさん
NGNGインスタンスのメンバには一切触れないから大丈夫だと思うが
すなおに
cout<<"c = "<<Hoge::c<<endl;
としてはだめなのですか?
0496デフォルトの名無しさん
NGNG図書館で独習C++第3版と
1000万人のコンピュータ科学1入門編気軽にプログラミング
っての借りてきた。
BCPadで作ってとGCCでコンパイルします。
よろしくお願いします
0497デフォルトの名無しさん
NGNGいばらの道になるかもしれませんが、ガンガってください
0498デフォルトの名無しさん
NGNG492さん
493さん
どうもありがとうございます。
コンパイル通りました。
const修飾された変数は、格ソース固有の持ち物
であって外部に見せる(公開)する事はできない。
よって、*.hにconst変数を記述し各々のソースに
取込んだとしても、各ソースにconst変数が確保
される。
と理解しましたが合ってますか?
s/格/各/
0499デフォルトの名無しさん
NGNGMFCでアプリケーション作成しているのですが、midiを流す方法がわかりません。
DirectXの知識がないので、APIを使えばできるとか聞いたのですが。
まだWindowsプログラミングは初心者なものでどうしていいか・・・
アドバイスお願いします。
0500デフォルトの名無しさん
NGNGスレッド一覧の検索ぐらいしようよ・・・
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNGclass xxx
{
public:
union
{
struct
{
xxx xxx; // xxx は他のクラス
float xxx;
};
struct
{
float xxx, xxx, xxx, xxx;
};
float xxx[4];
};
.
.
.
てのがありまして、これを linux の g++ でコンパイルすると、
struct の 所で、
0503502
NGNGanonymous class type not used to declear any object
と言われます。それで struct の定義の後に とりあえず s1, s2 と名前を
つけたら、今度は、
member "struct quat::{anonymous union}::{anonymous} quat::{anonymous union}::s1" with
constructor not allowed in union と言われました。
それでさらに union に u1 と定義してみましたが、同じエラーになりました。
これってどうすれば通りますか?
0504デフォルトの名無しさん
NGNGインクルードファイル"stdio.h"が開けないってエラーでました。
#include<stdio.h>
main()
{
printf("Hello World\n");
}
初歩的すぎてごめんなさい。
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNGこれと
#include <stdio.h>
これの違い調べてみ
#include "stdio.h"
そしたらついでに分かるから
0508504
NGNG""は文字列・・・?
<>・・・?
0509デフォルトの名無しさん
NGNGリファレンス読むとかしないわけ?
0510504
NGNGなんかここにいるべき人間ではなさそうなので・・・逝ってきます・・。
でもやれるだけはガムバルつもりでつ。
0511デフォルトの名無しさん
NGNG#include <iostream.h>
0512デフォルトの名無しさん
NGNGヘッダーファイルへのパスが通ってねーんだよ!ヴォケが。
0513デフォルトの名無しさん
NGNG#include<stdio.h>
#include<stdlib.h>
int main(int ac, char *av[])
{
int n;
printf("引数 %d 個\n", ac);
if(ac != 1){
n = atoi(av[1]);
printf("値 %d \n", n);
return n;
}
return 999;
}
list202.cppのソースが
#include<stdio.h>
#include<stdlib.h>
void main(int ac, char *av[])
{
int n;
if(ac != 1){
n = system(av[1]);
printf("戻り値 %d \n", n);
}
}
としたときに、list202 list201とコマンドを実行したとき
戻り値 999
と表示されるはずなのに
戻り値 0
となってしまいます。どうしてでしょうか?
0514デフォルトの名無しさん
NGNG当然。system()は実行したコマンドの戻り値を返すわけではない。
「コマンドプロセッサ」の戻り値を返す。だからコマンドプロセッサが
正常に起動されたら0を返す。
それからとても激しく環境依存です。
0515デフォルトの名無しさん
NGNGこれはc++ではないですね。
--- a1.c ---
int main (int argc, char *argv[]) {
if (argc != 1)
return atoi (argv[1]);
return 0;
}
--- a2.c ---
int main (int argc, char *argv[]) {
if (argc != 1)
printf ("%x\n", system (argv[1]));
return 0;
}
のとき
./a2 './a1 0' ---> 0
./a2 './a1 -1' ---> ff00
./a2 './a1 3' ---> 300
0516C++いちねんせい
NGNGコンストラクタのについて教えて下さい。
以下のソースをコンパイル&リンクすると
コンストラクタ(2)がリンク時に「 LNK1120: 外部参照 1 が未解決です。」
となり、リンクできないのですが何故なのでしょう?
コンストラクタ(2)の本体(という言い方でいいのかな?)をclass{ }
内に持っていくとリンクまで通ります。なんでかなぁ?
[aaa_class.hpp]
class aaa
{
public :
aaa() { cout << "コンストラクタ(1)が呼ばれた\n" ;}
aaa(int size,char *s) ;
};
[aaa_class.cpp]
aaa::aaa(int size,char *s)
{
cout << "コンストラクタ(2)が呼ばれた\n"
cout << size << '\n' ;
cout << s << '\n' ;
}
[main.cpp]
int main(int ac,char **av)
{
aaa d1;
aaa d2(10,"ABCDEFG") ;
}
0517デフォルトの名無しさん
NGNGaaa_class.cppがコンパイルされてないとか
0518デフォルトの名無しさん
NGNG一応、[aaa_class.cpp] と[aaa_class.hpp]に using namespace std; を書いておけ
うちではコンパイル通るぞ
0519叩かれるかな、と思った496
NGNG0520519
NGNG「ありがとう」と書くつもりやったんやけどクソレスになるから
「やめる(C)」をクリックしようと思ったらそれが「書(ry
0521デフォルトの名無しさん
NGNGパシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ
∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧
( )】 ( )】 ( )】 【( ) 【( ) 【( )
/ /┘ . / /┘. / /┘ └\ \ └\ \ └\ \
ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNGというか全部のメンバを初めからpublic属性にしたい時にstructを
使うと楽。public: とタイプせずに済む。
0524デフォルトの名無しさん
NGNGnew する意味ってあるの?
void func()
{
std::string str = "onigiriwassyoi";
puts(str.c_str());
}
void func()
{
std::string* str = new std::string("onigiriwassyoi");
puts(str->c_str());
delete str;
}
の違い。
0525デフォルトの名無しさん
NGNG_つけちゃ駄目って聞いたけど何で?
0526デフォルトの名無しさん
NGNG__で始まる識別子はC++の予約後
_で始まる識別子はCの予約後
いちいち説明するのが面倒なので
_で始まる識別子は使うなと言ってるだけ
変数名以外にも#define識別子とかにも使うなよ
0527デフォルトの名無しさん
NGNG「処理系の実装者のために予約されている」だな。
ちなみに __ は始めだけじゃなくて、それを含む名前全部だったはず。
0528デフォルトの名無しさん
NGNG禿げ第三版日本語版より。
0529デフォルトの名無しさん
NGNGΣ(゚Д゚)
使いまくってた。
>禿げ第三版日本語版より。
って何の本?
詳細キボンヌ。
0530デフォルトの名無しさん
NGNG禿げ = Bjarne Stroustrup
つまりはプログラミング言語C++第三版のこと。
0531デフォルトの名無しさん
NGNG情報ありがとう。
7000円は、高すぎる。
EffectiveC++とC++FAQを買って
ある程度読んだ俺には
買う必要は、ありますか?
とりあえず、明日本屋で流し読みしてみる。
0532デフォルトの名無しさん
NGNGストラウストラップ先生を禿げと呼んでいるのか。
いいセンスだ。
0534デフォルトの名無しさん
NGNG規格書はよく見るけど
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNGでも確かに m_ ってダサイよなぁ、とか思ったりも
0537デフォルトの名無しさん
NGNG_を前につけるのはC/C++規格違反だから
後ろに付けるっていう案もあるが、すごい違和感あるよな
0539デフォルトの名無しさん
NGNGそうか? 俺はもうメンバ変数の後ろにアンダーバーが無いと
なんか落ち着かないのだが
0540デフォルトの名無しさん
NGNGはC++で使ってもよいことになってたはず。
Cでは駄目だが
トニカク説明するのが面倒だから _で始まるのは駄目と
いうのは同意
後ろに_をつけるのは慣れた。
0541デフォルトの名無しさん
NGNG_ 自身と _の次に英小文字か来るのはOKといいたかった
0542デフォルトの名無しさん
NGNG__asm
もokなんですか?
0543デフォルトの名無しさん
NGNG>>528 をよく読んでよく考えなさい
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNGアンダースコア使っているから1つだとどうにも目立たず。
0546デフォルトの名無しさん
NGNG>>527
0547デフォルトの名無しさん
NGNGうしろも駄目って事?「それを含む名前全部」てことだと n_files
みたいなのも駄目って意味にも取れるけど。
0549デフォルトの名無しさん
NGNG[17.4.3.1.2]
Each name that contains a double underscore ("__")
or begins with an underscore followed by an uppercase letter (lex.key)
is reserved to the implementation for any use.
0550547
NGNG引用さんくすです。なんだかややこしい規則だなあ・・・。つまり正確には
アンダースコア2個は前だろうと後ろだろうと駄目で、アンダースコアから
始まる場合は次の文字が大文字でなければいい、もしくは後ろにのみ付ける
分には問題ないということですか。
0551デフォルトの名無しさん
NGNG規則1・アンスコで始まって、大文字またはアンスコが続く識別子は常に予約済み(全てのスコープ、全ての名名前空間で)
規則2・アンスコで始まる識別子はファイルスコープを持つ通常の識別し(関数、変数、typedef、列挙体定数)に対して予約済み
もし安全重視の側に立つのならアンスコで始まる名前を付けてはならない
しかし、次の例外を憶えて使っても良い
アンスコで始まって数字か小文字が続く識別子を構造体/共用体のメンバや、
関数・ブロック・プロトタイプスコープでつかっても良い
0552デフォルトの名無しさん
NGNGint _a;//NG
void foo()
{
int _a;//OK
}
struct Foo
{
int _member;//OK
int _Member;//NG
};
0553デフォルトの名無しさん
NGNGこれらの「実装のために予約」された名前になっているのはどういうわけだ?
0554547
NGNGないってことですね。勉強になりますた。てか本当ややこしいな・・・。
後ろにのみアンダースコアは1個てのは、うまく網目掻い潜ってる
というか、そこまでしてアンダースコアを使うか、というか(w
0555デフォルトの名無しさん
NGNGおれが思うにコードをわざと読みにくくしてるのでは?
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG規格を遵守することはさほど優先じゃないだけだろ。
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNGまだ早い もうちょっと待て
0560デフォルトの名無しさん
NGNGそれの答えがどうであれ、ローカル変数にまで予約された名前を使う理由にはならん。
0561デフォルトの名無しさん
NGNG構造体がありなら、クラスもありって解釈でいいかな。
だとすると…メンバに使える!!!(*゚∀゚)=3
どうなんだろ…。
0562デフォルトの名無しさん
NGNGややこしい規格を持ち出さないと説明がつかなくなるからやめとけ。
0563デフォルトの名無しさん
NGNGint foo( E e ) {
return (int)e;
}
なんでこのコードが VC++ で通らないのか、やっと解ったよ
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG安全重視の側に立った方がいい
0566デフォルトの名無しさん
NGNG最初は気持ち悪かったけど一日で慣れてしまった……。
0567デフォルトの名無しさん
NGNGtypedef enum E { HOGE0, HOGE1, HOGE2 } E;
こう書けばいいのに・・・・
0568デフォルトの名無しさん
NGNG0570567
NGNG0571デフォルトの名無しさん
NGNGCって、列挙体のタグ名とtypedefのタイプ名ってかぶってもいいの?
>>568
うん、とりあえず、そんな風に修正したの。
「typedefとenum定義って同時にしちゃ駄目なのかなぁ。
VC++のバグかなぁ」
って思いながら...(←痛すぎ)
あ、いや、もともとCのコードを移植したものだったし、
0572デフォルトの名無しさん
NGNG列挙も構造体も共用体もOK
0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNGスタック、ヒープで検索。
0575デフォルトの名無しさん
NGNGヒープより、フリーストアのほうがいいかも。
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNG0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNGチョトワラタ
0581デフォルトの名無しさん
NGNGstruct {} global_instance_of_unnamed_struct;
void f()
{
    template_function(global_instance_of_unnamed_struct);
}
こいつがコンパイルできてしまうのはバグですか?
0582デフォルトの名無しさん
NGNG何でバグなの?
0583デフォルトの名無しさん
NGNG[14.3.1]
-2- A local type, a type with no linkage, an unnamed type
or a type compounded from any of these types shall not be
used as a template-argument for a template type-parameter.
0584名無しさん
NGNG0585デフォルトの名無しさん
NGNG&の右の項がないから。
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG?
0588デフォルトの名無しさん
NGNGもっと具体的に言うと、
 のあとに、;が無いから。
...は!もしかしてwindowsだとふつうにみえるのか...
0589デフォルトの名無しさん
NGNG 
0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNG__cplusplusなんとかってのをつけとけばいいけど、
逆にCからC++の関数を呼ぶときはどうすればいいの?
0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNGヘッダとライブラリしかない場合は?
C++の就職名でcallか〜?
0599デフォルトの名無しさん
NGNGchar *nanashi[6]={"逝ってよし","(・ё・)クサー","来るな","あっちいけ","吊れ"};
void main()
{
int i;
for (i=1;6<=i;i++)
{
printf ("デフォルトの名無しさん %d",nanashi[i]);
};
};
0600デフォルトの名無しさん
NGNG配列の範囲を超えてしまう。
0601600
NGNGループに一度も入らない。
0602デフォルトの名無しさん
NGNG↓これでいける?
// cxx_tunnel.h
#if defined(__cplusplus)
extern "C" {
#endif
void c_func();
#if defined(__cplusplus)
}
#endif
// cxx_tunnel.cpp
#include "cxx_tunnel.h"
#include "cxx_lib.h"
void c_func(){ cxx_func(); }
// source.c
#include "cxx_tunnel.h"
void func(){ c_func(); }
0603デフォルトの名無しさん
NGNG#ifdefにしろよ。
0604デフォルトの名無しさん
NGNG#id defined() はANSI-Cから取り入れられた構文なので、
新しい人はこちらの方を好んで使う人もいる。
0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNG×#id defined()
○#if defined()
typoですた。
0607Cスレの151
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1048995232/151-
C++なら、構造体の宣言は
struct Foo;
ですむので、関数の宣言でも
struct Foo;
void func(Foo *f);
というぐあいに、(実体を書かずに)宣言だけですませることができます。
これでコンパイル依存が減って作業がはかどります。
これをCでやるにはどうすればいいのでしょうか?
typedef strct { /* ... */ } Foo;
といったぐあいに他のヘッダでFooを定義しているときに
他のヘッダで
extern typedef Foo;
void func(Foo *f);
とできるのでしょうか?
タグ名を使って
extern struct Foo_tag;
void func(struct Foo_tag *f);
と冗長(?)にするの?なんかやだなぁ
0608デフォルトの名無しさん
NGNGなぜC++のスレでCの質問をするのでしょうか。
0609Cスレの151
NGNGCスレで質問したとき、どうも、コンパイル依存について
あまりふれられずに話が進んでしまっているようなので…
C++だったら、「Effective C++」の34項が
とても有名だと思うので、こちらでも質問させて
いただきました
これをC版のstructでするにはどうするのでしょうか?
0610デフォルトの名無しさん
NGNGvoid foo(struct Foo *);
typedef struct Foo
{
int i;
} Foo;
void foo(struct Foo *f){}
はいどうですか?
0611デフォルトの名無しさん
NGNG> void foo(struct Foo *);
Fooって何?そんなもの知らない。
0613デフォルトの名無しさん
NGNGFooの定義をする前にFooという名前を使ってはいけないだろ。
それとも上にまだ何かあるのか?
0614デフォルトの名無しさん
NGNGCでやるならCの流儀に従え
いやならやめろ
0615デフォルトの名無しさん
NGNGいえ、上には何も無いですよ
void foo(struct Foo *);
でsturct Fooと書いてあるからFooは構造体の名前だということがわかるため
前宣言はいらないと思っていたのですが・・・ひょっとして駄目なのですか?
0616610
NGNG0617デフォルトの名無しさん
NGNGあらゆるユーザ定義型とユーザ定義型へのポインタ、参照は
それを別の宣言、定義で使用するまえに宣言しておかなければならない。
struct Foo;
void foo(struct Foo *);
で足りるんだからそうしとけ。
K&RでもARMでもなんでもいいから宣言と定義の項を悟りをひらくまで
読み続け呂。
0618デフォルトの名無しさん
NGNG0619610
NGNG読みました、駄目みたいですね。
VCでコンパイルできるもんだから勘違いしてました。
struct Foo;
void foo(struct Foo *);
typedef struct Foo { int i; } Foo;
void foo(struct Foo *f){}
じゃあ、これで
0620Cスレの152
NGNG610さんと私で、ごちゃごちゃしてますが…(^^;
617さんは私におっしゃっているのでしょうか?
私は、宣言と定義について、勉強が足りないです。
614さんがCでやるならCの流儀で…とおっしゃってますが
やはりそうなのでしょうか…
タグ名を使うべきなような気がしてきました。
typedefはしない方が良さそうな…
0622デフォルトの名無しさん
NGNGCなら素直にtypedef使え。
0623sage
NGNGtypedef struct tagFoo Foo;
void foo(Foo *);
0624デフォルトの名無しさん
NGNG0625sage
NGNG0627デフォルトの名無しさん
NGNGなるほど。
私は基本的に全部explicitにしたい派なので、その点については無問題です。
いままで引数を増やしたときはこまめにexplicitをはずしていましたが、
これからはつけっぱなしにしてみます。
0628デフォルトの名無しさん
NGNGA *a=new A();
if(a==NULL){
puts("Aの作成に失敗");
}
ってなことをしたいのですが。
0629sage
NGNG昔はそんな感じだったがいまはstd::bad_allocを投げるのがお約束になってる。
例外じゃいかんのか?
0630デフォルトの名無しさん
NGNGif(a==NULL){
puts("Aの作成に失敗");
}
0631デフォルトの名無しさん
NGNGA *a=new(std::nothrow) A();
if(a==NULL){
puts("Aの作成に失敗");
}
0633デフォルトの名無しさん
NGNG0634sage
NGNG無理にじかにnewしなくとも
0635628
NGNG>>629
作れるんですか?よろしければ作り方教えていただけると助かります。
コンストラクタに渡した引数の値がおかしいときとかに
newを失敗させるってことをしたいんです。
foo(new A()); みたいなこともしたいので、できれば例外処理は使いたくないです。
0636628
NGNGA *CreateA(){ ... }
A *a=CreateA();
こんなものでしょうか。(googleで調べたけどfactoryの意味わからんかったです)
これだとなんだか悔しいんですが。
0637デフォルトの名無しさん
NGNG読み込みたいんですが、どういう方法がいいのでしょうか?
たとえばABC\n\r\rDEF\n\r\rというテキストファイルを
std::list<string>に改行コードなし文字列を
行ごとに格納していきたいのですが
getline()関数でデリミタ文字を\rを指定すると
前後にLFとCRが残ってしまいます。
やっぱりgetline()を使わず
1文字ずつ読み込むのが妥当ですかね?
0638デフォルトの名無しさん
NGNGA* new_A() { try{ return new A(); }catch(...){ return 0; } }
foo(new_A());
うん。そっくり。
0639デフォルトの名無しさん
NGNGstd::getline()はデリミタに'\0'を指定して一度に全部読み込め。
int main()
{
std::stringstream file("\n\r\rabc\n\r\rdef\n\r\r");
std::string str;
std::list<std::string> ls;
std::getline(file, str, '\0');
while (true) {
std::string::size_type n = str.find_first_of("\n\r\r");
if (n == std::string::npos) break;
if (n) ls.push_back(str.substr(0, n));
str.erase(0, 3);
}
std::list<std::string>::const_iterator pos;
for (pos = ls.begin(); pos != ls.end(); ++pos)
std::cout << *pos << std::endl;
}
0640デフォルトの名無しさん
NGNGああこれやと行末に\n\r\rがないとおかしくなるなあ。直そ。
0641デフォルトの名無しさん
NGNGint main()
{
std::stringstream file("\n\r\rabcd\n\r\rdef\n\r\rghi");
std::string str;
std::list<std::string> ls;
std::getline(file, str, '\0');
while (true) {
if (str.length() == 0) break;
std::string::size_type n = str.find_first_of("\n\r\r");
if (n == std::string::npos) n = str.length();
if (n) ls.push_back(str.substr(0, n));
str.erase(0, n + 3);
}
std::list<std::string>::const_iterator pos;
for (pos = ls.begin(); pos != ls.end(); ++pos)
std::cout << *pos << std::endl;
}
0642デフォルトの名無しさん
NGNGありがとうございました
おかげで何とかなりそうです
自分のファイル入出力にくっつけて検証したいと思います
0643デフォルトの名無しさん
NGNGfind_first_ofでいいのか?
std::list<std::string> f( std::istream& source , const char delimiter[] )
{
std::string all;
std::getline( source , all , '\0' );
std::list<std::string> lines;
if( !all.empty() )
{
std::string::size_type pos = 0;
do {
const std::string::size_type start = pos;
pos = all.find( delimiter , start );
lines.push_back( all.substr( start , pos ) );
} while ( pos != std::string::npos );
}
return lines;
}
0645デフォルトの名無しさん
NGNGstd::string str = "ABC\n\r\rDEF\n\r\rGHI\n\r\rJKL";
std::list<std::string> strlst;
std::string::size_type begpos = 0, endpos;
while ((endpos = str.find("\n\r\r", begpos)) != std::string::npos) {
strlst.push_back(str.substr(begpos, endpos - begpos));
begpos = endpos + 3;
}
if (begpos != str.length() - 1) {
strlst.push_back(str.substr(begpos));
}
0646637
NGNG{
std::ifstream stream;
char rBuffer[6555];
std::string str;
std::list<std::string> ls;
stream.rdbuf()->pubsetbuf(rBuffer, sizeof(rBuffer) / sizeof(char) );
stream.open("LFCRCR.txt", std::ios::in | std::ios::binary );
while (!stream.eof()) {
std::getline(stream, str, '\n');
std::string::size_type n = n = str.length();
if (n > 2)
ls.push_back(str.substr(2, n));
}
stream.close();
std::list<std::string>::const_iterator pos;
for (pos = ls.begin(); pos != ls.end(); ++pos)
std::cout << *pos << std::endl;
}
どうしても何百MBのテキストファイルを読み込むのに
毎行検索すると速度的に非常に遅くなるので
改行コードは必ずLFCRCRが来ると決めうちして
こんな感じに読み込むとそこそこ速度が出ました
急造なんで問題は多分ありますけど
0647637
NGNGとりあえずお休みなさい
ありがとうございました
0648デフォルトの名無しさん
NGNGstd::istream::sentry k( src, true );
if( k ) {
dst.clear();
const char* comparing = delimiter;
for( std::istreambuf_iterator<char> cur(src), end ; cur != end && *comparing != '\0' ; ++cur ) {
const char c = *cur;
if( c == *comparing ) {
++comparing;
} else {
if( comparing != delimiter ) {
dst.insert( dst.end() , delimiter , comparing );
comparing = delimiter;
}
dst.push_back( c );
}
}
if( *comparing != '\0' ) {
src.setstate( std::ios::eofbit );
dst.insert( dst.end(), delimiter, comparing );
if( dst.empty() ) {
src.setstate( std::ios::failbit );
}
}
} else {
src.setstate( std::ios::failbit );
}
return src;
}
0649デフォルトの名無しさん
NGNGスマソ。find_first_of()ではまずいやね。
Cで言うとstrcspn()やからね。
find()がstrstr()に該当するから、find_first_of()は使わないでくだされ。
0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNGやはりSTLの実装依存になってしまうのでしょうか?
vectorは内部的に、その型の配列である…というのが保証されていると良いのですが…。
#include <vector>
#include <iostream>
void func( int* array, int num_array ){
for(int i=0; i<num_array; ++i)
std::cout << array[i] << std::endl;
}
int main(){
std::vector<int>vec;
vec.push_back(1);
vec.push_back(777);
vec.push_back(1000);
func( &vec.at(0), vec.size() );
return 0;
}
0653デフォルトの名無しさん
NGNGBCCでも通りますが何か
0654デフォルトの名無しさん
NGNGVC7では通らないんだよね。
0655デフォルトの名無しさん
NGNG> func( &vec.at(0), vec.size() );
この方が、わかりやすいかと。(Effective STL 16項)
func( &vec[0], vec.size() );
0656デフォルトの名無しさん
NGNGレスありがとうございます。やはり無理なんですね。
実際にはfuncの部分が、こちらではいじれないライブラリなので、
残念ながらvectorの使用を諦めなければになりそうです。
…また可変長配列手書きの時代に巻戻り…残念です。
それとも仕様が変わりそうにない、他のSTLを使えばいいのかな…。
0658652=656
NGNG>>655
や、本当だ。分かりやすいです。
というか…Effective STLに載っていると言うことは、
常套手段として認められているのでしょうか!
ちぃ、手元にその本がみつからず…これからちと探してきます。
これは期待です。有益な情報ありがとうございました。
0659デフォルトの名無しさん
NGNG一番安全なのは、配列同様の配置を保証した、
偽vectorを自前で実装することでは。
で、必要なときはそのヘッダファイルを使い回すと。
0660デフォルトの名無しさん
NGNGというのを保証しなかったんだ?あと「stringはcopy-on-write
だからコピー・代入で例外を投げない」というも。
今更言ってもしょうがないけど。
0661デフォルトの名無しさん
NGNGもうEffectiveSTLの該当する項を読んだりしてるかもシレンが、
最近の修正で、「&vec[i] == &vec[0] + i でなければならん」と
規格に定められた。ので、問題ないはず。既に世に出てるコンパイラで
こうなってないものも特に無いようだし。
0662デフォルトの名無しさん
NGNG> stringはcopy-on-write だからコピー・代入で例外を投げない
vectorの方はともかく、こっちはCOWでない実装も相当たくさん
存在するのだが。特に独自にthread-safetyを保証しようとしたりすると。
0663デフォルトの名無しさん
NGNG0664658
NGNG仰るとおりで、先ほどまで私も、昔自作したtemplateを前にため息ついてました。
>>660
激しく同意です。その一文がこれまでにもあれば…。
>>661
うほっ!良い規格!いや素晴らしい情報です。修正入ったんですねぇ…。
嬉しすぎです。当方、もう二度と配列なんて定義しなそうな勢いです。
お礼が遅くなってすいません、20時にしまる書店へ裸足で飛び出したもので…
皆様レスありがとうございました。深く感謝です。
0665デフォルトの名無しさん
NGNG宣言する方法はないでしょうか?
例えば、
#include "Base.h"
const int BUFFERSIZE = 10;
class Derived : public Base
{
Derived( int size = BUFFERSIZE );
~Derived();
// 〜
};
と言う風に宣言したとき、もし"Base.h"でも
BUFFERSIZEと言う定数が同様に宣言されていたら
コンパイルエラーになってしまいます。
includeするヘッダファイルにすでに同名の
定数が宣言されているかどうかを調べて、
衝突しない名前を考えるのが面倒なので、
同名の定数を宣言できる方法があれば
うれしいのですが、そんな方法はないでしょうか?
0666デフォルトの名無しさん
NGNG0667sage
NGNGnamespaceを使えばいいのでは。
0669デフォルトの名無しさん
NGNG/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚∀゚ )< ぬるぽぬるぽぬるぽ!!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚ )< ぬるぽぬるぽぬるぽ!!
ぬるぽぬるぽ!! >(゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNG入門書読め。
0672デフォルトの名無しさん
NGNG0673665
NGNGクラス内に書くと、純粋仮想関数の記述が間違っている、
といったエラーになってしまいます。(VC++にて)
>>667
なるほど。enumでうまくいきますね。
整数型という限定がありますが。
>>668
"namespace"で検索してみました。
こんな便利な仕組みがあったんですね。
(わたしがC++の勉強に使った書籍には
namespaceの説明はありませんでした)
これだと整数型以外でも使えますね。
ありがとうございました。
0674デフォルトの名無しさん
NGNG受け付けてくれないからねえ・・・
0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNGCにはK&Rみたいなのがあるけど、C++にはそういった
ものがない。古い本は焚書だよ。
0678デフォルトの名無しさん
NGNGvoid foooooo( int* pi ){}
foooooo( &int( 0 ) );
みたいな。
実際には上のコードはエラーが出ます。
0679デフォルトの名無しさん
NGNGC++:現代用語の基礎知識
0680デフォルトの名無しさん
NGNGstruct Int
{
int i;
int *operator&(){ return &i; }
};
void foo(int *){}
foo(&Int());
注意事項 絶対に使うな!
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNGなぜこんなことをする必要がある
0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNGmy_cout << i
で、
i = 5 ってやりたいんですが(つまりi=を書く手間を省略したい)いい方法って無いですか?
0685デフォルトの名無しさん
NGNG0686デフォルトの名無しさん
NGNGシンボル名は実行時には通常取得できないので
Cスタイルマクロ使うしかない。
#define NAME_AND_VAL(a) (#a << " = " << (a))
とか定義して
my_cout << NAME_AND_VAL(i);
とか。
0687デフォルトの名無しさん
NGNGvirtual void hoge() = 0{ }
};
これってVC6で通るんだけど、正しい構文なんですか?
規格には、
virtual void hoge(){} = 0;
は駄目ってあって確かにこれは駄目だけど・・・
0688デフォルトの名無しさん
NGNG通常は抽象基底クラスの関数は外部で宣言しないとエラーになる。
また抽象基底クラスの自体は直接インスタンスを生成できないだけで、
間接的に継承された子クラスから呼び出すことはできる。
#include <iostream>
struct A {
virtual void func() = 0;
};
void A::func() { std::cout << "A::func()" << std::endl; }
struct B : public A {
void func() { std::cout << "B::func()" << std::endl; }
void func2() { A::func(); }
};
int main()
{
B* b = new B;
b->func();
b->func2();
delete b;
}
0689678
NGNGfoooooo( int* ) は自作関数ではないので、
受け取りを書き換える事は出来ません。
struct, class で wrap するつもりはありません。
どうやらテンポラリーは無理みたいなので諦めました。
どうもありがとう
class Int
{
public:
Int( int i ){ m_int = i; }
private:
int m_int;
public:
operator int() const { return m_int; }
};
foooooo( &Int( 0 ) );
foooooo( &Int( 1 ) );
foooooo( &Int( 2 ) );
foooooo( &Int( 3 ) );
0690sage
NGNGよくわからんが
int x;
foooooo(&(x=0));
foooooo(&(x=1));
foooooo(&(x=2));
foooooo(&(x=3));
じゃだめなのか?
0691デフォルトの名無しさん
NGNGありがとうございます。純粋仮想関数でも定義できるんですね。
こうしておくと、あるクラスでの仮想関数オーバーライドにおいて、
(直下の)基底クラスの仮想関数が純粋かどうか気にする必要がなくなりますね。
0692デフォルトの名無しさん
NGNG例えば
auto_ptr<int> foo() {
auto_ptr<int> ap;
return ap;
}
void bar() {
auto_ptr<int> ap2 = foo(); // *1
}
という場合、gcc3.2で試してみると、fooの戻り値の一時オブジェクトを
auto_ptr_refに変換して、それからap2のコンストラクタを呼んでいる
ようなんだけど、これって暗黙のユーザー定義変換を2回実行している
ことにならない?*1の行が
auto_ptr<int> ap2(foo());
なら分かるんだけど。
0693デフォルトの名無しさん
NGNG0694692
NGNGauto_ptr_refからauto_ptrへの変換も暗黙の型変換だと思うけど。
struct hoge {};
struct moge {
moge();
moge(const hoge &) {};
};
struct fuga {
fuga();
fuga(const moge &) {};
};
int main() {
fuga f = hoge();
return 0;
}
ってやったらエラーになる。
0695デフォルトの名無しさん
NGNG>auto_ptr<int> ap2 = foo();
>auto_ptr<int> ap2(foo());
これらは同じ意味
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGおれも同じだと思ってた。違うの?
0699sage
NGNG下はパラメータ付きコンストラクタを呼び出す。
ほとんどの場合において求める動作と結果が同じなので、
上の書き方がされていたとき、下と同じ処理をしてもよいと、規定されてる。
同じ動作を意図して書かれる場合もあるが、デフォルトコンストラクタの
処理コストが大きい場合には、同じ動作にならずに困ることもある。
0700693
NGNGやっとみつけた。
えー、まずは、
T x = a; // copy-initialization
T x(a); // direct-initialization
と呼ぶそうだ。
[8.5 -14-]
If the initialization is direct-initialization, or if it is copy-initialization
where the cv-unqualified version of the source type is the same class as,
or a derived class of, the class of the destination, constructors are considered.
ってことで、direct-initializationか、またはcopy-initializationで
且つ初期化する型が初期化子の型とcv修辞子を除いて同じ場合
コンストラクタによる初期化を検討する、ってことらしい。
「初期化する型が初期化子の型とcv修辞子を除いて同じ場合」のみ、
copy-initializationとdirect-initializationは同じ意味になる。
auto_ptrの場合は、auto_ptr_refからの変換コンストラクタを、
auto_ptrからauto_ptr_refへのユーザー定義変換1回で
呼び出すことができるので、これで決定となる。
お、>>698もこれで解決?
最近規格書漁りが多いなぁ。
0701デフォルトの名無しさん
NGNG>auto_ptr<int> ap2 = foo();
これは
>auto_ptr<int> ap2(foo());
これの書き方を変えただけのものだと思ってたんですが、そうでは
ないということでしょうか。
0702デフォルトの名無しさん
NGNG1行目が激しく間違っているようだが。
0703700
NGNG>copy-initializationとdirect-initializationは同じ意味になる。
ああなるほど。
0704703=701
NGNG0705デフォルトの名無しさん
NGNGDialogWindowを表示したいのですが
どのようにすればよいでしょか?
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNGDirectX
Dialog box
でした。
07084
NGNGんー。調べてみます。
入力を見せないで、入力されたものを吐くプログラムをつくって
それをpipeで繋いでうまくできるかもしれません。
0709707
NGNG迷惑かけてすんませんでした。
0710デフォルトの名無しさん
NGNGhttp://www-scc.tokyo.jst.go.jp/riyou/users/users_guide/ucoma/FJcompiler/C++/stdlib/stdref/
この間からつながらなくなった。どっかに移動した?
0711710
NGNGttp://www.mmm.muroran-it.ac.jp/guide/unix/C++/stdlib/stdref/
0712デフォルトの名無しさん
NGNG項目22のBasicProtocolって言うクラス作る必要あるんですか?
解答ではメンバにしろって書いてあるみたいですが。
関数だけのクラスならクラスにくくらず関数だけ書いて、
Protocol1、Protocol2で呼べばいいと思いますが?
0713sage
NGNG0714デフォルトの名無しさん
NGNGそのクラスが関数だけである、とどこに書いてある?
追加のメンバがあるかもしれないが云々...とは書いてあるが。
仮に全部フリー関数だけだったとしても、MessageHelperオブジェクトと
いう一つの実体としてくくる設計はアリだろう。
0715デフォルトの名無しさん
NGNGコードのコの字も分からない人間ですがC++を始めたいと思います
今書店にいるのですが教本が多過ぎてどれが良いのか分かりません
まず一冊これを買えという定番があれば教えて頂けないでしょうか
0716デフォルトの名無しさん
NGNG>コードのコの字も分からない人間ですがC++を始めたいと思います
あー、そう。
君は晴比古の本でいいよ。
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNGありがとうございます
探してみます
0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNGオライリーシリーズをお薦め
0721デフォルトの名無しさん
NGNG日経ソフトウェアのムック『ゼロから学ぶC++』とかは?
あと『独習C++』とか
0722デフォルトの名無しさん
NGNGなるほど
晴比古という方の本がまだ見つからないので
合わせて探しに新宿に行ってきます
ありがとうございます
0723デフォルトの名無しさん
NGNGどういう振る舞いになるのですか?eof?bad?
0724デフォルトの名無しさん
NGNGマジにとるなよ。
晴比古というのはダメな参考書を書いている人だから
絶対に買うな。あと三田とか岩谷とかも避けるように。
0725デフォルトの名無しさん
NGNG最新の ANSI C++ の規格にそって書いてあるから、
他の入門書よりもずいぶんマシだと思うが。
初心者には最適だと思うぞ。
~~~~~~~
ビギナー編はダメダメだが。
0726デフォルトの名無しさん
NGNGC++やるには、アセンブラ・Pascal・C必ず一通り齧らなければ
モノにならんでしょ。
C#なら、いきなりこれから初めても大丈夫みたいだけど。
大した違いは無いような感じだけど意外な差があるのが言葉の世界
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNGなぜですか?
0729デフォルトの名無しさん
NGNG0を代入しておくと、間違ってdeleteしても無視されるから。
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNGじゃ、デストラクタの中などでdeleteする時はほっといてもいいんですね。
0732デフォルトの名無しさん
NGNGMassageBoxの出し方教えて下さい。
ガッコウの兄貴に指示されました。
コニチワ、マッサージボックスで出せなさいと。
どうすればいい?
0733sage
NGNG0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNGwww::google << "MessageBox";
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGそれとも釣りかな。
0738デフォルトの名無しさん
NGNGCSVファイルを読み込む
↓
中の値を全て2倍にする
↓
処理した値をCSVファイルとして出力
というプログラムをC++で組みたいと
考えているのですが、どのような
アルゴリズムを使用すればよいか、
ヒントでもよいので回答していただけないでしょうか?
0739いつでもどこでも太郎さん
NGNGC++で、一定時間ごとに、画面をキャプチャするなんていうアプリを作れるのでしょうか?
0740デフォルトの名無しさん
NGNG0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNG最近マルチ多いな
0744デフォルトの名無しさん
NGNGhttp://java.sun.com/j2se/1.4/ja/docs/ja/api/index-files/index-1.html
0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNGいくらでもある。
0747デフォルトの名無しさん
NGNG残念だが私のテンキーにはある
0748デフォルトの名無しさん
NGNGいや、ないはずだ。よく見ろ。
0749デフォルトの名無しさん
NGNG若干形が違った。
0751デフォルトの名無しさん
NGNG>>714 読み落としていました。有難うございます。
> 仮に全部フリー関数だけだったとしても、MessageHelperオブジェクトと
> いう一つの実体としてくくる設計はアリだろう。
アリだというのは分かりますが、実際こういう設計ってあるんですか?
インスタンスを作るとメモリが消費されると思うのですが間違いでしょうか?
外部関数として使うのに対して、クラスにしてインスタンスを作成してから使う場合の
メリットってなんですか?
0752デフォルトの名無しさん
NGNGURLのことをアドレスと言ってるようではレスがつかない。
0753デフォルトの名無しさん
NGNG0754744
NGNG釣りかと思うが釣られてみる。
ttp://www-6.ibm.com/jp/domino04/pc/support/beginner.nsf/fb8e1a8a5749032f49256a1d00097a28/af49d8cf505a17db49256a2a00286780?OpenDocument
【日本語】 URL (ユー・アール・エル)
【英語】 URL ( Uniform Resource Locator の略)
インターネットに接続されているコンピューター上のサービスを利用するために指定する住所のようなも のです。 アドレスとも言います。
なんかつかれた。春休み早くおわらねーかな。
0755デフォルトの名無しさん
NGNGvector v;
v.bush_back(0);
0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG% g++ --version
egcs-2.91.66
です。
ostream& operator<< (ostream& out,
const vector<int, allocator<int> >& v)
{
copy(v.begin(),v.end(),ostream_iterator<int,char,char_traits< char > >(out," "));
return out;
}
http://www.mmm.muroran-it.ac.jp/guide/unix/C++/stdlib/stdref/vec_0251.htm#Example
0758デフォルトの名無しさん
NGNGデフォルトのアロケータをサポートしない処理系でSTLを使うのは
一種のチャレンジだ。
0759デフォルトの名無しさん
NGNGそこのところは書き換えました。
解決しました。
0760sage
NGNGクラスの静的メンバを使う場合、そのクラスのインスタンスを生成しなくても利用できるよ。
設計時に関数の固まりをオブジェクトとしてとらえたかどうかでクラスにするか、
namespaceで囲むだけにするか、それともただの大域関数にするかを決めればいい。
0761デフォルトの名無しさん
NGNG何か違いってあるのですか?
0762sage
NGNG0763sage
NGNGつまり多態を使うときはこっち。
0764デフォルトの名無しさん
NGNGいう意思表示としては使えるが…)し多態も出来ますが。
0765デフォルトの名無しさん
NGNG同意。
参照を選ぶときは、ぬるぽを考慮していないという意思表示に使ってます。
0766デフォルトの名無しさん
NGNGって仕様ならポインタ、そうでなければ全て参照渡しにしてます。
とくに const T& hoge ってのは慣用句みたいなものなので
覚えておきましょう。
0767デフォルトの名無しさん
NGNG参照でもポリモできるでしょ?
0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNG0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNG0772デフォルトの名無しさん
NGNG今後永遠に生まれることがないはずです。
0773デフォルトの名無しさん
NGNGを実行したとき、処理時間を奪われる以外の
作用がないことは言語仕様として定められて
いるのでしょうか?
if ( p != NULL ) delete p;
は、
delete p;
に置き換えても全く問題はないのでしょうか?
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNG0776デフォルトの名無しさん
NGNGp = NULL;
としないと危ないと思われ。
0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNG別に危なくはないと思われ。
0779デフォルトの名無しさん
NGNGauto_ptr使っとけ。
0780デフォルトの名無しさん
NGNGそれってよく見かけるけど
俺はdelete p;した後pを使うようなコードを書いた事が無い。
メモリの解放はなんらかのスマートポインタにやらせる。
明示的にdeleteを呼び出す事は滅多に無い。
そもそもp = 0;しなきゃ危ないコード
(例えばpを複数回deleteする可能性があるとか)
を書くのが問題なんじゃないのか?
0781デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG首をかしげるだけなら誰にでもできるね。
0784デフォルトの名無しさん
NGNG発見するにはどうすればよいですか?
0785デフォルトの名無しさん
NGNG普通そう思うよな?
ところが
0786デフォルトの名無しさん
NGNG文字列を std::string で保存しているのを知って驚いた。
0787デフォルトの名無しさん
NGNGプログラムが自分で管理する
0788デフォルトの名無しさん
NGNG○プログラマが自分で管理する
0789デフォルトの名無しさん
NGNGintも全部クラスにしてクラスのタイプを返すメンバ関数をオーバーライドする
0790デフォルトの名無しさん
NGNGvoid main()
{
for (int i = 0; i < 1000; i++)
;
printf("%d", i);
}
上のコード、BCBなら通らないけど、VC++なら通ってiの値が表示されるのですが、
どっちが正しいのでしょう?
0791デフォルトの名無しさん
NGNGスレ汚してすみませんでした。
0792デフォルトの名無しさん
NGNG0793791=790
NGNGfor文のカッコ内で宣言された変数は、そのfor文内のみ有効だと書いてあった。
だから、790のコードを通さない方が正しい。
VC++も結構いい加減なんですね。
0794デフォルトの名無しさん
NGNGそのように、どう解決したか書いてくれるとそれが妥当かどうかの検証ができる。
VCは6だとしたら、いいかげんなのではなく当時はそれで良かった。
規格はその後だからね。
(あってるかな?)
0795791=790
NGNG今度から気をつけます。
規格が決まったのは最近なんですか。
いやぁ、猫でも(ryを読んでて、790でコンパイルが通るような事が書いてあって、
あれっおかしいな?と思ってBCBで確かめてみたんだけど、
気になったので、VC++でも試したところ余計に分からなくなって・・・。
ちなみにVC++.NETです・・・。
0796デフォルトの名無しさん
NGNGC++の規格は98年。VC6はそれよりちょっと前か?
0797デフォルトの名無しさん
NGNG> (あってるかな?)
合ってないよ。
規格がどうのこうの言うんなら、「Microsoft 言語拡張機能」を Off してから議論しろや。
0798デフォルトの名無しさん
NGNG同じく 98 年、ただし stdC++ よりも数ヶ月リリースが早かった。
0799798
NGNG0800デフォルトの名無しさん
NGNGとうとう自己管理プログラム言語が完成したか。
0801デフォルトの名無しさん
NGNGそれならVC++6.0が標準規格に準拠していなくてもおかしくないんじゃない。
0802デフォルトの名無しさん
NGNGVC6に含まれている大量のコードはそれ以前にかかれたもの。
0803デフォルトの名無しさん
NGNG「for文内部」だと { } も含まないのかな?
() だけ?
有効範囲じゃなくても、スコープから外れるわけじゃないのかね?
0804名無しさん@Emacs
NGNG古臭いMuleを使ってるのを見ると吐き気がする、
それと同じだ。
0805デフォルトの名無しさん
NGNG0806AGENT-GC
NGNG0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNG0809AGENT-GC
NGNGC++するにはボーランドとマイクロソフトどっちがいいっすか?
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG落ち着け
0812名無しさん@Emacs
NGNGハァ?馬鹿かおまいは?
新しいコンパイラぐらい買えっつーいみだボケ
0813デフォルトの名無しさん
NGNG普通の関数みたく呼び出すことができました。
ただしインスタンスは生きたままで、その後普通に他の関数をコールできました。
こういうものなんでしょうか?
あと、C++が起動、実行時にどのようなメモリの取り方をするのかが、
よくわかるようなサイト等はないでしょうか?
先輩が、インスタンスとは、クラスが必要とするメモリをmallocで取得してるようなもの &
C++は起動時に、リンクしているヘッダで宣言されてる全てのインスタンス分のメモリを取る
と言ってたのですが・・・するとそれらは全てヒープ領域に取られると言うことですか?
どなたか詳しい方お願いします。
0814デフォルトの名無しさん
NGNG正直何が聞きたいのか良くわからん
0815デフォルトの名無しさん
NGNGヒープ領域はnewでオブジェクトを作成したとき
だけじゃないですかね?
newの実装とかは俺も知りたいけど、解説している
サイトは知らないなぁ。
0816デフォルトの名無しさん
NGNGその後インスタンスはたまたま生きてるかも知れないが、
いつ何が起きてもおかしくないのでやらないように。
ヘッダで宣言されている「インスタンス」なんてあったっけ・・・?
あ、std::cin, std::cout, etc. があるか・・・ってそりゃ「定義」だが。
そりゃ、ヘッダでスタックに置いたならスタックに、
ヒープに置いたならヒープに取られるに決まってる。
何か話がかみ合ってない気もする。
0818デフォルトの名無しさん
NGNGすんません、C++初心者なもので。
例えば、ヘッダに
class test1 {
・・・
};
class test2 {
・・・
test1 tst;
・・・
};
とか書いた場合、tstはいつ、どこに領域が取られるんでしょうか?
0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNGそのヘッダをインクルードしたソースファイルごとにできる
0821デフォルトの名無しさん
NGNGTest2をスッタクにおいた場合はtstもスッタクに。
タイミングはTest2の構築時とほぼ同じと思うが、それが正解なのかどうかはわからん。。
0822sage
NGNG宣言と定義について書いてある本をさがして読むように。
スタックにとる場合は関数やメソッドの中で。たとえば
int foo() { test2 foo; }
起動時に静的な領域に取るなら関数の外で
test2 foo;
もしくはクラスの静的メンバとして
class zoo { static test2 foo; };
test2 zoo::foo;
ヒープに動的に取る場合は
関数やメソッドの中で
test2 *pfoo = new test2;
0823デフォルトの名無しさん
NGNGそれだけなら、領域は取られない。
どっかで、インスタンスを生成した時に領域が確保される。
test2 test_on_static; // (1)
void foo()
{
test2 test_on_stack; // (2)
test2 *test_on_heap = new test2; // (3)
...
}
(1) は、プログラム実行前に静敵領域に領域が確保されてて、main() の実行前にコンストラクタが呼ばれる。
(2) は、関数 foo() の入ってきた時にスタック上に領域が確保され、そのあとコンストラクタが呼ばれる。
(3) は、この文が実行された時にヒープ上に領域が確保されて、そのあとコンストラクタが呼ばれる。
>>820
一体何がソースファイル毎にできるんだ ?
もう少しちゃんと勉強しろよ。
>>821
スッタクって、アンタ...。
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG>>823
(1) は、プログラム実行前に静敵領域に領域が確保されてて、main() の実行前にコンストラクタが呼ばれる。
(1)の場合、明示的にデストラクタを実行はできるんでしょうか?
静的領域にあることは別に問題とはならないのでしょうか?
>>816
デストラクタは明示的に呼び出せるとのことですが、BohYohのFaqに、
明示的に呼び出すことはできませんとありました。
実際のところどうなんでしょうか。
0827デフォルトの名無しさん
NGNGT* p = new (buf) T(); // これであってるかな?placement new
p->~T();
0828デフォルトの名無しさん
NGNGあってるけど、間違ってる
0829デフォルトの名無しさん
NGNG>デストラクタは明示的に呼び出せるとのことですが、BohYohのFaqに、
>明示的に呼び出すことはできませんとありました。
そのfaqを読み間違えてるのではないか?
0830デフォルトの名無しさん
NGNGISO/IEC 14882(C++の仕様書)の12.4.12辺りには、
「明示的にデストラクタを呼ぶときには〜」
という旨の記述があるので、できます。
各コンパイラの実装が状況はともかく、仕様上は。
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00095.html
BohYohのFAQ(↑)は読み間違いようはないけど、間違ってるね。
古い仕様に基づいているのか、仕様をあたらず特定の実装で確かめただけなのか。
何れにせよよろしくないです。
0831デフォルトの名無しさん
NGNG皆さんありがとうございました。m(__)m
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNG$18ぐらい大した額じゃないっしょ。
0834デフォルトの名無しさん
NGNG> (1)の場合、明示的にデストラクタを実行はできるんでしょうか?
> 静的領域にあることは別に問題とはならないのでしょうか?
実行はできるけど、実行結果は保証されないよ。
(暗黙のデストラクタ呼び出しを禁止できないから、2重にデストラクタが呼び出されれてしまうからね。)
> デストラクタは明示的に呼び出せるとのことですが、BohYohのFaqに、
> 明示的に呼び出すことはできませんとありました。
> 実際のところどうなんでしょうか。
呼び出すこと自体はできる。
ただし、暗黙にデストラクタを呼ばないようにする責任はプログラマにあるよ。
ほとんど、>>827 のケースしかないと思う。
0835デフォルトの名無しさん
NGNG"Standard" ←→ 「規格」
"Specification" ←→ 「仕様」
どっちでもいいのかなぁ?
0836デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
NGNGfo.open(filename);
この場合、無いファイルは作られるのでしょうか?
よろしくお願いします。
0838デフォルトの名無しさん
NGNGあれを使うのは、mallocやallocatorで取って来た、未初期化の
生のメモリを扱いたい時、たとえばコンテナを自分で実装したい
時くらいかなあ。いずれにしても、アラインメントやら例外安全
やら、面倒な問題がいっぱいあるから、C,C++のメモリの扱いを
完全に把握してから使うべし。
0839デフォルトの名無しさん
NGNGと思いまして。
0840デフォルトの名無しさん
NGNGプログラミングにおいては、例え、ただ文字を出力するだけのコードであっても
コードを書いて慣れることに何らかの意味があると思ふ。
0841デフォルトの名無しさん
NGNG0842デフォルトの名無しさん
NGNGっつーわけで今「if文」を勉強中。
0843デフォルトの名無しさん
NGNGstd::ofstream のデフォルトは std::ios::out だから、ファイルがあっても
内容を空にする。なければ新規作成する。
0844デフォルトの名無しさん
NGNGint main() で始めるとき、intしかつかえないんですか?
0845デフォルトの名無しさん
NGNG質問の意味が良く分からない
mainの戻り値はintにするしかないが
0846デフォルトの名無しさん
NGNG確実なのはstringにしたら落ちるという事だ。
0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNGint以外で返して、その後どうしようとしてるの?
0850デフォルトの名無しさん
NGNGこのときの叙述関数はどのように書けばいいのでしょうか?
Cの標準関数で文字列の比較をぐぐってみたのですがstrcmpしか引っかからず、もちろんこの関数はつかえません。
class A {
char label[20];
int value;
// :
};
void foo(void)
{
vector<A> vec;
// :
sort(vec.begin(), vec.end(), cmp);
}
bool cmp(const A& a, const B& b)
{
return (a.label < b.label); // <-----ここの書き方が?
}
0851デフォルトの名無しさん
NGNGなぜstrcmpが使えないのか500文字以内で述べよ。
0852デフォルトの名無しさん
NGNG20文字以下ということならstrncmp()とか、memcmp()とか。
0853デフォルトの名無しさん
NGNGABC\0DEFGのような文字列がありうるからmemcmpはありえないと思うが。
0854850
NGNGすいません。
strcmpの仕様の勉強不足でした。
申し訳ありませんでした。
0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNG分岐先の数が違う。
switch : 多方向分岐
if : 2方向分岐
ついでに藻前の質問はスレ違い。
0857デフォルトの名無しさん
NGNG最適化しやすいという利点と、複雑な条件を書けないというデメリットがある。
0858デフォルトの名無しさん
NGNG普通おちることはないだろ。逆なら、おちることはありうるが。
>>856
> 分岐先の数が違う。
ハァ ? if〜 else if 〜 else 〜 だぞ。
~~~~~~~
ついでに、なんでスレ違いなのか聞きたいもんだ。
0859デフォルトの名無しさん
NGNGわかるように書け。
0860デフォルトの名無しさん
NGNG結局2分岐を繰り返しているだけじゃん
0861デフォルトの名無しさん
NGNGまあC言語と共有する問題はC言語スレのほうが相応しいのではないかとは思うが
0863デフォルトの名無しさん
NGNG0864デフォルトの名無しさん
NGNG0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNG何それって聞くなよ。わからなかったらお前は才能がないと言う事だ。
0867デフォルトの名無しさん
NGNG人間関係クラスタが気の利いた台詞を発言することを提唱。
0868デフォルトの名無しさん
NGNGZOEなのか、EVAなのか、それともそれ以外なのか、そこが問題だ。
0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNGとりあえずヒットアンドブローを作る。
0871デフォルトの名無しさん
NGNGとりあえず、Kanimiso128を作ってくれ
0872デフォルトの名無しさん
NGNGファイルAにある関数内から、別のファイルBに定義したクラスのメンバー関数を使うにはどうしたらよいのでしょうか?
変数や関数は、extern宣言しますが、クラスの場合もそうですか?
0873デフォルトの名無しさん
NGNGC++とVC++を勉強したいのですが、
お奨めの書籍等ありましたらどうかご教授ください。
0874デフォルトの名無しさん
NGNG>>4 とMSDN
0875デフォルトの名無しさん
NGNGお手数掛けました。
0876デフォルトの名無しさん
NGNGヘッダファイルにクラスの定義を書いて、
0877855
NGNGパソコンがフリーズしそうで試せません。
0878デフォルトの名無しさん
NGNGクラスについて基本から勉強することを(略
0879デフォルトの名無しさん
NGNGクラスも型なので変数と同じあつかいでいいです。
0880デフォルトの名無しさん
NGNG普通のOSならフリズらないよ
0881デフォルトの名無しさん
NGNG友人を引っ掛けて試して見ます。
0882872
NGNGレスありがとうございます。
エラーが出なくなっても、デバッガでお目当ての関数内を
トレースできなかった(なぜかスルー)ので質問させていただきました。
またよろしくお願いします。では。
0883デフォルトの名無しさん
NGNGwhile(1){
cout << "\t\b\b";
}
0884デフォルトの名無しさん
NGNGOSがWindowsXPだと落ちます。
0885デフォルトの名無しさん
NGNG注意します。
0886デフォルトの名無しさん
NGNG構造体の中身をゼロで初期したい場合。
struct Hoge_t{
int a,b,c;
};
memset( &Hoge_t,0,sizeof(Hoge_t) );
で 大丈夫ですよね。
それで たとえば、 構造体を public なクラスとして扱う場合に、
struct CHoge{
int a,b,c;
Hoge_t(){};
~Hoge_t(){};
};
memsetで ゼロで埋めても大丈夫でしょうか?また、メモリ確保を
malloc で とる場合(まぁ new を使えばいいんでしょうが)
CHoge = malloc( sizeof(CHoge) ); と sizeof を使用して確保しても大丈夫でしょうか?
0887デフォルトの名無しさん
NGNGおとなしく初期化を使いましょう。
CHoge() : a(0), b(0), c(0) ....
malloc()使うとコンストラクタを呼び出してくれないのでやめましょう。
0888デフォルトの名無しさん
NGNG0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNGなければintとcharを駆使しますが
0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNG参照とどう違うんですかね?
0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNGたぶんクラスのインスタンスであるところの
オブジェクトのことだろうけどさ。
0895デフォルトの名無しさん
NGNGコンストラクタ、デストラクタの中身がない場合なら
OK。ただし、「中身」には、メンバ変数の初期化の
ために暗黙に生成されるコードも含まれるので
注意。だから、intやらconst char *だけの構造体
でなく、std::stringみたいのを含んでいたらアウト。
あと、たまーにポインタをmemsetで潰してもNULL
ポインタにならないプラットフォームがあるので注意。
0896デフォルトの名無しさん
NGNGstatic CHoge zero;
*this = zero;
0897デフォルトの名無しさん
NGNG仮想関数があったら駄目
という、教えが出てないのはどういうことですか?
0898デフォルトの名無しさん
NGNG>>887で話は終わっている。
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNGバイナリサーチ白
0909デフォルトの名無しさん
NGNG機械イプシロンを調べればわかるかも。
0910デフォルトの名無しさん
NGNG19.999999999999996
0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGHello, world!
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNG挨拶です
0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNG返す言葉もありません。
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG/ ヽ / ヽ
______ /U ヽ___/ ヽ
| ____ / U :::::::::::U:\
| | // ___ \ ::::::::::::::|
| | | | | U :::::::::::::|
| | .|U | | ::::::U::::| なにこのスレ・・・
| | | ├―-┤ U.....:::::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ ::::::
0920デフォルトの名無しさん
NGNG入門編からポインタ位までを扱った初歩的な奴、定番を教えてください。
条件は日本語で書かれてることです。
0921デフォルトの名無しさん
NGNG俺の書いた本を読むか?
0922デフォルトの名無しさん
NGNGチョトワラタ
0923デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG10日でわかるC++ 第二版
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNGそういう問題じゃなくて?
0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNGHogeClass *pHoge;
pHoge = &Hoge;
delete pHoge;
:
:
Hoge.Func(); // 何か処理。
ってやったら、やっぱまずいですよね。
実行時の影響ってどんなのがありますか?
0933デフォルトの名無しさん
NGNGうわぁそりゃひどい。
影響とかそんなレベルじゃない。
未定義動作へ突入。
0934デフォルトの名無しさん
NGNG0935デフォルトの名無しさん
NGNGHogeはヒープには存在しないから、危険です。
0936デフォルトの名無しさん
NGNG未定義動作はシステムを不安定にする。
任意の小さな変更(たとえば、セミコロンを挿入する、プログラムを別の曜日に実行する、Enterキーを押し下げる前に微笑み方を変えるなど)によって
システムがどのように振舞うか(あるいは、どのように間違った振る舞いをするのか)といった大きな事象が変わってしまうかもしれない。
プログラムがファイルを削除することもあるだろうし、間違った答えが返ってくるだけかもしれない。
場合によってはまったく正常に動くかもしれない!
0937デフォルトの名無しさん
NGNG{
void Func() {}
};
int
main()
{
Test* t = 0;
t->Func();
return 0;
}
未定義ですか?
gccでやってみたら、何も起きなかったが…
0938デフォルトの名無しさん
NGNG0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNGと ) | |
Y /ノ 人
/ ) < >_∧∩
_/し' //. V`Д´)/ ← >>937
(_フ彡 /
0941デフォルトの名無しさん
NGNGC++の基礎から勉強汁
0942デフォルトの名無しさん
NGNGウソは書かないように。落ちませんでしたが。
Test::Func() が非仮想メンバ関数、かつ、メンバへの参照がないので、
thisへの参照はおこなわれることがないよね。
VCの実装上も、そうなっているようです。
しかし、もしTestが多重継承だったら、勿論、話は違ってきます。
0943937
NGNGありがとうございました。
0944デフォルトの名無しさん
NGNGVC++で試したが落ちない。つーかこれは落ちなくてもフシギではない。
Func()が仮想関数だったらまず落ちるが。
これを利用したテクニックもある。
struct Foo
{
void Func()
{
if(!this)//NULLだったら処理しない。
return;
}
};
ただ、これを勧めている訳ではもちろんない。
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNGBCCでもOK
0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNGusing namespace std;
class Test {
public:
void Func(){ cout << "(゚∀゚)アヒャ" << endl; };
};
int main()
{
Test* t = 0;
t->Func();
return 0;
}
BCCでテスト。
「警告 't'に代入した値は使われていない」ってのが出たが、通った。
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNGいや、実行もできた。
0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNGそれで、そのコードが実行できたってことでなにが主張したいの?
0953デフォルトの名無しさん
NGNG動作するか検証しただけですが、何か問題でも?
0954デフォルトの名無しさん
NGNG未定義動作の結果を見てなにを検証したというのか?
0955デフォルトの名無しさん
NGNG奇怪だな。
0956デフォルトの名無しさん
NGNG未定義だけど「動いた」って書いただけだろ。
何をムキになってる?
0957デフォルトの名無しさん
NGNG未定義なのがわってるなら、まぁいいんだが。
>>937みたいなやつがそれ見たら、誤解しかねない。
0958デフォルトの名無しさん
NGNG? に何がくるかだと思うが。
// case 1
phoge = &hoge;
delete phoge;
これはヤバい。
new されてないのを delete してる。
どうなるかは分からんが、普通は落ちる。
// case 2
phoge = new Hoge;
delete phoge;
hoge.foo();
問題なし。
// case 3
phoge = new Hoge[9];
delete phoge;
これはヤバい。
配列 new したのを単一 delete してる。
普通、配列 new した場合はその個数を配列の直前に保持しておくが、
単一 new の場合はそんなものはない。
従って、実際に確保されたメモリブロックは phoge よりちょっと前なのが普通であり、
delete に渡されたアドレスはその先頭とはずれている。
その後どういう動作になるのかは分からん。
仮にその余分なメモリを確保しない仕様のコンパイラであっても、
phoge[1] 〜 phoge[8] がデストラクトされないまま解放されてしまうだろう。
0959デフォルトの名無しさん
NGNG誰も勧めちゃいないって。>>936も書いてるけどな。
0960958
NGNG// case 1
phoge = &hoge;
あと、こう置き換えて。
Hoge → HogeClass
phoge → pHoge
hoge → Hoge
foo → Func
0961デフォルトの名無しさん
NGNG聞いてもいないことを長々と解説するなよ。うざいぞ。
0962デフォルトの名無しさん
NGNG一応>>932の回答になってるからいいんじゃない?
0963デフォルトの名無しさん
NGNGはぁ?それならcase 1で十分なうえに既出だろ。
だれも配列newの話なんかしてない。
0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNGデスマ中なんだろ
そっとしといてやれ
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNGただ動けば問題ない。
科学と一緒。
認知できないものは存在しない。
0969デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >_∧∩
_/し' //. V`Д´)/ ← >>967
(_フ彡 /
0970デフォルトの名無しさん
NGNGそのうち認知できるようになるかもな。
0971マイク ◆yrBrqfF1Ew
NGNG2ちゃんネラは常にダメだが。
0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNG>>936
0974デフォルトの名無しさん
NGNG認知できてから考えれば良い。
0975デフォルトの名無しさん
NGNG釣られた!!
0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNGJava死滅?
0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG確かに…わくわくするな(`エ´*)
0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNGVC++6.0とXPだと動作が不安定になる。
以降の処理で問題なく動くときもあるし、いきなり落ちるときもある。
しばらく大丈夫かと思えば、やっぱり途中で落ちたり、
Hoge.Func()が予期しない処理をしたりする。
まあ、慣れないことはしないに越したことが無いってことだ。
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG慣れたら念力で常に正常実行できるとか?(w
0986デフォルトの名無しさん
NGNGその頃には最新のコンピュータが、
問題のあるコンピュータのコードを書き換えてくれるようになってるよ。
0987デフォルトの名無しさん
NGNGもう死んでいるだろうしなぁ。
0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG今のプログラマーは置いてきぼりかな・・・
0990デフォルトの名無しさん
NGNG0991v(^・^)v
NGNGC++相談室 part18
http://pc2.2ch.net/test/read.cgi/tech/1050177746/
0992デフォルトの名無しさん
NGNG朝早くからご苦労様
0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。