[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: NULL É g++



Vlad Harchev <hvv@hippo.ru> writes:

> > >  Более оптимальный вариант
> > > enum { NULL = 0 };
> > 
> > Ничего подобного. Ваш enum полностью эквивалентен тому, если вы в хедере
> > напишете
> > 
> > const int NULL = 0;
> > 
> > Не надо никаких extern'ов городить. extern'ы подразумевают external
> > linkage в C++, что, разумеется, приводит к выделению памяти. ;-)
> 
>   const int NULL = 0; 
> 
>  _приводит_ к выделению памяти, по крайне мере у gcc. Только что проверял с
> помощью nm (написал программу из двух модулей, в каждом из которых было 
> 	const int _NULL = 0;
> , собрал ее; nm сказал что есть две переменных с именем _NULL с различными
> адресами памяти. А насчет extern'ов - вы правы - их не надо упортреблять -
> тогда компилятор будет знать значение константы и будет подставлять ее
> значение напрямую.

Разумеется приводит, поскольку у этого NULL будет external
linkage. Правильно писать

static const int NULL = 0;

Вот тогда компилятор память выделять не будет и получится константа,
аналогичная объявленной в enum, только созданная предназначенными для
этого языковыми средствами.

Попробуй, например, сделать enum'ом что-то вроде

static const float ImportantValue = 0.99999;

:-)

Hope to hear from you soon,
Dmitry




Reply to: