タグ付けされた質問 「c++-faq」

共同編集されたコミュニティ編集のC ++ FAQを提供します

5
未定義の動作とシーケンスポイントがリロードされました
このトピックを次のトピックの続編と考えてください。 前の記事 未定義の動作とシーケンスポイント この面白くて複雑な表現をもう一度見てみましょう(イタリック体のフレーズは上記のトピック* smile *から取られています): i += ++i; これは未定義の振る舞いを引き起こすと言います。これを言うとき、私たちは暗黙のうちにタイプが組み込みタイプのi1つであると仮定していると思います。 の型がiユーザー定義型の場合はどうなりますか?そのタイプはIndex、この投稿の後半で定義されていると言います(以下を参照)。それでも未定義の振る舞いを呼び出しますか? はいの場合、なぜですか?それは書くことと同等ではありませんi.operator+=(i.operator++());か、あるいは構文的に単純 i.add(i.inc());ですか?または、それらも未定義の振る舞いを呼び出しますか? いいえの場合、なぜですか?結局のところ、オブジェクトiは連続するシーケンスポイント間で2回変更されます。経験則を思い出してください。式は、連続する「シーケンスポイント間でオブジェクトの値を1回だけ変更できます。また、i += ++iが式の場合 、undefined-behaviorを呼び出す必要があります。その場合、同等のものi.operator+=(i.operator++());で i.add(i.inc());あり、undefined-behaviorも呼び出す必要があります。真実ではないようです!(私が理解している限り) または、i += ++iそもそも表現ではないですか?もしそうなら、それは何ですか、そして表現の定義は何ですか? それが式であると同時に、その動作も明確に定義されている場合、式に関連付けられているシーケンスポイントの数は、式に含まれるオペランドのタイプに何らかの形で依存することを意味します。私は(部分的にでも)正しいですか? ちなみに、この表現はどうですか? //Consider two cases: //1. If a is an array of a built-in type //2. If a is user-defined type which overloads the subscript operator! a[++i] = i; …

4
C ++でオブジェクトをどのようにシリアル化しますか?
ソケット接続を介してシリアル化および送信する必要があるオブジェクトの小さな階層があります。オブジェクトをシリアル化してから、タイプに基づいて逆シリアル化する必要があります。これをC ++で行う簡単な方法はありますか(Javaの場合と同様)? C ++シリアル化のオンラインコードサンプルまたはチュートリアルはありますか? 編集:明確にするために、私はオブジェクトをバイトの配列に変換してからオブジェクトに戻す方法を探しています。ソケット送信も対応できます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.