- 1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part61 pc11.2ch.net/test/read.cgi/tech/1205059063/
- 445 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:09:02 ]
- catchしてNULL返す関数でラップしてるとか?
- 446 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:16:47 ]
- >>438
> string tableName; // Bad - mixed case. おいらは google で仕事はできない
- 447 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:19:09 ]
- Googleに限らずどんな環境にも適合する人じゃないと駄目だよね。
- 448 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:19:53 ]
- まあ、その辺は統一取れてりゃ合わせるよ。
よほど変なのでなければ。
- 449 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:20:16 ]
- 初心者もれに
string tableName; // Bad - mixed case. なんでバッドなんだよって教えて干しいぉ?
- 450 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:24:31 ]
- >>449
誰がBADだと言っているのかは知らんが、MixedCaseなのがいかんと言っているだけじゃないか。 要は、caseをmixするなってことだろ。
- 451 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:26:28 ]
- 変数名は全て小文字で。単語の区切りはアンダースコアで。
と書いてある。
- 452 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:28:25 ]
- コーディング規約に違反しているから bad なだけ
- 453 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:01:58 ]
- >>445
std::nothrowって知ってる?
- 454 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:05:12 ]
- >>453
標準ライブラリが例外を投げないようにするのに、 どうやってstd::nothrowを使うのか教えてほしい。
- 455 名前:445 mailto:sage [2008/06/29(日) 17:08:18 ]
- 知りませんですた
- 456 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:34:59 ]
- 標準ライブラリから例外が投げられてもそのままキャッチしないで死ぬ
だけ、とか? もしくは標準ライブラリも書き直して使っているとか。
- 457 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:40:28 ]
- 俺C++2年以上使ってるけど、例外処理ほとんどしたことない
- 458 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:50:04 ]
- Cの癖が抜けてないんじゃね?
- 459 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:56:07 ]
- まさにそれ…
- 460 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:57:11 ]
- googleって例外使わないってことは
C++でも、全部defineかenum斬った値返すだけってこと?
- 461 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:04:01 ]
- >>457
普段ほとんど気にしなくても、必要なときにキャッチするようにしておけば済むってのが強みだね。
- 462 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:08:41 ]
- C++はマルチパラダイム言語でしかも多機能だけど、別に
それを全部使ってプログラムする必要はない。 むしろSTLも含めて常時全部の機能を使うのは大変。 その人に合ったコーディングスタイルでいいんじゃないかと 思う。
- 463 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:10:39 ]
- >>462
ダメそれ無理
- 464 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:12:33 ]
- >>463
え?全部の機能を常時使えって? その方が無理でしょ 常に10冊ほどの本を隣に置いておかないといけなくなるよ
- 465 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:13:35 ]
- より良い選択肢を無視するのは悪ではないか
けっきょく頑固な保守派はC言語をやれば良いではないか
- 466 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:14:40 ]
- >>464
全部の機能を覚えてれば本置いとく必要なくね?
- 467 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:16:04 ]
- >>464
学生じゃないなら20万ぐらいのドキュスキャン買って 本を全部PDF化するでしょ? それで2画面で検索+コーディングするよね? しない奴はカス
- 468 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:17:02 ]
- ええっ
例えばSTLの関数名全部覚えられるか? 現在のC++のSTLは当初標準化に際して提出された文書の サブセットだそうだがそれでも一冊の本が書けるほどだぞ
- 469 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:18:25 ]
- 例外大好きってわけじゃないけど、
RAIIしたら普通に例外に使わないか? コンストラクタで例外出せないと、かなり面倒です・・・。
- 470 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:18:33 ]
- 関数名なんて覚える必要ないが、だいたいどういうことが出来るか
という全体像を掴んでいれば、その都度調べて使えるし、いつの間にか 覚える。
- 471 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:19:33 ]
- >>462-464
よくわからんけど、話食い違ってるだけじゃね?
- 472 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:24:49 ]
- std::locale とか std::codecvt とか一度も使ったことないや
- 473 名前:デフォルトの名無しさん [2008/06/29(日) 18:38:08 ]
- >>468
んな必要ねーし 憶え方なんざ ISO/IEC14882 にだって書いてあるぞ たかが few 万円の費用が壁になるようなアマチュアの道具ではないってだけさ
- 474 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:40:20 ]
- few 万円で済めばいいが
俺はC++関連の本だけで既に百万は超えてる
- 475 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:45:14 ]
- >>474
スゲェ俺一冊w
- 476 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:46:37 ]
- 一冊で済む奴はいいよな
俺頭悪いから、というかCの悪い癖を徹底的に取り除きたかった からそれなりの出費を強いられたよ
- 477 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:50:37 ]
- 俺は入門書とD&Eで2冊だった。あとはweb。
- 478 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:51:15 ]
- webって手もあるね。
- 479 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:51:55 ]
- 学校の図書館に散々リクエストしまくっている俺がいる。
卒業したらリクエスト出しづらくなるから、早く0xが出てくれないと困る。
- 480 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:54:06 ]
- 0xが2009年末くらいに出たとして、そこからそれに対応したコンパイラや
書籍が揃うまで、どのくらいかかるんだろうね。
- 481 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:55:03 ]
- webも含めて、他人のソースを見るのは結構効果的だと思う。
オープンソース系や、STLとかboostとか。
- 482 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:55:57 ]
- コンパイラの方はすぐだろ
書籍はそれから半年遅れてドバッと出てくるか まあC++でほとんどのプログラミングテクニックは 出尽くしているから文法本しか買わないと思う
- 483 名前:デフォルトの名無しさん [2008/06/29(日) 20:16:51 ]
- 知り合いの達人プログラマーに
何から始めたらいい?って聞いたら C++とロキやれって言われたけど ロキってなに?
- 484 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:18:27 ]
- Lokiは今更だなぁ。boostで良いと思うよ。
- 485 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:19:50 ]
- コンストラクタやデストラクタにinline指定をして、メリットって
けっこうあるもん?
- 486 名前:デフォルトの名無しさん [2008/06/29(日) 21:23:55 ]
- >>485
inline は使いまくるほど最適化がかかりやすくなる
- 487 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:26:53 ]
- >>485
プロファイルしてみれ
- 488 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:35:44 ]
- するってぇと、もはやコンストラクタは一般に
explicit inline 指定はデフォ?
- 489 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:37:19 ]
- 場合による。吐き出すコードのサイズと相談だ。
- 490 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:37:52 ]
- force inlineして結果変った場合だけつけろよ
デバッグするとき泣くぞ?
- 491 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:49:44 ]
- >>485
最適化がかかりやすくなるかもしれんが、実装をヘッダに晒すようだとデメリットも大きい。 inline で向上する効率を確かめて、さらにそれが必要だといえる時だけ使うのがいい。
- 492 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:55:14 ]
- L2キャッシュに収まりきらないコード量をinline指定によって
吐くようになった場合はかえって性能が低下する事がある 実際に走らせてみるかプロファイル取ってみるかだな
- 493 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:56:36 ]
- アクセッサ程度のメンバ関数なら、無条件でinlineでおk?
- 494 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:11:51 ]
- おk
- 495 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:19:36 ]
- 逆にヘッダに実装書きつつ、inlineにしたくない場合って
void hoge::hage(){...} ってクラス定義の後に分けて書けば良いんだっけ? ※コンパイラオプションはそのままで
- 496 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:23:45 ]
- >>493
491と同じではないかと思うけど。 C++ coding standardに載っている時期尚早な最適化(だったかな)じゃないかと思う。
- 497 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:24:26 ]
- ヘッダに非inline関数の実装を書いたら、そのヘッダを取り込んだ
翻訳単位それぞれに関数の定義ができて、重複エラーになるんでは?
- 498 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:30:16 ]
- >>497
普通なるね。
- 499 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:33:20 ]
- >>497
ならない。 inline 関数の定義が、リンクされるすべてのコンパイル単位間で矛盾して無い限りは問題ない。
- 500 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:33:33 ]
- 重複した同じ定義を一つにする方法って無いんだったっけ?
テンプレートクラスとかの型毎のインスタンスはリンク後は一つになるよね?
- 501 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:34:08 ]
- >>499
非inline関数でっせ?
- 502 名前:499 mailto:sage [2008/06/29(日) 22:34:30 ]
- あれ?非inlineか。ごめん。
- 503 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:41:40 ]
- クラスの中に
static int a[] = {} かけないんだっけ?
- 504 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:50:36 ]
- >>503
無理 static const int のみ初期化OK
- 505 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:52:14 ]
- もっというと整数型がOKってことみたいだね。long や shortも
初期化おk
- 506 名前:497 mailto:sage [2008/06/29(日) 22:57:12 ]
- よく考えたら、
メンバ関数ならOKで非メンバ関数だとNGじゃないかな。
- 507 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:59:55 ]
- >>506
どっちでも同じ。ただしメンバ関数をクラス定義内で定義した時は自動的に inline 扱いになる。
- 508 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:35:16 ]
- >>506
俺が497だwなりすますな
- 509 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:52:16 ]
- 最近のC++の流行では
getter/setterはどうやって書くの?
- 510 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:55:30 ]
- マクロを使って読みにくく且つ簡潔に書きます
- 511 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:55:57 ]
- 今までの話の流れからすると、実装はソースファイルに書くのが
基本みたいな話だね。ただ、inline指定してみて効果が顕著だったら inlineにするみたいな。 しかし、ほとんどの参考書では、GetやSetはクラスの型定義内に inlineとして実装されてるよね。あれが誤解の元なんだろうか。
- 512 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:00:23 ]
- 誰か>>500教えて〜
- 513 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:02:22 ]
- リンカがよきにはからってくれるんじゃないの?
それか明示的にインスタンス化しておくとか
- 514 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:06:04 ]
- inlineはコンパイラによってはデフォルトで無視されるし
あまり気にしなくていいんじゃないの? CPUがリターンキャッシュ持ってれば
- 515 名前:デフォルトの名無しさん [2008/06/30(月) 00:17:18 ]
- >>492
P6のばやいL1じゃね?
- 516 名前:デフォルトの名無しさん [2008/06/30(月) 00:26:54 ]
- >>514
無視するコンパイラにも、なるべく広範囲のソースを見せたほうがいい 処理系には何がしたいのかを伝えよ、禿の格言にもあるぞ
- 517 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:27:04 ]
- なんか初歩的な質問かもしれませんが、変数名やクラス名ってどう名づけてます?
変数や関数、インスタンスは小文字から始まり、 クラス名は大文字からはじめるのが一般的なんでしょうか また、分かりやすい名前をつけると、クラス名とそのインスタンス名がかぶってしまうんですが、 何か分け方はありませんか
- 518 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:31:40 ]
- クラス名・変数名に迷ったら書き込むスレ。Part12
pc11.2ch.net/test/read.cgi/tech/1206118762/ ここで聞いてみるとか
- 519 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:36:48 ]
- >>517
クラス名の最初にcを付けてる
- 520 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:41:40 ]
- >>517
先生方のルールを参考にしてはどうかな www.boost.org/doc/libs/1_35_0/boost/multi_array.hpp
- 521 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:53:51 ]
- 一応>>520のを書いておくと
クラス名 :小文字+アンダーバーの組み合わせ(例:multi_array) ネームスペース名 :クラス名同様 ローカル変数名 :クラス名同様のルールで短めに メンバ変数名 :クラス名のルールに加えて最後にアンダーバー 短くなくても良い(例:allocated_elements_) 関数名 :クラス名同様 テンプレート型引数名:パスカルケース(例:NDims) マクロ名 :大文字+アンダーバーの組み合わせ (BOOST_STATIC_CONSTANT)
- 522 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:54:58 ]
- typedef enumはどうすれあいいの?
- 523 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 01:03:51 ]
- typedefはクラス名同様
enumはメンバ変数名と同じ ただ、boostの中で完全に統一されてるわけでもないみたい
- 524 名前:デフォルトの名無しさん [2008/06/30(月) 01:04:28 ]
- >>517
unko_t unko;
- 525 名前:デフォルトの名無しさん [2008/06/30(月) 01:16:04 ]
- Cの勉強をしているのですが、VCでスタティックライブラリを作ってみたりしました。
その後、似たものでシェアードライブラリ(.so)なるものがあるのを知ったのですが、 VCで作成することはできますか? 検索してもgccばかりが見つかってしまって。 ライブラリのファイルがないとexeの実行ができないようですが、dllと何が違うのか分かりません。
- 526 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 01:20:46 ]
- >>525
dll と同じようなものです UNIX系では shared object Windows系では dynamic link library
- 527 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 01:41:04 ]
- >>517
>438で出てたGoogleのルールのまとめ: ●ファイル名 ぜんぶ小文字で、単語は_か-で区切る。foo-bar.cc ●クラス名 各語の先頭を大文字にする。 FooBar ●名前空間名 ぜんぶ小文字。区切りについては明記してないけど、_? foo_bar ●変数名 ぜんぶ小文字で、単語は_で区切る。 foo_bar ●メンバ変数名 ぜんぶ小文字で、単語は_で区切り、最後は_にする。foo_bar_ ●関数名 クラス名と同じ。アクセサだけは変数名と同じ。 ●定数 先頭にkを付けて、単語区切りは大文字。 kFooBar ●マクロ名 マクロなんて使うな。 アクセサと定数が妙だなあ。
- 528 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 02:07:19 ]
- 定数の接頭語のkって何の意味?
- 529 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 02:13:43 ]
- konstant。なぜかこれだけドイツ語。
- 530 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 02:13:47 ]
- koteiのk
- 531 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 02:16:10 ]
- >>518-521,527
細かくありがとうございます いろいろな方法があるんですね 検討して、しっくりくる方法を選びたいと思います
- 532 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 03:23:02 ]
- constant でプレフィクス c だと、コーディング規約にも関わらず class と混同しそうだな
マクロ禁止なら全部大文字でもよさそうだが・・・
- 533 名前:デフォルトの名無しさん [2008/06/30(月) 03:40:28 ]
- メンバはm_というつまらん駄洒落をまだやってる俺はどーせM$かぶれだい
- 534 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 07:48:41 ]
- >>533
boostにもあったりするよw www.boost.org/doc/libs/1_35_0/boost/regex/v4/regex_format.hpp > const traits& m_traits; > const Results& m_results; > OutputIterator m_out; > ...
- 535 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 12:36:05 ]
- 標準的な識別子のプレフィックス一覧みたいなのなーい?
てか、どこの会社でもまちまちなんだろうけど。
- 536 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 12:41:49 ]
- プレフィックス一覧って?
命名ルールなら上で出てるgoogleかboostので十分だと思うけど。
- 537 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 15:27:37 ]
- なんか、なんちゃら記法みたいなのなかったっけ?
ポインタはpを付けるとか。C言語の時代か?
- 538 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 15:49:34 ]
- ジャンガリアン
- 539 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 15:50:56 ]
- ハンガリアン記法
ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95 ただし、ポインタにpを付けたりするのは システムハンガリアンと呼ばれる間違ったハンガリアン記法。 本当のハンガリアン記法は アプリケーションハンガリアンと呼ばれてる。
- 540 名前:デフォルトの名無しさん [2008/06/30(月) 19:08:04 ]
- 禿リアン
- 541 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:30:34 ]
- >>539
おお、それそれ。なんか批判が多いみたいだね。保守が大変とか。 けっきょくプレフィックスなんてないほうがいいのかね……
- 542 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:44:44 ]
- プレフィクスの使い方を間違わなければ有用らしいよ
間違ったコードは間違って見えるようにする - The Joel on Software Translation Project local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
- 543 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 20:29:03 ]
- つまりアプリケーションハンガリアンてのは、識別子の補助的な意味を表す
プレフィックスを付けるって感じ? システムハンガリアンはデータ型を表すプレフィックスを付けてるのかな?
- 544 名前:506 mailto:sage [2008/06/30(月) 21:13:12 ]
- >>508
ごめん。眠かったから間違えた。 by498
- 545 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:01:10 ]
- void hoge(const std::vector<foo>& foos);
という宣言をヘッダ(hoge.h)に書いたとき,fooを宣言している ヘッダもhoge.hでインクルードしないといけないでしょうか? それともhoge.hでは class foo; と書くだけでおkでしょうか?
|

|