2011-06-15 127 views

回答

8

_Imaginary_Complex是用于定义虚浮点和复浮点变量类型的C99语言标准中的关键字;他们不是C++语言的一部分。它们本身不是数据类型 - 它们修改了float,doublelong 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作为_Imaginarycomplex_Complex,以及作为I要么_Complex_I_Imaginary_I(虚数单位)。这样传统的C程序可以使用compleximaginary作为标识符;新程序应使用compleximaginary而不是_Complex_Imaginary。请注意,以下划线开头并带有大写字母的标识符由实现保留,因此遗留代码不应使用_Complex_Imaginary

另一方面,C++不使用此模板,而是使用模板化类型std::complex<float>std::complex<double>std::complex<long double>来处理复数。这些类的功能与C99类型非常相似,但不可互换。

+0

但是,请注意,C++ 11指定'std :: complex'应该具有与C99'_Complex'相同的内存布局,明确的目的是保持C的'T _Complex'和C++的std之间的二进制兼容性::复杂的'类型。每个类型都有两个成员,在'虚数'之前有'real',这样如果投入一个类型为'T [2]'的数组,'[0]'是真实的,'[1]'会是虚构的。请参见“非静态数据成员”一节,[这里](http://en.cppreference.com/w/cpp/numeric/complex)。 – 2016-10-04 00:53:29

0

不是this

another source

_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. 
0

确切位置在哪里你看到了吗?通常,名称以下划线开头,后跟大写字母的名称将保留给标准库实现者,而不是您的业务。

0

有一个标题<complex>它为您定义了一个方便的复数数据类型,标准库的所有部分。这里是documentation

4

这些实际上是C数据类型,而不是C++数据类型。

当创建新的C标准时,委员会避免使用新的关键字。所以,他们使用保留标识符,以下划线开头。然后,该标准还可以提供定义更好的宏的头文件(复数,而不是_Complex)。

由于C++比C更新,它已经包含复杂数据类型,因为它是第一次标准化的,并且不需要求助于下划线的版本。

0

在C++中,有一个称为<complex>头,其限定一个模板类double<>,其可被实例化floatdouble,并long double。这使您可以定义复数,并执行通常的算术运算和一些功能。

标准C++中没有imaginary类或类型,只是实数部分为0.0的复数。任何imaginary类都是某种供应商扩展。 (就我个人而言,我看不到一个imaginary类会有很大用处,甚至在乘法运算下甚至没有关闭。)

任何以下划线开头且后跟大写字母的名称都专门用于实现,所以没有什么标准的C++必须对它们进行评论。任何这样的类型都是特定于实现的,并且您没有指定实现。而且,这可能不是你应该使用的东西。