Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
h3mbr0
285 / 95 / 22
Регистрация: 12.03.2012
Сообщений: 380
#1

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

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

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

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

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости - C++
Добрый день,столкнулся с проблемой "Выражение должно относиться к целочисленному типу или типу перечисления без области видимости" в такой...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости - C++
#include <iostream> #include <cmath> using namespace std; int main() { int N; double Y = 0; setlocale(0,""); cout <<...

2IntelliSense: выражение должно относиться к целочисленному типу или типу перечисления без области видимости - C++
"Выражение должно относиться к целочисленному типу или типу перечисления без области видимости" Что это за ошибка такая и как ее исправить?...

Fwrite (buffer , sizeof(char), sizeof(buffer), pFile) - C++
как записать часть массива чаров? допустим у нас arr; мне надо записать с позиции массива 500 до 600, 100 байтов как записать эту...

что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) - C++
1) что происходит со старым конструктором когда я создаю новый, пренадлежащий производному классу? (первый конструктор пренадлежит базовому...

5
MrCold
857 / 755 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
29.09.2012, 17:55 #2
К типу - объекта может ведь не быть
C++
1
2
3
Type* obj = (Type*) malloc(sizeof(Type));
.......
free(obj );
1
h3mbr0
285 / 95 / 22
Регистрация: 12.03.2012
Сообщений: 380
29.09.2012, 18:09  [ТС] #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"
0
MrCold
857 / 755 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
29.09.2012, 18:38 #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)
;
и т.д
1
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.09.2012, 19:47 #5
MrCold, Тип не может поменяться, поскольку C++ - статически типизированный язык. Использование переменной вместо типа объясняется тем, что кто-то сначала объявляет переменную типа T, а затем ее тип меняют на U(не преобразовывают, а в буквальном смысле меняют: было написано T var, а стало U var).
2
Evg
Эксперт CАвтор FAQ
18685 / 6648 / 468
Регистрация: 30.03.2009
Сообщений: 18,614
Записей в блоге: 29
30.09.2012, 12:12 #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++?

2
30.09.2012, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2012, 12:12
Привет! Вот еще темы с ответами:

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

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

sizeof( char * ) & sizeof(char) - C++
Здравствуйте, не могу понять почему sizeof(char *) = 4 а sizeof(char) = 1. Ну с последним ясно , а вот с первым непойму... Может кто-то...

Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? - C++
Это можно : Array a(10); a.set(0,5); Array b(a); А это нельзя : Array a(10); Array b(20); a = b;


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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