Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Это - стандарт ; 22.11.05 00:08 Число просмотров: 1622
Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 22.11.05 00:09 Количество правок: 1
|
> А на что нацелен (void *)? Сам по себе -- ни на что - это тип. А объект типа (void *) нацелен на область нетипизированных данных. Другими словами - на некую ячейку памяти, не контролируя длинны данных. Это немного другая песня ).
Например, sizeof(void * ) == sizeof(char * ) == sizeof(int * ) == sizeof(any_type * ) -- это ведь указатель. И, по сути, всё равно, куда он указывает. Он имеет фиксированный размер.
В то же время, пустая структура по логике вещей должна иметь нулевой размер, но, к сожалению эта логика нарушается. Хотя... с другой стороны, можно написать пустую функцию void func(void){}.
Бестолковое, конечно, это занятие, но работает (
> > malloc(sizeof(type)); при размере типа > > равным нулю вернет значение NULL. Это создает > > неоднозначность: можно ли использовать результат нуль, или > > он появился вследствие невозможности выделения памяти. > А по фигу. В принципе, верно, но есть более точный вопрос. не можно ли, а нафиг?
Порылся-таки в стандарте. Каюсь. Надо было сразу глянуть, а не гадать. (ISO/IEC 14882)
9. Classes
[...]
A class-name is inserted into the scope in which it is declared immedaitely afret the class-name is seen. The class-nama is also inserted into the scope of the class itself. For purposes of access checking, the inserted class name is treated as if it were a public member name. A class-specifer is commonly referred to as a class defenition. A class is considered defined after the closing brace of its class-specifier has been seen even though its member functions are in general not yet defined.
Complete objects and member subobjects of class type shall have nonzero size. [Note: class objects can be assigned, passed as arguments to functions, and returned by functions (except objects of classes for witch copying has been restricted; see 12.8). Other plausible operators, such as equality comparsion can be defined by user; see 13.5)
[...]
Кратко - по-русски. В стандарте c++ заявлено, что классы могут быть пустыми, а их объекты всегда должны быть ненулевого размера. (напомню, что в c++ ключевыми словами объявления класса являюстся class, structure, union).
Так что, это является задокументированным стандартом для C++. Относительно си - не знаю.
|
|
|