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 实现的合法性

我在哪里可以在 C++11 中使用 alignas()?

使用复制列表初始化从函数返回,不需要复制/移动构造函数 - C++ 11 标准中在哪里说明?

C++11入门基础

块范围链接 C 标准