Читайте также: |
|
В смешанных выражениях, содержащих основные типы, компилятор автоматически организует приведение типов там, где необходимо, но мы можем также насильно вызвать преобразование из одного типа в другой, используя явное приведение типов (explicit cast). Для того, чтобы привести значение выражения к заданному типу, мы пишем:
static_cast<the_type_to_convert_to>(expression)Ключевое слово static_cast отражает тот факт, что приведение типа осуществляется и контролируется статически, т.е., на этапе компиляции программы. Позже, когда мы будем иметь дело с классами, нам встретится, так называемое, динамическое приведение типов, когда контроль типов выполняется динамически, т.е., во время выполнения программы. Действие операции явного приведения типа состоит в том, чтобы результат оценивания выражения (expression) преобразовать в тип, указанный в угловых скобках. Выражение может быть любым, от одиночной переменной, до сложного выражения со множеством вложенных скобок.
Вот пример использования static_cast<>():
double value1 = 10.5;double value2 = 15.5;int whole_number = static_cast<int>(value1) + static_cast<int>(value2);Заметим, что операция явного приведения типа не изменяет значений переменных value1 и value2 (используется временная память). Хотя в нашем случае информация и теряется, но компилятор “предполагает”, что программист знает, что делает, когда применяет явное приведение типов.
Мы можем написать явное приведение типа к любому стандартному типу, но нужно осознавать возможную потерю информации. Если мы приводим float или double к long, например, то потеряем дробную часть. Если double к float, то будет потеря точности, поскольку переменная типа float имеет точность 7 цифр, а double - 15. Даже в случае преобразования типов в применении к целочисленным типам содержит потенциальную угрозу потери данных, в зависимости от используемого диапазона значений. Например, значение типа long может превысить максимум, допустимый для типа short, так что переход от long к short может быть некорректным.
В общем, приведения типов, по возможности, следует избегать.
C++ имеет еще три других вида операций приведения типов, но не таких общих, как static_cast<>():
Дата добавления: 2015-11-16; просмотров: 46 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Правила приведения типов операндов | | | Ii) Указатели на элементы массива |