C++11 标准在哪里声明了 std::fmodf?
Posted
技术标签:
【中文标题】C++11 标准在哪里声明了 std::fmodf?【英文标题】:Where in the C++11 standard is std::fmodf stated? 【发布时间】:2021-08-11 10:05:22 【问题描述】:根据cppref page,在 C++11 中将 std::fmodf 添加到 cmath 中。这怎么可能,因为这不意味着 cmath 会破坏与 C++11 之前的 math.h 的兼容性吗?我找不到任何说 std::fmodf 是在 C++11 中添加的引用,我想知道这是在哪里声明的。
谢谢
【问题讨论】:
为什么会破坏兼容性? 添加不会破坏兼容性。删除接口会。 @interjay 嗯,我认为你是对的。但是我在 C++11 标准中找不到对 std::fmodf 的任何引用? C++11 是否增加了对 C99 函数的支持? 【参考方案1】:在 C++11 标准的什么地方声明了 std::fmodf?
没有直接提到它(尽管它可能应该在函数列表中提到,或者明确省略)。导致std::fmodf
存在的更改在这里(引自草案 N3337):
以下参考文件对于本文件的应用是必不可少的。对于注明日期的参考文献,仅引用的版本适用。对于未注明日期的参考文献,适用参考文件的最新版本(包括任何修订)。
... ISO/IEC 9899:1999,编程语言 - C ...
通过以下规则:
[c.math]
这些头文件的内容分别与标准 C 库头文件
和 相同,但有以下变化: ...
C99 添加了 fmodf。当 C++11 开始引用 C99 的标准库而不是 C89 时,它被继承到了 C++。
请注意,“以下更改”未列出遗漏fmodf
。
为什么 fmodf 没有列在函数列表(26.8/3 和 26.8/9)中?它被添加到 C++17 标准的列表中。
这似乎是一个编辑错误。 P0175 似乎已经在 C++17 中修复了它,它建议:
在这篇社论论文中,我们建议在工作草案中添加 C 库头文件的完整概要,这些库头文件包含在 C++ 中,并参考了 C 标准(参见表 15)。这些概要将取代标题为“标题概要”的各种表格。
旁注:std::fmodf
在 C++ 中相当无用,因为您可以简单地使用 std::fmod
来代替,而且自 C++98 以来就一直存在。
【讨论】:
为什么fmodf
没有在<cmath>
函数列表(26.8/3 和 26.8/9)中列出?它被添加到 C++17 标准的列表中。
啊,谢谢,看到C99加了fmodf之类的我就想这个了。以上是关于C++11 标准在哪里声明了 std::fmodf?的主要内容,如果未能解决你的问题,请参考以下文章
C ++ 11标准中“顶级cv-qualifiers”的定义在哪里?
C++11 中 COW std::string 实现的合法性