C++ 在C++;
如何了解函数调用中哪些是转换和促销 在我之前的相关文章中,我想强调三个关键词:转换,促销,完美匹配C++ 在C++;,c++,type-conversion,integer-promotion,C++,Type Conversion,Integer Promotion,如何了解函数调用中哪些是转换和促销 在我之前的相关文章中,我想强调三个关键词:转换,促销,完美匹配 完美匹配是最简单的: intfun(inta)调用时声明了一个变量intx intfun(float a,double b)调用时声明了一个变量float x双y intfun(char a,string s)调用时声明了变量char x字符串y …等等 对于转换和促销我只想提一下: :与促销不同,数字转换可能会更改值,并可能导致精度损失 :从较小的类型转换为较大的相同类型(如char
- 完美匹配是最简单的:
调用时声明了一个变量intfun(inta)
intx代码>
调用时声明了一个变量intfun(float a,double b)
float x代码>
双y代码>
调用时声明了变量intfun(char a,string s)
char x代码>
字符串y
- …等等
- 对于转换和促销我只想提一下:
withint-fun(双a)
vsfloat x
调用int-fun(float a)
double x
int fun(double a)
使用float x
调用使其成为浮点提升,这是因为double
将始终与float
大小相同或更大,这意味着我们的参数a
将始终能够保存我们通过float
传递给它的数据,不会发生数据丢失,因此这是一次促销
但是:
int fun(float a)
使用
double x
进行调用会导致数据丢失或可能发生UB的浮点转换。正是因为这个场景与上面的场景相反,我们的双精度
可能持有一个在浮点
中无法表示的值,这反过来可能导致UB。有关这方面的确切规则,请参见。一个更好的开始点:我希望看到一些示例,如函数原型
,以及与函数一起调用的变量。然后简单解释一下你对它的看法(例如,这里有一个转换,因为X和Y,这里有一个提升,因为这是一个W和一个Z)@FrançoisAndrieux我想OP只是想要一个例子,因为问题似乎已经表明OP知道什么是提升与转换。转换可能有损,促销从不有损。但也许我误解了。我想你是对的,没有人问这个问题,但在我自己尝试回答这个问题时,我发现浮点提升的定义与关于类型精度或宽度的共识不一致。从另一个浮点类型到long double
似乎不符合升级的条件。您能否解释一下,例如,如果有一个重载函数,并使用一些参数调用它,可能会有一个升级或一个转换,您会选择哪一个?还有,在任何情况下,在函数调用时,它可能是一个转换,然后是一个提升或替代(对于相同的参数)?@CătălinaSîrbu不确定我是否理解,你能详细说明一下吗?也可以使用聊天室。@CătălinaSîrbu了解更多信息。