Пример:
u*3-i |
unsigned |
f*3-i |
float |
3*s*lg |
long |
d+s |
double |
char с; short s; int i; long Ig; float f; double d; unsigned u;
Выражение |
Тип |
c-s/i |
int |
u*3.0-i |
double |
c+1 |
int |
c+1.0 |
double |
Автоматическое преобразование может происходить при присваивании:
d=i //повышение (расширение) типа
i=d //понижение (сужение) типа. Может привести к потере информации
Существует явное преобразование, называемое приведением (cast):
static_cast<double>(i)
static_cast<int>(d)
static_cast говорит компилятору, чтобы он сгенерировал такое преобразование, чтобы значение после преобразования максимально соответствовало значению до преобразования.
reinterpret_cast<char*>(OxfffiO)
reinterpret_cast говорит компилятору, чтобы он сгенерировал такое преобразование, чтобы цепочка бит до преобразования максимально соответствовала цепочке бит после преобразования. reinterpret_cast осуществляет приведение любого типа указателя в любой тип указателя, а также приведение между интегральным типом и типом указателя.
dynamic_cast - для преобразования с проверкой на этапе выполнения.
const_cast<int>(c_var) - отмена действия модификатора const.
Унаследованная от С форма записи явного преобразования (не рекомендуется использовать):
(Т)е,
означает любое преобразование, которое может быть выражено комбинацией static_cast, reinterpret_cast и const_cast для получения значения типа Т из выражения е.
Функциональный стиль приведения
Т(е)
Т(е1,е2) - если Т - определяемый пользователем тип
2.6. Перечисления.
Тип enum задает набор значений, определяемый пользователем. Элемента-• ми перечисления являются именованные целые константы. Например:
enum keyword {ASM, AUTO, BREAK}
- так определяется тип keyword, который
может принимать значения ASM,
AUTO, BREAK. Кроме того определяются целые константы
ASM==0,
AUTO=1,BREAK==2.
keyword kw=ASM, kwl=BREAK;
- так определяются переменные типа keyword
и инициализируются.
Можно инициализировать константы перечислимого типа произвольными
целыми значениями: enumel{a=3,b=5};
Перечислимые константы могут объявляться анонимно: enum {MIN=0, MAX=99}; enum {small, normal, big} cat;
2.7. Объявления (declarations) и определения (definitions) Прежде чем имя (идентификатор) может быть использовано в программе на C++, оно должно быть объявлено. То есть должен быть указан тип имени, чтобы компилятор знал, на сущность какого типа ссылается имя.
extern const double pi;//объявлено, но не определено
int main()
{
double area;//объявлено, определено, не инициализировано double radius=5.5;//объявлено, определено, инициализировано area=pi*radius*radius;//это не инициализация, а присваивание return 0;
}
const double pi=3.14;//объявлено и определено
Здесь объявления area и radius являются еще и определениями (definitions), то есть под них выделяется память. Каждая переменная может иметь несколько объявлений, но только одно определение.
Определение может инициализировать переменную. Синтаксически инициализация представляет собой имя идентификатора с последующим инициализатором. Для простых переменных:
тип идентификатор = выражение; {
int 1=5;
double x=0.777, y=x+i;
cout«x«'\t' «у; // 0.777 5.777
char cl,c2='I cout«c2; cout«cl; |
//cl не инициализирована // В //мусор
Инициализировать можно при помощи произвольного выражения при условии, что все переменные и функции, используемые в выражении, определены.
Инициализация обычно эффективнее, чем определение с последующим
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.