2016-10-26 12 views
0

Я ищу static_cast with bounded types.Является ли static_cast для ограниченного типа зависимым от реализации?

Является ли поведение конкретным поведением? Другими словами (с учетом 16-битных шорты и 32-битные длинные позиции) является

long x = 70000; 
short y = static_cast<short>(x); 

гарантированно производить у = 4464 (младшие 16 бит х)? Или только на маленькой машине?

Я всегда предполагал, что это будет, но я получаю странные результаты на машине большого конца и пытаюсь понять их.

Вот настоящая проблема. У меня есть два time_t (предположительно 64 бит), которые я «знаю» всегда будет в пределах некоторого разумного количества секунд друг от друга. Я хочу показать эту разницу с printf. Код является многоплатформенным, поэтому вместо того, чтобы беспокоиться о том, что является базовым типом time_t, я делаю printf («% d»), передавая static_cast <int> (time2-time1). Я вижу нуль, несмотря на то, что printf находится в блоке, обусловленном (time2! = Time1). (Printf находится в библиотеке, нет разумной возможности использовать cout вместо этого.)

Возможно ли, что static_cast вернет высокие 32 бита time_t?

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

Спасибо,

+0

Странно. Я набираю static -cast угловой кронштейн int anglebracket (time2-time1), но то, что отображается только static_cast (time2-time1). Мне нужно бежать как static_cast \ \> (time2-time1) или что-то в этом роде? – Charles

+0

Решенный. Необходимо использовать синтаксис амперсандов. – Charles

ответ

0

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