0

sinf我很想知道C++ 中是否存在该函数,包括math.h.

在 Qt Creator 中查看我的自动完成时,它似乎没有弹出。这让我想知道是否出于某种原因,它被取出了。谷歌搜索似乎也没有弹出很多参考资料。他们中的大多数都参考了直C。

那么,这可以证实吗?

4

2 回答 2

4

这取决于您的实现支持的标准版本。

sinf函数在 1990 ISO C 标准中不存在(也不存在sind)。唯一的sin函数是sin,它接受一个double参数并返回一个double结果。(“未来的图书馆方向”部分,7.13,确实说名称后缀为for的数学函数l是保留的。)

sinfsind函数是在 1999 ISO C 标准 (C99) 中添加的。

ISO C++ 标准的 2003 版在第 17.4.1.2 [lib.headers] 节中说:

除第 18 到 27 条中的说明外,每个头 cname的内容应与对应的头name.h的内容相同,如 ISO/IEC 9899:1990 编程语言 C(第 7 条)或 ISO/IEC 中规定的:1990 编程语言—C 修正案 1:C 完整性,(第 7 条),视情况而定,如同包含在内。

2011 ISO C++ 标准(至少 N3290 草案)包括以下作为规范性参考:

  • ISO/IEC 9899:1999,编程语言 — C
  • ISO/IEC 9899:1999/Cor.1:2001(E),编程语言 — C,技术勘误 1
  • ISO/IEC 9899:1999/Cor.2:2004(E),编程语言 — C,技术勘误 2
  • ISO/IEC 9899:1999/Cor.3:2007(E),编程语言 — C,技术勘误 3

因此,符合 C++11 不需要提供的早期标准的 C++ 实现sinf。目前尚不清楚是否允许这样做,但由于 C++11 之前的所有标准都已正式过时,这可能是一个没有实际意义的问题。

对于 C++11 之前的实现来说,提供sinf()和朋友作为(可能不符合标准的)扩展可能很常见。

实际上,您总是可以调用sin(); 在大多数情况下,参数和结果将从floattodouble和 from doubleto隐式转换float。可能会(或可能不会)降低效率。

于 2012-02-01T06:11:09.890 回答
1

所有 C 函数都存在于 C++ 中,除非它们的头文件采取明确的步骤来检查它是否是 C++ 编译器并在这种情况下隐藏定义。

所以是的,你可以sinf像使用 C 一样使用 C++ 代码。事实上,你可以(除了一些非常狭窄的例外)编写 C90 代码并通过它g++,称之为 C++。

编辑:sinf,至少在我的机器上,除非在包含该标题之前编辑math.h以下之一,否则不会暴露:#define

_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600
|| _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

因此,在 C++ 代码中,您可能需要设置其中一个预处理器定义才能获得原型。

于 2012-02-01T04:22:23.177 回答