■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part8
751
名前:
デフォルトの名無しさん
:02/07/13 15:35
ostringstream() << 〜ってできないよ
752
名前:
デフォルトの名無しさん
:02/07/13 15:36
>>750
不具合じゃないよ
パフォーマンスを上げるために一部をプールしてるだけ。
753
名前:
デフォルトの名無しさん
:02/07/13 15:49
そうだったんだ。でも何時の間にかリークしてるっていうのは嫌だな。
754
名前:
デフォルトの名無しさん
:02/07/13 15:51
>>753
リークはリークだけど、どれだけ運用してもリーク量は増加しないよ
755
名前:
デフォルトの名無しさん
:02/07/13 15:59
「プール」は「リーク」じゃない
と、Effective C++に書いてありますが
756
名前:
デフォルトの名無しさん
:02/07/13 16:00
>>750
sgiからおとしたほうも同じく起こります。
>>754
ってことはこのリークは気にしなくてもいいのですかな?
757
名前:
デフォルトの名無しさん
:02/07/13 16:00
リークとは、それを指すポインタが失われて、解放する手段がなくなった
時。
758
名前:
デフォルトの名無しさん
:02/07/13 16:16
>>730
,748
これでどう?
#include <iostream>
#include <sstream>
using namespace std;
class ErrorMessage {
ostringstream os;
public:
ErrorMessage( const char *file, int line ) {
os << file << "(" << line << "): ";
}
template<class T>
ErrorMessage& operator+( T x ) {
os << x;
return *this;
}
operator const string () const {
return os.str();
}
};
void foo( const string& s )
{
cout << s << endl;
}
int main()
{
int a = 10;
char b[] = "hogehoge";
foo( ErrorMessage(__FILE__, __LINE__) + "HOGE(" + a + ") " + b);
return 0;
}
759
名前:
デフォルトの名無しさん
:02/07/13 16:26
>>758
(・∀・)カコイイ!!
760
名前:
デフォルトの名無しさん
:02/07/13 16:32
カコワルイ
std::string(__FILE__) + __LINE__ + "HOGE(" + lexical_cast<string>(a) + ")" + lexical_cast<string>(b);
761
名前:
デフォルトの名無しさん
:02/07/13 16:47
>>757
(・∀・)イイ!!
762
名前:
デフォルトの名無しさん
:02/07/13 17:25
>>760
を見てまたC++が俺の知らない間にトランスフォームしちまったのかと
焦った。Boostかあ、ちょっと見てみるかなあ。
763
名前:
デフォルトの名無しさん
:02/07/13 19:42
>>760
それだけ見ると lexical_cast って、あまり使い勝手よいとは
思えないんだが、どういうインタフェースなの?
764
名前:
デフォルトの名無しさん
:02/07/13 19:58
int a = lexical_cast<int>("100");
int b = lexical_cast<int>(a);
float c = lexical_cast<float>("1.234");
std::string d = lexical_cast<std::string>(a);
こんな感じで。
765
名前:
デフォルトの名無しさん
:02/07/13 19:58
>>763
10行程度だからソース見れ。
http://www.boost.org/boost/lexical_cast.hpp
766
名前:
デフォルトの名無しさん
:02/07/13 20:24
たとえは、"%04d"とか、書式使うには
int n = 10;
ostringstream os;
os << "id(" << setw(4) << setfill('0') << n;
ってやるしかないんじゃないの?
767
名前:
デフォルトの名無しさん
:02/07/13 20:47
os.width(4);
os.fill('0');
768
名前:
デフォルトの名無しさん
:02/07/13 20:50
スマタ。ostringstreamか
769
名前:
デフォルトの名無しさん
:02/07/13 20:50
printfの方がいいな。
770
名前:
デフォルトの名無しさん
:02/07/13 20:52
つまり、
>>758
の方法では、
>>730
のやりたい事を完全に置き換えられないmmじゃない?
771
名前:
デフォルトの名無しさん
:02/07/13 20:53
os << setwidth(4) << setfill('0') << n;
772
名前:
デフォルトの名無しさん
:02/07/13 20:57
STLも改訂してCの書式出力をサポートしてくんないかな・・
773
名前:
デフォルトの名無しさん
:02/07/13 21:02
>>772
自作の道がある。
774
名前:
デフォルトの名無しさん
:02/07/13 21:03
>>771
は間違いですから無視してくださいスマソ。
775
名前:
デフォルトの名無しさん
:02/07/13 21:14
>>756
STLport が STL コンテナで使ってる node allocator の仕様だ。
いやなら _STLP_MALLOC_ALLOC (だったかな? マニュアル参照してくれ)
あたりのマクロを定義すると、node allocator 使わずに malloc / free するよ
うになるから、その手のリークチェッカに引っかからなくなる。
ただし、致命的にパフォーマンスが落ちるから、リリースビルドでは標準の
アロケータを使った方が良いと思う。
776
名前:
デフォルトの名無しさん
:02/07/13 21:14
やっぱり
>>730
の方法が一番シンプルで良いと思う
777
名前:
デフォルトの名無しさん
:02/07/13 21:18
>>770
#include <iomanip>
して、771 のように
ErrorMessage() + "setw(4) + setfill('0') + n;
でいける。
778
名前:
デフォルトの名無しさん
:02/07/13 21:21
そんなわけわからん記述してまで・・
>730
がシンプルでいいじゃん。
779
名前:
デフォルトの名無しさん
:02/07/13 21:30
まあまあ、半分ネタと思いつつやってるんだから (w
で、オレとしては、setfmt みたいなマニピュレータを定義して、
os << setfmt("04d")
とかだったら、
os.width(4);
os.fill('0');
とやってくれるようなのを作ればいいんじゃないかと。
780
名前:
16メロミックス
◆/ECTibn.
:02/07/13 21:45
パンピーより質問です。
日韓翻訳掲示板を作りたいのですが、
協力してもらう事は可能でしょうか?
781
名前:
デフォルトの名無しさん
:02/07/13 21:52
ここは技術板で、制作板じゃない
782
名前:
16メロミックス
◆/ECTibn.
:02/07/13 21:55
>>781
スマソ
783
名前:
デフォルトの名無しさん
:02/07/13 22:02
exit();で終了するとメモリーリークが起きました。
exitの代わりになる物はないですか?
784
名前:
デフォルトの名無しさん
:02/07/13 22:03
終了時のメモリリークは気にするな
リソースリークは気にしないとだめだが
785
名前:
デフォルトの名無しさん
:02/07/13 22:47
>784
どうも。ってことは代替物はない?
メモリーリークはどうも気持ち悪くて・・
786
名前:
デフォルトの名無しさん
:02/07/13 23:13
それを潰してもプログラムの性能も安定性もまったく向上しないと思うが...
787
名前:
デフォルトの名無しさん
:02/07/13 23:15
windowsはリソースへっていかないの?
788
名前:
デフォルトの名無しさん
:02/07/13 23:15
終了時の無駄な解法の分だけパフォーマンスが落ちるね
789
名前:
デフォルトの名無しさん
:02/07/13 23:17
ちゃんと80-20の法則守れよな。
790
名前:
デフォルトの名無しさん
:02/07/13 23:18
>789
なんすか?それ
791
名前:
デフォルトの名無しさん
:02/07/13 23:19
>>790
お前知らないのか??
バカだな〜
792
名前:
デフォルトの名無しさん
:02/07/13 23:22
どうでもいいよ。
793
名前:
デフォルトの名無しさん
:02/07/13 23:26
>>791
おまえ知ってるっちうか実行してるのか?
バカだな〜
794
名前:
デフォルトの名無しさん
:02/07/13 23:29
仕方ねえな教えてやるよ
80才まで20本の歯を保とうだぞ?
世間の常識だから覚えとけよ。
795
名前:
デフォルトの名無しさん
:02/07/13 23:31
>>793
俺は0-100だ。
たとえ重要じゃないところでもみっともないコードは残せない
796
名前:
デフォルトの名無しさん
:02/07/13 23:32
Windowsの場合プロセス終了してもメモリ解放してくれないんじゃなかったっけ?
797
名前:
デフォルトの名無しさん
:02/07/13 23:34
>>795
えーと、あれだな。
たとえスライム一匹でもフルパワーを持って倒しに行くタイプ。
798
名前:
デフォルトの名無しさん
:02/07/13 23:35
スライムが居るので議論が進みません。
799
名前:
デフォルトの名無しさん
:02/07/13 23:37
0-100 ではないがスライムに対しては全力で挑む。
800
名前:
デフォルトの名無しさん
:02/07/13 23:44
スライムはほっといてメモリーリークはどうしますか?
全部潰す派ですか?
801
名前:
デフォルトの名無しさん
:02/07/13 23:44
>>796
んなこたぁない。
解放されないのはリソース。
802
名前:
デフォルトの名無しさん
:02/07/13 23:44
リークが怖いヤシはassert入れるなよ
803
名前:
デフォルトの名無しさん
:02/07/13 23:46
解放忘れさえしてなければリークは気にしない派。
804
名前:
デフォルトの名無しさん
:02/07/13 23:48
win32ならリソースも解放されるよ・・・
805
名前:
デフォルトの名無しさん
:02/07/13 23:51
じゃあ終了時のメモリリークはバグじゃないって事でいいですね?
806
名前:
デフォルトの名無しさん
:02/07/13 23:55
>>804
9x系でDCにオブジェクトを選択したままプロセスが死ぬと
GDIリソースは解放されません。
807
名前:
デフォルトの名無しさん
:02/07/14 09:14
>>806
「9x系で」ってことは、OSのバグってことでいいですね?
808
名前:
デフォルトの名無しさん
:02/07/14 09:23
メモリリークは命がけで怪傑汁
809
名前:
デフォルトの名無しさん
:02/07/14 09:33
>>807
バグじゃなくて仕様だって。
気に入らない動作=すべてバグ って厨房じゃないんだから。
810
名前:
デフォルトの名無しさん
:02/07/14 14:45
全て仕様ってことで押し通す気ですね:-)
811
名前:
デフォルトの名無しさん
:02/07/14 17:20
numeric_limits の max/min が関数になってるのは何故ですか?
812
名前:
デフォルトの名無しさん
:02/07/14 18:27
浮動小数点型とかだと、is_bound というメンバが true じゃないと
max/min が裕子にならないから、みたいだよ。
813
名前:
811
:02/07/14 19:08
>>812
その理由だと、 digits も関数になってるはず。
やっぱりわからん。
814
名前:
デフォルトの名無しさん
:02/07/14 19:34
データメンバだと値を設定しないといけないじゃない
815
名前:
812
:02/07/14 19:58
そうか、整数型以外はクラス定義での static const な変数の
初期化はできなかったね。
816
名前:
811
:02/07/14 20:14
>>815
あー。それですな、きっと。理解しました。
ありがと。
>>812
,
>>814
817
名前:
デフォルトの名無しさん
:02/07/14 20:21
static でメンバ関数を宣言した時とそうでない場合の違いを教えてください。
static 関数で定義された関数を class :: 関数 で呼び出す時、
一時的にクラスは作成されるのか教えてください。
818
名前:
デフォルトの名無しさん
:02/07/14 20:28
呼ばれるときにthisが漏れなく付いてくる(非static)か、
付いてこない(static)か。
819
名前:
プログラマ・ペレ
:02/07/14 20:30
>>817
C++ third editionを買ってください。
私ならそうします。
820
名前:
デフォルトの名無しさん
:02/07/14 20:33
C++ は他のオブジェクト指向言語とは違い、動的にクラスを生成したり
することはできない。クラスはコンパイル時に静的に生成される。
821
名前:
817
:02/07/14 20:36
>>818
〜820
速レスさんくす
822
名前:
デフォルトの名無しさん
:02/07/14 20:37
Javaも動的にクラスを生成できないが?
823
名前:
デフォルトの名無しさん
:02/07/14 21:37
たしか BSF 使えばできるよ。
824
名前:
デフォルトの名無しさん
:02/07/14 21:50
BSFって?
825
名前:
デフォルトの名無しさん
:02/07/14 23:34
Binary Sex Fucking
(両性どちらとでもOKです)
826
名前:
◆JAPH9PWA
:02/07/14 23:38
numeric_limits<>は全部関数だったらいいのに、と思ってしまうのは俺だけだろうか。
static constと入り混じってわかり難いよ…。
827
名前:
デフォルトの名無しさん
:02/07/15 01:54
さっき発見したんだけど、C++ではifのなかで変数宣言できるんだね。
こりゃ便利。
828
名前:
デフォルトの名無しさん
:02/07/15 03:00
>>827
式が書ける所ならどこでも宣言できる。
829
名前:
デフォルトの名無しさん
:02/07/15 08:11
>>828
Test(class : public Base{}());とか出来ればいいのになぁ…。
830
名前:
デフォルトの名無しさん
:02/07/15 08:32
C++ではポインタはあまり使わずに参照をしたほうが良いのですか?
831
名前:
デフォルトの名無しさん
:02/07/15 09:08
>>830
場合による。
832
名前:
デフォルトの名無しさん
:02/07/15 09:10
>>830
正直、勉強不足。
833
名前:
デフォルトの名無しさん
:02/07/15 09:42
たかぎのMM (C++講座)
http://www.melonpan.net/melonpa/mag-detail.php?mag_id=000211
ここの人がそういってます。
C++の特徴を始めのほうで羅列しておりますがめちゃくちゃのような気がします。
ほとんど間違っていると思うのですがどうでしょうか?
834
名前:
デフォルトの名無しさん
:02/07/15 09:45
↑このメールマガジンは参考になりますか?
835
名前:
デフォルトの名無しさん
:02/07/15 11:15
>>827
,828
でも、
if (int i = foo())
みたいに代入式しか書けないよね?
if ((int i = foo()) == 2)
みたいに条件判断も書けるといいんだけど。
836
名前:
デフォルトの名無しさん
:02/07/15 12:39
プログラム言語で信じられるのはANSI/ISOとかのドキュメン
トと有名図書ぐらいでそれ以外の解説ははっきりいって役に
立たない。役に立たないどころか有害でさえある。
837
名前:
デフォルトの名無しさん
:02/07/15 14:44
K&Rっていう遺物は有害だな。
838
名前:
デフォルトの名無しさん
:02/07/15 20:04
cygwinのgccでc++プログラムコンパイルしたら
テンプレートの定義が見つからないのかなんなのかやたらエラーがでました。
設定に問題があるのかサポート外なのか。。どっちですか?
839
名前:
デフォルトの名無しさん
:02/07/15 20:09
バージョンは?
840
名前:
デフォルトの名無しさん
:02/07/15 20:13
すんません。
自分で書いててあれ?gccだっけ
と思いg++でやったらできますた。。
841
名前:
デフォルトの名無しさん
:02/07/15 21:04
あのう 自分forにつかうiとかjも事前に、
int i,j;
というふうにしとるんですけども。
やっぱりだめどすかね。
すまあとじゃねえどすかいね。
842
名前:
デフォルトの名無しさん
:02/07/15 21:11
変数のスコープは最小限にしませう。
843
名前:
デフォルトの名無しさん
:02/07/15 21:29
for内でi宣言すると
forからでたら、i無くなっちゃうんどすか?
初心者でスマソ
844
名前:
デフォルトの名無しさん
:02/07/15 21:33
>>843
最近はそのとおり。昔は違った。
845
名前:
843
:02/07/15 21:36
844…あうーサンクスコですー
そうか最近は消えるのか…やっぱり年はとりたくないもんだなーって
それくらい実験すればわかったな…
なんでもきいてスマソ
846
名前:
デフォルトの名無しさん
:02/07/15 21:37
いいんじゃない?相談室だし。
847
名前:
843
:02/07/15 21:48
#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<2;i++){
for(int i=3;i
>0
;i--){
cout <<"ahhhh\n";
}
}
}
あーうーほんとだーうごいたー なるー さんくすこ
int j;がいらなくなった!
あれ?前段のiを後段で呼び出すのはどうすればいいんだ?
848
名前:
デフォルトの名無しさん
:02/07/15 21:52
>>847
普通そんなこと考えない
849
名前:
843
:02/07/15 21:53
848
ごもっとも!
850
名前:
848
:02/07/15 21:54
俺は遊ばれたのですか?
851
名前:
843
:02/07/15 21:56
いやー方法あるなら聞きたいと思っただけです
遊んでおりません。
なんか this.i みたいなかんじであるのかなと…
逝ってきます
852
名前:
デフォルトの名無しさん
:02/07/15 21:59
>>851
this.i?
853
名前:
843
:02/07/15 21:59
そんな夢のある方法を使えば
変数ひとつでプログラムがかけてしまう!とか何とか
思ったりしたと思われ…
854
名前:
デフォルトの名無しさん
:02/07/15 22:03
>>853
環境依存、動作補償なし(九九表)
int main(){
for(int i=1;i<10;i++){
for(int i=1;i<10;i++)
std::cout << std::setw(2) << i* *(&i+1) << " " ;
std::cout << "\n" ;
}
}
855
名前:
デフォルトの名無しさん
:02/07/15 22:03
せめてthis->iって書いて欲しかった。
856
名前:
843
:02/07/15 22:04
>>852
変数のスコープも和歌ランぐらい初心者なので
ウル覚えですが…自分自身のクラスだったっけ???
グーぐる先生に聞きに逝ってきます
857
名前:
843
:02/07/15 22:07
>>854
>エラー E2316 a.cpp 6: 'setw' は 'std' のメンバーではない(関数 main() )
しくしく63
>>855
そうでした スンマソン
858
名前:
デフォルトの名無しさん
:02/07/15 22:08
VC6 との互換性を考えて
{ for(int i; i < 10; i++){} }
と書くけど、やっぱダサい!
859
名前:
デフォルトの名無しさん
:02/07/15 22:09
>>857
#include <iomanip>
860
名前:
デフォルトの名無しさん
:02/07/15 22:10
if(0)else forよりカコイイ
861
名前:
デフォルトの名無しさん
:02/07/15 22:10
#define for if(0); else for
862
名前:
861
:02/07/15 22:11
ぐあああ、俺だせぇ
863
名前:
843
:02/07/15 22:14
>>858
VC6ではそうしないといけないのか…大変だな
>>859
隊長!動きました…けどやっぱりダメみたいですね。
結果は無残だった。
864
名前:
デフォルトの名無しさん
:02/07/15 22:15
足して駄目なら引いてみるとか?
865
名前:
843
:02/07/15 22:16
>>862
なるほどと思ったりなんかして…
#define for {for
あ、閉じる括弧は無理ジャン…
なるほどね
866
名前:
843
:02/07/15 22:23
たした
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
ひいた
256 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
867
名前:
854
:02/07/15 22:40
いや別に試さんでも…
冗談だし。しかし866のメモリレイアウトはどうなっているのだろう。
868
名前:
843
:02/07/15 22:44
あ、うまくいく場合もあるようですね
当然だが…
ポインタの差を求めてそれをたし元に戻すと…
ポインタの差が変わってて しょんぼりって…
これじゃ使えないジャンか!!
869
名前:
デフォルトの名無しさん
:02/07/15 22:46
boostでGUIプログラミングは作れないんですか?
だとするとあんまり役に立たないような・・やっぱ
MFCで逝くしかないのか・・
870
名前:
デフォルトの名無しさん
:02/07/15 22:47
べつに作れるんじゃないの?
871
名前:
843
:02/07/15 22:49
-2 1 -2 2 -2 3 -2 4 -2 5 -2 6 -2 7 -2 8 -2 9
-2 2 -2 4 -2 6 -2 8 -2 10 -2 12 -2 14 -2 16 -2 18
-2 3 -2 6 -2 9 -2 12 -2 15 -2 18 -2 21 -2 24 -2 27
-2 4 -2 8 -2 12 -2 16 -2 20 -2 24 -2 28 -2 32 -2 36
-2 5 -2 10 -2 15 -2 20 -2 25 -2 30 -2 35 -2 40 -2 45
-2 6 -2 12 -2 18 -2 24 -2 30 -2 36 -2 42 -2 48 -2 54
-2 7 -2 14 -2 21 -2 28 -2 35 -2 42 -2 49 -2 56 -2 63
-2 8 -2 16 -2 24 -2 32 -2 40 -2 48 -2 56 -2 64 -2 72
-2 9 -2 18 -2 27 -2 36 -2 45 -2 54 -2 63 -2 72 -2 81
−2を無視すると動いているようには見える
872
名前:
デフォルトの名無しさん
:02/07/15 23:30
クラステンプレートって
メンバ関数の実装も全部ヘッダファイルに書かないとダメ
なんでしょうか?
873
名前:
デフォルトの名無しさん
:02/07/15 23:40
>>872
分けることもできるけど、
その分けた実装がコンパイルされるときに
明示的なインスタンス化をやっとかないと
リンクエラーになるよん
874
名前:
デフォルトの名無しさん
:02/07/15 23:47
>873
ありがとうございました、なんとかうまくいきました
875
名前:
デフォルトの名無しさん
:02/07/16 00:17
>for(int i=1;i<10;i++){
>for(int i=1;i<10;i++)
正直これは改悪だと思われ。
876
名前:
デフォルトの名無しさん
:02/07/16 00:18
forやifの後に命令ひとつでも{}してしまいたくなる症候群なのですが
コンパイル時に実害はありますか?
877
名前:
デフォルトの名無しさん
:02/07/16 00:19
>>876
最近のコンパイラはすごいです。
878
名前:
デフォルトの名無しさん
:02/07/16 00:22
>>876
わしも
879
名前:
デフォルトの名無しさん
:02/07/16 00:23
>>877
どうすごいの?
880
名前:
デフォルトの名無しさん
:02/07/16 00:30
コンパイラvs{}
↓
コンパイラwin
881
名前:
デフォルトの名無しさん
:02/07/16 00:30
>>879
脱いでもすごいです
882
名前:
デフォルトの名無しさん
:02/07/16 00:32
なんか実害はなさげですかな?
コンパイラはそんなにあほではないのね。
>>878
やっぱりいるんだ。うれしいような
883
名前:
デフォルトの名無しさん
:02/07/16 00:41
>>876
最近やめますた&1行だったらforの中に突っ込んですまいます。
884
名前:
デフォルトの名無しさん
:02/07/16 00:43
>>876
いいと思う
if(i>=0) if(i>=1) if(i>=2) ;
else std::cout << i ;
こんなのあったら何がなんだか分からんし
885
名前:
デフォルトの名無しさん
:02/07/16 01:35
そんな風にしちゃうのと、{} でくくらないのは別問題。
886
名前:
デフォルトの名無しさん
:02/07/16 02:34
乗り遅れた。。
チィッ
887
名前:
デフォルトの名無しさん
:02/07/16 08:32
メンバ関数内にstatic変数を使うくらいなら
その変数はメンバ変数にしてしまった方がいいのでしょうか?
888
名前:
デフォルトの名無しさん
:02/07/16 08:38
>>887
意味的には×かと。
他からアクセスする気がない変数なら敢えてそうする必要はないかと。
889
名前:
デフォルトの名無しさん
:02/07/16 08:42
>>887
時と場合によりけり。
その変数をほかの関数からつかう可能性があればメンバ変数。
ほかの関数からは絶対呼ばないようなときは関数内static。
ま、「変数のスコープは最小限に」っつーことです。
でもその変数がそのクラスにとって重要ならメンバ変数でもよい。
890
名前:
887
:02/07/16 08:57
>>888-889
レスありがとうございます。
>時と場合によりけり。
とりあえず、迷ったらメンバ変数にする方向でいきます。
なんか、上司がstatic変数にブチギレしてたので。
本人曰く「staticアレルギー」らしいです…(藁?
891
名前:
デフォルトの名無しさん
:02/07/16 09:05
マルチスレッドとかで痛い目にあったんだろうな。
892
名前:
デフォルトの名無しさん
:02/07/16 09:08
つぅか出来る限りstaticを使わないと言うのが・・・
893
名前:
デフォルトの名無しさん
:02/07/16 13:26
メンバ関数の中の静的変数ってそのクラスの全部のインスタンスから
参照されてしまうからね。メンバにするのとは意味が違ってくる。
894
名前:
デフォルトの名無しさん
:02/07/16 18:29
staticにするかしないかで迷うことなんてある?
895
名前:
デフォルトの名無しさん
:02/07/16 19:54
通常のメンバ関数とstaticメンバ関数の違いがいまだによくわからない。
896
名前:
デフォルトの名無しさん
:02/07/16 20:02
>>895
staticメンバ関数なら
ClassName::function();
と呼べる。
897
名前:
:02/07/16 20:16
>>895
staticメンバ関数なら、
>>896
のようにインスタンスを作成せずに呼べる。
通常のメンバ関数だと、foo.function()のように
わざわざインスタンスを作成しなければならない。
898
名前:
デフォルトの名無しさん
:02/07/16 20:42
あげ
899
名前:
デフォルトの名無しさん
:02/07/16 20:56
all right.
900
名前:
デフォルトの名無しさん
:02/07/17 00:47
>>896
>>897
サンクス。
901
名前:
デフォルトの名無しさん
:02/07/17 10:40
902
名前:
デフォルトの名無しさん
:02/07/17 11:25
静的メンバ関数からは静的メンバ変数しかアクセスできない。
インスタンスがあろうと無かろうと。(無い場合を考慮すれば当然だが)
コールバックなんかには静的メンバ関数であれば渡すことができる。
903
名前:
デフォルトの名無しさん
:02/07/17 19:25
C++でデータベースにアクセスするとしたらどんなライブラリが一般的ですか?
904
名前:
デフォルトの名無しさん
:02/07/17 19:28
DBごとにアクセス用のライブラリが用意されてると思うけど
Win上ならODBC経由だろうねー
905
名前:
デフォルトの名無しさん
:02/07/17 19:34
unixなら何でしょう??
906
名前:
デフォルトの名無しさん
:02/07/17 19:38
標準は無いと思った。蛇足だけどJavaならJDBCだのー
つかスレ違いっぽいから他スレ行けよ。
907
名前:
デフォルトの名無しさん
:02/07/17 19:41
そうすか。すんまそ。でわでわ
908
名前:
デフォルトの名無しさん
:02/07/17 20:52
クラスの宣言をヘッダに定義をcppファイルに書いています。
ここでこのクラスのオブジェクトを操作するようなグローバルな関数
(例えばswap(class T, class T)みたいな)ですが
プロトタイプはヘッダ、実装はcppに書く、というのが一般的な記述ですか?
909
名前:
デフォルトの名無しさん
:02/07/17 20:56
>>908
疑問点が明確でない。どゆこと?
910
名前:
デフォルトの名無しさん
:02/07/17 21:01
つまり
このクラスを扱うグローバルな関数をこのクラスとセットで提供したいのです。
この場合関数をcppファイルに書いたのですが、プロトタイプはどこに書こうかなぁ、、と思いまして。
externキーワードつければcppファイルに書いても他のファイルから参照できるんでしたっけ??
911
名前:
デフォルトの名無しさん
:02/07/17 21:03
>>908
もっとちゃんと句読点を入れて書けよ。
テンプレートを作りたいなら、全部丸ごとヘッダに書け。
そうじゃないなら、ヘッダには宣言だけを、*.c/*.cpp に定義を書け。
912
名前:
デフォルトの名無しさん
:02/07/17 21:04
そのグローバル関数のプロトタイプを、クラスのヘッダに買いときゃ
いいんじゃないの?externつけるまでも無く
913
名前:
デフォルトの名無しさん
:02/07/17 21:06
>912
そうですか。そうします。ありがとうございます。
914
名前:
デフォルトの名無しさん
:02/07/17 21:08
関数はデフォルトでexternだから付けなくてもヨシ。
915
名前:
デフォルトの名無しさん
:02/07/17 22:33
>>911
普通のクラスのメソッドの定義はヘッダじゃマズイっすか?
916
名前:
デフォルトの名無しさん
:02/07/17 22:37
>>915
inlineじゃない場合、まずいんじゃない?リンク時にぶつかりそう
917
名前:
デフォルトの名無しさん
:02/07/17 23:24
>>916
サンクス♪
918
名前:
デフォルトの名無しさん
:02/07/20 01:01
MSDNより引用
>ローカル タイプを使ってテンプレート関数 (関数テンプレートから作る関数) を作ろうとしています。テンプレート>のインスタンス化では、外部リンケージを持つ型だけが使用できます。
>
>以下のコードではこのエラーが発生します。
>
>template<class T> class X{};
>
>void f()
>{
>struct Y{};
>
>X<Y> x; // エラー
>}
この制限は何のためにあるのですか?
919
名前:
デフォルトの名無しさん
:02/07/20 01:04
C++仕様が"何の為"にあるかを知る本はD&EかARMのどちらかだ。
# ?(・∀・)? ソウダッケ?
920
名前:
デフォルトの名無しさん
:02/07/20 01:29
プログラマの給料の為だろ
921
名前:
デフォルトの名無しさん
:02/07/20 13:33
>>918
テンプレートのインスタンス生成は関数やクラスの外で行われるから。
(C++ 3rd, C.13.8.3)
これは仕様だが、なぜそういう仕様になっているかは知らない。
それを許すとあまりにもコンパイラを作るのが面倒になるからかなぁ?
922
名前:
デフォルトの名無しさん
:02/07/20 18:05
bool Get() { return m_bBool; } を
bool * Get(){ return &m_bBool; } とやる利点を教えてください
923
名前:
デフォルトの名無しさん
:02/07/20 19:19
VC++でお勉強がてらコンソールアプリ作っているんですけど
画面をクリアする方法はないのですか?
924
名前:
デフォルトの名無しさん
:02/07/20 19:24
system("cls");
925
名前:
デフォルトの名無しさん
:02/07/20 19:24
>>918
テンプレート使いまくったプログラムのマップファイルを見れば、
少しは納得がいくと思うよ。
926
名前:
デフォルトの名無しさん
:02/07/20 19:32
>>924
サンクス、systemでdosコマンド呼ぶんですね。
927
名前:
デフォルトの名無しさん
:02/07/20 20:08
>>922
あえていうなら
・レジスタに乗らないようなサイズならば、参照するのに効率がよい
(でも普通はconst参照にするんでは)
・ポインタ経由で値を変更できる
boolじゃあんまり利点ないと思うけど...
928
名前:
デフォルトの名無しさん
:02/07/20 21:04
>>924
cls なんて外部コマンドはねーよ。
929
名前:
デフォルトの名無しさん
:02/07/20 21:09
>>927
> ・ポインタ経由で値を変更できる
そんなことするぐらいなら素直に m_bBool をパブリックにした方がいいと
思うぞ。
普通に考えたら、とても変なことなので
>>922
はそういうことしてる奴に
真意を確認した方がいいよ。普通はやらない。と言うか、やっちゃいけな
い。
930
名前:
デフォルトの名無しさん
:02/07/20 22:51
>>928
systemはshellを呼び出す関数で、shellの内部コマンドも使えるのを知らないのか
931
名前:
デフォルトの名無しさん
:02/07/21 00:39
漏れはboolだったら、↓の様にするけど。。。
class Hoge{
bool m_isChanged;
public :
Hoge() : m_isChanged(false) {}
IsChanged() { return m_isChanged; }
SetChanged() { m_isChanged = true; }
ClearChanged() { m_isChanged = false; }
};
932
名前:
デフォルトの名無しさん
:02/07/21 00:48
931
bool変数をわざわざintで返すのですか?
933
名前:
931
:02/07/21 00:50
型付け忘れてたよ。。。スマソ
934
名前:
デフォルトの名無しさん
:02/07/21 00:51
C++ Cording Standard
http://homepage1.nifty.com/fujiwo/develop/xp/cplusstd.html
935
名前:
デフォルトの名無しさん
:02/07/21 00:53
( ´∀`)69%モナー
936
名前:
デフォルトの名無しさん
:02/07/21 19:23
あのー Win32 スレッド環境で質問なんですが・・。
仮想関数の中でオブジェクトの宣言の順番を変えたり、最適化したり(-Ox)
するとページ違反エラーが発生するので困っております。
次のように書くと A のデストラクト時に ページ違反 (ランタイム)
A a; B b; (-O3 でコンパイル) [シングルスレッドでは問題ないのですが・・]
エラーなし
A a; B b; (-O0 で OK)
B b; A a; (-O3 で OK)
{ A a; } B b; (-O3 で OK)
ちなみに A と B の継承関係は以下のような感じになっているのですが・・
C はオブジェクトの ID を変数に登録しているだけで、お互いは特に関係はありません
(A ← C), ( B ← E ← D ← C ) [ ← ... public 継承 ]
一日中さがしても原因がわからないのでこれはコンパイラのバグなんじゃないかと
思い始めているのですが・・バグのほかに何か考えられますでしょうか・・?
コンパイラは mingw + gcc 2.95.3-6 です
937
名前:
デフォルトの名無しさん
:02/07/21 19:29
シングルスレッドで問題ないなら、
同期まわりのバグのほうを疑うべきじゃないのか?
938
名前:
デフォルトの名無しさん
:02/07/21 19:29
どこかでメモリ破壊をしている。
具体的なソースを上げられないなら、手の施しようがないと思うが。
939
名前:
936
:02/07/21 23:16
>>937
,938
アドバイスに添って調べてみたら微妙なミスを発見しました。
解決できました。ありがとうございました!
940
名前:
デフォルトの名無しさん
:02/07/22 01:34
windowsでdllとアプリの間に共通の自作クラスを使用する場合は
どこで宣言するのが吉?
vector <myClass *> classes
みたいなオブジェクトをdllとメインプロジェクトの間でやりとりしたくて
迷っています
941
名前:
デフォルトの名無しさん
:02/07/22 01:39
宣言は必要なところすべて
インスタンスの作成は所有者
942
名前:
940
:02/07/22 01:42
>941
そうですかやっぱりメインプロジェクトの方でも宣言しないとダメですかね。
どうもdllとlibの関係がわからない・・・
943
名前:
デフォルトの名無しさん
:02/07/22 01:44
>>942
だめというか、そのクラスを使うところで
使いたい対象を知らなかったら使えないでしょ?
944
名前:
940
:02/07/22 02:47
なるほどそういわれてみればそうですね。
VisualC使ってるのですが
別プロジェクトで平行してdllを作っているので
#include "../dllProj/***.h"
このようにして常に最新のdllヘッダをincludeするようにしました
これであとはlibとdllをdllProjの方から呼び出せればいいのですが・・
設定のところでincludeファイルにdllProjを含めてもうまくいかない・・・
945
名前:
デフォルトの名無しさん
:02/07/22 03:12
boost のshared_ptrって普通に参照回数を数えているのとは違うらしい
んだけど、それは普通に参照回数を数えるのに比べて何がどう違って
いて、どうメリットがあるんでしょうか?
ドキュメント見たけど書いていないっぽいのでどなたか教えて頂けないでしょうか。
946
名前:
940
:02/07/22 04:22
すみませんもう一つだけ質問させてください。
メインプロジェクトで
myclass *test;
init(test);
としてdllの方のinit関数で
test = new myclass
などすることは可能なのでしょうか?
どうもここがうまくいきません。
947
名前:
940
:02/07/22 04:55
つまりdllの方で
動的にメモリ領域を確保してメインプロジェクトで使うことは可能かどうかということです
ちなみに
warning C4700: 値が割り当てられていないローカルな変数 'test' に対して参照が行われました。
という警告がでてはしまうのですが・・・・
948
名前:
デフォルトの名無しさん
:02/07/22 07:10
>>940
メインで確保したメモリはメインで開放、
DLLで確保したメモリはDLLで開放する。
Windowsの力を借りれば、どっちで開放してもいいようにもできる。
その前に引数とはどういうものかを知れ。
949
名前:
デフォルトの名無しさん
:02/07/22 08:21
>>945
use_count_ と weak_count_ を分けているので weak_ptr<> が作れるぞ、
ってゆーか、別に普通に数えているのと大差ないと思うけど。
950
名前:
デフォルトの名無しさん
:02/07/22 09:35
つか、
myclass *test;
dll_init( &test );
@dll
*test = new myclass
ダロ。ポインタわかってるか?
951
名前:
945
:02/07/22 10:53
>>949
ほほぅ、そうなんですか。それってパフォーマンス下がるんですかねぇ、やっぱり。
サイズ大きくなりそうだし・・・
952
名前:
デフォルトの名無しさん
:02/07/22 12:05
srand((unsigned)time(NULL));
この、unsigned っていうのはなんでしょうか?
C or C++自体初心者なので、頭についているのも理解できません。
953
名前:
デフォルトの名無しさん
:02/07/22 13:12
>>951
局所的な、パフォーマンスが要求されるポインタには、scoped_ptrを使えって。
shared_ptrは、たとえばSingletonだったり、木構造だったり、
複数の参照元を管理するためにつかうもんだろ。
954
名前:
デフォルトの名無しさん
:02/07/22 15:13
今、VC6.0で音声認識を行うランチャーを作っています。
Microsoft Speech SDK5.1をダウンして、付属の音声認識サンプルプログラムcoffees0
をコンパイルしようとするとcofgram.hが見つからずエラーが出てしまいます。
ハードディスク内を全検索かけても、googleで検索かけても何も見つかりませんでした。
confgram.hはどーすれば手に入りますか?よろしくお願いします。
955
名前:
名無しさん@カラアゲうまうま
:02/07/22 16:34
>>954
まるち は しね
956
名前:
デフォルトの名無しさん
:02/07/22 20:28
新スレいりますか?
957
名前:
デフォルトの名無しさん
:02/07/22 20:37
いらないっつーに
958
名前:
デフォルトの名無しさん
:02/07/22 23:22
保守あげ
959
名前:
デフォルトの名無しさん
:02/07/22 23:30
勃てますた。ヨロスク。
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/
960
名前:
945=951
:02/07/22 23:55
>>953
いやぁ、vector に突っ込む時とかの事を考えてのつもりです。
scoped_ptr は使えないっすよね。で、shared_ptr を増産すると
普通の counted_ptr(とでも言うのかな?)と比べて weak_count_
の分よろしくないかなぁと思っただけでして・・・
961
名前:
旧スレなのでsageで
:02/07/23 00:35
>>960
カウントが2種類あるからと言って sizeof( shared_ptr<T> ) は増えたりはせんから、
同じオブジェクトを指す shared_ptr の増産なら問題は皆無だぞ、念のため。
1オブジェクトにつき4Byte程度…のメモリ消費が気になるなら
独自のカウンタを書いて intrusive_ptr<> を使うべきかと。
962
名前:
デフォルトの名無しさん
:02/07/23 00:39
2つのカウンタをインクリメント・デクリメントするコストが無駄だというんじゃないの?
963
名前:
945=951=960
:02/07/23 01:18
>>961
サイズの問題を考えるとすれば、そうです。つまり、
counted_base::use_count_ と counted_base::weak_count_
の二つを持つ shared_ptr は、フツーに count数を数えるようなの
と比べて weak_count_ の分大きくなるなぁという風に思っただけです。
あんまり weak_count のメリットを僕が分かってないせいもありますが、
「そんなのイラナイから余計なサイズ食わないで欲しいなぁ」
ってのが一つ。
それと、
>>962
の言うように、「余計なカウントしなくていいのになぁ」
というのも一つ。
まぁぶっちゃけ「参照回数のみを数える余計な事はしない軽いsmart_ptrも欲
しいなぁ」とちょっと思ったっていうその程度です。なんかお騒がせしちゃっ
たみたいでスマソ
ちなみに intrusive_ptr なる物は始めて知りました。確かにありますねぇ。
ちょっと見てみます。
964
名前:
デフォルトの名無しさん
:02/07/23 19:09
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
965
名前:
デフォルトの名無しさん
:02/07/23 20:11
966
名前:
デフォルトの名無しさん
:02/07/24 15:37
967
名前:
デフォルトの名無しさん
:02/07/24 15:37
968
名前:
デフォルトの名無しさん
:02/07/24 15:37
969
名前:
デフォルトの名無しさん
:02/07/24 15:38
埋め立て
970
名前:
デフォルトの名無しさん
:02/07/24 15:38
埋め立て!!
971
名前:
デフォルトの名無しさん
:02/07/24 15:38
埋め立て!!
埋め立て!!
972
名前:
デフォルトの名無しさん
:02/07/24 15:39
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
973
名前:
デフォルトの名無しさん
:02/07/24 16:06
埋め立て
974
名前:
デフォルトの名無しさん
:02/07/24 16:06
埋立て
975
名前:
デフォルトの名無しさん
:02/07/24 16:07
埋立
976
名前:
デフォルトの名無しさん
:02/07/24 16:07
埋め立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
977
名前:
デフォルトの名無しさん
:02/07/24 16:08
埋立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
978
名前:
デフォルトの名無しさん
:02/07/24 16:08
埋立
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
979
名前:
デフォルトの名無しさん
:02/07/24 16:09
埋め立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
980
名前:
デフォルトの名無しさん
:02/07/24 16:10
埋立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
981
名前:
デフォルトの名無しさん
:02/07/24 16:10
埋立
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
982
名前:
デフォルトの名無しさん
:02/07/24 16:29
埋め立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
983
名前:
デフォルトの名無しさん
:02/07/24 16:29
埋立
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
984
名前:
デフォルトの名無しさん
:02/07/24 16:29
埋立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
985
名前:
デフォルトの名無しさん
:02/07/24 16:34
埋立
986
名前:
デフォルトの名無しさん
:02/07/24 16:34
埋
め
立
て
987
名前:
デフォルトの名無しさん
:02/07/24 16:35
埋
立
て
988
名前:
デフォルトの名無しさん
:02/07/24 16:35
埋
立
989
名前:
デフォルトの名無しさん
:02/07/24 16:35
埋
め
立
て
!
!
990
名前:
デフォルトの名無しさん
:02/07/24 16:38
埋め立て
め
立
て
991
名前:
デフォルトの名無しさん
:02/07/24 16:38
992
名前:
デフォルトの名無しさん
:02/07/24 16:38
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
993
名前:
デフォルトの名無しさん
:02/07/24 16:39
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
994
名前:
デフォルトの名無しさん
:02/07/24 16:59
u
m
e
t
a
t
e
995
名前:
デフォルトの名無しさん
:02/07/24 16:59
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
996
名前:
◆itdn3QI6
:02/07/24 17:01
1000!!
997
名前:
◆itdn3QI6
:02/07/24 17:01
1
0
0
0
998
名前:
◆itdn3QI6
:02/07/24 17:02
1000
GET
999
名前:
◆itdn3QI6
:02/07/24 17:02
999
1000
名前:
◆itdn3QI6
:02/07/24 17:02
1000
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.