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


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

C++相談室 part20
751 名前:デフォルトの名無しさん :03/06/28 15:08
int constはboostかぶれ。

752 名前:デフォルトの名無しさん :03/06/28 15:12
http://www.google.co.jp/search?num=50&q=%22static+const+int%22
http://www.google.co.jp/search?num=50&q=%22static+int+const%22  ←少ないYO

753 名前:デフォルトの名無しさん :03/06/28 15:54
http://www.google.com/search?q=%22const+int%22 → 120000
http://www.google.com/search?q=%22int+const%22 → 37400

http://www.google.com/search?q=%22constant+integer%22 → 9580
http://www.google.com/search?q=%22integer+constant%22 → 26100

どっちがいいんでしょうねぇ?

754 名前:デフォルトの名無しさん :03/06/28 16:01
C++は constantではなくconst、intergerではなくint だって知ってる?

755 名前:デフォルトの名無しさん :03/06/28 17:20
どっかに書いてある?と言われても、あの分厚いプログラミング言語C++の
中から探し出すのは厳しいな。
書いてあったとしても、そんなとこにしおり挟んであるわけじゃないし。

ところで、ポインタの*は型名に付ける派?それとも変数につける派?
(typedefする派ってのは無しの方向で)

756 名前:デフォルトの名無しさん :03/06/28 17:27
>>755
型名に付けるって typedef Hoge * PHoge; とかかと思ったらtypedefなしで
すぐ意味わからんかった。

スペースを入れる場所の話ね? 一応4種類考えられるが
A) type*var;
B) type* var;
C) type *var;
D) type * var;
コーディングマナーかコーディング規約スレのネタでは。
(漏れはDだが、通常typedefの中で。)

757 名前:デフォルトの名無しさん :03/06/28 17:29
C 使いは C が、C++ 使いは B が多い気がする。

758 名前:デフォルトの名無しさん :03/06/28 17:37
説明する時には「int*型の〜」ってなるから int* var (B)だな。

759 名前:デフォルトの名無しさん :03/06/28 17:41
と言ってみたものの、確信はない

760 名前:デフォルトの名無しさん :03/06/28 17:43
>758
int* a, b;
見たいにする香具師が出るから、もれは
int *a, *b;

761 名前:デフォルトの名無しさん :03/06/28 17:45
>>760
×
int* a, b;


int* a;
int* b;


762 名前:デフォルトの名無しさん :03/06/28 17:50
C++第3版にも出てた気もするな、このネタ。
意味的には型のはずだが、C言語からの仕様で変数宣言上では型に対する修飾は変数に
付くのでややこしいね。
type* a, b;
こうしたときにbが紛らわしくなってしまう。
これを予防するには、1行1変数方式とtypedef方式が考えられる。

1行1変数)
type* a;
type b;

typedef)
typedef int* ptype;
ptype a, b; /* 上記と意味は違うが、間違えにくい */

C++的には初期化をなるべく遅らせる観点からも1行1変数が望ましいとされてるね。
Cではtypedef方式になるか。

763 名前:デフォルトの名無しさん :03/06/28 19:02
>>762
C++的には初期化をなるべく遅らせる観点からも1行1変数が望ましいとされてるね。

へー

764 名前:760 :03/06/28 19:57
>761
いやいや、
int * a, b;

見たいな間違いを犯すやつが出てくるから

int *a, *b;
にしろと…

765 名前:デフォルトの名無しさん :03/06/28 20:12
>>764
そのaとbはどうやって初期化するつもりだ?

766 名前:760 :03/06/28 20:21
>765
う、そっか

int* a = NULL;
int* b = NULL;

767 名前:デフォルトの名無しさん :03/06/28 20:39
>>766
どんまい

768 名前:デフォルトの名無しさん :03/06/28 21:11
>>766
int *a = NULL, *b =NULL;

じゃダメなのか?

769 名前:デフォルトの名無しさん :03/06/28 21:17
>>768
コンパイルして見

770 名前:デフォルトの名無しさん :03/06/28 21:40
>>769
コンパイルした

何がダメなの?

771 名前:デフォルトの名無しさん :03/06/28 21:48
>>764
a,bそれぞれの型名は何?

772 名前:デフォルトの名無しさん :03/06/28 21:50
>>764
両方ともint *だと思うが?

773 名前:デフォルトの名無しさん :03/06/28 22:06
type* varなんつー邪道な書き方する奴がいるから悪いんだよな・・・
かく言う俺もだが。
757の指摘はあってるかもしれん。
ちょっと考えればわかることなのにな。
class A{}* a, b;
だったら、誰がどう見てもbはA*じゃなくてAになるからな。
Aを定義済みにすれば
A* a, b; でもbがAになることくらい容易に理解できる。

774 名前:デフォルトの名無しさん :03/06/28 23:06
>>769
もしかして >>768 のような書き方を知らないのか?

775 名前:デフォルトの名無しさん :03/06/28 23:24
C++ってnull=0だから入りそうな感じだね!
入らないのか。

776 名前:デフォルトの名無しさん :03/06/29 00:19
レベルが低い話題で盛り上がるスレですか?

777 名前:デフォルトの名無しさん :03/06/29 00:22
>>772
だったら何故型名と変数名の間に区切り(空白)を入れない?

778 名前:デフォルトの名無しさん :03/06/29 00:24
>>772
あと、>両方ともint *だと思うが?
だったら、
int *a, *b;

型名a, *b

となるのが不自然だ。bの前の*って一体何なんだ?

int*型なら

int* a;
int* b;

型名 a;
型名 b;

の方がよっぽど自然だ。

779 名前:デフォルトの名無しさん :03/06/29 00:29
そんな低レベルな事が気になるならtypedefしろよ…

780 名前:デフォルトの名無しさん :03/06/29 00:34
>>778
そもそも、変数の宣言が
型名 変数名;
と思ってる時点で大間違いなんだが。
関数ポインタはどう書くつもりでいるんだ?
int *a;
は式*aの結果がint型という意味だ。

781 名前:デフォルトの名無しさん :03/06/29 00:37
typedef すると const の振る舞いがアレだよねー。

782 名前:デフォルトの名無しさん :03/06/29 00:38
>>778
引数以外での数少ない','の出番を奪わないで下さい

783 名前:デフォルトの名無しさん :03/06/29 00:42
>>781
アレって何?

784 名前:デフォルトの名無しさん :03/06/29 00:43
>>783
typedef int * pint;

int a;
const pint b = &a;

*b = 0; // 書けてしまう
b = &b; // 代入ができない

785 名前:デフォルトの名無しさん :03/06/29 00:44
>>784
最後、b = &a; ね

786 名前:デフォルトの名無しさん :03/06/29 00:44
だからconstは右から使えと何度(ry

787 名前:デフォルトの名無しさん :03/06/29 00:44
>>781
typedef int const ic ;
typedef ic * icp ;
typedef icp const icpc ;
icpc *a ;
こうやって、const すべき所に const しやすいから、
const する時こそ typedef 使うべきだと思うな…

788 名前:デフォルトの名無しさん :03/06/29 00:47
>>784
何を当たり前のことを・・・

789 名前:デフォルトの名無しさん :03/06/29 00:54
テンプレート絡み以外でtypedefなんて使わないしなぁ。

790 名前:デフォルトの名無しさん :03/06/29 00:56
int *a = NULL; は * が間接参照演算子に見えて気持ち悪い。記憶違いかも
しれんけど、C++ は int* a, b; を int *a, *b; と等価にしたかったが C
との互換のためにやむを得なかったみたいな話、どこかになかったっけか。

791 名前:デフォルトの名無しさん :03/06/29 01:00
Cのしがらみを断ち切ったexp(C)の開発が望まれる

792 名前:デフォルトの名無しさん :03/06/29 01:01
>>787
const なところは const と書いてあった方が
分かりやすくていいと思うが...。

793 名前:デフォルトの名無しさん :03/06/29 01:03
constはIDEがキーワードで色分けしてくれるしな

794 名前:769 :03/06/29 01:03
>>774
はぁ?
質問しないで試して見ろという意味で書いたんだよ

795 名前:デフォルトの名無しさん :03/06/29 01:05
>>794
それを言ったらそもそも768は質問じゃないだろ

796 名前:デフォルトの名無しさん :03/06/29 01:10
>>790
int* a, b; を int *a,*b; を等価にするなら
配列の宣言の仕方も
char[10] s1, s2; になるのだと思う…
で、こんな宣言の仕方は、Cをやってる俺にとっては、とってもキモイ…

797 名前:デフォルトの名無しさん :03/06/29 01:12
pointerキーワードを作ればよかったんだよ

798 名前:デフォルトの名無しさん :03/06/29 01:12
>>796
でも関数ポインタとかが
void (*)(int,char) hoge, hage;
とかになって、初心者にもわかりやすいかもよ。

799 名前:796 :03/06/29 01:15
>>798
それは一理あるかも…

800 名前:デフォルトの名無しさん :03/06/29 01:15
C++がCと宣言変わってたら誰も使わなかっただろうな・・・

801 名前:デフォルトの名無しさん :03/06/29 01:19
typedef char T[10]; と
typedef char[10] T;
なら断然後者がいい。

802 名前:デフォルトの名無しさん :03/06/29 16:23
例外処理が使えない環境でのエラー処理は
どうするのが良いんでしょうか。
戻り値、ってのは基本だと思うけれど、コンストラクタで使えなかったり、
いちいちテストするのは面倒だったりするので・・・
setjmp/longjmp なんかを使って、系統的なエラー処理ってできませんかね?


803 名前:デフォルトの名無しさん :03/06/29 17:33
assert

804 名前:デフォルトの名無しさん :03/06/29 18:36
あなたが探してるのってこれだよね?でも眠れなくなるよ!
http://nuts.free-city.net/index.html

805 名前:デフォルトの名無しさん :03/06/29 18:48
C++でsetjump,longjumpは使用禁止でげす

806 名前:貧乏脱出!これであなたはお金持ち :03/06/29 18:48
普通に働いてお金持ちになれるのは全体の1%のみって本当!?
本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
http://www.adultshoping.com/addclickport.cgi?pid=1053353765(直リン不可)

///////// ////////

807 名前:デフォルトの名無しさん :03/06/29 18:48
>>805
uは余計

808 名前:デフォルトの名無しさん :03/06/29 18:49
>>802
この期に及んで例外処理なしって
環境のほうを見直すべきな感じだが

809 名前:デフォルトの名無しさん :03/06/29 18:57
>>808
はげどうです

810 名前:デフォルトの名無しさん :03/06/29 20:44
関数の引数にデフォルト値を持たせる場合に関してなんだが…、
  ISO/IEC 14882:1998(E) -- C++ -- Declarators
  http://www.kuzbass.ru/docs/isocpp/decl.html

  8.3.6 - Default arguments [dcl.fct.default]
の部分にある
> -4- ……In a given function declaration, all parameters subsequent to a parameter with
> a default argument shall have default arguments supplied in this or previous declarations.
は、part19(前スレ)の726-728
  http://pc2.2ch.net/test/read.cgi/tech/1052625846/726-728
の話だよね。で、それに続く以下の文:
> A default argument shall not be redefined by a later declaration (not even to the same value).
の文は、「同じscope内では同じ引数に対してdefault値を(たとえ同じ値であって
も)複数回指定することはできない」なんだろうけど…、コンパイルできたぞ
(@_@)?!!

なんで?

811 名前:810 :03/06/29 20:47
あ、使用したコンパイラは FreeBSD付属のg++(2.95.4相当)です。

812 名前:810 :03/06/29 20:55
以下のソースコード(a1.cpp):
----------(ここから)
#include <iostream.h>

/*
* プロトタイプ宣言
*/
//int foo ( int a , int b , int c ) ;
int foo ( int a , int b , int c=3 ) ;
int foo ( int a=1, int b=2, int c=3 ) ;/* 第3引数(c)のデフォルト値を再定義 */

/*
* 定義
*/
int foo ( int a, int b, int c )
{
return (a+b+c);
}

int main ( void )
{
cout << "foo()=" << foo() << endl ;
return 0 ;
}
----------(ここまで)


  % g++ -o a1 a1.cpp
のようにしてコンパイルしたが全く警告・エラーが出ない。。。

813 名前:デフォルトの名無しさん :03/06/29 20:58
>>803
それはjava1.4でしょ!
Cには#if #else #ifdefがあるでしょ!

814 名前:810 :03/06/29 20:58
g++の「独自拡張」なのでしょうか??

815 名前:デフォルトの名無しさん :03/06/29 21:30
>>810
とりあえず、3.2ではエラー出たから、バグなんじゃない?

816 名前:デフォルトの名無しさん :03/06/29 23:55
>>815
バグというか、古すぎてちゃんと仕様に準拠してないか、
昔は再定義に関する仕様が特になかったのか、
そんなところでは。

817 名前:デフォルトの名無しさん :03/06/29 23:57
>>813
assert を知らないの?
<cassert> ヘッダファイルでも探してみなされ。

818 名前:デフォルトの名無しさん :03/06/30 00:05

BOOL Apl::InitApp( int _ii, double _dd )




こういう「 _ 」の使い方はOK?

819 名前:デフォルトの名無しさん :03/06/30 00:12
>>818
規格的にはOK。
だが、人に見せたときに要らぬ物議を醸さぬよう、
そういう使い方でもやめたほうがいい。

820 名前:デフォルトの名無しさん :03/06/30 00:18

良いとはいえない。
激しく既出。
それより、sageで質問じゃ、だれも気づかねーぞ。
会議中にボソボソ独り言いってんのとかわんね。


821 名前:デフォルトの名無しさん :03/06/30 00:32


822 名前:デフォルトの名無しさん :03/06/30 00:58
int p =
      !!  !   !  !  !    !
      ! ! !  !  !  !    !
      ! ! !  !  !  !    !
      !  !!  !  !  !    !
      !  !   !!!!!!!  !!!!!!!  !!!!!!!1;

823 名前:デフォルトの名無しさん :03/06/30 01:25
p == 0ですか?

824 名前:デフォルトの名無しさん :03/06/30 08:07
int* p =
      !!  !   !  !  !    !
      ! ! !  !  !  !    !
      ! ! !  !  !  !    !
      !  !!  !  !  !    !
      !  !   !!!!!!!  !!!!!!!  !!!!!!!1;

825 名前:デフォルトの名無しさん :03/06/30 10:54
p == 0ですか?

826 名前:デフォルトの名無しさん :03/06/30 11:55
>824
ぬ、ぬるぽ

827 名前:デフォルトの名無しさん :03/06/30 13:15
>>821-826
ガッガッガッ(ry
AAも略

828 名前:デフォルトの名無しさん :03/06/30 13:25
>>818
_ は後ろに付けた方がいいと思う。


829 名前:818 :03/06/30 13:30
>>828
あ、そんな発想なかったw
同じ名前の変数の場合、関数側の変数の名前迷うんだよね

830 名前:デフォルトの名無しさん :03/06/30 16:39
>>818
同じ名前にすりゃいいじゃん。
別に問題ないよ。

831 名前:818 :03/06/30 16:47
>>830
class{
HWND hwnd;
〜〜
};

winapi winmain(〜〜〜)
{
gethwnd(hwnd);
}

void gethwnd(HWND hwnd)
{
hwnd=hnwd;
}

OK?

832 名前:デフォルトの名無しさん :03/06/30 16:53
>>831
普通に間違ってるぞ。
void gethwnd(HWND hwnd)
{
this->hwnd = hnwd;
}
だろ。釣りか?

833 名前:_ :03/06/30 16:53
http://homepage.mac.com/hiroyuki44/jaz04.html

834 名前:832(!=830) :03/06/30 16:54
いや、待てよ。gethwndがclassのメンバ関数とは限らないな。
もうちょっとちゃんと書け>>>831

835 名前:デフォルトの名無しさん :03/06/30 16:55
>>830
問題はないがデバッグがしづらくないか?

836 名前:デフォルトの名無しさん :03/06/30 17:04
hnwd

837 名前:デフォルトの名無しさん :03/06/30 17:32
#include <iostream>

class Interface
{
public:
virtual ~Interface() {}
virtual void method() const = 0;
};

class MixIn : virtual public Interface
{
public:
virtual ~MixIn() {}
virtual void method() const {
std::cout << "OK" << std::endl;
}
};

// 続く


838 名前:デフォルトの名無しさん :03/06/30 17:35
>>837 からの続き

class Concreate : virtual public Interface,
private MixIn
{
public:
// using MixIn::method;
};

int main()
{
Interface *i = new Concreate;
i->method(); // OK
delete i;

Concreate c;
c.method(); // コンパイルエラー
}

GCC 3.2.2 で、Concreate::method() が private 扱いになって、
コンパイルエラーになるのは、正しい仕様なの?

using MixIn::method; をコメントアウトすると、
ちゃんと動くのはなんかわかる気がするけど。


839 名前:デフォルトの名無しさん :03/06/30 17:49
>>835
なんで?
グローバル変数と同じにするわけじゃないんだから
問題ナッシングでしょ。

840 名前:818 :03/06/30 17:59
>>832
あ、thisがあったか・・・
プログラムかなり書きなおさな・・・

841 名前:デフォルトの名無しさん :03/06/30 21:06
>>838
class Concreate : virtual public Interface,private MixIn{
親クラスは全部publicなのに、ここでなんでprivateで継承するんだ?
サブクラスは全部privateになるだろ!


842 名前:デフォルトの名無しさん :03/06/30 22:14
>>831,832
> hnwd
hwndだろ。ネタか?

843 名前:デフォルトの名無しさん :03/06/30 22:21
くだらん突っ込みを・・・

844 名前:デフォルトの名無しさん :03/06/30 22:26
#define TREU TRUE
#define hnwd hwnd

// (゚д゚)ウマー?

845 名前:デフォルトの名無しさん :03/07/01 02:31
>>841
MixIn へのキャストを禁止したいのよ。Interface の実現に、
MixIn を利用しているかどうかは public な情報ではないので。

>>838 については、よく考えてみると、

class Concreate : virtual public Interface
{
private:
void method() {}// Interface::method() としては外部から呼べる
};

というのと同じパターンか。

846 名前:学生C経験1ヶ月 :03/07/01 08:46
VC++で _T("文字列")っていつ使い方をしている処理を見かけるのですが、
_Tって何の処理をしているんですか?
ここでつまづいてます。
ヘルプみてもよーわかりませんのでどなたかご指導ください。

847 名前:デフォルトの名無しさん :03/07/01 08:59
>>844
\(≧▽≦)丿ウマー!!

848 名前:デフォルトの名無しさん :03/07/01 09:27
>>847
マズー

849 名前:デフォルトの名無しさん :03/07/01 09:27
>>846
char/char*とwchar_t/wchar_t*の切り替えを透過的に行う為の仕組み。
ヘッダファイル tchar.h を見てみな

850 名前:デフォルトの名無しさん :03/07/01 11:55
>>847
#define retrun return
を忘れているからマズー

851 名前:デフォルトの名無しさん :03/07/01 12:59
class CBase {
public:
  typedef void (CBase::*ClassProc)(void);
  ClassProc ptr;
  CBase(void) {
    ptr = Proc1;
  }
  virtual void Proc1(void) {
    printf("CBase::Proc1\n");
  }
};
class CFoo : public CBase {
public:
  CFoo(void) {
    ptr = (ClassProc)Proc1;
  }
  virtual void Proc1(void) {
    printf("CFoo::Proc1\n");
  }
};
int main(void) {
  CBase* lpBase1 = new CBase();
  (lpBase1->*lpBase1->ptr)();  // CBase::Proc1() の呼び出し

  CBase* lpBase2 = new CFoo();
  (lpBase2->*lpBase2->ptr)();  // CFoo::Proc1() の呼び出し

  return 0;
}
CFoo の ptr = (ClassProc)Proc1;
このキャストは安全?

852 名前:デフォルトの名無しさん :03/07/01 14:14
>>822
>>824
スパルタ斉木

853 名前:デフォルトの名無しさん :03/07/01 15:31
>>851
その代入は不必要。
Proc1 は仮想関数だから、勝手に呼び分けてくれる。

854 名前:851 :03/07/01 15:53
>>853
うん。単純にCFoo::Proc1を呼び出すんならこんな面倒な事しないね。
やってる事がうまく伝わってなかった模様。
関数ポインタ経由で呼び出してるのは呼び出し元に修正を加えずに、
クラス内で呼び出す関数をifなどの判定なしに切り替えられるようにする為だよ。
CFoo::Proc2が定義されていると仮定して、
ptr = (ClassProc)Proc2;
とすれば次の呼び出しからCFoo::Proc2が呼ばれるようになる。

855 名前:853 :03/07/01 16:45
>>854
こちらの言ってる事も伝わってない気が。
メンバ関数ポインタは仮想関数の呼び分けも
ちゃんとやってくれるので、
CBase で既に ptr に代入したのに
CFoo のコンストラクタで再代入する必要は無いよ、
ということが言いたかった。

代入するメンバ関数は常に &CBase::Proc1 のように
&CBase:: というのも書かないと文句言われるけど、
CBase:: がついているからといって CBase::Proc1 しか呼ばれないわけじゃなくて、
CFoo のインスタンスから ptr を使って呼ぼうとすると
ちゃんと CFoo::Proc1 が呼ばれる。

856 名前:デフォルトの名無しさん :03/07/01 16:57
>>855
CBaseコンストラクタ内ではProc1はまだCBase::Proc1を指してしまっているのでは?

857 名前:853 :03/07/01 17:07
>>856
コンストラクタ内で仮想関数がちゃんと呼べないのは当たり前。
まだコンストラクタが呼ばれてないクラスのメンバ関数が呼べたら大変だ。
CFoo のコンストラクタが呼ばれれば
仮想関数テーブルが初期化されて、
これでちゃんと CFoo::Proc1 が呼べるようになる。

858 名前:856 :03/07/01 17:20
>>857
すまん、頓珍漢言ってた。
&CBase::Proc1は特定のインスタンスに依存しないもんな。
コンストラクタ内でどうとかは無関係だった。

859 名前:デフォルトの名無しさん :03/07/01 20:52
.netでは、#include<iostream.h>
の書き方サポートされていないの?

860 名前:デフォルトの名無しさん :03/07/01 20:55
#define defalt default

構文的にエラーじゃないのが痛い>default間違い

861 名前:デフォルトの名無しさん :03/07/01 20:55
できますよ

862 名前:デフォルトの名無しさん :03/07/01 20:57
C実践プログラミングの間違い探しにあったな。
見つかるまでかなり時間がかかった。
まさかdefault:がdefualt:になっているとはね。

863 名前:デフォルトの名無しさん :03/07/01 21:07
>>860
仕様書にも注意しろと書いてあったっけ。

864 名前:デフォルトの名無しさん :03/07/01 21:14
一部のエディタでは予約語と同じで
色が変わるからわかるけど > defualt

865 名前:デフォルトの名無しさん :03/07/01 21:18
>>864
本に書いてあるだけじゃ分からないだろ

866 名前:デフォルトの名無しさん :03/07/01 21:24
まぁ、ちゃんとしたコンパイラなら
「defalt というラベルは使われていません」
とかいう警告が出るので大丈夫なんじゃない?

867 名前:デフォルトの名無しさん :03/07/01 21:53
コンパイルオプションつかっていますか?

868 名前:デフォルトの名無しさん :03/07/01 21:54
-oとか-cとか

869 名前:デフォルトの名無しさん :03/07/01 22:14
-ansi -pedantic -Wall

870 名前:851 :03/07/01 22:40
>>855
CFooでしか定義されていないCFoo::Proc2を最初の呼び出しで呼ばせたい場合にはCFooのコンストラクタで
ptr = (ClassProc)Proc2;
が必要になってくるけど、
CFoo::Proc1の場合はCBaseで既に初期化されており、インスタンスによる呼び分けがされるので必要なし、と。
なるほどご指摘の通り。

で、本題のキャストだけどこれに触れてる人が居ないって事は気にする必要なし?
本当はキャスト無しで突っ込める方法があればいいんだが。

871 名前:デフォルトの名無しさん :03/07/01 22:57
>>870
CBase のメンバ関数へのポインタなんだから、
CFoo にしかない関数を突っ込もうとするのはどうかと。
どうしてもやりたければ、仮想関数にでもしとき。

872 名前:851 :03/07/01 23:23
>>871
戻り値、引数が一致しててもマズイんかな。
仮想関数となればCFooを拡張したらCBaseも拡張しなくては(ry
普通の関数ポインタにstaticなメンバ関数突っ込むしか・・・。

873 名前:デフォルトの名無しさん :03/07/01 23:28
おねがいtchar

874 名前:デフォルトの名無しさん :03/07/01 23:29
>>872
まぁ、注意して使えば一応問題は無いと思うけど。

875 名前:デフォルトの名無しさん :03/07/02 20:57
おながい darwin

876 名前:デフォルトの名無しさん :03/07/03 02:54
STLでvectorのメモリを余分な解放するのにテンポラリのvectorとswap、
ってのがあるけどmapやlist、stringの場合はどうなんでしょ?

877 名前:デフォルトの名無しさん :03/07/03 03:04
>>876
メモリが連続している必要が無いlistとmapには余分なメモリは無いかと。
stringはvectorと同じでそ。

878 名前:876 :03/07/03 03:12
>>877
listは確かにそうかな〜と思えるのだがmapは実装によってはvector使ってる
場合もあるんでないの?

879 名前:デフォルトの名無しさん :03/07/03 03:26
>>878 ムリ。

880 名前:デフォルトの名無しさん :03/07/03 03:26
>>878
そんな実装してあるSTLはPCごと窓から投げ捨てろ。

881 名前:876 :03/07/03 03:32
>>879 >>880
そうなん? じゃSTLportのstlport/stl/_hashtable.hの

# ifndef _STLP_INTERNAL_VECTOR_H
# include <stl/_vector.h>
# endif
(中略)
typedef __vector__<void*, _M_node_ptr_allocator_type> _BucketVector;

というのは無問題? それとも投げ捨てる?

882 名前:デフォルトの名無しさん :03/07/03 03:33
>>880
どうやって窓から投げ捨てればいいの?

883 名前:876 :03/07/03 03:33
>>881 あーつまりhash_mapの実装ですスマソ

884 名前:_ :03/07/03 03:50
http://homepage.mac.com/hiroyuki44/jaz09.html

885 名前:デフォルトの名無しさん :03/07/03 05:19
>A Hashed Associative Container is an Associative Container
>whose implementation is a hash table.

何か問題あるのか?

886 名前:876 :03/07/03 06:42
>>885 ん? アタシに聞いてるのかい? >>883はmapとhash_mapじゃ普通
実装違うはずだからmapではvectorは使われないのねスマンということ。
(つまりメモリ使いすぎにならないと)
であらためて聞きますがhash_mapがvector使ってる場合は全要素新しい
方へコピーとかしかないのかな?

887 名前:デフォルトの名無しさん :03/07/03 08:55
>>886
コード読んでないけど、
Hash テーブルに vector 使ってるだけなんじゃないの?
もしそうなら、Hash テーブルのサイズを変えない限り
再確保なんか起こらないと思われ。

888 名前:デフォルトの名無しさん :03/07/03 11:40
listやmapの要素にプールアロケータを使う実装がありえないとはいえないか?

889 名前:デフォルトの名無しさん :03/07/03 21:21
ソースが公開されているC++で書かれた良いプログラムを教えてください。

890 名前:デフォルトの名無しさん :03/07/03 21:23
http://www.k-514.com/
ボッキンキン

891 名前:デフォルトの名無しさん :03/07/03 21:34
>>889
boost

892 名前:デフォルトの名無しさん :03/07/03 21:46
>>891
レスありがとうございます
ライブラリはコード書いて使ってみながら読まないとだめですよね

893 名前:デフォルトの名無しさん :03/07/03 21:58
>>892
そんなことはない

894 名前:デフォルトの名無しさん :03/07/03 22:32
例外を投げないのにいちいちthrows書くのがめんどいんですけど
みなさんどの程度手抜きしてます?

895 名前:デフォルトの名無しさん :03/07/03 22:53
例外仕様は書かない

896 名前:デフォルトの名無しさん :03/07/03 23:42
class Super {
public:
  Super(int i){}
};

class Sub1 : public Super {
public:
  Sub1(string s) : Super(10) {}
};

class Sub2 : public Super {
public:
  Sub2(double* d) : Super(20) {}
};

class Sub3 : public Super {
public:
  Sub3(int i, double d, string s) : Super(30) {}
};

みたいにサブクラスのコンストラクタのシグネチャを変更しても問題ないのけ?

897 名前:デフォルトの名無しさん :03/07/03 23:44
>>896
ない

898 名前:デフォルトの名無しさん :03/07/05 01:24
質問させてください。
クラスAとクラスBとの間で相互に型変換ができるように、
キャストをオーバーロードすることは可能でしょうか?

899 名前:デフォルトの名無しさん :03/07/05 01:34
意味がわからん
struct A{
A(B &b){...}
operator B(){...}
};
ということか?

900 名前:デフォルトの名無しさん :03/07/05 01:37
>>898
// a.h
class B;
class A {
public:
 operator B();
};

// b.h
class A;
class B {
public:
 operator A();
};

901 名前:デフォルトの名無しさん :03/07/05 01:39
if ( get(900) ){
std::cout<< "zusa-" << std::endl;
}else{
throw std::exceptin("abo-n");
}

902 名前:901 :03/07/05 01:43
catch( ... ){
std::cout << "鬱だ氏のう" << std::endl;
int* hoge = new int[0xffffffff];
}

903 名前:デフォルトの名無しさん :03/07/05 01:43
try {
 run(901);
} catch(std::exceptin& e) {
 std::cout << e.what() << std::endl;
}

`exceptin' undeclared in namespace `std'

904 名前:デフォルトの名無しさん :03/07/05 02:21
ちとワロタ

905 名前:デフォルトの名無しさん :03/07/05 12:15
(・∀・)エクセプチン!

906 名前:デフォルトの名無しさん :03/07/05 14:46
Java見たいにC++の試験ってないの?

907 名前:デフォルトの名無しさん :03/07/05 15:23
試験に通ったかどうかが何かの目安になるような
単純な言語じゃないからねえ・・・

908 名前:デフォルトの名無しさん :03/07/05 15:29
まあ試験あると参考書が出るのはいいかも

909 名前:デフォルトの名無しさん :03/07/05 17:32
C++の参考書なんざ十分あるだろ

910 名前:デフォルトの名無しさん :03/07/05 18:31
>>909
ほとんど、うんこ。

911 名前:デフォルトの名無しさん :03/07/05 18:45
gcc 2.91.57 だとローカルクラスから親クラスの private メンバにアクセスできるんだけど、
VC++ 6.0 だとアクセスできません。
規約的にはどちらが正しいですか?

912 名前:デフォルトの名無しさん :03/07/05 18:46
>>911
ローカルクラスとは?
クラス内クラス、インナークラスのことかな?

913 名前:911 :03/07/05 19:10
>>912
レスありがとございまつ。
ファンクションローカルでつ。
int cameraPinvoke(CJoke joke)
{
 struct Local
 {
  int hogya;
 } local;
 return local.hogya;
}
こんなんでつ。


914 名前:デフォルトの名無しさん :03/07/05 19:37
>>913
質問とコードが矛盾してないか?
>ローカルクラスから親クラスの private メンバにアクセス


915 名前:911 :03/07/05 19:52
>>914
スイマセン。ローカルクラスって何?って言われたので、はしょってそれだけに対して答えました。
class CCamera {
private:
 CFilm* m_pFilm;
public:
 void Reject();
};

void CCamera::Reject() {
 struct Guardian {
  CCamera& parent;
  Guardian(CCamera& camera) : parent(camera){}
  ~Guardian() { delete parent.m_pFilm; parent.m_pFilm = NULL; }
 } guardian(*this);
}
やりたいのはこんな感じでつ。よろしくおながいします。

916 名前:デフォルトの名無しさん :03/07/05 19:57
>>915
アクセスできるほうがおかしい気が

917 名前:デフォルトの名無しさん :03/07/06 04:27
最近スレの進みが悪いぞage

918 名前:デフォルトの名無しさん :03/07/06 05:25
>>911
ローカルクラスより先に
アクセス制御の使い方しっかり覚えて。

919 名前:デフォルトの名無しさん :03/07/06 10:28
>>915
ローカルにする必要性がわからない。

920 名前:デフォルトの名無しさん :03/07/06 17:07
delete[]はnew[]した配列要素数を知っているのだから
これを問い合わせることはできる気がする

そこで一応お聞きします。
newした要素数を得る方法を教えてください


921 名前:標準じゃないけど :03/07/06 17:15
_msize(buffer) / sizeof(T) とか

922 名前:デフォルトの名無しさん :03/07/06 17:22
VCで、デストラクタが存在する場合のみ。
reinterpret_cast<int*>(classvector)[-1]

923 名前:デフォルトの名無しさん :03/07/06 17:35
やっぱきいてみるもんですね。
教えてくれてありがとう。
標準であってもよさそうですけど無いんですね。


924 名前:名無し :03/07/06 17:50
>delete[]はnew[]した配列要素数を知っているのだから
>これを問い合わせることはできる気がする

言われてみれば

925 名前:889 :03/07/06 18:14
889ですがソースが公開されてるC++で書かれたゲームのプログラムとかありませんか?

926 名前:デフォルトの名無しさん :03/07/06 18:17
素人が作った超大作があったような気がしたが…誰か思い出してくれる人は
いないのかのぅ。

927 名前:デフォルトの名無しさん :03/07/06 18:21
ありますよ

928 名前:デフォルトの名無しさん :03/07/06 18:21
>素人が作った超大作

さて、どうしたものか。

929 名前:デフォルトの名無しさん :03/07/06 18:22
C++汎用のゲームか

930 名前:デフォルトの名無しさん :03/07/06 20:01
>>920
> delete[]はnew[]した配列要素数を知っているのだから
そうとも限らん。デストラクタを持たない POD な構造体なんかを new[] したときは
全体のサイズだけわかっていればよいので要素数は覚えていないこともある。
>>922 が書いてるのはまさにこのことだね。

931 名前:デフォルトの名無しさん :03/07/06 23:30
システム内部までいけば確保したメモリのサイズが分かるんじゃとか思ったけど、
要求したサイズと等しいサイズを確保するとは限んないね
(多分ある数の倍数まで拡張されるやね)。

932 名前:デフォルトの名無しさん :03/07/06 23:33
最近new[] なんて使わないなぁ

933 名前:デフォルトの名無しさん :03/07/07 01:35
error C2679: 二項演算子 '<<' : 型 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' の右オペランドを扱う演算子は定義されていません。

#include <iostream>
をインクルードしているのですが・・・

using namespace std;

void aaa( const string ss );

int main()
{
char ss[80]="あいうえお";

aaa(ss);

return 0;
}

void aaa( const string ss )
{
cout << ss << endl;
}

string型にchar型を渡した時にどう動作するかの確認プログラムです

934 名前:デフォルトの名無しさん :03/07/07 01:41
>>933
当然 #include <string> もしとるとして...。

VC6 はそれに対応してなかった気もするなぁ。
いつも ss.c_str() 使ってた気がする。
うろ覚えだけど。

935 名前:デフォルトの名無しさん :03/07/07 02:02
>>934
<string>は、この場合関係ないなーと思ってしなかった・・・(ヒンズースクワット2回の刑)
知らない方だから、<<やられてもこまるよぼけという意味だったんですね
const String ssの引数の関数にchar型の配列渡してもちゃんとうまくいきました。
自動でキャストしてくれるみたい。
この逆はうまくいかないけどね(あたりまえだ)。

936 名前:デフォルトの名無しさん :03/07/07 02:17
クラスの変数で、const宣言している変数なら公開しても大丈夫ですよね?

937 名前:デフォルトの名無しさん :03/07/07 02:21
>>934 自己レス
c_str 使ってたの VC5 だったかもしんない。

938 名前:デフォルトの名無しさん :03/07/07 02:24
>>936
別に inline 関数で getter 作っとけばいいんじゃない?

いつどのように加工して外部に公開するか分かんないんだし、
その時にコードを変えないで済むための保険になるっしょ?

939 名前:デフォルトの名無しさん :03/07/07 02:38
>>938
確かにそうですね
絶対にかえないと思っても変えることはありますしね

940 名前:デフォルトの名無しさん :03/07/07 09:00
void aaa( const string ss );

void aaa( const string& ss );

にしたほうがいいのでは?

941 名前:デフォルトの名無しさん :03/07/07 10:24
>>940
参照っすか?
そうですね
確かにそのほうが良いかも

942 名前:デフォルトの名無しさん :03/07/07 10:52
参照カウントとか使ってないヘタレな実装だと
その都度文字列の複製/削除があるしな。

943 名前:デフォルトの名無しさん :03/07/07 11:44
>>942
マルチスレッド対応だと参照カウント使うほうがヘタレなんだよな

944 名前:デフォルトの名無しさん :03/07/07 12:19
共通のコンストラクタを持つクラスを対応のID渡すだけで、生成してくれる
関数を作ろうと思っていますが、
↓こんな感じ

基底クラスがあり(他にも仮想関数等がある予定。改行多くなるのでpublic等省略)
class IUnko{
IFoo(void* lpParam);
};
それを継承したクラスを複数個書く
class CTestA : public IUnko{
CTestA(void* lpParam);
};
class CTestB : public IUnko{
CTestB(void* lpParam);
};

これの生成をIDで指定したいのです。
IUnko* Make(long id,void* lpParam);
id に 1を渡すとCTestAが作られ、
id に 2を渡すとCTestBが作られる。
みたいな。

現在、生成関数を、クラス別に作り
その関数ポインタをテーブルにして、生成する方法を考えていますが
↓こんな感じ。関数の型宣言こまかいこと忘れたので、てきとうに書いた。
IUnko* MakeA(void* lpParam);//CTestAを作る
IUnko* MakeB(void* lpParam);//CTestBを作る
MakeTbl[] = { MakeA,MakeB };
IUnko* Make(long id,void* lpParam){ return MakeTbl[id]; }

他にスマートなやり方(C++チックな方法)ありませんか?

945 名前:デフォルトの名無しさん :03/07/07 12:55
Factory Method だろうな、普通は。

946 名前:デフォルトの名無しさん :03/07/07 15:24
>>944
イベントによってIDが変化するなら普通にswitchで対処してみては。
ソース上で決まってるなら>>945のtemplate使用で決まりだな。

947 名前:ひよこ名無しさん ◆jECjLpAzb6 :03/07/07 15:26
純粋仮想関数って、英語で言うと、
Pure Virtual Function でOKですよね?

948 名前:デフォルトの名無しさん :03/07/07 15:52
はい。

949 名前:デフォルトの名無しさん :03/07/07 16:03
↓次スレを立ててpush_backしる。

950 名前:デフォルトの名無しさん :03/07/07 16:38
今日は暑い。

951 名前:デフォルトの名無しさん :03/07/07 17:27
あしたはさむい

952 名前:デフォルトの名無しさん :03/07/07 17:28
>>947
いいえ。
Virgin virtual function

953 名前:デフォルトの名無しさん :03/07/07 18:02
>>947
C++ 規格書 10.4.2 より抜粋
A class is abstract if it has at least one pure virtual function.

954 名前:デフォルトの名無しさん :03/07/07 20:37
>>943
参照カウントのロックのコストがかかるのは確かだけど、
毎回コピーするより重くなるの?
mallocだってそれなりのロックが必要だし。

955 名前:v(^・^)v :03/07/07 20:39
じゃあ次スレたててくるか

956 名前:名無し@沢山 :03/07/07 20:44
>>954
おまいらよ、stringの毎回コピーするような実装では何文字以下は
フリーストア領域を使わないような実装になっているものだよ。
おまいらよ、つまりmallocは使わないんだよ。

957 名前:デフォルトの名無しさん :03/07/07 20:51
代わりにcallocを使うだけだけどな。

958 名前:名無し@沢山 :03/07/07 20:57
>>957
>代わりにcallocを使うだけだけどな。
>>代わりにcallocを使うだけだけどな。
>>>代わりにcallocを使うだけだけどな。
>>>>代わりにcallocを使うだけだけどな。

おまいらよ、無知とは怖いよ。
おまいらよ、今時EffectiveSTLも読まずに議論に参加しようなんてアホだよ。

959 名前:デフォルトの名無しさん :03/07/07 21:01
キモイレスだなー、とおもったら、なんだ沢村だったのか。

960 名前:デフォルトの名無しさん :03/07/07 21:02
沢「山」

961 名前:名無し@沢山 :03/07/07 21:08
>>959
おまいらよ、無知を暴かれたからといって
負けイヌの遠吠えのようなカコワルイのはだめだよ。

962 名前:デフォルトの名無しさん :03/07/07 21:13
>>954
const string に対する操作がほとんどなら、CopyOnWriteの方が
速いことが多い。内容を書き換える操作や、書き換えるかもしれない
操作(char& operator[] とか iterator begin() とか)が多いと
毎回素直にコピーする実装にしてallocatorをチューンした方がマシな
ことが多い、らしい。More Exceptional C++ 曰く。

963 名前:デフォルトの名無しさん :03/07/07 21:27
ヌヒらよ。

964 名前:v(^・^)v :03/07/07 21:32
http://pc2.2ch.net/test/read.cgi/tech/1057580107/
新スレ

やっとコピペ終わった
連投規制も沢山もうぜーー!

965 名前:911 :03/07/07 22:38
>>916
俺も原則はそうだと思う。だけど例外的に認められてるんだっけ?という話です。
>>918
あなたの3倍はよく知ってるつもりですが:p
>>919
本当に? >>915 で私が示した void CCamera::Reject() が複雑な関数で
複数の return と例外の throw を含んでいるとしたら何が起こるか理解できますか?


966 名前:名無し@沢山 :03/07/07 22:42
>>965
ヌヒらよ、これじゃダメなのかよ。

class CCamera {
private:
 CFilm* m_pFilm;
 struct Guardian {
  CCamera& parent;
  Guardian(CCamera& camera) : parent(camera){}
  ~Guardian() { delete parent.m_pFilm; parent.m_pFilm = NULL; }
 };
public:
 void Reject();
};

void CCamera::Reject() {
Guardian guardian(*this);
}

ヌヒらよ、これを踏まえた上でローカルクラスにする必要性があるか説明せよ。

967 名前:911 :03/07/07 23:05
>>966
沢村よ…、たしかにそれでもできる。いやこの場合は「それでしかできない。」の方が正しかろう。
だがな、まず情報が離散しすぎてる。俺がほしいのは Java でいう finally だ。
それは言ってみれば関数の実装の詳細なのだ。
たとえ前述の例の Guardian の実装を実装ファイルに書いても
ヘッダを汚している事には変わりはない。別の関数で同じような物が必要になってもまたヘッダを汚すことになる。
いいか、これは「シンタックスシュガー」ではない。
あるべきものをあるべき姿で記述しよう!という現代的プログラミングにとって必要な事だ。
だから g++ はわざとそうしているのか?または次期仕様として濃厚なのか?というあたりが知りたかった。

あとな、「ヌヒらよ」は複数形だと思うから単数に使うのは変だと思うぞ。
最後に、age ちゃったスマソだ。

968 名前:名無し@沢山 :03/07/07 23:12
ヌヒらよ、おれは911の三倍はよく知っているつもりだよ。

class CCamera {
private:
 CFilm* m_pFilm;
public:
 void Reject();
};

void CCamera::Reject() {
std::auto_ptr<CCamera> g(this);
}


969 名前:名無し@沢山 :03/07/07 23:14
:p


970 名前:911 :03/07/07 23:23
>>968==969!=966
沢村よ…。966 の沢村なら話し相手になるが、おまえはマ板かドラゴンボール板にでも移動してくれ。

971 名前:デフォルトの名無しさん :03/07/07 23:25
おいおい沢村じゃね〜よ。沢山くんだよ。

972 名前:デフォルトの名無しさん :03/07/07 23:26
たくさんくんか。

973 名前:デフォルトの名無しさん :03/07/07 23:27
自己顕示欲旺盛な沢村がsageでメッセージを投稿するわけないな

974 名前:911 :03/07/07 23:29
>>971
ヌヒよ…、漏れは長い間騙されていたのだね?
いつからタクさんなんてのが蔓延るようになっていたのかね?

975 名前:名無し@沢山 :03/07/07 23:31
ヌヒらよ、おれは「名前が無い人たちが、あっと驚くぐらい沢山いるなぁ。。」という
2ちゃんに初めて来た人の心情を表したよい名の持ち主だよ。

>>970
ヌヒよ、>>968-969むかついたのか?
ヌヒよ、おれはヌヒと同じことをしたまでだよ。

>>965
>あなたの3倍はよく知ってるつもりですが:p

976 名前:911(ちょっと電波板チックに) :03/07/07 23:33
沢山の意味がわかたーよ。
沢山→宅さん→お宅さん→ヲタク→夏混み合ってるデヴ
でファイナリーアンサー?

977 名前:デフォルトの名無しさん :03/07/07 23:33


978 名前:デフォルトの名無しさん :03/07/07 23:37
どうでもいいから、911 は規格書の 9.8 を読んでから出直せや。

979 名前:911 :03/07/07 23:38
>>975(デブ)
>むかついたのか?ヌヒと同じことをしたまでだよ。
違うな。>>918 は俺の能力を判断する状況もないまま「見下した表現」を使っただろ?
「あなたの3倍はよく知ってるつもりですが:p」は、それに対するメッセージだ。

ついでに言うと >>968 はもともと漏れが提示した物の意味と完全に外れた事しかしてないし、
スタックに確保されたオブジェクトだったらコアダンプ吐くだけだぞ?

もう少し勉強して出直してこいや >> 968


980 名前:911 :03/07/07 23:41
>>978
I wrote:
> だから g++ はわざとそうしているのか?または次期仕様として濃厚なのか?というあたりが知りたかった。

981 名前:名無し@沢山 :03/07/07 23:42
ヌヒらよ、おれはちゃんとコード読んで無かったよ。
ヌヒらよ、911とおれを生暖かく見守ってくれよ。
ヌヒらよ、ヌヒってなんだよ。

982 名前:デフォルトの名無しさん :03/07/07 23:44
 _ _
(o∀o) <おまいらええかげんにせえよと…

983 名前:911 :03/07/07 23:46
>>981
> ヌヒらよ、ヌヒってなんだよ。
漏れはジョンとか沢村が頭角表してた時期にリアルヒッキーしてて
ム板に入り浸ってたけど、その時の沢村の説明だと、多分標準語でいう
「おぬし等よ」みたいな意味だという事だったと思われ。

何よりちゃんとコード読んでくれたなら天才宅さんなら何かアイディア持ってるんだろ?

984 名前:名無し@沢山 :03/07/07 23:46
ヌヒらよ、もうおれは一度反撃にでるよ。

>>むかついたのか?ヌヒと同じことをしたまでだよ。
>違うな。>>918 は俺の能力を判断する状況もないまま「見下した表現」を使っただろ?
>「あなたの3倍はよく知ってるつもりですが:p」は、それに対するメッセージだ。

ヌヒよ、違うよ。>>911>>918の能力を判断する状況もないまま「見下した表現」を使っただろ?
ヌヒよ、以下略

985 名前:名無し@沢山 :03/07/07 23:51
ヌヒよ、これで満足か?
ヌヒよ、精進せいよ。

class CCamera {
private:
 CFilm* m_pFilm;
public:
 void Reject();
};

void CCamera::Reject() {
 struct Guardian {
  CFilm *&p_;
  Guardian(CFilm *&p) : p_(p){}
  ~Guardian() { delete p_; p_ = NULL; }
 } guardian(m_pFilm);
}


986 名前:911 :03/07/07 23:52
>>982
スマソ、だけど2ちゃんなんて結局そんなもんだよ。次スレ立ったなら埋め立て必要だろうし。

>>984
沢山よ、>>918==984むかついたのか?
>>918>>911の能力を判断する状況もないまま「見下した表現」を使っただろ?
>>918よ、>>911>>918と同じことをしたまでだよ。
recursive....stack over flow.

987 名前:911 :03/07/07 23:54
>>985
いや、解放するべきメンバが複数個あった時には?解放するべきか判断する材料が他のメンバだった時には?
いちいち全部渡すのは面倒くさすぎるという話からすべて始まってるわけですよ。

988 名前:911 :03/07/07 23:56
ちなみにローカルクラスと関数内のローカル変数の関係は more exceptional C++ あたりに
興味深い解説が載ってるよ。

とかせめてもの罪滅ぼしにちょっと情報提供とかしてみた。

989 名前:名無し@沢山 :03/07/08 00:00
ヌヒよ、おれは918じゃないよ。
ヌヒよ、おれには918はやさしいアドバイスに見えるよ。

ヌヒよ、これでおれのやさしいアドバイスもこれで最後だよ。

class CCamera {
private:
 CFilm* m_pFilm;
void Reject_impl();
public:
 void Reject();
};

void CCamera::Reject() {
try{
Regect_impl();
}catch(...){
}
delete m_pFlim;
m_pFlim=0;
}
void CCamera::Reject_impl() {
}

990 名前:デフォルトの名無しさん :03/07/08 00:08
ヌヒ=奴婢=召し使い

991 名前:911 :03/07/08 00:15
>>989
やさしいアドバイスをたくさんありがとう。

その手法は厨房の頃からやってるが…
・戻り値が参照やポインタではなくて大きなオブジェクトだった場合の負荷が大きい
という大問題があるのだよ。
さらにそのソースだと Reject_impl が意味のある例外を投げたけど投げなおしたい時どうする?
Reject() の catch の中に同じ事何度も書くのは無駄かつミスの元だよね?

992 名前:デフォルトの名無しさん :03/07/08 00:18
>>987
ScopeGuard 使おう。

993 名前:デフォルトの名無しさん :03/07/08 00:19
よし藻前ら!セントリーノモバイルテクノロジ合戦いくぞー!

994 名前:911 :03/07/08 00:27
>>992
ありがとうございまふ。
ぐぐったけど英語のページしか出てこないです。
(もっと詳しく調べるために)ある程度あたりをつけたいので
何なのかさらっと教えていただけると助かります。
つたない英語力でちょびっと読んだ所は boost の一部?もしくはパターン名?


995 名前:デフォルトの名無しさん :03/07/08 04:55


996 名前:デフォルトの名無しさん :03/07/08 05:33


997 名前:デフォルトの名無しさん :03/07/08 05:45
犯人は松子

998 名前:デフォルトの名無しさん :03/07/08 05:49


999 名前:デフォルトの名無しさん :03/07/08 06:33
1000を取るのは誰でしょね?

1000 名前:デフォルトの名無しさん :03/07/08 06:47
1000


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