gpt4 book ai didi

c++11 - gcc 7.2.0 无法识别 std::expf 和 std::logf

转载 作者:行者123 更新时间:2023-12-04 11:45:33 26 4
gpt4 key购买 nike

似乎gcc(试过7.2.0和5.4.0)没有std::expfstd::logf - 见coliru sample .由于 cppreference 说它们是在 C++11 中添加的,是否有一些我缺少的特定于 gcc 的宏,或者它们通常在 gcc 中丢失?

最佳答案

这是 libstdc++ 中的一个错误,它随 GCC 一起提供。它不完全符合 C++17 ( as of v9.1.0 in June 2019 )。 <cmath>版本版权声明Ubuntu 默认使用的说它上次更新是在 2016 年。版本 9.1.0 确实有 #if __cplusplus > 201402L部分,但它没有声明 C++17 所需的标识符。 There is an open bug report.

它从不声明 expflogf (也不是 cosfsinf 等)在 std:: 中命名空间,即使 C++17 says it shall. C++11 standard说,“在 C 中定义为函数的名称应在 C++ 标准库中定义为函数,”和“标准 C 库中使用外部链接声明的每个名称都保留给实现以用作名称 extern "C"联动,均在 namespace std并在全局命名空间中。”然而,std::expf等。 <cmath> 提供的函数表中缺少直到 P0175r1 in June 2016.这显然是一个疏忽,但 GCC 一直让它们只在全局命名空间中可用。

libc++库确实声明了它们,因此使用 clang++ -std=c++17 -stdlib=libc++ 进行编译应该管用。您也可以 #include <math.h>在全局命名空间中使用它们,或使用重载 exp() , log()等关于浮点参数。

关于c++11 - gcc 7.2.0 无法识别 std::expf 和 std::logf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55458487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com