почему 'long' & 'long long' разные типы?
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.10.14 09:05
Оценка: :))) :)))
привет!

почему на 64ех битной платформе std::is_same<long, long long>::value возвращает false, в то время как sizeof(long) == sizeof(long long) возвращает true ?
в чем разница?
почему оно так?
и для чего?

спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: почему 'long' & 'long long' разные типы?
От: Klikujiskaaan КНДР  
Дата: 07.10.14 09:11
Оценка: 12 (1) +1
Здравствуйте, niXman, Вы писали:

X>привет!


X>почему на 64ех битной платформе std::is_same<long, long long>::value возвращает false, в то время как sizeof(long) == sizeof(long long) возвращает true ?

X>в чем разница?
X>почему оно так?
X>и для чего?

X>спасибо.


Думаюб, здесь отвечено: здесь
Re[2]: почему 'long' & 'long long' разные типы?
От: watchyourinfo Аргентина  
Дата: 07.10.14 09:23
Оценка:
K>Думаюб, здесь отвечено: здесь

субоптимально ты думаешь
Re: почему 'long' & 'long long' разные типы?
От: Sni4ok  
Дата: 07.10.14 09:26
Оценка:
Здравствуйте, niXman, Вы писали:

X>в чем разница?


потому что разные интегральные типы, и требования от стандарта только, что
sizeof(long long) >= sizeof(long)

X>почему оно так?

X>и для чего?
это не правильные вопросы, и не нужные, это данность и всё.

нужна фиксировання размерность-
используйте int32_t, int64_t и т.д.
Re: почему 'long' & 'long long' разные типы?
От: saf_e  
Дата: 07.10.14 09:26
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>привет!


X>почему на 64ех битной платформе std::is_same<long, long long>::value возвращает false, в то время как sizeof(long) == sizeof(long long) возвращает true ?

X>в чем разница?
X>почему оно так?
X>и для чего?

X>спасибо.


Я вас наверное удивлю, но std::is_same<long, int>::value и std::is_same<double, long double>::value произведут тот же эффект
Re: почему 'long' & 'long long' разные типы?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.10.14 09:31
Оценка:
Здравствуйте, niXman, Вы писали:

X>привет!


X>почему на 64ех битной платформе std::is_same<long, long long>::value возвращает false, в то время как sizeof(long) == sizeof(long long) возвращает true ?

X>в чем разница?
X>почему оно так?
X>и для чего?

Для избавления от ложного доверия на случай переноса?
Надо ещё сравнить их же с int64_t, если различаются — значит, та же проблема.

Так же gcc реагирует на подстановку int64_t к %lld, хотя они на конкретной платформе совпадают.
The God is real, unless declared integer.
Re[2]: почему 'long' & 'long long' разные типы?
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.10.14 09:32
Оценка:
Здравствуйте, saf_e, Вы писали:

_>Я вас наверное удивлю, но std::is_same<long, int>::value и std::is_same<double, long double>::value произведут тот же эффект

та это я знаю =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: почему 'long' & 'long long' разные типы?
От: jazzer Россия Skype: enerjazzer
Дата: 07.10.14 09:38
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>почему на 64ех битной платформе std::is_same<long, long long>::value возвращает false, в то время как sizeof(long) == sizeof(long long) возвращает true ?

X>в чем разница?

разные типы

X>почему оно так?


Если бы они были опционально одним и тем же типом в зависимости от платформы, то на этих платформах ломалась бы перегрузка (по неоднозначности) и пришлось бы заниматься специальными приседаниями, чтоб перегрузка для long long не попадала в компилятор на тех платформах, где они одинаковы (т.е. #ifdef и прочие радости).
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: почему 'long' & 'long long' разные типы?
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.10.14 09:41
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Если бы они были опционально одним и тем же типом в зависимости от платформы, то на этих платформах ломалась бы перегрузка (по неоднозначности) и пришлось бы заниматься специальными приседаниями, чтоб перегрузка для long long не попадала в компилятор на тех платформах, где они одинаковы (т.е. #ifdef и прочие радости).


да, уже понял.

спасибо Klikujiskaaan.

вопрос закрыт.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: почему 'long' & 'long long' разные типы?
От: _DAle_ Беларусь  
Дата: 07.10.14 09:43
Оценка:
Здравствуйте, niXman, Вы писали:

X>привет!


X>почему на 64ех битной платформе std::is_same<long, long long>::value возвращает false, в то время как sizeof(long) == sizeof(long long) возвращает true ?

X>в чем разница?
X>почему оно так?
X>и для чего?

Потому что std::is_same проверяет на одинаковость типов, а не на одинаковость представлений этих типов. Например, std::is_same<char, signed char>::value будет false на любой платформе, потому что это разные типы, а std::is_same<int, signed int>::vlue будет равно true, так как это один и тот же тип. А использоваться это должно в шаблонном коде, где типы неизвестны.

X>спасибо.
Re[2]: почему 'long' & 'long long' разные типы?
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.10.14 09:45
Оценка:
Здравствуйте, _DAle_, Вы писали:

_DA>Потому что std::is_same проверяет на одинаковость типов, а не на одинаковость представлений этих типов. Например, std::is_same<char, signed char>::value будет false на любой платформе, потому что это разные типы, а std::is_same<int, signed int>::vlue будет равно true, так как это один и тот же тип. А использоваться это должно в шаблонном коде, где типы неизвестны.


да, я уже понял что вопрос некорректен.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: почему 'long' & 'long long' разные типы?
От: uzhas Ниоткуда  
Дата: 07.10.14 11:49
Оценка:
Здравствуйте, niXman, Вы писали:

X>почему оно так?

зоопарк типов

X>и для чего?

для обратной совместимости
Re[2]: почему 'long' & 'long long' разные типы?
От: uzhas Ниоткуда  
Дата: 07.10.14 12:43
Оценка:
Здравствуйте, uzhas, Вы писали:

X>>почему оно так?


аналогичный гемор с size_t, который иногда совпадает с unsigned, а иногда не совпадает
Re[3]: почему 'long' & 'long long' разные типы?
От: B0FEE664  
Дата: 07.10.14 14:32
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, uzhas, Вы писали:


X>>>почему оно так?


U>аналогичный гемор с size_t, который иногда совпадает с unsigned, а иногда не совпадает


Вы меня так не пугайте! size_t всегда unsigned integer type.

18.2/6
The type size_t is an implementation-defined unsigned integer type that is large enough to contain the size
in bytes of any object.

И каждый день — без права на ошибку...
Re[4]: почему 'long' & 'long long' разные типы?
От: watchmaker  
Дата: 07.10.14 14:51
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, uzhas, Вы писали:


U>>Здравствуйте, uzhas, Вы писали:


X>>>>почему оно так?


U>>аналогичный гемор с size_t, который иногда совпадает с unsigned, а иногда не совпадает


BFE>size_t всегда unsigned integer type.


И что? unsigned integer type — это не всегда unsigned. Верно лишь обратное, что unsigned является unsigned integer type.
Соответственно ничто не мешает size_t иногда не совпадать с unsigned.
Неудачный пример(tm)
От: slava_phirsov Россия  
Дата: 07.10.14 15:14
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Вы меня так не пугайте! size_t всегда unsigned integer type.


ЕМНИП, size_t должен быть определен в <cstddef>, через typedef, т.е. формально может совпасть с любым "настоящим" встроенным типом. Что в корне отличается от ситуации с long и long long
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Отредактировано 07.10.2014 15:16 slava_phirsov . Предыдущая версия .
Re[5]: почему 'long' & 'long long' разные типы?
От: B0FEE664  
Дата: 07.10.14 16:26
Оценка:
Здравствуйте, watchmaker, Вы писали:

U>>>аналогичный гемор с size_t, который иногда совпадает с unsigned, а иногда не совпадает

BFE>>size_t всегда unsigned integer type.
W>И что? unsigned integer type — это не всегда unsigned. Верно лишь обратное, что unsigned является unsigned integer type.
W>Соответственно ничто не мешает size_t иногда не совпадать с unsigned.

Если вы под unsigned подразумеваете unsigned int (а не unsigned type), то, разумеется, size_t может с ним не совпадать. Ну и что тут такого "геморройного"?
И каждый день — без права на ошибку...
Re[3]: почему 'long' & 'long long' разные типы?
От: AleksandrN Россия  
Дата: 08.10.14 03:20
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, uzhas, Вы писали:


X>>>почему оно так?


U>аналогичный гемор с size_t, который иногда совпадает с unsigned, а иногда не совпадает


Если под unsigned ты понимаешь unsigned int, то да, может не совпадать. Но size_t — всегда беззнаковый, обычно unsigned long. Есть ещё знаковый тип ssize_t.
Re[4]: почему 'long' & 'long long' разные типы?
От: Ops Россия  
Дата: 08.10.14 04:43
Оценка:
Здравствуйте, AleksandrN, Вы писали:

AN>Есть ещё знаковый тип ssize_t.


В стандарте нет. Есть streamsize со сноской, что в posix ему соответствует ssize_t
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.