Size: a a a

2020 July 04

A

Alex in pro.cxx
а не только size_t
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
а не только size_t
Но size_t это и будут "все"
источник

ПК

Побитый Кирпич... in pro.cxx
И пока не понял как может быть так, что sizeof(size_t) ==  8, но при этому size_t не uint64_t
источник

A

Alex in pro.cxx
на 32-битных системах - нет
источник

m

magras in pro.cxx
Alex
class A { 
  A(uint32_t);
  A(uint64_t);
};

A a(sizeof(int)); // На одних платформах скомпилится, на других - нет
А почему это не должно компилиться?
источник

ПК

Побитый Кирпич... in pro.cxx
То есть size_t одновременно uint32_t и размер его 8?
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
на 32-битных системах - нет
На 32-битных и размер будет 4
источник

A

Alex in pro.cxx
magras
А почему это не должно компилиться?
потому что size_t и uint64_t - один и тот же тип
источник

m

magras in pro.cxx
Alex
потому что size_t и uint64_t - один и тот же тип
И в чем проблема? Вызовется же перегрузка с uint64 и все. Или помимо этих двух перегрузок нужно еще добавить перегрузку для size_t?
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
на 32-битных системах - нет
На 32-битных size_t и uint32_t это синонимы, на 64-битных size_t и uint64_t синонимы. Итого имея одну функцию, ты обрабатываешь одновременно обе системы
источник

A

Alex in pro.cxx
"на 64-битных size_t и uint64_t синонимы" - ложь. И именно в этом проблема.
источник

ПК

Побитый Кирпич... in pro.cxx
Это где так?
источник

A

Alex in pro.cxx
На маке
источник

ПК

Побитый Кирпич... in pro.cxx
ясно
источник

A

Alex in pro.cxx
на 64 битах size_t может быть ulong, а может ulonglong. uint64_t тоже. И, видимо, в стандарте не прописано, что это должен быть один и тот же тип.
источник

m

magras in pro.cxx
Alex
на 64 битах size_t может быть ulong, а может ulonglong. uint64_t тоже. И, видимо, в стандарте не прописано, что это должен быть один и тот же тип.
Это все еще не является большой проблемой, пока sizeof(long) == sizeof(long long).
источник

A

Alex in pro.cxx
это большая проблема, потому что оказывается, что в куче классов у тебя нет подходящей перегрузки, хотя семантически она есть.
источник

m

magras in pro.cxx
Да, я не прав. Не всегда компилятор сможет выбрать перегрузку.
источник

v

vehlwn in pro.cxx
Alex
Как думаете, что ему не нравится? GCC компилит.
https://godbolt.org/z/bH2iZC
Это точно вопрос в этот чат? Зачем надеяться на равенство size_t  == uint64_t?
источник

A

Alex in pro.cxx
В смысле? Вопрос был ровно в обратном - как корректно добавить перегрузку для size_t, и не сломать те платформы, где это действительно один и тот же тип.
источник