■過去ログ置き場に戻る■ 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.