Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / C / C++ / Введение в язык C++ / Описания и Константы /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Типы - Программирование от RIN.RU
Типы



Неявное Преобразование Типа


Основные типы можно свободно сочетать в присваиваниях и выражениях. Везде, где это возможно, значения преобразуются так, чтобы информация не терялась.


Существуют случаи, в которых информация может теряться или искажаться. Присваивание значения одного типа переменной другого типа, представление которого содержит меньшее число бит, неизбежно является источником неприятностей. Допустим, например, что следующая часть программы выполняется на машине с двоичным дополнительным представлением целых и 8-битовыми символами:


int i1 = 256+255;
char ch = i1 // ch == 255
int i2 = ch; // i2 == ?


В присваивании ch=i1 теряется один бит (самый значимый!), и ch будет содержать двоичный код "все-единицы" (т.е. 8 единиц); при присваивании i2 это никак не может превратиться в 511! Но каким же может быть значение i2? На DEC VAX, где char знаковые, ответ будет -1; на AT&T 3B-20, где char беззнаковые, ответ будет 255. В C++ нет динамического (т.е. действующего во время исполнения) механизма для разрешения такого рода проблем, а выяснение на стадии компиляции вообще очень сложно, поэтому программист должен быть внимателен.


Производные Типы


Другие типы модно выводить из основных типов (и типов, определенных пользователем) посредством операций описания:
* указатель
& ссылка
[] вектор
() функция

и механизма определения структур.


Например:


int* a;
float v[10];
char* p[20]; // вектор из 20 указателей на символ
void f(int);
struct str { short length; char* p; };


Основная идея состоит в том, что описание производного типа отражает его использование.


Например:


int v[10]; // описывает вектор
i = v[3]; // использует элемент вектора
int* p; // описывает указатель
i = *p; // использует указываемый объект


Вся сложность понимания записи производных типов проистекает из того, что операции * и & префиксные, а операции [] () постфиксные, поэтому для формулировки типов в тех случаях, когда приоритеты операций создают затруднения, надо использовать скобки. Например, поскольку приоритет у [] выше, чем у *, то


int* v[10]; // вектор указателей
int (*p)[10]; // указатель на вектор


Большинство людей просто помнят, как выглядят наиболее обычные типы.


Описание каждого имени, вводимого в программе, может оказаться утомительным, особенно если их типы одинаковы. Но можно описывать в одном описании несколько имен. В этом случае описание содержит вместо одного имени список имен, разделенных запятыми. Например, два имени можно описать так:


int x, y; // int x; int y;


При описании производных типов можно указать, что операции применяются только к отдельным именам (а не ко всем остальным именам в этом описании).


Например:


int* p, y; // int* p; int y; НЕ int* y;
int x, *p; // int x; int* p;
int v[10], *p; // int v[10]; int* p;


Мнение автора таково, что подобные конструкции делают программу менее удобочитаемой, и их следует избегать.


<<<  НазадВперед  >>>
 1  2  3  4  5  6  7  8  9 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Описания

Имена

Константы

Экономия Пространства

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь