- 1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/ スレを勃てるまでもないC/C++の質問はここで 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ スレを勃てるまでもないC/C++の質問はここで 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ スレを勃てるまでもないC/C++の質問はここで 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ スレを勃てるまでもないC/C++の質問はここで 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ スレを勃てるまでもないC/C++の質問はここで 14 pc12.2ch.net/test/read.cgi/tech/1269273471/
- 411 名前:408 mailto:sage [2010/06/04(金) 01:10:36 ]
- ごめんなさい説明不足がありました
今xy軸上に三角形を作るプログラムをやっていて3点を直線で結び出来上がる三角形があるとして ある線が傾き無限の直線になったとき三角形が描けなくなります。※2点のx座標が等しい場合 それで無限になったとき(yの変化量/0)になったら回避したいので質問させていただきました
- 412 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 02:00:07 ]
- 傾きを計算する前に判断しようぜ
- 413 名前:デフォルトの名無しさん [2010/06/04(金) 02:51:47 ]
- 今xy平面に三角形を作るプログラム作成に取り組んでいて3点を線分で結び出来上がる三角形があるとして
ある線分の傾きが無限になったとき三角形が描けなくなります。※2点のx座標が等しい場合 それで無限になったとき(yの変化量/0)になったら回避したいので質問させていただきました
- 414 名前:デフォルトの名無しさん [2010/06/04(金) 02:53:44 ]
- 3点A(1, 0) B(1, 1) C(0, 1) で、AとBのx座標が等しいが、三角形ABCは書ける。
三角形がかけないのは、3点が同一直線上にある場合。
- 415 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 05:51:03 ]
- >※2点のx座標が等しい場合
なぜこれで判定しない?
- 416 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:20:49 ]
- 参照を後からセットすることはできませんか?
Class B; Class A { B& m_b; }; のような状態で m_b をコンストラクトより後のタイミングでセットしたいのです。 ポインタにすればできますが * を付ける必要があるので、参照でやりたいんです。
- 417 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:42:50 ]
- 無理。
生ポインタ弄るのが嫌な場合はboost::reference_wrapper的なのを使えばいいが、 operator* 等を使うのが嫌という要求は言語仕様の埒外。
- 418 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:06:35 ]
- 無理やりやったりして
codepad.org/7goDNgTH 保証されてないよね
- 419 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:21:40 ]
- >>417
>operator* 等を使うのが嫌という要求は言語仕様の埒外。 参照ってそういう機能だろ、問題はセットできるのが初期化時に限られてるということ
- 420 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 13:13:31 ]
- 問題というより安全性の確保だろ。
いつのまにかぬるぽになってたりしないように。
- 421 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 15:13:51 ]
- >>418
LLP64だと悲惨な事になりそうだな
- 422 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 09:42:28 ]
- ポインタも参照もほとんどの実装では中身は同じだろうから
LLP64とかは関係ないと思われる もちろん規格は保証してくれないが ダミー変数の必要のない方法 ttp://codepad.org/h1sj56ka もちろん実際に使っちゃだめだよ
- 423 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:47:02 ]
- get()メソッドで妥協していいならboost::optional<T &>だな
int x, y; boost::optional<int &> opt(x); opt.get() = 1; // x = 1 opt = y; // yに張替え *opt = 2; // y = 2
- 424 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:48:23 ]
- *でも面倒くさいと言ってんのに.get()はないわ
- 425 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:58:50 ]
- じゃあどうしようも無いな
operator . がオーバーロードできない時点で参照剥がしの手間はかならず必要になる 代入と暗黙変換はその限りではないが
- 426 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:05:40 ]
- unionに参照は入れられないか・・・
- 427 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:26:35 ]
- LZ77で圧縮したデータを解凍するソースを書いて欲しいと言われたんだが
圧縮情報を表す箇所って、規定無いよね? abcdeabcdezをLZ77に掛けると、abcde[5,5]zとなるけど [5,5]を判断する場合どうすれば良いの? 圧縮側もこちらで書いていいなら\\[5,5]とか目印入れれば分かるけど 解凍ソースのみで困ってる
- 428 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:40:52 ]
- 解凍ソースあるならいればいいじゃん
- 429 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:51:35 ]
- >>428
ソースは一切なし。圧縮したデータを見ることもまだ出来ない それでいて、最初のLZ77を使ってるからと言われ きちんと解凍出来るソースを書かなきゃいけないみたい 調べると、何処のサンプルも圧縮情報の前に適当なマーク入れたり 9bitにして、その後ろが圧縮情報か見たりしてるから、一発で動くのが書ける気がしない
- 430 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 12:00:37 ]
- LZ77の仕様書よめばどう扱ってるか解るんじゃね?
- 431 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 13:48:25 ]
- 亜種が大量にあるとかいう話だけど
- 432 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 22:41:12 ]
- int[10]が書き込まれてるファイルをfread(hoge,sizeof(int),100,fp)とかやったら足りない部分はどうなるの?
ちゃんと0で埋まる?それとも保障されてない?
- 433 名前:デフォルトの名無しさん [2010/06/05(土) 22:43:52 ]
- >>432
埋まらない。何もされない。
- 434 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 23:17:42 ]
- thx
- 435 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 02:36:53 ]
- C++の具体的に難しいところってどの辺なんでしょうか?Cだとポインタと配列辺りだと思うんですが。
ちなみに今継承あたりを勉強中です。
- 436 名前:デフォルトの名無しさん [2010/06/06(日) 02:40:11 ]
- TMP
- 437 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 09:58:14 ]
- 経験的には、ポインタとか配列は難しくなくて、初心者でもすぐに使い始める。
難しいのは適切に使うこと。初心者はなんでもポインタで解決しようとしがち C++とかもだいたい同じで言語仕様が難しいというより、どう使うのかが難しい。 いっぱい用語があるのも難しいところかも。pimplとか
- 438 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:03:11 ]
- pimpl使ったら分からんと怒られた
- 439 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:08:35 ]
- ポインタは概念が難しいのではなく書式が難しいと言う人が多いけど
どう考えても書式が難しいのではなく概念が難しいから初心者はつまずくだろ
- 440 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:17:43 ]
- ポインタのポインタの配列とか
関数ポインタの配列とか 概念は簡単でも書き方に戸惑う
- 441 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:21:32 ]
- そんなふうに書かなくても済ませられるのがC++のいいところじゃないか
- 442 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:32:38 ]
- >>439
概念が簡単だとは言わないが、わけのわからん書式が、せっかく理解しかけた 初心者の脳を改めて引っ掻き回して台無しにするのも事実。
- 443 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:38:06 ]
- >>442
int *a; *aはint変数のように扱える。論理的かもしれないけど直感的ではないな。 イテレータも、二つのイテレータを使えば0個も表現できるってのも論理的だけど直感的ではなくわかりにくいね。
- 444 名前:デフォルトの名無しさん [2010/06/06(日) 11:41:00 ]
- ポインタは全く難しくないよ。
だってお前らですら全員理解してるじゃんwww
- 445 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:47:36 ]
- つうか概念は簡単だろ
- 446 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:50:16 ]
- Cでポインタより難しい概念あるの?
- 447 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:51:35 ]
- int *p じゃなくて *int p ならまだ分かりやすかったんじゃないかとか思ったり
- 448 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:59:43 ]
- int* a
- 449 名前:デフォルトの名無しさん [2010/06/06(日) 12:13:04 ]
- >>447
int *a; int pa; int asteriska; int XXX; これらの表記では、*a も pa も asteriska も XXX もすべて int型として扱える。 int の後ろに書いたものが、int型になる。 つまり、aの参照剥がしは*aと直感的に分かる。 *int p; この表記では、pがint型へのポインタということが分かるのかもしれないが、 pをどう参照剥がしすればint型になるのかこの書式からは分からない。 以上の点で、前者の表記のほうが分かりやすいと考えられる。
- 450 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:19:44 ]
- >>449
ならば、int *a;で変数の領域が確保されなきゃおかしいじゃん。
- 451 名前:デフォルトの名無しさん [2010/06/06(日) 12:20:51 ]
- ああ、そうだね。
- 452 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:24:03 ]
- じゃあ int &a; は &a が int なんだね
- 453 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:38:21 ]
- int *a = XXX の右側に来るのがポインタ値って時点で全く直感的じゃない
- 454 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:07:06 ]
- >>280
遅れましたがありがとうございました
- 455 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:08:47 ]
- int *a; のメリットは int *a, *b; とするのを確実に忘れないという一点のみなのに
*a が int だとよく分かる(キリッ とか言うから面倒なことになる
- 456 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:10:25 ]
- なるほど
- 457 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:10:52 ]
- int* const a = XXX;
とやりたい時はどうするの?
- 458 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:14:58 ]
- それでいいんじゃないの
- 459 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:15:50 ]
- int *const a = XXX, *const b = YYY;
- 460 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:20:47 ]
- 直感に頼るからいけない
俺は左から型に演算していくと理解してる int const * const & a; (((((int) const) *) const) &) a; intをconstにして、そのポインタ型をとって、それをconstにして、その参照型をとって、それにaという名前をつける add_ref<add_const<add_ptr<add_const<int>::type>::type>::type>::type a;
- 461 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:44:31 ]
- >>460
こんなに深い宣言なんだぞ。キリッ
- 462 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:49:35 ]
- そこへ配列宣言が颯爽と登場。
- 463 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:14:17 ]
- メンバ関数ポインタへの配列があらわれた!
- 464 名前:デフォルトの名無しさん [2010/06/06(日) 14:19:24 ]
- >>452-463
つまり、C/C++の構文はダメダメってことだね。
- 465 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:22:54 ]
- 別に
- 466 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:37:03 ]
- identityとtypedefがあればすべて解決
- 467 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:37:11 ]
- 構文と言うか文法と言うか、とにかくそっち方面で残念な言語だとは思う
- 468 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:20:00 ]
- すみません。
現在1クラス1ヘッダ&1ソース という形で30対のヘッダーとクラスがずらっと並んでいます。 他の方のプロジェクトを見るとヘッダの数だけがやたら多かったり、 逆にヘッダは1個しかなかったりする様なのですが、 1クラス1ヘッダ&1ソース というのは無駄で変なのでしょうか? 新クラスを作るたびに宣言程度のヘッダーを増やすのはやめて、 クラスの宣言程度のヘッダーはギッシリ纏めてしまったりした方が良いのでしょうか。
- 469 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:28:41 ]
- boostなんてファイルのモンスターハウスだぜ
- 470 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:30:04 ]
- ↑ ×30対のヘッダーとクラスがずらっと
○30対のヘッダーとソースがずらっと(訂正すみません)
- 471 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:37:11 ]
- >>468
原則分けたほうがいいよ
- 472 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 21:57:34 ]
- 1クラス1ヘッダ&1ソースでいいだろ
- 473 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 00:48:47 ]
- Javaじゃないんだから、1クラス1ソースに拘ることはないだろ。
まぁ、関連のないクラスを纏めるのは論外だが。 インクルードファイルに関しては、ソースの数だけあっても全くおかしくはないと思う。
- 474 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 12:19:37 ]
- >>468
業務開発なら珍しくない メンテ時には、ひとつのファイルに詰め込むより こっちのが良いことが多い
- 475 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 13:25:51 ]
- C++のdelete[]の挙動について質問です。
int* p = new int[5]; int* q = new int[10]; int* z=p;p=q;q=z; //ポインタの交換 delete[] p; //どこまで開放されるのか? delete[] q; //どこまで開放されるのか? これ、メモリリークが起きたり、 逆に、開放しちゃいけない場所まで 開放されたりしないでしょうか?
- 476 名前:468 mailto:sage [2010/06/09(水) 13:31:07 ]
- >>469 >>472-474
間違ってはなかったのですね。ありがとうございます。疑問が解決しました。
- 477 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 13:50:54 ]
- p[-1], q[-1] あたりにサイズが入ってるから大丈夫
- 478 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 14:54:43 ]
- >>475
それはない 配列newは自分で確保したサイズを覚えているので アドレスさえ渡せば配列deleteは間違えない
- 479 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:08:14 ]
- >>477-478
安心しました。 ありがとうございました。
- 480 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:12:40 ]
- p[-6], q[-6] にサイズ入ってた
codepad.org/8mjF6LOr
- 481 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:20:39 ]
- なんでだろうね20byteも間に挟むなんて勿体無い
- 482 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:32:30 ]
- フリーリストとかブロックサイズとかハウスキーピングに必要な情報はいっぱいあるだろうさ。
- 483 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:56:52 ]
- >476
入れてもらえなかった471涙目www
- 484 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 19:11:24 ]
- サイズの情報があるのにプログラマからは使えないというのは理不尽な気がする
- 485 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 20:53:46 ]
- プログラマがnewにサイズ渡してんだから要らんでしょという考え
- 486 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 21:26:43 ]
- 数バイト確保するより数キロバイトとか多めにとる方が一回の処理時間は大きいの?
- 487 名前:デフォルトの名無しさん [2010/06/09(水) 21:28:48 ]
- 大きくないよ
- 488 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 01:48:00 ]
- >> ずっと前の人
ctfmonをkillっても駄目ダタ やっぱりコンソールが閉じない&killできない。 激オソ報告スマソ
- 489 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 08:59:00 ]
- デフォコンのみ、constメソッドのみ
つまり状態が1つで変化しないクラスのオブジェクトを何個も作るのは勿体無いと思うんだけど これを共有する自然なコードってどう書く?シングルトンかな?
- 490 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:02:33 ]
- >>480
環境依存の事を書いても仕方がない BCCだとp[-4], q[-4]にサイズが入ってるぞ
- 491 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:10:14 ]
- 別に>>480は単なる例であって、どんな環境でもそうだとは言ってないだろ
- 492 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:12:47 ]
- 環境依存のスレは別にあるんだからこのスレで書くな
- 493 名前:デフォルトの名無しさん [2010/06/10(木) 09:21:50 ]
- return 0;は0に返すという意味って大雑把な意味はわかるんですが、
例えば関数 keisan()があったとして return keisan();ってのは同じようにkeisan()に返すって意味ですか? returunの概念がいまいちよくわからんのですが・・
- 494 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:23:54 ]
- returnは返す。
keisan()はkeisan関数を呼び出して、その値。 つまり、return keisan()はkeisan関数を呼び出して、その値を返す。 以上
- 495 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:24:33 ]
- あー、そもそもreturn 0は0「を」(呼び出し元に)返すだからね。
- 496 名前:デフォルトの名無しさん [2010/06/10(木) 09:30:21 ]
- >>494
なるほど、わかりやすい 別にreturn使わなくても int main(void) { keisan(); } だけで呼び出せるけどどういうことでしょう?
- 497 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:31:36 ]
- 意味が違うし、色々と説明したいのは山々だが時間がないので後続に期待w
- 498 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:34:26 ]
- Pascal ならfunctionとprocedureってしっかり分かれているから
理解しやすいのだが、C言語はごちゃ混ぜに出来るし、戻り値を 捨ててしまえるというエレガント(?)な設計になっているため初心者が ここで混同しやすい
- 499 名前:デフォルトの名無しさん [2010/06/10(木) 09:39:12 ]
- >>497
そこをなんとか・・
- 500 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:43:26 ]
- >>499
たとえばkeisan()の戻り値型がdoubleだとすると double a; ... a = keisan(); return a; と return keisan(); は同じような意味になる 要するにこの関数は値を返すか返さないかの違いだけ
- 501 名前:デフォルトの名無しさん [2010/06/10(木) 09:50:42 ]
- >>500
関数ってのは返すのが当たり前じゃないんですか?
- 502 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:53:57 ]
- >>501
そんな事はない void kansuu(void); のように戻り値の所にvoidと書いた関数は値を返さない 返そうとするとコンパイルエラーになる
- 503 名前:デフォルトの名無しさん [2010/06/10(木) 09:55:47 ]
- プログラムの中でreturn使ってないのはいいの?
正しいプログラムなの?
- 504 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:01:36 ]
- >>503
戻り型があるのにreturnを使わないと大抵のコンパイラでは警告が出る 正しいとは言えないが、戻り値を使わないプログラムだとそのまま動いて しまう事がある
- 505 名前:480 mailto:sage [2010/06/10(木) 10:11:11 ]
- >>490
うちのbccだとp[-1],q[-1]だったけど >>492 らじゃ
- 506 名前:デフォルトの名無しさん [2010/06/10(木) 10:27:22 ]
- >>504
#include<stdio.h> int main(void){ int a; scanf("%d",&a); printf("%d\n",a); } エラーでないけどなwreturn使ったほうがいいのかこんな簡単なもんでも。
- 507 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:35:04 ]
- >>506
誰もエラーが出るとは書いてないだろアホ 「警告が出るコンパイラが多い」と書いたんだよ日本語わかる?
- 508 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:43:52 ]
- mainはエラーでないが他だとVCではエラー出る
voidなら不問
- 509 名前:デフォルトの名無しさん [2010/06/10(木) 10:45:37 ]
- >>506はreturn使う必要どこにあるの?ないと思うが。
複雑なプログラムだけだろ。
- 510 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 11:41:18 ]
- >>506 だまって0を返しとけ。
- 511 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 11:50:52 ]
- 取り敢えずvoid main()と書く奴はCを使う資格ないな
WindowsのGUIならvoid main()でもいいが
|

|