- 1 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 01:08:48 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.65【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1239326399/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 210 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:56:13 ]
- テンプレートは分からないので禁止
- 211 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 17:15:04 ]
- >>210
お前が勉強しろ
- 212 名前:デフォルトの名無しさん [2009/06/07(日) 18:35:31 ]
- テンプレートはわからないので禁止
- 213 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:46:18 ]
- ポインタはわからないので禁止
- 214 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:56:05 ]
- C++はわからないので禁止
- 215 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:20:16 ]
- クラスAがクラスBに所持されてる関係になってるとして
インスタンスAがB1に参照されてる状態から B2がインスタンスAを参照したらB1からAの参照が切れる 常にAが1個のBから参照されるような関係を作るにはどうしたら良いでしょうか?
- 216 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:37:11 ]
- 所有を譲渡するメソッドをBに作る
- 217 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:04:47 ]
- 逆にAがBを参照するように変更できないか検討する
- 218 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:29:49 ]
- >>216
B同士で所有の移動をするメソッドを、ということでしょうか? >>217 BがAに更新通知してAがBの値を読みに行くので Aへの更新通知を別の方法で実現できればそれでもいいのですが・・
- 219 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:37:33 ]
- Aを触れないし値も引き出せない状態になったB1・B2の挙動をどうするつもりかに因るな
- 220 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:38:58 ]
- AからBにコールバックでも登録させればいいんでない。
- 221 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:41:57 ]
- AがB1に参照されたり、B2に参照されたりってのを決めるのはだれだ?
- 222 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 01:43:02 ]
- > BがAに更新通知してAがBの値を読みに行くので
Aに"今からお前の相手するBインスタンスはわしじゃ"通知メソッドを作れば? その際に元彼Bに"もう私のことは放っておいて"通知メソッドをAから呼んでもらう
- 223 名前:デフォルトの名無しさん [2009/06/08(月) 11:43:40 ]
- C++では、戻り値だけが違う関数は同じものとされますが、
戻り値だけが違う関数を複数作りたい場合どうするべきでしょうか? class C1; class C2; というのがあって、 C1 create(); C2 create(); という感じにやりたいときです。 お願いします。
- 224 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:11:13 ]
- >>223
無理です。だいたい呼び出せません。 名前空間を使いましょう。
- 225 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:17:56 ]
- ファイルの開け方、閉じ方はわかったのですが読み取って処理するところがよくわかりません
,で区切られて1行に並んでるファイル内の行列から数値を配列に入れる方法を教えてください!
- 226 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:23:49 ]
- やりかたはいろいろありすぎて、、、
とりあえず手始めに、fgets()とsscanf()使ってみるのはどうか? まあ配列に入れるならループで回してstrtokとatoi使う手もあるけど、 最後はstrtok+atoiみたいな関数を自分で作るのがいいかもね。
- 227 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:24:30 ]
- 今回初めてマルチスレッドな処理を行う必要があるのですが
注意点、スレッドセーフな処理にするための方法などを詳しく扱った書籍やサイトはないでしょうか?
- 228 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:25:39 ]
- >>226
ありがとうございます ,の除き方を詳しく教えてください
- 229 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:26:37 ]
- >>228
csvデータの読み込みでぐぐった方がいいかも
- 230 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:27:37 ]
- >>228
sscanf()もstrtok()も , の処理はやってくれるだろ。 自前でやるならstrchr()で場所調べて切り出していけばいいと思うよ。
- 231 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:32:12 ]
- そうなんですが
全然知りませんでした ありがとうございました
- 232 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:05:22 ]
- >>223
dmyC{}; class C1{C1 operator=(dmyC&){*this=createC1();return *this;}}; class C2{C2 operator=(dmyC&){*this=createC2();return *this;}}; dmyC create(){return dmyC();} C1 C1create(){〜return c1;} C2 C2create(){〜return c2;} なんのメリットがあるか知らんが使用側で偽多態受けなら出来ん事はない 前参照やスコープは適当に修正要
- 233 名前:デフォルトの名無しさん [2009/06/08(月) 14:14:40 ]
- C99より前の規格では、nanやinfを検出することってできないのでしょうか?
- 234 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:19:51 ]
- 修正 dmyC で弄った方が潰しが利くね
dmyC{operator C1(){〜return c1;}operator C2(){〜return c2;}};
- 235 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:50:49 ]
- floatで数字をいろいろ処理して,でつないでcharに直してfputsで書き出したいんですけど方法を教えてください!
- 236 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 15:39:06 ]
- fscantfとかsscanfとかそういうことか
わかったぽ
- 237 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:54 ]
- .netはC++では扱えないんですか
- 238 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:26 ]
- はい
- 239 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:10:15 ]
- C#でしかやれないということですか?
GUIアプリを楽につくりたいならC#ですかね?
- 240 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:14 ]
- その通り!
- 241 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:18:42 ]
- テンプレートの話は禁止だって言ってんだろ
- 242 名前:デフォルトの名無しさん [2009/06/09(火) 01:07:44 ]
- int array[x][y];
があるとき、 array[10] == &array[10][0] でしょうか?
- 243 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:14:00 ]
- よく考えたら分かると思うが頭痛が悪くなるようなコードは書くな
- 244 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:14:19 ]
- 配列は分からないので禁止
- 245 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:17:52 ]
- >>242
気になるならポインタがさしてるアドレスを比べてみなよ
- 246 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:20:47 ]
- >>245
型は配列なので注意が必要、多分等しいだとは思うんだが。(両方とも配列) 配列はポインタに自動変換だが、逆はそうではない、やっぱ頭痛い。
- 247 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:23:22 ]
- ああ違う、右はポインタ、左は配列、そして左が自動変換だ
うぜぇぇ
- 248 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:24:56 ]
- int a[10]; は、int10個の配列aで分かりやすいのに。
int a[10][20]; は、int10この配列が20個、ではないところがややこしい。
- 249 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:26:48 ]
- >>248
Cの規則ですから int func()[10] { return 配列; } おらよ、これでも喰らえってなもんだ
- 250 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:26:53 ]
- ポインタ本を読むと出てくる(K&Rでもかかれてる)けど
配列や関数の型は、外側からはがしていく感じで解釈するんだよね。
- 251 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:49:26 ]
- >>249
関数は配列を返せない
- 252 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:53:52 ]
- >>251
ANSIでは使えない事になっているが、返せる処理系もっあってだな、 アホな開発者がそれを返している糞ライブラリがあるんだ どこのかって?S○Eとか○CEとかSC○とか、まあそんなところ、死ねます。
- 253 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:56:17 ]
- >>251
ポインターは返せるからできなくはないんじゃね? ただサイズの問題とかあるけど
- 254 名前:デフォルトの名無しさん [2009/06/09(火) 02:27:31 ]
- CのコードをC++に書き直してます。
Cのコードの中に大量の構造体を使ってるところがあって、malloc()でメモリを 取らずに、自分でメモリプールを管理する割り当て関数を使ってます。これを生かすため placement_new()というのを使おうと思っているのですが、この場合delete()が使えない (使う必要がない)と聞いたのですが、placement_new()の使い心地はどうでしょうか? 使いやすいですか?
- 255 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:16:28 ]
- 構造体に配列突っ込めば、ポインタじゃなくても直接返せるよ! よ!
- 256 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:24:55 ]
- >>254
使う必要がない、ではなく使えないだな。 www.fides.dti.ne.jp/~oka-t/cpplab-placement-new-2.html placement newの文字通り引数を取る形式new(hoge) Tにたいして、delete(hoge) pという構文がないという話。 メモリ確保処理を自前でやるとしたら、 クラス・構造体にnew/deleteなどを定義するか、 アロケータクラスを作って、確保解放はvectorとかに任せる という形態のほうが多いと思う。ほかの人はどう考えているか分からないけど。
- 257 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:13:45 ]
- placement newを使いにくいとは思わないけど、むやみに使うものでもない。
>>256の言うように、クラス・構造体にnew/deleteを定義するとか アロケータとコンテナを組み合わせるのがいいと思う。
- 258 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:16:07 ]
- c++で複数のクラスからの継承ってできますか?
たとえば 数値Aと class NoA{ //ここに関数A } class NoB{ //ここに関数B } ここでNoAもNoBも引き継いだclass NoC (NoC.関数AとNoC.関数Bの両方ができ) みたいなことってできるの?
- 259 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:18:52 ]
- >>258
www.geocities.jp/ky_webid/cpp/language/033.html
- 260 名前:デフォルトの名無しさん [2009/06/09(火) 09:41:04 ]
- C++に動的にクラスを生成する方法がないって本当ですか?
文字列としてクラス名があったとして、それでオブジェクトを作ることができないって読んだんですけど。 自由度高そうなのに。 ごにょごにょしてやる方法あります?
- 261 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:46:39 ]
- >>260
Smalltalkみたいな使い物にならないインタープリタと一緒にすんな
- 262 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:50:30 ]
- >>260
こういう話か? std::map<std::string, boost::shared_ptr>
- 263 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:56:44 ]
- インタプリタ村の村民らしい要望だな
だな
- 264 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:05:56 ]
- クラスの動的生成ではないがC++にリフレクション機能は
あってもよかったと思う
- 265 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:18:47 ]
- オーバーヘッドが好きな奴が多いな。
- 266 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:36:38 ]
- >>260
やろうと思えばなんだってできるよ、コンパイラ呼び出しDLLにコンパイル、出来上がったDLL動的にリンク、そして呼び出す。 面倒くさくてやらないけど。
- 267 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:40:41 ]
- .NETを見ていると、標準ライブラリにコンパイラコレクションが入っていると便利なのだがと思う事はあるな・・・
ターゲットの環境にコンパイラをインストールなんて余りやりたくないからね
- 268 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:40:29 ]
- fscanfの引数の場合分けがうまくいかないんだけどどうして?
引数がfloatとcharで20こあって"%d%f・・・・・",hairetu,&suuji・・・・とあるんだけど返り値=1にした時しかうまくいかない switchにしてcase20はおkだけどcase 2とかdefaultにはcaseが正しくありませんってなる
- 269 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:44:10 ]
- >>268
C言語でおk
- 270 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:47:18 ]
- swichの方はswith{}←のカッコを忘れてただけでした
- 271 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:51:27 ]
- fscanfの感じがわからん
fscanfした時点で一行バッファに入ってそこから指定した型の順で前から取っていく感じでしょ? 3つ目で型が合わないことがわかったらどうなるの?
- 272 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:42:01 ]
- >>271
行は関係ないよ 合う型を探して改行関係なしにファイルの最後まで行ったら終わり 3個目が見つからなかったら戻り値で2を返すだけ
- 273 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:59:17 ]
- サンクス
行関係無いのか どっかのページ1行読み込むって書いてあったのに
- 274 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:25:48 ]
- scanfのほうの使用を思い出すんだ
- 275 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:29:48 ]
- caseってcase(1||2||3||4):って使えますか?
なんか使ってないのに違う行のcaseの所でcaseの値"1"は既に使用されていますって出るんだけど
- 276 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:34:30 ]
- 1〜4 までの整数を1箇所で引っ掛ける時は
case 1: case 2: case 3: case 4: /* 本体 */ break; こう書く case (1||2||3||4): は 定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから 結局 case 1: と書いてるのと同じ意味になってしまう
- 277 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:44:09 ]
- ありがとうございました!
あんまり載って無いですね、初心者ならやってしまいがちだとおもうのですが
- 278 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:51:46 ]
- 習得順的には
if { } 〜 else if { } 〜 else { } の羅列のほうが先にじゃねーかな? break しない case を持つ switch 文って個人的にはあまり好きじゃない。 見直したときに 「あれ? break 忘れてるんじゃね?」 って勘違いしちゃう可能性があるもの
- 279 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:57:11 ]
- むしろcase で || 使うというのをはじめてみた
- 280 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:21:52 ]
- 他言語から来た人とか?
- 281 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:24:57 ]
- 普通の初心者でつ
- 282 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:28:39 ]
- >>280
勉強中でROMしてます >>276の >case (1||2||3||4): は >定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから >結局 case 1: と書いてるのと同じ意味になってしまう として処理されるならそもそも書く必要すらないですしこういう記述を知ってる必要もない気が・・・ つまり >case 1: >case 2: >case 3: >case 4: > /* 本体 */ > break; こっちを知ってればいいかと。 それかジャンプテーブルとかで処理しちゃうか
- 283 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:02:48 ]
- >>282
知るべきことは "case の後ろは定数式" であること だ。 ・定数式のうち 論理演算式だけは 演算結果が所詮 0/1 にしかならないのでおいしくない ・四則演算な定数式や ビット毎の論理演算定数式 記述が簡単になったり可読性が上がるかもしれない 四則演算の例: #define TOP (100) case TOP+1: ビット毎の論理演算の例 #define A (1<<0) #define B (1<<1) case A|B:
- 284 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:40:14 ]
- string が色変わらないんだけどなんで?ちゃんとインクルードしてるのに
- 285 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:49:42 ]
- >>284
メモ帳で書いてろ
- 286 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:56:58 ]
- 他の関数でもポップアップが出なくなった
なんでだろう
- 287 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:09:35 ]
- >>286
{}とかが上手くいってないと出ないよ
- 288 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:41:44 ]
- >>287
ありがとうございました
- 289 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:53:26 ]
- caseに式を使えたらいいのにぁ
else ifの梯子なんてダサすぎる…
- 290 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:55:40 ]
- 制限は多いけど、その条件を満たす場合はパフォーマンスを発揮できると考えるべき。
- 291 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:21:01 ]
- switch case のコンパイルコードに期待を持つなんてオールドタイプのバッドノウハウ
- 292 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:37:30 ]
- >>289
条件演算子を使えば似たような書き方で好きな式を条件に出来る。 C++だけだったかも知れんが。
- 293 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:24:46 ]
- else if するくらいなら
(x==0||x==1||x==2||x==3)&&(func0(),true) ||x==4&&(func4(),true) ||x==5&&(func5(),true) ||(func_default(),false);
- 294 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:26:09 ]
- あ、カッコ不足だった
- 295 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:49:34 ]
- AクラスのaにBクラスからアクセスしたいのですが、うまくいきません。
どうしたらいいでしょうか。。 #include <stdio.h> class A { public: A(int); private: int a; private: class B { public: B() { printf("constructer B\n"); } void some_func(void){ printf("a: %d\n", a); } }; }; A::A(int x) { a = x; B* b = new B(); b->some_func(); } int main(void) { A a(10); return 0; }
- 296 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:08:01 ]
- >291
でもブレイクスルーとdefaultの機能って、状況さえ許せば凄く便利じゃね?
- 297 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:30:32 ]
- >>295
class A{ public: A(int); private: int a; class B { public: B(A&a) : a(a) { printf("constructer B¥n"); } void some_func(void){ printf("a: %d¥n", a.a); } private: A&a; }; friend class B; }; A::A(int x){ a = x; B* b = new B(*this); b->some_func(); }
- 298 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:32:38 ]
- >>295
friend
- 299 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:35:43 ]
- >>296
Duff's Deviceくらいしか使い道なくね?
- 300 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:17:05 ]
- >>296
ブレイクスルーちゃう fall through
- 301 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:18:14 ]
- ブレイクするんちゃう?
- 302 名前:デフォルトの名無しさん [2009/06/10(水) 01:23:48 ]
- std::coutとかstd::endl;って
スレッドセーフですか?
- 303 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:06 ]
- コンパイラごとに違うので、コンパイラの仕様書を読んでください。
っていうか、C++の規約にはスレッドセーフに関する記述はないんじゃなかったっけ?
- 304 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:28:30 ]
- ライブラリによるしな
- 305 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:04:54 ]
- >300
失礼、別のと混ざった
- 306 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:23:36 ]
- class A{ public: void A( void ); virtual void ~A( void ); };
と書きたい今日この頃 なぜこの書き方でエラーがでるのかがわからない
- 307 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:13 ]
- 気持ちは分かるけどさ。
「もともと戻り値は存在しないもの」と、「戻り値は使わないことを宣言する」の違いじゃない?
- 308 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:38 ]
- void
- 309 名前:デフォルトの名無しさん [2009/06/10(水) 14:47:46 ]
- sprintf関数について質問です。
strcatとかstrcpyを使うよりも、便利だと教えられたのですが、いまいちどこが便利なのかわかりません。 教えてください。
- 310 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:53:53 ]
- 具体的にstrcatとかstrcpyを使ったコード書いてみて
それをsprintfに置き換えてみりゃわかるだろ。 もちろん、strcatとかstrcpy一発で済むような例はstrcatとかstrcpy使えばいいのはわかるよな。
- 311 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:54:06 ]
- HOGE_01、HOGE_02 …… みたいな文字列を生成するときは、sprintfじゃないとやってらんないと思う
- 312 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:29:14 ]
- sprintfなんてキケンな物使っちゃいけません
- 313 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:33:01 ]
- sprintf_sがあるから無問題
- 314 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:03:03 ]
- >>312
#pragma warning (disable : 4996)
- 315 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:52 ]
- ltoaで小数点以下の数値を文字にするにはどうするの?
- 316 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:59 ]
- sprintf_sにしろsnprintfにしろ標準じゃないし、こいつらはこいつらで危なかったりするし(ヌル終端しないとか)
いずれにせよsprintf一族はロクなもんじゃないから書き捨てコード以外には使うべきでない
- 317 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:08:06 ]
- >>316
安全な使い方をすればいいだろ
- 318 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:11:26 ]
- sprintf系を使って本当に安全なコードを書こうとすると#ifdef地獄だぞ
挙動バラバラだし、本当にクソみたいなsnprintfとかがいるから ヌル終端しないくらいならカワイイもんで、例えば 一昔前のLinuxはnをガン無視してsprintfにブン投げるようになってることがある 本当に死ねばいいと思う
- 319 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:13:28 ]
- C/C++にしろJavaにしろ安全は保障されないし、こいつらはこいつらで危なかったりするし(すぐに暴走するし)
いずれにせよプログラミング言語一族はロクなもんじゃないから書き捨てコード以外には使うべきでない
- 320 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:20:16 ]
- snprintfはC99標準……。
ま、糞実装なsnprintfの存在以前にC99自体アレだが。
- 321 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:44:16 ]
- C99の仕様以前に、C99の対応率が。。。
- 322 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:50:11 ]
- C99の方が便利なのに、どうしてC99に移行しないんだろうね?
異なるプラットフォーム間で利用されるソフトを開発しているならともかく そうでない、小さなプロジェクト(おそらく世のプロジェクトの大部分)は C89よりC99で開発したほうが(わずかだろうけど)コスト削減になりそうなものだが。
- 323 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:52:42 ]
- 世の中Cじゃ無くてC++方向に走ったからね。いまさら感があるよ
- 324 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:59:07 ]
- 便利な物だけつまみ食いしとけばいいんだよ
__func__とか__VA_ARGS__とか_Pragmaとか<stdint.h>とか restrictやら可変長配列やらはいりません
- 325 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:53:03 ]
- 僕は複合リテラルだけ居てくれればそれでいい。
- 326 名前:デフォルトの名無しさん [2009/06/11(木) 01:48:37 ]
- C++でクラスの配列を作ったのですが、配列の要素数をどうやって求めればいいでしょうか。
class hoge { public: int a,b,c,d,e; void func1(); void func2(); }; hoge h[]={ {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, }; このとき sizeof(h)/sizeof(hoge) とやっても正しく出てくれません。
- 327 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:53:50 ]
- template<X>unsigned is(hoge[X]&){return X;}
kazu=is(h);
- 328 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:00:41 ]
- class Hoge
{ int a } というクラスがあったとき Hogeのインスタンス同士の比較をメンバ変数aの大小で行う場合 演算子をオーバーロードしたほうが良いのか int GetA()という関数を比較するのが良いでしょうか? またHogeインスタンスとintを比較することも考えてますがこういう場合はどうでしょうか?
- 329 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:02:44 ]
- >>326
いやそれであっている。 うまくいかないならほかに原因がある。
- 330 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:37:59 ]
- >>328
Hoge同士の比較方法がそれ以外にあり得ないなら演算子オーバーロードでいいんじゃね?
- 331 名前:デフォルトの名無しさん [2009/06/11(木) 02:50:23 ]
- >>329
すいません。 クラス配列を作るとき、 hoge h[]={ hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, }; と書くようにしたら先のやり方で配列の要素数が取れました。 環境はVS2008なのですが、最初の書き方ではだめだったでしょうか?
- 332 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:10:02 ]
- コンパイラ何使ってる?
あと、どんな結果が出たのかも書いて欲しいかなかな。
- 333 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:35:46 ]
- hoge{1,2,3,4,5} ←なにこれ?
- 334 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:03:30 ]
- 新しいコンストラクタの呼び方
- 335 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:35:48 ]
- デタラメ書くなカス
- 336 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 15:17:42 ]
- >>331
自分もVS2008だけど、これはエラーなくコンパイルできて4と出力される。むしろ>>331がコンパイルエラーになる。 #include <iostream> class hoge { public: int a,b,c,d,e; void func1(); void func2(); }; hoge h[]={ {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, }; int main() { std::cout << sizeof(h)/sizeof(hoge) << std::endl; }
- 337 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 19:58:37 ]
- gcc4.3以上なら通るな
initializer_listだろ
- 338 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:57 ]
- C99の機能をC++に持ち込むなクズ
- 339 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:22:27 ]
- C++0xではC99の一部機能が採用されるよ。
委員会の人たちにクズと言わないと意味ない。
- 340 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:51 ]
- restrictとか_Complexとか可変長配列みたいな
本当にしょうもない物は入らないから大丈夫だと思うけどね
- 341 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:53:38 ]
- >>339
ここはC++0xのスレじゃないよ
- 342 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:20:40 ]
- >>340
特に、restrictはC++89のときに否決された過去があるから、 今回も入れられるわけないw
- 343 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:22:51 ]
- restrictは入れると一つだけ利点があるんだよなあ
FORTRAN並みに配列演算が高速化できる可能性がある 科学技術計算にはFORTRANを、と言わなくて済むようになるんだがな それ以外には取り立てて利点はない
- 344 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:13:12 ]
- >>341
ここがC++0xのスレかどうかなんて、>>338-339の流れには関係ないよ。
- 345 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:08:43 ]
- >>344
スレ違いだクズ
- 346 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:24:45 ]
- いいえ。
- 347 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:52:32 ]
- いいえ。
- 348 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:56:38 ]
- iccでもオプション指定さえすればrestrictが使えるんだよね。
メモリのアクセスパターンががらっと変わる可能性があるから入れて欲しいけどねぇ。
|

|