C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 常用数学函数
- 数学特殊函数
- 伪随机数生成
- 浮点环境
- std::complex
- std::complex<T>::complex
- std::complex<T>::operator=
- std::complex<T>::real
- std::literals::complex_literals::operator""i, operator""if, operator""il
- std::complex<T>::imag
- std::complex<T>::operator+=,-=,*=,/=
- std::complex<T>::operator+(unary), operator-(unary)
- operator+,-,*,/ (std::complex)
- operator==,!=(std::complex)
- operator<<,>>(std::complex)
- std::real(std::complex)
- std::imag(std::complex)
- std::abs(std::complex)
- std::arg(std::complex)
- std::norm(std::complex)
- std::conj(std::complex)
- std::proj(std::complex)
- std::polar(std::complex)
- std::exp(std::complex)
- std::log(std::complex)
- std::log10(std::complex)
- std::pow(std::complex)
- std::sqrt(std::complex)
- std::sin(std::complex)
- std::cos(std::complex)
- std::tan(std::complex)
- std::asin(std::complex)
- std::acos(std::complex)
- std::atan(std::complex)
- std::sinh(std::complex)
- std::cosh(std::complex)
- std::tanh(std::complex)
- std::asinh(std::complex)
- std::acosh(std::complex)
- std::atanh(std::complex)
- std::midpoint
- std::lerp
- std::has_single_bit
- std::bit_ceil
- std::bit_floor
- std::bit_width
- std::rotl
- std::valarray
- 编译时有理数算术
- std::gcd
- std::lcm
- 数学常数
- std::bit_cast
- std::rotr
- std::countl_zero
- std::countl_one
- std::countr_zero
- std::countr_one
- std::popcount
- 注释
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::complex
模板特化 std::complex<float> 、 std::complex<double> 及 std::complex<long double> 是表示并计算复数的字面类型 (LiteralType) 。
对任何其他类型,实例化模板 complex
的效果是不确定的。
成员类型
成员类型 | 定义 |
value_type
|
T
|
成员函数
构造一个复数 (公开成员函数) | |
赋值内容 (公开成员函数) | |
访问复数的实部 (公开成员函数) | |
访问复数的虚部 (公开成员函数) | |
两个复数,或一个复数与一个标量的复合赋值 (公开成员函数) |
非成员函数
对复数运用一元运算符 (函数模板) | |
在两个复数,或一个复数与一个标量上进行复数算术运算 (函数模板) | |
(C++20 中移除) |
比较两个复数,或一个复数与一个标量 (函数模板) |
复数的序列化和反序列化 (函数模板) | |
返回实部 (函数模板) | |
返回虚部 (函数模板) | |
返回复数的模 (函数模板) | |
返回辐角 (函数模板) | |
返回模(范数)的平方 (函数模板) | |
返回复共轭 (函数模板) | |
(C++11) |
返回到黎曼球上的投影 (函数模板) |
从模和辐角构造复数 (函数模板) | |
指数函数 | |
以 e 为底复数的指数 (函数模板) | |
沿负实轴切割的复自然对数 (函数模板) | |
沿负实轴分割的复常用对数 (函数模板) | |
幂函数 | |
复数幂,一或两个参数可为复数 (函数模板) | |
右半平面范围中的复平方根 (函数模板) | |
三角函数 | |
计算复数的正弦( sin(z) ) (函数模板) | |
计算复数的余弦( cos(z) ) (函数模板) | |
计算复数的正切( tan(z) ) (函数模板) | |
(C++11) |
计算复数的反正弦( arcsin(z) ) (函数模板) |
(C++11) |
计算复数的反余弦( arccos(z) ) (函数模板) |
(C++11) |
计算复数的反正切( arctan(z) ) (函数模板) |
双曲函数 | |
计算复数的双曲正弦( sinh(z) ) (函数模板) | |
计算复数的双曲余弦( cosh(z) ) (函数模板) | |
计算复数的双曲正切( tanh(z) ) (函数模板) | |
(C++11) |
计算复数的反双曲正弦( arsinh(z) ) (函数模板) |
(C++11) |
计算复数的反双曲余弦( arcosh(z) ) (函数模板) |
(C++11) |
计算复数的反双曲正切( artanh(z) ) (函数模板) |
通过数组访问
对于任何 对于任何名为 此要求的目的是 C++ 复数类型与 C 语言复数类型(及其数组)的二进制兼容性,其中要求相同的对象表示。 |
(C++11 起) |
实现注解
为满足数组访问的要求,实现需满足在单独且相邻的内存位置存储
实现不能添加会占用与实部和虚部冲突的存储的非静态数据成员,而且必须确保类模板特化不含任何填充。实现也必须确保对数组访问的优化问题,其中要考虑到指向 value_type 的指针可能为 |
(C++11 起) |
字面量
定义于内联命名空间
std::literals::complex_literals | |
表示纯虚数的 std::complex 字面量 (函数) |
示例
运行此代码
#include <iostream> #include <iomanip> #include <complex> #include <cmath> int main() { using namespace std::complex_literals; std::cout << std::fixed << std::setprecision(1); std::complex<double> z1 = 1i * 1i; // 虚数单位平方 std::cout << "i * i = " << z1 << '\n'; std::complex<double> z2 = std::pow(1i, 2); // 虚数单位平方 std::cout << "pow(i, 2) = " << z2 << '\n'; double PI = std::acos(-1); std::complex<double> z3 = std::exp(1i * PI); // 欧拉方程 std::cout << "exp(i * pi) = " << z3 << '\n'; std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // 共轭 std::cout << "(1+2i)*(1-2i) = " << z4 * z5 << '\n'; }
输出:
i * i = (-1.0,0.0) pow(i, 2) = (-1.0,0.0) exp(i * pi) = (-1.0,0.0) (1+2i)*(1-2i) = (5.0,0.0)