■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part18
501 名前:デフォルトの名無しさん :03/04/26 21:58
ボランドC++パソナルってコンパイラも入ってるんですか??

502 名前:デフォルトの名無しさん :03/04/26 22:02
>>501
何だい、それは?
フリーの Borland C++ Compiler のこと?


503 名前:デフォルトの名無しさん :03/04/26 22:05
コンパイラのない開発環境ってなんだ?
インタプリタ?
フロントエンド?

504 名前:デフォルトの名無しさん :03/04/26 22:05
C++Builder 6 Personalですた

505 名前:デフォルトの名無しさん :03/04/26 22:07
>>503
RPGツクール

506 名前:デフォルトの名無しさん :03/04/26 22:08
>>504
そのものがコンパイラ。


507 名前:デフォルトの名無しさん :03/04/26 22:39
>>479
アホな質問で悪いが、private継承ってどんなときに使えばいい?


508 名前:490 :03/04/26 23:00
>>494
わかりました。ちゃんと理解してから使いますね。
今作ってるゲームが、C++をちゃんと勉強した後に再度作ると
どれだけちゃんとしたゲームになるかが楽しみです。

509 名前:デフォルトの名無しさん :03/04/26 23:10
>>507
親の顔を絶対に人に知られたくないとき。

510 名前:デフォルトの名無しさん :03/04/27 00:15
>>492
似たような機能は関数ポインタ使えば出来る。
ただ、インスタンスメソッドに対してデリゲートと同じようなことしようと思うとかなり面倒。
一応、関数オブジェクトを作れば可能だけど。


511 名前:デフォルトの名無しさん :03/04/27 00:29
boost::functionがあるから大丈夫。

512 名前:デフォルトの名無しさん :03/04/27 00:35
なぜ素直に「できませんごめんなさい」の一言が言えないんだ?

513 名前:デフォルトの名無しさん :03/04/27 00:46
>>512 何の話?

514 名前:名無し :03/04/27 01:05
C#厨がいるな

515 名前: :03/04/27 01:18
delegate 委譲ってよく分からんな。Factory????

516 名前:デフォルトの名無しさん :03/04/27 01:20
class B
{
protected:
 int n;
};
class D : public B
{
public:
 D( B const& rhs )
 {
  n = 1;// ok
  n = rhs.n;// error
 }
};
↑のようなアクセスがエラーになります。
自分のn(this->n)にはアクセスできるのに、
他のインスタンスのn(rhs.n)にはアクセスできないということでしょうか?

ちなみに、cygwinのgcc3.2で、エラーメッセージは
: In constructor `D::D(const B&)':
:4: `int B::n' is protected
:12: within this context
となります。

517 名前:デフォルトの名無しさん :03/04/27 01:21
>>515
C#ではシグネチャの一致するメソッドを変数のように扱える仕組み?
じゃなかったか


518 名前:デフォルトの名無しさん :03/04/27 01:25
C#のdelegateは
C++BuilderとかVC7のpropertyと何か違うの?

519 名前:よねちん。 :03/04/27 01:30
クラス配列の初期亜k子について

class Slave{
public:
Slave(int in);
};

class Master{
private:
class Slave salve[10];
public:
Master() : ???? {};
// ↑ここでslaveクラス配列のコンストラクタに引数を渡したい
};

initializeでSLAVEクラスを初期化したいときは、
どのように記述したらいいんでつか??


520 名前:よねちん。 :03/04/27 01:31
↑初期化子ね。
initilizerでつ。


521 名前:デフォルトの名無しさん :03/04/27 01:31
>>519
できない。

コピーできるクラスなら、vector使えばいいかもしれない。

522 名前:デフォルトの名無しさん :03/04/27 01:33
>>519
ポインタの配列にしてひとつづつ初期化するしか

523 名前:デフォルトの名無しさん :03/04/27 01:36
>>519
ttp://www.parashift.com/c++-faq-lite/ctors.html#faq-10.5

524 名前:よねちん。 :03/04/27 01:40
>>521-523サンクス
見てみまつ。


525 名前:デフォルトの名無しさん :03/04/27 01:54
>>516
Bのnはprotectedだから。
仮にDと共通の先祖を持つ
class Z ; public B
{
}
があって
DのコンストラクタにZを渡すとき、DがZのnにアクセスできちゃマズーでしょ?

526 名前:516 :03/04/27 02:02
んー?
うーん、そうかぁ。そうだなぁ。

やっぱ中途半端はよくないな。
protectedイラネ。

527 名前:デフォルトの名無しさん :03/04/27 02:04
なんでアクセスレベルを指定するキーワードはみなpから始まる単語ばかりなの?

528 名前:( ´Д`)/< 先生!!こんなのが有りますた。 :03/04/27 02:04
http://www.yamazaki.90.kg/hankaku/hankaku07.html
http://www.yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku08.html
http://yamazaki.90.kg/hankaku/hankaku10.html
http://www.yamazaki.90.kg/hankaku/hankaku01.html
http://yamazaki.90.kg/hankaku/hankaku03.html
http://www.yamazaki.90.kg/hankaku/hankaku02.html
http://yamazaki.90.kg/hankaku/hankaku09.html
http://www.yamazaki.90.kg/hankaku/hankaku06.html
http://yamazaki.90.kg/hankaku/hankaku04.html
http://www.yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku05.html

529 名前:デフォルトの名無しさん :03/04/27 02:48
publicファンクションの一部だけしか見えて欲しくないと思って以下のようにしてみました。

class A {
public:
 void func1();
 void func2();
}

class AExcuter {
private:
 A* a;
public:
 AExcuter( A* _a ) : a(_a) {}
 void func1() { a->func1(); }
}

Aの所有者以外は AExcuter を渡してスッキリとしたいのですが,なんか鬱陶しいんです。
こういうことしますか?


530 名前:デフォルトの名無しさん :03/04/27 02:53
「publicファンクションの一部だけ」をインターフェースにわけるのはダメか?

531 名前:529 :03/04/27 03:07
>>530
class A1 {
 virtual void func1() = 0
}
class A : public A1 {
public:
 void func1();
 void func2();
}

A a;
A1* pa = a;
ってことかな。このキャストはどうなんだろう。
とりあえず実行は出来ました。
勉強してきます。どうも。

532 名前:デフォルトの名無しさん :03/04/27 03:12
カンマ演算子のオーバーロードって何に使うんですか

533 名前:デフォルトの名無しさん :03/04/27 03:14
何に使うのかは自分で決める。それが演算子の多重定義。

534 名前:529 :03/04/27 03:20
アップキャストと言うそうで。dynamic_castもいらないとのこと。<基本でつね・・・
多重継承とインターフェースっていろいろ組み合わせられて便利でしょ
くらいにしか思ってなかったので感激です。

535 名前:デフォルトの名無しさん :03/04/27 03:20
そして一見C++には見えない変態的なソースが出来上がると。


536 名前:デフォルトの名無しさん :03/04/27 04:13
>>535 例きぼんぬ。

537 名前:デフォルトの名無しさん :03/04/27 04:19
演算子の定義によっては

cout << boost::format("%1% %2%") % "hello" % 100 << endl;
こんなのとか

std::list<int> hoge;
enum_start(hoge), 1, 2, 3, 4, 5, enum_end();

こんな書き方までできちゃうということかなぁ?



538 名前: :03/04/27 07:36
>>537
やっぱ演算子の多重定義って嬉々として使うもんじゃないのでは
ないかと。

複素数の四則演算やデバッグ用の << とか以外だとどんな使い方
が定番なのかな。まず業務系ではお目にかからないもので。

539 名前:デフォルトの名無しさん :03/04/27 08:22
きっき、きっき、地球の危機!


540 名前:デフォルトの名無しさん :03/04/27 08:48
>enum_start(hoge), 1, 2, 3, 4, 5, enum_end();
代入するより楽なとこがイイ。

541 名前:r :03/04/27 09:33
こんなのは?
class ExceptionThrower {
    int r_,s_;
public:
    ExceptionThrower(int r) : r_(r) {}
    operator =(int r) {
        if( ( s_ = r ) != r_ )
            throw std::exception();
    }
};

// intを返すAPIとかを多用する時に使う。
void foo() {
    ExceptionThrower ret( 0 );
    ret = int_return_API();
}
// 代入演算子は、結構優先順位が低いから。

542 名前:デフォルトの名無しさん :03/04/27 09:34
>enum_start(hoge), 1, 2, 3, 4, 5, enum_end();

便利そうじゃねーか
boostに入ってるの?

543 名前:デフォルトの名無しさん :03/04/27 09:34
>>538
配列っぽいオブジェクトの [] とか関数っぽいオブジェクトの () とか
ポインタっぽいオブジェクトの *, -> も定番だろう。

>>536
for_each( v.begin(), v.end(), cout << _1 << '\n' );
とか?

544 名前:デフォルトの名無しさん :03/04/27 09:36
newも欧婆老怒できるよ。

545 名前:デフォルトの名無しさん :03/04/27 09:41
>>542
http://www.tietew.jp/cppll/archive/364
http://www.cs.auc.dk/%7Enesotto/init/
http://www.kmonos.net/alang/klx/
らへん。boostのMLで話題になったこともあるけど結局流れてたような。

546 名前:デフォルトの名無しさん :03/04/27 13:20
どなたかちょこっと教えてください。
.NET Frawork Microsoft SDK で、C++を
コンパイル・実行したいのですが、
拡張子とコンパイルコマンドを教えてください。

547 名前:デフォルトの名無しさん :03/04/27 13:23
>>546
もしもVS6.0と同じなら、.cpp cl.exe

548 名前:デフォルトの名無しさん :03/04/27 13:54
>>546
(´-`).。oO(どーでもいいが、.NET SDKのやつはiostreamとかついてないぞ‥‥)
(´-`).。oO(stdioとかはあるけどね‥‥)

549 名前:デフォルトの名無しさん :03/04/27 14:02
>>548
C++というよりC?

550 名前:デフォルトの名無しさん :03/04/27 14:04
stlportでも拾ってきて入れればOK。多分。

551 名前:デフォルトの名無しさん :03/04/27 15:13
どなたかちょこっと教えてください。
.NET Frawork Microsoft SDK で、C++を
コンパイル・実行したいのですが、
拡張子とコンパイルコマンドを教えてください。

552 名前:デフォルトの名無しさん :03/04/27 15:41
荒らすな死者布厨

553 名前:デフォルトの名無しさん :03/04/27 17:46
struct X { int a,b,c; float d,e,f; std::vector<int> g,h,i,j; };
こんな(いろんな型が並んでいる)構造体について、
bool operator < ( X const& lhs , X const& rhs );
をa,b,c,d,...の順で辞書順として定義したいのですが、
return lhs.a < rhs.b || ( !( lhs.a < rhs.a ) && ( lhs.b < rhs.b || ( ! ....
となって、括弧がどんどん深くなってしまいます。

現状は、この書き方でものすごいソースになってしまっているのですが、
もっと綺麗な書き方はないでしょうか?

554 名前:デフォルトの名無しさん :03/04/27 18:19
>>553
普通に...
if(lhs.a != rhs.a) return lhs.a < rhs.a;
if(lhs.b != rhs.b) return lhs.b < rhs.b;
if(lhs.c != rhs.c) return lhs.c < rhs.c;
...
じゃダメなのか ?

555 名前: :03/04/27 21:47
>>541
うーん、俺の周りではあまり使わないですね。そもそも例外処理
自体を理解している人がいない (俺も含めて) ので、普通に
int にステータス割り当てて値を返すコーディングがほとんどです。

>>543
そうか! 確かに [] は使いますね。漏れはこういうのを定義する側
というより、すでに定義されているクラスライブラリを使う側ですけ
ど。

556 名前:553 :03/04/28 00:44
>>554
operator < だけ使う、ということにしたいのです。

書き方とは別件だけど、operator != 使ったほうが効率はいいのかな?
おしえて、えろい人。

557 名前:デフォルトの名無しさん :03/04/28 01:08
>>556
> operator < だけ使う、ということにしたいのです。

それ無理じゃん。

struct X { int a, b; };

の場合でいいから、あんたの書き方で書いてみなよ。

558 名前:553 :03/04/28 01:18
>>557
bool operator < ( X const& lhs , X const& rhs )
{
 return lhs.a < rhs.a || ( !( rhs.a < lhs.a ) && lhs.b < rhs.b );
}


559 名前:デフォルトの名無しさん :03/04/28 01:45
>>553
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost-sandbox/boost-sandbox/boost/utility/lexicographic.hpp?rev=HEAD&content-type=text/vnd.viewcvs-markup

return lexicographic( lhs.a, rhs.a )( lhs.b, rhs.b )( lhs.c, rhs.c )( lhs.d, rhs.d ) ...;

当然ショートサーキット評価はされないので注意が必要なこともある。

560 名前:559 :03/04/28 01:47
いや、return lexicographic::minus == lexi...()()()().result(); か。

561 名前:553 :03/04/28 02:12
>>559
ふーむ。そんなものが作られてるってことは、
道具無しで綺麗に書くのはどうやらできないみたいですねぇ。

結構最近できた奴みたいですな。
リリースされてたら使うところだけども、
今回は気合のソースとコメントで見送っとこう。

ありがとうございました。

562 名前:559 :03/04/28 02:30
>>561
あるいはマクロが嫌いでなけりゃ
#define COMPARE_BY(X) if(lhs.X<rhs.X) return true; if(rhs.X<lhs.X) return false
 COMPARE_BY( a );
 COMPARE_BY( b );
 COMPARE_BY( c );
 ...
 COMPARE_BY( z );
 return false;
#undef COMPARE_BY
とかどーよ。

563 名前:553 :03/04/28 02:42
>>562
マクロは嫌いだけど、便利に使って#undefするなら問題なし。
そっか、operator < の定義なら途中でreturnも問題ないし、それがいーな。
重ね重ね、ありがとうです。

564 名前:デフォルトの名無しさん :03/04/28 03:02
UnWindResume ってなに?

565 名前:デフォルトの名無しさん :03/04/28 08:14
>>553
三項演算子は?

566 名前:553 :03/04/28 13:22
>>565
ん?どうつかったらいいの?

567 名前:デフォルトの名無しさん :03/04/28 23:39
下記のような状況でvalue_==target_valueの要素のiteratorを得たいのですが、
どうするのがよいですか?

typedef boost::shared_ptr<hoge> HogeSharedPtr;

class hoge
{
 int value_;
public:
 int GetValue() const { return value_; }
 void SetValue(int value) { value_ = value; } 
}

void main()
{
 vector<HogeSharedPtr> hoges;
 for(int i=0; i<50; i++)
 {
  HogeSharedPtr p = HogeSharedPtr(new hoge());
  foo->SetValue(i);
  hoges.push_back(p);
 }
 
 int target_value = 27;

 
 vector<HogeSharedPtr>::iterator it = ????????????????????????
}



568 名前:567 :03/04/28 23:39
下記のような方法は分かるのですが、
値1個取り出すのにファンクタ作るのも面倒だし汚い気がするので、
ファンクタクラスを作らずにできるだけboost無しでも出来る方法を教えて下さい。

class HogeValueCompare
{
 int value_;
public:
 inline HogeValueCompare(int value) { value_ = value; }
 inline bool operator() (boost::shared_ptr<hoge> a)
 {
  return a->GetValue() == value_;
 }
};

vector<HogeSharedPtr>::iterator it = std::find_if(
  hoges.begin(), hoges.end(), HogeValueCompare(target_value));


569 名前:デフォルトの名無しさん :03/04/28 23:49
vector<HogeSharedPtr>::iterator it = hoges.begin();
while( it != hoges.end() && (*it)->GetValue() != target_value ) ++it;

570 名前:デフォルトの名無しさん :03/04/28 23:52
>>569
ループ回すのは良くないとかEffectiveSTLに書いてあるので…
bind1st,bind2nd,equal_to,mem_funあたりでなんとか出来ない物でしょうか?

571 名前:デフォルトの名無しさん :03/04/28 23:55
具体的には、
vector<HogeSharedPtr>::iterator it = std::find_if(
  hoges.begin(), hoges.end(), equal_to(mem_fun(&hoge::GetValue), target_value)
みたいな感じでできないか知りたいのです。これはコンパイル通りませんが。

572 名前:569 :03/04/28 23:57
>>570
> ループ回すのは良くないとかEffectiveSTLに書いてある

書いてあるのを理由にしてるのか?本質を見るのを忘れるなよ。

> bind1st,bind2nd,equal_to,mem_funあたりでなんとか出来ない物でしょうか?

望みの動作には関数の合成が必要。標準には無い。
shared_ptr使っといてboost無しってのもおかしな話だな。

573 名前:デフォルトの名無しさん :03/04/29 00:02
>>572
ありがとうございます。
boostのcomposeあたりを使うのですよね。
shared_ptrは使ってる人が多いイメージがあるんですが、
composeはほとんど使っている人がいないし、
使うだけでノーマルなC++から離れていくイメージがあったので…
やはりcompose無しでは無理ですか。分かりました。

574 名前:デフォルトの名無しさん :03/04/29 03:01
Visual C++.NETで下の定義がどっちも通らないんですけど、

class Hoge {
public:
  static const void* NURUPO = 0;
  static const double PI = 3.141592653589793238462;
};

これは言語自体の制限なんでしょうか? それともVC++の制限?

マクロで定数を定義するのは非推奨らしいので、
普通にこれがヘッダで通ってマクロ同様に展開してくれないと不便だと思うんですが。

575 名前:デフォルトの名無しさん :03/04/29 03:05
>>574
VC++のバグだから安心して良いよ。

576 名前:デフォルトの名無しさん :03/04/29 03:18
>>574
まあ
class Hoge {
public:
  static const void* NURUPO;
  static const double PI;
};
const void* Hoge::NURUPO = 0;
const double Hoge::PI = 3.141592653589793238462;
なら通ると思うけど、不便だあね

577 名前:デフォルトの名無しさん :03/04/29 05:14
静的メンバの初期化が可能なのは
static const int だけじゃなかった?

578 名前:577 :03/04/29 05:16
>静的メンバの初期化
ブロック内での静的メンバの初期化

579 名前:デフォルトの名無しさん :03/04/29 05:27
>>577
bool
char
wchar_t
符号有り無しの整数型
enum型

なので、>>575は間違い。

580 名前:577 :03/04/29 05:42
>>579
さんくす。規格の 'const integral' を int と脳内補正して読んでいた。

581 名前:575 :03/04/30 03:58
>>579
そうだったのか。しらなんだ。thx。

582 名前:デフォルトの名無しさん :03/04/30 12:39
newで確保した領域は、その関数が終わったら自動的に開放されるのでしょうか?
それとも、deleteするまで開放されないのでしょうか?
よろしくお願いします。

583 名前:デフォルトの名無しさん :03/04/30 12:43
関数を抜けたら消えてしまうのであれば使い物にならない。

584 名前:582 :03/04/30 13:15
>>583
つまり、確保した領域を指すポインタを受け取れば、
newがあった関数がなくなってもその領域を利用できるというわけですね。
そのポインタを使って、他の関数からdeleteもできるのですね。
ありがとうございました。

585 名前:デフォルトの名無しさん :03/04/30 13:20
>>582
(´-`);y=~~ .。oO(mallocとfree考えりゃ当然そうなるだろ‥‥)

586 名前:デフォルトの名無しさん :03/04/30 13:23
>>585
そのセミコロンは何?

587 名前:585 :03/04/30 13:29
カチャ ;y=-(゚д゚) ・: ターン

588 名前:デフォルトの名無しさん :03/04/30 13:34
MSVC++6.0使用中なのですが、DLしたソースをコンパイルしようとしても、
「インクルードファイル「stdafx.h」がありません」エラーが出ます。
で、こいつについて調べ、プリコンパイル済ヘッダってコトまではわかったのですが、
どの資料を見ても、「自動で生成される」と、書いてありました。

で、VC++の設定いじってみて、「プリコンパイル済ヘッダを使用」にチェックも入れてみたのですが、コンパイルできません…
どなたか、対処法を教授ください…

589 名前:デフォルトの名無しさん :03/04/30 13:44
>>588
http://pc2.2ch.net/test/read.cgi/tech/1048698321/

590 名前:588 :03/04/30 13:48
>>589
スレ違いだったんですね…ごめんなさい。
さっそく逝ってきます…

591 名前:デフォルトの名無しさん :03/04/30 22:02
すでにあるファイルを上書きしたくないとき、そのファイルがあるかどうか、
どうやって調べるんでしょう。

592 名前:デフォルトの名無しさん :03/04/30 22:09
>>591
ふつーに

if(fopen("hoge.txt","r")){
 puts("ファイルが存在しますYO!");
}

じゃいかんのか?

593 名前:デフォルトの名無しさん :03/04/30 22:13
>>591
Win32なら
GetFileAttributesの戻り血を調べるとかね

594 名前:デフォルトの名無しさん :03/04/30 22:16
template<typename X, typename Y> class A{
public:
void func(void);
};
template<typename X, typename Y> void A<X,Y>::func(void){}
template<typename X> void A<X,char>::func(void){}
template<typename X> void A<X,double>::func(void){}
の様な部分特殊化って出来ないの?

595 名前:デフォルトの名無しさん :03/04/30 22:39
できないな


596 名前:デフォルトの名無しさん :03/04/30 23:00
テンプレート使えねー。ププププ

597 名前:594 :03/04/30 23:20
・゚・(ノД`)・゚・

598 名前:LogWindow :03/04/30 23:56
C++の関数テンプレートの部分特殊化不可の攻撃!
594はC++の前でしくしくと泣き出した!

599 名前:デフォルトの名無しさん :03/04/30 23:57
僕にもC言語できるかな

600 名前:デフォルトの名無しさん :03/05/01 00:03
>>596
かわいそうに。使いこなせないのか

601 名前:594 :03/05/01 00:11
Modern C++ Design p.30に書かれていることですね?

602 名前:デフォルトの名無しさん :03/05/01 03:15
これからCで何かちょっとしたもの作りたいんですが
どの開発環境使うと良いですか?
あんま金ないのでBorland の1万のヤツ買おうかと思ってますが、、

603 名前:デフォルトの名無しさん :03/05/01 04:34
>>602
おまえはハゲだ

604 名前:デフォルトの名無しさん :03/05/01 15:44
クラススコープ内で有効な定数(int以外)を定義したいんだけど
なんかいい方法ある?

605 名前:デフォルトの名無しさん :03/05/01 15:51
class aaaa{
#define CONSTANT 1.2345
....
#undef CONSTANT
};


606 名前:604 :03/05/01 15:56
>>605
それじゃクラス宣言中しか使えないじゃないですか。

607 名前:デフォルトの名無しさん :03/05/01 15:57
>>602
Cもいいけど最強の開発環境Delphiはいかが。
ただなのでお金が無くても問題ありません。

http://www.borland.co.jp/delphi/personal/

608 名前:デフォルトの名無しさん :03/05/01 16:02
>>604
「constは定数か否か論争」をやりたい、ってことでつか?

609 名前:デフォルトの名無しさん :03/05/01 16:03
class aaaa{
static const double bbbb;
};

610 名前:604 :03/05/01 16:09
>>608
論争はどうでもいいです。
定数っぽく認識できて書き換え不可でデバッガで読めれば何でもいいです。
constで出来るかなと思ってやってみたらうまくいかなかったんで。

611 名前:デフォルトの名無しさん :03/05/01 16:11
enum { concon = 0.1 };

612 名前:デフォルトの名無しさん :03/05/01 16:12
これじゃだめなのか?
class Hoge {
 const double PI_;
public:
 Hoge() : PI_(3.14) {}
};

613 名前:604 :03/05/01 16:13
あー、
class aaaa{
static const double bbbb;
};
const double aaaa::bbbb = 100.0;

で出来た。定義部の方でstaticつけてたらエラー出たんでダメだと思ってた。
みんなスマソ。

614 名前:デフォルトの名無しさん :03/05/01 23:32
cat > hoge.cpp ; g++ -O2 hoge.cpp ; du -b a.exe
#include <iostream>
int main() { std::cout << "hello, world." << std::endl; return 0; }
448506 a.exe

cat > hoge.cpp ; g++ -O2 hoge.cpp ; du -b a.exe
#include <stdio.h>
int main() { ::printf("hello, world.\n"); return 0; }
19221 a.exe

なんで iostream 使うとサイズが数十倍になりますか?

615 名前:デフォルトの名無しさん :03/05/01 23:41
>>614
Localeとかゴニョゴニョあって大変なのよiostreamの中の人は。

616 名前:デフォルトの名無しさん :03/05/02 00:24
>>614
はぁ? おまえは逆転の発想もできないのか?

iostreamを使うだけで量が数十倍も増えるなんて、なんてお得!!

617 名前:デフォルトの名無しさん :03/05/02 00:49
g++-3.2.1 on Linux だと

-rwxr-xr-x 1 user user 13742 May 2 00:47 cstdio
-rwxr-xr-x 1 user user 15827 May 2 00:48 iostream

だった。あんま変わらんね。cygwinはなんでそんな膨張すんだろか?

618 名前:デフォルトの名無しさん :03/05/02 01:18
vc++6.0sp5 (release build)
40960 cstdio.exe
65536 iostream.exe


619 名前:デフォルトの名無しさん :03/05/02 01:24
bcc32 5.5.1
52224 cstdiob.exe
113152 iostreamb.exe


620 名前:デフォルトの名無しさん :03/05/02 01:34
dmc 8.29n (stlport)
37404 cstdiod.exe
364060 iostreamd.exe

dmc 8.29n (default)
37404 cstdiod2.exe
49180 iostreamd2.exe


621 名前:デフォルトの名無しさん :03/05/02 03:08
MetrowerksCodeWarrior8で両方とも
32768byteになってしまいますた
(;´д`)

622 名前:デフォルトの名無しさん :03/05/02 03:10
きりのいい数字だな。

623 名前:デフォルトの名無しさん :03/05/02 03:13
iostream系ほど実装に差がでるライブラリは無いね
サイズをとるか実行速度をとるか

624 名前:デフォルトの名無しさん :03/05/02 11:45
vc5.0sp0
iostream 64512
stdio 30208

625 名前:デフォルトの名無しさん :03/05/02 12:28
静的リンク・動的リンクくらい理解してくれよ


626 名前:デフォルトの名無しさん :03/05/02 17:28
すみません、質問があります。
クラス(構造体)の宣言内でのみ using を使う方法はないものでしょうか?

>cat t96.cpp
#include <string>
#include <iostream>

struct T
{
using namespace std;

string s; // std::stringと記述する手間を省きたい
};

int main()
{
using namespace std;

T t;
t.s = "test";

cout << t.s << endl;

return 0;
}


627 名前:626 :03/05/02 17:28
>g++ t96.cpp
t96.cpp:6: parse error before `namespace'
t96.cpp:8: 'string' is used as a type, but is not defined as a type.
t96.cpp: In function `int main()':
t96.cpp:16: `struct T' has no member named `s'
t96.cpp:18: `struct T' has no member named `s'

>bcc32 t96.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
t96.cpp:
エラー E2070 t96.cpp 6: 名前空間 'using' が不正に使われた
*** 1 errors in Compile ***


628 名前:デフォルトの名無しさん :03/05/02 18:20
namespace hoge{
    using namespace std;
    struct T
    {
        string s;
    };
}
using hoge::T;

629 名前:デフォルトの名無しさん :03/05/02 19:36
>>626
private: typedef std::string string;
とかで我慢しとくとか。

630 名前:デフォルトの名無しさん :03/05/02 21:21
一通りCの勉強しまして(ポインタ、構造体あたりまで)そろそろC++に移行しようと思ってるんですが
Cの標準関数を完全に使いこなせるようになってから移行すべきでしょうか?
将来はC++のプログラマになりたいんですが、時にはCを使う場面も出てきそうなんで迷ってます。

同じような経験を持つ方、ぜひ感想をお聞かせください。

631 名前:デフォルトの名無しさん :03/05/02 21:22
Cの標準関数なんかあんま関係ないよ。

632 名前:デフォルトの名無しさん :03/05/02 21:35
正直言って標準関数を使いこなせない奴は失格。
処理系依存のものまで覚えろとはいわんが、
ANSI関数ぐらい暗記できなきゃ先は無い。
基礎が大事だから、CをもっとじっくりやってからC++をやれ。

633 名前:デフォルトの名無しさん :03/05/02 21:38
しょっちゅうmanで調べている・・・・失格だな。

634 名前:続き :03/05/02 21:38
ただし、頑固な爺にはなるなよ。

635 名前:632 :03/05/02 21:43
念のため。>>634は俺じゃないよ。

636 名前:デフォルトの名無しさん :03/05/02 21:46
関数を暗記する事ほど不毛な事は無いと思うが……
うーん、まあ、これは人それぞれかも。

637 名前:630 :03/05/02 21:48
そうなんですか・・・Cの仕様や標準関数を完全に暗記することは無理っぽいんで
わからないことがあればその都度リファレンスブックなんかを見たらいいと思ってましたが

うーん 正直めちゃくちゃC++やりたいんですよね 
コンソールアプリでシコシコやるのは平気なんですがちょっとCで次やることが見えなくなってきてるので・・・



638 名前:デフォルトの名無しさん :03/05/02 21:49
>>630
Cがある程度わかるなら、どんどん先へ進んだ方がいいと思うぞ。

639 名前:デフォルトの名無しさん :03/05/02 21:54
>>637
よ う こ そ
チャンチャランチャン チャンチャンチャンチャン♪

640 名前:デフォルトの名無しさん :03/05/02 21:58
>>638に禿同。
基礎的なことがわかっていればとっととC++に移行すべき。

641 名前:デフォルトの名無しさん :03/05/02 22:03
>>640にはげどう
どっぷりCに浸かる前にC++に移行すべき。

642 名前:630 :03/05/02 22:07
じゃあ行きます(w
ほんとは行きたかったんですよね  でもちょっと不安でした みんなサンクス!

643 名前:デフォルトの名無しさん :03/05/02 22:16
C++を飛ばしてC#に逝くというのはどうだろう?

644 名前:デフォルトの名無しさん :03/05/02 22:24
>>643
飛ばす必要はない

630がんがれ

645 名前:デフォルトの名無しさん :03/05/02 22:24
>>636
かと言って、毎回 malloc() で確保した奴を解放するにはどうしたらいいんだっけ ? とか悩んでいたら、仕事にならんだろ。
詳細は、man/help 見るとして、やりたいことと関数名の対応ぐらいは覚えておいた方がいいと思うけど。

646 名前:630 :03/05/02 22:41
そうですね 一応今はCによるアルゴリズムの勉強してまして
malloc()とかfree()とかはなんとなく覚え始めてます。

GW明けぐらいに本を買ってC++はじめます。 この本を選ぶ瞬間がなんとも言えませんなっ!
一応EffectiveC++でも買おうと思ってます。  ほんと楽しみ

647 名前:デフォルトの名無しさん :03/05/02 22:44
中腹越えた辺りから絶壁になってるから気をつけてね。

648 名前:デフォルトの名無しさん :03/05/02 22:49
>>646
必読書スレ(と過去ログ)も参考にすると良い。

649 名前:デフォルトの名無しさん :03/05/02 23:06
そもそもmallocなんか使わねーし

650 名前:デフォルトの名無しさん :03/05/02 23:16
>>649
やっぱりでてきたか...。
そう思って >>645 のメル欄に書いといたんだけど、勝手に釣れちゃうもんなんだな。

651 名前:デフォルトの名無しさん :03/05/02 23:32
そもそもmallocなんか使わねーし

652 名前:デフォルトの名無しさん :03/05/02 23:41
>>650
C++スレだからなあ
俺もC++ではmalloc使わねーし

653 名前:デフォルトの名無しさん :03/05/02 23:57
C#って普及するのかなぁ。
C++で十分なような気がする。


654 名前:デフォルトの名無しさん :03/05/03 00:04
これからどんな言語をやるにしても、C++の知識は無駄にならないと思うぞ。

655 名前:デフォルトの名無しさん :03/05/03 00:08
そう、C++こそが次世代言語のインフラストラクチャーとなるのだ!

656 名前:デフォルトの名無しさん :03/05/03 00:54
boost::poolのmallocメソッドも使わないの?

657 名前:デフォルトの名無しさん :03/05/03 01:00
真っ当な意見と見せかけ、実は詭弁で論点をはぐらかす輩が多々おります。


 その6:一見関係ありそうで関係ない話を始める
 「boost::poolのmallocメソッドも使わないの?」

658 名前:デフォルトの名無しさん :03/05/03 01:01
>>653
一度やってみ。
むっちゃらくだから。
文字列操作とかファイルシステム関係なんて特に。


659 名前:デフォルトの名無しさん :03/05/03 01:08
>>658
monoがモノになれば考えてもいいが

660 名前:デフォルトの名無しさん :03/05/03 05:14
>>659 座布団1枚

661 名前:デフォルトの名無しさん :03/05/03 11:18
>>653
c#は使うのは楽だけど(C++にboost,STL,Loki入れればそうでもないが)、
高性能コンテナを作るのだったらテンプレートのある
C++の方がイイと思うんだけど
ベンチマークとってるヤシいる?


662 名前:デフォルトの名無しさん :03/05/03 12:39
もうC++なんてつかわねーよ!
ごちゃごちゃしすぎてワケわかんね!

これからはC#かJavaだよな、ほんと

663 名前:デフォルトの名無しさん :03/05/03 12:42
JavaならメモリリークもCほど気にしなくていいし
領域外への書き込みによるメモリ破壊もないし
意味不明な例外も発生しないし、いいことずくめだよ


664 名前:デフォルトの名無しさん :03/05/03 12:48
ぜったいいやだ。全部がポインタなんてふざけてる。俺からいわせればそれがバグのもと。でぃぷこぴーとか作るの面倒。
それにくらべてC++は実態とポインタがきちんと区別できるからいい。

665 名前:デフォルトの名無しさん :03/05/03 12:49
静的な型付けが強い言語でテンプレートが無い言語は使う気がしねぇ

666 名前:デフォルトの名無しさん :03/05/03 12:56
無効な領域に書き込んでもエラーにならないで素通りしちゃう言語は駄目でしょ。

667 名前:662-663 :03/05/03 13:17
>>664
実体とポインタの区別をしなきゃいけないのがバグの元。
そもそもオブジェクト(配列やクラス)の複製なんてのは
するべきではない。


668 名前:デフォルトの名無しさん :03/05/03 13:22
>>667
わかったから他のスレでやれヴォケ

669 名前:デフォルトの名無しさん :03/05/03 13:23
>>663
Javaは起動時から死ぬほどメモリ消費するから
メモリリークなんて気にしなくていいね。

670 名前:デフォルトの名無しさん :03/05/03 13:24
>>669
java コマンドのオプションを見たことないんだ。

671 名前:デフォルトの名無しさん :03/05/03 13:25
>>670
ユーザーはjavaコマンドのオプションなんてわざわざ見ないよね。
開発者じゃないんだし。

672 名前:662-663 :03/05/03 13:26
>>666
静的言語??ププッ
あと、JavaにはSTLの代用品がほぼ揃ってる
テンプレート?めんどくせえ…

673 名前:デフォルトの名無しさん :03/05/03 13:26
Javaの話はよそでやれ

●●JAVAって死滅しちゃうの???? PART6●●
http://pc2.2ch.net/test/read.cgi/tech/1047748598/


674 名前:662-663 :03/05/03 13:27
テンプレート?わかんねえ…

675 名前:デフォルトの名無しさん :03/05/03 13:28
最近VB.NETとかJavaとか死滅しそうな言語を他の言語スレに薦めに来る
必死な人が多いね。

676 名前:デフォルトの名無しさん :03/05/03 13:29
>>675
それだけ必死なんだろw
頭がかわいそうな奴は無視に限る

677 名前:デフォルトの名無しさん :03/05/03 13:29
ポインタのポインタみたいな真似ができない言語は嫌だ…

C++が嫌なら、AdaやDをお薦めする。
GCあるし、配列の境界チェックもしてくれるよ。
ともかく一度template(Adaだとgenericだけど)を使ってみるがよろし。

678 名前:デフォルトの名無しさん :03/05/03 13:31
>>677
厨には何言っても無駄だよ
ハナから使う気がないんだし

679 名前:デフォルトの名無しさん :03/05/03 13:33
vector<string> strs;
for(int i=0;i<4;i++)
{
strs.push_back("test");
}

cout << strs.at(5) << endl;

これは境界チェックとは言わないの?

680 名前:デフォルトの名無しさん :03/05/03 13:35
>>677
俺なら素直にJavaかC#をお勧めするよ。
もちろんGCもあるし、配列の境界チェックもしてくれる。
あと少しでGenericも搭載されるしさ。

681 名前:662-663 :03/05/03 13:36
>>677
>ポインタのポインタみたいな真似ができない言語は嫌だ…

プッ

682 名前:デフォルトの名無しさん :03/05/03 13:36
>>679
そんなことより、無効エリアへのアクセスが問題だと思われ。

683 名前:デフォルトの名無しさん :03/05/03 13:36
[]ではなく、わざわざatを使っていると言う点で、
それは境界チェックと言えるかもしれない、
が、
要らぬ輩を召還するような話題はしばらく控えて欲しいもんだな。

684 名前:677 :03/05/03 13:39
>>680
いやその…俺は別にC++でいいから…

templateイラネ厨に対して、「template使ってみろ」と言う時に、
まさか「サポートされるまで待て」と言うわけにいかんでしょ…
だから現時点で使える言語を挙げたのだが…

はいはい、俺が悪かった。

685 名前:デフォルトの名無しさん :03/05/03 13:41
もう使えるよ。正式に取り入れられていないだけ。

686 名前:デフォルトの名無しさん :03/05/03 13:41
テンプレートが無いC++は使う価値が無い

687 名前:デフォルトの名無しさん :03/05/03 13:42
へー

688 名前:デフォルトの名無しさん :03/05/03 13:42
>>686
逆にテンプテートがあるから使う価値があるね

689 名前:デフォルトの名無しさん :03/05/03 13:43
ほー

690 名前:デフォルトの名無しさん :03/05/03 13:43
そういや昔のC++にはテンプレート無かったな。

691 名前:デフォルトの名無しさん :03/05/03 13:43
テンプテーション

692 名前:デフォルトの名無しさん :03/05/03 13:47
お前ら、文字列扱うときになに使ってますか?
char配列とかstringとかAnsiStringとかCStringとかワケワカです。
他にも文字列型ありますか?
どう違って何がいいんですか?
UNICODE使うときはどーしたらいいですか?

693 名前:デフォルトの名無しさん :03/05/03 13:49
string…標準である。標準コンテナとの親和性(iterator)
AnsiString…VCLを使うとき
CString…ATL,WTL,MF(ryを使う時
UNICODE使うときは
basic_string<wchar_t>

694 名前:デフォルトの名無しさん :03/05/03 13:50
つーかwstringな

695 名前:デフォルトの名無しさん :03/05/03 13:50
全部併用してc_str()で受け渡し合えばOK

696 名前:デフォルトの名無しさん :03/05/03 13:51
プッ

697 名前:デフォルトの名無しさん :03/05/03 13:58
一番汎用性があるのはstring、UNICODEの場合wstring。
これだけ使ってればどこでも動くってことでおけ?
あとは用なしですね?

698 名前:デフォルトの名無しさん :03/05/03 13:58
基本的にstd::stringを使おう。
でもIntToStrはboost::lexical_castよりもタイプ数が少なくて便利なので、
std::string("No.:") + IntToStr(number_).c_str()のように使おう。
これをVCLオブジェクトにAnsiStringで渡さなければならなくなったら、
AnsiString((std::string("No.:") + IntToStr(number_).c_str()).c_str())のようにして渡そう。

699 名前:デフォルトの名無しさん :03/05/03 13:58
あと、string、wstringの問題点でもあったら教えてくれ。

700 名前:デフォルトの名無しさん :03/05/03 14:00
>>698
処理系依存。イヤ。

701 名前:デフォルトの名無しさん :03/05/03 14:01
>>700
char*とsprintfで頑張って下さい。

702 名前:デフォルトの名無しさん :03/05/03 14:04
>>701
退化しちゃってんじゃん

703 名前:デフォルトの名無しさん :03/05/03 14:05
うんこどもがlinnyなんつーもんをつくろうとしてるぞ(wwwwwww
http://pc.2ch.net/test/read.cgi/linux/1051890709/l50
http://sourceforge.jp/projects/linny/
http://linny.sourceforge.jp/

Janeなみの2chブラウザすらつくれないやつらにつくれるわけねーだろ(ゲラゲラg


704 名前:デフォルトの名無しさん :03/05/03 14:05
>>701
おい! char*以外は処理系依存なのかよ!?

string、wstringってバグ大丈夫〜?

705 名前:デフォルトの名無しさん :03/05/03 14:23
>>704
698のVCLのことを言ってるのだと思われ

boost::format("%1%%2%") % "No.:" % number;
でいいじゃん。

CString::FormatのようなCの可変引数の実装はC++では歓迎されない。


706 名前:デフォルトの名無しさん :03/05/03 16:11
newで確保した領域は、違う大きさでもう一度newしたら、その大きさになるのでしょうか?
char *p;
p=new char[100];
...
p=new char[200];
それとも、newの一回目の分は確保されっぱなしでdeleteするまで無駄な領域として放置されるのですか?
deleteしないでnewがある関数を何回も呼び続けたら、メモリが無くなってしまうのでしょうか?

このあたりのことが、調べても見つかりません。どうかよろしくお願いします。

707 名前:デフォルトの名無しさん :03/05/03 16:24
>>706
それを「メモリリーク」といいます。


708 名前:デフォルトの名無しさん :03/05/03 16:27
その通り。

709 名前:706 :03/05/03 16:35
>>707-708
ありがとうございました。HPいっぱいありました。>メモリリーク

710 名前:デフォルトの名無しさん :03/05/03 17:34
> HPいっぱい
ってなぁに?

711 名前:デフォルトの名無しさん :03/05/03 17:36
メモリリークについて解説してるページがいっぱいってことでしょ

712 名前:デフォルトの名無しさん :03/05/03 17:37
長時間動かすソフトでなければメモリリークなんて考えなくていいよ。

713 名前:710 :03/05/03 17:45
>>711
あ、そっかぁ。

>>712
志ね

714 名前:デフォルトの名無しさん :03/05/03 17:47
newで作ったクラスを開放しないでいると、
終了時にデストラクタは呼ばれないの?

715 名前:デフォルトの名無しさん :03/05/03 17:48
クラスじゃなくてオブジェクトでは。

716 名前:デフォルトの名無しさん :03/05/03 17:49
呼ばれません。

717 名前:デフォルトの名無しさん :03/05/03 17:51
静的な変数の場合も呼ばれるとは限らないんだっけ?

718 名前:デフォルトの名無しさん :03/05/03 17:53
呼ばれます。(静的なポインタにnewで突っ込むんじゃねぇだろうな?)

719 名前:デフォルトの名無しさん :03/05/03 17:55
>>718
> 静的なポインタにnewで突っ込むんじゃねぇだろうな?
違う違う。

そうか。呼ばれるのか。サンキュ。


720 名前:719 :03/05/03 17:55
呼ばれるタイミングがきちんと決められていないということだったかも・・・

721 名前:デフォルトの名無しさん :03/05/03 18:02
生成の完了と逆順となっております。
でも生成順がきちんと決められてないのなー。

722 名前:デフォルトの名無しさん :03/05/03 18:05
>>675
C++も死滅寸前だけどな

723 名前:デフォルトの名無しさん :03/05/03 18:12
>>722
ま た お 前 か !

いい加減まきらめろ(プ

724 名前:デフォルトの名無しさん :03/05/03 18:17
GWだしね

725 名前:デフォルトの名無しさん :03/05/03 18:27
コンテナをメモリの消費量順に並べてくれませんか?
一番メモリ消費が少ないのはvectorとlistどちらですか?

726 名前:デフォルトの名無しさん :03/05/03 18:28
実相依存な気もするけどvector

727 名前:デフォルトの名無しさん :03/05/03 18:31
どうも。setやmapは他に比べてかなりメモリ消費が多いと考えていいのですか?

728 名前:デフォルトの名無しさん :03/05/03 18:32
オブジェクト本体以外の追加のメモリなら、
map>set>list>deque>vector
と予想できる。
もちろん規格で定まってるわけではない。

729 名前:デフォルトの名無しさん :03/05/03 18:33
vector<deque<list<set<map

多分こうだと思う。 用途が違うのでメモリ使用量を比べてもしょうがない気もするけど

730 名前:デフォルトの名無しさん :03/05/03 18:34
おまえら・・・

731 名前:デフォルトの名無しさん :03/05/03 18:36
>>728-729
ありがとうございました。

732 名前:デフォルトの名無しさん :03/05/03 18:36
>>728>>729は微妙に相性が悪い、に512ビット。

733 名前:デフォルトの名無しさん :03/05/03 18:37
きっと腹違いの兄弟。

734 名前:デフォルトの名無しさん :03/05/03 18:38
>>732
俺もそう思った(笑)

735 名前:デフォルトの名無しさん :03/05/03 21:11
初歩的な質問で申し訳ないですが、WINDOWSのMegProcは静的に宣言しないといけないのですか?
もし動的に宣言できるならば、それをクラスのメゾットとして宣言するにはどうすればいいのでしょうか?


LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )




736 名前:デフォルトの名無しさん :03/05/03 21:40
> 動的に宣言
ってなぁに?

737 名前:デフォルトの名無しさん :03/05/03 21:53
>>735
恐らくスレ違い。

738 名前:デフォルトの名無しさん :03/05/03 21:57
>>735
SetWindowLongかSetPropでthisポインタを保持して
メッセージループでGetして使う。

739 名前:デフォルトの名無しさん :03/05/03 21:57
thisとhwndを関連付けよ

740 名前:デフォルトの名無しさん :03/05/04 01:23
>>735
できないの?
3.1のときの本でwinのクラスライブラリ作ろうってやつは普通に性的でないメソッドを渡してたがなあ。

741 名前:デフォルトの名無しさん :03/05/04 05:23
>>647
wstringはUnicode系とは限らないし、ましてやUTF-16
なんかになるのはWindowsだけだし、国際化の遅れた
OS、あるいはC/C++ localeを見捨てたOSでは、wchar_tが
飾りで実際には使えないこともある。
というわけで、間違っても「w*を使えばUnicodeで国際化で
みんな幸せ」なんて思わないように。

742 名前:デフォルトの名無しさん :03/05/04 05:24
おっと、>>697だった。

743 名前:デフォルトの名無しさん :03/05/04 06:50
Shift-JISやJISの文字列から正しく検索ができる
文字列クラスってあったっけ?
Shift-JISはVC++のCStringがやってくれそうだけど。

744 名前:デフォルトの名無しさん :03/05/04 13:40
AnsiString

745 名前:743 :03/05/05 07:40
>744
ども。結局VC依存、BC依存になるってことか。

746 名前:デフォルトの名無しさん :03/05/05 13:46
名前なし名前空間てどういうふうに使うものなんでしょうか・・・。


747 名前:デフォルトの名無しさん :03/05/05 13:51
2ちゃんのこと?

748 名前:デフォルトの名無しさん :03/05/05 13:53
グローバル変数を外部ファイルに見せたくないとき

749 名前:746 :03/05/05 14:04
>>748
なるへそ・・・。
ところで名前がないだけに
namespaceのブロックの外で

void ???::func(){ /*...*/ }

というような関数の定義はできないということ?

750 名前:デフォルトの名無しさん :03/05/05 14:11
void ???::func は出来ないだろうけど、宣言と同じファイル内であれば
void func で問題ないのではなかろうか(未確認)。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.