Что такое сложный тип данных и мнимый тип данных в C ++? - PullRequest
2 голосов
/ 15 июня 2011

Я знаю, что такое мнимые и комплексные числа в мире математики, но как насчет C ++, что такое типы данных сложных и мнимых? Кроме того, я вижу типы данных, такие как _Imaginary и _Complex. В чем разница и что такое сложные и мнимые типы данных?

Ответы [ 6 ]

8 голосов
/ 15 июня 2011

_Imaginary и _Complex - ключевые слова в стандарте языка C99, используемые для определения мнимых и сложных типов переменных с плавающей точкой; они не являются частью языка C ++. Они не являются типами данных сами по себе - они изменяют типы float, double и 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 как _Complex_I или _Imaginary_I (мнимая единица). Это сделано для того, чтобы старые программы на C могли использовать complex и imaginary в качестве идентификаторов; новые программы должны использовать complex и imaginary вместо _Complex и _Imaginary. Обратите внимание, что идентификаторы, начинающиеся со знака подчеркивания, за которым следует заглавная буква, зарезервированы реализацией, поэтому устаревший код никогда не должен использовать _Complex или _Imaginary.

C ++, с другой стороны, не использует это и вместо этого имеет шаблонные типы std::complex<float>, std::complex<double> и std::complex<long double> для работы с комплексными числами. Эти классы функционируют очень похоже на типы C99, но не являются взаимозаменяемыми.

4 голосов
/ 15 июня 2011

На самом деле это типы данных C, а не типы данных C ++.

При создании новых стандартов C комитет избегает использования новых ключевых слов. Таким образом, они используют зарезервированные идентификаторы, которые начинаются с подчеркивания. Затем стандарт также может предоставить заголовочный файл, который определяет более хороший макрос ( complex вместо _Complex ).

Поскольку C ++ новее, чем C, он включил комплексный тип данных с момента его первой стандартизации и не нуждается в обращении к подчеркнутой версии.

0 голосов
/ 15 июня 2011

В C ++ есть заголовок <complex>, который определяет класс шаблона double<>, который может быть создан для float, double и long double. Это позволяет вам определять комплексные числа и выполнять обычные арифметические операции и некоторые функции.

В стандарте C ++ нет класса или типа imaginary, только комплексные числа с действительной частью 0.0. Любой класс imaginary будет своего рода расширением поставщика. (Лично я не вижу, чтобы класс imaginary был бы очень полезен. Он даже не закрыт при умножении.)

Любое имя, начинающееся с подчеркивания и сопровождаемое заглавной буквой, специально зарезервировано для использования реализацией, и поэтому стандарт C ++ не может сказать о них. Любой такой тип будет зависеть от реализации, а вы не указали реализацию. Более того, это, вероятно, не то, что вы должны использовать сами.

0 голосов
/ 15 июня 2011

Существует заголовок <complex>, который определяет удобный для вас тип данных комплексного числа, все части стандартной библиотеки.Вот документация .

0 голосов
/ 15 июня 2011

Где именно вы их видели?Обычно имена, начинающиеся со знака подчеркивания, за которым следует заглавная буква, зарезервированы для разработчиков стандартных библиотек и не относятся к вашему бизнесу.

0 голосов
/ 15 июня 2011

не это ?

и из другого источника :

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