- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ]
- プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2以降。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・ぐぐる ・マニュアルで探す ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(なるべくそのままで) ・実行環境(OS名、コンパイラ名) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって小心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。 宗教的な話題は禁止します。
- 487 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 20:29:28 ]
- >>485
LB_SETCURSELのインデックスは0からのはずなのでLB_GETCOUNTの行は範囲外ではないか?
- 488 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:42:00 ]
- ReadFileでファイルからデータを読み込み
ComboBoxへリストとして追加したいのですが 改行ごとの読み込み処理は皆さんどうやっていますか? 現在C++へ移行中で.NetではReadLineで簡単に出来たのですが なかなか良い方法が見つからず数日ほど悩んでいます
- 489 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 02:02:46 ]
- その流れだといろんな事が簡単にはできなくなるから覚悟しておいた方がいいと思うよー
- 490 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 09:47:42 ]
- >488
改行単位で読むだけなら getline じゃないの?
- 491 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:05:18 ]
- ウィンドウサイズで
大きさを制限する方法なら沢山出てくるのに 矢印自体を無効化する方のが見つからない 案外スタイル指定だけで出来たりするのかな
- 492 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:10:16 ]
- WindowsならWS_POPUPにしてWS_THICKFRAMEを外せばおk
- 493 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 16:42:30 ]
- >案外スタイル指定だけで出来たりするのかな
その通り
- 494 名前:デフォルトの名無しさん [2009/09/26(土) 03:42:47 ]
- for (int i=0;i<N;i++)
{ //処理A //処理B } より for (int i=0;i<N;i++) { //処理A } for (int i=0;i<N;i++) { //処理B } と書いた方が速くなるときがあるのですが、何故だかがわかりません。 考えられる理由を教えてください
- 495 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:52:15 ]
- 大雑把過ぎてよくわからんけど、ぱっと思いつくのは
1.キャッシュに乗った 2.loop unrollが効いた
- 496 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:04:41 ]
- 一番考えられるのは、測定ミスだな
釣りじゃないなら、Nの値と処理A,Bの内容を示せよ あと時間測定の方法も
- 497 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:09:04 ]
- Windowsなら SetPriorityClass()、QueryPerformanceFrequency()、
QueryPerformanceCounter() を使って自動的に測定させればよい SetPriorityClassを使うのはバックグラウンドでいらないプロセスが動いて 測定値にバラツキが出るのを防ぐため 測定後に元に戻しておかないと大変な事になる(再起動)
- 498 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:44:19 ]
- >>494
どっちかのループでSSEが効いたんじゃない?
- 499 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:00:21 ]
- C++でコードを書いていて引数にとったクラスにメソッドを適用する
関数を書きました。そのメソッドはクラスのprivate変数を変更するメソッドです。 デバッグプリントを追加して、メソッドが呼ばれている事や、 メソッドによってprivate変数が変更されている事を確認したのですが。 その関数を実行した次の行でそのprivate変数を確認するともとに戻ってしまっています。 適切に変更したいのですが、よろしくお願いします。 OS:MacOSX 10.6 Compiler: g++ 4.2.1 よろしくお願いします。
- 500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:05:43 ]
- >>499
引数の型はなにかね?
- 501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:19:33 ]
- メソッドの引数ですか?
独自で作ったHogeクラスのインスタンスです。 void FooBar (Hoge x) { x.SetX(10); } みたいな感じで使っています。 Hoge baz; FooBar(baz); //ここでbazのprivate変数Xは10にかわったはず!! baz.GetX() //なぜかここの返り値がもとのXのまま といった感じです。
- 502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:23:54 ]
- そりゃbazの変数が変わったように見えてるだけで、実際変わったのはxの変数だ。
bazとxのアドレス確認してごらん。
- 503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:26:00 ]
- なるほど、関数はHogeインスタンスのポインタを引数にとるようにし、
bazのポインタを引数に渡せばいいという事でしょうか?
- 504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:29:53 ]
- ポインタでもいいし、C++だと参照ってのもあるから好きなほうを使えばおk。
- 505 名前:デフォルトの名無しさん [2009/10/23(金) 09:01:30 ]
- 負の値も含めて四捨五入する方法を教えてください
- 506 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:22:17 ]
- std::vector<int> vA;
std::vector<int> vB; // vAに値をpush_back vB.reserv(vA.size()); std::copy(vA.begin(), vA.end(), vB.begin()); としたときに vB.size() でサイズを取得するには何か細工が必要ですか?
- 507 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:23:42 ]
- >>505
tech.ckme.co.jp/cpp/cpp_round.shtml
- 508 名前:506 mailto:sage [2009/10/23(金) 10:42:22 ]
- すみません解決しました
- 509 名前:デフォルトの名無しさん [2009/10/28(水) 05:31:06 ]
- Windowsで実行ファイルのディレクトリを取得する方法を教えてください
- 510 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:06:03 ]
- WinAPIスレにでもどうぞ。
それにしても、「実行ファイルのディレクトリ」とは「実行ファイルのあるディレクトリ」なのか 「実行ファイルを起動したときのディレクトリ」なのかはっきりしないもんだな。
- 511 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:00:44 ]
- 後者は普通カレントディレクトリと呼ぶだろ
- 512 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:40:41 ]
- 実行ファイルを起動したときのディレクトリのことをカレントディレクトリと呼ぶだって?
やめてくれないか。
- 513 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:00:36 ]
- >>509
GetModuleFileName _fullpath とか、使って
- 514 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:42:32 ]
- >>512
「実行ファイルを起動したときのカレントディレクトリ」と言いたいのだと思う。
- 515 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:13:32 ]
- /usr/bin/ls
- 516 名前:デフォルトの名無しさん [2009/10/30(金) 03:42:49 ]
- デフォルトのコピーコンストラクタは
ビットコピーをすると教わりましたが stlコンテナを含む自作クラスについて それをすると問題が起こりませんか? 大丈夫ですか? 代入してスコープ抜けるとき コピー先の奴が元のを破棄してしまいませんか?
- 517 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 04:50:35 ]
- >>516
> デフォルトのコピーコンストラクタは > ビットコピーをすると教わりましたが それは、うそだ。
- 518 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 06:57:24 ]
- >>517
では全てのメンバオフジェクトに operator=を適用するのですか?
- 519 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:38:15 ]
- >>518
コピーコンストラクタならコピーコンストラクタ。 operator= なら operator= 。
- 520 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:40:49 ]
- >>519
アハ!悟った! あり^^
- 521 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:43:32 ]
- すみません。計算式についてなのですが
long a = 3210; double b = 23.456789; long y = (a*3.1415) - (b+10.5) * 6.28; 例えばこうやって変数yを求めた場合、 「計算の為に見えない変数が確保され、メモリを消費する」という現象は起きるのでしょうか? もしそうだとするならば、 long a = 3210; double b = 23.456789; double c = a*3.1415; double d = (b+10.5) * 6.28; long y = c - d; こうやって(計算式がもっと長ったらしい場合)コードの可視性を良くしておいても メモリ消費や、処理の負荷は変わらなかったりするのでしょうか? それとも何かルールが有るのでしょうか。 「このURL読んで来い」とかだけでも何でも構いませんので、 情報を教えて頂けると助かります、よろしくお願いします。 orz
- 522 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:47:34 ]
- >>521
気にするな、コンパイラは善きに計らってくれる。
- 523 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:50:51 ]
- >>521
どうしても気になるなら、(最適化ありで)コンパイラにアセンブリ出力を出させて較べてみればいい。 >521が全てなら、恐らくはyが即値で得られるだろう。
- 524 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:51:29 ]
- >>522-523
アセンブリ出力・・やってみて確認してみようと思います。 ありがとうございました。 orz
- 525 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:05:01 ]
- すみません。
「整数同士の割算」の結果が「整数のみ」か「少数を含む」かを見分ける時、 今はintとdouble2つの割算をし、それらが等しいかif判定しているのですが もっとスマートな方法をご存知な方はいらっしゃられないでしょうか?
- 526 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:40:57 ]
- if(a%b==0)
- 527 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 05:12:31 ]
- 割り切れるかどうかってこと?
あんまりこういうこと言うスレではないかもしれんけど、正直、一瞬で>>526が 浮かばないようだとヤバくね?
- 528 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:04:09 ]
- そりゃ人によるでしょ。C/C++勉強し始めてすぐならしょうがない。
仕事でC/C++使ってる人間なら確かにヤバい。
- 529 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:17:26 ]
- >>526-528
成る程。何か効率化の方法が有りそうだとは思ってたのですが 526の式にピンとこず、実際数値を当てて試してやっと理解できました。 アマチュアだけど、センスがないなぁ・・自分。 ありがとうございました。
- 530 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 14:31:50 ]
- %を知らなかった(か、見たことはあるけど使ったことがなかった)のか?
- 531 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 15:37:13 ]
- >>530
いえ。知っていてほんの数回は使っていたんですが、実際に余った数値そのものが欲しい時ばかりでした orz 普段少数しか扱ってなくて、余り=何かの数値 という先入観が強かったのも有るかもしれません。 ピンと来れず申し訳ないです。 orz
- 532 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:09 ]
- まぁ謝ることではない
FuzzBuzz問題を解けないのが普通、って話も少し実感できた
- 533 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:49 ]
- FizzBuzz問題だった
- 534 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:27:57 ]
- まぁこういうのはセンスよりも経験だから
積めばそのうちピンと来るようになるさ
- 535 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:07:57 ]
- 代入演算子=がオーバーロードされているBaseクラスを
public継承したDerivedクラスがあり、 そのDerivedクラスは代入演算子=をオーバーライドしてあります。 そんなDerivedクラスのコンストラクタ中で、 @*this=100; Athis->operator=(100); Boperator=(100); CBase::operator=(100); これらはして良いコードでしょうか?
- 536 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:55:29 ]
- >>535
1〜4のどれもコンパイルエラーにならないんで、あとはやりたいことを 書いてもらわない限りはそれ以上の良し悪しを判断できない。
- 537 名前:535 mailto:sage [2009/11/18(水) 06:13:06 ]
- >>536
ありがとうございます。 コンストラクタ中で、thisポインタや代入演算子を使用しても大丈夫なのでしょうか? ということが伺いたかったのです。
- 538 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:31:52 ]
- >>537
同じじゃねーか馬鹿。 コンパイルは通る。一定の動作もする。 「大丈夫」かどうかは、少なくともその動作が期待している動作と合致するかどうかによる。 今のところ期待している動作は不明。したがって判別不能。
- 539 名前:537 [2009/11/18(水) 20:03:46 ]
- 仕様上未定義の動作でないことが分かれば大丈夫です。
ありがとうございました。
- 540 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 23:21:25 ]
- 条件によっては未定義動作も有りうるって言われてるんじゃないの?
- 541 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:39:59 ]
- 質問です
10×10のマス目を「0,1,2」で埋める。使わない数字があっても可 それを例 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 と言うテキストファイルで出力したい。ファイル名は連番。 すべての可能性を(回転して同一等を排除しない)出力するためのプログラムって どうやって書いたらいいんでしょうか?? 見当が付きません。
- 542 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:45:00 ]
- 3^100 ≒ 5.15×10^47通り全部書き出す気?
- 543 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:49:05 ]
- 3~100になるんですか……
100~3だと思ってた………… えらいことになりますね。
- 544 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:07:30 ]
- >>541 のお陰で、STL に next_combination がないことに
今頃気付いた。
- 545 名前:541 mailto:sage [2009/11/19(木) 20:45:31 ]
- 少しアプローチの仕方を変えてみようかな
まず10桁の数字を「1,2,3」で埋める。使わない数字があっても可 これなら3^10=59049個で、一つずつファイルに出力は厳しいけど 一覧で表示だけならできそうだ。 1111111111〜3333333333 までの数字で「0,4,5,6,7,8,9」を含む物を削除ってほうがわかりやすいのかな。 まぁそのあとどうやって縦に10桁並べるのかよくわからんけどww
- 546 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:10:34 ]
- 質問ですstd::string クラス文字列の内容ををchar型配列に移すときに
char *text; string str ="testtxt"; int i=0; int len = str.length(); text = new char[len]; while(i<len){ text[i] = str.at(i); i++; } こうしたんですがもっとこう単純で綺麗に出来ないものでしょうか?
- 547 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:44:51 ]
- >>546
whileの代わりにstd::copy(str.begin(), str.end(), text);とかstd::memcpy(text, str.data(), len)とか。 ところで、'\0'の終端がなくていいの?
- 548 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 00:32:49 ]
- いいんです。あったら上司に怒られます。
- 549 名前:デフォルトの名無しさん [2009/11/20(金) 01:19:51 ]
- 質問です。
ループ中の変数 j をファイル名としてテキストファイル"1.txt"〜"8.txt"を どんどん新規作成していきたいのですが、 「f.open(ji,ios::out)の第一引数は const char*だカス」と怒られます。 こういう場合はどのように行うのでしょうか? 自分で書いてみたものを張ります。 for(int i=0;i<9;i++){ char t_char[10]; sprintf(t_char, "%d", j); string ji = ""; ji += t_char; ji += ".txt"; fstream f; f.open(ji,ios::out) f.close(); }
- 550 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:22:43 ]
- >>546
std::vector<char> text(str.begin(), str.end());
- 551 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:23:37 ]
- >>549
ji.c_str()
- 552 名前:デフォルトの名無しさん [2009/11/20(金) 01:33:49 ]
- >>549
f.open(ji.c_str(),ios::out) かな
- 553 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 03:14:37 ]
- >>547
>>550 ありがとうございます!
- 554 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:02 ]
- >>549
sprintf(t_char, "%d.txt", j); fstream f; f.open(t_char,ios::out)
- 555 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:36:18 ]
- >>551
>>552 >>554 ありがとうございます!!
- 556 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:20:28 ]
- Shift-JISの場合は
char*型 strlen strcpyなどを使いますよね? UTF-8を扱う場合の変数型や文字列処理の関数はどうなりますか?
- 557 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:35:29 ]
- 基本的に、strをwcsに置き換えればOK
- 558 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:42:03 ]
- UTF-8ってShift-JIS同様マルチバイト文字ではないのですか?
UNICODEはワイド文字で、UNICODEとUTF-8は別物ですよね?
- 559 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:44:23 ]
- >>557
それはおかしい。 UTF-8はマルチバイト文字に分類される。 UTP-8を直接扱うときはcharとそれを扱う関数を使って問題ない。
- 560 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:53:17 ]
- えー。UTF-8というのはUnicodeのエンコード方式のひとつです。
Unicodeというのはいっぱいある文字を一覧表にしただけだと思ってください。 その一覧表をコンピュータでどのように表現するか、 2バイトで1セットとするコードを使うとか、 4バイトで1セットとするコードを使うとか、 最初の方は1バイトで、大部分は2バイトだけど、いい具合に3バイトとするコードを使うとかetc、etc… そういうなかのひとつがUTF-8です。UTF-8は可変長バイトです。 Unicodeを扱う場合、localeを正しくセットした上で、 wchar_tとwchar_tを処理するライブラリを使います。 ただし、UTF-8が本当に使えるかどうかは コンパイラしだいです・・・。
- 561 名前:556=558 mailto:sage [2009/11/22(日) 01:55:15 ]
- >>559
UTF-8を扱うときはShift-JISと同じように扱って大丈夫なんですね。 ありがとうございました。
- 562 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 03:26:17 ]
- >>560
UTF-8を単なるバイト列と見なして入力・処理・出力するだけなら、 単なるバイナリデータと同じchar型で扱って何の問題もない。 そのデータ中に'\0'が現れなければ、strlenやstrcpyはうまく動く。 普段使っているマルチバイト文字と改行の扱いが同じならテキストモードでのファイル読み書きもうまくいく。 ここまでlocaleの出番無し。 もちろん、この状態を「本当に使える」と言わないと主張するならそれに賛成するよ。
- 563 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 04:07:31 ]
- >>562
UTF-8はASCII互換部分があるからそういうことができるのかな。 いまいちこの辺はよくわからんです*_*
- 564 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:05:16 ]
- UTF-8は外部インターフェース用と考えた方が良い
直接文字列操作するなんて考えたくない
- 565 名前:デフォルトの名無しさん [2009/11/23(月) 15:09:23 ]
- C言語の質問です。
C言語の基本はとりあえず理解したのですが、実際に自分でプログラムを組もうとした時 はて、真っ黒コンソールで走る、組んでて楽しいプログラムって何だ?と、困っています。 そこで、こんなコンソールのプログラムなら、作ってて面白いし、勉強にもなるんじゃ?といった案をお教えください。 ちなみに、基本情報処理者の資格を一応持っているので、多少のシステム関係の知識はあります。 プログラミング環境は、 ・Borland C++ Compiler 5.5.1 ・Microsoft Visula Stdio 2005 の二つあります。 どうぞお願いします
- 566 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:13:31 ]
- いや別にコンソール使わなくてもいいと思うけど
- 567 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:19:55 ]
- オセロ
- 568 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:29:16 ]
- ウィンドウ出す方法でも勉強したらいいんじゃね
- 569 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:58:24 ]
- >>564
ハァ?
- 570 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 20:47:18 ]
- >>569
俺も>>564は普通に当然だと思うが
- 571 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:21:03 ]
- >>565
テトリスなら2, 30分ぐらいで作れて遊べるから楽しいんじゃない? 昔、流行った頃は電卓に搭載されたぐらいシンプルなものだし
- 572 名前:565 mailto:sage [2009/11/23(月) 21:50:09 ]
- >>566
おぉそうですか。Winプログラムじゃ、"Hello, world"で挫折すると聞いていたもので・・・ 窓だと、どのようなプログラムがよいか、よろしければお教えくださいm(_ _)m >>567 なるほど!いいですね 次の手を思考ルーチンを、自分で考えてみるってのも、楽しいかもしれませんね! ありがとうございました >>568 ぐ、やはりWindowsプログラミングですかね、 とりあえずこのソースを打ち込め!的なページを見てみます >570 テトリスですか!いいですね、、、 mainをぐるぐる回して、関数の戻り値を確認すれば出来るのだろうか…やってみます! ありがとうございました
- 573 名前:デフォルトの名無しさん [2009/11/24(火) 00:20:57 ]
- CとC++の違いをお願いします。
また、 www.amazon.co.jp/gp/product/4797349816/ref=s9_simz_gw_s0_p14_i1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-1&pf_rd_r=0X37K4K5C7P745SGFKF4&pf_rd_t=101&pf_rd_p=463376736&pf_rd_i=489986 この本はCではなくC++を扱ってるように思うのですが、どうなのでしょうか
- 574 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 00:50:20 ]
- どうみてもC
VC++はCも扱える
- 575 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:04:41 ]
- どう見てもC
初心者の俺がもってるイメージとしては c = 関数関数関数関数 cpp = c + クラス他
- 576 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:07:32 ]
- 言語仕様としては間違ってなくもないけど
実際のコーディングがまったく違うよ。
- 577 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 19:49:14 ]
- C++を有る程度使えるようになってから
このまえCだけで全部つくる必要がでたときすごくとまどったな なんつっても文字列操作が…
- 578 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 23:00:39 ]
- いつかC++のクラスやSTLが突然使えなくなる日が来るんじゃないかと思ふことがある
- 579 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:24:14 ]
- 〜ヘッダ〜
class BBB; class AAA{ BBB *processor; void do(); } 〜ソース〜 AAA::do(){ BBB &processor = *(this->processor); processor.execute(); } プログラミングの出来る友達のソースを見たらこのような記述がありました。 このようにするメリットって何があるのですか? 友達にも聞いたのですが、いまいち理解できませんでした。
- 580 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 03:24:18 ]
- いわゆるpimplだな。
他のソースからそのヘッダだけインクルードしてAAAを使いたい場合に有効。 AAAのインスタンスを生成するには、AAAのメンバ変数のサイズが全部確定してないと ならない。プライベートメンバでも何でも。 でも、ヘッダにAAAのプライベートメンバ変数まで全部書くようにしてると糞ソースに なる。 だから、BBBを名前だけ宣言しといて、AAAのメンバ変数に「BBBへのポインタ」を 置く。ポインタなら中身が分からなくてもサイズは確定するから。 で、プライベートな実装は全部BBBの中に突っ込んで、AAAはBBBに丸投げする。
- 581 名前:デフォルトの名無しさん [2009/11/29(日) 05:28:36 ]
- 下のプログラムで、なぜかswitchのところでひっかかってしまいます。原因は何でしょうか。
プログラムの内容はsuujiに乱数を入れ、その乱数が〜なら○○を出力する、というものです。 int suuji; suuji = rand() % 5 ; printf("\n\n\n\nテストプログラム1\n"); switch (suuji) { case '0' : printf("\nCASE 0"); break; case '1' : printf("\nCASE 1"); break; case '2' : printf("\nCASE 2"); break; case '3' : printf("\nCASE 3"); break; case '4' : printf("\nCASE 4"); break; } return 0;
- 582 名前:581 [2009/11/29(日) 05:30:54 ]
- 頭にくる
int main(void) がぬけてました。 また、ひっかかるというのは表示されないということです
- 583 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 06:40:40 ]
- suuji = rand() % 5 + 0x30;
これで^^
- 584 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 08:38:50 ]
- やべえ俺>>583を見てもなお引っかかっちまった
文字'0'(ASCIIコード0x30)と比較してるのか
- 585 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:14:52 ]
- if(1){****}
とあった場合、 まともな(有名どころのg++とかVCとか)コンパイラなら if(1)という無駄なオーバーヘッドは消してくれると期待できますか? あるいはif(0)も同じく最適化してくれますかね?
- 586 名前:585 [2009/11/29(日) 14:22:33 ]
- #include <iostream>
const int num = 1; int main() { if(num){std::cout << "num" << std::endl;} if(!num){std::cout << "!num" << std::endl;} return 0; } これがg++ (最適化-O1) でasmファイルが同じになりました。 他のコンパイラでも期待して良い物なのでしょうか?
- 587 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:11:43 ]
- よほど特殊な狂った(または単純に超絶バカな)コンパイラでなければ、最適化を
切ったりしない限りは当たり前のように消える
|

|