编译时
void ambig( signed long) { }
void ambig(unsigned long) { }
int main(void) { ambig(-1); return 0; }
我理解为
error C2668: 'ambig' : ambiguous call to overloaded function
could be 'void ambig(unsigned long)'
or 'void ambig(long)'
while trying to match the argument list '(int)'
我知道我可以通过使用-1L
而不是-1
来“修复”它,但为什么/如何这首先被认为是含糊的?
int
转换成long
总是不会丢失信息的。将int
转换成unsigned long
有一半的情况会导致信息丢失。为什么它们在排名上相同?! - user541686-1L
instead of that cast?只是好奇:为什么不直接使用“-1L”而要使用类型转换? - Matsizeof(int)
≤sizeof(long)
。 - Lightness Races in Orbitint
是负数,结果会丢失该信息(因为它总是正数)。能够将其强制转换回来以获得正确的值并不意味着结果本身具有正确的值,对吗? - user541686