- 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/
今天早上突然开始。 原文是这样的 float angle = (x+90)*(M_PI/180.0); float xx = cosf(angle); float yy = sinf(angle);
这个问题在这里已经有了答案: std::expf and std::logf not recognized by gcc 7.2.0 (3 个回答) 关闭3年前。 根据这里的讨论,我有 reporte
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why doesn't sin() return the correct value here? 我正在构建
您可能认为我完全疯了并且不擅长编程。其中之一可能是这种情况,但请阅读我的发现。 是的,我 #include Full Code can be found here. (我试图让它符合 ansi 标准
我的代码主要处理单精度 float 。对超越函数的调用相当频繁。现在,我正在使用 sin()、cos()、sqrt() 等——接受并返回 double 的函数。当它仅为 x87 编译时,我知道单精度和
我正在创建一个 3d 平面,它位于 x 轴和 z 轴上,山丘在 y 轴上延伸。大部分代码如下所示: float PeaksAndValleys::getHeight(float x, float z)
我是一名优秀的程序员,十分优秀!