Namespaces
Variants

std::complex<T>::complex

Из ru.cppreference.net
 
 
 
 
Основной шаблон (std::complex<T>)
complex( const T& re = T(), const T& im = T() );
(1) (до C++14)
constexpr complex( const T& re = T(), const T& im = T() );
(начиная с C++14)
complex( const complex& other );
(2) (до C++14)
constexpr complex( const complex& other );
(начиная с C++14)
(до C++23)
constexpr complex( const complex& other ) = default;
(начиная с C++23)
template< class X >
complex( const complex<X>& other );
(3) (до C++14)
template< class X >
constexpr complex( const complex<X>& other );
(начиная с C++14)
(до C++23)
template< class X >
constexpr explicit(/* see below */) complex( const complex<X>& other );
(начиная с C++23)
Стандартная явная специализация std::complex<float> (до C++23)
complex( float re = 0.0f, float im = 0.0f );
(1) (до C++11)
constexpr complex( float re = 0.0f, float im = 0.0f );
(начиная с C++11)
constexpr complex( const complex<float>& other ) = default;
(2) (начиная с C++20)
explicit complex( const complex<double>& other );
explicit complex( const complex<long double>& other );
(3) (до C++11)
constexpr explicit complex( const complex<double>& other );
constexpr explicit complex( const complex<long double>& other );
(начиная с C++11)
Стандартная явная специализация std::complex<double> (до C++23)
complex( double re = 0.0, double im = 0.0 );
(1) (до C++11)
constexpr complex( double re = 0.0, double im = 0.0 );
(начиная с C++11)
constexpr complex( const complex<double>& other ) = default;
(2) (начиная с C++20)
complex( const complex<float>& other );
explicit complex( const complex<long double>& other );
(3) (до C++11)
constexpr complex( const complex<float>& other );
constexpr explicit complex( const complex<long double>& other );
(начиная с C++11)
Стандартная явная специализация std::complex<long double> (до C++23)
complex( long double re = 0.0L, long double im = 0.0L );
(1) (до C++11)
constexpr complex( long double re = 0.0L, long double im = 0.0L );
(начиная с C++11)
constexpr complex( const complex<long double>& other ) = default;
(2) (начиная с C++20)
complex( const complex<float>& other );
complex( const complex<double>& other );
(3) (до C++11)
constexpr complex( const complex<float>& other );
constexpr complex( const complex<double>& other );
(начиная с C++11)

Конструирует объект std::complex. Стандартные явные специализации (std::complex<float>, std::complex<double> и std::complex<long double>) имеют другие объявления конструкторов, отличные от основного шаблона.(до C++23)

1) Конструирует комплексное число из вещественной части re и мнимой части im.
2) Конструктор копирования. Конструирует объект с копией содержимого other.В стандартных явных специализациях конструкторы копирования объявляются неявно.(до C++20)
3) Преобразующий конструктор. Конструирует объект из комплексного числа другого типа.

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

Нешаблонные конструкторы являются преобразующими конструкторами (т.е. неявными) тогда и только тогда, когда преобразования вещественной и мнимой частей не являются сужающими.

(до C++23)

Для основного шаблона выражение внутри explicit вычисляется как false тогда и только тогда, когда ранг преобразования с плавающей запятой типа T больше или равен рангу преобразования с плавающей запятой типа X.

(начиная с C++23)

Параметры

re - действительная часть
im - мнимая часть
other - другое комплексное число для использования в качестве источника

Примечания

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

Смотрите также

присваивает содержимое
(public member function)
литерал std::complex представляющий чисто мнимое число
(function)
C documentation для CMPLX