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
    • …等等
  • 对于转换促销我只想提一下:

与促销不同,数字转换可能会更改值,并可能导致精度损失

从较小的类型转换为较大的相同类型(如char到int),但不会丢失任何内容

这是一个不那么简单的部分我希望有人解释一下,当您分析函数参数时,您需要以什么样的方式思考不同的调用情况:

  • int-fun(双a)
    with
    float x
    vs
    int-fun(float a)
    调用
    double x
我想看看一些实际的例子,因为对于乞丐来说,不容易理解cpp的参考资料。

有:

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了解更多信息。