私は、Visual Studio C++のスタンスに関する正式な説明を希望し、次のような配列を作成するとき、それが何をするか:ビジュアルスタジオでは、配列の範囲外にアクセスできますか? (VS2013)
int a[3] = {1, 2, 3};
を、あなたは、その後のようなものを実行します。
cout << a[4];
テストすると、そのメモリ位置に保存されているガベージが印刷されます。なぜプログラマはこれを行うことができますが、javaScriptのような言語はユーザがそうするのを妨げるのですか?
コンパイラにこの種の動作をC++のユーザーから禁止させないことによる一般的な考え方は何ですか?これはCから引き継がれたものなのでしょうか?
これは私が持っているほんのわずかな好奇心であり、おそらく答えた人がどこでそのような情報を見つけることができるか教えてくれるでしょう。何が起こっているのかについての答えは、それは私が興味理由だ、私が求めているものではありません。
ありがとうございます。
なぜjavascriptタグを使用しますか? –
@ NinaScholz私は私のコメントにjavascriptを言いました。あなたがそれを見たかどうかは分かりません。私は思っていた、多分私はまた、javaScriptの説明も取得します。いずれにせよ、私はzeromusのようなことをしてくれたので、タグを削除しました。 – user3499524
哲学は、あなたが使っていないものを支払っていません。つまり、デベロッパーに境界チェックのコストを課すことなく、デベロッパーが必要と思った場合にデベロッパーが既にチェックしていると仮定します。そのようなチェックは、std :: arrayやstd :: vectorのような標準的なライブラリ構造に含まれています。あるいは、それらをデバッグビルドまたはリリースビルドのいずれかに持つように設定することもできます。 – Robinson