Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Long double




Double

Double

Double double

 
 


double

double double

 
 


double double

 
 


 
 


Стандартом С++ описываются 4 специальных оператора, предназначенные для приведения типов (преобразования выражения из одного типа в другой): static_cast < тип > (выражение)Преобразует выражение к указанному типу, без каких-либо проверок во время выполнения программы. В MSDN рекомендуется использовать этот оператор для приведения числовых типов - например, из enum или int в float Пример:
Цитата
char ch; int i = 65; float f = 2.5; double dbl; enum eSomeEnum{ONE=0, TWO, THREE, SIXTY_FIVE=65} e; ch = static_cast< char>(i); // int to char dbl = static_cast< double>(f); // float to double e = static_cast< eSomeEnum>(e); // enum to int
dynamic_cast < тип > (выражение) Преобразует выражение (ссылку на объект класса или указатель) к указанному типу, с проверкой во время выполнения программы, является ли выражение ссылкой или указателем на объект класса, эквивалентного или производного от того, что указан в треугольных скобках. Для возможности использования этой функции, в проекте должна присутствовать поддержка RTTI (опция компилятора /GR). В случае, если проверка показала, что выражение не является объектом класса тип или производного класса (а также в случае неоднозначных ситуаций вроде дублирования одного и того же базового класса двумя родительскими классами, или при использовании виртуальных базовых классов) - генерируется исключение RTTI (которое можно "поймать" и обработать). Пример:
class B {... }; class C: public B {... }; class D: public C {... }; void f(D* pd) { C* pc = dynamic_cast< C*>(pd); B* pb = dynamic_cast< B*>(pd); }

reinterpret_cast < тип > (выражение)
Позволяет преобразовать выражение, являющееся указателем любого типа, к указанному типу (являющемуся также указателем любого типа, либо числовым типом - int, long). Чаще всего используется для приведения указателя на один тип к указателю на другой тип без необходимости промежуточного преобразования к void*.
Пример:

 
int *iptr; char *chptr = reinterpret_cast< char *> (iptr);
В MSDN рекомендуется использовать этот оператор для построения хэш-функций по указателям на объект:
// expre_reinterpret_cast_Operator.cpp // compile with: /EHsc #include < iostream> unsigned short Hash(void *p) // Returns a hash code based on an address { unsigned int val = reinterpret_cast< unsigned int>(p); return (unsigned short)(val ^ (val >> 16)); } using namespace std; void main() { int a[20]; for (int i = 0; i < 20; i++) cout << Hash(a + i) << endl; }
const_cast < тип > (выражение) Используется для удаления атрибутов "const", "volatile" и "__unaligned" из выражения. Например: Цитата
const char *cptr; char *ptr = const_cast < char*> (cptr);
Наиболее очевидной необходимость оператора const_cast является в теле функций, объявленных с модификатором const - в таких функциях "не разрешено" выполнять никаких операций над текущим объектом (this), модифицирующих его каким-либо образом. Для обхода этого ограничения, MSDN рекомендует использовать оператор const_cast: Цитата
// expre_const_cast_Operator.cpp, compile with: /EHsc #include < iostream> using namespace std; class CCTest { public: void setNumber(int); void printNumber() const; private: int number; }; void CCTest::setNumber(int num) { number = num; } void CCTest::printNumber() const { cout << " Before: " << number; const_cast< CCTest * >(this)->number--; cout << " After: " << number; } void main() { CCTest X; X.setNumber(8); X.printNumber();}

 




Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 264; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.