似乎gcc(尝试7.2.0和5.4.0)没有std :: expf和std :: logf-请参阅coliru 示例。由于cppreference表示它们是在C ++ 11中添加的,我是否缺少某些gcc特定宏,或者它们在gcc中总体上还是缺失的?
这是 libstdc++ 中的一个错误,它随 GCC 一起提供。它不完全符合 C++17(截至 2019 年 6 月的 v9.1.0)。<cmath>Ubuntu 默认使用的版本的版权声明说它最后一次更新是在 2016 年。版本 9.1.0 确实有一个#if __cplusplus > 201402L部分,但它没有声明 C++17 所需的标识符。 有一个开放的错误报告。
它永远不会在命名空间中声明expfor logf(也不cosf是sinf,等)std::,即使C++17 说它应该。 在C ++ 11标准说,“这是用C语言定义函数的名称应定义为C函数++标准库”,从标准C库,“每名具有外部链接被保留,以用作实施申报在全局命名空间extern "C"中namespace std和全局命名空间中具有链接的名称。” 然而,std::expf等。在 2016 年 6 月由P0175r1<cmath>之前提供的函数表中缺少。这显然是一个疏忽,但 GCC 始终仅在全局命名空间中提供它们。
在libc中++库不声明它们,有这么编译clang++ -std=c++17 -stdlib=libc++应该工作。你也可以#include <math.h>使用他们在全局命名空间,或使用过载exp(),log()上浮参数等。
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |