C++相談室 part34
■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)v
NGNGただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。
過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNG0491484
NGNG関数を想定してるなら全部埋める必要があるだろ。0で埋めるってのはそういう話だと
思ったが。
0492デフォルトの名無しさん
NGNG1byteずつ初期化すると遅いから4byteか8byteずつ初期化しなさい。
0493デフォルトの名無しさん
NGNGあー、すまん。>>483=487=491だ
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNGCしか知らんて、Cでも配列の初期化は={0}で同じことできる。
これが通らないとか言ってるからROMっとけと言ってるんだ。
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNGいや、意図は、hoge[0] だけ0で埋めるという意味だよ。
全部埋まったのは、そのコンパイラがたまたまそうだっただけ。
0499デフォルトの名無しさん
NGNGレビューで文句言われたならとりあえず従っておいたら。
コメントが微妙にずれてるのがわかりにくいと言われたのなら直せばいいだけだ。
0500デフォルトの名無しさん
NGNG知らなかった、正直すまんかった。
で、スレ違いではあるがよければK&Rのどのへんにそういうのが載ってるのか教えてくれないか。
索引で配列関連を引いてみたが見つからなかった。
0501デフォルトの名無しさん
NGNG「4.9 初期化」
0502474
NGNG了解。コンパイラ依存という事で。
>>497,499
実際のコメントは○○文字の初期化、という感じで書いていました。(○○がわかると会社がばれる)
レビュアーの言う通りにmemsetで統一、という事になりそうなので訊いてみた次第です。
たくさんの意見蟻が�d。
0503デフォルトの名無しさん
NGNGP.104〜P.105の
『指定した個数より配列に対する初期値が少なければ、残り要素は外部変数、静的変数および
自動変数については0になる。』
ここかー!ありがとう。ほんとK&Rは隅々まで読んどかないと変なとこで足下掬われるな
0504デフォルトの名無しさん
NGNG0505504
NGNG0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG所詮STLの知名度なんてそんなもんなんですな
0508498=504=505
NGNGちょっと混乱中。
0509474
NGNGデータ構造関係は、ほぼ使ってますよ。
Boostも使いたかったけど「実績」を証明するのがめんどくさかったので諦めましたが。
>>508
VC6 VC7 mingw gcc にて確認、全部0で埋まりました・・・。
0510デフォルトの名無しさん
NGNG={0}と=""は同じです。
どっちも={'\0'}です。
0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNGなんで既出の意見を何度も繰り返す必要があるよ?
つうかこの場合={0}がstd::fillよかいいだしょ。
0513デフォルトの名無しさん
NGNG激しく同意。とでも言って欲しかったんじゃないか。
寂しい奴なんだよ。
0514デフォルトの名無しさん
NGNGコンパイラ依存じゃねーよ
{0}は残りの配列の要素(クラス、構造体のメンバ)も0で埋める。
0515デフォルトの名無しさん
NGNGhttp://www.kuzbass.ru/docs/isocpp/decl.html#dcl.init.aggr
の8.5.1-7-がそれ.
>512,513
すいません.愚痴垂れ流しただけになってました.
0516デフォルトの名無しさん
NGNGPoint* pt = (Point*)new char[sizeof(Point)];
*pt = Point(10, 10);
delete [] pt;
1). 2行目のコードででptのコンストラクタが呼ばれますが、
ptはビット的な変化はあるんでしょうか?
2). ptのアドレスは変わらない様ですがこの行為は正当でしょうか?
0517デフォルトの名無しさん
NGNG釣れますか?
0518デフォルトの名無しさん
NGNGPoint* pt=new(buffer) Point(10, 10);
pt.~Point();
delete[]buffer;
こういうことがやりたかったんじゃないのかい?
0519デフォルトの名無しさん
NGNGあまりエレガントな記述を追求しても、
同じデータを再初期化する時に破綻するのがわかってんだから、
大人しく一般的な初期化をしとけ。
memset、ZeroMemory、std::fillで決着。
反論は受け付けない。以上。
0520デフォルトの名無しさん
NGNG知名度はそんなに高くないから「わかりにくい」という意見には
一理あるかもしれんけど、だからと言ってそこで memset を使う理由にはならない。
オーバーロードは分かりにくいから使用禁止って言うのと同レベルだよ。
0521デフォルトの名無しさん
NGNG最初期化、それは名高い変数の使いまわしと言うものですか!?
0522デフォルトの名無しさん
NGNG変数使いまわしも何も、クラスのメンバ変数が思い切り該当するっしょ。
0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGまったく同意見
519は論点ずれてるうえ
反論は(ry とわざわざ自爆する奇特なピエロ
0525デフォルトの名無しさん
NGNGそれはやってみるしかない
同じ処理系でも条件次第で違ったりもする
アセンブラ読めない人と、実測できない人は、蚊帳の外
0526デフォルトの名無しさん
NGNG> memset、ZeroMemory、std::fillで決着。
これらは一般的な「初期化」ではない。
未初期化のPODに対して行う場合に限定して
「初期化」と呼べるかもしれない、くらいのものだ。
0527デフォルトの名無しさん
NGNG何に該当するって?
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG具体的には、
char hairetu[256];
std::string str = "ぬるぽ";
hairetu = str.c_str();
これでいけると思うのですが・・だめなのでしょうか・・・
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNGネタ?
配列名には代入できない。strcpyを使え。
0532デフォルトの名無しさん
NGNGだめです。
char配列を文字列として使うなら、C言語の文字列処理を知るべきです。
0533マイク ◆yrBrqfF1Ew
NGNG↓
>std::string str("ぬるぽ");
0534デフォルトの名無しさん
NGNG文字列処理なんてどんな入門書にも書いてるし、これ間違えるなんてあり得ない
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGbuffer overrun が気になる
0538デフォルトの名無しさん
NGNG0539>>529
NGNG自分C++ラーなので、知りませんでした。
まじで、ネタじゃありませんが(あせ
0540デフォルトの名無しさん
NGNGhenkaku[str.length()] = '\0';
0541540
NGNG0542デフォルトの名無しさん
NGNG>>537
0543デフォルトの名無しさん
NGNGstd::vector<char> hairetu(str.begin(), str.end());
hairetu.push_back('\0');
0544デフォルトの名無しさん
NGNGchar const* const c_str = str.c_str();
std::vector<char> hairetu(c_str, c_str + str.length() + 1);
0545デフォルトの名無しさん
NGNG0546mike ◆yrBrqfF1Ew
NGNGchar carray[256];
std::string nullpo("ぬるぽ");
std::istringstream strstrm(nullpo);
strstrm>>setw(sizeof(carray))>>carray;
0547デフォルトの名無しさん
NGNGint len = std::max(str.length(), sizeof(hairetu) - 1);
std::copy(bgn, bgn + len, hairetu);
hairetu[len] = '\0';
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG勝手に後ろを切り捨てちゃまずいだろ。
char hairetu[256];
if(str.length() >= sizeof(hairetu)) throw std::range_error("長すぎ");
strcpy(hairetu, str.c_str());
0551マイク ◆yrBrqfF1Ew
NGNG0552デフォルトの名無しさん
NGNGgap::sweet texture;
という記述があるのですが、
これはどういう構文なのでしょうか?
初心者で申し訳ない。
0553デフォルトの名無しさん
NGNG名前空間(またはクラス型) gap のメンバである sweet 型の変数 texture の定義。
インクルードの次の行であることには意味が無い。
0554デフォルトの名無しさん
NGNG0555マイク ◆yrBrqfF1Ew
NGNGnamespace gap {
typedef void sweet();
}
//sourcefile
gap::sweet texture; //declare
//omit
gap::sweet texture //def
{
std::cerr<<"\0m0th3rfuck3r"<<std::flush;
std::teminate();
}
0556522
NGNG名前空間 gap のメンバである sweet 型の変数 texture を
グローバル変数に定義しているということで間違いないでしょうか?
0557マイク ◆yrBrqfF1Ew
NGNG0558デフォルトの名無しさん
NGNG0559522
NGNGnamespace gap{
void sweet::print()
}
としておいて、ソースの中で
gap::sweet texure
texture.print()
となっているのですが、これは
sweet型の変数textureがprint()という関数を
呼び出しているということであってますでしょうか?
0560デフォルトの名無しさん
NGNGいや、それだとコンパイル通らないはず。
ところで、そのプログラム全部ここで解説させるつもりなのか?
0561デフォルトの名無しさん
NGNGセミコロンくらい見逃してやれよ。
0563デフォルトの名無しさん
NGNGchar*に対するfillはmemsetで特殊化している実装が多いです
0565デフォルトの名無しさん
NGNG頭悪そうだと思っていたが、もういいかげん頭悪いんだとわかった。
もう触りません。スレ汚して悪かった。
0566デフォルトの名無しさん
NGNG名前おかしいよ藁
0567デフォルトの名無しさん
NGNG複雑になるにつれ、クラスに纏めたいと思い、C++に手をだしました。
ただ、CもC++もまだ初心者で、中々苦労しています。
特に困っているのが、何をクラスにして派生クラスは何になるのか、メンバは何を持たせるか
みたいな部分が中々把握できません。
基礎的な書き方のようなものは、本を買ってプログラム組んでみました。
こういったことに慣れるための良い練習法のようなものがあれば教えてください。
0569アイク ◆uCUYQ8/A2w
NGNG0570デフォルトの名無しさん
NGNGワラタ
0571デフォルトの名無しさん
NGNG包含関係に気を配るとよろしいかも。
あと、Effective C++あたりが定番かな。
0573デフォルトの名無しさん
NGNGアドバイスありがとうございます。
本も探してみます
0576マイク ◆yrBrqfF1Ew
NGNG0578デフォルトの名無しさん
NGNGどのようにすればいいんでしょうか・・・
void Hage::OutLog(const char* fmt, ...)
{
va_list argp;
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);
fprintf(stdout, "\n");
}
0579デフォルトの名無しさん
NGNGstd::string sss;
sss = "abc<TAB>bbb";
※<TAB>は制御コードのTABだと思ってください。
で、このストリングを、
sss.find();で見つけたいのですが、どうすればできますか?
そもそも、find()で制御コードを検索することってできるのでyそうか?
0580デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNG\
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG>※<TAB>は制御コードのTABだと思ってください。
嫌です。
0585デフォルトの名無しさん
NGNG典型的な宗教論争だね。2ch なら煽り入れて楽しむところだが。
058611063
NGNG>>580,>>585
そんなこと言ってないでお前らも参加しろよー
ほれ、よく言うじゃん、「踊る阿呆に、見る阿呆。同じ阿呆なら踊らにゃそんそん。」って。
0587デフォルトの名無しさん
NGNG触りたくないです
■ このスレッドは過去ログ倉庫に格納されています