我试着编译这段代码:
#include <cmath>
double gravity (double level) {
return 0.02 * std::round(level);
}
Run Code Online (Sandbox Code Playgroud)
但海湾合作委员会告诉我:
error: 'round' is not a member of 'std'
Run Code Online (Sandbox Code Playgroud)
我知道我以前round
在ISO C++ 98中多次使用过该功能.与众不同的是,round
与::round
这两个工作.
是什么赋予了?
更新:我正在编译g++ -std=c++98 -Wall -pedantic
.切换到std=c++0x
工作.
但是为什么不合格/匿名round
并且::round
两者都有效std::round
呢?
Qua*_*key 12
我做了一些研究,这是我发现的:
round
在ISO C++ 11中定义,因为它包含ISO C99标准库.
round
不是ISO C++ 98的一部分,它使用ISO C90标准库.
这就是为什么它不在C++ 98的命名空间std
中.
但是g++
(错误地)包括C99标题,即使在编译时-std=c++98 -pedantic
,也应禁用所有非标准内容:
GNU_SOURCE由G ++定义,它意味着_USE_ISOC99
(来自http://gcc.gnu.org/ml/gcc/2002-09/msg00580.html)
这就是为什么::round
有效.
这显然是GCC中的一个错误:为什么GCC允许在C++中使用round(),即使使用ansi和pedantic标志?
其他C++编译器可能不提供round
函数(因为它不是标准所要求的),所以我应该定义自己的函数.
小智 5
旧主题,但可能对在 google 中搜索的人有用:
//TODO: C++11 got round() function defined in math.h
float distance = sqrt((float)(plus_x * plus_x + plus_y * plus_y));
if (distance >= floor(distance)+0.5) distance = ceil(distance);
else distance = floor(distance);
Run Code Online (Sandbox Code Playgroud)
小智 5
怎么样
float myRoundFunc(float toRound)
{
return std::ceil(toRound - 0.5);
}
Run Code Online (Sandbox Code Playgroud)
那样就没有比较了,它会圆滑.
归档时间: |
|
查看次数: |
28331 次 |
最近记录: |