Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Nelkor от Октябрь 18, 2014, 17:32



Название: Qt и sizeof()
Отправлено: Nelkor от Октябрь 18, 2014, 17:32
Вопрос, наверное, детский, но будет ли корректно работать такая конструкция?

Код:
int sizeOfTestList = sizeof(testList);

То есть сохранять в переменную sizeOfTestList размер объекта testList, какого бы класса он не был? И какие в этом случае могут быть подводные камни? Заранее благодарю)

И может быть, размер объекта лучше хранить не в Инте? А тогда в чем лучше? Я понимаю, что есть класс QSize, но имеет ли он сам фиксированный размер или нет? Инт меня привлекает именно фиксированным в 4 байта размером...


Название: Re: Qt и sizeof()
Отправлено: gil9red от Октябрь 18, 2014, 17:55
http://msdn.microsoft.com/ru-ru/library/4s7x1k91.aspx
"Результат оператора sizeof имеет тип size_t, целочисленный тип, определенный во включаемом файле STDDEF.H. Благодаря этому оператору можно избежать жесткого прописывания размеров данных, которые часто зависят от типа комрьютера"


Название: Re: Qt и sizeof()
Отправлено: Nelkor от Октябрь 18, 2014, 18:10
И всё-таки будет корректно работать?)


Название: Re: Qt и sizeof()
Отправлено: Bepec от Октябрь 18, 2014, 18:23
Смотря что смотря как. Если работать будете с объектами Qt, то скорее всего получили размер указателя :D


Название: Re: Qt и sizeof()
Отправлено: kambala от Октябрь 18, 2014, 18:35
Инт меня привлекает именно фиксированным в 4 байта размером...
при сборке 64-битным компилятором приятно удивишься :D

размер объекта далеко не всегда строго равен сумме размеров его полей


Название: Re: Qt и sizeof()
Отправлено: Igors от Октябрь 19, 2014, 10:33
То есть сохранять в переменную sizeOfTestList размер объекта testList, какого бы класса он не был? И какие в этом случае могут быть подводные камни? Заранее благодарю)
Формально да, практически нет. Пример
Код
C++ (Qt)
QString str("This is a text")
int size = sizeof(str);
Какую бы строку ни давали - всегда получите size = 4 (8 в 64 бит). Формально это верно - размер "самого объекта" 4. Но он может разместить 100 Мб в куче, а к этому sizeof уже не имеет отношения