web-dev-qa-db-ja.com

変数がデータ型のインスタンスであると言うのは正しいですか?

(プログラムの過程でその値を変更できます)

または、「何かのインスタンス」はクラスとオブジェクトに厳密に関連していますか?もしそうなら、C++に関して「変数」の概念をどのように定義しますか?

9
Zakkor

私の知る限り、そのタイプのプリミティブタイプinstancesの値を呼び出すことは正しい(たとえば、 "C++ Type System"を参照) 、Visual Studioのマニュアルからですが、私はまだ別のソースを探しています)。ただし、この用語は主にオブジェクトについて説明するときに使用されると思います。オブジェクトは、クラスCまたはそのサブクラスの1つで定義されたコンストラクターから作成された場合、クラスCのインスタンスです。

C++の変数はランタイムの概念ではありません。これは、変数名と抽象(constでない場合は可変)位置との間の字句バインディングとしてコンパイラー内に存在します。プログラムがコンパイルされると、変数は存在しなくなります。代わりに、データはレジスタやメモリなどで読み書きされます。

8
coredump

または、「何かのインスタンス」はクラスとオブジェクトに厳密に関連していますか?もしそうなら、C++に関して「変数」の概念をどのように定義しますか?

C++で可能な限り簡潔にする

  • variableis a name((in code)in alocation in memory実行時に決定されます。
  • インスタンスオブジェクトであり、メモリに常駐します実行時。

ただ明確にします:

  • すべてのメモリ領域にオブジェクトが含まれているわけではありません。たとえば、メモリの一部の領域に「ガベージ」値が含まれている場合があります。
  • オブジェクトを格納するすべてのメモリにコードで名前が付けられるわけではありません。オブジェクトは、配列内の位置などのメモリの名前のない領域、またはポインタによって参照されるHeapのどこかに存在する可能性があります。
  • メモリの領域にゴミが含まれている場合、その場所でオブジェクトが初期化されていないか、以前に存在していたオブジェクトが破棄されていることが原因です。
5
Ben Cottrell

あなたが人生全体を純粋主義と洗練に費やしたくないのであれば...はい。

一意に識別されるものを保持するたびに、インスタンス化を行うforge他の一意に識別可能なものへの使用。

  • 製品にインスタンス化するプロジェクト
  • 実行可能ファイルにインスタンス化するソース
  • テンプレートは型にインスタンス化されます。
  • 型は変数にインスタンス化します。

それらの一部インスタンス化はより正確な名前を持っているかもしれませんが、一般的にはこれでうまくいきます。

1

さて、「正しい」とはどういう意味ですか?

それについて非常に厳密にしたい場合は、以下を区別する必要があります。

  • 構文側:have(静的)タイプ
  • セマンティクス側:オブジェクトインスタンスクラス

したがって、式である変数は、型を持っています。その値(参照するオブジェクト)は、あるクラスのインスタンスになります。また、変数の型とオブジェクトのクラスは一般に同じものではないことに注意してください。変数の静的型は、オブジェクトのランタイムクラスに上限を設定しますが、そのため、クラスは、型に対応するクラスのsubtypeでなければなりません。

あの大きな一口をずっと繰り返したいですか?嫌です。どの程度厳密に、または大まかに話したいかは、状況によって異なります。したがって、「変数はこの型のインスタンスである」と言っても実際には問題ありません。ここで実際に起こっていることは、オブジェクトとそのランタイムクラスのスーパークラスを参照するために、変数と型を意味論的に使用していることです。

1
sacundim

多くの人々は、クラスのインスタンスのために「インスタンス」を予約しています。その場合、C++では、変数はクラスのインスタンス、インスタンスへの参照、インスタンスへのポインター、またはプリミティブ型になる可能性があります(構造体をそのコンテキストでクラスとしてカウントする可能性がありますが、ほとんどの場合、まったく同じです)。 JavaまたはObjective-Cでは、変数はインスタンスではなく、インスタンスへの参照になる可能性があります。

忘れました:しばらくの間、C++ポインターは、コンストラクターが実行を開始する前の「this」などの生のメモリーへのポインターになることがあります。この時点では* thisをインスタンスとは呼ばないでしょう。

0
gnasher729