специальное правило static_cast

Я прочитал правила static_cast.

static_cast< new_type > ( expression )

... ...

5) Если существует неявная последовательность преобразования из new_type в тип выражения, которая не включает lvalue-to-rvalue, массив-указатель, функцию-указатель, нулевой указатель, нулевой указатель члена или логическое преобразование, то static_cast может выполнять обратное этому неявному преобразованию;

Вопрос Может ли кто-нибудь объяснить или написать пример для этого правила?


person Khurshid    schedule 27.10.2014    source источник
comment
нет Сделай мою домашнюю работу за меня вопросы.   -  person Rocky Pulley    schedule 27.10.2014
comment
Это не моя домашняя работа :) Я не могу понять это правило.   -  person Khurshid    schedule 27.10.2014
comment
@Triton: в этом вопросе нет ничего плохого.   -  person Lightness Races in Orbit    schedule 27.10.2014


Ответы (1)


Вот неявное преобразование:

int n;
void *p = &n;   // OK: int* to void* is an implicit converion

Обратное преобразование не может быть выполнено неявно:

int *pi = p;    // ERROR

но по этому правилу можно сделать с static_cast:

int *pi = static_cast<int*>(p);  // OK

В правиле перечислены некоторые неявные преобразования, которые нельзя отменить с помощью static_cast:

bool b = p;                       // OK: void* to bool can be implicit
void *p2 = static_cast<void*>(b); // ERROR: can't be undone with static_cast
person Mike Seymour    schedule 27.10.2014