Sinf - 它存在于C++
Sinf - Does it exist in C++?
我很想知道sinf
函数是否存在于C++中,包括math.h
。
在Qt Creator中查看我的自动完成时,它似乎没有弹出。这让我想知道,出于某种原因,它是否被取出了。谷歌搜索似乎也没有弹出很多参考资料;他们中的大多数都参考了直C。
那么,这能得到证实吗?
这取决于您的实现支持的标准版本。
1990 ISO C 标准中不存在sinf
功能(sind
中也不存在(。 唯一sin
函数是 sin
,它接受一个double
参数并返回一个double
结果。 ("未来图书馆方向"部分,7.13,确实说名称后缀为f
或l
的数学函数是保留的。
sinf
和sind
功能在1999年ISO C标准(C99(中添加。
2003 年版的 ISO C++ 标准在第 17.4.1.2 节 [lib.headers] 中说:
除第 18 至 27 条所述外,每个标题的内容 cname 应与相应的标头名称相同。 在 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 不需要提供sinf
的更早标准的C++实现。 目前尚不清楚是否允许这样做,但由于 C++11 之前的所有标准都正式过时,这可能是一个有争议的问题。
对于 C++11 之前的实现来说,提供sinf()
和朋友作为(可能不符合(扩展可能是很常见的。
实际上,你总是可以只调用sin()
;在大多数情况下,参数和结果将从float
隐式转换为double
,从double
转换为float
。 可能会(或可能不会(有一些效率损失。
所有 C 函数都存在于 C++ 中,除非它们的头文件采取显式步骤检查它是否是 C++ 编译器并在这种情况下隐藏定义。
所以是的,你可以像使用 C 一样使用 C++ 代码中的sinf
。事实上,你可以(除了一些非常狭窄的例外(编写 C90 代码并通过 g++
,称之为C++。
编辑:sinf
,至少在我的机器上,除非在包含该标头之前#define
以下之一,否则math.h
不会公开:
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600
|| _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
因此,在C++代码中,您可能需要设置其中一个预处理器定义才能获得原型。
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 如何将分支添加到已存在的TTree:ROOT
- 地图计数确实很重要,或者只是检查是否存在
- 通用C++/Python 多语言的存在
- 为什么我的共享库中存在展开符号