gpt4 book ai didi

c++ - C++ 函数调用中的自动转换和提升

转载 作者:行者123 更新时间:2023-12-03 03:28:58 24 4
gpt4 key购买 nike

如何了解函数调用中哪些是转化促销

来 self 之前的question与为什么某些函数被调用而其他函数也可能被调用相关,我想强调三个关键字:转换促销完美匹配

  • 完美匹配是最简单的:

    • int fun(int a) 使用声明的变量调用 int x;
    • int fun(float a, double b) 使用声明的变量调用 float x; double y;
    • int fun(char a, string s) 使用声明的变量调用 char x; string y
    • ...等等
  • 对于转化促销我只想提及:

Numeric conversions: Unlike the promotions, numeric conversions may change the values, with potential loss of precision.

Numeric promotions: a conversion from a smaller type to a larger same type (E.g char to int), but without any loss of content

接下来的部分就不那么简单了。 我希望有人解释一下当你分析函数参数时需要思考的方式,对于不同的情况调用:

  • int fun(double a)float x 对比使用 double x 调用的 int fun (float a) >

我想实际看到一些例子,因为对于初学者来说,理解cpp中的引用并不容易。

最佳答案

拥有:

int fun(double a)

使用 float x 调用会使其成为浮点提升,这是因为 double 始终与 float< 大小相同或更大 这意味着我们的参数 a 将始终能够保存我们通过 float 传递给它的数据,不会发生数据丢失,因此这是促销。

<小时/>

但是,具有:

int fun(float a)

使用double x 调用会导致浮点转换,可能会丢失数据或可能发生 UB。正是因为这种情况与上面的情况相反,我们的 double 可能会保存一个无法用 float 表示的值,这反过来可能会导致 UB。请参阅Floating-point conversions了解具体规则。

关于c++ - C++ 函数调用中的自动转换和提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59534032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com