- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
根据这里的讨论,我有 reported a bug给 Ubuntu 开发者。
在编译以下示例 c++ 程序时:
#include <cmath>
#include <stdio.h>
int main()
{
printf("%f\n", std::cosf(0.0f));
}
我收到以下错误消息:error: ‘cosf’ is not a member of ‘std’
包括 math.h
并使用非命名空间版本可以正常工作。怎么回事?
我在 Ubuntu 19.04 上使用 g++ 8.3.0-6ubuntu1。
我正在使用 g++ --std=c++17 test.cpp
最佳答案
该版本的库 (libstdc++8) 不完全符合 C++17。版权声明说它最后一次更新是在 2016 年。截至 2019 年 6 月,the latest upstream release被窃听。它确实有 #if __cplusplus > 201402L
部分,但它没有声明 C++17 所需的标识符。 There is an open bug report.
看/usr/include/c++/8/cmath
在 Ubuntu 上,它包括 <math.h>
, 为其函数取消定义一系列宏(C 标准库需要)以访问它们的名称,导入 cos
, acos
等进入std::
命名空间,然后声明重载的float
和 long double
重载为 inline
.
它从不声明 cosf
在 std::
内命名空间,即使 C++17 says it shall. C++11 standard说,“在 C 中定义为函数的名称应在 C++ 标准库中定义为函数,”和“标准 C 库中使用外部链接声明的每个名称都保留给实现用作 extern "C"
的名称。链接,都在 namespace std
并且在全局命名空间中。”但是,它没有明确说明 std::expf
等。必须支持到 P0175r1 in June 2016.这显然是一个疏忽。
libc++ library 确实声明了它们,因此使用 clang++ -std=c++17 -stdlib=libc++
进行编译应该可以。
关于c++ - `cosf`、`sinf`等不在`std`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56417980/
为什么我从 sin(x) 和 sinf(x) 得到的值与下面的 (8) 和 (9) 相同?为什么我从下面的 (2) 和 (3) 两个不同的实现中得到不同的 [ x - sinf(x) ] 值?为什么
我很想知道 sinf 函数是否存在于 C++ 中,通过包含 math.h。 在 Qt Creator 中查看我的自动完成时,它似乎没有弹出。这让我想知道是否出于某种原因,它被取出了。谷歌搜索似乎也没有
这个问题在这里已经有了答案: std::expf and std::logf not recognized by gcc 7.2.0 (3 个回答) 关闭3年前。 根据这里的讨论,我有 reporte
我正在尝试通过使用正弦函数创建示例数据并使用 SDL 播放来生成各种频率的音调。 我在用 buffer[sample] = 32767 * sinf( 2 * PI * sample * sound_
我在尝试编译时遇到此错误: error: undefined reference to `sinf' 我已经包含了 math.h,并验证它在其中定义: #include 但是,我在尝试链接到数学库时
我最近读了很多旧的 C 语言,一个常见的习惯用法是简单地向前声明标准库,而不是包含头文件。我想尝试一下,所以不是 #include 我刚刚宣布 float sinf(float); 在文件的顶部。令我
当我在 ARMv7 上编译我的程序时,与在 Windows 上获得的相比,具有数学 sin() 函数的相同 C 代码运行速度要慢得多。我正在使用 -O2 -Wall -Wextra -mfpu=neo
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why doesn't sin() return the correct value here? 我正在构建
我的代码主要处理单精度 float 。对超越函数的调用相当频繁。现在,我正在使用 sin()、cos()、sqrt() 等——接受并返回 double 的函数。当它仅为 x87 编译时,我知道单精度和
我只是想知道自从我在浮点变量中使用 sin 和 cos 以来我的程序会更快,所以我决定以这种方式进行测试: int c; float a; float b = 0.5; /**************
我试图在我的 C 程序中使用 sinf 函数,但它在 MSVC 6.0 下给我一个 undefined reference 错误,但是 sin 工作正常。 这让我很想知道 sin 和 sinf 之间的
我正在创建一个 3d 平面,它位于 x 轴和 z 轴上,山丘在 y 轴上延伸。大部分代码如下所示: float PeaksAndValleys::getHeight(float x, float z)
我是一名优秀的程序员,十分优秀!