为什么会出现这个错误
那是唯一的解决方案吗?
C2668: 'abs' : ambiguous call to overloaded function
对于像这样的简单代码
#include <iostream>
#include <cmath>
int main()
{
unsigned long long int a = 10000000000000;
unsigned long long int b = 20000000000000;
std::cout << std::abs(a-b) << "\n"; // ERROR
return 0;
}
移除std::
后错误仍然存在。但是,如果我使用较小值的int
数据类型,则没有问题。
传统的解决方案是手动检查。
std::cout << (a<b) ? (b-a) : (a-b) << "\n";
那是唯一的解决方案吗?
abs
操作?(这不是一个修辞问题) - Marioa-b
的结果不是-10000000000000
,而是std::numeric_limits<unsigned long long>::max()-10000000000000
(仍为unsigned long long)。 - Pixelchemist<<
的优先级高于?:
,所以记得加括号!http://en.cppreference.com/w/cpp/language/operator_precedence - BoBTFish