Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

1.2. Выражения 21

Традиционный кастинг C-стиля

Позвольте exp быть некоторым выражением и позволить T быть типом. Бросать ценность выражения

к типу T мы можем использовать примечание» (T) экспорт», Мы называем это броском C-стиля. Если желаемый тип - имя типа (в противоположность выражению типа), есть дополнительный бросок функционального стиля. У этого есть форма «T (exp)». Некоторые примеры показывают ниже. В обоих случаях целочисленное значение 14 брошено к двойной стоимости 14.0.

интервал кошка = 1 4;

удвойте собаку = (двойная) кошка; //традиционный C-стиль бросил двойную свинью = двойной (кошка); //C ++ функциональный бросок

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

Кастинг к типу более высокой точности или размера часто необходим в формировании expres-язычки. Результаты определенных бинарных операторов зависят от переменных включенных типов. Например, подразделение между целыми числами всегда приводит к результату целого числа trun-cating фракционная часть. Если результат floating-пункта желаем, мы должны бросить операнды прежде, чем выполнить операцию как показано ниже.

международный интервал удваивается дважды дважды

i1 = 1 8; i2 = 1 6; dv1 = i1 / i2; dv2 = двойной (i1) / двойной (i2); dv3 = дважды (i1 / i2);

//у dv1 есть стоимость 1.0//dv2, имеет стоимость 1.125//dv3, имеет стоимость 1.0

То, когда i1 и i2 брошены к, удваивается, подразделение двойной точности выполнено. Когда i1 и i2 не брошены, усеченное подразделение целого числа выполнено. В случае dv3 бросок выполнен после подразделения целого числа, таким образом, точность все еще потеряна.

Явные операторы броска

Кастинг операций может измениться от безопасного до опасного, в зависимости от как подобный

два типа и потеряна ли информация. Например, кастинг короткого к интервалу безопасен, так как никакая информация не потеряна. Кастинг от двойного до интервала более опасен, потому что фракционная часть числа потеряна. Кастинг от двойного*, чтобы обуглиться* опасен, потому что значение преобразования такого указателя, вероятно, изменится с машины на машину. Один важный элемент хорошего проектирования программного обеспечения - то, что программы портативные, означая, что они ведут себя то же самое на различных машинах.

Поэтому C ++ предоставляет многим операторам кастинга, которые делают безопасность из броска намного более явной. Их называют статическим броском, динамическим броском, константа бросила и дает иное толкование броску. Мы обсуждаем только статический бросок здесь и довод «против» - сидр другие, поскольку потребность возникает.

22 Глава 1. C ++ учебник для начинающих

Статический кастинг

Статический кастинг используется, когда преобразование сделано между двумя связанными типами, например числа к числам или указатели на указатели. Его синтаксис дан ниже.

статический бросок <желаемый тип> (выражение) наиболее популярный способ использования для преобразований между числовыми типами. Некоторые из этих преобразований могут включить потерю информации, например преобразование от двойного до интервала. Это преобразование сделано, усекая фракционную часть (не округление). Например, рассмотрите следующее:

дважды

d1 = 3.2;

дважды

d2 = 3.9999;

интервал

i1 = статический бросок <интервал> (d1);

//у i1 есть стоимость 3

интервал

i2 = статический бросок <интервал> (d2);

//у i2 есть стоимость 3

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

Неявный кастинг

Есть много случаев, где программист не просил явный бросок, но изменение типов требуется. Во многих из этих случаев, C ++ выполняет неявный бросок. Таким образом, компилятор автоматически вставляет бросок в произведенный машиной кодекс. Например, когда числа различных типов вовлечены в операцию, компилятор автоматически бросает к более сильному типу. C ++ позволяет назначение, которое неявно теряет информацию, но компилятор обычно выпускает mes предупреждения - мудрец.

интервал

i = 3;

дважды

d = 4.8;

дважды

d3 = я / d;

//d3 = 0.625 = двойной (i)/d

интервал

я 3 = d3;

//i3 = 0 = интервал (d3)

//Предупреждение! Назначение может потерять информацию

Общее правило с кастингом состоит в том, чтобы «избежать рискованных действий». Если поведение компилятора относительно неявного кастинга стоимости сомнительно, то мы являемся самыми в безопасности в использовании явного броска. Выполнение так ясно дает понять наши намерения.