В x86_64 CentOS 7 GCC 4.8.5 С++ 11:
#include <iostream>
int main()
{
std::cout << ((ssize_t)1 - (size_t)5) << '\n';
}
// Output: 18446744073709551612
Но:
#include <iostream>
int main()
{
std::cout << ((ssize_t)1 - (unsigned int)5) << '\n';
}
// Output: -4
И на i686 CentOS 6 GCC 4.8.2 С++ 11 оба они дают 4294967292
, поэтому я должен это сделать:
#include <iostream>
int main()
{
std::cout << ((ssize_t)1 - (ssize_t)5) << '\n';
}
// Output: -4
Совершенно надуманный пример, очевидно, и я понимаю, что я нажимаю различные статьи в интегральных правилах продвижения в зависимости от эквивалентности типов, определенных платформой/реализацией, но в четверг мой мозг не может разгадать их для строгих оценка.
Что именно представляет собой последовательность стандартных правил, которая приводит меня к этим результатам?