Это неоднозначно, потому что 0
имеет тип int
, а не size_t
.Он может преобразовывать либо в size_t
, либо в указатель, поэтому, если у вас перегружены оба, это неоднозначно.В общем, я бы порекомендовал, если у вас перегружены функции, и одна из них может принимать целочисленный тип, вы добавляете перегрузку для int
, возможно, в соответствии с:
inline void DoSomething( int aiValue )
{
DoSomething( static_cast<size_t>( aiValue ) );
}
Интегральные литералы имеютвведите int
по умолчанию (если они не слишком велики, чтобы поместиться в int
), и, предоставляя точное совпадение, вы избежите двусмысленности.