[過去ログ] 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
720(1): 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2018/05/05(土) 11:56:29 ID:y1NIMmWz(1/6) AAS
>>718718(1): デフォルトの名無しさん [sage] 2018/05/05(土) 11:22:41 ID:dx2uIifv(2/6) AAS
>>717
ありがとうございました。
あともう一つ質問させてください:
ロベールの本なのですが、
int n = 0x41424344;
file.write((const char*)&n, sizeof n);
というコードがあるページにあります。
その少し後ろのページには、以下のコードがあります。
char buf[BUF_SIZE];
dst.write(buf, src.gcount());
ここで、なぜ
dst.write((const char*)buf, src.gcount());
としていないのでしょうか?
char *はconst char *に互換だから。constは書き換えないという意味で、constなしはconstありに対して互換性がある。
726(1): 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2018/05/05(土) 12:19:01 ID:y1NIMmWz(2/6) AAS
Cスタイルのキャストは強力すぎて、効果が分かりにくいので、モダンでは、そのキャストは、reinterpret_cast<const char *>(&n)って書いた方がいい。
728: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2018/05/05(土) 12:24:24 ID:y1NIMmWz(3/6) AAS
つまり、その本は古い。温故知新とは言うが、Cスタイルのキャストの使用はモダンではない。
729: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2018/05/05(土) 12:35:42 ID:y1NIMmWz(4/6) AAS
>>726
訂正。
× reinterpret_cast<const char *>(&n)
○ reinterpret_cast<char *>(&n)
そのCスタイルのキャストは
const_cast<const char *>(reinterpret_cast<char *>(&n))と同じ。
下手なキャストはバグのもと。キャストは最小限に。
730: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2018/05/05(土) 12:43:36 ID:y1NIMmWz(5/6) AAS
コンパイラによっては、reinterpret_castとconst_castをCスタイルのキャストで一度にしようとすると、警告やエラーになるものもある。
731: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2018/05/05(土) 12:53:07 ID:y1NIMmWz(6/6) AAS
file.write((const char*)&n, sizeof n);
ここでconstをわざわざ付けるのは、型で書き換えないことを確認するためだが、
このCスタイルのキャストは強力すぎて、行儀が悪い。reinterpret_castとconst_castに分けるべきだと考える。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s