Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
h3mbr0
206 / 49 / 9
Регистрация: 12.03.2012
Сообщений: 278
#1

sizeof к объекту или типу? - C++

29.09.2012, 17:33. Просмотров 524. Ответов 5
Метки нет (Все метки)

Доброго времени суток! Видел где-то обсуждение, о том к чему надо применять sizeof - к классу или объекту. Мнения были разные, но либо не аргументированные, либо язык их высказываний был для меня непонятен Прошу объяснить мне есть ли разница, и если есть, то в чем она заключается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2012, 17:33     sizeof к объекту или типу?
Посмотрите здесь:

Sizeof(.) или constexpr size_t tmp = sizeof(.) - C++
sizeof(...) или constexpr size_t tmp = sizeof(...) Как лучше с точки зрения производительности? правильности?

Как в условии поставить проверку принадлежности к тому или иному типу? - C++
Как в условии поставить проверку принадлежности к тому или иному типу? Например: if (переменная принадлежит к целочисленном...

Ошибка: не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору - C++
Здравствуйте! Не могу понять, почему так нельзя делать (Ошибка: не определяет этот оператор или преобразование к типу приемлемо к...

ошибки "Complex" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору - C++
заголовочный файл #include <iostream> #include <iostream> #include <conio.h> #include <math.h> using namespace...

бинарный "++": "Counter" не определяет этот оператор или преобразование к типу приемлемо к встроенному - C++
бинарный "++": "Counter" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору #include <iostream> ...

Operator sizeof - C++
Кто-нибудь знает как реализован этот оператор? И когда он выполняется: на уровне компиляции или во время исполнения?

sizeof массива - C++
void f(float x) { printf("%d\n",sizeof(x)); // Пишет 4 байта (размер элемента массива) } void f2(float x) {...

Sizeof глючит ? - C++
простой пример на вижуал с++2013: #include <iostream> using namespace std; struct MyStruct { short gg; int tt; //int...

оператор sizeof - C++
Добрый вечер! Был сделан тест. Есть класс class A { int a; char b; double c; }; В программе:

Sizeof структуры - C++
Объясните, почему sizeof(test) == 24, а не 18, как я полагал ? struct test { uint64_t param1; unsigned char param2; }; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
29.09.2012, 17:55     sizeof к объекту или типу? #2
К типу - объекта может ведь не быть
C++
1
2
3
Type* obj = (Type*) malloc(sizeof(Type));
.......
free(obj );
h3mbr0
206 / 49 / 9
Регистрация: 12.03.2012
Сообщений: 278
29.09.2012, 18:09  [ТС]     sizeof к объекту или типу? #3
А если речь идет о не об инициализации?
Гугл пишет:

Use sizeof(varname) because it will update appropriately if the type of the variable changes. sizeof(type) may make sense in some cases, but should generally be avoided because it can fall out of sync if the variable's type changes.

Struct data;
C++
1
2
3
memset(&data, 0, sizeof(data));
 
memset(&data, 0, sizeof(Struct));
Но я недопонимаю о чем идет речь... а точнее как может "the type of the variable changes"
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
29.09.2012, 18:38     sizeof к объекту или типу? #4
Т.е. имеется в виду по возможности не использовать имя типа
Тип может поменяться. Имеется в виду преобразование типов
C++
1
2
3
4
5
6
7
8
9
10
Class A
..........
Class B
..........
 
A obj1;
B obj2;
 
obj1 = obj2;
obj1 = static_cast<A>(obj2)
;
и т.д
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.09.2012, 19:47     sizeof к объекту или типу? #5
MrCold, Тип не может поменяться, поскольку C++ - статически типизированный язык. Использование переменной вместо типа объясняется тем, что кто-то сначала объявляет переменную типа T, а затем ее тип меняют на U(не преобразовывают, а в буквальном смысле меняют: было написано T var, а стало U var).
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,652
Записей в блоге: 26
30.09.2012, 12:12     sizeof к объекту или типу? #6
Цитата Сообщение от h3mbr0 Посмотреть сообщение
Прошу объяснить мне есть ли разница, и если есть, то в чем она заключается?
Технически разницы нет. sizeof применяется либо к типу, либо к выражению (а переменная - это частный случай выражения)

Добавлено через 1 минуту
Цитата Сообщение от MrCold Посмотреть сообщение
К типу - объекта может ведь не быть
C++
1
2
3
Type* obj = (Type*) malloc(sizeof(Type));
.......
free(obj );
Можно вполне написать и так:

C++
Type* obj = (Type*) malloc(sizeof(*obj));
Добавлено через 1 минуту

Не по теме:

А по поводу приведения типа после malloc'а - Есть ли в Си аналог std::fill() в C++?

Yandex
Объявления
30.09.2012, 12:12     sizeof к объекту или типу?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru