- 1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/ スレを勃てるまでもないC/C++の質問はここで 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ スレを勃てるまでもないC/C++の質問はここで 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ スレを勃てるまでもないC/C++の質問はここで 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ スレを勃てるまでもないC/C++の質問はここで 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ スレを勃てるまでもないC/C++の質問はここで 14 pc12.2ch.net/test/read.cgi/tech/1269273471/
- 263 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:23:18 ]
- tooは 最後につけるところを真ん中につけただけ。
- 264 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:24:18 ]
- >>263 じゃ、 be の補語は? exist の意味のbe?
- 265 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:25:10 ]
- which turns out to be (instantiated) too かなあ。
- 266 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:26:36 ]
- beの補語はby以下らしい。
- 267 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:30:55 ]
- 関係代名詞はbeの補語ではなくて主語になるらしい。
- 268 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:34:23 ]
- この問題は追加テンプレートパラメーターAccTの導入からも、
存在することがが明らかになる
- 269 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:37:29 ]
- まとめて訳すとこんな感じか?
ここでの問題は、追加テンプレートAccTの導入からもわかるように、 我々のテンプレートが文字型についてインスタンス化されてることです。
- 270 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:40:13 ]
- ありがとうございました。
- 271 名前:デフォルトの名無しさん [2010/05/31(月) 17:22:57 ]
- 質問です。C++2008には
#pragma ○○ ・・・ #pragma end○○ と書けば横の+、−でコードを格納できたと思いますが、 忘れてしまったので教えてもらえませんか?
- 272 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 17:58:12 ]
- region
- 273 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 10:42:15 ]
- staticってどういう時に使うの? なんでグローバル変数じゃなくて静的変数を使うの?
- 274 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 11:56:59 ]
- グローバル変数との比較だと
static変数はスコープがソースコード単位になるから 他のソースコードと名前が重複しても大丈夫
- 275 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 12:06:55 ]
- Cにはnamespaceがないから。
- 276 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 14:15:29 ]
- staticって意味が幾つも有ったような
- 277 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:21:16 ]
- C#言語で言う#regionみたいなことがしたいのですが
何かいい方法はありませんか? 現在は #define COM 1 #ifdef COM ~折りたたみたい部分~ #endif といった使い方をしていますがスマートではなく、何かいい方法がないか探しています
- 278 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:25:24 ]
- 釣りかギャグかはたまたガチか
それが問題だ
- 279 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:28:52 ]
- 初心者すれに行くべきでしたね
すいません移動します
- 280 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 20:00:34 ]
- 数レス前に書いてあるだろw
- 281 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 20:55:03 ]
- あれだ
灯台下暗し
- 282 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 01:42:20 ]
- かなり初歩的な質問なのですが継承で
基本クラスのメンバ関数から派生クラスのデータメンバを変更するには どういった操作がありますでしょうか? 基本クラスのメンバ関数に派生クラスのオブジェクトのアドレスを 渡してみたりしたのですがコンパイルエラーで上手くいきませんでした。 よろしくお願いします。
- 283 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 02:40:09 ]
- 普通に仮想関数でいいと思うが。
- 284 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 07:44:39 ]
- そんな基本クラスが派生クラスの中身を知っているような設計は投げ捨てるかどうしてもというならCRTPを使いなさい
- 285 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:11:03 ]
- >>283 >>284
参考になりました。ありがとう!
- 286 名前:デフォルトの名無しさん [2010/06/02(水) 17:13:54 ]
- 1. 構造体のポインタ*tがある
2. 構造体の中にint型のポインタhogeがある 3. mallocを使って*tのメモリを確保 3. mallocを使ってhogeにint型x個分のメモリを確保 4. fwriteで構造体をファイルに書き込みたいが、二項目はどうやって指定すればいい?
- 287 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:18:28 ]
- fwrite(t, sizeof *t, 1, fp);
構造体のサイズが増えるわけでもないし。
- 288 名前:デフォルトの名無しさん [2010/06/02(水) 17:27:25 ]
- >>287
上手くいかん typedef struct test_t { int a,b,c,d,e; int *p; } test_t; test_t *t; t = (test_t *)malloc(sizeof(test_t)); t->p = (int *)malloc(sizeof(int)*60); printf("%d",sizeof(*t)); で、24って出る
- 289 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:31:01 ]
- >>286
fwrite(t, sizeof(int), x, fp); だろ ただし、 >1. 構造体のポインタ*tがある でなく、 >1. 構造体のポインタtがある であるならということ。3.も同様。 もし原文通りなら fwrite(*t, sizeof(int), x, fp); となる
- 290 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:32:28 ]
- >>288
pに確保した領域のサイズは構造体とは別。
- 291 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:32:45 ]
- trivially copyable classに展開してまとめて読み書きすればいいよ
- 292 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:34:55 ]
- >>288
構造体には他のメンバもあるのか。 それなら fwrite を2回する必要があるだろ。 fwrite(t, sizeof(test_t), 1, fp); fwrite(t->p, sizeof(int), x, fp);
- 293 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:42:39 ]
- >>290
知ってる。だから質問した >>292 それが一番スマートかな 構造体からpをそもそも切り離しとくってのも一つの手か thx
- 294 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:47:00 ]
- 知ってたら>>288で24が出ても上手くいかんなんて言わないだろw
- 295 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:55:29 ]
- fwriteしたものを、そのままfreadしようっていう魂胆なの?
- 296 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 17:59:17 ]
- 定数じゃないならxもどっかに保存しとかないと読み込むとき困る。
- 297 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:13:15 ]
- 読み込みは t = malloc(sizeof *t) → fread(t) → t-> = malloc(int*x) -> fread(t->p) で。
- 298 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:39:27 ]
- 型変換を伴うコピーの時の参照カウンタのコピーをどうやってるのかと疑問に思って
shared_ptrの中身を覗いてみたらpublicメンバだった こんなものなの
- 299 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:49:20 ]
- >>298
public でないと参照できないじゃん
- 300 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 18:54:47 ]
- >>299
まあそうなんですが boostのことだからもっと複雑怪奇な方法で回避してる物かと思ったのでw
- 301 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 19:25:24 ]
- template friend classにしないのはなんで?
- 302 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 21:51:31 ]
- codepad.org/1ZyOAlyL
上は、はじめてのCという本に乗っていたコードを 少し書き換えたもの(printfをcoutに、など)です 結果が3→2→1→0→1→2→3と表示される内、 行きの3→2→1→0は分かるのですが、 帰りの0→1→2→3の部分がどうしてそうなるのか、さっぱり分かりません tline(int x)に渡す引数を増加させる処理はないように見えるのですが、 どなたか教えていただけないでしょうか
- 303 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 21:54:41 ]
- 再帰関数で0以外は一つの関数で2回表示してるから。
- 304 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:00:50 ]
- recfunc(3)を呼び出す
3を表示する recfunc(2)を呼び出す 2を表示する recfunc(1)を呼び出す 1を表示する recfunc(0)を呼び出す 0を表示する recfunc(0)から抜ける 1を表示する recfunc(1)を抜ける 2を表示する recfunc(2)を抜ける 3を表示する recfunc(3)を抜ける
- 305 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:05:54 ]
- >>303
冷静になってみると仰る通り2回表示してますね ifの中身だけ見て、その下を見てませんでした ありがとうございます >>304 詳しい説明ありがとうございます 小一時間も考え込んでた自分が恥ずかしいです 低レベルな質問にも関わらずお答えいただき、お二方に感謝します ありがとうございました
- 306 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:48:07 ]
- >>301
どうもコンパイラにより対応状況がまちまちらしい boostのコードをみてみたら狡賢いコードになってたw public: /* 〜省略〜 */ #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS private: template<class Y> friend class shared_ptr; template<class Y> friend class weak_ptr; #endif T * px; // contained pointer boost::detail::shared_count pn; // reference counter
- 307 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:51:08 ]
- ポインタp,qがあって参照剥がしして一致、あるいは、両方NULLならtrueにしたいときって↓でおけ?
((p && q) && (*p == *q)) || (p || q)
- 308 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 22:57:48 ]
- だめじゃね?
- 309 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:01:27 ]
- だめだな
- 310 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:06:08 ]
- どうして諦めるんだよ!
- 311 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:07:30 ]
- ((p&&q) && (*p==*q)) || (!(p || q))か?
- 312 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:20:33 ]
- 答え:(p && q && (*p == *q)) || !(p && q)
- 313 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:25:48 ]
- X
- 314 名前:デフォルトの名無しさん [2010/06/02(水) 23:29:56 ]
- !p && !q || p && q && (*p == *q)
- 315 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 23:58:39 ]
- 答え。
p-q
- 316 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 00:10:52 ]
- >>314が俺好み
- 317 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 00:15:55 ]
- !p && !q と !(p || q) のどっちにするかは趣味の問題だな。
- 318 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 06:52:18 ]
- p == q || p && q && *p == *q
- 319 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:21:58 ]
- p == q || と || p == q のどっちにするかは趣味の問題だな。
- 320 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:27:53 ]
- p == q を先にチェックするほうがいいにきまってるだろ。
- 321 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:42:16 ]
- なんで?
- 322 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:48:52 ]
- p と q が 0 でない事を先にチェックした方が良い
0だと以降が実行されない p == q は p と q の両方が0でも真になってしまう
- 323 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:50:42 ]
- > p == q は p と q の両方が0でも真になってしまう
それが >307 が求めていたものでしょ。
- 324 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 09:55:05 ]
- >>32 参照はがしをしなくてすむなら、しないほうがはやいでしょ?
ポインタが同じところをさしているなら、ポインタの先を見るまでもない。
- 325 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 10:46:05 ]
- >>324
大人になれば分かる
- 326 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:09:17 ]
- >>324
ポインターの値が同じでも実体の値が違うことがある
- 327 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:16:50 ]
- 順序は実際のデータでプロファイリングして決めるのが一番
- 328 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:19:07 ]
- >>326
PODとは限らんからね >>324 はC++でプログラム組んだことがないんだと思う
- 329 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:29:17 ]
- >ポインターの値が同じでも実体の値が違うことがある
そんなスマポは使いたくない。
- 330 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:30:37 ]
- >>328
普通のポインタじゃなくて、スマートポインタの話をしていたの?
- 331 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:31:47 ]
- p,qが生ポインタでp == qで*p != *qって例えばどういうケースよ?現実的な事例を教えてくれ
- 332 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:32:55 ]
- メモリマップトI/Oなんて、もちださないでくれよ。
- 333 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:33:10 ]
- ポインターの値が同じでも実体の値が違う
ってどんな用途に使うスマートポインタなんでしょうか? 気になる
- 334 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:47:13 ]
- >>331
PODでなければ普通に起こるだろ。
- 335 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:49:35 ]
- >>331
それが保証されるのはCに限った話、C++は違うね
- 336 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:51:56 ]
- 保証されるとかじゃなくて、現実的な話として、そういう設計の有益なクラスを例示してくれって言ってるの
- 337 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:03:17 ]
- >>336
例えばベースクラスが共通(またはどちらかがベースクラス)で、 片方への cast operator が定義されている場合とか こういうコード普通に沢山存在してるだろ 有益かどうかはお前のさじ加減だし
- 338 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:19:45 ]
- p==qの時点でp,qの型は同じ
参照はがしても同じ型で比較されるだけだからキャストは関係ないだろ
- 339 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:21:59 ]
- >>337 あたまがわるいので、例が思いつかない。 具体例を教えてください。
class B { int x; }; class C { int y; }; class D : public B, C { int z; }; int main() { D* p = new D(); B* q = p; printf("p == q => %d\n", p == q); printf("*p == *q => %d\n", *p == *q); } D に、どんな演算子を定義すればいいんですか?
- 340 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:28:41 ]
- みなさんが当たり前のように言ってるC++なら違うっていうのは
!=のおかしなオーバーロードのことでいいんでしょうか? なんだか!=が真になるのが普通にあることみたいにいわれてるようなので ひょっとしてこれではないのでしょうか? あと>>334はPODって言ってますが組み込み型の間違いであっていますか? PODの構造体は比較演算子が使えないですよね?
- 341 名前:339 mailto:sage [2010/06/03(木) 12:29:06 ]
- operator == を再定義するのは反則だよねえ?
#include <stdio.h> class B { int x; }; class D : public B { int y; }; bool operator==(const D&, const B&) { return false; } int main() { D* p = new D(); B* q = p; printf("p == q => %d\n", p == q); printf("*p == *q => %d\n", *p == *q); }
- 342 名前:339 mailto:sage [2010/06/03(木) 12:31:53 ]
- >ポインターの値が同じでも実体の値が違うことがある
operator == を再定義したら、「実体の値が違う」ことにはならないか。
- 343 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:35:37 ]
- >>319 == >>329
>>318 はどちらにしろ間違ってるんで、いち抜けする。 if p == q はダメだろう。
- 344 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:41:23 ]
- >>343
>>318 のどこが間違っているって?
- 345 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:42:26 ]
- if p == q はダメだろう。
- 346 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:43:41 ]
- (1) p と q が別のオブジェクトを指していて
(2) p == q で (3) *p と *q の実体が違う ということはありえないで、ファイナルアンサー?
- 347 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:45:24 ]
- p==qかつ*p!=*qなんて非常識なケースが普通に沢山あるようなコードを自信満々に書いちゃう>>337は別業種への転職をおすすめする
そうなるように書くことはできるが、副作用も含めてそうならないようにコードを書くのが当たり前の感覚
- 348 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:47:56 ]
- >>307 に答えだしたら
p=123456; q=123456; if p == q はダメだろう。
- 349 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:49:49 ]
- >>348 どこがダメ?
- 350 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:51:27 ]
- >>348 無効なポインタを渡したときに、アクセス違反が発生しないからダメとかつまんないこといってんじゃないよね?
- 351 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:51:41 ]
- >>349
自分で適当なアドレス突っ込んだ場合、 「参照剥がしして〜」 の条件に合わなくなる(参照はがせない) って言ってるんだろ? アホかと思うがwwwww
- 352 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:53:34 ]
- 普通にやってて自分でアドレス突っ込んじゃうような子がいたら消費者に訴えられるレベル
- 353 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 12:58:58 ]
- >>338
これが違う p と q が同じ型だとはどこにも書いてないだろ
- 354 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:01:28 ]
- >>353
違う方じゃコンパイルエラーだろ
- 355 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:02:35 ]
- >>339
operator B(); というメソッド。
- 356 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:03:16 ]
- >>354
だからベースクラスが共通な場合って言ってるだろ
- 357 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:03:29 ]
- アップキャストはされるんじゃね
- 358 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:06:31 ]
- >>356
共通でなくどっちかがベースクラスの場合だね
- 359 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:07:11 ]
- >>356
codepad.org/q3SbZGSj 同じでもエラーだよ
- 360 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:12:31 ]
- p と q が別の実体を指しているのに、 p == q にするコードなんて書けないよ。
- 361 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:12:40 ]
- pとqは違うクラスです、とか、もう無茶苦茶
何考えてんだか… だったらC++と言わず char *p; long *q; でもいいわけでね…
- 362 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:15:18 ]
- >>361
>pとqは違うクラスです、とか、もう無茶苦茶 どっから同じクラスだって前提が出てきたんだ。 君の思い込みだろ?
- 363 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 13:15:30 ]
- >>318 がダメって言ってる奴って、ひとりだけ?
|

|