首页 >后端开发 >C++ >所有可变参数函数都会将'float”参数提升为'double”吗?

所有可变参数函数都会将'float”参数提升为'double”吗?

Barbara Streisand
Barbara Streisand原创
2024-11-23 06:21:16711浏览

Do All Variadic Functions Promote `float` Arguments to `double`?

在可变参数函数中将 Float 参数提升为 Double

在之前的讨论中,注意到 printf() 将 float 参数提升为在接受之前加倍。这就提出了一个问题:所有可变参数函数都执行此提升吗?

可变参数提升

是的,根据 C99 和 C 标准,浮点参数传递给可变参数功能提升为双倍。

标准规范

  • C99(第 6.5.2.2 节):“具有 float 类型的参数将提升为 double。”
  • C (第 5.2.2 节):“浮点类型...在"
  • C(第 4.6 节):“float 类型的纯右值可以转换为 double 类型的纯右值。”

关于可变参数函数转换的 cppreference

cppreference 提供C 中可变参数函数默认转换的摘要:

  • std::nullptr_t 到 void*
  • Float 参数到 double
  • bool、char 的整数提升、短和枚举

起源促销

尽管存在潜在的缺点,但此促销是为了与 K&R C 标准兼容而在 C 中引入的。正如 C 基本原理所述:

“为了与过去的实践兼容,在没有原型声明的情况下,所有参数提升都按照 K&R 中的描述进行,包括并不总是理想的将浮点数提升为双倍。”

以上是所有可变参数函数都会将'float”参数提升为'double”吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn