根据 cppreference,该函数acosl应该在 std 命名空间中:https : //en.cppreference.com/w/cpp/numeric/math/acos
但是,使用 gcc(或 clang),以下代码无法编译:
#include <cmath>
int main()
{
long double var = std::acosl(4.0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
gay@latitude-7490:~$ g++ -std=c++11 test.cpp
test.cpp: In function 'int main()':
test.cpp:5:26: error: 'acosl' is not a member of 'std'; did you mean 'acosh'?
5 | long double truc = std::acosl( (long double)4.0);
| ^~~~~
| acosh
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我误读了 cppreference 吗?
这似乎是一个 libstdc++ 错误。
cmathin libstdc++ 不只是包装#include <math.h>in namespace std:它定义了委托给内置函数的新函数。我想一个定义想要添加到这个源代码中。当 C++11(通过 C99)引入该函数时,这可能只是一个疏忽。(尽管请注意,acos(long double __x)重载委托给了__builtin_acosl!)
在 Clang 中,切换到 libc++ 可以解决该问题。对于 libstdc++,使用全局命名空间版本acosl也应该可以工作。
你应该提出一个错误。我认为它已被bug #79700覆盖。