Зависит ли static_cast от реализации ограниченных типов?

Я смотрю на 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?

Есть лучший способ это сделать?

Спасибо,


person Charles    schedule 26.10.2016    source источник
comment
Странный. Я набираю угловую скобку static_cast int anglebracket (time2-time1), но отображается просто static_cast (time2-time1). Мне нужно экранировать как static_cast\‹int›\›(time2-time1) или что-то в этом роде?   -  person Charles    schedule 26.10.2016
comment
Решено. Необходимо использовать синтаксис амперсанда.   -  person Charles    schedule 26.10.2016


Ответы (1)


Я думаю, что, возможно, проблема не была связана с static_cast. Путаница с платформой #ifdef. Мне все еще было бы интересно, если бы кто-то точно знал ответ.

person Charles    schedule 26.10.2016