sinf
我很想知道C++ 中是否存在该函数,包括math.h
.
在 Qt Creator 中查看我的自动完成时,它似乎没有弹出。这让我想知道是否出于某种原因,它被取出了。谷歌搜索似乎也没有弹出很多参考资料。他们中的大多数都参考了直C。
那么,这可以证实吗?
sinf
我很想知道C++ 中是否存在该函数,包括math.h
.
在 Qt Creator 中查看我的自动完成时,它似乎没有弹出。这让我想知道是否出于某种原因,它被取出了。谷歌搜索似乎也没有弹出很多参考资料。他们中的大多数都参考了直C。
那么,这可以证实吗?
这取决于您的实现支持的标准版本。
该sinf
函数在 1990 ISO C 标准中不存在(也不存在sind
)。唯一的sin
函数是sin
,它接受一个double
参数并返回一个double
结果。(“未来的图书馆方向”部分,7.13,确实说名称后缀为f
or的数学函数l
是保留的。)
sinf
和sind
函数是在 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 草案)包括以下作为规范性参考:
因此,符合 C++11 不需要提供的早期标准的 C++ 实现sinf
。目前尚不清楚是否允许这样做,但由于 C++11 之前的所有标准都已正式过时,这可能是一个没有实际意义的问题。
对于 C++11 之前的实现来说,提供sinf()
和朋友作为(可能不符合标准的)扩展可能很常见。
实际上,您总是可以调用sin()
; 在大多数情况下,参数和结果将从float
todouble
和 from double
to隐式转换float
。可能会(或可能不会)降低效率。
所有 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++ 代码中,您可能需要设置其中一个预处理器定义才能获得原型。