1 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:35:36 ] スレを勃てるまでもない低俗な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/
702 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:31:55 ] サイズが分からないから void func(float a[10]){ とかにすれば10って出るはず
703 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:34:47 ] void func(float a[]){ としても void func(float *a){ となるから >>702 なんねーよばか
704 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:35:53 ] ありがとう。float[10]ってしないと駄目なのか でもそれだとint size=10;ってすることと一緒だから意味無いよね 受け取った配列の数によって処理を変えたいんですがどうすればいいですか?
705 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:38:08 ] それこそマクロっぽくするべき #define func(x) func_(sizeof(x)/sizeof(float)) void func_(unsigned size);
706 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:39:11 ] >>704 二引数にして大きさを渡すする ものすごい馬鹿みたいに思うかもしれんが memsetやらfreadやらあるように領域の大きさを渡すのは普通
707 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:39:19 ] void func(float *a, size_t n) { } #define numberof(array) (sizeof(array)/sizeof(array[0])) float foo[10]; func(foo, numberof(foo));
708 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:48:33 ] ありがとうございます。サイズを引数として受け取るしかないんですね 当たり前なんだろうけど、これにはちょっとびっくり。 普通に分かるものだとばかり思ってた
709 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:27:30 ] 商業ソフトだとメモリ確保とかでガチガチにtry catchするんでしょうか?
710 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:10:01 ] メモリ確保失敗はアプリレベルではどうにもならないからOSに例外投げてしまう。 という考え方もある。
711 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:14:08 ] 限界になる前に、そろそろメモリが足りません言い出すソフトもあるなぁ・・・・
712 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 02:22:58 ] OSに例外投げたらどうなるんだ?つか、そんなことできるのか?
713 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 02:57:00 ] 他人のソースコードを読んでいってもさっぱり頭に入ってきません。 何かソースコードを読む際のポイントとかあるんでしょうか。
714 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 03:00:11 ] コメントを読んだり、 読んでる関数の中身までは読まずに、大まかな流れを先に確認する。
715 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 03:37:32 ] >>713 doxygen(Graphviz)で関係のグラフ化オヌヌメ
716 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:54:46 ] テンプレートの型を一部の型に限定したい(たとえばunsignedの各種整数型のみ)場合は template<typename T> class HOGE; template<> class HOGE<unsigned char> {...;}; template<> class HOGE<unsigned short> {...;}; template<> class HOGE<unsigned long> {...;}; template<> class HOGE<unsigned int> {...;}; のように本体を書かずに、特殊化のほうをいちいち全部書くしかないんでしょうか?
717 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 11:53:12 ] traits
718 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 12:20:01 ] C++にて。 同じ副作用を保ったまま、式を文にすることは出来ます。 セミコロンを付ければ良いだけです。 例 x=3ならx=3;とすればよい。 しかし同じ副作用を保ったまま、文を式にすることは出来ますか? その際の式の値は何だって良いとして。 例 while(flag){++x;} を ???
719 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 12:50:35 ] >716 class の中身の方は型によって変わらないと仮定して、 #include <boost/utility/enable_if.hpp> #include <boost/type_traits/is_unsigned.hpp> template<typename T, typename Enable = void> class HOGE {}; template<typename T> class HOGE<T, typename boost::enable_if<boost::is_unsigned<T> >::type> { // 何か }; 他の型にするなら boost::is_unsigned を適宜変更すれば OK。 型をべた書きするなら↓なんてのも可能。 #include <boost/mpl/set.hpp> #include <boost/mpl/has_key.hpp> template<typename T> class HOGE<T, typename boost::enable_if< boost::mpl::has_key< boost::mpl::set< unsigned int, unsigned char >,T> >::type> { // 何か }; 中身も変わってくるなら >717 の通り traits でまとめる。
720 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:42:55 ] >>718 そこを関数にする。 そうすれば関数呼出式になる。
721 名前:718 mailto:sage [2009/06/07(日) 14:31:24 ] >>720 あーなるほど。 ありがとうございます。
722 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:39:05 ] for each 処理を自前で作りたい。 Sentinelを付加する方法でなんかいいアイデアない?
723 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:43:09 ] CかC++かくらい書け。 もっとも、C++ならSTL使え、だが。
724 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:57:23 ] もっと洗練されたライブラリが必要だと思うんだ
725 名前:722 mailto:sage [2009/06/07(日) 19:00:27 ] STL様 i=begin;while((function(i++),i)<=end); は偽物foreach i=begin; end+1=eoloop; while(function(i++)); ^^^^^^^^^←この部分
726 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:01:00 ] 一応Qt(C++用ライブラリ)にforeachはある それを参考にしろとは言わんが
727 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:22:20 ] インターフェースクラスがクールに感じたんだけど、これってなにかマイナス面はある? 今作ってるプログラムをこれ使って大幅に書き換えようかなと思ってるんだけど
728 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:39:06 ] >>727 ソースコードの量が増える 保守するとき読めればいいが そんな保証などない 将来性にかけて拡張性に優れた設計にするには 優れた設計能力が必要 後からの変更は1からのやり直し
729 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:48:20 ] >>727 Qtのこと? 俺もQtの設計は美しいと思ってるし、 いまさらMFCやろうとしてる(まずいないがw)やついたらQtを紹介してる マイナス面は、以前はGPLだったけどそれも変更になってLGPL 不満といえばdllのサイズぐらいかな? マルチOSなのもおいしいところ
730 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:56:43 ] >>725 std::for_eachもいやならBOOST_FOREACHはだめ?
731 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:02:31 ] >>729 そのインターフェイスじゃないだろ
732 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:11:32 ] QtってGUI専用だと勝手に思っていたが、 GUI以外の事も出来るの?
733 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:18:02 ] >Qt 何故か俺の中で、 フジコフジオのイメージが払拭できない
734 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:21:55 ] >>732 コンテナ、ネットワーク、XML、データベースとか一通り 機能制限はあるが組込み向けやXサーバーなしでもGUIが使えたり
735 名前:732 mailto:sage [2009/06/07(日) 22:24:51 ] >>734 すげーー マジかよ。 LGPLだと商用利用はしんどいか? Staticリンクしちゃうとオープンソース強制だっけ?
736 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:55:36 ] >>735 LGPLだと静的リンクはアウトだね 動的リンクなら商用非公開おk
737 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:03:14 ] LGPLだと、リバースエンジニアリングの拒否の禁止かな。
738 名前:732 mailto:sage [2009/06/07(日) 23:06:54 ] リバースエンジニアリングはどうせされるんだろうし そんなの禁止しても意味ないだろうけど・・・。 >動的リンクなら商用非公開おk これはつまりDLLを付属させて配れってこと?
739 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:11 ] >>735 強制じゃないけど staticリンクでその条件を満たすのはかなりしんどい
740 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:53 ] >>738 そうだよ配っていいんだよ
741 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:28:13 ] ってことは 「QtのDLLを付属させてスタティックリンクしないようにするかぎり」 無償でクローズドソースの商用利用が可能 ということか。 Qtいいな。 …ちょっと考えてみようかな。
742 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 02:12:57 ] >>715 分かりやすい解説サイト教えてください
743 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 02:20:00 ] >>742 ggrks 相当前からあるソフトで、情報も腐るほどあるぞ ちなみにそのウィザードもQtでできてる
744 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:44:59 ] C++のテンプレートについて教えて クラスとどう違うんだ?
745 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:49:36 ] 次元が違う
746 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:18:25 ] 違いすぎて逆に説明が困難だな。
747 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:19:38 ] 訂正 C++のテンプレートについて教えて やっぱクラスとの違いじゃなくてどういう時に使うのか どんなニーズによってできたのか教えて
748 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:27:42 ] 型が違うだけで同じような処理を何回も書かないで済むように
749 名前:デフォルトの名無しさん [2009/06/08(月) 06:46:52 ] 今年女子大に入ったばかりのゆきこと言います。 C++を学びたいのですが、どの本がお薦めでしょうか?
750 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:47:04 ] >>744 天と地ほど違うと思うけど。 [タイヤキを作るための金属の鋳型] と [食べられるタイヤキ] の違い。ぜんっぜん違う。
751 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:56:11 ] >>742 このスレに行け。 【コメント】doxygen【コンソメ】 ttp://pc12.2ch.net/test/read.cgi/tech/1212144627/ オススメは以下。 Graphviz ttp://www.graphviz.org/ doxygenの文字化け対策 - 僻地のプログラマkmt-t - わりとどうでもいい日記 1.1 ttp://d.hatena.ne.jp/kmt-t2/20090403/1238718375 Let’s use doxygen! ttp://www.fides.dti.ne.jp/%7Eoka-t/doxygen.html 無題ドキュメント ttp://www.sat.t.u-tokyo.ac.jp/~tetsuya/homeNew/research/Tips/doxygen.htm SourceForge.net: sakura-editor ≫ DoxygenComment ttp://sakura-editor.wiki.sourceforge.net/DoxygenComment Doxygenマニュアル ttp://www.doxygen.jp/manual.html Doxygen公式 ttp://www.doxygen.jp/
752 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 10:12:17 ] >>750 それクラスとインスタンスの違いでなくて? テンプレートはその鋳型を付け替えるとタコ焼にも今川焼きにもなる台とか
753 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 11:03:19 ] 型チェックしてくれるマクロとでも思えば。
754 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:56:01 ] なんだかtemplateってbindに似てるね
755 名前:デフォルトの名無しさん [2009/06/08(月) 13:03:26 ] コンストラクタの引数の値によって、データメンバの型を変える方法ってありますか?
756 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:24:48 ] >>749 女子供は股開いてればいいんだよ
757 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:34:28 ] 子供もかよ……
758 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:49:24 ] ぼくおとこのこだよ…
759 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:58:54 ] >>755 同じ親クラスから継承した子クラスという条件内であれば可能。 もしくは、void*で持たせれば、多分なんでもおkだけど。
760 名前:750 mailto:sage [2009/06/08(月) 16:12:44 ] >>752 そうとも言えるな。 なら俺方式で言うなら クラステンプレート=[タイヤキやら今川焼きやらを作るための金属の鋳型を作るためのナニモノか] クラス=[タイヤキを作るための金属の鋳型] インスタンス=[食べられるタイヤキ] とでも言えばいいかな。
761 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 16:55:30 ] 喩えなら何とでも言えるわ。
762 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:42:54 ] 名前空間について質問です。 名前空間 foo と、それとは別に名前空間 bar::foo があるとします。 このとき、bar の内側から、bar::fooでは無い方の foo を指定するにはどうしたら良いのでしょうか。 なお、環境はWinXP、C++、VisualStudio2005です。
763 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:46:20 ] ::foo
764 名前:762 mailto:sage [2009/06/08(月) 17:53:04 ] すみません、2つ質問するつもりで書いてませんでした。 あるクラス内に、別クラスをメンバ変数として取り込む時、 その別クラスが書かれたヘッダファイルをインクルードするのではなく、 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね? さて、その別クラスの名前が、名前空間 bar の下にあるとき、 namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか? >>763 ありがとうございます。 なんで思いつかなかったんだろう、自分。
765 名前:デフォルトの名無しさん [2009/06/08(月) 18:40:27 ] 便乗質問、テンプレートクラスを持たせる時って同じ方法使えるん?
766 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:48:37 ] 使えるん
767 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:51:59 ] >>764 あなたのいうクラスに名前が付いていないので 説明の便宜上 あるクラス=MyClass, 別クラス=fooとします。 まずは本題からちょっとそれた話から。 > その別クラスが書かれたヘッダファイルをインクルードするのではなく、 > 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね? あります。 しかし > あるクラス内に、別クラスをメンバ変数として取り込む時、 この場合は前方宣言Forward declarationだけでは足りません。 というのも、 class MyClass {int m_num;std::string m_str;foo m_var;} のようにメンバ変数としてfoo型変数を使いたい場合、 fooが不完全型なのでそのサイズがわからず、したがって MyClassのために確保すべき領域のサイズもコンパイラには分からないことになるからです。 前方宣言で足りるのはfoo型メンバ変数ではなく foo型への参照型メンバ変数やfoo型へのポインタ型メンバ変数、 あるいはメンバ関数の戻り値としてfoo型を使用する場合などです。
768 名前:デフォルトの名無しさん [2009/06/08(月) 18:54:54 ] ユーザが入力した数式を処理するプログラムを考えているのですが cin>>eq; #define function(x) (eq) cout<<function(1); みたいなことができませんんか?もしくは別の方法があったら教えてください
769 名前:767 mailto:sage [2009/06/08(月) 18:54:56 ] あとはまあ 前方宣言で足りるのは メンバ関数の引数の型としてfoo型を使用する場合 や typedefとかかな。 > さて、その別クラスの名前が、名前空間 bar の下にあるとき、 > namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか? それでいいと思いますが。 class bar::foo;とか書いても無理ですし、それ以外記述できないですよねぇ? もし有識者がいらしたらそっちを信用してください。
770 名前:767 mailto:sage [2009/06/08(月) 18:56:45 ] >>768 意味不明ですが、どういうことですか? プリプロセッサにより cin>>eq; cout<<((eq));//xは無視される として処理されるだけですが。。。
771 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:07 ] >>770 768に書いたのはあくまでイメージです。言葉足らずですみません 私がしたいことは引数にある文字列を数式として扱いたいのです もしくはcinで入力した式をプログラムで処理したいのですが
772 名前:デフォルトの名無しさん [2009/06/08(月) 19:02:27 ] ほんとは言語の問題じゃないかもしれないけど教えてください @double配列と、Aメンバがdoubleいっこだけの構造体の配列を読み上げる速度を比較するための コードを書いて実行してみたらAのほうが速かったです 環境はItanium、CentOS、GCC(C++)です これはなぜなんでしょうか?
773 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:04:08 ] そうなったから
774 名前:767 mailto:sage [2009/06/08(月) 19:04:19 ] >>771 言いたいことは分かりました。 C++の知識はどのくらいありますか? STLやBoost C++はご存じですか? C言語じゃなくてちゃんとC++らしいコードが書けますか?
775 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:05:31 ] >>772 不思議だわ。 ・・・最適化とかレジスタの割り付けとか、もう不確定要素に押されて結果が揺らいでるだけじゃないか? つまりどっちで書いても大差ないから好きな方で記述すればよか。
776 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:08:39 ] >>774 c++は初めて3か月くらいですが、STLはつかったものがあるので 簡単なものなら大丈夫だと思います。
777 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:09:25 ] >>775 計算時間半分くらいでした ちなみにこれに気づいたのは構造体メンバのアライメントに関する実験中でした コンパイラが賢くなりすぎてマニアックな知識も必要ない時代になったんですかねえ・・・
778 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:11 ] 普通のポインタがインスタンスを持ってるかどうか判別する方法はありますか? 現状ではポインタのゼロ初期化とdelete・0代入を徹底するぐらいしか手段が思いつきません
779 名前:767 mailto:sage [2009/06/08(月) 19:11:28 ] >>776 せっかくSTLの知識の有無を聞いたのですが、STLつかった実例が見つかりませんでした。 とりあえず適当なリンクを張っておきます。 以下の中で、上に挙げられている物の方が より優れていると思ってください。 letsboost::spirit ttp://www.kmonos.net/alang/boost/classes/spirit.html 数式解釈プログラム - uPage ttp://www-as.dse.ibaraki.ac.jp/umezu/?%E6%95%B0%E5%BC%8F%E8%A7%A3%E9%87%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0 七行プログラミング ttp://cm.xrea.cc/thread/program_001.html LISPですが 記号数式処理 ttp://www-antenna.ee.titech.ac.jp/~hira/hobby/symbolic/index.html
780 名前:767 mailto:sage [2009/06/08(月) 19:13:06 ] 追記。 >>776 Spiritで数式を解釈させるなら boost::spiritっちゃえ! ttp://tamachan.club.kyutech.ac.jp/%7Egridbug/spirit/ C++ Labyrinth ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html Spirit v1.6 ttp://boost.cppll.jp/BDTJ_1_30/libs/spirit/ これらが有名で質も高いと評判です。
781 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:14:34 ] >>768 これでイメージが湧いたらそいつは一流のエスパーだwwwww
782 名前:767 mailto:sage [2009/06/08(月) 19:17:06 ] >>778 >普通のポインタがインスタンスを持ってるかどうか 有効な領域を指し示しているかどうかとおっしゃりたいものと推測・解釈します。 結論から言えば、 普通のポインタでしたら、そんな方法はありません。 指し示す領域が有効かどうかなぞわかり得ません。
783 名前:768 mailto:sage [2009/06/08(月) 19:22:56 ] >>782 いろいろ情報ありがとうございます。
784 名前:764 mailto:sage [2009/06/08(月) 19:45:30 ] >>767 >>769 ありがとうございます >宣言 やっぱ namespace bar { class foo; }; って書くしか無さそうですね。 階層が深いとちょっと面倒かな?と思っただけなので、特に問題はありません。 >メンバ変数 確かに、メンバ変数を直接弄ろうとすると前方宣言だけじゃダメですよね。 まあ、素直にアクセサ付けれ、って話ですが。 >>765 確かに、 std::string とかは上記の方法じゃ出来ないですね。
785 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:11:52 ] C++の関数で文字列を参照渡しする方法がわかりませ ん &stringだと弾かれたし
786 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:16:09 ] >>785 参照の記述を勉強してください。 クラス名& ref=参照先; で記述します。
787 名前:785 mailto:sage [2009/06/08(月) 20:23:15 ] 参照の書き方って&nと違うの?
788 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:31:10 ] >>787 まずは日本語から覚えた方がよさそうだな
789 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:33:46 ] char &string; って書いてるんだったりして。
790 名前:786 mailto:sage [2009/06/08(月) 20:36:41 ] もう らちがあかないので ソースみせるか、 参照の記述を勉強し直すか、 名前空間を記述するか せめて少なくとも1つはやってみせてください。 なんかアドレスとごっちゃになってそうな予感もしますね。
791 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:39:25 ] int func(const char *string)
792 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:40:24 ] 途中送信。>791を参照渡しにする
793 名前:786 mailto:sage [2009/06/08(月) 21:04:14 ] >>791 それだけエスパーを強制しすぎです。 適当に答えるなら //before int func(const char *string); const char * const p="mojiretsu"; func(p); がアドレス渡し(ポインタ渡し)で、 //after int func(const std::stirng &string); std::string str="mojiretsu"; int func(str); が参照渡しです。 せめて前後関係の分かるソースを見せてください。 答える側が書いたソースの方が長いっておかしいです。
794 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:08 ] foo *p = new foo[bar]; delete p; がまずいのはわかるんだけど foo *q = new foo; delete [] q; ってーのはべつにやばくない・・・よね?
795 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:58 ] やばいよ。何が起きても知らないよ。
796 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:17:12 ] std::stringで書き変えるのは要求を満たしてない気がするなあ。
797 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:19:34 ] >>794 配列をnewしたときは、その配列のサイズなんかも保持しておくので 配列じゃないのにdelete[]だと、関係ない部分にアクセスする危険性がある……と教わったが、正確には違うかも。
798 名前:786 mailto:sage [2009/06/08(月) 21:21:37 ] >>796 彼は >C++の関数で文字列を参照渡しする方法 と言っています。 別にconst char*型変数を参照渡ししてもいいんですが、 もうエスパーするしかないからわかりませんよ。
799 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:23:02 ] >>794 だめな理由は処理系によりいろいろあるだろうけど、そんなの関係ない。 「仕様上認められていない」ってだけで 十分に鼻から悪魔が出てくると結論づけられます。
800 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:26:52 ] C++はめんどくさいな
801 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:36:37 ] >>800 なにを今更w
802 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:50:39 ] C++に限らず、多種多様の実装が存在する言語は多かれ少なかれそういう傾向にあると思う。