鉴于以下计划:
#include <cmath>
int main()
{
std::abs(0u) ;
}
Run Code Online (Sandbox Code Playgroud)
gcc并且clang不同意这是否是不正确的.使用gcc与libstdc++代码建立无错误或警告(见直播),同时采用clang与libc++它生成以下错误(见直播):
error: call to 'abs' is ambiguous
std::abs(0u) ;
^~~~~~~~
Run Code Online (Sandbox Code Playgroud)
哪个结果是正确的?应该abs(0u)是暧昧与否?
MSalters指出了一个有趣的相关问题:std :: abs的模板版本.
我正在尝试编译以下代码:
#include <stdlib.h>
static
unsigned iSqr( unsigned i )
{
unsigned res1 = 2;
unsigned res2 = i/res1;
while( abs( res1 - res2 ) > 1 )
{
res1 = (res1 + res2)/2;
res2 = i/res1;
}
return res1 < res2 ? res1 : res2;
}
Run Code Online (Sandbox Code Playgroud)
使用g++ test.cc -o test。
但是,g++ 编译器失败并出现以下错误:
test.cc: In function 'unsigned int iSqr(unsigned int)':
test.cc:8:29: error: call of overloaded 'abs(unsigned int)' is ambiguous
while( abs( res1 - res2 ) > 1 )
^ …Run Code Online (Sandbox Code Playgroud)