我很想知道是否通过包含sinf
在C ++中存在math.h
函数。
在Qt Creator中查看我的自动完成时,它似乎不会弹出。这让我想知道,由于某种原因,它是否被取消了。 Google搜索似乎也没有提供很多引用;他们中的大多数是关于直C的。
那么,这可以证实吗?
答案 0 :(得分:4)
这取决于您的实现支持的标准版本。
1990 {ISO}标准中不存在sinf
函数(sind
也没有)。唯一的sin
函数是sin
,它接受double
参数并返回double
结果。 (“未来图书馆方向”部分7.13确实说保留了名称后缀为f
或l
的数学函数。)
1999年ISO C标准(C99)中添加了sinf
和sind
功能。
2003版ISO C ++标准在第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 ++实现符合早期的标准,C ++ 11无需提供sinf
。目前尚不清楚是否允许这样做,但由于C ++ 11之前的所有标准都已正式废弃,这可能是一个没有实际意义的问题。
预C ++ 11实现可能会将sinf()
和朋友作为(可能不符合的)扩展提供。
实际上,您可以随时拨打sin()
;在大多数情况下,参数和结果将从float
隐式转换为double
,从double
隐式转换为float
。可能(或可能不)会有一些效率损失。
答案 1 :(得分:1)
所有C函数都存在于C ++中,除非它们的头文件采用显式步骤来检查它是否是C ++编译器并在这种情况下隐藏定义。
所以是的,您可以像使用C语言一样使用C ++代码中的sinf
。实际上,您可以(通过一些非常狭窄的例外)编写C90代码并将其传递给g++
,称之为C ++。
sinf
,至少在我的计算机上,math.h
未公开,除非在包含该标题之前#define
之一被_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600
|| _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
曝光:
{{1}}
因此,在C ++代码中,您可能需要设置其中一个预处理器定义才能获得原型。