std::complex<T>::complex
|   Primary template (std::complex<T>)  | 
||
| (1) | ||
|   complex( const T& re = T(), const T& im = T() );  | 
(until C++14) | |
|   constexpr complex( const T& re = T(), const T& im = T() );  | 
(since C++14) | |
| (2) | ||
|   complex( const complex& other );  | 
(until C++14) | |
|   constexpr complex( const complex& other );  | 
 (since C++14)  (until C++23)  | 
|
|   constexpr complex( const complex& other ) = default;  | 
(since C++23) | |
| (3) | ||
|   template< class X > complex( const complex<X>& other );  | 
(until C++14) | |
|   template< class X > constexpr complex( const complex<X>& other );  | 
 (since C++14)  (until C++23)  | 
|
|   template< class X > constexpr explicit(/* see below */) complex( const complex<X>& other );  | 
(since C++23) | |
|   Standard explicit specialization std::complex<float> (until C++23)  | 
||
| (1) | ||
|   complex( float re = 0.0f, float im = 0.0f );  | 
(until C++11) | |
|   constexpr complex( float re = 0.0f, float im = 0.0f );  | 
(since C++11) | |
|   constexpr complex( const complex<float>& other ) = default;  | 
(2) | (since C++20) | 
| (3) | ||
|   explicit complex( const complex<double>& other ); explicit complex( const complex<long double>& other );  | 
(until C++11) | |
|   constexpr explicit complex( const complex<double>& other ); constexpr explicit complex( const complex<long double>& other );  | 
(since C++11) | |
|   Standard explicit specialization std::complex<double> (until C++23)  | 
||
| (1) | ||
|   complex( double re = 0.0, double im = 0.0 );  | 
(until C++11) | |
|   constexpr complex( double re = 0.0, double im = 0.0 );  | 
(since C++11) | |
|   constexpr complex( const complex<double>& other ) = default;  | 
(2) | (since C++20) | 
| (3) | ||
|   complex( const complex<float>& other ); explicit complex( const complex<long double>& other );  | 
(until C++11) | |
|   constexpr complex( const complex<float>& other ); constexpr explicit complex( const complex<long double>& other );  | 
(since C++11) | |
|   Standard explicit specialization std::complex<long double> (until C++23)  | 
||
| (1) | ||
|   complex( long double re = 0.0L, long double im = 0.0L );  | 
(until C++11) | |
|   constexpr complex( long double re = 0.0L, long double im = 0.0L );  | 
(since C++11) | |
|   constexpr complex( const complex<long double>& other ) = default;  | 
(2) | (since C++20) | 
| (3) | ||
|   complex( const complex<float>& other ); complex( const complex<double>& other );  | 
(until C++11) | |
|   constexpr complex( const complex<float>& other ); constexpr complex( const complex<double>& other );  | 
(since C++11) | |
Constructs the std::complex object. The standard explicit specializations (std::complex<float>, std::complex<double> and std::complex<long double>) have different constructor declarations from the main template.(until C++23)
| 
 The main template provides a converting constructor template, while each standard explicit specialization provides two non-template constructors for the two other standard explicit specializations. The non-template constructors are converting constructors (i.e. non-explicit) if and only if the conversions of the real and imaginary parts are not narrowing.  | 
(until C++23) | 
| 
 For the main template, the expression inside explicit evaluates to false if and only if the floating-point conversion rank of   | 
(since C++23) | 
Parameters
| re | - | the real part | 
| im | - | the imaginary part | 
| other | - | another complex number to use as source | 
Notes
Since C++23, the copy constructor is required to be trivial in order to satisfy the TriviallyCopyable requirement, but implementations generally make it trivial in all modes.
See also
|   assigns the contents  (public member function)  | |
|   a std::complex literal representing purely imaginary number  (function)  | |
|   C documentation for CMPLX 
 | |