Если были подобные вопросы, пожалуйста, направьте меня туда, я некоторое время искал в тишине, но ничего не нашел.
Фон:
Я просто играл и обнаружил некоторое поведение, которое я не могу полностью объяснить... Для примитивных типов это похоже на то, что при неявном преобразовании оператор присваивания = занимает больше времени по сравнению с явным присваиванием.
int iTest = 0;
long lMax = std::numeric_limits<long>::max();
for (int i=0; i< 100000; ++i)
{
// I had 3 such loops, each running 1 of the below lines.
iTest = lMax;
iTest = (int)lMax;
iTest = static_cast<int>(lMax);
}
В результате приведение в стиле c и static_cast в стиле c++ в среднем выполняется одинаково (каждый раз различается, но видимой разницы нет). И они оба превосходят неявное назначение.
Result:
iTest=-1, lMax=9223372036854775807
(iTest = lMax) used 276 microseconds
iTest=-1, lMax=9223372036854775807
(iTest = (int)lMax) used 191 microseconds
iTest=-1, lMax=9223372036854775807
(iTest = static_cast<int>(lMax)) used 187 microseconds
Вопрос:
Почему неявное преобразование приводит к большей задержке? Я могу предположить, что в присваивании должно быть обнаружено, что int переполняется, поэтому настроено на -1. Но что именно происходит в задании?
Спасибо!