类型 complex 专门用于处理混合模式表达式中的内置运算类型。运算类型会缺省转换为类型 complex,而且算术运算符和大多数数学函数都有 complex 版本。例如:
int i, j; double x, y; complex a, b; a = sin((b+i)/y) + x/j; |
表达式 b+i 是混合模式。整数 i 通过构造函数 complex::complex(double,double=0) 转换为类型 complex(整型数先是转换为类型 double)。所得结果除以 double 类型的 y,因此 y 也转换为 complex 且使用了复数除法运算。这样,得到的商是 complex 类型,因此调用复数正弦例程,从而生成另一个 complex 结果等。
但是,并非所有的数学运算符和转换都是暗示的(即使定义)。例如从数学角度,复数未较好排序,只能比较等式。
complex a, b; a == b; // OK a != b; // OK a < b; // error: operator < cannot be applied to type complex a >= b; // error: operator >= cannot be applied to type complex |
同样,由于未明确定义概念,因此不会自动将类型 complex 转换为其他类型。您可以指定是否需要实部、虚部或幅度。
complex a; double f(double); f(abs(a)); // OK f(a); // error: no match for f(complex) |