0

根据cppref page,在 C++11 中将 std::fmodf 添加到 cmath 。这怎么可能,因为这不意味着 cmath 会破坏与 C++11 之前的 math.h 的兼容性吗?我找不到任何说 std::fmodf 是在 C++11 中添加的引用,并且想知道这是在哪里说明的。

谢谢

4

1 回答 1

4

C++11 标准在哪里声明了 std::fmodf?

它没有直接提及(尽管它可能应该在函数列表中提及,或者明确省略)。导致std::fmodf存在的变化在这里(引自草案 N3337):

以下参考文件对于本文件的应用是必不可少的。对于注明日期的参考文献,仅引用的版本适用。对于未注明日期的引用文件,引用文件的最新版本(包括任何修改)适用。

  • ...
  • ISO/IEC 9899: 1999,编程语言 — C
  • ...

通过以下规则:

[c.数学]

这些头文件的内容分别与标准 C 库头文件 <math.h> 和 <stdlib.h> 相同,但有以下变化: ...

C99 添加了 fmodf。当 C++11 开始引用 C99 的标准库而不是 C89 时,它被继承到了 C++。

注意,“以下变化”没有列出遗漏的fmodf


为什么 fmodf 没有在函数列表(26.8/3 和 26.8/9)中列出?它被添加到 C++17 标准的列表中。

这似乎是一个编辑错误。它似乎已由P0175在 C++17 中修复,它建议:

在这篇社论论文中,我们建议通过参考 C 标准将 C 库头文件的完整概要添加到工作草案中(参见表 15)。这些概要将取代标题为“标题概要”的各种表格。


旁注:std::fmodf在 C++ 中相当没用,因为您可以简单地使用std::fmod它,并且自 C++98 以来一直存在。

于 2021-05-22T12:27:39.477 回答