unsigned
タイプのオブジェクトに範囲外の値を割り当てると、結果は、ターゲットタイプが保持できる値のモジュロ値の剰余になります。これは当然です。ただし、範囲外の値をsigned
タイプのオブジェクトに割り当てると、結果はで、定義されていないのはです。なぜ、C++標準では、unsigned
の場合のように、この動作の正確な結果を定義していないのですか?C++で範囲外の値を符号付きの型のオブジェクトに代入した結果が定義されていないのはなぜですか?
答えて
一部のプロセッサでは、算術的な打ち切りに関するハードウェア例外が発生するためです。振る舞いを定義するために、C++コードはほぼすべてのalu命令の間にトラップを挿入しなければならず、プログラムをクロールする速度が遅くなります。
Cでは、*既存の*整数値を保持するには小さすぎる符号付き型に割り当てる*の動作は、実装定義の値を格納するか、実装定義の信号を生成するかのいずれかとして定義されます。私は64ビット符号なし整数型(CとC++両方の現在の標準で必要とされる)をサポートする非2の補数系を知らないので、トラップを避けることは問題になるとは思わない。一方、いくつかのアプリケーションでは、オーバーフローを捕捉することは有用かもしれませんが、コンパイラの作者は、どのような形のトラップが有用であるかを決める際に自分の判断を使うことができます... – supercat
...そのようなもの。残念ながら、Undefined Behaviorは、「どのような方法でも、その意図された目的に最も適した実装をするように振る舞う」と言われていましたが[スタンダードの著者が*そう言うことは、コンパイラー作家がさもなければ、意図された目的に適さない振る舞いを実装する]コンパイラの作者は、コンパイラの特定の目的に対する適合性は、標準に準拠したものにすぎないと考えているようです。 – supercat
- 1. 符号なし整数型に範囲外の(負の)値を代入する
- 2. 符号付き整数オーバーフローが定義されていませんが、なぜturbo c符号付き整数が毎回オーバーフローするのですか?
- 3. - 「XX」:符号付きの値は、列挙型の範囲外である一定の
- 4. VHDL numeric_stdのオーバーフローが符号付き/符号なしで定義されています
- 5. 範囲外のときに変数が定義されていない
- 6. SOLR 6.3.0 - 日付範囲に結果が返されない
- 7. Solrの日付範囲のフィルタリングで結果が返されない
- 8. 負の値の符号付きリテラルはなぜですか?
- 9. なぜXPath式はC#で結果を返さないが、C#の外で行うのはなぜですか?
- 10. 設定範囲の結果がアプリケーション定義またはオブジェクト定義エラーの2つの方法ですか? VBA
- 11. std :: absが符号付きの型を返すのはなぜですか
- 12. 2^6 63ビットの符号なしバイナリ範囲はなぜですか?
- 13. なぜ値が範囲外で印刷されていますか?
- 14. openpyxlは数値を日付として扱います。結果:OverflowError:日付値が範囲外です
- 15. C#sizeof(定数)が定義されていないのはなぜですか
- 16. 変数に代入されたときにmoment.jsの結果が異なるのはなぜですか?
- 17. 名前付き範囲が機能しないのはなぜですか?
- 18. PageMethodsオブジェクトが定義されていないのはなぜですか?
- 19. オブジェクトが定義されていないのはなぜですか?
- 20. 値が定義されていても添え字が範囲外である
- 21. 裸の `char32_t`は符号付きか符号なしですか?
- 22. なぜ結果オブジェクトを変更できないのですか
- 23. リフレクションを使用して、符号付きアセンブリから符号なしアセンブリの型を読み込むことができるのはなぜですか?
- 24. oracleの日付フィールドが照会された範囲に含まれないのはなぜですか?
- 25. パーティションのリセットポリシーが設定されていないKafkaコンシューマオフセットが範囲外です。
- 26. 「this.data」が範囲外になるのはなぜですか?
- 27. ブール値が定義されていないのはなぜですか?
- 28. なぜ私のコードが範囲外のエラーにならないのですか?
- 29. メディアクエリで定義されているフォントの色が効果を持たないのはなぜですか?
- 30. なぜリストインデックスが範囲外のエラーになるのですか
'signed'整数オーバーフローをどのように定義しますか? 'INT_MAX + 1'の結果は何ですか? – mch