2

数学の世界では虚数と複素数が何であるかは知っていますが、C++ ではどうなのか、複素数と虚数のデータ型は何ですか。さらに、_Imaginary や _Complex などのデータ型も見られます。違いは何ですか?また、複雑なデータ型と架空のデータ型とは何ですか?

4

5 に答える 5

8

_Imaginaryおよび_Complexは、虚数および複素数の浮動小数点変数型を定義するために使用される C99 言語標準のキーワードです。それらは C++ 言語の一部ではありません。それらはそれ自体がデータ型ではありません。それらはfloatdoubleおよびlong double型を変更します。例えば:

float _Imaginary x;      // imaginary 32-bit number
double _Complex y;       // complex 64-bit number
long double _Complex z;  // complex 80-bit number

_Imaginary実数と虚数を加算すると値が得られることを除いて、値は通常の実数とほとんど同じです_Complex

ヘッダー ファイル<complex.h>は、マクロimaginary_Imaginaryおよびcomplexとして定義する_Complexとともに、または(虚数単位) のIいずれかも定義します。これは、従来の C プログラムが識別子としてandを使用できるようにするためです。新しいプログラムでは and の代わりに and を使用する必要があります。アンダースコアで始まり、その後に大文字が続く識別子は実装によって予約されているため、レガシー コードでは決してorを使用しないでください。_Complex_I_Imaginary_Icompleximaginarycompleximaginary_Complex_Imaginary_Complex_Imaginary

一方、C++ はこれを使用せず、代わりにテンプレート化された型std::complex<float>std::complex<double>、およびstd::complex<long double>複素数を処理するためのものを持っています。これらのクラスは C99 型と非常によく似た機能を果たしますが、互換性はありません。

于 2011-06-15T19:52:11.430 に答える
4

これらは実際には C++ データ型ではなく、C データ型です。

新しい C 標準を作成するとき、委員会は新しいキーワードの使用を避けます。そのため、アンダースコアで始まる予約済みの識別子を使用します。次に、標準では、より適切なマクロ ( _Complexの代わりにcomplex )を定義するヘッダー ファイルも提供される場合があります。

C++ は C よりも新しいため、最初に標準化されてから複雑なデータ型が含まれており、下線付きのバージョンに頼る必要はありません。

于 2011-06-15T19:49:12.130 に答える
0

<complex>標準ライブラリのすべての部分である、便利な複素数データ型を定義するヘッダーがあります。ここにドキュメントがあります。

于 2011-06-15T19:41:06.253 に答える
0

これじゃない?

および別のソースから:

_Imaginary
Revision as of 11:59, 3 December 2010 by PyBot (Talk | contribs)

Category

Reserved Words

Syntax

_Imaginary

Description

Reserved for future use.

    Warning: C++Builder does not implement _Imaginary but does treat it as a keyword when the -An compiler flag is set. Do not use _Imaginary as an identifier.
于 2011-06-15T19:40:27.227 に答える
0

C++ には、、、およびに対してインスタンス化できる<complex>テンプレート クラス を定義するというヘッダーがあります。これにより、複素数を定義し、通常の算術演算といくつかの関数を実行できます。double<>floatdoublelong double

標準 C++ にはクラスや型はなくimaginary、実数部が 0.0 の複素数だけです。どのimaginaryクラスも、ある種のベンダー拡張になります。(個人的には、imaginaryクラスがあまり役に立たないと思います。乗算で閉じられていません。)

アンダースコアで始まり、大文字が続く名前はすべて、実装で使用するために特別に予約されているため、標準 C++ がそれらについて言う必要はありません。そのようなタイプは実装固有であり、実装を指定していません。さらに、それはおそらくあなた自身が使うべきものではありません。

于 2011-06-15T19:49:33.633 に答える