gd 7.2.0无法识别std :: expf和std :: logf
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gd 7.2.0无法识别std :: expf和std :: logf相关的知识,希望对你有一定的参考价值。
似乎gcc(尝试过7.2.0和5.4.0)没有std::expf和std::logf - 请参阅coliru sample。既然cppreference说它们是在C ++ 11中添加的,那么我缺少一些gcc特定的宏,或者它们一般在gcc中丢失了吗?
答案
如果你
#include <cmath>
你会得到
float exp ( float arg );
double exp ( double arg );
long double exp ( long double arg );
double exp ( IntegralType arg );
float log ( float arg );
double log ( double arg );
long double log ( long double arg );
double log ( IntegralType arg );
因此你可以只调用std::exp
/ std::log
并让编译器为你找出重载。如果你想调用不匹配的重载(例如float
变量上的double
重载),我发现在这些情况下添加static_cast
更明确和清晰:
double bla = ...;
return std::exp(static_cast<float>(bla));
这是一个奇怪的结构你编写它的任何方式(例如为什么bla
不是float
开头?),并将其隐藏在单个字母的函数名称后缀中没有帮助任何人。
另一答案
为了让g ++使用C ++ 11,你需要添加
-std=c++11
到编译器命令行。
Ef。:
g++ -o test -std=c++11 test.cc
另一答案
GCC的<cmath>
在全局命名空间中声明函数expf
和logf
及其C Library kin,而不是std::
。在std::
,它宣布exp
和log
的重载达到同样的效果。
以上是关于gd 7.2.0无法识别std :: expf和std :: logf的主要内容,如果未能解决你的问题,请参考以下文章
函数对象无法识别它获得的 param(std::set<int>)