[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 01/02 08:18 / Filesize : 209 KB / Number-of Response : 862
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part62



1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part61
pc11.2ch.net/test/read.cgi/tech/1205059063/

413 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:07:42 ]
C++ 始めたばっかなんですが、
this はなんでポインタなんでしょうか
せっかく参照というものがあるのに...

そんで、今日は C++ のオブジェクトが自身への参照を
self という名前で持てるようにいろいろがんばってました。

具体的には、そのクラスを継承したらクラス定義の中で self が使えるようなクラスを作ろー...と思ってたんですが、うまくいかず。
結局
#define self (*this)
しか思いつきませんでした orz

こういうんじゃなくって、ちゃんと自分自身への参照をメンバ変数にもつオブジェクトは作れないのでしょうか。

414 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:18:51 ]
>>413
別の表記方法がないなら*thisでいいじゃん。表現に揺らぎがなくて結構なことじゃないか。同じものをいろんな名前で表現させるほうが混乱するんでないかい?
size length len count distance 同じ意味だったり違った忌みだったり混乱するね。

415 名前:デフォルトの名無しさん [2008/06/28(土) 21:25:04 ]
>>413
昔、this = malloc(1); てな構文があったんだよ

416 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:29:05 ]
>this はなんでポインタなんでしょうか
thisが C with Classes に導入されたときには参照はまだなかった

417 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:31:11 ]
JavaからC++への移行は推奨しません。

418 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:47:59 ]
selfってことはJavaじゃないと思う

419 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:50:43 ]
Object Pascalだね。


420 名前:デフォルトの名無しさん [2008/06/28(土) 21:51:42 ]
C++ではboostはデフォなのか?

421 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:51:52 ]
現代版#define BEGIN {ですね、わかります。



422 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:58:28 ]
>>420
一部はデフォになりつつある。

まあ、知って損はない。俺も最近使い始めた。今まで知らなくてずいぶん損したと思う。

423 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:59:31 ]
>>420
中にはそういう人間もいる(俺もその1人だがな)。
当然、すべての人間にとってそうとは限らない、いつだって使えるとは限らないから、
Boostデフォを妄信するのは危険。使えないときは反動でだるくなる。

424 名前:440 mailto:sage [2008/06/28(土) 22:49:03 ]
>442
勉強しておくよ。
GCとか便利そうだし

>443
仕事の場合だと、使えない場合が多そうだな。



425 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 22:50:24 ]
今テレビでターミネーター2やってるよね。
未来から来たって話。

426 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 22:59:36 ]
>>424
440基準でも未来レスかよw

427 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:01:52 ]
Testってクラス書くとして

Test.cppとTest.h用意?
Test.cxx作ってそこに全部記述?



428 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:02:56 ]
Testを他で使うなら.hも作っとけ

429 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:05:05 ]
Test.hppにテンプレートクラスでイナフ

430 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:11:42 ]
hppだとどういうコーディングルールがベスト?
サンプルないかな?

431 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:14:01 ]
boost



432 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:14:07 ]
>>426
意味不明だよ。


433 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:15:01 ]
IDテスト

434 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:16:10 ]
>>430
hppでの例
www.boost.org/doc/libs/1_35_0/boost/shared_array.hpp

ベストかどうかは・・・分からんけど。

435 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:17:05 ]
>>432

424 :440 [sage] :2008/06/28(土) 22:49:03
  >442
  勉強しておくよ。

436 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:18:40 ]
>>434
オペレータの定義だけ外だし?

437 名前:413 mailto:sage [2008/06/29(日) 04:39:41 ]
>>414
はっきりいってネタですw
でもthisが参照じゃないのは何でやろー && 参照だったら
Foo& Foo::operator=(const Foo& rhs) {
    this.bar = rhs.bar;
    return this;
}
こんな感じで(->)や(*)使わなくてすむのにと思ったので

>>415

kwsk

>>416
それじゃあ this が参照じゃないのは後方互換性のためなのか。
かつ *this があるから別の予約語を用意する必要もないと

>>419
ざっと見た感じでは self 使ってない雰囲気ですが

438 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 12:34:32 ]
google-styleguide.googlecode.com/svn/trunk/cppguide.xml
Google社内でのコーディング規約らしい。例外は悪か、やっぱり。



439 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 12:55:16 ]
>>438
全部読んでないけど、「例外は悪」とは書いてないと思うよ。
Googleの場合はデメリットがメリットより大きいから使わないという話と思う。


440 名前:デフォルトの名無しさん [2008/06/29(日) 14:13:45 ]
C++0xがでたら、boostも用済みなんだろうか…というか組み込まれるのか?

最近C++の書籍がどんどん廃刊したり、改訂版が出ないのは、やはりC++0x
待ちなのかな?早くして欲しいもんだ。

441 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:16:53 ]
boostの一部は標準に取り込まれるが、
標準に新たな機能が追加されるわけで、
boostは更なる進化を遂げるだろう。



442 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:17:18 ]
coocle

443 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:03:01 ]
concept_map使った凶悪なライブラリがきっと入る、絶対入る

444 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:03:44 ]
使わない、って書いてあるけど、
標準ライブラリ等で例外が投げられる奴らはどう使ってるんだろう?
使ってないのか?
new も nothrow で使ってんのかね。

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 ]
リンカがよきにはからってくれるんじゃないの?

それか明示的にインスタンス化しておくとか






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<209KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef