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/
520 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:35:46 ] マクロというのはC言語の中でしか通用しないから OSからみたら1か0にしか見えないの。 もし、プログラムが成功や失敗ではなくて 計算の結果を返して、その答えが1か0だった場合どうするの? だから規定なんて無い。
521 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:37:53 ] >>520 >>518 が読めないのか?もしかして英語音痴か
522 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:38:56 ] だいたいC言語のマクロというのはUNIXの総合環境の中で培われて きたものだ だからC言語の中でしか通用しないという言い訳はおかしい
523 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:56:41 ] OSから見たらそのプログラムがCで作られたかJavaで作られたか GCCでつくれたかどうかも分からない。 だから規定なんて無い。
524 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:08:06 ] >>523 お前も頑固なやっちゃなー そんな固い頭でプログラマで食って行けてるの?
525 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:10:09 ] 下っ端プログラマーでは食っていけないけど SEとしては食っていけるよ。
526 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:10:50 ] 嘘付け ニートの癖に良く言うよ
527 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:11:23 ] C ->ネイティブ吐く Java ->仮想マシン上 GCC ->そもそも言語じゃない これらを一緒くたにして語ってる時点でもうね……
528 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:12:03 ] と言うより、そんなに意地っ張りだからニートから抜け出せないんだと言っておくか 世の中を渡って行くには柔軟な頭脳は欠かせない >>523 のようなカチコチ馬鹿は家の中に引き籠もっているしかない
529 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:15:10 ] 結局何を書いても引きこもりにされるわ(ry
530 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:17:56 ] いや実際>>523 は引き籠もりだろ 言ってる事がSEにしてはおかしいもん
531 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 16:50:34 ] MS-DOSでは0が正常終了
532 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 17:27:14 ] >>519 exit()のためじゃないの? main関数で使う物ってどこで定められてんの?
533 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 17:38:14 ] みんな、そんなにマルチプラットフォームなプログラムを書いてるの?
534 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:15:10 ] 質問。MFCではなくWinSDK使って書く場合 case WM_CREATE: g_Cls.init( ); break; case WM_PAINT: g_Cls.paint( ); break; と書くのは、オブジェクト指向では無いよね? でも、プロシージャ等の一式をクラスに纏めるのも微妙だけど、どういう書き方綺麗かな?
535 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:15:57 ] exitのエラーは-1じゃね?
536 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:58:53 ] >>535 俺の知る限りの環境では0以外全部エラーだお
537 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 22:53:11 ] >>492 ん? >>480 は単なる一例であって、特に環境依存の話ではないが?
538 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:07:19 ] 次のようなコードで::max<int>()でも::max<d>()でも実体化出来るようにしたいのですがどう直せばいいでしょうか。 #include <algorithm> template<typename T> class c{ /* 省略 */ }; template<typename T> c<T> max(const c<T>& a, const c<T>& b) { return std::max(a, b); } class d { /* 省略 */ }; namespace std { d max(const d&, const d&) { /* 省略 */ } } ::max<int>()は一例で、要するに何でも受け付けるようにしたいという意味です。 ここで実現したい制限がいくつかあります: 1. 値が変化するためstd::max(const d&, const d&)の戻り値はconst d&に出来ない。つまりalgorithmのstd::max()を特殊化出来ない。 2. std::max(const d&, const d&)が宣言されない場合があるため、::max<T>()はstd::max(const d&, const d&)の存在を知らなくてもいいようにしたい。 当然その時はコード中に::max<d>()を実体化するようなコードは無い。 またそもそも論として、 1. ::max<int>()でも::max<d>()でも実体化できるようにする際に::max<T>()の中で呼び出すべきなのはstd::max()なのか。 2. d max(const d&, const d&)の宣言場所はstdの中でいいのか。 といった疑問があります。
539 名前:538 mailto:sage [2010/06/10(木) 23:23:02 ] 実際に試せるコードの方がいいですね。 #include <algorithm> template<typename T> struct c { T v; }; template<typename T> c<T> max(const c<T>& a, const c<T>& b) { c<T> r = {std::max(a.v, b.v)}; return r; } struct d { int v; }; namespace std { d max(const d& a, const d& b) { d r = {a.v+b.v}; return r; } } int main(int a, char** v) { c<int> ci; c<d> cd; max(ci, ci); max(cd, cd); } ::max<T>()をstd::max(const d&, const d&)より後に宣言すればコンパイルできるのですが、 出来ればstd::max(const d&, const d&)はどこに現れても(現れなくても)コンパイルできるようにしたいです。
540 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:26:11 ] stdに変なもん入れんなよ
541 名前:538 mailto:sage [2010/06/10(木) 23:29:02 ] >>540 やっぱり入れないほうがいいですよね。 stdに入れないで::max<int>()と::max<d>()を両立するにはどうしたらいいでしょうか。
542 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:42:05 ] >値が変化するためstd::max(const d&, const d&)の戻り値はconst d&に出来ない とはなんのことを言ってるのか、さっぱりわからない
543 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 00:48:53 ] >>538 ttp://codepad.org/8Dcr8Nbk テンプレートの特殊化ではいかんのか? SFINAEやりたいが部分特殊化できないという話なら boost::enable_if 使え。
544 名前:538 mailto:sage [2010/06/11(金) 00:56:43 ] >>542 示したのは意味のない例ですが、例ではmaxの中でa+bってやってますよね。 だからconst d&を返すことが出来ないんです。 >>543 ありがとうございます! 時を同じく丁度自前template maxの定義を思いついたところでした。 std::maxを特殊化しようとしないで自分で新たにtemplate maxを作って、それを特殊化しちゃえば良かったんですよね。
545 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:34:58 ] 初歩的な質問で恐縮なんですが継承を行うと 基本クラスのデータメンバは派生クラスにも同じように データメンバが作られるのでしょうか? また基本クラスのデータメンバをprotectedにして publicで継承したとき,派生クラスは基本クラスのデータメンバに アクセス,変更が出来るという認識でよろしいでしょうか?
546 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:36:08 ] C++&DirectX(dxlib)でゲーム作ってるんだけど、ムービーシーンにFlashムービーで作った物を使いたい(楽なので) 何か方法ある?
547 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:44:05 ] >>546 ieコンポ使えばいいよ
548 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:46:31 ] >>546 ついでにゲームの核もFlashで作っちゃえばいいのにw
549 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:53:02 ] >>547 ググったけどよく分からなかった というかなんか周りくどくない? >>548 AS3でも遅すぎて話にならん
550 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:03:09 ] Flashからaviに変換すりゃいいんでね?
551 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:05:44 ] >>550 画質荒くなるしサイズ大きくなるし、いいこと無し
552 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:10:01 ] >>549 じゃあムービーのときだけIE立ち上げればいいよ
553 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:27:42 ] ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒"\ ) _/\/\/\/\/|_ i / ⌒ ⌒ ヽ ) \ / !゙ (・ )` ´( ・) i/ < 泣かせるおつむ > | /// (__人_)//| / \ \__ `ー'_/  ̄|/\/\/\/\| ̄ / ,}  ̄  ̄ { ヽ, / i i \ / /^i| |i^ヽ \ ヾ ̄ i / .l l \._ノ`フ  ̄ ̄ ト ,, ,.l  ̄ | \ / | l ヽ_r l | | | l ,,_ l _,,. l } ! { / 二二 | 二二ヽ i⌒i .i⌒i i⌒i ____ __ | .|.| .| | .| ,ー、◎ (____ ) (__) rヽ ノ ノ | .| , r───ヽ | .二ノ r───ヽ / / | | ノ ノ | .レ'ノ .ヽ───┘ | .|__ノヽ ヽ───┘ (⌒ / .ノ | ∠/ |____ノ ゝ___ノ ヽ ヽ ( ̄ ̄ ノ
554 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:35:48 ] >>545 の質問お願いします。。
555 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 02:38:56 ] >>554 ttp://www7b.biglobe.ne.jp/robe/cpphtml/html02/menu02.html
556 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 05:02:05 ] >>555 サイトの紹介ありがとうございます。 データメンバも継承されることは分かったのですがprotectedがまだ今ひとつ分かりません。protectedは派生クラスから基本クラスの値を変更する為に利用するのでしょうか?それとも基本クラスから継承したデータメンバを変更する為に利用されるのでしょうか? よろしくお願いします、
557 名前:デフォルトの名無しさん [2010/06/11(金) 07:11:35 ] ポインタの意味がサイトとか見てもよくわかりません。 例えば (*p)はどういうことなんですか?(*f)もあるんですが
558 名前:デフォルトの名無しさん [2010/06/11(金) 09:19:45 ] C言語習得に一番初心者に優しいわかりやすいサイト教えてください。 猫でもわかる〜でも難しいです。
559 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:26:34 ] 猫の先生はいしゃ www.orchid.co.jp/computer/cschool/clec2.html
560 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:37:01 ] >>556 protectedは実際はあまり使われない ロベールのC++でも買って読むと良い 基本クラスでprivateで、そのまま継承して継承したクラスからも 見えるようにしたい時に使う事か多いけど実際はそんなに登場 する機会はない
561 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:52:55 ] >>552 阿呆なのか?
562 名前:デフォルトの名無しさん [2010/06/11(金) 11:42:49 ] (*p)と(*f)の違いについて
563 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 11:57:27 ] そのサイトでは、変数 p と q は上のほうで何て定義してある? 猫の先生は内科の医者 www.orchid.co.jp/computer/cschool/clec13.html
564 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:34:43 ] >>560 ありがとうございました! 非常に参考になりました。
565 名前:デフォルトの名無しさん [2010/06/11(金) 20:40:05 ] 自作のテキストエディタに予想変換機能(簡単な物)を付けたいのですが その手の解説かソースプログラムある場所ありますか? 出来ればVC++のウィンドウズ非コンソールプログラムで
566 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 22:25:15 ] >>565 現状何が問題なのよ。 予測文字列を算出することなのか、予測文字列群をポップアップで表示する方法なのか、いろいろあるでしょ。
567 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 23:29:28 ] >>566 出来れば予測文字郡をリストボックス形式で表示して 入力と共にリストが絞り込める形がいいです
568 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 23:37:24 ] share_ptrって凄く便利だけど遅かったりするの?
569 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 00:10:26 ] >>567 それで今どこまで出来てるの
570 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 07:52:52 ] >>568 メリットに対してコストは全然問題ないレベル。 普通に使って問題ないよ。万が一問題になったらそこで対応すればいい。
571 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:06:14 ] >>570 ありがとん! あともう一つ質問なんだけど、 listのremove()で、とあるメンバ変数が1だったら削除、とかやりたいんだけどどうやって指定したらよいの? いろんなサイト見てるけどlist<int>とか<char>ばかりで<class*>がない…
572 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:09:54 ] >>571 remove_ifを使う。
573 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:14:27 ] >>571 std::remove_if
574 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:27:20 ] >>572-573 センキュー!
575 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:42:09 ] ごめん、やっぱ分からん メンバ変数の指定ってどうやるの?
576 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:49:25 ] >>575 std::mem_fun_refを使って渡す メンバ関数のアドレスを直接渡そうとするのはダメよ
577 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:50:14 ] ごめんなさい間違えました
578 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:56:45 ] >>575 bool func(Object t){ if (t.x = 1) return 1; else return 0; } みたいなのを作ってremove_if の第三引数に渡す
579 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:57:56 ] boost::bind使うと楽なんだけどな
580 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:58:42 ] C++0xだと思わずラムダ式を使ってしまう C++にもboost::lambdaは使えるけど
581 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 11:06:52 ] >>578 なるほど、クラスまるごと受け取るのか やってみる
582 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:05:18 ] 一回の走査で配列から中間値に最も近い値をもつインデックスを見つけることってできる?
583 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:13:08 ] できたら、ソートのアルゴリズムに大革命起こせるな。
584 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:16:12 ] え?普通に出来るだろ。
585 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:21:32 ] >>584 やってみろよ
586 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:25:38 ] メモリーにインデックスと値の組を保存する。 値の平均を計算する。 平均に最もちかいインデックスを検索する。
587 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:26:10 ] ソートしておく
588 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:30:08 ] >>586 2回走査するうえに中間値でもない。
589 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:33:00 ] ほんとに中間値なら最大値と最小値の間の数は全部中間値ってことになるよ。 平均値の間違いかと思ったよ。 ちなみに走査は一回しかしてないよ。
590 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:37:10 ] >>587 ソートした時点で既にオーダーが最低NlogNになってまうだろうが O(N)にはならない
591 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:38:21 ] 590は必要条件と十分条件の区別が付いてないようだな・・・・
592 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:40:45 ] >>591 いや、区別は付いている ソートしてあるという前提条件が付いているなら それは必要条件になる
593 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:42:10 ] >>589 はかわいそうな子
594 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:45:08 ] >>589 が正しい。
595 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:46:23 ] そうだな、>>589 であってるよ。
596 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:46:41 ] O(N)⇒一回の走査だけど、 一回の走査⇒O(N)じゃないからね。 一回の走査したあと他に何かする場合もあるからね。
597 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:48:01 ] >>596 別の配列に移してソートするんですね。
598 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:48:43 ] >>597 その通りです。
599 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:51:18 ] >>596 >一回の走査⇒O(N)じゃないからね。 え?
600 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:52:39 ] 一回の走査をするアルゴリズムの略にきまってるだろ。
601 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 12:55:00 ] >>598 意味ねえーーー
602 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:28:59 ] だからソートしたらOが変わるって
603 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:57:55 ] listでさ あらかじめある程度の領域確保しといて、足りなくなったら適当な所から取って使う みたいなこと出来ない? placement new+仮想メモリ みたいな
604 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:05:16 ] >>603 そういうアロケーターを書いてあるそのままに作ればいいと思うよ
605 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:37:17 ] >>603 listにはそのためにアロケーターを指定できるようになっている。 boostにすぐ使えるpoolアロケータが用意されているからそれを使うのが楽 こんな感じ list<hoge,boost::fast_pool_alocator<hoge>> a;
606 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:24:26 ] >>596 二回の走査でもO(N) 従って > O(N)⇒一回の走査だけど、 は間違い。
607 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:46:54 ] >>605 まじで! ありがとう、使ってみる
608 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:48:31 ] 綴りミスってた fast_pool_allocatorだな。
609 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:55:34 ] Boostのアロケータか 使ってみたけどあまり変わらんぞ はっきり言ってあまり期待しない方がよい 標準のアロケータで通常は十分
610 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:05:22 ] そもそも標準で十分だと思ってるヤツ向けの機能じゃないし。
611 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:07:08 ] boostって実際使って仕事してる? 規約で禁止されてるところとか多そう。
612 名前:デフォルトの名無しさん [2010/06/12(土) 16:09:06 ] 必要があれば使うけど、基本的には使わない。
613 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:29:53 ] >>609 意外と標準のnewは速いから大きな差はないな。差がないのはアロケータはスレッドセーフにする必要があるのが要因のようだね。 プールアロケータのメリットはたくさんのオブジェクトを作成、破棄を繰り返すときにヒープの断片化を防ぐ。これはnewの速度低下に地味に効いてくる。 あと、オブジェクトの生成破棄再生成を繰り返すときの高速化ぐらいだね
614 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:54:36 ] 二つ以上のクラスで同じ関数使いまわしたいんだけど何かいい方法ない? class CA { void hoge(); } class CB { void hoge(); } void CA::CB::hoge() { } こんなイメージ(勿論上はエラー) まあ二回書けばいいんだけど、中身が数十行あるからうざったい
615 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 16:57:30 ] >>614 継承
616 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:05:11 ] テンプレート関数でできそうな飢餓。
617 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:11:33 ] 普通に class Choge { void hoge(); } class CA:public Choge { } class CB:public Choge { } void Choge::hoge() { } これでいけるか 合ってるよね?
618 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:12:19 ] is-a に出来ないんだったら絶対にpublic継承は使うなよ 場合によっちゃprivate継承が適切なケースもあるが なるべくならコンポジションだ
619 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:20:35 ] もうちょっとわかりやすく!
620 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:21:21 ] >>617 そのhoge()はなんでメンバ関数なんだ? そこをよく考えて設計するべき。