引自N1570:
6.3.1.8通常的算术转换
1许多期望算术类操作数的运算符会导致 以类似的方式转换和生成结果类型。目的是为了 确定操作数和结果的常见实型。为了 指定的操作数,每个操作数都被转换,而不会改变 类型域,对应的真实类型是常见的真实类型。除非另有明确说明,否则通用 真实类型也是结果的相应真实类型,其类型域是操作数的类型域如果他们 是相同的,否则复杂。这种模式通常被称为 算术转换:
- 首先,如果任一操作数的相应实数类型为long double,则转换另一个操作数,而不更改类型 域,对应的真实类型为long double的类型。
- 否则,......
什么是“类型域”和“真实类型”?我搜索了文档,但没有找到定义。
答案 0 :(得分:3)
6.2.5 N1570的类型如下:
整数和浮点类型统称为算术类型。每种算术类型属于一个类型域:真实类型域包含真实类型,复杂类型域包含复合体 类型强>
然后进一步:
有三个 真实浮动类型 ,指定为
float
,double
,和long double
。 42) 类型的值集float
是一组值的子集 类型 双 ;类型的值集 双 是一组值的子集 类型 长双
和
有三个 复杂类型,指定为
float _Complex
,double _Complex
,和long double _Complex
。
(请注意,标准没有说明复杂的整数类型,因此标准中定义的所有整数类型都属于真实类型域。)
因此很明显,域名是指real numbers ℝ和complex numbers ℂ的数学概念。
基本上你的问题中的摘录说的是,如果你添加一个带有虚数或复数的实数,结果也是一个复数;并且操作数在操作之前被提升到最大操作数的宽度。