Явное приведение типов в стиле Си и С++ [дубликат]

264
01 февраля 2018, 18:30

На данный вопрос уже ответили:

  • static_cast и (int) - это одно и то же? 3 ответа

Узнал о способах явного приведения типов в С++ и не совем понял чем static_cast <int *> (p) отличается от (int *) p к примеру... Допустимо и то и то - а в чем разница не знаю.

Answer 1

Разница между (int *) и static_cast<int *> в С++ - гигантская. Каст в стиле С, это последовательные попытки применения

  • const_cast
  • static_cast
  • static_cast и потом const_cast
  • reinterpret_cast
  • reinterpret_cast и потом const_cast

Какой первый подойдет - тот и применяется.

Например, static_cast не позволит вам снять с указателя константность, а обычный С-каст - позволит.

const int *p = 0;
static_cast<int *>(p); // Ошибка
(int *) p;             // OK

В дополнение к этому, приведение типа в стиле С может корректно приводить указатель на объект класса вверх и вниз по иерархии даже тогда, когда базовый класс недоступен, т.е. игнорируя private и protected наследование (при условии, что приведение однозначно и нет виртуального наследования)

class A {};
class B : A {};
B *pb = 0;
static_cast<A *>(pb); // Ошибка
(A *) p;              // OK
READ ALSO
Как добавить Interface в пакет?

Как добавить Interface в пакет?

Установил новую версию IntelliJ Idea (Community Edition 20173

286
Хранение данных в Application Android

Хранение данных в Application Android

Пишу игру под Аndroid

249
Авторизация с Selenium WebDriver через cookie

Авторизация с Selenium WebDriver через cookie

Необходимо реализовать авторизацию с Selenium WebDriver так что-бы не вводить логин и пароль для сайтов каждый раз при запускеТоесть нужно сэмитировать...

420
Параметр ServletContextHandler.SESSIONS в Jetty

Параметр ServletContextHandler.SESSIONS в Jetty

ЗдравствуйтеПодскажите, пожалуйста, на что влияет параметр options конструктора ServletContextHandler(int options)

254