gd 7.2.0无法识别std :: expf和std :: logf

问题描述 投票:0回答:3

似乎gcc(尝试过7.2.0和5.4.0)没有std::expfstd::logf - 请参阅coliru sample。既然cppreference说它们是在C ++ 11中添加的,那么我缺少一些gcc特定的宏,或者它们一般在gcc中丢失了吗?

c++11 gcc
3个回答
1
投票

如果你

#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开头?),并将其隐藏在单个字母的函数名称后缀中没有帮助任何人。


0
投票

为了让g ++使用C ++ 11,你需要添加

-std=c++11

到编译器命令行。

Ef。:

g++ -o test -std=c++11 test.cc

0
投票

GCC的<cmath>在全局命名空间中声明函数expflogf及其C Library kin,而不是std::。在std::,它宣布explog的重载达到同样的效果。

© www.soinside.com 2019 - 2024. All rights reserved.