[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 21:45 / Filesize : 205 KB / Number-of Response : 843
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part56



1 名前:デフォルトの名無しさん [2007/07/26(木) 00:33:07 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

テンプレその他 >>2-15 付近参照

前スレ
class C++相談室lt;part56gt;
pc11.2ch.net/test/read.cgi/tech/1170343752/l50



381 名前:368 mailto:sage [2007/08/16(木) 19:28:22 ]
>>375
あわわ間違って(*aaa.subclass["bbb"])としちゃってたようです

>>377
エラー部分だけ抜き出そうとして型違いのreturnになってました、ごめんなさい…

>>379
単語の意味がわかってないので検索してやってみます、ありがとうございました

382 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 19:35:38 ]
でもなんでchar *じゃなくて、char * &なんだろう。
constでないということは、こういうことがやりたいんだろうか。


(*aaa.subclass)[''bbb"] = new char[10] ;

いや、ひょっとしたらこういうことがしたいのか

char * & ptr = (*aaa.subclass)[''bbb"] ;
ptr = static_cast<char *>( realloc(ptr) ) ;

383 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 20:59:50 ]
class Base
{
public:
Base(int n) {}
};
class Derived : Base
{
public:
Derived(int n) {}
};
これがどうしてダメで、Base::Base()が必要なのか教えてください。

384 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:06:38 ]
親クラスに n を渡すなら、それをちゃんと書かなきゃいけない。

public:
Derived(int n) :Base(n) {}

385 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:06:53 ]
はい?

386 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:07:27 ]
>>383
その例のDerived のコンストラクタは結局 Derived(int n) : Base() {} の省略形だから

387 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:21:45 ]
そのnは親に渡さずに別に使うnかもしれないし。

388 名前:デフォルトの名無しさん [2007/08/16(木) 23:12:17 ]
>>383
Derived クラスのインスタンスを生成するときに
Base クラスのコンストラクタを呼び出すからなんだと思います。
コンストラクタを定義していないときはデフォルトコンストラクタが呼び出されるけど
定義してると定義されたものを呼び出すから
この場合は引数のいらないコンストラクタを定義するか
Derived クラスのコンストラクタで
Derived(int n) : base(100) {}
みたいに Base(int n) を呼び出して
引数を渡さないとだめだと思うんです。

初心者なんで間違ってるかもしれません。


っていうか STL 難しすぎでうっ!

389 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:20:25 ]
Baseのコンストラクタにデフォルト値を書いておくのもいいかも

っていうか STL 関係ねー



390 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 00:01:01 ]
>>388
>っていうか STL 難しすぎでうっ!
でうっ?

391 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 00:20:57 ]
唐突にこれを思い出した
ttp://www.karakuri-box.com/~killer-q/file7/KITERETU0022.png

392 名前:デフォルトの名無しさん [2007/08/17(金) 00:41:05 ]
すいません。釣りではありません。
C++ってどんな局面で使うんですか?
WinアプリならC#使ったほうが圧倒的に楽


393 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:00:07 ]
脳みそ沸かしたいとき

394 名前:デフォルトの名無しさん [2007/08/17(金) 01:24:19 ]
Cで先頭アドレスと要素数がわかってるのですが
ForループじゃなくてC++のiteratorに変換してくれるtemplateとかないんですか?

ない場合どのiterator継承すればいいんでしょうか

395 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:40:46 ]
T*head; size_t element;が既知なんでそ?
なら、&head[0]〜&head[element]がiteratorの要件を満たしてくれるでそ?

396 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:48:01 ]
>>392
楽かどうかなら C# が楽だろうが、
C# は Windows にしか優しくないし、
速度も C++ に劣るし、
そういうのが必要な時には C++ が圧倒的有利。

397 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 02:19:58 ]
速度が必要になるようなミッションクリティカルな場面に出会ったことがない
最近は全部C#。

398 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 02:21:20 ]
サーバーアプリだとC#?ハァ?

399 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 02:38:29 ]




400 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 03:59:53 ]
つかここ#かんけーねーし

401 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:58:45 ]
>>392
C#を実装するのに使います

402 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 12:37:18 ]
>>401が良い事言った

403 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 21:16:42 ]
なぜ想像力がデスクトップとサーバー位にしか働かないんだ
プログラムが必要な場面はいろいろあるぞ

404 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 21:39:47 ]
class CFUNC a;
の2次元配列を動的に確保する場面があって、
CFUNC ***pppa;
として使いたいですが、
pppa = new CFUNC**[y_len];
でまずy要素を確保して
pppa[0] = new CFUNC*[x_len];
各y要素のx要素を確保して
pppa[y][x] = new CFUNC();
で、各要素をインスタンス化して
(*(pppa[y][x])).hoge();
みたいに使おうと思うのですが、このpppaを破棄する場合に
deleteはどう書いたらいいのかわからなくなってしまいました。。。どなかたpppaをdeketeしてもらえませんか?
ちなみによくしらないのですが、delete[]ってなんで配列の要素数がわかるんですか?


405 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:15:50 ]
typedef CFUNC*** PPPCFUNC
typedef CFUNC** PPCFUNC
typedef CFUNC* PCFUNC
と整理してやると

PPPCFUNC pppa = new PPCFUNC[y_len]
pppa[0] = new PCFUNC[x_len]
pppa[y][x] = new CFUNC
になるんで
deleteとdelete[]で困る局面はなくなると思ってみたり

要素数は実装によるけどもコンパイル時には決められないからどっかで一元管理してんでないすか多分
俺はそうする

406 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:53:53 ]
VC++では先頭の手前に要素数が格納されてた希ガス

407 名前:404 mailto:sage [2007/08/17(金) 22:59:04 ]
なるほど、typedefを忘れてました。
ではこれで確保したpppaはdelete[] pppaで破棄できるんですねっ!
要素数は、
int pppa_len_y;
int *pppa_len_x = new int[ pppa_len_y ];
でnew時に一緒に初期化しています。
もっと手軽な方法ありますか?


408 名前:404 mailto:sage [2007/08/17(金) 23:02:44 ]
>406
それじゃぁmallocするときに、必要size+1とってfreeのときにそれ利用してるんですねぇ。
ってことは要素数を保持しなくても、ポインタの手前の要素数使えってこと?
ちなみにc++の規定ですか?処理系依存ですか?

409 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:17:52 ]
処理系依存。



410 名前:404 mailto:sage [2007/08/18(土) 00:17:58 ]
>>405
PPPCFUNC pppa = new PPCFUNC[y_len];
でnewしようとすると、PPFUNC*からPPPFUNCに変換できません
と怒られてしまいました。
PPPCFUNC pppa = (PPPFUNC)( new PPCFUNC[y_len] );
でキャストして大丈夫なのでしょうか?

411 名前:404 mailto:sage [2007/08/18(土) 00:36:14 ]
すいません、勘違いです。typedefミスってました。OTL

412 名前:383 mailto:sage [2007/08/18(土) 11:08:57 ]
>>384-389
ありがとうございました。よくわかりました。

最近C++を勉強しているのですが、Java育ちのゆとり世代なものでスパルタさにガクブルものです。
class Foo
{
private:
char* s_;
public:
Foo(char* str) : s_(new char[strlen(str)+1]) { strcpy(s_, str); }
~Foo() { delete[] s; }
};
int main()
{
Foo a("foobar");
Foo b = a;
}
この程度で落ちるってのがすごすぎです(なぜ落ちるのかはちゃんとわかりますが・・・)。

413 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 11:24:18 ]
>>412
生でnewを使うからそういう羽目になる。
std::stringを使うなり、std::vectorを使えばいい。
せめて、スマートポインタを使え。

414 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 11:34:02 ]
コピーコンストラクタや代入演算子をちゃんと書かないから・・

415 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:19:01 ]
C++を使う時は、リソースの所有権を常に意識する必要がありますな。
RAIIはちゃんと勉強しといたほうが良いよ

416 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:37:37 ]
そうだな、コピーコンストラクタと代入演算子は常に書くべき。

417 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:40:35 ]
Java→C++とか死亡ルートじゃね?
Java→C→C++って回るべきだと思うんだが

418 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 13:32:09 ]
GC付きC++って選択肢もあるんでないの(w

419 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 14:17:34 ]
Javaなんか使うから頭が馬鹿になるんだよ。
GC付きの言語を使うと変な癖が付く。



420 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 15:08:22 ]
時代に逆行している人

421 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 16:59:23 ]
>>417
自分はC#→C→Java→C++ってやってきたけどおk?

422 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 17:03:18 ]
コンストラクタで例外を投げるクラスがあり、
そのクラスをstaticに使ってるんですが、
この場合、どのように例外をキャッチすればいいのでしょうか?

class Throw{ public: Throw(){ throw 1; } };
class TestClass{
static Throw throw;
};

こんな感じです。

423 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 17:12:19 ]
>>422
コンストラクタの中でキャッチするか、プログラムが死ぬか。

424 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 17:36:05 ]
>422
staticをやめる

425 名前:デフォルトの名無しさん [2007/08/19(日) 13:25:57 ]
教えてください。

たとえば
int i = 100, *ip;
double d = 123.456, *dp;
ip = &i;
dp = &d;
char *s = "abcdefg";

cout << ip << " " << dp << " " << s << endl;

このようなコードで int型やダブル型のポインタを cout で出力すると
アドレスが表示されるのに char型のポインタだと
文字列が表示されるのがいまいちよくわからなかったんですが
ずっと勉強してきてふと思ったんです。
cout で演算子オーバーロードでそうなるようにされてるのかなと。
で定義されているコードを探そうと思ったんですけど
なんかごちゃごちゃしててよくわかりません。
もし予想が当たってるならどのファイル見ればいいかでしょうか?

426 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 13:54:49 ]
>>425
basic_ostream っていうクラステンプレートに対して定義されている。
char もテンプレート引数になってるからちょっと探しにくいだろうね。
ヘッダ ostream に対応するファイルで定義されているはず。

ごちゃごちゃしたヘッダを読むのがいやなら >>2 から規格のドラフトでも見るといい。

427 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 17:00:46 ]
教えてください。

428 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 17:31:07 ]
何をだ

429 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:41:48 ]
>>428
事故解決すますた



430 名前:デフォルトの名無しさん [2007/08/19(日) 21:20:33 ]
>>426
ありがとうございます。
ファイル見てみたんですけど
今の僕にはまだ難しくてよくわかんないんで規格もみたんですけど
いまいちわからなくて
検索してたら説明されてるページをみつけました。
www.io.nara-su.ac.jp/kanrishitsu/manual/FSUNf90/LANG/japanese/C++/stdlib/stdref/bas_8583.htm

これですっきりしました。

431 名前:デフォルトの名無しさん [2007/08/20(月) 15:44:57 ]
質問です。
下のクラス図のようなクラスを実装したいのですが、DataClassのように、二つ(以上)で共有しているクラスは、コード上でどのように書いたらいいのでしょう?
DataClassのインスタンスをグローバルな領域で作るしかないのでしょうか?

クラス図
enjoi.blogdns.net/up/src/868.jpg

とりあえず書いてみたコード
class DataClass{
private:
  int data;
public:
  void setData(int newData);
  int getData();
};
class ClassB
{
public:
  bool DoSomething();
};
class ClassA
{
private:
  ClassB classb;
};


432 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:18:28 ]
状況次第じゃね。

どっちかに持たせて、もう片方にも渡せるようにすることもあるし、
動的に確保して、A, B の両方のスマートポインタに入れとくこともあるし、
A を所有するクラスに持たせて、そっから渡すようにすることもあるし、
シングルトンにしてグローバルな領域に置くこともあるし、

433 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:18:28 ]
そんなに文句あるんならnamespace使うなりClassAとClassBを統合するなりすれば?

434 名前:デフォルトの名無しさん [2007/08/20(月) 16:20:59 ]
初心者だからよくわかんないんですけど
DataClass をメンバとして持つんですか?
ClassA と DataClass の関係って必要なんですか?
ClassB経由で十分なんじゃないでしょうか?

435 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:23:07 ]
関連のあるABのオブジェクトが同じDataClassオブジェクトと関連を持つかどうかは示されていない。
むしろ同じオブジェクトではないと考えるほうが自然。

436 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:28:10 ]
A, B, DataClassを保持する親クラスParentを作っておいて、A, Bのインスタンス生成時にParentへのポインタを渡し、
各インスタンスはParentへのポインタを通してDataClassへとアクセスする。

437 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:30:25 ]
B に入れといて、B を通して操作する。

438 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:35:13 ]
多重継承はやめとけ。実世界でも親の種が違う生き物は短命だ。

439 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:36:43 ]
どこに多重継承が出てくるんだ?



440 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:59:47 ]
あの矢印は関連。サブクラスは白抜き三角矢印。

441 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 17:56:47 ]
たくさんのご回答ありがとうございました。

複数の方法論に、そもそも設計の段階でご意見まで、たくさんいただきまして、ありがとうございます。

少し数があるので、それぞれについて吟味して、決めた際にまた改めてのお礼がてらご報告にきたいと思います。
ありがとうございました。

442 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:33:29 ]
>改めてのお礼がてらご報告にきたいと思います。
しなくていいよ。

443 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:48:57 ]
stringstring を途中で空にすることはできるでしょうか?

444 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:56:17 ]
std::stringstream?

445 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:27:07 ]
なんだこのバグは
support.microsoft.com/kb/326616/ja
>>443
stringstream.str("");

446 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:00:38 ]
>>445
鬱になった
やはりSTLportを入れて使(ry

447 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:10:08 ]
std::coutで、時々アドレスのような文字列("0xABCDEF12"みたいな)が出力されたり、
std::wcoutで何も出力されなかったりして困ってたんだけど、445が原因?
でもVS2005 Proだから違うか

448 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:34:28 ]
>>447
coutにwchar_t*食らわしたり、localeを適切に設定せずに日本語文字列食わしてるならお前が悪いだけ。

449 名前:印字ケータ [2007/08/23(木) 14:31:20 ]
バイナリエディタでファイルを開くと

保存してある漢字の"日"という文字は16進数で93 FAと表示されてますが、

コレを読込んで、配列に入れると-109と-6となります。

16進数で表示させたいので、変換する方法を教えてください。

お願いします。



450 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:35:18 ]
unsignedにキャストすればいいんじゃね。

451 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:40:35 ]
93 FA を2進数であらわすと
1001 0011 1111 1010
10010011 を符号付き10進数であらわすと
-109
11111010 を符号付き10進数であらわすと
00000110
-6

そのまま16進にすれば同じ
気にしないで突き進め

char を intにするなら符号拡張がおきるので>>450のとおりunsigned にしとけばいい

452 名前:印字ケータ [2007/08/23(木) 14:42:15 ]
>>450

返答ありがとうございます。

早速やってみましたが、変換後に4294967187というデカイ数値になりました。

ちなみに、unsignedの変数にキャストして代入してみました。

もしかして私のやり方が間違ってますか。



453 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:54:41 ]
4294967187 ってのは16進に直すと ffffff93
93 はマイナスだから、そのままint にもってくと 符号拡張するんだよ
unsigned にキャストってどこでどうやったの?
unsigned な変数に入れてやってみ。

454 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:56:17 ]
符号拡張されてるんだろう
10010011→11111111111111111111111110010011

455 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 15:04:05 ]
char ch = 93;
int n = (unsigned char)ch;

456 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 18:34:31 ]
>>445
Dinkum版stringの短文字列最適化がアダになったな。
実装としては面白くて好きなんだがな。

457 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:36:57 ]
2005SP1で直ってるっぽいが

458 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 08:15:51 ]
vector< struct X > Func_A();
vectorとかコレクションを返す関数って効率悪い?

459 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 08:30:10 ]
>>458
コンテナを参照で受け取ったほうがいいんじゃないか?



460 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 08:44:11 ]
そこでRVOに期待、右辺値参照にもっと期待。

461 名前:sage [2007/08/30(木) 10:25:41 ]
>>459
参照で受け取るっていうのは
void Func_A( vector< struct X >& );
か、
vector< struct X >& Func_A();
ってことですか?
とりあえず上の参照を引数にする方でやってみます

462 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 11:47:47 ]
vector< struct X >& Func_A();
はどっかに所有者用意しなきゃいけないから色々と面倒じゃね?

基本はauto_ptr戻しだと思うけど。


463 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:55:27 ]
いや、たぶん void Func_A(std::vector<struct X>& arg) のことだろう。

仕様と実装を混同するのはよくないが、実際には多くのコンパイラにおいて
「構造体(class)を返す関数」は、暗黙の引数(返り値へのポインタ)を受け取って、
そこに書き込んで返しているわけだから。

で、return直前にインスタンスを生成する以外の場合、つまり
ローカル変数としてvectorを宣言していろいろ操作しそれを返す場合
おそらくRVOされる可能性も低いんじゃないね。知らないけど。

464 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:49:22 ]
>>463
よくある戻り値用のポインタが指しているのは確保されただけで
まだコンストラクタが走ってない領域ね。引数で受け取る場合は
必ず構築済みのインスタンスを指すんで、仕様的にも違いがある。

最後の場合は「可能性が低い」じゃなくて RVO は不可能。

465 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:52:15 ]
>>464
Named RVOはVC8がやってるらしいですぜ

msdn2.microsoft.com/en-us/library/ms364057(vs.80).aspx

466 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:55:03 ]
ずっと前の gcc に付いてたのに削除されたな。あれは仕様的に
何か問題があったんだろうか?

467 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:09:49 ]
gcc.gnu.org/gcc-3.1/changes.html
コンパイラが勝手にやるようになったから文法からは削除されただけみたい。

468 名前:464 mailto:sage [2007/08/31(金) 01:23:50 ]
いろんな変数返されたとき困るじゃん、とか思ってたけど、そうじゃないときには
働くのね。ふーん。

469 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:35:07 ]
引数が同じで戻り値が違う型の関数を定義する方法って知らないですか?
できればクラスのメンバ関数でやりたいです
まえにWebで見かけたんだけど見つからなかったorz




470 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:48:21 ]
>>469
引数の型が同じなら関数を呼び分けることができないから、基本的に無理だろう。
戻り値の型を基底クラスのポインタにして、異なる型の派生クラスのオブジェクトの
ポインタを返すとかじゃダメ?

471 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 03:13:32 ]
>>469
こんな感じ?

struct A {
 template <typename T> T foo(int);
};

void bar() {
 A a;
 char c = a.foo<char>(0);
 short s = a.foo<short>(1);
 // ...
}


472 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:55:28 ]
浮動小数点の小数点以下を簡単に取る方法ってないですか?

473 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:13:39 ]
f - floor(f)

474 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 16:14:22 ]
>>472
modf
>>473は負数のとき正しくない

475 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:35:42 ]
f = f - (float)((int)f);
とかじゃ駄目?

476 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:59:33 ]
f > -1 ? f - floor(f) : aaaaaaaaa

477 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:19:41 ]
>>475
もともと整数部分がint範囲を超えてる場合があるので、
intにキャストするのはまずいと思われ。

478 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:01:01 ]
まさにそのための trunc (truncf) という関数があるんだが、
調べてみたらこれは C99 で定義されてるらしいから C++ では普通使えないな

とはいえ持ってる処理系に存在するかどうかは調べてみたらどうよ

479 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:31:14 ]
unsigned longにキャストは駄目なのか



480 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:05:17 ]
fmod(f, 1.0)

481 名前:469 mailto:sage [2007/09/01(土) 00:26:15 ]
>>470,471
レスdクスです、
自分が見てたのは、こんなのでした
素直に名前を変えます...

struct testFunc {
int n, m;
testFunc(int _n, int _m = 1) { n = _n; m = _m; }
testFunc(int _n, double _m) { n = _n; m = 10; }
operator int() { return n * m * 2; };
operator double() { return n * m * 3.0; };
};

void main() {
int a = testFunc(5);
double b = testFunc(5);
int c = testFunc(5, 5);
double d = testFunc(5, 5);
int e = testFunc(5, 5.0);
double f = testFunc(5, 5.0);
}

もう少し探したらそれらしいのが見つかりました
ttp://homepage2.nifty.com/well/FunnyStorage.html#mutate
やりたかったことはこんな感じ↓
ttp://anond.hatelabo.jp/20070722050021







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<205KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef