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


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

C++相談室 part39
751 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:03:02
main関数で何もreturnしなかった場合は、自動で0がリターンされる
ことになるのはC++独自の仕様?C言語は違うよな?

752 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:05:35
>>751
Cでも同じ
ISO/IEC 9899:1999 5.1.2.2.3 Program termination -1
If the return type of the main function is a type compatible with int,
... reaching the } that terminates the main function returns a value of 0.

753 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:21:34
あれ、そうなのか。なんかCの書籍だときっちりreturn 0書いてて
C++の書籍だと省略してるのが多い気がしたのは、単なる気のせいか。
それともC言語は昔は自動でリターンしてなくて、そのころの書籍を
見てたのかな。

754 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:27:02
>>753
752のはいわゆるC99
C89では省略すると未定義
http://www.bohyoh.com/CandCPP/FAQ/FAQ00016.html

755 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:27:42
それは 0 をどんな実行環境に対して返しているつもりなのか明確に定義している本か?

756 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:28:56
処理系非依存のつもりで自己陶酔してるヴァカ著者のデムパ本

757 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:33:13
VC++を使っています。
MFCを使わずにコントロールを作ろうとしています。

継承なしの class CHogeCtrl を定義し、
Create メソッドで CreateWindow を呼んでウインドウを生成していてます。
ところが RegisterClassEx に渡す WindowProc をインスタンスメソッドにできないため、
WindowProc の中で呼び出し元のインスタンスにアクセスする方法が思いつきません。

コントロールのメッセージ処理はどうやって実装するのでしょうか。

知恵をお貸し下さい。お願いします。

758 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:38:10
>>757
SetWindowLong, GetWindowLong, GWL_USERDATA, reinterpret_cast, ...

これ以上必要ならここで聞け
http://pc8.2ch.net/test/read.cgi/tech/1112345886/l50

759 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:41:37
>>758
おお、感謝です!

毎回コールするしかなさそうなのが辛いところですが・・・

760 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:42:00
>>757
SetProp()やWNDCLASSEX::cbWndExtraとSetWindowLongPtrを使う方法や、std::map<HWND, CHogeCtrl *>を使ったり
ATL/WTLみたいにウィンドウ毎にWndProcのHWNDをCHogeCtrlに書き替えてメンバ関数のWndProcを呼び出したり色々手段はある。

761 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:48:25
>>760
ありがとうございます。

色々手段があるのですね。
とても勉強になりました。

762 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 00:29:26
C++からC関数はEXTERN "C"を使って呼び出せるようなんですが、
この時にコールバック関数を渡して、C++からC関数を
コールバック呼出しすることってできるのでしょうか?
関数呼出し時のスタック内容が違うみたいなんでダメっぽいですが。。。


763 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 00:41:55
C++関数とC関数はどう違うのですか?

int hoge(){}

はどっち?

764 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 00:42:25
>>763
言語が違う。

765 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 00:42:55
>>763
でも、おそらくコンパイルすれば同じ結果になる。

766 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 00:47:29
>>760
バカヤロウ、スレ違いのネタ引っ張るんじゃねえ。

767 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 00:49:40
Cおっぱい
{
float m_radius;
float m_height;
int m_segmentU;
int m_segmentV;
float m_milk;
public:
void SetRadius( float m_radius ){ this->m_radius = m_radius; }
float GetRadius( void ){ return m_radius; }

void もみもみ(void);
void つまむ(void);
void わしづかみ(void);
int しぼり( int force ){ return m_milk; }
}

void main(void)
{
Cおっぱい m_cCup;
m_cCup.SetRadius( 20.0f );

}
オブジェクト指向ってこんなかんじ?

768 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 01:22:47
__cdeclとかってどうなのよ?>エロイ人

769 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 01:23:26
>>768
どうなのよって何が?

770 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 01:24:57
壮絶な誤爆をしたようで。

771 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 01:25:33
orz

772 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 01:31:59
>>767
駄目だ駄目だ駄目だ!
そんなんじゃオブジェクト指向は程遠いぞ!
乳輪のメンバ変数と、個人的に舐めるメソッドを追加しないと!

773 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 01:45:52

ばか?

774 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:04:23
とりあえず名前の付け方がキモ過ぎる

775 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:06:43
変数名やら関数名でm_で始まるのってなんか意味あるんですか?

776 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:08:02
>>775
メンバ変数だということを体現している。

777 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:09:22
そうなんですかありがとうございます。
てっきりmyを略した物だと思ってました

778 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:11:13
>>777
マイクロソフトが昔好きだった記法だよ

779 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:17:22 ?##
/**
  Cカップおっぱいクラス(おっぱいクラスの派生クラス)
  ほかはおっぱいクラスで宣言されているのでいらない
*/
class Cおっぱい : public おっぱい
{
public:
  Cおっぱい(radius = 20.0) : おっぱい(radius) {}
  virtual ~Cおっぱい();
public:
  virtual void Doもみもみ();
  virtual void Doつまむ();
  virtual void Doわしづかみ();
  virtual double Doしぼり();
}

int main()
{
  Cおっぱい cCup;
  cCup.Doもみもみ();
  return 0;
}

780 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:24:53 ?###
あとすいません、変数名の先頭に~が付いてるのもありますが、
何か特殊な意味があるのでしょうか?

781 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:26:33
>>780
デストラクタだよ。C++知らないの?

782 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:40:08
…変数?

783 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:45:29
変数と関数は区別できない λ式ってどうして導入されないんだろう。

784 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 02:55:33
>>781
すみませんCしか知りません

785 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 03:45:53
>>783
そんな貴方も、明日からboost::lambdaで変態に!

786 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 07:17:13
C++の参考書として、独習C++の購入を考えてました。
が、テンプレに載ってない事で不安になって(;´Д`)

ボンビーなんで・・・コレを買えば間違いないという名著を教えてエロい人!
ちなみに、Cは入門書程度ならイケます


787 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 10:51:26
>ちなみに、Cは入門書程度ならイケます
程度ならC++は100年早い

788 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 11:12:33
>>786
禿本。(>>4を見よ)
誰だって始めは初心者だ。モノになる人材に必要なのは手加減より必要事項が書いてあること。
俺が「初心者」だった頃は、これとコンパイラのマニュアルしかなかった。(初版だったが)
今だって、新しい仕事のたびに何かの初心者で大抵は英語版のマニュアルで必死に憶えている。

789 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 11:28:13
>>785
それは本当のλ式じゃないじゃん。Cの関数ってカリー化もできないんじゃん。

790 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 11:58:18
本当のλ式はCで実装されています

791 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:00:02
C/C++ に何かが「ない」って騒ぐやつ
結局一番肝心なことがわかってねえなw

792 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:02:48
>>791
肝心な事はなんだ

793 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:22:20
class の「参照を返すメンバ関数」についての質問です。

整式の加減乗除のプログラムを(趣味で)作っているのですが、

class poly
{
private:
int max_dim;
double* coefficients;
public:
/* 中略 */
poly& operator=(const poly& x);
/* 以下略 */
};
/* 中略 */
poly& poly::operator=(const poly& x)
{
/* 代入処理 */
return (*this);
}

とすると、

poly.cc: In member function `poly& poly::operator=(const poly&)':
poly.cc:59: error: passing `const poly' as `this' argument of `int
poly::getdim()' discards qualifiers

というエラーメッセージが出てしまうのですが、どう解決したらよいか分かりません。
よろしくお願い致しますm(_ _)m

794 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:27:48
>>793
メッセージの中に書いてあるint poly::getdim()が怪しいと思わないのか?

795 名前:793 :int 2ch =05/04/02(土) 12:31:49
>>794
そうでした!!
こんなヴァカな質問に答えてくださってありがとうございますm(_ _)m

自分のヴァカさが嫌になったので吊ってきます。

796 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:46:16
>>784
「変数」とか言っちゃう時点で、Cすら怪(ry

797 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:47:28
>>791
いや、だから、Cの仕様は数学的におかしいとこだらけなんだって。

798 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:49:03 ?##
>>797
数学的な正しさよりも、システムズプログラミングと
アプリケーションプログラミングの両方を
扱えることのほうが重要だから。

799 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:51:31
まぁ、それはある意味正しいよね。
そして目も当てられないようなバグに悩まされるんだよね。
苦労が絶えないねぇ。

800 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:54:00
ごめん、なんだかスレ間違ってたよ。
ずっとバグの出にくい言語仕様スレだと思って書いてた。

801 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:55:04 ?##
>>799
それはCの話?C++の話?

C++を知らずにCのことを前提として
C++も似たようなものだと思って
いっしょくたに批判してない?

>>797ではCのことを書いてるようだからそう思ったわけだが。

802 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:56:15 ?##
なんじゃそりゃーー

803 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:58:54
>>801
もちろんC++も知っているよ。

804 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 12:59:28
>>801
基本的なところは何も変わってないと思う。

805 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 13:00:24
STLも歪にしか見えない。

806 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 13:19:06 ?##
その「基本的なところ」ってなに?
ポインタとか?ガーベッジコレクションがないとか?

807 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 13:23:55
>>806
一言で言うなら、「型」ですね。

808 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 13:38:24 ?##
>>807
よくわかんねーー

809 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 13:54:07
というわけで、とりあえず雲に巻いていいですか?
スレ違いっぽいので。

810 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 13:55:56
それを言うなら「煙(けむ)に撒く」でしょう。

811 名前:デフォルトの名無しさん :int 2ch =05/04/02(土) 13:57:38
>>810
そうだ、それが正しい

812 名前:デフォルトの名無しさん :int 2ch =5,2005/04/02(土) 14:39:29
アホが「何か知ってるふり」をし続けてるのを見るのって
ちょっと辛いものがあるね。

813 名前:デフォルトの名無しさん :int 2ch =5,2005/04/02(土) 14:41:41
>>812
僕は自分が解からないことならなんでも批判したがる人を見るとちょっと辛くなる

814 名前:デフォルトの名無しさん :int 2ch =5,2005/04/02(土) 14:57:44 ?##
>>812>>813の意見は
別に背反する意見じゃなくてどちらも正しいと思う。

それはどうでもいいから
CとC++において基本的なところである「型」のせいで
「目も当てられないようなバグに悩まされる」具体的な例を
示していただければ幸いです。

815 名前:デフォルトの名無しさん :int 2ch =5年,2005/04/02(土) 15:19:24
struct Hoge {
 int a;
 double b;
}

main()
{
 return 0;
}

コンパイルデキネー

816 名前:デフォルトの名無しさん :int 2ch =5年,2005/04/02(土) 15:27:41
>>815

struct Hoge {
    int a;
    double b;
};

int main()
{
    return 0;
}

817 名前:デフォルトの名無しさん :int 2ch =5年,2005/04/02(土) 16:56:50
typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_type;

std::locale system_locale("");
std::locale::global(system_locale);

char from_buf[BUFSIZ];
std::cin >> from_buf;

char const * from = static_cast<char const *>(from_buf);
std::size_t from_size = strlen(from);
char const * from_end = from + from_size;
char const * from_next = 0;

boost::shared_array<wchar_t> to_sp(new wchar_t[from_size]);
wchar_t * to = to_sp.get();
wchar_t * to_end = to + from_size;
wchar_t * to_next = 0;

std::memset(to, 0, sizeof(wchar_t) * (from_size));

codecvt_type::state_type state;
std::memset(&state, 0, sizeof(codecvt_type::state_type));

codecvt_type const & cvt = std::use_facet<codecvt_type>(system_locale);
if (cvt.in(state, from, from_end, from_next, to, to_end, to_next) == codecvt_type::error) {
std::wcout << std::strerror(errno) << std::endl;
std::exit(1);
}

std::codecvt を使って char * から wchar_t * を作るコードを書いたんだけど、
std::locale::global(system_locale); しないと動かないのは、こういうものなの?

818 名前:マイク ◆yrBrqfF1Ew :2005/04/02(土) 18:38:07
std::cinからどれだけ読まれるのか不明だな(▽

819 名前:デフォルトの名無しさん :2005/04/02(土) 23:18:51
Effective C++ 43項で、多重継承する際の多義性について、回避策を
あげていますが、これってどういう原理なんですかね。クラスの継承で
1クッション置いてるようですが・・・。
それにVC++.netじゃコンパイルでこの例のdarw()の多義性解決できなかったし。
あんまり使えるもんじゃないのかな。

820 名前:デフォルトの名無しさん :2005/04/02(土) 23:50:13
>819
解らないなら解るまで読め。
>それにVC++.netじゃ〜
理解してもいないのに使いこなせないのをコンパイラのせいにするな。

821 名前:819 :2005/04/03(日) 00:07:31
というか書いてない部分でわからないんですが、
なんで片方のdraw()を限定して呼び出せるのかというところです。
あと、使いこなす以前に、エラーになるという意味ですよ。

822 名前:デフォルトの名無しさん :2005/04/03(日) 00:11:18
Effective C++持ってない俺にはさっぱりだ

823 名前:デフォルトの名無しさん :2005/04/03(日) 00:31:27
持ってるがまだ43項までいってない

824 名前:デフォルトの名無しさん :2005/04/03(日) 00:58:12
>821
>なんで片方のdraw()を限定して呼び出せるのか
それぞれlotteryDraw()とgraphicalObjectDraw()とに、呼び出す名前を変えたから。

825 名前:819 :2005/04/03(日) 01:42:38
ん?呼び出す名前変えたっていっても
最初に呼び出してるのはdraw()ですよね、その例だと。
そしてどちらかのdraw()を呼び出すことが決まった結果、
そのdraw関数内の実装により、lotteryDraw()かgraphicalObjectDraw()が
呼び出されますよね。
ポインタの型がLottery*型だとなぜAuxLotteryの方のdarw()と決まるのか。

826 名前:デフォルトの名無しさん :2005/04/03(日) 02:57:15
>825
>最初に呼び出してるのは
最初ってなんやねん

>ポインタの型がLottery*型だとなぜAuxLotteryの方のdarw()と決まるのか。
AuxLotteryを継承したクラス(LotterySimulation)でdraw()をオーバーライドしてないから。

827 名前:デフォルトの名無しさん :2005/04/03(日) 05:42:42
cinってなんて読むの?「ちん」って言ったら笑われたのだが

828 名前:デフォルトの名無しさん :2005/04/03(日) 05:52:18
シーイン

829 名前:デフォルトの名無しさん :2005/04/03(日) 06:07:52
じゃあcoutは「ちょうと」か

830 名前:デフォルトの名無しさん :2005/04/03(日) 06:27:41
シーアウト

831 名前:デフォルトの名無しさん :2005/04/03(日) 06:51:54
じゃあendlは「えんでる」か

832 名前:デフォルトの名無しさん :2005/04/03(日) 07:32:34
エンドライン

833 名前:デフォルトの名無しさん :2005/04/03(日) 09:00:49
オンドゥル

834 名前:デフォルトの名無しさん :2005/04/03(日) 09:33:58
>>826
>AuxLotteryを継承したクラス(LotterySimulation)でdraw()をオーバーライドしてないから。
でも、AuxGraficalObjectも同じ条件ではないのですか?
こちらにもdraw()があってそれを継承したときにオーバーライドしてませんよね。

835 名前:デフォルトの名無しさん :2005/04/03(日) 11:27:49
【keybd_eventリピート入力】
keybd_eventを使って別のアプリに方向キー押下を伝える処理でつまずいています。
手動でキーを長押しすると、WndMessageにキーイベントが連続して入力されますよね。
例えば、
keybd_event(VK_DOWN,0x50,KEYEVENTF_EXTENDEDKEY,0);
で下キーダウンさせれば、
keybd_event(VK_DOWN,0xd0,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);
でキーアップするまでの間は、キーがリピートされても良い様な気がするのですが、
如何なものでしょうか?

スキャンコードは、ここから拾ってきました。
http://www.microsoft.com/whdc/device/input/Scancode.mspx

836 名前:デフォルトの名無しさん :2005/04/03(日) 11:29:31
すいません。 C言語について
初心者なので教えていただきたいのですが、

@『ある計算を1万回計算して、その結果をすべて出力する
 プログラム。』

A『ある計算を1万回計算して、その結果は出さずに、
 その1万回計算した結果の平均だけを出力するプログラム』

 この@とAのプログラムはどうやって書いたらいいんですか?
 簡単に書けるプログラムですか?

かなり初心者なので、すいませんが教えていただきたいです。

837 名前:デフォルトの名無しさん :2005/04/03(日) 11:31:14
簡単に書けます

838 名前:デフォルトの名無しさん :2005/04/03(日) 11:39:39
>>836
ここは C++ スレなんで、C の話は他でやれ。
宿題は宿題スレへ池。以上。

839 名前:836 :2005/04/03(日) 11:42:10
>>838
C++でもいいです。教えてください

840 名前:デフォルトの名無しさん :2005/04/03(日) 11:53:08
>836はマルチにつき放置推奨で。
>>839
本人なら謝れ。成り済ましならそれくらいにしとけ。

841 名前:デフォルトの名無しさん :2005/04/03(日) 11:53:38
>>839
出来るところまで自分で書いてから来なさい。

書こうにも全く書けないなら宿題スレが初心者スレへ行け。

842 名前:デフォルトの名無しさん :2005/04/03(日) 11:54:27
>>836
while(1){
 printf(1+1);
}

843 名前:デフォルトの名無しさん :2005/04/03(日) 12:40:58
2バイト値を4バイトのポインタにCキャストした時、
上位2バイトは0で埋められるというのは、
C++の仕様で定義されていますか?
それと、C++スタイルで書きたい場合こういうキャストはreinterpret_castでいいのですか?

844 名前:デフォルトの名無しさん :2005/04/03(日) 14:11:46
>>843
定義されてない。ポインタ型と同サイズの整数型に関しては、reinterpret_cast で
可逆変換が可能だと規定されてるが、そのマッピング方法は処理系依存。

ただ、一般的なアーキテクチャの CPU を前提とするとビットパターンを保って
変換するのが妥当なので、それで期待通りの動作をすると思うよ。いずれに
せよ処理系依存なので、詳しくは処理系のマニュアルを読むか、処理系を
晒してくれ。

845 名前:デフォルトの名無しさん :2005/04/03(日) 15:59:11
>834
なんでそこでAuxGraficalObjectが出てくる?
Lotteryと継承関係はないだろ。

AuxLotteryでLotteryのdraw()をオーバーライドしてlotteryDraw()を呼んでるから、
それ以降の継承でdraw()をオーバーライドしない限りAuxLotteryのdraw()が継承されてlotteryDraw()が呼ばれる。

あー、らちがあかん。
おまえのいう
>VC++.netじゃコンパイルでこの例のdarw()の多義性解決できなかった
このソースをあげろ。

846 名前:デフォルトの名無しさん :2005/04/03(日) 17:23:02
std::ofstream fout("test.txt");
は、コンパイルを通り、
std::ofstream fout = std::ofstream("test.txt");
は、コンパイルを通りませんでした。
何が間違っているのか教えてください。
c++初めて2日目なのであまりよくわかりません。

847 名前:デフォルトの名無しさん :2005/04/03(日) 17:27:41
>>846
コピーコンストラクタが protected だから
最適化で呼ばれなくなったコピーコンストラクタも
アクセス制限のチェックは回避されないことになっている

848 名前:デフォルトの名無しさん :2005/04/03(日) 17:35:13
VC++6.0でPanelコントロールってあります?

849 名前:デフォルトの名無しさん :2005/04/03(日) 17:39:31
スレ違い

850 名前:846 :2005/04/03(日) 18:01:46
>847
今の自分には理解不可能なようです。
ありがとうございました。

851 名前:!847 :2005/04/03(日) 18:48:41
>>850
おいおい、簡単に投げ出しすぎだぞ。

前者は、std::ofstream型の実体を一つだけ(fout)作成している。
後者は、std::ofstream型の実体を一時的に作成してからそれを使ってもう一つ(fout)作成しようとしている。
このとき、コピーコンストラクタを使用するわけだが、それがprotectedなのでエラーになるわけだ。

852 名前:デフォルトの名無しさん :2005/04/03(日) 18:51:43
通りすがりの者なんですが、>>846の書き方は、どんな違いがあるのですか?処理で。
どちらもインスタンスを初期化するんですよね?
やさしいc++には
class名 インスタンス名(引数)

class名 インスタンス名 = class名(引数)
と書くことができる。と記述されているんですが、>>847によると違うんですよね?

853 名前:852 :2005/04/03(日) 19:00:24
あれー。投稿文書いてる最中に答えが投稿されたよ。
>>851
そうなのですか。全く同じ処理で書き方が違うのかと思ってました、今まで。
参考になりました。有り難うございました。

854 名前:デフォルトの名無しさん :2005/04/03(日) 19:02:55 ?##
>>852を読む限りでは「やさしいC++」ってクソっぽいな。。

855 名前:デフォルトの名無しさん :2005/04/03(日) 19:28:22
先生質問!

コンストラクタを書かないとデフォルトコンストラクタが用意されるんですよね?
そう本に書いてありました。
てことは引数ありとかなしとかのコンストラクタを書けば、デフォルトコンストラクタは用意されないんですよね?

引数ありのコンストラクタ、デフォルト引数付き、を一つだけ書いたプログラムがあるんですが、
クラス名 変数名();と書いたら、デフォルト引数が代入されたコンストラクタが呼ばれると思ったら、そのコンストラクタが呼ばれないようなんです。
てかまるでデフォルトコンストラクタが呼ばれているようなんです。

もしかして、デフォルトコンストラクタが定義されるのは、
「コンストラクタを定義しなかったとき」ではなくて
「引数無しのコンストラクタを定義しなかったとき」なんですか?

私は何を勘違いしてますか?先生助けて!

856 名前:デフォルトの名無しさん :2005/04/03(日) 19:29:53
>クラス名 変数名();と書いたら、

関数宣言になるだけだな

857 名前:855 :2005/04/03(日) 19:50:33
>>856
マジっスか!?
main()の中に書いてるんですけど、定義も書いてないんですけど。
関数を宣言して、どうやって使うんでしょうか?
興味が湧いてきたんですが資料がないです。ネットにイイところないですかね。

858 名前:デフォルトの名無しさん :2005/04/03(日) 19:55:45
禿本にはっきり書いてあるよ
へたに手加減した入門書に頼るからわからない・・・

859 名前:デフォルトの名無しさん :2005/04/03(日) 20:16:28
陸、海、空オンライン、ただ今鋭意!開発中!
http://www112.sakura.ne.jp/~kaientai-project/creategame2.htm


860 名前:デフォルトの名無しさん :2005/04/03(日) 20:18:15 ?##
>>859
プログラマが決まってねーじゃんwwwwうんこwww

861 名前:デフォルトの名無しさん :2005/04/03(日) 20:22:45
俺がやってやろうか、OCamlで良ければ。

862 名前:デフォルトの名無しさん :2005/04/03(日) 20:23:35
あ、サーバ用意しないといけないのか。だったらダメだ。金払ってまでやりたくねー。

863 名前:デフォルトの名無しさん :2005/04/03(日) 20:25:57 ?##
>(言語はC#限定)開発環境、サーバーを用意できるプログラマを緊急募集!

C#っていうのはまぁいいとして、なんでsourceforgeとかじゃいけないのかがわからん。

864 名前:デフォルトの名無しさん :2005/04/03(日) 20:35:05
>>859
「乳揺れの実装」って…ワロース

865 名前:デフォルトの名無しさん :2005/04/03(日) 20:42:30
C#限定って低脳丸出しやん

866 名前:デフォルトの名無しさん :2005/04/03(日) 20:51:31
>>857
関数を宣言したらあとは呼ぶなりなんなりご自由に。
宣言なんだからコンパイラはどこか別のファイルにでも関数の定義があってリンカが解決してくれるだろうと思っている。

867 名前:デフォルトの名無しさん :2005/04/03(日) 21:00:07
>>852
コンストラクタの引数が1つだけのとき、次の2つは同じ扱いなのは知っているだろ。
class名 インスタンス名(引数);とclass名 インスタンス名 = 引数;

class名(引数)は一時オブジェクトの作成を意味する。
そして普通、クラスは自分自身のクラスを引数に1つ取るコンストラクタ(コピーコンストラクタ)を持っている。
つまりclass名 インスタンス名 = class名(引数)ってやると、
そのインスタンスは一時オブジェクトが実引数のコピーコンストラクタで初期化されていると言うことになる。

868 名前:デフォルトの名無しさん :2005/04/03(日) 21:26:57
散髪屋:500回に一回散髪失敗する。(失敗髪型を用意、NPCコメント「変な髪形になりましたねw」)
髪型は、リアルで、2ヶ月は変更不可。

869 名前:855=857 :2005/04/03(日) 21:38:47
>>866
関数宣言だけで、定義が何処にもなくてもコンパイルが通って実行ファイルが出来てしまうんですが、どういうことでしょう?
定義がないと実行ファイルまでたどり着かないんでないんですか?

870 名前:デフォルトの名無しさん :2005/04/03(日) 21:44:15
>>869
その関数を実際に使おうとしない限り、定義がなくても問題ない

871 名前:デフォルトの名無しさん :2005/04/03(日) 21:54:02
>>833
渤海国のかたですか?

872 名前:817 :2005/04/04(月) 13:11:55
誰も真面目に答えてくれてない…(´・ω・`)ショボーン

873 名前:デフォルトの名無しさん :2005/04/04(月) 14:11:57
>>872
【C++】STL(Standard Template Library)相談室
http://pc5.2ch.net/test/read.cgi/tech/1095583235/139-


874 名前:817 :2005/04/04(月) 15:56:57
>>373
STL の質問じゃなくて、C++ のロケール周りについての質問ですが?

875 名前:デフォルトの名無しさん :2005/04/04(月) 17:06:31
>>373
>>874だってさ、今ごろレス付けられて大変だな。

>>874
139から順に見てくとヒントがあると思うが、それでは足りんのか?

876 名前:デフォルトの名無しさん :2005/04/04(月) 17:23:13
STLport の codecvt の実装見て、唖然とした記憶がある。
ただ単純に 1文字づつキャストしてコピーしてただけだった。

877 名前:817 :2005/04/04(月) 17:33:21
>>876
> std::codecvt を使って char * から wchar_t * を作るコードを書いたんだけど、
> std::locale::global(system_locale); しないと動かないのは、こういうものなの?
そのスレではこの質問の答えが見付からない。

878 名前:デフォルトの名無しさん :2005/04/04(月) 18:19:25
>>876
お呼びだよ。がんばってね〜

879 名前:876ぢゃないけど :2005/04/04(月) 18:30:17
>>817
そういうものらしい。
http://www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/manuals/stdlib/user_guide/loc_io/3_3.htm#332
>アメリカ英語 ASCII ロケールに対応した、標準 C++ ライブラリの定義済みの
>ロケールオブジェクトである locale::classic() を
    :
>大域ロケールは、最初は、前述のクラシックロケールになっています。
    :
>入出力ストリームのような国際化構成要素では、デフォルトで大域ロケールを使用します。

880 名前:817 :2005/04/04(月) 19:18:02
>>879
サンクスコ。
マルチロケールの場合は std::codecvt を使ってても、
適宜 std::locale::global() を毎回呼び出さにゃならんのか。

自前で std::codecvt 使って変換するより、stream に imbue した方が良さげやね。

881 名前:デフォルトの名無しさん :2005/04/04(月) 20:29:14
人に物聞く態度じゃねぇなぁ。

882 名前:デフォルトの名無しさん :2005/04/04(月) 22:36:00
【C++】int (integer) 相談室

こんくらい馬鹿げた分類だ
俗に STL と呼ばれるライブラリは ISO/IEC14882 で定義されている C++ そのものの一部にすぎない

883 名前:デフォルトの名無しさん :2005/04/04(月) 22:47:57
動的配列扱うテンプレートクラスをstd::vector使わずに自作してる漏れはアフォですか?

884 名前:デフォルトの名無しさん :2005/04/04(月) 22:58:52
>>883
自作するのは悪くない
できの悪い自作を使っていればあふぉ

885 名前:デフォルトの名無しさん :2005/04/04(月) 23:23:36
>>882
つか、もう STL って呼称は不要じゃないかとおもゆ。

886 名前:デフォルトの名無しさん :2005/04/05(火) 02:28:11
クラスをmemset()で0埋めするのって、論外だと思うんだけどどうよ。

887 名前:デフォルトの名無しさん :2005/04/05(火) 03:57:26
>>886
POD-type以外ならば論外

888 名前:STL :2005/04/05(火) 04:53:41
>>885
なんだと

889 名前:デフォルトの名無しさん :2005/04/05(火) 07:35:20
>>887
>817がcodecvt::state_typeに対してやってるな。<ZeroFill

890 名前:デフォルトの名無しさん :2005/04/05(火) 07:44:37
>>886
・全てのデータメンバが public(メンバ内メンバについても再帰的に適用)
・vtbl を持たない
つまり、memset を書く側が全ての責任を掌握しているならOK。

891 名前:デフォルトの名無しさん :2005/04/05(火) 08:24:42
>>887
PODでも、ポインタや浮動小数点数に対する memset が
意味を成さない事を考えると、やっぱり論外だろ。

892 名前:886 :2005/04/05(火) 09:54:31
つまり、オーソドックスなCの構造体でもない限りやるべきでないと。
つーか、クラス設計側からmemset()せよと言ってこない限りやるなって感じか。
それだったら寧ろ、クラス側で初期化関数でも用意して欲しいもんだ。

893 名前:デフォルトの名無しさん :2005/04/05(火) 10:39:58
構造体でも厳密にはやっちゃいけないって話じゃなかったっけ

894 名前:817 :2005/04/05(火) 12:48:54
>>889
codecvt_type::state_type == std::mbstate_t です。
これは C の構造体なので、memset() しました。

895 名前:デフォルトの名無しさん :2005/04/05(火) 14:32:48
でもなんかキモイ。

896 名前:デフォルトの名無しさん :2005/04/05(火) 17:22:20
>>894
構造体の初期化なら、こっちの方がわかりやすいのでは。

codecvt_type::state_type state = {0};

897 名前:デフォルトの名無しさん :2005/04/05(火) 20:54:40
>>891
アーキテクチャに依存して良いこと確定なら、そういうコードを
書いても構わんと思う。ぶっちゃけ Win32 API 使ったプログラム
書いてるなら、そこだけ気をつかっても移植性ないわけで。

898 名前:デフォルトの名無しさん :2005/04/06(水) 01:20:55
>>897
> アーキテクチャに依存して良いこと確定なら

memset や ZeroMemory で埋めること自体にたいしたメリットが無いのに、
そんな曖昧な条件付で認める意味がわからない。

既に書かれたコードを修正してまわる必要は無い、ということなら話はわかるが。


899 名前:デフォルトの名無しさん :2005/04/06(水) 09:03:43
fstreamとワイド文字の関係について聞きたいのですが
wofstream a;
a << L"ABCDEFG";
のようにやればワイド文字も出力できるらしいことを知ったのですが
同じように日本語を出力すると
a << L"あいうえお";
ファイルを見ても出力されてません。
日本語は無理なんでしょうか。
よろしくお願いします。

900 名前:デフォルトの名無しさん :2005/04/06(水) 09:07:56
>>899
#include <locale>
int main()
{
    std::locale::global(std::locale("japanese"));


901 名前:899 :2005/04/06(水) 09:55:42
>>900
Winアプリのログ出力用に使おうと思って
早速やってみたんですがうまくいかず、
コンソールでやってみたら、うまくいきました。
Win32だとできないんでしょうか・・・。
質問ばかりですみません。

902 名前:デフォルトの名無しさん :2005/04/06(水) 10:02:56
>>901
WindowsアプリならWinMainとかへ移せよ。
main()じゃなくてもとにかくワイド文字を使ったストリームを使うより前にstd::locale::global(std::locale("japanese"));があれば出来るはず。

903 名前:899 :2005/04/06(水) 10:13:04
>>902
いろいろテストしてみて分かったのは
std::locale::global(std::locale("japanese"));
する前にwofstreamが宣言されているとダメ。
=グローバル変数だとダメ。

とりあえずポインタをグローバルにして
std::locale::global(std::locale("japanese"));
のあとにnewでやってみたいと思います。
ありがとうございました。

904 名前:デフォルトの名無しさん :2005/04/06(水) 10:19:24
ポインタだとかグローバル変数だとか……

905 名前:デフォルトの名無しさん :2005/04/06(水) 12:18:33
>>903
それならこうするとどう?
wofstream ofs("hoge"); //グローバル
ofs.imbue(std::locale("japanese")); //WinMainかどこか

906 名前:デフォルトの名無しさん :2005/04/06(水) 14:42:26
素直にCのロケール関数を使うというのはこのスレでは禁忌かね?

setlocale( LC_ALL,"" );

907 名前:デフォルトの名無しさん :2005/04/07(木) 00:04:36
>>898
> memset や ZeroMemory で埋めること自体にたいしたメリットが無いのに、
構造体のサイズが変わっても大丈夫。いや、そのためのコンストラクタなんだが、
C/C++ ハイブリッドでプログラミングせにゃならん場合もまだあるんで。

ついでに構造体の要素に構造体サイズを書き込むようにしておくと、関数
呼び出しインターフェースの後方互換性を保ちつつ拡張しやすい。

908 名前:デフォルトの名無しさん :2005/04/07(木) 00:11:54
移植性の話は無視して、そもそもゼロ埋めの利点って何?
単にバグ発見を遅らせるだけのような気がするのだが

909 名前:デフォルトの名無しさん :2005/04/07(木) 00:16:07
ゼロ埋めが許される条件って??
sockaddr_inとかレガシーな構造体をmemsetしてるの結構
みかけるんだけど

910 名前:デフォルトの名無しさん :2005/04/07(木) 00:27:41
>>908
逆だろ。ポインタが含まれてればアクセスしたとたん落ちる。

911 名前:デフォルトの名無しさん :2005/04/07(木) 00:50:25
>>908
メンバをひとつひとつ 0 クリア (整数・実数) または NULL クリア (ポインタ)
するのが面倒っちいとき、memset() なら一行で、かつメンバ変数の増減が
あっても気にしなくていい、とか。
個人的には気持ち悪さが先にたつけどね。

912 名前:デフォルトの名無しさん :2005/04/07(木) 01:14:00
HOGE hage = {0};
ってやればmemsetすらいらないんだけどな。

913 名前:デフォルトの名無しさん :2005/04/07(木) 02:02:05
C++厨はこれだから困る、COBOLでもやっとけ

914 名前:デフォルトの名無しさん :2005/04/07(木) 02:11:23
>>912
HOGE *hage
hage = malloc(sizeof(HOGE));
*hage = {0};

こうできなきゃ実質意味無い

915 名前:デフォルトの名無しさん :2005/04/07(木) 02:51:29
だからコンs

916 名前:デフォルトの名無しさん :2005/04/07(木) 10:31:52
>>914
HOGE const zero_initialized_HOGE = {0};
*hage = zero_initialized_HOGE;

こっちのほうがマシ。

917 名前:デフォルトの名無しさん :2005/04/07(木) 10:33:50
>>914
calloc使えばええやん

918 名前:デフォルトの名無しさん :2005/04/07(木) 11:02:45
PODならnew hoge()って括弧付ければ0クリアしてくれるだろ

919 名前:916 :2005/04/07(木) 11:07:34
>>918
あ、それじゃぁ
*hage = HOGE();
でいいのか。

zero_initialized_〜 はCで使ってた方法だったようだ。

920 名前:デフォルトの名無しさん :2005/04/07(木) 20:00:56
>>918
でたらめこくでねぇ

>>919
よいわけねぇべ

921 名前:デフォルトの名無しさん :2005/04/07(木) 20:02:09
>>920
違うの?
詳細キボン

922 名前:デフォルトの名無しさん :2005/04/07(木) 21:02:33
>>916
それじゃ、スタックに乗っちゃうじゃん

923 名前:デフォルトの名無しさん :2005/04/07(木) 21:58:39
>>921
実際やってみれ

924 名前:デフォルトの名無しさん :2005/04/08(金) 00:06:50
>>922
static つけるか、 namespace スコープに定義を移すか、 どっちかすればいいだろ。

925 名前:デフォルトの名無しさん :2005/04/08(金) 00:26:02
>>920,923
ttp://www.kuzbass.ru/docs/isocpp/expr.html#expr.new
ttp://www.kuzbass.ru/docs/isocpp/expr.html#expr.type.conv
ttp://www.kuzbass.ru/docs/isocpp/decl.html#dcl.init

規格の 5.3.4.15 と 5.2.3.2 により、 T がPOD型であれば
new T() および T() の値はデフォルト初期化されることになっている。
8.5.5 により、POD型に対するデフォルト初期化はゼロ初期化になる。
ゼロ初期化は T x = {0} と同様の初期化である。

>>921
規格への準拠度に不安のあるコンパイラ使ってるんじゃなければ、安心していい。

926 名前:デフォルトの名無しさん :2005/04/08(金) 01:05:55
HOGE hage();

927 名前:デフォルトの名無しさん :2005/04/08(金) 01:27:46
>>926
はいはい関数宣言ね。

928 名前:デフォルトの名無しさん :2005/04/08(金) 06:05:04
>>920=>>923って>>926が言いたかっただけ?

929 名前:デフォルトの名無しさん :2005/04/08(金) 08:49:28
俺のVC7ゼロ初期化しねーよ!タココンパイラだな

930 名前:デフォルトの名無しさん :2005/04/08(金) 09:58:23
POD型のみのメンバで構成された構造体はPOD型なの?

931 名前:デフォルトの名無しさん :2005/04/08(金) 09:58:57
>>930 はいそうです。

932 名前:925 :2005/04/08(金) 10:13:30
忘れてたけど、神経質な人はこちらも参照するように。
ttp://www.open-std.org/jtc1/sc22/WG21/docs/cwg_defects.html#178

struct T { int i; std::string s }; のような(PODとは言えない)型についての初期化動作が
新しい値初期化(value initialize)という言葉によって規定されることになっている。

933 名前:デフォルトの名無しさん :2005/04/08(金) 12:14:47
何?そしたら>>920はトンデモの人ですか?逝っていいよ>>920

934 名前:デフォルトの名無しさん :2005/04/10(日) 15:32:22
>>920はpodかどうかを標準では判定できないことを体現したのです

935 名前:デフォルトの名無しさん :2005/04/11(月) 01:19:36
もしかしてfstream等のストリームは例外をthrowしないんですか?
newをわざと例外をthrowするようにしてstringstreamにoperator<<で書き込んでみたけど
例外は飛んで来ませんでした。

936 名前:デフォルトの名無しさん :2005/04/11(月) 01:25:21
>>935
自分でいじったnewがoperator<<で呼ばれなかっただけじゃない?

937 名前:935 :2005/04/11(月) 01:42:37
>>936
いえ、自分のoperator newが呼ばれていることは
std::coutへの出力とデバッガで追っかけるので確認しました。

938 名前:デフォルトの名無しさん :2005/04/11(月) 01:55:19
>>937
ストリームは例外をthrowする。
原因を知りたければソース晒せ。

939 名前:デフォルトの名無しさん :2005/04/11(月) 02:21:51
>>935
streamは古いC++との互換性を重視し、デフォルトでは例外を飛ばさない
ようにしてあるが、意図的に飛ばす事もできる。

それがメンバ関数 exceptions()。但し飛ばせる例外はstd::ios_base::failure
クラスに含まれるフラグに限られる。具体的にはstd::ios::eofbit、std::ios::failbit、
std::ios::badbit等。

940 名前:デフォルトの名無しさん :2005/04/11(月) 02:23:44
おっと。送出される例外は、std::ios_base::failureオブジェクト、でした。

941 名前:デフォルトの名無しさん :2005/04/11(月) 02:34:00
>>939
ユーザーがテンプレートを介して例外を飛ばす処理を混ぜた場合は
ストリームの例外マスクは関係ないだろ。

942 名前:デフォルトの名無しさん :2005/04/11(月) 03:08:04
こんな簡単な例でもちゃんと例外は飛んでくるな。ふむふむ。

#include <iostream>
#include <sstream>

class Except {
};

std::ostream& operator<<(std::ostream& os, const Except& ex) throw(int)
{
 throw 1;
}

int main()
{
 std::ostringstream ostr;
 Except ex;

 try {
  ostr << ex;
 }
 catch (const int&) {
  std::cout << "int thrown from ostringstream\n";
 }
}

943 名前:デフォルトの名無しさん :2005/04/11(月) 11:26:05
>>942
は?

944 名前:935 :2005/04/11(月) 12:28:43
exceptionsを呼ぶことで例外が飛んでくるようになりました。
exceptions周辺のソースを見たところ
ストリームバッファやnew等が例外を投げた場合はその例外がそのまま飛んできて
例外が投げられなくてもストリームバッファの処理がエラーで返った等の場合はfailureがthrowされるようですね。

945 名前:デフォルトの名無しさん :2005/04/11(月) 23:35:36
class A
{
class C;
class B
{
public:
class B(C& r) { int i = r.i; }
};
class C
{
public:
int i;
};
};

A::BのコンストラクタはCの完全な宣言が必要なはずなのにコンパイルが通ってしまいます。(VC++6)
このB, CをAの外に出すとCが認識できない型とエラーになります。
この振る舞いは言語規格として正しいのでしょうか?

946 名前:デフォルトの名無しさん :2005/04/12(火) 00:52:40
>>945
g++ (GCC) 3.4.1 (cygming special)
:7: error: expected `)' before '&' token

947 名前:デフォルトの名無しさん :2005/04/12(火) 02:11:53
VC7.1はそのままコピペで通っちまったぜぃ

948 名前:デフォルトの名無しさん :2005/04/12(火) 05:33:00
sign(x) = { 1(x>=0), -1(x<0) }
となるような、引数の符号を返してくれる関数って標準にありませんか?

949 名前:デフォルトの名無しさん :2005/04/12(火) 05:52:58
(x>0)-(x<0)

950 名前:デフォルトの名無しさん :2005/04/12(火) 09:30:24
>>949
なるほど、こんなもんかな。
template<class T> int sign(const T& a){return (a > 0) - (a < 0);}

951 名前:デフォルトの名無しさん :2005/04/12(火) 09:33:27
< と > のオーバーロードを要求する時点で終わってる

952 名前:デフォルトの名無しさん :2005/04/12(火) 09:57:02
>>950
「符号」が意味を成すような型に、大小比較を要求して何が悪いの?

953 名前:952 :2005/04/12(火) 09:58:02
アンカーミスった。 ×950 → ○951

954 名前:デフォルトの名無しさん :2005/04/12(火) 09:59:30
<だけで十分事足りるって事

955 名前:デフォルトの名無しさん :2005/04/12(火) 10:03:03
じゃ、
template<class T> int sign(const T& a){return (0 < a) - (a < 0);}
で。std::min()/max()にあわせて < のみ必要ということで。

956 名前:デフォルトの名無しさん :2005/04/12(火) 10:04:58
>>955
それなら漏れも全然文句なし

957 名前:デフォルトの名無しさん :2005/04/12(火) 10:35:01
950がダメで955が良い理由を教えてプリーズ

958 名前:デフォルトの名無しさん :2005/04/12(火) 10:37:27
>957
∩∩
(x0 )

959 名前:デフォルトの名無しさん :2005/04/12(火) 11:08:47
符号有りなしを比較するのに < しかオーバーロードしないケース
ってあるのか?


960 名前:950=955 :2005/04/12(火) 11:17:07
>>959
そう言う横着する香具師もいるかも知らん。
少なくとも、敢えて両方使う必要がないと納得した。
#実際、自分でもそう言うクラス作ってるし。
##まぁ、符号判断はしてないが。

961 名前:デフォルトの名無しさん :2005/04/12(火) 11:33:55
Effective C++ の第3版って、Sutterの C++ Coding Standards と内容かぶってない?

962 名前:デフォルトの名無しさん :2005/04/12(火) 12:32:25
end()で得られるイテレータに対しインクリメントをした場合の動作は
どう定義されているのでしょうか?
自分で作ったクラスにvectorやlistのiteratorと同じものを実装しようとしてます。

963 名前:デフォルトの名無しさん :2005/04/12(火) 12:51:50
>>960
そこでboost::operatorsですよ

964 名前:960 :2005/04/12(火) 14:03:07
>>963
仕事ではboostを使いにくい事情があるし、個人ではSTLを一通り理解してからと思ってるので
boost::operatorsは知らなかった。よければ簡単に解説してくれないかな。

965 名前:945 :2005/04/12(火) 15:05:48
>>946-947
VCコンパイラの余計なお世話ってことで、言語的にはNGなんですかね。

966 名前:デフォルトの名無しさん :2005/04/12(火) 15:38:41
>>965
問題はそこではなくて、
単純なシンタックスの方。
>class B(C& r) { int i = r.i; }
これがおかしいと>946は指摘している。

967 名前:945 :2005/04/12(火) 15:51:35
>>966
ああ、直す前のコードを貼ってしまった様で・・・
そこのclassは取ってください・・・

968 名前:デフォルトの名無しさん :2005/04/12(火) 17:36:17
>>964
let's boostをそのまま引用

「特別な理由がなければ、a > b と b < a は同じ意味にすることが多いと思います。
要するに、operator< を定義してしまえば即 operator> の定義も決まると言うこと。
operator== と operator!=、あるいはこれらと operator<=、operator>= の関係も同じですね。
こういうのを、最低限の演算子だけは定義してから残りを boost::operators に任せることで、
自動的に生成することができます。」

operator>を定義すれば勝手にoperator<も定義してくれる…とかそういう話
operator+=からoperator+ なども。

969 名前:デフォルトの名無しさん :2005/04/12(火) 19:04:38
template<class T> int sign(const T& a){return (T(0) < a) - (a < T(0));}
の方がいいんでねぇかなぁ。

970 名前:964 :2005/04/12(火) 19:06:13
>>968
THX!
やはりboostも勉強しておいた方がいいなぁ……

971 名前:デフォルトの名無しさん :2005/04/12(火) 21:37:20
どんなものがあるかぐらいは知っておくといいかもしれないです

972 名前:デフォルトの名無しさん :2005/04/12(火) 23:04:44
>>955>>969も結局"0"に関するコンセプトが必要になりますよね.

>>961
>Effective C++ の第3版
第2版と第3版の差分って何ですか?

>>962
end()で得られるイテレータはそもそもインクリメントの事前条件を
満たさないので結果は未定義です.

973 名前:961 :2005/04/13(水) 01:04:27
>>972
差分というか構成が全然違う。
ttp://www.codecomments.com/showthread.php?s=3bf5b9d9a7292a490bd71acc7abdc171&threadid=408863&perpage=10&pagenumber=2

974 名前:デフォルトの名無しさん :2005/04/13(水) 01:08:13
>>972
さらに汎用的にするなら、比較の基準となる値を特性クラスで渡すとか。

// 必要なら特殊化する
template <typename T> struct traits { static T const base = T(0); };

// ここも必要なら U に適当なクラスを渡す
template<class T, class U = traits<T> > int sign(const T& a)
{ return (U::base < a) - (a < U::base); }

975 名前:デフォルトの名無しさん :2005/04/13(水) 01:33:20
>>945,965
いや。gccでも(>967の修正が済んだ状態で)通る。
VCもgccも、メンバ関数内ではネストされたクラスはすでに完全な型になっているようだった。
しかし規格(FDIS)中にOK/NGを明確に決定するような記述は見つからなかった。

ただ、 9.2.2 に
"the class is regarded as complete within function bodies"
とような記述は有る。
一応関係はしていると思うけど、これで
ネストされたクラスについても同様とは言えないはず。

976 名前:972 :2005/04/13(水) 01:48:12
>973
うっひょー!買い即決ですっ!今春遅くですね.
http://www.amazon.co.jp/exec/obidos/ASIN/0321334876/

>974
あぁ,そうか.特殊化できるのを忘れてました.
ちなみに,関数テンプレートのテンプレート引数にはデフォルト指定できないですよ.

977 名前:デフォルトの名無しさん :2005/04/13(水) 05:07:19
Effective C++の第3版が日本語化されるのはいつ頃だろか?

978 名前:962 :2005/04/13(水) 10:29:02
>>972
鼻から悪魔が出るコードでいいってことですね。ありがとう。

979 名前:デフォルトの名無しさん :2005/04/13(水) 11:48:31
>>977
ゴシップ雑誌と大して変わらない価値しかない。

980 名前:デフォルトの名無しさん :2005/04/13(水) 20:52:55
>>979
そんなことは聞いていない

981 名前:デフォルトの名無しさん :2005/04/13(水) 20:54:18
>>980
聞かれなくても意見は言う。

982 名前:デフォルトの名無しさん :2005/04/13(水) 22:11:02
>>981
お前のレスはゴシップ雑誌と大して変わらない価値しかない。

983 名前:デフォルトの名無しさん :2005/04/13(水) 22:14:01
>>982
ほう、俺の意見はそんなに価値があるのか。

984 名前:デフォルトの名無しさん :2005/04/13(水) 22:17:11
>>983
お前、常時このスレ監視してんのか!?

985 名前:デフォルトの名無しさん :2005/04/13(水) 22:22:39
>>984
仕事中でもレスが付けばすぐに分かる。


986 名前:デフォルトの名無しさん :2005/04/13(水) 23:03:16
>>985
お前まだ仕事してんのか!?2chなんか見てる暇あるんなら、さっさと仕事片付けろよ!

987 名前:デフォルトの名無しさん :2005/04/13(水) 23:52:41
元の話題でやり込められたから仕事に論点をずらしたんですね ;-)

988 名前:デフォルトの名無しさん :2005/04/14(木) 00:37:40
元の話題って何だろ。

というか、コレでやり込めたつもりだったんだ。
はは、すげー脳内回路してんな。

989 名前:デフォルトの名無しさん :2005/04/14(木) 00:43:58
>>988
元の話題は>>977だろ。

というか、コレでやり込めたつもりだったんだ。
はは、すげー脳内回路してんな。

990 名前:デフォルトの名無しさん :2005/04/14(木) 00:58:14
うぜぇよおまえら

991 名前:デフォルトの名無しさん :2005/04/14(木) 01:01:44
>>989
>>977の話題で、やり込めたと思えるお前は一体なんだ。

そして、俺は「やり込めた」とか言ってないからさ。
頭悪い鸚鵡返しはダメでしょ。お前の脳内回路はやっぱアレやね。

992 名前:デフォルトの名無しさん :2005/04/14(木) 01:03:42
ソロソロ次スレ立てないと

993 名前:デフォルトの名無しさん :2005/04/14(木) 01:05:48
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いします。
IDE(VC++など)などの使い方の質問もその開発環境のスレに
お願いします。

前スレ C++相談室 part39
http://pc8.2ch.net/test/read.cgi/tech/1106527792/

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり

994 名前:デフォルトの名無しさん :2005/04/14(木) 01:06:36
STLつかうと一気に実行ファイルサイズが10倍に?!

995 名前:デフォルトの名無しさん :2005/04/14(木) 01:07:12
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

996 名前:デフォルトの名無しさん :2005/04/14(木) 01:08:47
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

997 名前:デフォルトの名無しさん :2005/04/14(木) 01:09:42
997

998 名前:デフォルトの名無しさん :2005/04/14(木) 01:11:06
ここはSTLも含むようにするんだっけか

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問もこのスレにお願いします
IDE(VC++など)などの使い方の質問もその開発環境のスレに
お願いします。

前スレ C++相談室 part39
http://pc8.2ch.net/test/read.cgi/tech/1106527792/

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり

999 名前:デフォルトの名無しさん :2005/04/14(木) 01:11:22
とりあえず次スレ立ててくる

1000 名前:デフォルトの名無しさん :2005/04/14(木) 01:11:44
999


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