Я смотрю на static_cast с ограниченными типами .
Является ли поведение специфичным для реализации? Другими словами (с учетом 16-битных шорт и 32-битных длин)
long x = 70000;
short y = static_cast<short>(x);
гарантированно даст y = 4464 (младшие 16 бит x)? Или только на машине с прямым порядком байтов?
Я всегда предполагал, что это произойдет, но я получаю странные результаты на машине с прямым порядком байтов и пытаюсь их понять.
Вот собственно проблема. У меня есть два time_t (предположительно 64 бита), которые, как я «знаю», всегда будут находиться в пределах некоторого разумного количества секунд друг от друга. Я хочу отобразить эту разницу с помощью printf. Код мультиплатформенный, поэтому вместо того, чтобы беспокоиться о базовом типе time_t, я выполняю printf("%d"), передавая static_cast‹int›(time2-time1). Я вижу ноль, несмотря на то, что printf находится в блоке с условием (time2 != time1). (printf находится в библиотеке; разумной возможности использовать вместо него cout нет.)
Возможно ли, что static_cast возвращает старшие 32 бита time_t?
Есть лучший способ это сделать?
Спасибо,