I думаю , что различие важно, поскольку оба они не попадают в одну категорию конверсии и имеют различный ранг (см. 13.3.3.1.1 Стандартные последовательности преобразования). Ранг имеет значение, когда дело доходит до разрешения перегрузки:
Стандартные последовательности конвертации упорядочены по их рангу: точное совпадение - лучшая конверсия, чем по рекламной акции,
что является лучшим преобразованием, чем преобразование.
В конце концов, я считаю, что именно различие между 4.5 и 4.7 делает следующий код однозначным:
#include <iostream>
void foo(int i) { std::cout << "foo(int)" << std::endl; }
void foo(unsigned short i) { std::cout << "foo(unsigned short)" << std::endl; }
int main()
{
foo(static_cast<short>(1));
}
short
до int
- повышение по службе (таким образом, получая звание повышения по службе)
short
в unsigned short
- конверсия (таким образом, имеет конверсионный ранг)
В конце этот код вызывает foo(int)
, потому что это лучший кандидат.