Читаем C++ для начинающих полностью

Не является константным выражением и значение неконстантного объекта. Его нельзя использовать в качестве аргумента для параметра-константы шаблона. Однако адрес любого объекта в области видимости пространства имен, в отличие от адреса локального объекта, является константным выражением (даже если спецификатор const отсутствует), поэтому его можно применять в качестве аргумента для параметра-константы. Константным выражением будет и значение оператора sizeof:

template int size Buf { ... };

template int *ptr class BufPtr { ... };

int size_val = 1024;

const int c_size_val = 1024;

Buf 1024 buf0; // правильно

Buf c_size_val buf1; // правильно

Buf sizeof(size_val) buf2; // правильно: sizeof(int)

BufPtr &size_val & bp0; // правильно

// ошибка: нельзя вычислить во время компиляции

Buf

Вот еще один пример, иллюстрирующий использование параметра-константы для представления константного значения в определении шаблона, а также применение его аргумента для задания значения этого параметра:

template class Type, int size

class FixedArray {

public:

FixedArray( Type *ar ) : count( size )

{

for ( int ix = 0; ix size; ++ix )

array[ ix ] = ar[ ix ];

}

private:

Type array[ size ];

int count;

};

int ia[4] = { 0, 1, 2, 3 };

FixedArray

Выражения с одинаковыми значениями считаются эквивалентными аргументами для параметров-констант шаблона. Так, все три экземпляра Screen ссылаются на один и тот же конкретизированный из шаблона класс Screen:

const int width = 24;

const int height = 80;

// все это Screen 24, 80

Screen

Между типом аргумента шаблона и типом параметра-константы допустимы некоторые преобразования. Их множество является подмножеством преобразований, допустимых для аргументов функции:

1. трансформации l-значений, включающие преобразование l-значения в r-значение, массива в указатель и функции в указатель:

template int *ptr class BufPtr { ... };

int array[10];

BufPtr array bpObj; // преобразование массива в указатель

1. преобразования квалификаторов:

template class Ptr { ... };

int iObj;

Ptr &iObj & pObj; // преобразование из int* в const int*

1. расширения типов:

template int hi, int wid class Screen { ... };

const short shi = 40;

const short swi = 132;

Screen shi, swi bpObj2; // расширения типа short до int

1. преобразования целых типов:

template unsigned int size Buf{ ... };

Buf 1024 bpObj; // преобразование из int в unsigned int

(Более подробно они описаны в разделе 9.3.)

Рассмотрим следующие объявления:

extern void foo( char * );

extern void bar( void * );

typedef void (*PFV)( void * );

const unsigned int x = 1024;

template class Type,

unsigned int size,

PFV handler class Array { ... };

Arrayint, 1024U, bar a0; // правильно: преобразование не нужно

Arrayint, 1024U, foo a1; // ошибка: foo != PFV

Arrayint, 1024, bar a2; // правильно: 1024 преобразуется в unsigned int

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных