C++相談室 part37
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v
NGNGただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。
前スレ part36
http://pc5.2ch.net/test/read.cgi/tech/1096304546/
過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0002v(^・^)v
NGNG2 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
0003v(^・^)v
NGNG17 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/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 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/
0004v(^・^)v
NGNG[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[禿 Stroustrup]
http://www.research.att.com/~bs/
[C++ International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21
[C/C++ Users Journal]
http://www.cuj.com/
[cppll (ML)]
http://www.trickpalace.net/cppll/ (日本語)
0005v(^・^)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/
Exceptional C++ Style
http://www.amazon.com/exec/obidos/ASIN/0201760428/
0006v(^・^)v
NGNGEffective 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/
0007デフォルトの名無しさん
NGNG0008v(^・^)v
NGNG[Boost]
Boost http://www.boost.org/
(日本語) http://www.kmonos.net/alang/boost/
(日本語) http://shinh.skr.jp/boost/
[STL]
STLport http://www.stlport.org/
SGI-STL http://www.sgi.com/tech/stl/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
(日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
http://www.moderncppdesign.com/
LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
ACE http://www.cs.wustl.edu/~schmidt/
Blitz++ http://www.oonumerics.org/blitz/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
http://www.trumphurst.com/cpplibs/cpplibs.phtml
(日本語) http://www.kmonos.net/alang/cpp/lib.html
0009デフォルトの名無しさん
NGNG0010v(^・^)v
NGNG0011v(^・^)v
NGNG環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0012v(^・^)v
NGNGすげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0013v(^・^)v
NGNG【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL/WTL Part3
http://pc5.2ch.net/test/read.cgi/tech/1095442366/
0014デフォルトの名無しさん
NGNG0015v(^・^)v
NGNGとかいうエラーが出るんだけどこれってどうすればいいの?
0016v(^・^)v
NGNGフリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/
0017v(^・^)v
NGNG#include <stdafx.h>
後死ね。
0018v(^・^)v
NGNG★初心者にVisual C++を教えるスレ★ Part15
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
C++Builder相談室 Part11
http://pc5.2ch.net/test/read.cgi/tech/1094749339/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
0019v(^・^)v
NGNG言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0020デフォルトの名無しさん
NGNG言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0021デフォルトの名無しさん
NGNG紹介していただけないでしょうか?
0022v(^・^)v
NGNG待ってろって言ったのに埋めやがって、
前スレに次スレへのリンク貼れなかったじゃないか愚か者ども。
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNGテンプレ乙!
>>14
テンプレにマジレス乙!
>>21
Blitz++ http://www.oonumerics.org/blitz/ていうかテンプレくらい見ろ
0025デフォルトの名無しさん
NGNGあとは ublas とか?
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGliboctave
0028全スレ>>998
NGNGva_list 版ってのは関数名に v の prefix つけて、va_end をしないのが基本なの?
0029前スレ>>998
NGNGてことはポインタを進ませながら無理矢理キャストするって実装なのか……?
もしそうなら参照で渡さない限り va_end しても意味ないのか
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGすまん、さっきのコードは間違いだらけだった。
↓正しくはこんな感じ。
ore_printf(const char *format,...) {
static int count = 0;
printf("[%08.8d]", count++);
va_list arg_list;
va_start(arg_list, format);
vprintf(format, arg_list);
va_end(arg_list);
print("\n");
}
関数名云々は趣味の問題だけど標準関数の命名規則に従っておいたほうが第三者が見た時に分かりやすいかと。
va_list まわりの処理は慣れるまでは他人の書いたコードを猿真似するのがいいと思うよ。
あと、va_list の実装は環境や処理系によって極端に異なるから基本的には気にしちゃダメ。
0032デフォルトの名無しさん
NGNGvprintf とかは、可変長引数をダラダラ渡す代わりに
va_list を1個だけ渡すのよ。そんだけ。
別の言い方をすれば、可変長引数はそのまま渡せないから
va_list として渡すと言うこと。でも、普通の printf では va_list を
単なる値として受け取っちゃうから、va_list を va_list として
受け取って使ってくれる関数が必要になるわけさ。
それが v******** っつー関数群。
そんで、va_end するのは va_start した関数と同じ関数であるべきだから、
va_list を渡された関数が va_end しないのは当然のこと。
0033デフォルトの名無しさん
NGNGウホッ。リロードせずに書いたらかぶっちまったスマソ。
>>28
具体例で説明するなら下みたいな感じ。
nurupo(const char* ga, ...) {
va_list arg_list;
va_start(arg_list, ga);
vnurupo(ga, arg_list);
va_end(arg_list);
}
vnurupo(const char* ga, va_list arg_list) {
実装
vprintf(ga, arg_list); みたいな事も出来る。
}
0034デフォルトの名無しさん
NGNG>ウホッ。リロードせずに書いたらかぶっちまったスマソ。
まぁ気にするな。
∧_∧
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__∧∩
_/し' . V`Д´)/
(_フ彡 / ←>>33
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGネット…ACE
正規表現…boost
スレッド…boost
その他…boost
暗号…Crypto++
GUI…gtkmm,QT
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG#include <deque>
main()
{
std::vector<int> vec(20);
for(int i=0;i<20;++i)
vec[i] = i;
std::deque<int> deq(vec.begin(), vec.end());
}
main()
{
std::deque<int> deq(20);
for(int i=0;i<20;++i)
deq[i] = i;
std::vector<int> vec(deq.begin(), deq.end());
}
上のmainが通るのに
下のmainが
[C++エラー] Could not find a match for
'std::vector<int,std::allocator<int> >::vector(std::deque<int,std::allocator<int> >::iterator,
std::deque<int,std::allocator<int> >::iterator)'.
で通らないのは、どうしてですか?
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG環境書け
0041デフォルトの名無しさん
NGNGBorland C++ 5.3 for Win32 Copyright (c) 1993, 1998 Borland International
これコンパイラ部分だけフリーの新しいのに入れ替えられないのかな…
0042デフォルトの名無しさん
NGNGBCB3ではイテレータ用のコンストラクタが実装されていないということ?
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNG下記のように作成したインスタンスを参照に代入してdeleteしても問題ないのでしょうか?
class Test{};
int main()
{
Test* test = new Test();
Test& rTest = *test;
delete &rTest;
}
0045デフォルトの名無しさん
NGNG保障はされてないんじゃないかな・・・。
0046デフォルトの名無しさん
NGNG自身なさげなので敢えて聞くのも申し訳ないですけど
根拠とかあります?
0047デフォルトの名無しさん
NGNGいや、全然ない。
0048デフォルトの名無しさん
NGNG参照変数のアドレスは参照元のアドレスだから大丈夫でしょ。
つーかなんだその怪しげなコードは。
0049デフォルトの名無しさん
NGNGprintf("%p %p", test, &rTest);
同じ値が出ればおkって事で。
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG歩哨はされてないんじゃないかな・・・。
0052デフォルトの名無しさん
NGNGint main ()
{
int* p = new int();
int address;
std::cout << "p = " << int(p) << std::endl << "p2 = ";
std::cin >> address;
delete reinterpret_cast<int*>(address);
}
0053デフォルトの名無しさん
NGNG環境によってはポインタから参照になったときに情報が欠落する可能性もあるんじゃないかなぁ。
0054859
NGNG多くの処理系でこのプログラムは実行できるのは事実
だけど、インスタンスへのリファレンスの先が
なくなってしまうのだから、限りなくおすすめできない。
もし Test がメンバ変数を持っていて new Test で割当て
られた領域が delete されたあと、再利用されたとしたら
その後の rTest 経由のこの領域に対するアクセスは期待
しない動作を生むことになる。
メンバー変数さえなければ下みたいなプログラムも
可能な処理系が多いんだけど、限りなく裏技だなぁ。
struct Test { void M() { cout << 1; } };
int main() { ((Test*)0)->M(); }
0055デフォルトの名無しさん
NGNGそれはぽいんたでもおなじではないか
0056デフォルトの名無しさん
NGNGそう、それを言わんがために、最後の例を書いた。
0057デフォルトの名無しさん
NGNGそれはにゅうをつかうなということではないか
0058デフォルトの名無しさん
NGNG要はリファレンスのアドレスとは何か? という事になる。
参照先オブジェクトのアドレスでしかありえない。
他に何のアドレスがあるというの?
0059デフォルトの名無しさん
NGNGあと、あるクラスのメンバとして、TemplateHoge<int> m_hogelist;というメンバが定義されていた場合、
これをUMLで表現するにはどうすればいいでしょうか?
できれば、AAで表現していただけるとありがたいです。
もし、無理だったら、エクセルでつくっていただいて、アプロダにアップしてくれるだけでいいです。
0060デフォルトの名無しさん
NGNGconst参照の場合複製される可能性があるっけ?
0061デフォルトの名無しさん
NGNGないでしょう。もしあったとしたらconst参照は(特に関数呼び出しにおいて)
その意義の大半を失いませんか?
0062デフォルトの名無しさん
NGNG> あと、あるクラスのメンバとして、TemplateHoge<int> m_hogelist;というメンバが定義されていた場合、
bind
あるいはクラステンプレートとは別に TemplateHoge<int> という「クラス」を用意してしまう。
0063デフォルトの名無しさん
NGNGAAでかいてくれるとウレシイです^^
0064デフォルトの名無しさん
NGNGそんな仕様だったらコピー禁止オブジェクトへのリファレンスが作れなくなる
0065デフォルトの名無しさん
NGNG禿しくスレ違いの悪寒。
0066デフォルトの名無しさん
NGNG0067マイク ◆yrBrqfF1Ew
NGNGポインタからリファレンスになって欠落する情報ってなんだ?
聞いたことねえな
0068デフォルトの名無しさん
NGNGガッ じゃないか?w
0069デフォルトの名無しさん
NGNGint c( a );
が VC7.1 でコンパイル通るんですが、このような
コンストラクタ的な初期化は C++ の規格で許されてるんですか?
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG許されています。
0072マイク ◆yrBrqfF1Ew
NGNGNULLを逆参照してリファレンスにしてよかったか?
int &ref_to_null(*reinterpret_cast<int*>(NULL));
0073デフォルトの名無しさん
NGNGNULL に対して * 演算子を適用した時点で、すでに未定義。鼻から悪魔が
出てくるとか、いきなり PC が暴走しても文句言えない。
0074マイク ◆yrBrqfF1Ew
NGNG0075デフォルトの名無しさん
NGNGたとえばポインタの指している先のブロックサイズとか。
一般的な実装ではメモリブロックの前に埋め込んでおくとか別の場所に隠しておくが、
ポインタ自体が保持してはいけないという規則は無い。
仮にそういう実装があれば参照になったときに欠落する可能性はある。
0076デフォルトの名無しさん
NGNGどうやってコーディングすればよいか解かりません。
どなたか教えていただけませんか?
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG単純に不定積分してから
その数式で計算すればいいのでは?
0079デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGおとなしく Mathematica か Maple でも買っとけ。
0082デフォルトの名無しさん
NGNG#include <stdio.h>
#include <math.h>
double func(double x) {
return (cos(x) - 0.87) * cos(x);
}
double integrate(double x1, double x2, int n) {
int i;
double sum;
double x;
double h;
h = (x2 - x1) / n;
x = x1;
for(sum = 0, i = 0; i < n; i += 2) {
sum += func(x) + 4 * func(x + h) + func(x + 2 * h);
x += 2 * h;
}
return sum * h / 3.0;
}
int main() {
printf("%lf\n", integrate(1.0, 10.0, 100));
}
0084デフォルトの名無しさん
NGNGいや、そんな実装はありえないだろ。
大体ブロックサイズってなんなんだよ。
new したものだけがポインタじゃないんだから
ブロックサイズなど保持する意味はない。
0085デフォルトの名無しさん
NGNG2chでは、UMLがかけない!
ひろゆきさん、UML描画機能つきのギコナビつくって・・・おねがい。
0086デフォルトの名無しさん
NGNGTeXの書式を認識してくれたら結構便利だよね
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGchar S[ 256];
sprintf( S, "TEST MESSAGE"), // ;じゃない
fputs( S, fp), // ;じゃない
fputs( "\n", fp);
fclose( FP);
これってコンパイラ通っちゃうんですけど、C++はいいんでしたっけ?
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG皆々様はどう?
0091デフォルトの名無しさん
NGNG使用例:組込みの入出力周り, インタプリタ, etc..
0092デフォルトの名無しさん
NGNG縁がない分野ばかりだ、ちゃんと使い道あるのねん
サンクス
0093デフォルトの名無しさん
NGNGんなもん、Cでも問題なく通るぞ。
#コメント(//)以外は。
0094デフォルトの名無しさん
NGNG入門書を一から読み直せ
(C++って言ってるけど内容は100%Cのような…ヌルポ)
0095デフォルトの名無しさん
NGNG( ・∀・) | | /〃_/_〃
と ) | | .∧ / / / / /
Y /ノ 人 ./ / / ノ
/ ) < >__∧∩
_/し'_//. V`Д´)/ ←>>94
| / /
| 100t 彡
0096デフォルトの名無しさん
NGNGコンパイラの最適化は考慮に入れないとして、
int func(int i);
class X {
int mfunc(int);
}
void main(){
X x;
int (*pfunc)(int) = func;
int a = func(1); // 行a
int b = pfunc(2); // 行b
int c = x.mfunc(3); // 行c
}
の場合行aとbの実行速度に違いはないと思ってますがcはa,bと
比べて呼び出しにコストがかかるんでしたっけ?
それともコストがかかるのは仮想関数呼び出しの時でしたっけ?
参考文献等ありましたら教えていただけないでしょうか。
ただし素人はひっこんでろ。
0097デフォルトの名無しさん
NGNGこの一行がネタ回答を欲しがってるようにしか見えない
0098デフォルトの名無しさん
NGNG009996
NGNGいや、結果が知りたいんじゃなくって
どうしてそうなるのかがしりたいんだよ。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG仮想関数はVTBLを介するからcより遅い
cがどうなるかはワカンネ
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG仕様ですか?
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGcatch に const 入れるのって冗長ですか?
文字列リテラル投げるときは必要なんでしょうけど…
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNGそりゃそうですけど…
やっぱり冗長ですかねぇ
0110デフォルトの名無しさん
NGNG96じゃない素人ですけど
mfunc(X*,int)
という形になってpush,popする分遅いということですか?
0111デフォルトの名無しさん
NGNG冗長だから付けないっていう理由はおかしい。
0112デフォルトの名無しさん
NGNG「冗長」の意味を調べ直されたし
0113デフォルトの名無しさん
NGNG積むといってもレジスタかも知れんが、そういうこと。
0114デフォルトの名無しさん
NGNG別に111の言い方も問題ないだろ。
0115デフォルトの名無しさん
NGNG参照で受けてるから、コピーされないよ。
const 付けるかどうかの判断は、
その後 e の内容を改変するようなオペレーションが
あるかどうかを、コンパイル時に見つける必要があるか
どうかによって決める。
0116デフォルトの名無しさん
NGNGパラメータを変更するような関数は設計的によろしくないから
0117デフォルトの名無しさん
NGNGコピーしたオブジェクトへの参照を受け取るんだと思うんだが…
0118デフォルトの名無しさん
NGNGstruct A {
A() { std::cout << "A::A()" << std::endl; }
A(const A&) { std::cout << "A::A(const A&)" << std::endl; }
A& operator=(const A&) { std::cout << "A::operator=(const A&)" << std::endl; }
};
try
{
try
{
throw A();
}
catch(const A& a)
{
std::cout << "catch 1" << std::endl;
throw;
}
}
catch(const A& a)
{
std::cout << "catch 2" << std::endl;
}
VC6だとコピーが一切起きないんだけど
0119デフォルトの名無しさん
NGNG"If the use of the temporary object can be eliminated
without changing the meaning of the program
except for the execution of constructors and destructors
associated with the use of the temporary object,
then the exception in the handler can be initialized directly
with the argument of the throw expression."
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGg++ でもコピー起きないよ。
structE {
~E() { cout << "~E()" << endl; }
E() { cout << "E()" << endl; }
E( E const& ) { cout << "E( E const& p )" << endl; }
};
int
main() {
try { throw E(); } catch ( E& e ) {}
}
0122デフォルトの名無しさん
NGNGそれは思い込みだな
例外時のトレース情報をとりたいと思ったらどうする?
0123デフォルトの名無しさん
NGNG適当な場所で A a; と作ってから、throw a; とすると、VC6でもVC7.1でもコピーコンストラクタが走った。
ちなみに、bcc32では、直接でも一旦作ってからでも、コピーコンストラクタが走った。
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG・アンチマイクロソフト厨
・VisualStudioを買えない貧乏人
・新しいPCすら買えない乞食
・古いアプリケーションの機能追加にC++の厳密な使用を持ち込む阿呆
・.NETを一切認めない狂信的Win32信者
0126デフォルトの名無しさん
NGNGを参照のこと
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNGgcc version 3.3.1 (cygming special)で以下ようにするとエラーになります。
$ cat test.cpp && g++ test.cpp
#include<iostream>
#include<string>
using namespace std;
template< typename Foo > void func( typename Foo val ) {
typename Foo res;
res = val + val;
cout<< res<< endl;
}
int main(void) {
func<int>(774);
func<string>( string( "String" ) );
return 0;
}
test.cpp:4: error: syntax error before `)' token
test.cpp: In function `void func(...)':
test.cpp:5: error: syntax error before `;' token
test.cpp: In function `void func(...) [with Foo = int]':
test.cpp:10: instantiated from here
test.cpp:6: error: `val' undeclared (first use this function)
test.cpp:6: error: (Each undeclared identifier is reported only once for each
function it appears in.)
test.cpp:6: error: `res' undeclared (first use this function)
test.cpp: In function `int main()':
test.cpp:11: warning: cannot pass objects of non-POD type `struct std::string'
through `...'; call will abort at runtime
0129デフォルトの名無しさん
NGNG-template< typename Foo > void func( typename Foo val ) {
- typename Foo res;
+template< typename Foo > void func( Foo val ) {
+ Foo res;
0130128
NGNG�dクス。コンパイルとおりました。typenameがtemplate<>の中にしか書けないのは
C++の規格?それともgccの制限?
0131デフォルトの名無しさん
NGNG0132128
NGNGあー、なるほど。その説明でスッキリしました。
ありが�d。
// intやdoubleとかにもtypename付けられるようになってると
// 文法の対象性が良くなる気がする。
0133デフォルトの名無しさん
NGNGたぶん誤解してる
typenameは以下のように使う
Fooの前のtypenameを外してコンパイルした結果と比較してみて
環境によってはtypenameはいらないようだけどg++(3系)だと必要
#include<iostream>
#include<string>
using namespace std;
template< typename Foo > void func( Foo val ) {
typename Foo::value_type res;
res = val.size () + val.size ();
cout<< res<< endl;
}
int main(void) {
func<string>( string( "String" ) );
return 0;
}
0134デフォルトの名無しさん
NGNGなんの違いも無く使えるのって、なんのため?
意思の表示?歴史的経緯?
0135128
NGNG・template< >の中
・ template<typename Foo>の有効範囲内で
Foo::value_type のような型を使うとき
の2つで、
・型であることが明確なものにtypenameつけたらダメ
という理解で良いかな?
0136デフォルトの名無しさん
NGNGそんなとこかなぁ
0137デフォルトの名無しさん
NGNG・template<typename Foo>の有効範囲内で、
std::vector<Foo>::iteratorのような型を使うとき
もだな。念のため。
0138デフォルトの名無しさん
NGNG歴史的経緯じゃないかと思っている
禿の予知能力がもう少し強ければ
初めから typename だっただろうさ
0139デフォルトの名無しさん
NGNG派生クラスのオブジェクトを格納して
派生クラスでオーバーライドした関数呼び出すことってできないですか?
0140デフォルトの名無しさん
NGNG奇妙なテンプレートとかなんとか言うやつでやるかな、たぶん。
0141デフォルトの名無しさん
NGNGつまり、クラスに新たなメソッドが追加されたように振る舞わせるっていうこと?
0142139
NGNGと思ったんですけど
派生クラスで格納するから、派生クラスのコンストラクタは呼び出されるんですけど
関数はオーバーライドしても基本クラスのものが呼び出されるんです
0143デフォルトの名無しさん
NGNGえーと、コンテナは基底クラスのポインタを格納していて、
んで、オーバーライドした関数を呼び出してるのに、基底クラスのものが実行される、
ってこと?
0144デフォルトの名無しさん
NGNGとりあえず簡略化したソースでも見せて。
0145デフォルトの名無しさん
NGNGpublic:
int x,y;
A() {};~A() {};
void Move() { x+=1; y+=1;};
};
class B:public A{
public:
B() { x=0; y=0;} ~B(){};
virtual void Move() { x+=2; y+=2; }
};
int main()
{
vector<A> vec;
vec.push_back(B());
vec[0].Move();
cout << vec[0].x << vec[0].y;
return 0;
} //結果11
簡略化というか別のソースなんですけど、こんな感じです
あと初心者スレ別にあったんですね。スマソ
0146デフォルトの名無しさん
NGNGとりあえずこんな感じ
deleteはちゃんとしてね
class A{
public:
int x,y;
A() {}; virtual ~A() {};
virtual void Move() { x+=1; y+=1;};
};
class B:public A{
public:
B() { x=0; y=0;} ~B(){};
virtual void Move() { x+=2; y+=2; }
};
int main()
{
vector<A *> vec;
vec.push_back(new B());
vec[0]->Move();
cout << vec[0]->x << vec[0]->y;
return 0;
} //結果11
0147デフォルトの名無しさん
NGNG出来ました ありがとうございます
ポインタを格納すればよかったんだ
0149デフォルトの名無しさん
NGNG派生クラスの方にvirtual付けてどうする。
仮想関数について勉強しなおすと吉。
0150デフォルトの名無しさん
NGNGそうなんでしょうか?
かなり簡略したが、大体こんな感じ。
ttp://up.isp.2ch.net/up/68bafad0fbe0.lzh
年配の方に聞くと「ま、そういう人もいるよ。」って言ってましたが…
0151デフォルトの名無しさん
NGNG別に普通だと思うけどなにがマズイと思うの?
0152デフォルトの名無しさん
NGNGTemplateMethodパターンでくぐって納得した後にデザパタの勉強しなさい。
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG君は何で学んだの?
0156デフォルトの名無しさん
NGNG現場の知恵ってやつじゃないの?
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG萎えそう思ったのか192文字以内で答えよ
0160デフォルトの名無しさん
NGNG2のべきにしろ
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG0166150
NGNGいや、使い方はそうなんだが、ソース見て違和感しか思えなくて…
なんかあまりマネしたくない手法と言うか…「へー」としか感想無くて…
一般的かどうか聞いてみた。(気にするだけ無駄だったかのかな?)
他のレスもサンクス。
0167デフォルトの名無しさん
NGNG4GB 超のメモリを積んでるマシンでも size_t が 32bit だったりして
困るわけだが。
0168デフォルトの名無しさん
NGNGどんな解説書にも一回は載ってるような。
TemplateMethodでもないし。
0169デフォルトの名無しさん
NGNGttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#382
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGGoF26パターン斬るぃ〜!
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGac_BaseStrがclassBaseとclassExtの両方に書いてある事だけは唯一気になる。
0174デフォルトの名無しさん
NGNG#include <iostream>
struct base
{
template<class T>bool _(T)
{
return false;
}
};
struct derived: base
{
bool _(char c)
{
return true;
}
bool _(int i)
{
return true;
}
};
int main()
{
derived d;
std::cout << std::boolalpha;
std::cout << d._(1.0f)<< std::endl;
std::cout << d._('a') << std::endl;
std::cout << d._(1) << std::endl;
return 0;
}
0175デフォルトの名無しさん
NGNG派生クラスで、同じ関数名でシグニチャが違う関数を宣言すると
基底クラスの関数は隠される。
derivedに using _;とでも書いておけ。
あとアンダースコアから始まる識別子を使うな。
0176デフォルトの名無しさん
NGNG入力した文字を逆転表示して表示させるにはどうしればいいのでしょうか・・・?
例
こんにちは
はちにんこ
と言った具合です。
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG自分で考えろヴォケ
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGstd::locale::global( std::locale( "japanese" ) );
std::wstring s;
std::getline( std::wcin, s );
std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcin ) );
としたのですが、copy のところで
error C2440: '型キャスト' : 'std::wostream' から 'std::ostream_iterator<wchar_t>' に変換できません。
となってしまいます。
std::wcout << s とするしかないでしょうか?
0182181
NGNG+ std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcout ) );
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGマルチは帰れ
っていうかそれは宿題スレで私が答えた奴の再質問か?
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGどんなの?
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNGそりゃそうだな
0190デフォルトの名無しさん
NGNG何だこいつ
0191デフォルトの名無しさん
NGNGなんだおまえ
0192デフォルトの名無しさん
NGNGなんだおまえ
0193vc++6.0
NGNGLet's boost(ttp://www.kmonos.net/alang/boost/)
のサンプルintrusive_ptr以下のサンプルがうまくいきません
intrusive_ptr
c:\〜\intrusive_ptr.cpp(23) : error C2065: 'CountableObject' : 定義されていない識別子です。
c:\〜\intrusive_ptr.cpp(23) : error C2065: 'ptr' : 定義されていない識別子です。
c:\〜\intrusive_ptr.cpp(24) : error C2448: '<Unknown>' : 関数の定義が間違っています。
c:\〜\intrusive_ptr.cpp(29) : error C2448: '<Unknown>' : 関数の定義が間違っています。
lexical_cast
c:\〜\lexical_cast.cpp(12) : error C2062: 型 'int' は不要です。
c:\〜\lexical_cast.cpp(13) : error C2275: 'string' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
c:\program files\microsoft visual studio\vc98\include\xstring(612) : 'string' の宣言を確認してください。
cl.exe の実行エラー
というようになってしまいます。
c:\lib\boostの下にc++boost.gif等が来るようにして
インクルードファイルにc:\lib\boostを追加したんですが
0194デフォルトの名無しさん
NGNG例えば
std::multimap<int, int> m;
m.insert(std::pair<int, int>(1, 1));
m.insert(std::pair<int, int>(1, 3));
m.insert(std::pair<int, int>(1, 2));
m.insert(std::pair<int, int>(1, 4));
とし、イテレータで最初からアクセスした場合
キーが重複した部分がどういう順番で出てくるか
とかそういうのは決まっているんでしょうか?
0195デフォルトの名無しさん
NGNGintrusive_ptrはそのコードが間違ってる。
lexical_castはコンパイラが間違ってる。
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGどうやったら解決しますか?
0199デフォルトの名無しさん
NGNGしゃーない。fstreamは継承しまくりの怪物だし、CのFILE構造体のような
機械語に近いライブラリには速度でどうやってもかなわんよ。
マシンを新しくするか、FILEを使い続けるかどちらかだな。
0200デフォルトの名無しさん
NGNGコード晒してもらえる?
0201デフォルトの名無しさん
NGNG自分でクラスを書く
0202デフォルトの名無しさん
NGNG長いのでちょっと難しいですが、
基本的には
fp = fopen(path , "rb")
↓
ifstream ifs(path, ios::in | ios::binary);
fread(&data, sizeof(Data), 1, fp);
↓
ifs.read((char*)&data, sizeof(Data));
fgets
↓
getline
と置き換えただけです。
0203デフォルトの名無しさん
NGNGreadとfgetsはたくさんあってループもしています。
具体的には約10万程度のクラスインスタンスのシリアライズとデシリアライズを行っています。
それと、読込中に正しく読めてるか確認するための\0もあり、
fgetc
ifs.get
で確認しています。
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG最適化の影響の意味がよく分かりません。
最適化はon(-O2)にしています。
0206デフォルトの名無しさん
NGNG実運用データでテストしていてその後実際に読んだデータを元に処理を行っているので、
実際に読み込まないとかの最適化がかかることは無いと思います。
0207デフォルトの名無しさん
NGNGそれにしても実際のIOにかかる時間の方が
iostreamの複雑さなんかよりずっとオーダーが大きそうなのに5割も違うのはなあ…
0208デフォルトの名無しさん
NGNGOSはLinuxです。
0209デフォルトの名無しさん
NGNGここって環境依存ありだっけ?
そうでないなら以後気をつけるようにってことで、getcwd()。
0210デフォルトの名無しさん
NGNG環境依存なしならboost/filesystem
0211デフォルトの名無しさん
NGNG下のソース、Mac の OSX 10.3.5 上で実行すると
::pthread_join で止まってしまいます。
CallProc の中身を while ( true ) ::pthread_testcancel();
のようにすると、ちゃんと join できるのですが・・
他の環境では動くのでしょうか?
#include<pthread.h>
#include<sys/socket.h>
#include<iostream>
using namespace std;
static void*
CallProc( void* p ) {
int wSS = ::socket( AF_INET, SOCK_STREAM, 0 );
::listen( wSS, SOMAXCONN );
::accept( wSS, NULL, NULL );
return 0;
}
int
main() {
pthread_t m;
::pthread_create( &m, NULL, CallProc, 0 );
::sleep( 1 );
::pthread_cancel( m );
void* v;
cout << "Calling join." << endl;
::pthread_join( m, &v );
cout << "Joined." << endl;
}
0212デフォルトの名無しさん
NGNG同期を行わないパラメタをifstreamに渡せばよかったはずだけど、覚えてない。
0213デフォルトの名無しさん
NGNGstd::ios::sync_with_stdio()だろ。それにfalseを与えてパフォーマンスの
変化があるかどうか調べてみ。
0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNG0です。そういうことになってます。
0216デフォルトの名無しさん
NGNGプラットフォームに応じてNULLの定義方法が異なっていたことにより
プログラムが暴走する危険があった、と書かれてる
例えば
#define NULL ((char *)0)
#define NULL ((void *)0)
など。で、これを代入するとエラーがでる可能性がある
C *cp = NULL; //エラー?
ちなみにC++では数値の0は任意の型のポインタ値に変換できることが保証されている
よって、0が一般的に使われている
けど、現在のC++の標準には(void *)0のような定義は許可されていないので
その標準にのっとった環境であればNULLを使用しても問題ない
ただ、やっぱり今のC++プログラマはNULLではなく、0を利用するのが一般的、らしい
自分の言葉じゃなくてスマソ
今漏れも勉強中なんだわ
0217デフォルトの名無しさん
NGNG昔の話だから忘れて良い。
ANSI C++ の規格では NULL は「整数型で値は 0 と等しい」(回りくどい言い方に
なってるのは int, long, ... どれになるかは処理系に任してるから) と定義されてる。
C* cp = NULL;
これが通らないコンパイラは、現実にはそろそろゴミ箱行き。
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG激しく同意させてもらう。
0221デフォルトの名無しさん
NGNG> 回りくどい言い方になってるのは int, long, ... どれになるかは処理系に任してるから
君はぬるぽを知っているのか?
Cのぬるぽをわかっているか?
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNGISO/IEC 14882 の Annex C から以後は読んだか?
英語が辛ければ JIS に日本語版もあるぞ
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNGhttp://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?bunsyoId=JIS+X+3014%3A2003&dantaiCd=JIS&status=1
0226デフォルトの名無しさん
NGNGまあ投資額は目的・目標で決めることだからな
なくていいんならそれまでだ
0227デフォルトの名無しさん
NGNGint* hoge = 0x0;
じゃだめですか?
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGOKです。
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNG('∀`)<あなたを、犯人です
0233デフォルトの名無しさん
NGNG0234おながいしまつ
NGNG-----------------------------------------
pDocTemplate = new CMultiDocTemplate(
IDR_TEST11TYPE,
RUNTIME_CLASS(CTest1103Doc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CTest1103View));
AddDocTemplate(pDocTemplate);
-----------------------------------------
↓↓↓
RUNTIME_CLASS(); ←この呪文は、ひとことで言うと何ですか?
C言語の初心者ですいません。
javaは一生懸命勉強したのですが、
VC++の呪文に不慣れです。
そこで諸先生がたに伺いました。難しければ結構です。。。
346 :cen ◆Pm9xOTJuM. :04/11/04 00:34:06 ID:???
>>342
ここを。
プログラム
http://pc5.2ch.net/tech/
↑↑↑
というわけで御座います。
基本的な呪文を10個くらい意味と一緒に覚えておきたいと思います。
0235デフォルトの名無しさん
NGNGひとことで言うと、MFCのマクロ。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNGhageに訊いてください。
0238bjarne
NGNG0239デフォルトの名無しさん
NGNGC言語には無くてC++にだけは存在する
プリプロセッサへの命令(ディレクティブ)って何かありますか?
CとC++ってこの部分は同じでしたよね?
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG一般的には。
ただ、数行〜十数行程度の小さいクラスがぽこぽこ出来るときはある程度まとめる。
0244デフォルトの名無しさん
NGNG基本的にはそれが一番。
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGそれじゃ再利用しにくくない?
0248デフォルトの名無しさん
NGNG間違っても一つのクラスでファイルを分けたりするなよ。
ソースを追いにくくなるから。
定義と宣言は一カ所でしろ。
Javaから入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。
0249デフォルトの名無しさん
NGNGこの行を読んだ瞬間ネタだと分かった
0250デフォルトの名無しさん
NGNG遅すぎ。1行目で気づけよ。
0251デフォルトの名無しさん
NGNGどうせしないって
0252デフォルトの名無しさん
NGNG> 定義と宣言は一カ所でしろ。
ハァ? 実装を修正するたびにインクルードされてるファイルも毎回コンパイルするんかい。
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG遅すぎ。読む前に感覚的に見てJavaという4字があった瞬間にネタだと分かれよ。
0256デフォルトの名無しさん
NGNGでも複数人でプロジェクト組むなら、1ソース1クラスが良いでしょう。
お遊びじゃないんだから。
0257デフォルトの名無しさん
NGNG間違っても一つのクラスで一つのファイルなんて制限するなよ。
ソースを追いにくくなるから。
同じクラスでもグループごとに別ファイルにしたり、ユーザーが読むべき部分と読むべきでない部分は別ファイルにしろ。
C#から入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。
0258デフォルトの名無しさん
NGNG間違っても一つのクラスで一つのファイルなんて制限するなよ。
ソースを追いにくくなるから。
一つのプログラムは全部一つのファイルにまとめて書け。
ハンドアセンブルから入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。
0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG一つのプログラムは全部一つのファイルに…
ゲフンゲフン
0262デフォルトの名無しさん
NGNGちゃうがな
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNGそれはさすがにやらんな。
0265デフォルトの名無しさん
NGNGもちろんインナークラスも別ファイルに分けて #include します。
0266デフォルトの名無しさん
NGNG>ソースって一つのクラスごとに一つ作るのがいいんですか?
Cの頃はstaticやexternでシコシコ書くしかなくて
ファイルの分割が即スコープの分割を意味してたから
C++になっていまだにそういう迷信を信じている人も多い
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG今のところ建設的っぽい意見
・一般的には1クラス1ソースだが、小さいクラスが多いときはある程度まとめる
・再利用しにくいから1クラス1ソース
・実装を修正するたびにインクルードされてるファイルを毎回コンパイルしないために1クラス1ソース
・1クラス1ソースは、ファイルの分割が即スコープの分割を意味していたCの頃の迷信
0269デフォルトの名無しさん
NGNGというか、関連が比較的強いクラスはまとめる。
長くなるようなら分割する。
コンパイルの際のファイル依存は極力減らす(PImplイディオムまではいかなくても)
でいいんじゃないの
0270デフォルトの名無しさん
NGNGうーん、サンクス。となると例えば手元にある「コンポジットのクラスが
まとめられてる長いソース」は分割対象かなぁ。
実用で言ったら依存関係だけ考慮すれば良さそうだけど、
そうもいかないだろうしねぇ。
0271デフォルトの名無しさん
NGNGを考えたら、1ソース1クラスで作ると決めたほうが、はるかに
効率が良い場合がほとんどですね。プロジェクトの分担がし易い
し、誰かが改良をしている時に、ほかの人が手を入れられない、
ということがなくなるし。
そもそも、ソース長すぎて分割しなくてはならない、
ってのは、ソフト業界で生きていくレベルにないね。。。
設計がなってないにもホドがある、ゾ・・・
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/
応援するスレはこちら!
http://school4.2ch.net/test/read.cgi/job/1077432387/
最高の会社にするため、みんな頑張ってます!
0274デフォルトの名無しさん
NGNGint &Hoge(){
int mage = 0;
return mage;
}
とするとやはり危険なんですよね?
これを解決するために
1.mage を static int にする
2.メンバ変数として int mage を作っておく
Hoge を呼び出す側に変数を用意しておいて
Hoge に参照渡しするのが無難だと思いますが
上記の1,2の方法が問題ないのであれば、どちらがいいのでしょうか?
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG1 と 2 では意味が全然違うが?
0277デフォルトの名無しさん
NGNGコピーコンストラクタをどのように用いればよいのでしょうか?
>>276
揮発性という観点で1,2を挙げたのですが
その違いというのも教えていただけないでしょうか
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG#include <iostream>
using namespace std;
class foo {
int mage;
public:
foo() : mage(0) {}
int& Hoge() {return ++mage;}
};
class bar {
public:
int& Hoge() {
static int mage = 0;
return ++mage;
}
};
int main () {
foo f[2];
bar b[2];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
cout << f[i].Hoge() << ' ';
cout << endl;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
cout << b[i].Hoge() << ' ';
cout << endl;
return 0;
}
0280デフォルトの名無しさん
NGNGあるクラスにbuf[4][128]という配列があり、これを単なる外部関数
で使いたいのですが、このアドレスをメンバ関数で取得するには
どう書けばよいのでしょうか?とりあえずこうしてみたのですが 駄
目でした。
class A
{
buf[4][128];
char** getBuf(void) { return (char**)buf; };
}
int main(void)
{
char **ptr;
ptr = classA->getBuf();
ptr[3][100]=100;//ここでハングアップ
}
0281デフォルトの名無しさん
NGNGとりあえずコンパイルできる形にしてから載せろよ…
0282デフォルトの名無しさん
NGNGclass AAA
{
private:
char buf[4][128];
public:
char** getBuf(void) { return (char**)buf; };
};
int main(void)
{
AAA aaa;
char **ptr;
ptr = aaa.getBuf();
ptr[3][100]=100;//ここでハングアップ
}
0283デフォルトの名無しさん
NGNG[0,0]...[0,127][1,0]...[1,127][2,0]...[2,127][3,0]...[3,127]
#include <iostream>
class A
{
public:
char buf[4][128];
char* getBuf(void){return (char*)buf;};
void print(){std::cout << (buf[3][100] & 0xff) << std::endl;}
} classA;
int main()
{
char *ptr;
ptr = classA.getBuf();
*(ptr + 3 * 128 + 100) = 100; // ここでハングアップ
classA.print();
}
}
0284283
NGNG0285デフォルトの名無しさん
NGNG*(ptr + 3 * 128 + 100) = 100; // ここでハングアップ
これはこの形でないと駄目ということでしょうか?ptr[][]の
形でアクセスする方法はないのでしょうか?
0286デフォルトの名無しさん
NGNGchar* ptr; を char (*ptr)[128];に替えればいいだろ。
0287デフォルトの名無しさん
NGNG変えることばかり考えて、そっちは気づきませんでした。
これで解決できそうです。ちょっとやってみます。
0288デフォルトの名無しさん
NGNG関数の戻り値も変えられるけど?
286とまったく同じ構文で。
0289デフォルトの名無しさん
NGNG> Cスレの方でも書き込んだのですが
いやそれマルチだから
お前ら親切ですね
0290デフォルトの名無しさん
NGNG>関数の戻り値も変えられるけど?
はい、それを最初に試して、こんな感じにしてみたんですが
コンパイルエラーになります。
char(*)[128] getBuf(void){ return (char*)buf; };
(char(*)[128]) getBuf(void){ return (char*)buf; };
どういう風に書けばよいのでしょうか?
0291デフォルトの名無しさん
NGNGchar (*getBuf(void))[128];
あるいは
typedef char (*BUF)[128];
BUF getBuf(void);
0292デフォルトの名無しさん
NGNGのほうが良いとおもゆ
0293デフォルトの名無しさん
NGNG>>292
試してみました。上手くいきました。
これで完全に解決しました。マルチに最後にまで付き合って
もらってすみません。勉強になりました。
0294デフォルトの名無しさん
NGNGprotected: void a() {}
};
class B : public A {
public: void b(A& a) { a.a(); }
};
というコードが vc7.1 で
error C2248: 'A::a' : protected メンバ (クラス 'A' で宣言されている)にアクセスできません。
というエラーになるのですが、これは c++ 標準の仕様なのでしょうか?
0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNGthis->a()しか呼び出せないよ。
0297デフォルトの名無しさん
NGNGやってることを理解してない模様。
0298デフォルトの名無しさん
NGNGtest.h で、
struct test {
int a;
int b; };
class test2 {
int c;
int d;
SetC(int i);
SetD(int i);
GetC(void);
GetD(void); };
という宣言がなされていて、
test.cpp で、
#include "test.h"
int main(void) {
int sum;
struct test t;
t.a = 0;
t.b = 0;
sum = t.a + t.b;
printf("%d\n", sum)
return 0; }
というような(あまり意味のない)コードを作ったとします。
これをコンパイルした時、test.hのclass test2の方の
内部実装が未定義のSetC,SetD,GetC,GetDやclass test2
自体はどうなっちゃうのでしょうか?test.cの方でclass test2
を使ってなければコンパイルエラーにはならないですが、
実際に出来上がった実行形式ではclass test2の部分の定義
はコンパイラが削除してしまうのでしょうか?
0299デフォルトの名無しさん
NGNGそもそも無いのだから削除する必要も無いのでは?
0300デフォルトの名無しさん
NGNGclass B : public A {
public: void b(B& b) { b.a(); }
};
これなら呼び出せるんだよ〜ん。
protectedメンバはthisを含め自分自身と同じ型のポインタ/参照ならアクセス可能。
0301デフォルトの名無しさん
NGNG「しかし、正の整数を表現するためのビット数を一つ増やしたいために
int の代わりに unsigned を使うのは、ほぼ確実によくない」
のところが良く分かりません…これってどういうことなのでしょうか…?
0302デフォルトの名無しさん
NGNGに読み替えてかまわないと思うよ。
0303デフォルトの名無しさん
NGNG「値を正に保つために unsigned を宣言しても、暗黙の型変換
ルールがあるので、目的を達成出来ない」
ってあるけどこれ読んでも、値は正に保たれてるから別にいいのでは?
と思ってしまうのですが…
0304デフォルトの名無しさん
NGNG前半は、たかが1ビット稼ぐために、unsignedを導入することによって発生する多大なデメリットは割に合わない。
後半は、文脈が分からんので知らん。
0305デフォルトの名無しさん
NGNGそんなん用途によるがな。
いろんな型の欠点ばっかり言い出したら
それこそ使てええのん残らんで。
ただsignedとunsignedの不注意な混用は
ハメられて痛い目見るケースがよくあるから
くれぐれも気をつける癖をつけれちゅうんなら
俺もそう思う。
0306デフォルトの名無しさん
NGNG複数のソースファイルに分割するというのは一般的に良く行われる事なのですか?
form.hでFormクラスを宣言して、
formcontrols.cppとformevents.cppとforminit.cppで定義を行うというような事です。
0307デフォルトの名無しさん
NGNG一般的、とあるんでイヤだと答えるが・・・
そのケースの事情を見ずに言ってることなんで
声のトーンはごく控えめにしとく
ヘッダとソースとインラインに分けてるのはときどき見かけるなあ
それから「でかい」って何を基準に言ってるのかな?
数千行程度なら全然「でかい」うちに入らんぞ
たとえ数百行程度でも「でかい」と感じることもあるが
わかるか? ライン数やバイト数じゃねえってことだ
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNG・ローカル変数のスコープ範囲、
・命名規則の一貫性の程度
で体感的なファイルの大きさは変わるな。
0312デフォルトの名無しさん
NGNG当然読み込んだデータの末端に余計な改行が入るのですけど、
不要な改行を付加することなく、スマートに
テキストファイルを読み込む方法はないでしょうか?
Open TextFilePath For Input As #1
Do Until EOF(1)
Line Input #1, Temp
ReadData = ReadData & Temp & Chr(13) & Chr(10)
Loop
Close #1
Text1.Text = ReadData
0313デフォルトの名無しさん
NGNGそんなえさで(ry
0314デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNGextern void func1(void);
int main(){
...
func1();
}
--b.cc--
extern func2(void);
void func1(void){
...
func2();
}
--c.cc--
void func2(void){
...
}
という3つのファイルがあって,g++ a.ccをするとundefined reference to func2()
がでるのですが,何がいけないのでしょうか?
0317●
NGNGg++ -c a.cc
0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNGなるほど,了解しました.ありがとうございました.
リンクする前にとめればいいんですね.
0320デフォルトの名無しさん
NGNG何を作るかによって設計を変えないとやっていけない。
クラス設計が関わるレベルであれば、オブジェクト
指向で設計しないと使えないヤツになってします。
アドレス渡しなんてやっていたら・・・オソロシイィィ
でも組み込み機器の設計や、リアルタイム制御の世界
だったら、まだまだポインタは必要だけどね。
トンカチで釘打つ時にトンカチに釘接着してから
木に打ち込もうとしたら、技術のレベルが知れるわね。
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG一人であちこち巡回してるのかと思うと、
相当なアンチRubyなんだろうなって思う
明らかにRubyに対し悪いイメージしか残してないからなw
0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNGなんでもかんでもC++ってわけにもイカンのはたしかだ。
それでもパフォーマンスとOO設計の両方を兼ね備えたのなんざ
C++とEiffelくらいしか無いからね。
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNGC++はともかく
- OCaml
- Objective C
- Delphi
を出さずにEiffelを出すのは何で?
Eiffelはパフォーマンスが要求される所で実績あったりするの?
0332デフォルトの名無しさん
NGNG別に深い意味はないよ、自分で選んだ結果として書いてるだけ。
あげてもらった言語に対しては
ObjectiveC:嫌いではない、Next使ってた頃はすごく重宝した
Delph:環境がWindowsしかない、すごく良くできているのにもったいない
OCaml:ごめんなさい、評価もしたことないのです
なんだよね、Eiffel入れたのは自分が使ったことがあって速度の問題もそれほどでなかったからなんだよ
でも大意としての機械言語には向き不向きがあるって事は了解してくれているんだよね?
0333325
NGNGClosとかCommonLispが自分は好きだけどチームからは不評なんです。
0334デフォルトの名無しさん
NGNGNext は NeXT と書いてくれ
0335デフォルトの名無しさん
NGNGDelphはDelphiと書いてくれ
0336デフォルトの名無しさん
NGNGレスどうも
いろんな言語の経験がお有りなんですね
Eiffel使いなんて珍しいなと思って聞いてみました
向き不向きの話は同意です
最近R(S言語)の関数をC++に移植してるんですが
S言語はお気楽すぎて作業が大変です
0337デフォルトの名無しさん
NGNGつっこみどころが多いな!
0338デフォルトの名無しさん
NGNG現につっこめてねえヒヨッ子がはったりかましてんじゃねえw
0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNGそんだけ混乱してりゃ解りづらいのは道理だなw
0342デフォルトの名無しさん
NGNGなるほど、そういうことか
0343デフォルトの名無しさん
NGNG派生クラスのコンストラクタで受け取った引数を少し加工してから、
基底クラスのコンストラクタに渡してやりたいのですが、
記述方法がわかりません。書く方法あったら教えていただけないでしょうか。
0344デフォルトの名無しさん
NGNGd(int a) : b(a + 1) { }
};
0345デフォルトの名無しさん
NGNGありがとうございます。助かりました。
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNG0348デフォルトの名無しさん
NGNGoperator-はオーバーロードされてません!残念!
0349デフォルトの名無しさん
NGNGだと思うがどうよ
0350デフォルトの名無しさん
NGNGデータ読み込み関連のクラスでデータを拾ってきて使おうとすると
クラスが層みたいになってるので、どうしても
hoge->getHoge()->getHogeHoge(hoge->getHogeNo())->getHogege()->getString(hoge->getHogeHogeNo()).c_str()
とか長くなってしまいます。
こういうときはどう組んだらよいのでしょうか?
0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNGなるほど。
ありがとうございました。
0353デフォルトの名無しさん
NGNGは何を意味しているんですか?
初心者です。よろしくお願いします。
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNGは何を意味しているんですか?
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNGT t(tt); // 髭推奨
T t = tt; // 禿推奨
のどちらがいいと思いますか?
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGコンストラクタをexplicit宣言しておくと微妙に差が出るな。
0361デフォルトの名無しさん
NGNG0362デフォルトの名無しさん
NGNGバッチファイルなどのスクリプトから子プロセスとして呼び出した時、戻り値を使えるかどうかの違い。
Windowsのシステム環境変数 「errorlevel」とか、Unixのシェル変数 「$?」で戻り値を取得可能。
バッチの例:
hoge.exe
echo %errorlevel%
0363デフォルトの名無しさん
NGNG説明不充分。voidだと使えないのではない。不定値になるのだ。
0364デフォルトの名無しさん
NGNGGUIの場合ほとんどウインドウ開いて閉じるだけの意味しかない。
Windowsしか知らないでCUIプログラム作ってると意味わかんないだろう。
0365デフォルトの名無しさん
NGNGお前はとりあえず、日本語の勉強しろ。
例としてあげるならば、「使えない奴だな。」は、奴が使用不能であることを指すのではない。
使っても物の役に立たないという意味だ。使う自由はあくまでユーザにある。
お前が日頃から言われていることだからすぐに理解できるだろう。な?
0366デフォルトの名無しさん
NGNG切れどころがわかんね┐(´〜`)┌
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG文頭が「補足で〜」とかなら頭良い人に見えるのに
0369デフォルトの名無しさん
NGNGtypedef int (*(*FUNCTION)())[];
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNGstatic const int HOGE=0;
ができないらしいので、enumで代用しました。
文字列定数を使う場合はどうやればいいでしょうか
VC++6.0を窓から投げ捨てる以外の方法を教えてください
0372デフォルトの名無しさん
NGNG買い換えましょう。
0373デフォルトの名無しさん
NGNGそのクラス宣言内での初期化ができるのはISOでも整数型だけと決まっている。
というわけで普通の静的メンバと同じようにしろ。
//ヘッダ
class Foo
{
static const char * const HOGE;
};
//cppファイル(1ファイルでだけ)
const char * const Foo::HOGE = "Hoge";
0374デフォルトの名無しさん
NGNGワラタ
お前が飛び降りれば良いだろw
0375デフォルトの名無しさん
NGNG{
public:
static const int hoge;
};
const foo::hoge = 0;
0377デフォルトの名無しさん
NGNGVC6はARM仕様、ISO/IEC14882と違うつーて騒ぐ池沼は適正なし
0378デフォルトの名無しさん
NGNGGCCこそが標準でありISOは糞である!
そこんとこ間違えないように!
0379デフォルトの名無しさん
NGNGGCC はウンコです。
http://pc5.2ch.net/test/read.cgi/tech/1095583235/528-
0380デフォルトの名無しさん
NGNGvoid main() は規格外。
0381デフォルトの名無しさん
NGNGいきなりブロックを書いて無理矢理スコープを制限したり
してるんですが、なんだか美しくない気がします。
こういうことは普通にやるものなのでしょうか?
↓こんな感じです
{
int a1, a2
if (a1 < a2) return -1;
if (a1 > a2) return +1;
}
{
int b1, b2;
if (b1 < b2) return -1;
if (b1 > b2) return +1;
}
0382デフォルトの名無しさん
NGNGswitch(式){
case 1:
{
int a = 1;
printf("%d\n", a);
}
default:
{
int a = 2;
printf("%d\n", a);
}
}
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNGたまにやる。
古いCではローカル変数をブロック途中で新しく定義するために使う。
C++ではデストラクタのタイミングを調整するために使ったりする。
関数に分けてすっきりした名前が付くなら、分けたほうがいい。
0385381
NGNG自分もそれはやるんですが、やっぱ>>381はさすがに
冗長?というか余計なお世話なのかなあ、と。
自分的にはブロックで囲むと
{ // hoge する
/* ... */
}
みたいな感じでコメントも分かりやすくなるのでは?
と思ってたりするのですが、これがほとんどなされない
ような書き方ならば逆に読みにくくなるかもしれないので
やめた方がいいのかと。
0386デフォルトの名無しさん
NGNG普通にやる。むしろ推奨。
最終的にリファクタリングで関数に切り出せることを暗示している。
0387デフォルトの名無しさん
NGNGttp://www.tietew.jp/cppll/archive/7539
0388デフォルトの名無しさん
NGNG確かに古い書き方の人は殆どやらないようだが、スコープがはっきりするので私もお奨め。
例えばこういうケースはfunc()を他人が作る場合にしばしばおきるので。
void myFunc()
{
int x, y;
...;
x = ...;
...;
y = ...;
int rtn;
{
struct ForFunc tmp = {x, y};
rtn = func(tmp);
}
switch (rtn) {
case FuncRtnOk:
...;
break;
case FuncRtnError:
default:
...;
}
}
まぁ、C++ならブロック化しなくてもすむんだけどね。
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNGキーと値を逆にしたものを持てばいい。
0392デフォルトの名無しさん
NGNGその通り。
0393デフォルトの名無しさん
NGNG最新版のboostには複数要素を基準にソートできるコンテナが入る。
0394デフォルトの名無しさん
NGNGvoid reg(int* p) { p_ = p; }
void foo() { ++(*p_); }
int i = 0;
reg(&i);
std::cout << i << std::endl;
foo();
std::cout << i << std::endl;
とした場合、iが最適化でfoo()前後で同じ値が使われるということはあるのでしょうか?
0395デフォルトの名無しさん
NGNGならばそのコンパイラを晒した方がレスが早そうだが。
0396394
NGNGttp://forums.belution.com/ja/cpp/000/009/26.shtml
ここの・ライブラリに関連ってとこでそんなことが書いてあったのですが
もしこういう最適化をされたら面倒だなと思ったのです。
0397デフォルトの名無しさん
NGNGエイリアスを使わないと仮定するとか
そういうようなコンパイルオプション使うとそうなります。
0398デフォルトの名無しさん
NGNG標準関数でない関数呼び出しの前後で、完全ローカル(*)でない変数が同じであることは期待しないで最適化するはず。
つまり、きちんと違う値が出力されるはず。
#完全ローカルと書いたが、要はアドレス参照されてないローカル変数。
0399394
NGNGttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_.2f.oa.2c_2f.ow.asp
これのことですね。
>>395, >>397-398
よくわかりました。ありがとうございました。
0400デフォルトの名無しさん
NGNG};
class Hoge:public Hige{
};
class Mage:public Hoge{
private:
std::vector<Hige> hige;
public:
Mage(){
hige.push_back( /* ここにHogeが持つclass Higeを入れたい */ );
}
};
このようなことが実現可能でしたら、その方法をご教授ください。
よろしくお願いします。
0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNGvectorの中身がポインタではないのでコピーになっちゃいますよ?
0403デフォルトの名無しさん
NGNGMageに継承したHogeの、さらに継承元のHigeを
higeに格納したいのですが…
0404デフォルトの名無しさん
NGNGつまり
std::vector<Hige*> hige;
にしておき、基底クラスへのポインタを hige に格納というわけですよね?
基底クラスとやらを勉強してきます
即レスありがとうございました
0405デフォルトの名無しさん
NGNG勉強するのはそっちじゃないと思う・・・。
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNGクラスAがクラスBのポインタを保持
クラスBがクラスAのポインタを保持
っていうのは可能でしょうか?
相互にクラスポインタを保持すると何故かコンパイルエラーが出るのですが…
0410デフォルトの名無しさん
NGNGポインタならできるはず・・・
ただ先行宣言が必要だけど
class B;
class A {
B* b_;
};
class B {
A* a_;
};
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGhige.push_back(*static_cast< Hige * >(this));
>>409
class B;
class A {
private:
B *b;
};
class B {
private:
A *a;
};
0413デフォルトの名無しさん
NGNGCの自作関数の作り方から勉強し直しの予感
0414409
NGNG先行宣言じゃなく相互にヘッダをincludeしてたんですがエラーの原因は別でした。
試行錯誤の結果無事できました。レスありがとうございました。
>>413
ちゅーかc++の勉強不足でした…orz
0415デフォルトの名無しさん
NGNG> 相互にヘッダをincludeしてたんですが
詳しく
0416デフォルトの名無しさん
NGNGあ、すみません。よく見たらちゃんと先行宣言もしてありました。
---a.h---
#include"b.h"
class a{
public:
a(b* bb){pb = bb;}
b* pb;
};
---b.h---
#include"a.h"
class a;
class b{
public:
b(a* aa){pa = aa;}
a *pa;
};
簡略化するとこんな感じのソースでした。では。
0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNGint a() { b(); }
int b() { a(); }
0419418
NGNG0420デフォルトの名無しさん
NGNGcode_b.c
というC++とCの二つのcodeがあります。
code_aで使っている関数のうちb1()はcode_b.cで定義されていて、
code_bで使っている関数のうちa1()はcode_a.ccで定義されています。
Makefileの中に
code_a: code_a.o code_b.o
code_a.o: code_a.cc
code_b.o: code_b.c
という依存関係が書かれており、
make code_a
をすると
g++ -c -o code_a.o code_a.cc
gcc -c -o code_b.o code_b.c
gcc code_a.o code_b.o -o code_a
code_a.o: In function `main':
code_a.o(.text+0xa1a): undefined reference to `b1()'
code_b.o(.text+0x907): undefined reference to `a1()'
collect2: ld returned 1 exit status
make: *** [code_a] Error 1
というlink errorが出ます。
code_a.ccをの中身を書き換えて(constを#defineにしたり)、
code_a.cに変えてしまえば問題なくmakeが通ります。
code_aをC++のままでmakeしたいのですが、
何が問題なんでしょうか。
0421デフォルトの名無しさん
NGNG/* code_a.cc */
extern "C" int b1(); // b1がCリンケージの関数であることを示す宣言
extern "C" int a1(){/* ... */} // a1をCリンケージの関数として定義
これでうまくいかないかな。
0422420
NGNG上手くいきました。
これって基本事項かな?
普段、Cのcodeと混在させるってしないもので。
0423デフォルトの名無しさん
NGNG基本中の基本。
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNGフリーで質のよいライブラリってあるでしょうか?
よろしくお願いします。
0426デフォルトの名無しさん
NGNGまずは本スレ21へのレスをどうぞ
0427デフォルトの名無しさん
NGNGごめんなさい。すでに出ていたのですね。
ご丁寧にありがとうございます。
0428デフォルトの名無しさん
NGNG「本店」とかと同じ使い方か
0429デフォルトの名無しさん
NGNG溜息…
0430デフォルトの名無しさん
NGNGその場合の「本店」自体、イントネーションで二通りの解釈があるな。
0431デフォルトの名無しさん
NGNG0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG環境に依存しないのが良いのですが特定のコンパイラにはあると言う情報でもかまいません。
0434デフォルトの名無しさん
NGNGクラス単位なら、当該ヘッダに #warn 書いておくとか。
0435デフォルトの名無しさん
NGNGヘッダ内に移行すべきクラス書きたい時とかどうしようか悩んでしまってるんです。
やはり事由を記述して新しいヘッダ読めって書くべきなんでしょうかねぇ。
むぅ。
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNGttp://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Function-Attributes.html#index-_0040code_007bdeprecated_007d-attribute_002e-1612
0438433
NGNGgccっていろいろ拡張されているんですねぇ。
とりあえず現行のソースは@deprecatedを使ってdoxygenで作ったマニュアルを見てくださいと#warnに書いておく事にします。
0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNG配列以外で特に不満はないが・・・
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNGHOGE hoge = { sizeof(HOGE) };
なんて初期化する場面がしょっちゅうあるからな。
0444デフォルトの名無しさん
NGNG動作上よく出てくるのはいいが
記述上おなじことを何度も書いてる香具師は低脳
0445デフォルトの名無しさん
NGNGそれコンストラクタのメンバ初期化と何か関係ある話か
0446デフォルトの名無しさん
NGNG442までは関係あったが、443から関係なくなった
0447デフォルトの名無しさん
NGNG443も関係あるじゃん。
0448デフォルトの名無しさん
NGNGいーや、関係ない
442で終わった話を無理やり続けているだけ
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG別に続けるなとは言ってない
この点でもまたお前は流れが読めてない
0451デフォルトの名無しさん
NGNG屁理屈はいいから。
つか>>444はコンストラクタの話とは関係なかったんだな。
どうりで意味不明だと思った。
0452デフォルトの名無しさん
NGNGよくないか。
0453デフォルトの名無しさん
NGNG「const参照の代入」ってなんだ?
0454デフォルトの名無しさん
NGNG{
unsigned short int a,b,c;// 2 byte
a=40000;
b=30000;
c = (a+b) >> 1;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "c: " << c << endl;
}
こいつの出力がちゃんと
a: 40000
b: 30000
c: 35000 // ここがオーバーフローして計算されると予想した
になるのはコンパイラが賢いからでしょうか?文法的に正しいのでしょうか?
それともわたしが勘違いしてるのでしょうか?(環境はVC7.1です)
教えてください。
0455デフォルトの名無しさん
NGNG(unsigned short)(a+b)
0456デフォルトの名無しさん
NGNG"integer promotion" または 「整数の格上げ」 とか、そういうの。
0457デフォルトの名無しさん
NGNGconst参照→const Hoge&なメンバ変数がコンストラクタ内なら代入できる。みたいな
0458デフォルトの名無しさん
NGNG初期化で十分だな。そんなの全然便利よくない。
0459デフォルトの名無しさん
NGNGプ
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGconst変数の初期化をコンストラクタ内でしたいと思うことはかなりある。
参照はなにかとややこしいので出来なくていいと思うが。
JavaもC#も出来るし、次はC++もできるようにして欲しいな。
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG実行ファイルを逆アセンブルしてC++.NETのソースに戻す。
dotnet2win32を使って普通のコードに直す。
ただし、完全にうまく行くとは限らない。
はい、次の方どうぞ。
0464デフォルトの名無しさん
NGNG初期化したいなら初期化すればいいだろ。
代入できるようにする必要は無い。
0465デフォルトの名無しさん
NGNG即レスありがとう。
私が使用してるのはMicrosoft Visual C++ 6.0なんですが
コンバートできますか?
0466デフォルトの名無しさん
NGNG>>457は「代入」と書いてるが、書いてる内容はJavaなんかの初期化のことだ。
ある計算結果をconstメンバにしたいときとか。
0467454
NGNGありがとうございます。
キーワードをもとに調べてようやくわかりました。
1. 型は常に、必要であれば、精度を失わないように、サイズの大きな型にプロモートされる
2. int型よりもより小さな整数型が含まれた算術式では、評価の前にint型にプロモートされる
(C++ Primerより)
ということはint型より大きな数値で試せばオーバーフローするのかな?と思って試すと無事(?)フローしました。
int main()
{
unsigned short int a,b,c;// 2 byte
a=40000;
b=30000;
c = (a+b) / 2;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "c: " << c << endl;
unsigned long d,e,f,g; // 4 byte
d = 4000000000;
e = 3000000000;
f = (d+e) / 2;
g = (d & e) + ((d ^ e) >> 1);
cout << "d: " << d << endl;
cout << "e: " << e << endl;
cout << "f: " << f << endl;
cout << "g: " << g << endl;
}
ありがとうございました。
0468454
NGNGa: 40000
b: 30000
c: 35000
d: 4000000000
e: 3000000000
f: 1352516352
g: 3500000000
---
_(._.)_
0469デフォルトの名無しさん
NGNG何も困らんが、釣り?釣られた?
0470デフォルトの名無しさん
NGNGC++で代入と初期化の区別を曖昧にするな。
計算結果をconstメンバにしたけりゃ勝手にしろよ。
0471デフォルトの名無しさん
NGNG誰も困ってるなんて話はしてないわけだが。
そうやってメンバ初期化部分がごちゃごちゃするから
コンストラクタ内で書けるといいねってだけの話だ。
0472デフォルトの名無しさん
NGNGFoo::Foo(int x) : constmember_(x ? (x!=1 ? (x!=2 ? ( x!=3 ? (....) : Foo::bar3() ) : Foo::bar2() ) :Foo::bar1()):Foo::bar()) : Foo::Baz()) {}
0473デフォルトの名無しさん
NGNG区別を曖昧にしてるのは俺じゃねーよ。457だ。
0474デフォルトの名無しさん
NGNG469のどこがごちゃごちゃ?
コンストラクタ内で書けるとどうなるの?
0475462
NGNG0476デフォルトの名無しさん
NGNGいちいち例を書かんとダメなのか・・・
メンバが複数あったりコメント書きたかったり、適当に想像しろ。
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479462
NGNG0480デフォルトの名無しさん
NGNGああ、ごめんなw
0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG自力でゴリゴリするも良し。1から作り直すのもまた宜し。
0483デフォルトの名無しさん
NGNGVBの一関数を書き直すだけとかなら機械的にできなくもないが、
フォームデザインも含めてとなると結局は作り直しになる。
0484462
NGNG回答ありがとうございます
>VBの一関数を書き直すだけとかなら機械的にできなくもないが、
そういうソフトとかあるんでしょうか?
フォームやデザインは書き直さなくてもいいので良ければ教えてもらえると
幸いです。
0485デフォルトの名無しさん
NGNGスレ違い。環境依存スレへどうぞ。
この辺とか。
http://pc5.2ch.net/test/read.cgi/tech/1098912550/
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGありますが、純C++の話題じゃないので書けません。
0488デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNGスマソ、向こうで聞いてみます。
0491デフォルトの名無しさん
NGNGg++ だと普通なのに…
0492デフォルトの名無しさん
NGNG??わからん??
gcc以外のコンパイラではサイズがでかくなるという意味?
0493デフォルトの名無しさん
NGNGどうもそうらしいな。
http://www.s34.co.jp/cpptechdoc/article/sizeof/index.html
0494デフォルトの名無しさん
NGNGもちろん、Cの関数を呼び出すケースは別にして。
コンテナとアルゴリズムを適切に使っていれば、
使うケースは無いような気がするけど、どーよ?
0495デフォルトの名無しさん
NGNG基本中の基本
0496デフォルトの名無しさん
NGNGとかの T の種類によって処理を変えたりとかできませんかね
switch (T) {
case int:
みたいな
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG// int の時の処理
} else if (typeid(T) == typid(double) {
// double の時の処理
} 以下続く
ただし全然オススメ出来ない
特殊化すればいいわけだし
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGtypeidに限って言えば俺もほとんど使ったこと無いな。
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNG根性無いからしょっちゅう負けてるけど
0506デフォルトの名無しさん
NGNGstruct A
{
template< typename T > A();
};
struct B : A
{
B() : A<int>() {}
};
----
↑をコンパイルすると、Bのコンストラクタ内の初期化リストで文法エラーになってしまいます。
テンプレート引数がコンストラクタの引数から推測できないコンストラクタテンプレートは
どうやってテンプレートインスタンスを選択するんでしょうか?
0507デフォルトの名無しさん
NGNGよくわからんが、こんな感じではだめなん?
template <typename T>
struct Type2Type {
typedef T OriginalType;
};
struct A {
template <typename T> A(Type2Type<T>) {}
};
struct B : A {
B() : A(Type2Type<int>()) {}
};
0508デフォルトの名無しさん
NGNGそれは
「テンプレート引数がコンストラクタの引数から推測できるコンストラクタテンプレート」
になってるだろ。
0509デフォルトの名無しさん
NGNGclass C {
template <class U> friend class C<U>;
};
が VC7.1 でコンパイルしたところ
error C3857: 'C<T1>': 複数テンプレート パラメータ一覧は使用できません。
ってなるんですが、friend には出来ないってことなんですか?
More Effective C++ の auto_ptr に同じコードがあるんですが…
0510デフォルトの名無しさん
NGNG配列テンプレートを作るときに格納するクラスで定義された
メモリ確保方法を使用したいのですか…
0511デフォルトの名無しさん
NGNGplacement new
0512511
NGNGでもやりたいことをするためには、普通 placement new だと思うんだけど……。
0513デフォルトの名無しさん
NGNG::operator new()
0514デフォルトの名無しさん
NGNG>>513のやり方で領域を確保して、>>511-512のやり方で
インスタンスを生成する。
これにて一件落着。
0515デフォルトの名無しさん
NGNG>テンプレート引数がコンストラクタの引数から推測できないコンストラクタテンプレート
って初めて見たんですがありなんでしょうか? >> All
0516デフォルトの名無しさん
NGNGこれg++でもだめですね
0517デフォルトの名無しさん
NGNGsetupsp6.exeを起動しても
「16ビット Windows サブシステム
config.nt. システム ファイルは MS-DOS および Microsoft Windows アプリケーションを実行するのに適していません。 アプリケーションを終了するには、[閉じる]を選ん
でください。」
といったダイアログが出てきてインストールできません。ダイアログには「閉じる」と「無視」があるのですが、どちらを
押してもダイアログが閉じるだけです。
どなたか原因が解る方、いませんか?OSは2kです。
Visual Basic 6.0、Visual C++ 6.0、および Visual SourceSafe 6.0d を対象とする Service Pack 6
ttp://www.microsoft.com/downloads/details.aspx?FamilyId=A8494EDB-2E89-4676-A16A-5C5477CB9713&displaylang=ja
0518506
NGNG-2- より引用。
Note: because the explicit template argument list follows the function template name, and because conversion member function templates and constructor member function templates are called without using a function name,
there is no way to provide an explicit template argument list for these function templates.
「明示的なテンプレート引数を与えることはできない」ということで、
つまり、暗黙の呼び出しのための手がかりが無い以上、
呼び出す方法が無いってことになるのかな。
0519デフォルトの名無しさん
NGNGどちらにせよそういう使い方はよろしくないな、使用されないダミーのパラメータを持たせるのが良いかと。
0521510
NGNGうーん。でもこの方法だと、new/deleteが宣言されてない型とか
プリミティブ型のnew/deleteを呼び出したときデフォルトの
new/deleteが呼び出せずコンパイラエラーになってしまいますね(VC.NET2003)
ATLのCArrayとかSTLのvectorでもmallocの類つかってるみたいだし
やっぱ無理なのか…
0522デフォルトの名無しさん
NGNG何byteのデータとして渡されてるんでしょうか?
というより「渡される」という解釈ではないのかな?
あと、構造体を作るときのアライメント(4byte刻みとかのやつ)は
関数に渡すときの引数群にも当てはまるのでしょうか?
例:
void Func( char c1, int i, char c2 );
void Func( int i, char c1, char c2 );
微妙な話題ですみません
関数を作るときとか、どういった順序がいいのかよく迷うので
指標になるようなものはないかなぁと思いまして
0523デフォルトの名無しさん
NGNG> 何byteのデータとして渡されてるんでしょうか?
一般的な実装では、ポインタと同じ。
> 関数に渡すときの引数群にも当てはまるのでしょうか?
一般的な実装では、当てはまらない。
順番は呼び出し側コードの読みやすさ、書きやすさで決めれ。
0524デフォルトの名無しさん
NGNG構造体でも4バイトアライメントとは限らない。環境(コンパイラオプションを含む)で変わってしまう。
また、関数の引き数は構造体とは違うので(以下>523
0525デフォルトの名無しさん
NGNG構造体への参照なら一般的な実装ではポインタ渡しになっており
このときの「隠しポインタ」はポインタとしての境界要求を持っていて
メモリ空間が 32bits の処理系では 4bytes 境界が多い
引数の順序に関しては俺はこうしてる
主要なものほど左、ただし同じ系列の関数と統一性を持たせること
デフォルト引数の仕様に不便を感じることがある
void Func(int hour = 0, int min = 0); //という関数に対して
Func(0); //暗黙の min = 0 はできるが
Func(, 0); //暗黙の hour = 0 ができない
こんなときは素直にオーバーロードするがいまいち釈然としないものが残る
void Func(int hour, int min);
inline void Func(int min) { Func(0, min); }
0526デフォルトの名無しさん
NGNG名前付きパラメータですね.もしかしたら次のBoostに入るかも.
Func(0); // min = 0, hour = 0
Func(hour = 1); // min = 0, hour = 1
0527デフォルトの名無しさん
NGNG最初の段、ダウト。境界とメモリ空間には強い関連はない。
メンバの型と並びによって、複雑なふるまいをすることが少なくない。
0528デフォルトの名無しさん
NGNGああ、空間が 32bits だから境界があるわけじゃないな
これは失礼した、言い直す
境界は空間ではなくバス幅から出てくること
バス幅が1番地あたりのビット数の2倍なら 2bytes 境界、
4倍なら 4bytes 境界の制限が生じる
とは言うものの
バス幅 64bits なのに非特権状態では奇数番地でいいのがあったり
バス幅 8bits なのに 2bytes 境界のがあったりと
憶えたての人を混乱させるシステムが跋扈しているんで
簡潔な説明がしづらい (言い訳くさくてアレだが・・・
0529デフォルトの名無しさん
NGNG素直に、環境依存だから当てにするなって言えばいいじゃん。
実際、sparc compilerなんかだとメンバに一つでもdoubleが入ると8バイト境界になるけど
charしかなければ1バイト境界だし。
0530デフォルトの名無しさん
NGNGいや判断材料は持ってないとSF的な妄想で書くわけにもいくまい
522 が訊きたかったのはそのあたりじゃないか
当てにするなというよりマニュアルとアセンブラで確認しろってとこだが
仮にそう言ったとして今現在の 522 にとってどうなのかな
0531デフォルトの名無しさん
NGNGBoost?
0532デフォルトの名無しさん
NGNGint min;
void Func(...);
とかじゃねえだろなw
0533デフォルトの名無しさん
NGNGT* p = new T();
の両方見るんですが、差異はあるのでしょうか…?
0534デフォルトの名無しさん
NGNGT が POD の場合、前者は中身が初期化されない。
後者はあたかも = {0} したかのように初期化される。
0535デフォルトの名無しさん
NGNGありがとうございます
POD っていうのは
ユーザー定義コンストラクタ、デストラクタ、コピー演算子がない
かつ private, protected に非staticデータメンバがなく、
基底クラスも仮想関数も持たないクラスという理解でいいでしょうか…?
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGinline To implicit_cast(From from)
{ return from; }
と static_cast はどのように使い分けたらいいのでしょうか?
あと implicit_cast の引数は const From& from で渡した方が
効率がいいように思うのですが、これでは何か問題があるのでしょうか?
0538デフォルトの名無しさん
NGNGttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndeepc/htm/deep05182000.asp
0539デフォルトの名無しさん
NGNG>動作セットに分類してくれていたらと思います。これら 2 つの演算子の動作が
>重複しなければ、プログラマもそれぞれの演算子を使うべき場面を判断しやすかった
>でしょう。
ハゲドウだな。
0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNG>明示的な形にすることにはメリットがあります。
全ての暗黙の型変換を implicit_cast でやるのはマンドクサイ気がするんだが、
これ読む限りやったほうがいいのかな?
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGコンパイラの警告をつぶすためには有効じゃないかな。
情報喪失の警告は重要な情報だが常に出るのはうざいので、
implicit_cast でマーキングした上でコンパイラさんには黙ってもらう。
grep すれば後から見つけ出せる。
間違ってもコンパイラオプションで黙らせるようなことはしちゃいけない。
0544デフォルトの名無しさん
NGNGlong lg = 0;
short st = 0;
st = implicit_cast<short>(lg);
VC7.1 では
warning C4244: 'return' : 'long' から 'short' に変換しました。データが失われているかもしれません
ってなるんだけどどういうこと??
0545デフォルトの名無しさん
NGNGそこだけ警告切りなよ。そのために関数にしてるんだから。
0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGBOOLからboolの変換でうるさいから、
BOOL foo = TRUE;
bool bar = !!foo;
してますがなにか。
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG俺はこれ。
0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNGどうすべきなのでしょうか?
error C2510: 'type' : スコープ解決演算子 '::' の左側の識別子名は、クラス、構造体、共用体のいずれでもありません。
namespace Name
{
struct a
{
typedef int type;
static const int data;
};
}
//const int ::Name::a::data = 100; //OK
//const ::Name::a::type Name::a::data = 100; //OK
//const Name::a::type ::Name::a::data = 100; //NG
//const ::Name::a::type ::Name::a::data = 100;//NG
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG無数の空間を与えられながらそれを否定して
ある特定の文字列に固執する者は遠目に何に見えると思うかね
0554551
NGNGどーも
type ::var を type var に変形したら通りました
template <typename T> struct identity
{
typedef T type;
};
const Name::a::type identity<::Name::a>::type::data = 100; //OK
const ::Name::a::type identity<::Name::a>::type::data = 100; //OK
0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNG//const Name::a::type ::Name::a::data = 100;
これは
const Name::a::type::Name::a::data = 100;
ということなので、NGで当たり前。
const Name::a::type (::Name::a::data) = 100;
とすればいい。
0557デフォルトの名無しさん
NGNGファイル入出力やディレクトリ操作から始まって
ソケットプログラミングまで扱うような、
C++の用例の載っているおすすめの参考書がありましたら教えて頂けませんか?
趣味でプログラムの勉強をしてまして、
UNIXの基本コマンドを練習用に自分で書いてみたいんです。
0558デフォルトの名無しさん
NGNGプラットフォーム依存になってしまうなど、あまり使うのを推奨されていないようで、
allocaの代わりになるようなものは、ないでしょうか?
以下のコードのように、呼び出し先で明示的に確保されたメモリを
解放しなくても良い方法を知りたいのです。宜しくお願いいたします。
char* ReturnChar(void)
{
char* pRet = new char[5];
strcpy(pRet, "test");
return pRet;
}
int main(void)
{
char* pTest = ReturnChar();
// ここで、delete[] pTest; をしなくても解放されるようにしたい
return 0;
}
0559デフォルトの名無しさん
NGNGboost::shared_array
0560デフォルトの名無しさん
NGNGオマエの例では、allocaはもともと使用できないぞ。
0561デフォルトの名無しさん
NGNG>>559またはstd::auto_ptr
0562デフォルトの名無しさん
NGNGvoid GetChar(std::string &ret){
ret="test";
}
main(){
std::string test;
Char(ret);
}
0563デフォルトの名無しさん
NGNGconst std::string GetChar()
{
reutrn "test";
}
int main(void)
{
std::string str = GetChar();
return 0;
}
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNGあるよ。
UNIXネットワークプログラミング入門
0566デフォルトの名無しさん
NGNGnew[]で確保したものにauto_ptrはよろしくないかと。
0567561
NGNG0568デフォルトの名無しさん
NGNGallocaの代わりって事は他とshareしないんだろ?
0569デフォルトの名無しさん
NGNG0570デフォルトの名無しさん
NGNGboostスレから脱獄しないように
0571デフォルトの名無しさん
NGNG納得したいけどなんか腑に落ちないな
0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNGtypedef char* type;
ポインタだと違う型になってしまう悪寒。
0574558
NGNG>>559、>>562、>>563、>>568
で検討して見ます。
できれば、allocaの代わりになるものでANSI準拠のものが良かったのですけど。
ちなみに、boostってライセンスってどうなんですか?
改変、商用OKであれば、嬉しいです。
0575デフォルトの名無しさん
NGNGOKだったはず。バイナリ配布なら特に明記もいらないんじゃなかったっけか
0576デフォルトの名無しさん
NGNGttp://www.tietew.jp/cppll/archive/5773
0577デフォルトの名無しさん
NGNGちがいはありません
0578デフォルトの名無しさん
NGNG通報シマスタ
0579デフォルトの名無しさん
NGNG#define _UNICODE
#include <iostream>
int main()
{
std::wcout.imbue(std::locale("japanese"));
std::wcout << L'A' << std::endl;
return 0;
}
実行結果: 65
Aって表示して欲しいのに数字で表示されちゃいます。
vc7.1 STLport-4.6.1です。
0580デフォルトの名無しさん
NGNG0581デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNGハゲワラ
0588579
NGNGほかの人のソースを見るとlocale::global(locale("japanese"))で、できてるのですが
stlportだとstd::wcout.imbue(std::locale("japanese"));ってしなきゃならないのらしいのですが
これはstlportが単独でわるいのですか?585さんが言うようにvc7.1とあわさると悪くなるのですか
0589デフォルトの名無しさん
NGNGfor (int i=0;i<X;i++)
{
x[i] = new double[Y];
}
で2次元配列を確保しているのですが、これをメモリ上で連続した領域に確保するにはどうしたらよいでしょうか?
0590デフォルトの名無しさん
NGNGx[0] = new double[X*Y];
for (int i=1; i<X; i++) x[i] = x[0]+i*X;
とか
0591デフォルトの名無しさん
NGNGVC++ではデフォルトでwchar_tはshortのtypedefだから
君が文字を突っ込んだつもりでも、向こうは数字が来たと思ってる。
さらにSTLPortはこのデフォルトの設定を使ってコンパイルしてるから
単にVC++の設定を変えるだけだとリンクエラー出る。
STLPortのmakeファイルをいじって再コンパイルが必要。
0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNGvoid *a = 1;
a += 5;
のような事を C++ 内で行うと gcc に
「error: `void *' 型のポインタが計算で使われました」
と怒られてしまいます.これを回避するにはどうすれば良いのでしょうか.
ポインタだけでも教えて頂けると助かります.
; 現状は char* にキャストして回避してます...
0595デフォルトの名無しさん
NGNG嘘をつくな
0596デフォルトの名無しさん
NGNGどんなクソプログラム書いてるのか知らんが一から考え直せ。
0597594
NGNG>> 594
C のコードではエラー出てなかったんで,てっきり使えると思ってました.
>> 596
mmap したものに memcpy でデータを順次書き込んでいくコードなんですが,
書き込み位置をずらすために,
void *p = mmap(...);
mempcy(p, hoge, size);
p += size; // ← ここ
のような事がしたいんですが,普通はどうやるんでしょうか?
0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNG0600デフォルトの名無しさん
NGNG>C のコードではエラー出てなかったんで,てっきり使えると思ってました.
gcc には非標準拡張がてんこ盛り入ってる
他がそんなに綺麗なわけでもないが・・・
あんまり1つの処理系での「常識」を信じすぎるな、という教訓を得たならめでたいことだ
0601デフォルトの名無しさん
NGNG0602594
NGNGみなさん,ありがとうございます.勉強になりました.
0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNG0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNG0608デフォルトの名無しさん
NGNGエラーが出るので(STLportはスレッドセーフレベル2)、気をつけなければいけ
ないとすればその点かな。
速度的には・・・・どうなんでしょう?アルゴリズムは結構速いという定評ですが。
http://www.nantekotta.com/stl.html
↑これはVC6.0付属のDinkumwareとの比較なのであまり参考にならないが。
0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNGsafe level でぐぐってみ。
0612デフォルトの名無しさん
NGNG0613デフォルトの名無しさん
NGNGそりゃRubyだろ。スレ違い。
0614デフォルトの名無しさん
NGNG禿も最近はRubyがお気に入りだってさ。
0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNGRubyには未来がある。
0617デフォルトの名無しさん
NGNGスレッドセーフである事は確か。オプションでコントロールできるが。
_REENTRANTマクロだっけ。
0618デフォルトの名無しさん
NGNG0619デフォルトの名無しさん
NGNGint x,y ; // 座標値のみをもっているクラス
public:
Vector( int a,int b ) { x = a ; y = b ; }
int get_x() { return x ; }
} ;
class Point: public Vector { // 派生クラス(導出クラスとも言う)
int color ;
public: // デフォルトの色は9
Point( int a,int b,int cc=9 ):Vector( a,b ) { color = cc ; }
int get_color() { return color ; }
} ;
Pointコンストラクタの後ろについている「:」がよくわかりません。
PointクラスがVectorクラスを継承しているのは分かるのですが・・・・・・
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG初期化リスト。格好としては基底クラスのコンストラクタを呼び出している
ような感じになっている。
0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNGろが、ostream を派生させたクラスを作ってput,writeをオーバーライドして、
書き込み文字数をカウントして、改行を付加しながら出力すれば簡単に出来る
かなと思いきや、 putもwriteもvirtualじゃないので、 ostream::operator<<
で入力した物は派生クラスのput,writeを呼んでくれなくあえなく断念。かと
言って、他のPODに対してのoperator<<を軒並オーバーライドするのも馬鹿っ
ぽいし、何か良い知恵があったら教えて頂けませんでしょうか。
書式制御なので、出来ればstreambufをいじるんじゃない方向がいいんですよね。
イメージとしては、
custom_stream stream(5)
stream << "test" << 200 << 0.05 << "test";
で、
test2
000.0
5test
のようになるようなストリームクラスを作りたいのです。
0630デフォルトの名無しさん
NGNG出力しなおすのが楽なんじゃないか?
0631デフォルトの名無しさん
NGNG#ifdef _DEBUG
#define _STLP_DEBUG 1
#define _STLP_USE_NEWALLOC 1
#else
#undef _STLP_DEBUG
#endif
こんな事をしとけばいい
0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNG0634C++ 初心者
NGNGコンパイル エラーが出るんです。
どういう風に修正したらいいでしょうか?
class Record { ... };
typedef Record* RecordPtr;
typedef const Record* ConstRecordPtr;
class Hoge {
private:
vector<RecordPtr> _records;
public:
const vector<ConstRecordPtr>& GetRecords(void) const
{
return _records;
}
};
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNGvector<ConstRecordPtr> GetRecords(void) const
{
vector<ConstRecordPtr> result;
result.reserve (_records.size ());
copy (_records.begin (), _records.end (), back_insert_iterator <vector<ConstRecordPtr> > (result));
return result;
}
0638634
NGNGE:\Project\Test67\Main.cpp(18) : error C2440: 'return' : 'const class std::vector<class Record *,class std::allocator<class Record *> >' から
'const class std::vector<class Record const *,class std::allocator<class Record const *> > &' に変換することはできません。(新しい動作 ; ヘルプを参照)
理由: 'const class std::vector<class Record *,class std::allocator<class Record *> >' から
'const class std::vector<class Record const *,class std::allocator<class Record const *> >' へは変換できません。
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。
0640634
NGNGいや、そんな重いことはしたくないですぅ。。。
0641634
NGNGRecordPtr のベクタを、ConstRecordPtr のベクタとして返したいわけです。
もちろん、コピーなどの操作は一切行わずに、単純な型変換だけ行ってです。
0642デフォルトの名無しさん
NGNGじゃresultに相当するのをmemberにもって慎重に操作したら?
だいたいその手の最適化は最後にプロファイルしてからだ
0643デフォルトの名無しさん
NGNGvector<ConstRecordPtr> GetRecords(void) const
{
return vector<ConstRecordPtr> (_records.begin (), _records.end ());
}
こっちがいいかも
0644634
NGNG> だいたいその手の最適化は最後にプロファイルしてからだ
いえ、レコードが大量にあることがあらかじめ分かっているので、
コーディング時にその最適化は終わらしておきたいんです。
>>643
やっぱりコピーしなあかんですか。。。
C++ ってこういうものなんでしょうか。。。
0645634
NGNGこんなんで。
vector<ConstRecordPtr>& GetRecords(void) const
{
return * (vector<ConstRecordPtr> *) (void *) (& _records);
}
0646デフォルトの名無しさん
NGNGconst vector<ConstRecordPtr> &GetRecords() const{
return (const vector<ConstRecordPtr> &)_records;
}
0647デフォルトの名無しさん
NGNGこういうキャストで済む問題じゃないよな。
return *reinterpret_cast<vector<ConstRecordPtr>*>(&_records);
0648デフォルトの名無しさん
NGNGconst_iteratorを返せばいいんじゃないの?
0650デフォルトの名無しさん
NGNGイテレータ返すのって、作法としていいのかな。
vector<..>::const_iterator GetRecordsBegin()
vector<..>::const_iterator GetRecordsEnd()
みたいに2つも用意しないといけないでしょう。
0651デフォルトの名無しさん
NGNGstd::pair<std::vector<hoge>::const_iterator, std::vector<hoge>::const_iterator>を返せば良い。
0652デフォルトの名無しさん
NGNGpair 変数と const_iterator 2 つを用意して、
pair 変数で受け取って、second と first をとって別の変数に代入して。。。
Python のタプルのようなものがあれば楽だけど。
0653デフォルトの名無しさん
NGNGおいおい <algorithm> の関数の大半を否定するかよ・・・
0654デフォルトの名無しさん
NGNGmap とか pair を多用するけど、便利なことは便利だが。
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG正直いってあまり使わないんだよねー。
設計の段階でどのコンテナを使うべきかだいたい決まってしまうし。
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG例えばパーサ作ってるときの区切り文字とか
0659デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG653: おいおい、<algorithm> の関数の大半を否定するかよ・・・
654: 少なくとも記法という観点からは否定したいねぇ。
655: 続きを検索なんてどうやっとん
657: どういうこと?
658: 例えばパーサ作ってるときの区切り文字とか
659: ??? ←ここだけ流れが読めない
660: それはイテレータみたいの使うねえ。
「みたいの」って似て非なるものってこと?
0662デフォルトの名無しさん
NGNG0663662
NGNG0664660 != 659
NGNGそれが必ずしも STL の設計を踏襲したものにするとは限らないということ。
ポインタも抽象的な意味でのイテレータだし、
FILE* を fseek() するのも FILE* をイテレータとみなしているということだよね。
0665デフォルトの名無しさん
NGNGもしかしてenumeratorと間違ってない?
0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNGこれも、「イテレータみたいなもの」と言えるかしら
0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNGそう、抽象的な意味でのイテレータだよな。
650の主張によれば始点と終点を別個に返す必要が出るらしいが、
仮に添え字で返したにしてもそれは同じことで、
本質的にシーケンス上の位置を示すものを返すことを
作法という観点からどのように否定するのか疑問に思ったわけさ。
仮に可読性と言うなら確かに STL の設計とは思想を異にする主張だな。
ある意味、template 引数が自動的な typedef になってくれることを使うか捨てるかで。
ところで、FILE* はファイル上の位置を示してないだろ。
これ、どうする?
FILE *fp1, *fp2;
fp1 = fopen("hoge", "r");
fp2 = fopen("hoge", "r");
fseek(fp2, 1, SEEK_CUR);
俺的には fseek の第2引数がイテレータで、第3引数が第2引数の型って気がするが・・・
0672デフォルトの名無しさん
NGNGp[i]などとして使っていれば、「イテレータみたいなもの」と言えなくもない。
0673デフォルトの名無しさん
NGNG本義的にはポインタはイテレータではない。
だがC++のイテレータはポインタを含むように設計された
(つまり繰り返し処理のために++演算子を使うことにした)
からポインタはSTL内に限ってイテレータの一種になったに過ぎない。
0674デフォルトの名無しさん
NGNGptr++
0675デフォルトの名無しさん
NGNGイテレータ自体が始点と終点を知っていれば何の問題も無いのでは?
JavaやC#ではわざわざendを返したりしない。
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNG終端標識を使ったから頭だけで済んだってのはナシだろ、
それだったらイテレータだって同じことじゃん。
0678デフォルトの名無しさん
NGNGシークポインタがイテレータ
0679デフォルトの名無しさん
NGNGJavaのイテレータは不自然だから嫌い
0680デフォルトの名無しさん
NGNGboost::rangeとかどうですか?
http://www.boost.org/libs/range/index.html
>652
boost::tuples::tieとかどうですか?
http://boost.cppll.jp/HEAD/libs/tuple/doc/tuple_users_guide.html#tiers
0681デフォルトの名無しさん
NGNGfor (int i (0); i < 10; ++ i) // <- (B)
cout << i << endl; // <- (C)
これってg++ではコンパイル出来るんですけどいいんでしたっけ?
(B)の行で(A)のiとコンフリクトするとかエラーが出るのが
本来の仕様だったりしないか不安なのですが
0682681
NGNGfor (int i (0); i < 10; ++ i) // <- (A)
{
int i (0); // <- (B)
cout << i << endl; // <- (C)
}
0683デフォルトの名無しさん
NGNGclass A{
const int x=10;//<-できない
};
A::A()
{
const int x=10;//<-ここでしか有効でない
}
0684デフォルトの名無しさん
NGNGclass A{
static const int x=10;
};
か
class A{
const int x;
};
A::A(): x (10)
{
}
0685デフォルトの名無しさん
NGNG初期化リストを使うとか。A::A() : x(10) { ... };
0686デフォルトの名無しさん
NGNGstaticをつければいいんですか。ありがとうございました。
0687デフォルトの名無しさん
NGNGstd::map<int, int> map_weight;
map_weight[ 777 ] += 100; //いきなり
printf( "val = %d\n", map_weight[ 777 ] ); //val = 100
intの初期化は、いわゆる組込型のint()に必ずなっているんでしょうか
0688687
NGNG0689デフォルトの名無しさん
NGNG単発質問にトリップがいるのか
0690トリップ ◆hEpdoZ.tHU
NGNG呼んだ?
0691687
NGNGどういう意味でしょうか?
自己解決したので質問に答えなくてもいい、
というのは必要はないってことですか?
0692デフォルトの名無しさん
NGNG俺は 689 ではないが・・・
別に放置でも構わなかったが
自己解決したことを律儀に連絡してくれたところまでは礼儀正しい印象だよ
最後の「もういいよ」が投げやりな印象を与えていて
キレやすい人に引火しかねないのが玉に瑕
0693デフォルトの名無しさん
NGNGISO/IEC 14882-1998
23.3.1.2 map element access
T& operator[](const key_type& x);
Returns: (*((insert(make_pair(x, T()))).first)).second
~~~~
保証されている
0694デフォルトの名無しさん
NGNGありがとうございましす。助かりました。
というかそうか…出来る人はISO C++ 規格できっちり調べるのか。
回答内容以上に頭が下がる思いです。今後の指針にします。
0695デフォルトの名無しさん
NGNGs/ましす/ます
0696デフォルトの名無しさん
NGNGたとえばヘッダに
class a
{
static D3DXVECTOR3 m_vPosi;
static int PosiX;
{
と定義していた場合、cppファイルの先頭の辺りで
D3DXVECTOR3 a::m_vPosi.x = 5.0f;
などとするとコンパイルエラーとなるのです。
int a::m_iPosiX = 5;
などは通るのですが・・・・。まとめて
D3DXVECTOR3 a::m_vPosi = {5.0f,5.0f,5.0f};
などとするしかないのでしょうか?
0697モウモウ
NGNGD3DXVECTOR3 a::m_vPosi = { 5.0f };
でいけるはず。
0698デフォルトの名無しさん
NGNG当たり前だ。無駄な議論を避けるためにドラフトを読むのは常識。
そうでないとまた知ったか厨が余計な口出しをし出してスレが荒れるからな。
0699デフォルトの名無しさん
NGNGググって探せばないこともないけど、
正式に読もうとすると有料っていうのはちょっとね…
0700デフォルトの名無しさん
NGNGありがとうございます。
では、yだけ初期化したいときは?
0701デフォルトの名無しさん
NGNG一個古い規格だけど最低ここは読もうよ。テンプレにもあるけど。
http://www.kuzbass.ru/docs/isocpp/
0702681
NGNG681と682は他の環境ではエラーでないでしょうか?
0703デフォルトの名無しさん
NGNG内側の i が外側の i を隠蔽するだけで、文法的には何ら間違いはない。
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNG禿じゃないとC++の設計はできないらしいよ
0707デフォルトの名無しさん
NGNG0709デフォルトの名無しさん
NGNG> 家系的に私はBjarneを超えるはずです
ここに激しく同情しますな
#おれもな〜
0710デフォルトの名無しさん
NGNG生き続けるから>>681は問題があるかもしれないが、VC6が今手元に
ないので実験できない。
gccなら古いC++にするオプションがあったかもしれないが覚えてない。
0711デフォルトの名無しさん
NGNG-fno-for-scope
0712デフォルトの名無しさん
NGNG�dクス。-fno-for-scopeと-ffor-scopeの両方でgcc3.4.2('MinGW)で試してみたが
出力結果には差がありませんでした。
但しforループを完全に抜けた後で
std::cout << i << std::endl;
の一行を付け加えると、-fno-for-scopeは古いC++の動作通り 10 が出力され
ました。-ffor-scopeでは当然ですがコンパイルエラーになりました。
0713デフォルトの名無しさん
NGNG『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
0714デフォルトの名無しさん
NGNG『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
0715デフォルトの名無しさん
NGNGスレッドセーフじゃないならSTLPortに置き換えちゃおうと思うんですが。
0716デフォルトの名無しさん
NGNG宿題スレへGo!
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG最近の cppll は悪い例だったな。
0719デフォルトの名無しさん
NGNG『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
できれば、夜の7時までにお願いします。その後遊びに行きたいので。
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
夜の7時までにお願いします。今コンパ中なんで、帰ったらできてるようにな。
0722デフォルトの名無しさん
NGNG激しくむかつく奴だな
赤っ恥かいたうえ絶対に単位もらえっこないネタ用意しといてやろうか
0723デフォルトの名無しさん
NGNGネタニマジレスカコワルイ
0724デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1100530682/303
0725デフォルトの名無しさん
NGNGそいつ多分ここにもマルチしてるよ。質問の内容が同じだし。
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+18210
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNGtypedef vector<string, allocator> textwords;
以下のようにしないとエラーになるんですが、
コンパイラとGCCのSTLのどっちが正しいのでしょうか?
typedef vector<string, allocator<string> > textwords;
0728デフォルトの名無しさん
NGNG何ページの何行よ?俺も試してみるから。
0729デフォルトの名無しさん
NGNGページ数はちょっと分りませんが、chap12のprg12_2.Cです。
gcc−3.4.3で
$g++ prog12_2.C
としただけなので何かオプションが必要なの、かもしれません。
0730デフォルトの名無しさん
NGNG存在しないので、前者は明らかな間違い。誤植か、作者のミスだろう。
0731デフォルトの名無しさん
NGNG日本語版C++Primer第3版なら、P607にあるぞ。
typedef vector<string> textwords;
に直されてる。英語版の原著の間違いだろ。
0732デフォルトの名無しさん
NGNGtypedef vector<string, allocator> textwords;
を受理するためには
template <class STR, template <class X> class ALC>
class vector
{
ALC<STR> for_exsample;
};
のように定義されている必要があるな。
0733デフォルトの名無しさん
NGNG私の持ってる英語版のはP583にサンプルコードと同じように載っていました。
またGCCのSTL、bits/stl_vector.hでは
template<typename _Tp, typename _Alloc = allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
のようになっていました。
bits/allocator.hは見てみましたが>>730さんの言うとおりデフォルト
テンプレートパラメータはないようでした。
0734デフォルトの名無しさん
NGNGtemplate <class STR, template <class X> class ALC = allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
こういうテンプレートの定義はありなんですかね。
0735デフォルトの名無しさん
NGNG> template <class STR, template <class X> class ALC = allocator<_Tp> >
template <class STR, template <class X> class ALC = allocator >
ありなら、こうじゃないか
0736デフォルトの名無しさん
NGNGclass vector : protected _Vector_base<STR, ALC>
あ、こうだった。ちょっと調べてきます。
0737デフォルトの名無しさん
NGNGだ〜が〜ら〜,それ通らねえべって.allocator<STR>は型でねーが.
デンプレートデンプレートパラメーダに代入できるわけないべさ.
0738デフォルトの名無しさん
NGNGtemplate <class STR, template <class> class ALC = allocator>
class vector : protected _Vector_base<STR, ALC<STR> >
あ、こうかな!w
0739デフォルトの名無しさん
NGNGコンストラクタとデストラクタから仮想関数を呼べないなんて知らなかったよ。。。
明日会社行ったらソースを見直してみます。
0740デフォルトの名無しさん
NGNG仮想関数ってことかな?
派生クラスのコンストラクタ、デストラクタで呼ばれるのは基底クラスの
仮想関数ってことなんだよね?
ほんまかいな。
0741デフォルトの名無しさん
NGNG>厳密に言うと、呼ばれないのはオーバロードされた派生クラスの
>仮想関数ってことかな?
違う、ctor/dtorを実行中は *this へのメッセージについて virtual の効力がない
0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNG同じことを言っているように読めるが。
0745デフォルトの名無しさん
NGNGオーバーロード != オーバーライド
0746デフォルトの名無しさん
NGNGなるほど、たしかにそうだね。
ではJavaでは派生クラスのメンバ関数が呼ばれるのはどういうこと
なんだろうか。
0749デフォルトの名無しさん
NGNGJavaは猿でも出来るのが建前だから、
まったく同じはずのコードが場所によって違う振る舞いをするのは好ましくないから
そういう特別扱いはしないことにした、そうだ。
なんかJavaって仕様策定してるやつらも猿なんだなぁ。
かえって厄介な問題を内包させただけじゃん。
0750デフォルトの名無しさん
NGNG0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNGワケあって、int,float,double,boolなど、型の異なる要素の入り混じった
リスト(配列でもいいです)を実現したいのですが(・∀・)イイ!!方法はないでしょうか。
初めポリモフィズムを試したのですが、自分がやりたい事と微妙に違っていましたし、
力技でこの構造を実現しようとすると、どんどん構造やUIがブサイクになっていってしまいますた。
0753デフォルトの名無しさん
NGNGunion
0754デフォルトの名無しさん
NGNG0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNGC++を使う以上、どうしようもないよね。
0757デフォルトの名無しさん
NGNG曖昧さがもたらす混乱と決別する気はないのかよ、お前ら。
0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG与えるにはどうしたらいいの?
0761デフォルトの名無しさん
NGNG氏ね
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNG0768デフォルトの名無しさん
NGNG目次やリンクが張られたものになっているのでしょうか?
14882(1998)みたいに雑なつくりなら買いたくないので。
0769デフォルトの名無しさん
NGNG雑。
0770デフォルトの名無しさん
NGNGboost::variant
>>760
呼び返し函数の仕様による。
0771デフォルトの名無しさん
NGNGint a(0);
どうちがうんですか?
0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNGもう一つこういう書き方もOKらしい。
int a = int(0);
0774デフォルトの名無しさん
NGNG入れ替わることもあれば入れ替わらないこともあって欲しい場合にはどうすればいいのですか?
0775デフォルトの名無しさん
NGNGわかりました。
0776デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNGいや〜ん。素晴らしい!
my_random_shuffle書いてたけどそれにします
0778デフォルトの名無しさん
NGNG初めて知った。
全然ランダムになっとらんやん。
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGrand()の戻り値の最下位ビット判定でswap()するかどうか決めるんじゃ駄目なのか?
0782デフォルトの名無しさん
NGNGrand()が最下位ビットが0と1交互に出てくる乱数の場合もあるだろ…
0783デフォルトの名無しさん
NGNG「範囲 [1, last - first) 内の各 N に対して swap(*(first + N), *(first + M)) を 1 回評価します。M は、範囲 [0, N) 全体に対する一様乱分布の値とします。つまり、関数はシーケンス内の要素の順序をランダムにシャッフルします。」
なんで、要素数2なら確実に毎回交換されるだろうな。
0784デフォルトの名無しさん
NGNGフックしてメモ帳に書き込むことは可能ですか?
良ければサンプルソースなどお願いします。
0785デフォルトの名無しさん
NGNGごくふつーにライブラリのバグじゃん
やること決まってるし・・・
0786デフォルトの名無しさん
NGNG初めて聞いた。
早速ですが具体例を挙げてください。
OS名・コンパイラ名・srand()の乱数種の数値を添えてください。
できればコンパイルオプションも添えてもらいたいです。
みんな興味を持ってると思うので後学のために是非書いてください。
お願いしますよ >>782さん、期待してますんで。
0787デフォルトの名無しさん
NGNG漏れの記憶でのお話です
0788787
NGNG0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNG俺は782じゃないが、自分でググれ。
0791デフォルトの名無しさん
NGNG処理系によってはマジでそういうのがあるのよ。
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNGそれ、メモリ喰い過ぎ
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNGrand()
0796デフォルトの名無しさん
NGNGrand()が最下位ビットが0と1交互に出てくる乱数の場合もあるだろ…
0797デフォルトの名無しさん
NGNGそれってrand()の下位ビットの周期が短いって話と混同してないか?
0798デフォルトの名無しさん
NGNGVC6で_MBCSを削除し_UNICODEとUNICODEを追加してユニコード対応にしました。
LPTSTR a;
_tcscpy(a, _T("ハロー"));
このコードがビルドは通るのですが、実行するとエラーになるのです。エラー個所は_tcscpyが展開された
wchar_t * __cdecl wcscpy(wchar_t * dst, const wchar_t * src)
{
wchar_t * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
のwhile文で起こっています。どこが間違っているのか教えていただけるでしょうか。
0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNG初めて聞いた。
早速ですが具体例を挙げてください。
OS名・コンパイラ名・srand()の乱数種の数値を添えてください。
できればコンパイルオプションも添えてもらいたいです。
みんな興味を持ってると思うので後学のために是非書いてください。
お願いしますよ >>799さん、期待してますんで。
0801デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNG「何年何月何日何分何秒に!?」ってやつと同じ匂いがするよな。
0803デフォルトの名無しさん
NGNGそーゆー方面の文句ある奴は煽ってねえで削除板池
礼儀を諭しているつもりか知らんが自分が反則してることに気付よ早く
0804気付よ
NGNG0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNG・・・放置
0807デフォルトの名無しさん
NGNG現場のコーディングルールで、構造体を使う時は、必ずmemsetで初期化しなさいと言われたので、
「なんで?」って聞いたら、「常識だろ?」って怒られちった・・・。
常識のない私に理由を教えてくれる人がいるとすごくうれしいです。
0808デフォルトの名無しさん
NGNG非常識はコーディングルールにゴネたこと
0809デフォルトの名無しさん
NGNGああ、それは馬鹿がやることだ。
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNGそういえばstaticも馬鹿だな
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNG理由はこうだ。
int *a = new int
*a = 123;
delete a;
int *b = new int
cout << *b << endl;
ってやると、bが123として表示される。
つまり、単にゴミデータが残るのならまぁ許すとして、前にnewしたときに
設定したデータが、後でゴミとして残ってしまう。
このようなリスペクトなバグは排除したほうがよい。
ちなみに、問題なのはヒープ領域であって、スタック領域だと、自動的に初期化してくれるので問題なし!
0814デフォルトの名無しさん
NGNGクラスではなく int などのスカラー型の場合、標準の5.3.4節では
前者の形式では割り当てられたオブジェクトの値は不定になり、
後者の形式ではメモリは0で初期化されるということを明記している
C++プログラミングの処方箋より抜粋
つまり int *b = new int(); とすればmemsetなどは必要なし?
0815デフォルトの名無しさん
NGNG小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0816デフォルトの名無しさん
NGNG小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0817デフォルトの名無しさん
NGNG小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0818デフォルトの名無しさん
NGNG小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNGお前も人に聞く前に少しくらいググれよ、礼儀として。
0822デフォルトの名無しさん
NGNG会社で相当いじめられてるのは同情するけどさ
0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNG0825815
NGNGコピペは止めてもらえないだろうか。こちらは真面目に質問している。
具体例を挙げるべき人が荒らしているのかもしれないが、
そんな暇があったら名前を挙げてくれればよいのに。実に簡単なことだろ?
0826デフォルトの名無しさん
NGNG仲間と思われたくないし。
0827デフォルトの名無しさん
NGNG俺だったら、これが真実だとしても全然問題ないと思うんだが
0828デフォルトの名無しさん
NGNGしかしその憂さ晴らしをここでするのは勘弁してもらいたいな
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG本当に真面目に訊いてんだったらちょっとでいいからググってみれ。
それで本当に見つけれないんだったらお前、プログラマとしてちょっとヤバイぞ。
0831デフォルトの名無しさん
NGNG検索しろで済ますのならスレ自体いらんでしょ。
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNGWin2000 & BCC32の時にうまく動いてたコードをそのままコンパイルしたんだけど縞々模様が出たまま動かない。
初期化するときに(rand() % 2)を使ってるんだけど良く見てみるとrand()が奇数と偶数を交互に返してる(ぉぃぉぃ。
srand()以外になんか準備がいるんすかぁ?
0834デフォルトの名無しさん
NGNGstatic long x=1;
void srand(unsigned s) { x=s; }
long rand() { x=x*1103515245+12345; return x&2147483647; }
これは、非常にシンプルな線形合同法である。この乱数の最下位ビットは0と1の繰り返しになる。
すなわち、偶数と奇数が交互に生成される。このことから、この乱数で下位ビットを乱数として使うのは危険であることがわかる。
また、ある乱数が得られたら、次に現れる乱数が1種類しかないという欠点も持つ。
0835デフォルトの名無しさん
NGNGまったくだ
何かディープに勘違いしてる「回答者」には困ったものだな
0836デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
NGNGステップ実行時、「ほにゃららDllが見つかりません」と言われます。
とあるexeから、自分の作っているdllを呼ぶ処理です。
プロジェクトの「設定」で、とあるexeを指定して、
そのexeでファイル選択をすると、
自分のdllのソースのブレークポイントで止まってくれる予定なのですが。。。
プロジェクトの「設定」のどこかに、
関連するdllを列挙する必要って、ありましたっけ?
何が設定不足なのでしょうか?
よろしくお願いいたします。
0838デフォルトの名無しさん
NGNG我々はぁぁ!
この(類の)スレのぉぉ!
永久停止を要求するぅぅ!
0839デフォルトの名無しさん
NGNG0841デフォルトの名無しさん
NGNGスレ違い。自分が使用している開発環境の専用スレに逝け。
0842デフォルトの名無しさん
NGNG検索しても簡単にわからんことなら仕方がないが、
検索すればすぐに分かるようなことを検索するように勧めても
尚、検索しようともしない馬鹿の言い訳にはならない。
0843デフォルトの名無しさん
NGNG0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNG0846デフォルトの名無しさん
NGNGキーワードでも示してやったら? 「回答者」さん
0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNG0849デフォルトの名無しさん
NGNGめんどくさかったら軽いヒントでもいいんで
ちなみに初期数値は与えられてます。forを使うみたいですがいまいち・・・
0850デフォルトの名無しさん
NGNG0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNG数学板逝け
0853デフォルトの名無しさん
NGNG教科書嫁
0854デフォルトの名無しさん
NGNGまさか答えがわからなかったわけじゃないよな? 「回答者」さん
0855デフォルトの名無しさん
NGNG|def||rs|=ap+br+ct+dp+...+fs+iu
|ghi||tu|
0856デフォルトの名無しさん
NGNG水に落ちた犬は・・・の続きは何?
「水に落ちた犬を打つ」があるけど、それとは違うっぽいのでググッたほうがいいのかな。
0857デフォルトの名無しさん
NGNGgccで.h等をインクルード無しで使えていたread(,,)等のシステムコールがImplisitエラーを出します。
g++になってシステムコールの使用法に変化があるのでしょうか?
0858デフォルトの名無しさん
NGNG0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNG実際、そういう人もいるよ。
多分、>>846もそういう人なんだろ。
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGman readして必要なヘッダをインクルードしろ。C++では宣言無しでは関数は使えない。
0863デフォルトの名無しさん
NGNGだったらコンパイルエラーのはずだ
857 を読む限り実行時の障害のように聞こえる
0864デフォルトの名無しさん
NGNG0865デフォルトの名無しさん
NGNGコンパイルエラーのメッセージテキストには implicit なる語は出てこないだろ
0866デフォルトの名無しさん
NGNG出るよ
0867デフォルトの名無しさん
NGNGコンパイルエラーです。
文字と>>862さんから推察するとgccでは暗黙の宣言として使っていたのが
g++では使えなくなったということですね。
方法を探してみます。ありがとう御座いました。
0868デフォルトの名無しさん
NGNGtest01.cpp: In function `int main()':
test01.cpp:3: error: `read' undeclared (first use this function)
test01.cpp:3: error: (Each undeclared identifier is reported only once for each
function it appears in.)
0869デフォルトの名無しさん
NGNGg++というよりc++でだよ
0870デフォルトの名無しさん
NGNG#include <unistd.h> が必要でした。
皆さんありがとう御座いました。
0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNGstd::sortは使えないし
0873デフォルトの名無しさん
NGNGstd::list::sort()ってメンバ関数はマージソート(安定ソート)だがなかなか速い。
O記法によるオーダもO(NlogN)でクイック・ソートと同じだし。但し平均的な
コンピュータのアーキテクチャではクイック・ソートの1/2程度の速度になる。
0874782
NGNG0875デフォルトの名無しさん
NGNGBase が先に初期化されるのか、どちらでしょうか?
class Hoge : Base {
Foo foo;
public:
Hoge(void) : foo(100), Base(&foo) {}
};
0876デフォルトの名無しさん
NGNGFooとBaseのコンストラクタにプローブ入れて試せば?
0877デフォルトの名無しさん
NGNGコンストラクタ
ベース→メンバ(宣言した順)→自身
デストラクタ
自身→メンバ(宣言と逆順)→基底
0878デフォルトの名無しさん
NGNGそれは不便ですねぇ。。。
0879デフォルトの名無しさん
NGNG0880デフォルトの名無しさん
NGNGBase のコンストラクタは FooBase* なら何でもとるのです。
Base のコンストラクタで FooBase の関数を呼び出したいのです。
0881デフォルトの名無しさん
NGNG設計見直せ
0882デフォルトの名無しさん
NGNGありがとう。見直してみます。
だけど、C++ ってここらへんがぎこちないですね。
初期化リストの記述順に初期化してくれればいいのに。。。
0883デフォルトの名無しさん
NGNGよく考えろボケ
0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNG0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNG0888デフォルトの名無しさん
NGNG// int から int への関数のキャッシュを行うクラス。
class Cache {
public:
typedef int (*Func)(int n);
private:
map<int,int> _map;
Func _func;
public:
Cache(Func func) : _func(func) {}
int Get(int n)
{
int result;
map<int,int>::const_iterator it = _map.find(n);
if (it == _map.end()) {
result = _func(n);
_map.insert(map<int,int>::value_type(n, result));
}
else {
result = (*it).second;
}
return result;
}
};
0889デフォルトの名無しさん
NGNGprivate:
Cache _cache;
static int Plus1(int n) { return n + 1; }
public:
SomeFunc(void) : _cache(Plus1)
{}
int Get(int n)
{
return _cache.Get(n);
}
};
0890デフォルトの名無しさん
NGNGメンバ関数とするにはどうしたらよいでしょうか?
よろしくお願いします。
0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNGtemplate <typename T>
class Cache {
public:
typedef int (T::*Func)(int);
private:
map<int,int> _map;
T *obj_;
Func _func;
public:
Cache(T *obj, Func func) : obj_ (obj), _func(func) {}
int Get(int n) {
int result;
map<int,int>::const_iterator it = _map.find(n);
if (it == _map.end()) {
result = (obj_->*_func)(n);
_map.insert(map<int,int>::value_type(n, result));
} else {
result = (*it).second;
}
return result;
}
};
class SomeFunc {
private:
Cache <SomeFunc> _cache;
int Plus1(int n) { return n + 1; }
public:
SomeFunc(void) : _cache(this, &SomeFunc::Plus1) {}
int Get(int n) {return _cache.Get(n);}
};
0893デフォルトの名無しさん
NGNGCacheをテンプレートクラスにすれば
0894デフォルトの名無しさん
NGNG>>891
ごめんなさい、boost はできるだけ使いたくないんです。。。
同じようなことを手動でやれればいいのですが。
>>892 >>893
やっぱりテンプレート使わないといかんですか。うーん。
0895デフォルトの名無しさん
NGNG継承使ってできそうな気がしなくもない
0896デフォルトの名無しさん
NGNGSomeFunc はすでに別のクラスから派生しているんです (多重継承はあまりしたくない)。
それに Cache という機能単位を継承で使うのはよい設計ではないように
思いますが、いかがでしょうか。
0897デフォルトの名無しさん
NGNG>それに Cache という機能単位を継承で使うのはよい設計ではないように
>思いますが、いかがでしょうか。
まそうだろうね
boostとかテンプレートとか躊躇してるのは何で?
0898デフォルトの名無しさん
NGNGテンプレートにいい思い出がないのが一番の理由です。
今 VC6 を使っているんですけど、
テンプレートの一部の機能が使えなかったり、
複雑になるとバグが発生したりして、
使いすぎると生産性が確実に低下するように思います。
あと、できるだけ外部のライブラリに依存したくないという意味で
boost は使いたくないわけです。
0899デフォルトの名無しさん
NGNG>できるだけ外部のライブラリに依存したくない
この方針があなたの決断によるものなら考え直した方がいいと思いますよ
これじゃライブラリの立つ瀬が無いですからね
0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNG例えば
class Hoge {...];
void foo() {
static Hoge hage;
}
というのがあって、複数のスレッドがfooを同時に呼び出した場合
hageの初期化は同期されるのでしょうか?
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGC++の規格ではマルチスレッドのことは考えてないので、環境によります。
0906デフォルトの名無しさん
NGNGMeyersのSingletonはマルチスレッドでは使えない
0907デフォルトの名無しさん
NGNG感心した
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG感心した
0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNG感心した
とでも言ってもらいたいのか?
0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGその中の最頻値を取り出したいとします。
このような処理を STL を使って完結に表現することはできるでしょうか?
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNG0916デフォルトの名無しさん
NGNG誰か教えてくれるでしょう。
0917デフォルトの名無しさん
NGNG漫然と>>8を眺めてみたのですが、いまいち見つかりませんで
DirectXの物は中々使い心地が良いのですが、DirectXが使えない環境になりそうで困っています
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG1、2時間でできるんでは?
0920デフォルトの名無しさん
NGNGBLAS…というかnumericの所しか見てなかったですよ
boost凄いなぁ…ありがとうございました、勇んでいじってみます
0921デフォルトの名無しさん
NGNGまぁ、実際そうで、私も自前(と言ってもほぼとあるオープンソースのパクリ)のはあるのですが
自前だとまずい部分が色々とあったりで…boost情報助かりました
0922デフォルトの名無しさん
NGNGあいよっ
template <typename T, template <typename> class Container> inline
pair <T, size_t> mode_count (const Container <T> &p) {
typedef std::map <T, size_t> Counter_Register;
Counter_Register counter_register;
for (typename Container <T>::const_iterator itr (p.begin ()), last (p.end ());
itr != last; ++ itr) ++ counter_register [*itr];
struct Local {
typedef typename Counter_Register::value_type Value_Type;
static bool less_by_second (const Value_Type &lhs, const Value_Type &rhs) {return lhs.second < rhs.second;}
};
return *max_element (counter_register.begin (), counter_register.end (), &Local::less_by_second);
}
template <typename T, template <typename> class Container> inline
T mode (const Container <T> &p) {
return mode_count (p).first;
}
もっとエレガントなのは誰か教えてくれるでしょう。
0924デフォルトの名無しさん
NGNG>template <typename T, template <typename> class Container> inline
template templateパラメータはテンプレートパラメータの数がデフォルトも全部展開した
数に一致して無いといけないので,STLのシーケンスを取るならパラメータ2つ要りますよ.
あとTはContainer::value_typeで取れるから結局コンテナの型をパラメータにするのが
妥当だと思うんですけどね.
template<typename Container>
細かいツッコミ失礼.ちなみに自分ならiteratorを引数にしたいかも.
0925デフォルトの名無しさん
NGNGLocal::less_by_secondはローカルだけどテンプレート引数に出来るの?
0926デフォルトの名無しさん
NGNGやっぱ修正するのはオイラかい?
template <typename Iterator> inline
pair <typename Iterator::value_type, size_t> mode_count (Iterator first, Iterator last) {
typedef typename Iterator::value_type Value_Type;
typedef std::map <Value_Type, size_t> Counter_Register;
Counter_Register counter_register;
for (; first != last; ++ first) ++ counter_register [*first];
struct Local {
typedef typename Counter_Register::value_type Value_Type;
static bool less_by_second (const Value_Type &lhs, const Value_Type &rhs) {return lhs.second < rhs.second;}
};
return *max_element (counter_register.begin (), counter_register.end (), &Local::less_by_second);
}
template <typename Iterator> inline
typename Iterator::value_type mode (Iterator first, Iterator last) {
return mode_count (first, last).first;
}
template <typename Container> inline
pair <typename Container::value_type, size_t> mode_count (const Container &p) {
return mode_count (p.begin (), p.end ());
}
template <typename Container> inline
typename Container::value_type mode (const Container &p) {
return mode (p.begin (), p.end ());
}
もっといいアルゴリズムはないの?
0927922 == 926
NGNGg++(3.3.4)だと通るんだけどまづいっけ?
>>924
それと言い忘れたありがとう
925も
0928デフォルトの名無しさん
NGNGローカルクラスがテンプレート引数に出来ない問題との違いは,
型が外部リンケージを持っているかどうか.
Local::less_by_secondの型はbool (*)(Value_Type const &, Vlue_Type const &)で,
これは外部リンケージを持った型なのでテンプレート引数に出来るはず.
0929デフォルトの名無しさん
NGNGで、この変数にabc又はABCが入っていることをエレガントに確認するにはどうしたらよいでしょうか?
(つまり、小文字、大文字意識せずに、findしたいってことです)
0930デフォルトの名無しさん
NGNG私はいつも stricmp(str.c_str(), "abc") しているけど、C++ 的にはどうやるんかな。
0931デフォルトの名無しさん
NGNG>>929をよく読むこと。
0932デフォルトの名無しさん
NGNG面倒なのでboost::regex
0933デフォルトの名無しさん
NGNGもっとメンバ関数充実させてほしい。
0934デフォルトの名無しさん
NGNG0935デフォルトの名無しさん
NGNGうん、激しく同意。
俺が思うに、これは何かの陰謀が働いていると思う。
0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNG0938モウモウ
NGNG一応こんなんでできるけど。
struct CharEqualIC {
inline bool operator() (char c1, char c2)
{
return (toupper(c1) == toupper(c2));
}
};
int main(void)
{
string str1 = "xxxx Abc xxxx";
string str2 = "abc";
string::iterator it = search(str1.begin(), str1.end(), str2.begin(), str2.end(), CharEqualIC());
cout << (it - str1.begin());
return 0;
}
0939デフォルトの名無しさん
NGNG汚物
0940デフォルトの名無しさん
NGNGstd::string str = "fgafjkAbCasln;tj";
std::cout << boost::algorithm::ifind_first(str, "abc").begin() - str.begin() << std::endl;
// 6が出力される。
std::string str = "fgafjkasln;tj";
std::cout << boost::algorithm::ifind_first(str, "abc").begin() - str.begin() << std::endl;
// 13が出力される。すなわちboost::algorithm::ifind_first(str, "abc").begin()==str.end()
0941デフォルトの名無しさん
NGNGstd::mismatch 使って頑張れ
Effective STL の35項も参考になる。
0942デフォルトの名無しさん
NGNGIterator::value_type ではポインタを渡したときにエラーになる
※入力シーケンスは空でないという事前条件が必要
template<typename Iterator>
std::pair<typename std::iterator_traits<Iterator>::value_type, std::size_t> mode_count(Iterator first, Iterator last)
{
typedef typename std::iterator_traits<Iterator>::value_type value_type;
typedef std::pair<value_type, std::size_t> result_type;
std::map<value_type, std::size_t> counts;
result_type const* max = 0;
for(; first != last; ++first)
{
result_type& counted = counts[*first];
++counted.second;
if(!max || counted.second > max->second)
max = &counted;
}
return *max;
}
0943デフォルトの名無しさん
NGNGextern XXX get_value();
const XXX& xxx = get_value();
テンポラリへの参照になってしまうんでしょうか?
最適化をするとおかしくなってしまうようなんです
0944デフォルトの名無しさん
NGNGクラスのインスタンスのデータメンバや静的データメンバ、
関数の静的変数、大域変数、静的変数を返したいときは、
const参照を返してもだいじょうぶ。
const参照を返したら駄目なのは関数内のローカル変数。
0945デフォルトの名無しさん
NGNGあー、その場合の寿命ってどうなるんだろうな。
規格書読まなきゃわかんないな。
でもこのケースだったら無難に
const XXX xxx = get_value();
でいいんじゃないの。
0946デフォルトの名無しさん
NGNGテンポラリに決まってんだろ
禿本くらい読め
0947デフォルトの名無しさん
NGNGその関数の戻り値であるところのテンポラリは,規格としては
const参照のlife-timeまで寿命が延びる(12.2/5)ので大丈夫なはずです.
http://www.kuzbass.ru:8086/docs/isocpp/special.html#class.temporary
なので,
>最適化をするとおかしくなってしまうようなんです
というのはプログラムがおかしいかコンパイラが規格に準拠していないか・・・.
で,結論としては945さんに同意.
>944
多分文脈を読み間違えているかと.
0948デフォルトの名無しさん
NGNGinline Container makeContainer(const T& t)
{ return Container(boost::begin(t), boost::end(t)); }
typedef std::vector<char> CharVec;
const char* p = "Hello, world";
CharVec c(makeContainer<CharVec>(p));
これがコンパイル通らないんですが仕様でしょうか…?
makeContainer(T& t) にすると大丈夫なんですが…
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNGboost::begin/endがchar const * constに対応してないのが原因.
というか,そういうことがしたいなら以下で良いのでは?
CharVec c(boost::begin(p), boost::end(p));
0951デフォルトの名無しさん
NGNG追記.char (const) * constはRangeのモデルにならないです.
動かせないポインタ渡されて'\0'探せって言われても困るでしょ.
もし,その枠組みでやるなら以下か
CharVec c(makeContainer<CharVec>(boost::make_iterator_range(p)));
もしくはmakeContainerをchar (const) *について特殊化するか,かな.
0952951
NGNG+もしくはmakeContainerをchar const *についてオーバーロードするか,かな.
0953デフォルトの名無しさん
NGNG> 動かせないポインタ渡されて'\0'探せって言われても困るでしょ.
ポインタをコピーすれば困らないよ。
range側の特殊化が抜けてるだけじゃないの?
0954デフォルトの名無しさん
NGNGstruct ClassV{
int val;
std::vector<int> vecInt;
};
int main(int argc, char* argv[]){
std::vector<ClassV> vecClassV;
vecClassV.reserve( 5 ); //resizeならBもerrorにならない
for( int i=0; i < 5; ++i ){
vecClassV[i].val = 4649; //errorが出ない …A
}
for( int c=0; c < 5; ++c ){
vecClassV[c].vecInt.reserve(10); //error …B
}
return 0;
}
お願いします、上記のコードなのですが、
恐ろしいことに今までreserveを使いAみたいな事をしていました。
しかしBのようにコンテナを使わない限り、今までの所、特に困ったこともありませんでした。
全て書き直す前にお尋ねしたいのですが、Aが上手くいっていたのは偶然なのでしょうか?
0955デフォルトの名無しさん
NGNG領域自体は確保済みなので一般保護例外などはでないだろうが、vector内部の管理情報は壊れていても不思議ではない。
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGstd::vector<boost::shared_ptr<Foo> >::iterator i
= std::find_if( hoge.begin(), hoge.end(),boost::bind( &Foo::operator==, _1, foo ) );
としたいのです
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNG問題なさそうに見えるが、Foo か operator== のどちらかがテンプレート引数を必要としたりオーバーロードで曖昧になってたりしないか?
0961デフォルトの名無しさん
NGNGやっぱりそうなんですかねぇ.
>958
それだとshared_ptr<Foo>のoperator==を呼ぼうとしますよ.
indirect_iterator使って
vector<shared_ptr<Foo> >::iterator i
= find_if(make_indirect_iterator(hoge.begin()),
make_indirect_iterator(hoge.end()),
bind(&foo::operator==, _1, foo3) ).base();
とか,lambda使って
vector<shared_ptr<foo> >::iterator i
= find_if(hoge.begin(), hoge.end(), bind(&foo::operator==, *_1, foo3));
とか(このbindはlambdaのbind).というか普通にfindで良いんじゃ・・・.
0962958
NGNGそれだとshared_ptrの==が使われてしまい意図したものではありません。
>>960
おっしゃるとおりでコンパイラは”関数の引数があいまいなためテンプレート引数を減少できません。”といっていました。
Fooのoperator==をFooだけでなくstd::stringでも比較できるようにしていました。
オーバーロードしないようにすればコンパイルできましたが、引数からoperator==を選択してくれないのでしょうか?
bind<・・・>に型を指定してやれば解決するかと思いましたが私にはむりでした。
今はとりあえずforループを回しております。
0963デフォルトの名無しさん
NGNGええと、しょうしょう混乱しておりますが。
>それだとshared_ptr<Foo>のoperator==を呼ぼうとしますよ.
というのは>>959さん宛てですかね?
ちがったりして。
ndirect_iteratorは知りませんでした。調べてみます。
0964デフォルトの名無しさん
NGNGオーバーロードされた関数へのポインタを取る場合,
ポインタを取った瞬間にどのオーバーロードへのポインタなのかを
指定してやる必要があります.そのまま汎用関数の引数にすることは出来ません.
典型的にはキャストを使うか
static_cast<bool (Foo::*)(Foo const &) const>(&Foo::operator==)
一旦メンバポインタ変数に代入してから使います.
bool (Foo::*pmf)(Foo const &) const = &Foo::operator==
上のシグネチャはただの例なので実際のoperator==のシグネチャに読み替えて下さい.
・・・っていうか,lambdaが一番楽だと思いますよ.
vector<shared_ptr<foo> >::iterator i
= find_if(hoge.begin(), hoge.end(), *_1 == foo);
0965デフォルトの名無しさん
NGNGおっと,ごめんなさい.961はboost::lambda::bindの話です.忘れてください.
#shared_ptrに対する挙動がboost::bindとboost::lambda::bindで違う・・・.
0966デフォルトの名無しさん
NGNG閑散としているスレが増えて来ましたので
再編を提案します
http://pc5.2ch.net/test/read.cgi/tech/1101384692/
現状でC++関連は
【C++】template 統合スレ
【C++】STL(Standard Template Library)相談室
BOOSTを語れゴラァ
C++相談室 part37
とありますがこれらは
標準C++相談室【STL含む】
C++テンプレート相談室【Boost/Loki】
の2本に統合でいいように思います
どうでしょうか? 異論がなければ
ここの次スレの名前は標準C++相談室【STL含む】
でいきましょう
0967デフォルトの名無しさん
NGNGSTLとかBoostとか関係なく、
ベストな方法を知りたい、みたいな質問をしたい時はどこ?
0968デフォルトの名無しさん
NGNGありごとうございます。
boost以前の問題でしたね。もっと勉強します。
lambdaはうちのコンパイラが使うな(えない)というもので。。。
0969デフォルトの名無しさん
NGNGそういのはここ(と後継のスレ)でいいのではないでしょうか?
話長くなりそうだったら専門スレに誘導してそこで続けていただくといいと思います
0970デフォルトの名無しさん
NGNG名前は短い方がいい
余計なものくっつけるな
0971デフォルトの名無しさん
NGNGここで聞くと解決するまえにスレ終りそうだから、
新スレ立ててそこで質問しちくり。
0972デフォルトの名無しさん
NGNGくっつけないと重複スレが立つんだよ。
0973デフォルトの名無しさん
NGNGどこに質問したっていいって気分。
0974デフォルトの名無しさん
NGNG>lambdaはうちのコンパイラが使うな(えない)というもので。。。
相手の環境を考慮してなかったです.本当に申し訳ない.
0975デフォルトの名無しさん
NGNGISO/IEC14882で定義される範囲は「C++」でしかねえよな
STLだのtemplateだのと断片だけのスレは重複もいいとこ
つーと、残れるのはboostくらいか
0976デフォルトの名無しさん
NGNGC++相談室 part38
http://pc5.2ch.net/test/read.cgi/tech/1101473340/l50
0977デフォルトの名無しさん
NGNG0978v(^・^)v
NGNGとかいうエラーが出るんだけどこれってどうすればいいの?
0979v(^・^)v
NGNGとかいうエラーが出るんだけどこれってどうすればいいの?
0980デフォルトの名無しさん
NGNG#include "stdafx.h"
みたいにプリコンパイル済みヘッダーをインクルードするか、
ファイルの設定でプリコンパイル済みヘッダーを使わないように設定する。
0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG↑○○○を埋めて。
0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNGヘタレ
0994デフォルトの名無しさん
NGNGそくど
0995デフォルトの名無しさん
NGNGおなか
0996デフォルトの名無しさん
NGNGこしけ
0997デフォルトの名無しさん
NGNG肥満度
099810000000!!!!!!!!!!
NGNG0999デフォルトの名無しさん
NGNG1000一億
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。