C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

範囲外の配列にアクセスしてもC++でエラーが発生しないのはなぜですか?


これは、C++が境界チェックを行わないためです。 JavaやPythonなどの言語には境界チェックがあるため、範囲外の要素にアクセスしようとすると、エラーがスローされます。 C ++の設計原則は、同等のCコードよりも遅くならないようにすることであり、Cは配列境界チェックを行いません。

したがって、これを範囲外のメモリにアクセスしようとすると、C ++標準で記述されているため、プログラムの動作は定義されません。一般に、未定義の動作に遭遇すると、何かが起こる可能性があります。アプリケーションがクラッシュしたり、フリーズしたり、正常に動作したり(または少なくとも正常に動作しているように見えたり)、他のアプリケーションに干渉したりする可能性があります(実際には最新のオペレーティングシステムでは動作しません)。


  1. C ++で空のクラスのサイズがゼロではないのはなぜですか?

    C++に空のクラスが1つあるとします。次に、サイズが0かどうかを確認します。実際、標準ではサイズ0のオブジェクト(またはクラス)は許可されていません。これは、2つの異なるオブジェクトが同じメモリ位置を持つことが可能になるためです。これが、空のクラスでも少なくとも1のサイズが必要であるという概念の背後にある理由です。空のクラスのサイズはゼロではないことが知られています。通常は1バイトです。以下の例を参照してください。 例 理解を深めるために、次の実装を見てみましょう- #include<iostream> using namespace std; class MyClass { }

  2. アレイが回文であるかどうか、またはC++でSTLを使用していないかどうかを確認するプログラム

    n個の整数の配列arr[n]が与えられた場合、タスクは配列が回文であるかどうかを見つけることです。 C++でSTLを使用して指定されたタスクを実行する必要があります。 C ++には、STL(標準テンプレートライブラリ)の機能があります。これは、データ構造と、スタック、キュー、リストなどのいくつかの機能を提供するために使用されるC ++テンプレートクラスのセットです。これらを使用するには、知識が必要です。テンプレートクラスの。 回文は、シーケンスの前または後ろから同じように読み取られるシーケンスです。回文の簡単な例としては、-MADAM、RACECARなどがあります。配列は、以下の例のような