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