C6.3.1.8标准的www.example.com部分意味着什么?

mfuanj7w  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(154)

C6.3.1.8标准的www.example.com部分说的是:- ---
许多运算子预期会有算术型别的算子,会以类似的方式进行转换并产生结果型别。目的是要判断算子和结果的通用真实的型。对于指定的算子,每个算子都会转换成型别,而不变更型别定义域,其Map的实型是通用实型。除非明确说明,普通真实的类型也是结果对应的实数类型,如果操作数相同,则其类型域为操作数的类型域,否则为复数。这种模式称为普通算术转换:


我不理解的是“除非明确说明,否则公共真实的类型也是结果的对应实类型,如果操作数相同,则其类型域是操作数的类型域,否则为复数”这一部分。
这意味着,例如,如果我有这样一行代码:
f=x+y;
其中x是双精度型,y是复数浮点型,f是长双精度型
所以C标准的语句说,在这个例子中,结果对应的真实的类型是double,如果是这样,那么x保持为double,y被转换为复数double,最后结果被转换为long double,赋值给f,对吗?
如果我说错了,你能给予个例子说明这句话的意思吗?

4uqofj5v

4uqofj5v1#

转换规则实际上适用于每个单独的运算符,而不是整个表达式。
首先有x+y,其中xdoubleyfloat complex,公共真实的类型是double,所以x的值仍然是double类型,而y的值被转换为double complex,所以得到的表达式x+y的类型是double complex
然后是=运算符,整个左操作数f的类型为long double,右操作数x+y的类型为double complex。该运算符服从通常的算术转换。第6.5.15.1p2节规定:
在 * 简单赋值 *(=)中,右操作数的值转换为赋值表达式的类型,并替换左操作数指定的对象中存储的值。
因此,x+y的值根据此规则从double complex转换为long double,并分配给f。如果f的类型为float,则您将进行从double complexfloat的转换。

相关问题