Difference between revisions of "cpp/numeric/complex/operator""i"
From cppreference.com
m (use constructor template and link to C documentation) |
Andreas Krug (Talk | contribs) m (fmt) |
||
(13 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
− | {{cpp/title|n=literals::complex_literals::|operator""i, operator""if, operator""il }} | + | {{cpp/title|n=literals::complex_literals::|operator""i, operator""if, operator""il}} |
{{cpp/numeric/complex/navbar}} | {{cpp/numeric/complex/navbar}} | ||
{{dcl begin}} | {{dcl begin}} | ||
− | {{dcl header | complex}} | + | {{dcl header|complex}} |
− | {{ | + | {{dcla|num=1|since=c++14|1= |
− | constexpr complex< | + | constexpr complex<double> operator""i( long double arg ); |
− | constexpr complex< | + | constexpr complex<double> operator""i( unsigned long long arg ); |
}} | }} | ||
− | {{ | + | {{dcla|num=2|since=c++14|1= |
− | constexpr complex< | + | constexpr complex<float> operator""if( long double arg ); |
− | constexpr complex< | + | constexpr complex<float> operator""if( unsigned long long arg ); |
}} | }} | ||
− | {{ | + | {{dcla|num=3|since=c++14|1= |
− | constexpr complex< | + | constexpr complex<long double> operator""il( long double arg ); |
− | constexpr complex< | + | constexpr complex<long double> operator""il( unsigned long long arg ); |
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
Line 19: | Line 19: | ||
Forms a {{lc|std::complex}} literal representing an imaginary number. | Forms a {{lc|std::complex}} literal representing an imaginary number. | ||
− | @1@ | + | @1@ Forms a literal {{c|std::complex<double>}} with the real part zero and imaginary part {{c|arg}}. |
− | @2@ | + | @2@ Forms a literal {{c|std::complex<float>}} with the real part zero and imaginary part {{c|arg}}. |
− | @3@ | + | @3@ Forms a literal {{c|std::complex<long double>}} with the real part zero and imaginary part {{c|arg}}. |
===Parameters=== | ===Parameters=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | arg | the value of the imaginary number}} | + | {{par|arg|the value of the imaginary number}} |
{{par end}} | {{par end}} | ||
===Return value=== | ===Return value=== | ||
− | The {{lc|std::complex}} literal with the real part zero and imaginary part {{ | + | The {{lc|std::complex}} literal with the real part zero and imaginary part {{c|arg}}. |
+ | |||
+ | ===Notes=== | ||
+ | These operators are declared in the namespace {{c|std::literals::complex_literals}}, where both {{tt|literals}} and {{tt|complex_literals}} are inline namespaces. Access to these operators can be gained with either: | ||
+ | * {{c|using namespace std::literals}}, | ||
+ | * {{c|using namespace std::complex_literals}}, or | ||
+ | * {{c|using namespace std::literals::complex_literals}}. | ||
+ | |||
+ | Even though {{c|if}} is a [[cpp/keywords/if|keyword]] in C++, it is a {{spar|ud-suffix}} of the [[cpp/language/user literal|literal operator]] of the form {{c|operator ""if}} and in the literal expressions such as {{c|1if}} or {{c|1.0if}} because it is not separated by whitespace and is not a standalone token. | ||
+ | |||
+ | {{feature test macro|__cpp_lib_complex_udls|User-Defined Literals for {{lc|std::complex}}|value=201309L|std=C++14}} | ||
===Possible implementation=== | ===Possible implementation=== | ||
− | {{eq | + | {{eq impl |
− | + | |title1=operator""i|ver1=1|1= | |
− | constexpr std::complex<double> operator""i(unsigned long long d) | + | constexpr std::complex<double> operator""i(unsigned long long d) |
{ | { | ||
− | return std::complex<double>{0.0, static_cast<double>(d)} | + | return std::complex<double> {0.0, static_cast<double>(d)}; |
} | } | ||
− | constexpr std::complex< | + | |
+ | constexpr std::complex<double> operator""i(long double d) | ||
{ | { | ||
− | return std::complex<double>{0.0, d}. | + | return std::complex<double> {0.0, static_cast<double>(d)}; |
+ | } | ||
+ | |title2=operator""if|ver2=2|2= | ||
+ | constexpr std::complex<float> operator""if(unsigned long long d) | ||
+ | { | ||
+ | return std::complex<float> {0.0f, static_cast<float>(d)}; | ||
} | } | ||
− | |||
− | + | constexpr std::complex<float> operator""if(long double d) | |
− | + | { | |
+ | return std::complex<float> {0.0f, static_cast<float>(d)}; | ||
+ | } | ||
+ | |title3=operator""il|ver3=3|3= | ||
+ | constexpr std::complex<long double> operator""il(unsigned long long d) | ||
+ | { | ||
+ | return std::complex<long double> {0.0L, static_cast<long double>(d)}; | ||
+ | } | ||
− | + | constexpr std::complex<long double> operator""il(long double d) | |
+ | { | ||
+ | return std::complex<long double> {0.0L, d}; | ||
+ | } | ||
+ | }} | ||
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | | code= | + | |code= |
− | + | ||
#include <complex> | #include <complex> | ||
+ | #include <iostream> | ||
int main() | int main() | ||
{ | { | ||
− | using namespace std | + | using namespace std::complex_literals; |
+ | |||
std::complex<double> c = 1.0 + 1i; | std::complex<double> c = 1.0 + 1i; | ||
− | std::cout << "abs" << c << " = " << abs(c) << '\n'; | + | std::cout << "abs" << c << " = " << std::abs(c) << '\n'; |
+ | |||
+ | std::complex<float> z = 3.0f + 4.0if; | ||
+ | std::cout << "abs" << z << " = " << std::abs(z) << '\n'; | ||
} | } | ||
− | | output= | + | |output= |
abs(1,1) = 1.41421 | abs(1,1) = 1.41421 | ||
+ | abs(3,4) = 5 | ||
}} | }} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/numeric/complex/dsc complex}} | + | {{dsc inc|cpp/numeric/complex/dsc complex}} |
− | {{dsc see c | c/numeric/complex/I}} | + | {{dsc inc|cpp/numeric/complex/dsc operator{{=}}}} |
+ | {{dsc see c|c/numeric/complex/I}} | ||
{{dsc end}} | {{dsc end}} | ||
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 06:51, 22 April 2023
Defined in header <complex>
|
||
constexpr complex<double> operator""i( long double arg ); constexpr complex<double> operator""i( unsigned long long arg ); |
(1) | (since C++14) |
constexpr complex<float> operator""if( long double arg ); constexpr complex<float> operator""if( unsigned long long arg ); |
(2) | (since C++14) |
constexpr complex<long double> operator""il( long double arg ); constexpr complex<long double> operator""il( unsigned long long arg ); |
(3) | (since C++14) |
Forms a std::complex literal representing an imaginary number.
Contents |
[edit] Parameters
arg | - | the value of the imaginary number |
[edit] Return value
The std::complex literal with the real part zero and imaginary part arg.
[edit] Notes
These operators are declared in the namespace std::literals::complex_literals, where both literals
and complex_literals
are inline namespaces. Access to these operators can be gained with either:
- using namespace std::literals,
- using namespace std::complex_literals, or
- using namespace std::literals::complex_literals.
Even though if is a keyword in C++, it is a ud-suffix of the literal operator of the form operator ""if and in the literal expressions such as 1if or 1.0if because it is not separated by whitespace and is not a standalone token.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_complex_udls |
201309L | (C++14) | User-Defined Literals for std::complex |
[edit] Possible implementation
operator""i |
---|
constexpr std::complex<double> operator""i(unsigned long long d) { return std::complex<double> {0.0, static_cast<double>(d)}; } constexpr std::complex<double> operator""i(long double d) { return std::complex<double> {0.0, static_cast<double>(d)}; } |
operator""if |
constexpr std::complex<float> operator""if(unsigned long long d) { return std::complex<float> {0.0f, static_cast<float>(d)}; } constexpr std::complex<float> operator""if(long double d) { return std::complex<float> {0.0f, static_cast<float>(d)}; } |
operator""il |
constexpr std::complex<long double> operator""il(unsigned long long d) { return std::complex<long double> {0.0L, static_cast<long double>(d)}; } constexpr std::complex<long double> operator""il(long double d) { return std::complex<long double> {0.0L, d}; } |
[edit] Example
Run this code
#include <complex> #include <iostream> int main() { using namespace std::complex_literals; std::complex<double> c = 1.0 + 1i; std::cout << "abs" << c << " = " << std::abs(c) << '\n'; std::complex<float> z = 3.0f + 4.0if; std::cout << "abs" << z << " = " << std::abs(z) << '\n'; }
Output:
abs(1,1) = 1.41421 abs(3,4) = 5
[edit] See also
constructs a complex number (public member function) | |
assigns the contents (public member function) | |
C documentation for I
|