static_cast的特殊规则

时间:2014-10-27 16:06:37

标签: c++ language-lawyer

我已阅读static_cast规则。

static_cast< new_type > ( expression )

...    ...

5)如果存在从new_type到表达式类型的隐式转换序列,       不包括左值到右值,数组到指针,函数到指针,       空指针,空成员指针或布尔转换,然后static_cast即可      执行隐式转换的反转;

问题有人可以为此规则解释或编写示例吗?

1 个答案:

答案 0 :(得分:2)

这是隐式转换:

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